
    瞤d%                        d dl Z ddlmZ d dlmZ d dlmZ d dlZd dlm	Z	m
Z
 d dlZej                            ej                            ej                            e                    d                    dz   Zedz   Z ej                    d	z   Z ee           d
 Zd Zd Z G d de j                  Zedk    r e j                     dS dS )    N   )EvolTree)random)deepcopy)loaddumpz/ete_evol_data/z/protamine/PRM1/z/bin/c                     |                                  D ]7}t          t                      dz            dz  r|                                 8dS )zI
    swap randomly tree, to make sure labelling as paml is well done
    d      N)iter_descendantsintrndswap_childrentreenodes     3lib/python3.11/site-packages/ete3/test/test_evol.pyrandom_swapr   7   sW     %%'' ! !c	??1 	!   ! !    c                 r    |                                  D ]!}t          |d          st          d          "dS )z4
    check each node is labelled with a node_id
    node_idz$Error, unable to label with paml idsT)r   hasattr	Exceptionr   s     r   check_annotationr   ?   sN     %%'' E Ei(( 	ECDDD	E4r   c                 2   d }t           j                            |           \  }}|r ||           r| S nat           j        d                             t           j                  D ]1}t           j                            ||           } ||          r|c S 2d S )Nc                 ~    t           j                            |           ot          j        | t           j                  S )N)ospathisfileaccessX_OK)fpaths    r   is_exezwhich.<locals>.is_exeI   s)    w~~e$$B5"')B)BBr   PATH)r   r   splitenvironpathsepjoin)programr#   r"   fnamer   exe_files         r   whichr,   H   s    C C C 7==))LE5  6'?? 	N	 Jv&,,RZ88 	  	 Dw||D'22Hvh   4r   c                   N    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZdS )TestEvolEvolTreezTests EvolTree basicsc                    g d}|D ]}t          d          }|                    |           |                     |dz  j        d           |                     |dz  j        d           |                     |dz  j        d           d S )	N)z-  3 6
seq1	yo
ATGATG
seq2
CTGATG
seq3
ATGTTT
z4  3 6
>seq1
ATGATG
>seq2	|prout
CTGATG
>seq3
ATGTTT
z(>seq1 
ATGATG
>seq2
CTGATG
>seq3
ATGTTT
((seq1,seq2),seq3);seq1ATGATGseq2CTGATGseq3ATGTTT)r   link_to_alignmentassertEqualnt_sequence)self
alignmentsalits       r   test_paml_parserz!TestEvolEvolTree.test_paml_parserZ   s    H H H
  	A 	AC.//A$$$a&j5x@@@a&j5x@@@a&j5x@@@@	A 	Ar   c                    t          t          dz             }d|_        |                    t          dz   d           |                    t          dz   d           |                    t          dz   d           |                    t          d	z   d
           |                    t          dz   d           |                    t          dz              |                     t          |j                                                  t          g d                     |                     t          |
                    d          j                  d           |                     |
                    d          j        d           |                     dt          |
                    d                    v            |                     dt          |
                    d                    v            |                     dt          |
                    d                    v           |                     dt          |
                    d                    v            d S )Ntree.nwprotamine/PRM1/paml/paml/fb/fb.outfbpaml/M1/M1.outM1paml/M2/M2.outM2zpaml/M7/M7.outM7zpaml/M8/M8.outM8alignments.fasta_ali)rC   rE   rG   rH   rI      gTproportionszp2=z #193)r   WRKDIRworkdirlink_to_evol_modelr7   r8   sorted_modelskeyslenget_evol_modelbrancheslnLassert_strr:   r   s     r   test_load_modelz TestEvolEvolTree.test_load_modele   s   )+,,-*:!:DAAA*:!:DAAA*:!:DAAA*:!:DAAA*:!:DAAA*@!@AAA 1 1 3 344 > > >??	A 	A 	Ad11$77@AA3GGG,,T226EEE]c$*=*=d*C*C&D&DDEEEUc$"5"5d";";<<<===]#d.A.A$.G.G*H*HHIIIWD$7$7$=$= > >>?????r   c                 F   t          t          dz             }d|_        |                    t          dz   d           |                    t          dz   d           |                     t          |                    dd          d          t          dd                     d S )	Nr@   rA   rD   rE   rF   rG      g>ޗ;>)r   rM   rN   rO   r8   roundget_most_likelyrY   s     r   test_get_most_likelyz%TestEvolEvolTree.test_get_most_likelyw   s    )+,,-*:!:DAAA*:!:DAAAt33T$??CC5b99	; 	; 	; 	; 	;r   c                     t          t          dz             }d|_        t          |           |                    t          dz   d           |                     t          |                     d S )Nr@   rA   rB   rC   )r   rM   rN   r   rO   rW   r   rY   s     r   test_labelling_treez$TestEvolEvolTree.test_labelling_tree   sf    )+,,-D*:!:DAAA%t,,-----r   c                    t          t          dz             }d|_        |                    t          dz   d           t	          |                    d                    }||j        d<   |                     t          |                    d                    t          |                    d                               d S )Nr@   rA   rB   rC   zfb.a)	r   rM   rN   rO   r   rT   rQ   r8   rX   )r:   r   fbas      r   test_deep_copyzTestEvolEvolTree.test_deep_copy   s    )+,,-*:!:DAAA++D1122"VT008899T006677	 	 	 	 	r   c           
      d   t          t          dz             }d|_        |                    t          dz              |                    t          dz   d           dddddddd}d	d	d	d	d	d	d	d}|                    d          }	 d
