o
    Rŀg,                     @   sJ   d Z ddlZedZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )z)Methods for parsing baseml results files.    Nz
-*\d+\.\d+c           
      C   s  t d}t d}d}| D ]o}t|}dd |D }||}|dur,|d|d< d	|v r=t|dkr=|d
 |d< qd|v rZ|rZ|d
 |d< ||}	|	durYt|	d}qd|v rkt|dkrk|d
 |d< qt d|dur}d|v r}| |d< q||fS )zEParse the basics that should be present in most baseml results files.z+BASEML \(in paml version (\d+\.\d+[a-z]*).*z!lnL\(ntime:\s+\d+\s+np:\s+(\d+)\)c                 S      g | ]}t |qS  float.0valr   r   P/var/www/html/myenv/lib/python3.10/site-packages/Bio/Phylo/PAML/_parse_baseml.py
<listcomp>       z parse_basics.<locals>.<listcomp>N   versionzln Lmaxr   zlnL maxz
lnL(ntime:lnLztree lengthz\(+:tree)	recompileline_floats_refindallmatchgrouplenintstrip)
linesresults
version_renp_re
num_paramslineline_floats_resline_floatsversion_resnp_resr   r   r
   parse_basics   s0   




r%   c                 C   s:   i }t | ||}t| |}t| |}t| |}||d< |S )z+Parse the various parameters from the file.
parameters)parse_parameter_listparse_kappasparse_ratesparse_freqs)r   r   r   r&   r   r   r
   parse_parameters7   s   


r+   c                 C   s|   t t| D ]5}| | }t|}dd |D }t||kr;| |d< d| |d  v r8| |d  }| |d<  |S q|S )zMParse the parameters list, which is just an unlabeled list of numeric values.c                 S   r   r   r   r   r   r   r
   r   H   r   z(parse_parameter_list.<locals>.<listcomp>zparameter listzSEs for parameters:r      SEs)ranger   r   r   r   )r   r&   r   line_numr    r!   r"   SEs_liner   r   r
   r'   B   s   
r'   c                 C   s   d}| D ]t}t |}dd |D }d|v rd}q|ra|ratd|}|du r;t|dkr4|d	 |d
< n||d
< d}q|ddu rFi |d< |d}|r`|d	 |d |d |d d|d |< qd|v rx|rxt|dkrt|d	 |d
< q||d
< q|S )zParse out the kappa parameters.Fc                 S   r   r   r   r   r   r   r
   r   d   r   z parse_kappas.<locals>.<listcomp>zParameters (kappa)Tz\s(\d+\.\.\d+)Nr   r   kappabranchesr,      )tr1   TSTVzkappa under)r   r   r   r   r   getr   )r   r&   kappa_foundr    r!   r"   
branch_resbranchr   r   r
   r(   ^   s:   

	r(   c                 C   s8  d}d}| D ]}t |}dd |D }d|v r|r||d< qd|v r*|r*||d< qd|v rAd	g i|d
< |r>|d |d
 d< d}q|r[|r[|d
 d	 | t|d
 d	 dkrZd}qd|v rh|rh|d |d< qd|v ru|ru|d |d< qd|v rg |d< d}q|r|r|d | t|d t|d krd}q|S )zParse the rate parameters.Fc                 S   r   r   r   r   r   r   r
   r      r   zparse_rates.<locals>.<listcomp>zRate parameters:zrate parameterszrate: rateszmatrix QmatrixzQ matrixr   zaverage Ts/TvT   alpharhoztransition probabilitiesztransition probs.)r   r   appendr   )r   r&   Q_mat_foundtrans_probs_foundr    r!   r"   r   r   r
   r)      s@   


r)   c                 C   s  t d}d}d}| D ]}t|}dd |D }d|v r>|r>i }|d |d< |d |d	< |d
 |d< |d |d< ||d< qd|v rEd}qd|v rN|sNd}q|rs|rsi }|d |d< |d |d	< |d
 |d< |d |d< ||d< d}qd|v r~|r~||d< qd|v ri |d< d}q|r|rt d|}	t|	d}
ddi}|dd |d< t|dkr|d |d |d |d d|d< ||d |
< q||}|durt|d}d|d | d< d}q|S )zParse the basepair frequencies.zNote: node (\d+) is root.Fc                 S   r   r   r   r   r   r   r
   r      r   zparse_freqs.<locals>.<listcomp>zBase frequenciesr   Tr   Cr,   Ar3   Gzbase frequencieszbase frequency parametersTzfreq: zrate frequenciesz#(frequency parameters for branches)nodeszNode \#(\d+)rootNr=   zfrequency parameters         )rC   rD   rE   rF   )r   r   r   r   r   r   r   r   )r   r&   root_rebranch_freqs_foundbase_freqs_foundr    r!   r"   base_frequenciesnode_resnode_numnoderoot_res	root_noder   r   r
   r*      sd   



	

r*   )
__doc__r   r   r   r%   r+   r'   r(   r)   r*   r   r   r   r
   <module>   s   
(+3