d l}|                    ddddgddgd           |                    dd|dg ddg d           |                    ddddgddg|           |                     t          t          |j        d                             d           d S # t          $ r Y d S w xY w)Nr@   rA   rJ   rF   M2.agreyblack)NSRXzRX+CNzCN+PSzPS+whiter   Fstick      ?g333333?redzugliest face)upkindhlines
hlines_colheadercurveT)g      @ro   g      @g      ?z)Many lines, error boxes, background black)orangeyellowrp   cyan)rq   rr   colorserrorsrs   ru   rt   bar)rq   rr   rs   rt   rz   histfacez.<class 'ete3.treeview.faces.SequencePlotFace'>)r   rM   rN   r7   rO   rT   PyQt4set_histfacer8   rX   type
propertiesImportError)r:   r   colcol2M2ar~   s         r   test_call_histfacez#TestEvolEvolTree.test_call_histface   s   )+,,-*@!@AAA*:!:FCCCgggg? ? wwww@ @ !!&))	OLLL Wc3Z*/  P P PWT';';';'R)L)L)L  N N N Uc3Z*1&)9  F F FScnZ&@!A!ABBMO O O O O  	 	 	DD	s   D! !
D/.D/c                    t          d          r-t          d          }|                    d           |                    d           |                     d|                    d          j        v            |                     d|                    d          j        v            |                     d|                    d          j        v            |                     d|                    d          j        v            |                     |                                d	         j        d	k               d S d S )
Ncodemlr0   z'>seq1
ATGCTG
>seq2
ATGCTG
>seq3
TTGATG
rC   CODONMLz
Time used:zend of tree filerV   r   )	r,   r   r7   	run_modelrW   rT   runget_descendantswrY   s     r   test_run_codemlz TestEvolEvolTree.test_run_codeml   s!   ?? 	:122D""#RSSSNN4   LLd&9&9$&?&?&CCDDDLL)<)<T)B)B)FFGGGLL+t/B/B4/H/H/LLMMMLL$"5"5d";";"??@@@LL--//24q899999	: 	:r   c                 b   t          d          rt          d          }|                    d           |                    d           t	          |                    d          j                   |                     d|                    d          j        v            |                     d|                    d          j        v            |                     d|                    d          j        v            |                     d|                    d          j        v            d S d S )	NSlrr0   z0>seq1
CTGATTCTT
>seq2
CTGATTCTT
>seq3
ATGATTCTT
SLRzSitewise Likelihood RzPositively selected szConserved sitesrV   )r,   r   r7   r   printrT   r   rW   rY   s     r   test_run_slrzTestEvolEvolTree.test_run_slr   s   << 	B122D""#[\\\NN5!!!$%%e,,0111LL0D4G4G4N4N4RRSSSLL0D4G4G4N4N4RRSSSLL*d.A.A%.H.H.LLMMMLL$"5"5e"<"<"@@AAAAA	B 	Br   c                    t           dz   }t          |dz             }|                     |                                d           |                    g dddgz   dgdz  d	gdz  z   d
           |                     |                                                    dd          d           |                    d |                                D             dgt          |                                          z  d           |                     |                                                    dd          d           d S )Nz/S_example/r@   zG((Hylobates_lar,(Gorilla_gorilla,Pan_troglodytes)),Papio_cynocephalus);)   r      r      z#1r   z#2T)marksverbose  zQ((Hylobates_lar#2,(Gorilla_gorilla#1,Pan_troglodytes#1)#1)#2,Papio_cynocephalus);c                     g | ]	}|j         
S  )r   ).0xs     r   
<listcomp>z7TestEvolEvolTree.test_marking_trees.<locals>.<listcomp>   s    CCCqCCCr   F)DATAPATHr   r8   write	mark_treereplacer   rS   )r:   	TREE_PATHr   s      r   test_marking_treesz#TestEvolEvolTree.test_marking_trees   sS   },	Y.//b	d 	d 	d			QF*4&(dVAX2EtTTT--c266l	n 	n 	nCCD,@,@,B,BCCC!dS$*>*>*@*@%A%AA5 	 	R 	R 	R--c266b	d 	d 	d 	d 	dr   c                 J   t          t          dz             }t          dz   |_        |                    t          dz              |                    t          dz   d           t          dd          }t          ||           |                                 t          dd          }t          |          }|                                 t          j        d           t          j        t          |                    d                                                                                              }t          j        t          |                    d                                                                                              }|                     ||           d S )	Nr@   z/protamine/PRM1/paml/rJ   rF   rf   zblip.pikwbrb)r   rM   r   rN   r7   rO   openr   closer   r   removehashlibmd5rX   rT   encode	hexdigestr8   )r:   r   outtree2tree2_outputtree_outputs         r   test_picklingzTestEvolEvolTree.test_pickling   sM   *++"99)? ?@@@)9 96BBB:t$$T3		:t$$S				
	*{3u';';F'C'C#D#D#K#K#M#MNNXXZZ{3t':':F'C'C#D#D#K#K#M#MNNXXZZl33333r   N)__name__
__module____qualname____doc__r>   rZ   r_   ra   rd   r   r   r   r   r   r   r   r   r.   r.   W   s        	A 	A 	A@ @ @$; ; ;. . .  O O O8	: 	: 	:	B 	B 	Bd d d4 4 4 4 4r   r.   __main__)unittestevolr   r   r   copyr   r   six.moves.cPickler   r   r   r   abspathr%   realpath__file__r   rM   getcwdBINDIRr   r   r   r,   TestCaser.   r   mainr   r   r   <module>r      s`  R                          				 ( ( ( ( ( ( ( ( 7??27==)9)9()C)CDDQGHHIZZ	&	&	w	 f! ! !    F4 F4 F4 F4 F4x( F4 F4 F4R zHMOOOOO r   