
    瞤dB                         d dl mZ d dl mZ d dlZddlmZmZ ddlT  G d d	ej                  Z	e
d
k    r ej                     dS dS )    )absolute_import)print_functionN   )	PhyloTreeSeqGroup   )*c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_phylo_modulec                    d}d}t          |          }t          |d          }t          d|d          }|                                D ]5}|                     |j        |                    |j                             6|                    |d           |                                D ]5}|                     |j        |                    |j                             6dS )	z, Phylotree can be linked to SeqGroup objectsaM  
         >seqA
         MAEIPDETIQQFMALT---HNIAVQYLSEFGDLNEALNSYYASQTDDIKDRREEAH
         >seqB
         MAEIPDATIQQFMALTNVSHNIAVQY--EFGDLNEALNSYYAYQTDDQKDRREEAH
         >seqC
         MAEIPDATIQ---ALTNVSHNIAVQYLSEFGDLNEALNSYYASQTDDQPDRREEAH
         >seqD
         MAEAPDETIQQFMALTNVSHNIAVQYLSEFGDLNEAL--------------REEAH
        a  
         4 76
      seqA   MAEIPDETIQ QFMALT---H NIAVQYLSEF GDLNEALNSY YASQTDDIKD RREEAHQFMA
      seqB   MAEIPDATIQ QFMALTNVSH NIAVQY--EF GDLNEALNSY YAYQTDDQKD RREEAHQFMA
      seqC   MAEIPDATIQ ---ALTNVSH NIAVQYLSEF GDLNEALNSY YASQTDDQPD RREEAHQFMA
      seqD   MAEAPDETIQ QFMALTNVSH NIAVQYLSEF GDLNEAL--- ---------- -REEAHQ---

             LTNVSHQFMA LTNVSH
             LTNVSH---- ------
             LTNVSH---- ------
             -------FMA LTNVSH
        iphylipformatz(((seqA,seqB),seqC),seqD);fasta)	alignment
alg_formatN)r   r   
get_leavesassertEqualsequenceget_seqnamelink_to_alignment)selfr   r   alg1alg2tls          8lib/python3.11/site-packages/ete3/test/test_phylotree.pytest_link_alignmetsz%Test_phylo_module.test_link_alignmets)   s    	  	2222ePWXXX 	? 	?AQZaf)=)=>>>> 	
dyAAA 	? 	?AQZaf)=)=>>>>	? 	?    c                 Z   t          d          }|                                }|                    dd          }|                     |j        d           |                    dd          }|                     |j        d           |                    dd          }|                     |j        d           |                    dd          }|                     |j        d           |                                D ]F}|                                s0|t          ||||g          vr|                     |j        d	           G|D ]'}|                     |j        j        |j	                   (t                      }	|D ]}|j        |k    r|                     |j
        t          g d
                     |                     |j        t          g d                     |                     |j        t                                 |                     |j        |j                   |                     |j
        |j                   |j        |k    r|                     |j
        t          dg                     |                     |j        t          dg                     |                     |j        t                                 |                     |j        |j                   |                     |j
        |j                   |j        |k    r|                     |j
        t          g d                     |                     |j        t          g d                     |                     |j        t                                 |                     |j        |j                   |                     |j
        |j                   X|j        |k    r|                     |j
        t          dg                     |                     |j        t          dg                     |                     |j        t                                 |                     |j        |j                   |                     |j
        |j                   t          |j
                  }
t          |j                  }|
                                 |                                 |	                    t%          t'          t%          |
          t%          |          g                               t          ddg          t          g d          gt          ddg          t          g d          gt          dg          t          ddg          gt          dg          t          dg          gt          dg          t          dg          gt          g d          t          dg          gt          ddg          t          dg          gt          ddg          t          dg          gt          dg          t          dg          gg	}t                      }|D ]\  }}t          |          }
t          |          }|
                                 |                                 |                    t%          t'          t%          |
          t%          |          g                               |                     ||	           t          d          }|dz  }|                    d          }|                     |                    |d          j        d           |                     |                    |d          j        d           t          d          }|dz  }|                    d          }|                     |                    |d          j        d	           |                     |                    |d          j        d           t          d          }|dz  }|                    d          }|                     |                    |d          j        d	           |                     |                    |d          j        d	           d S )!z/ Tests ortholgy prediction using the sp overlap((Dme_001,Dme_002),(((Cfa_001,Mms_001),((((Hsa_001,Hsa_003),Ptr_001),Mmu_001),((Hsa_004,Ptr_004),Mmu_004))),(Ptr_002,(Hsa_002,Mmu_002))));Hsa_001Hsa_004DDme_001Dme_002Hsa_002Hsa_003SPtr_001r#   Mmu_001r)   Mmu_004Ptr_004r$   	r)   Cfa_001r,   r#   r0   r$   r/   r-   Mms_001r(   Ptr_002Mmu_002)r,   r2   r(   r)   r5   r#   r0   r$   r/   r-   r3   r6   r3   r2   )r)   r,   r#   r0   r$   r/   r-   r5   r6   )r)   r#   r,   r-   r0   r/   r,   3(((SP1_a, SP2_a), (SP3_a, SP1_b)), (SP1_c, SP2_c));SP1_a皙?SP3_aSP1_c      ?      ?N)r   get_descendant_evol_eventsget_common_ancestorr   evoltypetraverseis_leafsetnodeetype
inparalogsoutparalogs	orthologsout_seqsin_seqslistsortaddtuplesortedget_my_evol_events)r   r   eventsdup1dup2dup3dup4rD   erH   key1key2orthologiesexpected_orthologsl1l2seeds                    r   &test_get_sp_overlap_on_all_descendantsz8Test_phylo_module.test_get_sp_overlap_on_all_descendantsT   s      c  d  d --// $$Y	::,,,$$Y	::,,,$$Y	::,,,$$Y	::,,, JJLL 	5 	5D<<>> 5sD$d#;<<<<  444  	7 	7AQV_ag6666 EE	 	I 	IAv~~  s3_3_3_/`/`aaa  4U4U4U0V0VWWW  cee444  
;;;  qy99994  sI;/?/?@@@  YK0@0@AAA  cee444  
;;;  qy99994  s  4W  4W  4W  0X  0X  Y  Y  Y  4U4U4U0V0VWWW  cee444  
;;;  qy99994  sI;/?/?@@@  YK0@0@AAA  cee444  
;;;  qy9999 AL))AK((				eFE$KKt+E$F$FGGHHHH )Y'((#  /s  /s  /s  +t  +t  u)Y'((#.{.{.{*|*|})sIy#9::;)sI;//0)sI;//022233S)5E5EF)Y'((#yk*:*:;)Y'((#yk*:*:;)sI;//0
 !UU  	N 	NEBr88D88DIIKKKIIKKK""5teDkk0J)K)K#L#LMMMM 	+Y777 KLLG--c22..tW==FLLL..tW==FLLLKLLG--c22..tW==FLLL..tW==FLLLKLLG((....tW==FLLL..tW==FLLLLLr    c                 :   t          d          }|                    d          d         }|                                }|                    dd          }|                     |j        d           |                    dd          }|                     t          |d	                      |                    dd
          }|                     |j        d           |                    dd          }|                     |j        d           |}|rM|                                s0|t          ||||g          vr|                     |j        d           |j
        }|M|D ]'}	|                     |	j        j        |	j                   (t                      }
|D ]+}	|	j        |k    r|                     |	j        t          ddg                     |                     |	j        t          dg                     |                     |	j        t                                 |                     |	j        t          g d                     |                     |	j        t          g d                     |	j        |k    r|                     |	j        t          g d                     |                     |	j        t          d
g                     |                     |	j        t                                 |                     |	j        t          g d                     |                     |	j        t          g d                     |	j        |k    r|                     |	j        t          dg                     |                     |	j        t          dg                     |                     |	j        t                                 |                     |	j        t          dg                     |                     |	j        t          dg                     t%          |	j                  }t%          |	j                  }|                                 |                                 |
                    t+          t-          t+          |          t+          |          g                               -t          ddg          t          g d          gt          ddg          t          g d          gt          ddg          t          dg          gt          ddg          t          dg          gg}t                      }|D ]\  }}t%          |          }t%          |          }|                                 |                                 |                    t+          t-          t+          |          t+          |          g                               |                     ||
           t          d          }|dz  }|                    d          }|                     |                    |d          j        d           |                     |                    |d          j        d           t          d          }|dz  }|                    d          }|                     |                    |d          j        d           |                     |                    |d          j        d           t          d          }|dz  }|                    d          }|                     |                    |d          j        d           |                     |                    |d          j        d           dS )z+ Tests ortholgy prediction using sp overlapr"   r#   r   r   r$   r%   r&   r'   r@   r(   r)   r*   r+   r.   )r)   r#   r$   r1   r4   )r(   r)   r#   r$   r3   r2   r-   r,   r7   r8   r9   r:   r;   r<   r=   N)r   search_nodesrP   r?   r   r@   
assertTruehasattrrB   rC   uprD   rE   rF   rG   rH   rJ   rI   rK   rL   rM   rN   rO   )r   r   r]   rQ   rR   rS   rT   rU   rD   rV   rH   rW   rX   rY   rZ   r[   r\   s                    r   test_get_sp_overlap_on_a_seedz/Test_phylo_module.test_get_sp_overlap_on_a_seed   s      c  d  d ~~9~--a0((** $$Y	::,,, $$Y	::GD*555666$$Y	::,,,$$Y	::,,,  	<<>> 5sD$d#;<<<<  4447D	  	  	7 	7AQV_ag6666 EE	 	I 	IAv~~  sIy3I/J/JKKK  YK0@0@AAA  cee444  C0\0\0\,],]^^^  S1R1R1R-S-STTTT4  s3V3V3V/W/WXXX  YK0@0@AAA  cee444  C  1T  1T  1T  -U  -U  V  V  V  S1R1R1R-S-STTTT4  sI;/?/?@@@  YK0@0@AAA  cee444  C,<,<===  S)-=-=>>>> AL))AK((				eFE$KKt+E$F$FGGHHHH )Y'((#.].].]*^*^_)Y'((#.P.P.P*Q*QR)Y'((#yk*:*:;)Y'((#yk*:*:;	 !UU  	N 	NEBr88D88DIIKKKIIKKK""5teDkk0J)K)K#L#LMMMM 	+Y777 KLLG((--..tW==FLLL..tW==FLLLKLLG((....tW==FLLL..tW==FLLLKLLG((....tW==FLLL..tW==FLLLLLr    c                    d}d}t          |          }t          |          }|                    |          \  }}d}|                     |                    dgd          t          |                              dgd                     dS )	zE Tests ortholgy prediction based on the species reconciliation methodzb((Dme_001,Dme_002),(((Cfa_001,Mms_001),((Hsa_001,Ptr_001),Mmu_001)),(Ptr_002,(Hsa_002,Mmu_002))));z'((((Hsa, Ptr), Mmu), (Mms, Cfa)), Dme);a  ((Dme_001:1,Dme_002:1)1:1[&&NHX:evoltype=D],(((Cfa_001:1,Mms_001:1)1:1[&&NHX:evoltype=S],((Hsa_001:1,Ptr_001:1)1:1[&&NHX:evoltype=S],Mmu_001:1)1:1[&&NHX:evoltype=S])1:1[&&NHX:evoltype=S],((Mms:1[&&NHX:evoltype=L],Cfa:1[&&NHX:evoltype=L])1:1[&&NHX:evoltype=L],(((Hsa:1[&&NHX:evoltype=L],Ptr_002:1)1:1[&&NHX:evoltype=L],Mmu:1[&&NHX:evoltype=L])1:1[&&NHX:evoltype=L],((Ptr:1[&&NHX:evoltype=L],Hsa_002:1)1:1[&&NHX:evoltype=L],Mmu_002:1)1:1[&&NHX:evoltype=S])1:1[&&NHX:evoltype=D])1:1[&&NHX:evoltype=L])1:1[&&NHX:evoltype=D])[&&NHX:evoltype=S];r@   	   r   )featuresr   N)r   	reconciler   write)r   gene_tree_nwspecies_tree_nwgenetreesptree
recon_treerQ   expected_recons           r   test_reconciliationz%Test_phylo_module.test_reconciliation)  s    {C\**?++%//77
F w)):,q)AA9^C\C\CbCbmwlx  ABCb  DC  DC  	D  	D  	D  	D  	Dr    c                 "   t          d          }ddddddd}|                    dd          }|                     |                    |          d           |                    d	d
          }|                     |                    |          d           |                    dd          }|                     |                    |          d           |                    dd          }|                     |                    |          d           |                    d
          d         }|xj        dz  c_        |                     |                    |          |           |                     |                                t          |	                                                     |                     t          d |
                                D                       t          |	                                                     dS )z Test several things r"   r   r         )HsaPtrMmuMmsCfaDmer#   r$   r&   r'   r(   r)   r`   r   gffffff@c                     g | ]}|S  r|   ).0sps     r   
<listcomp>z6Test_phylo_module.test_miscelaneus.<locals>.<listcomp>a  s    <<<Rb<<<r    N)r   r?   r   get_agera   distget_farthest_oldest_leafget_speciesrC   keysiter_species)r   r   sp2agerR   rS   rT   rU   expected_roots           r   test_miscelaneusz"Test_phylo_module.test_miscelaneus9  s      c  d  d 
 
 $$Y	::f--q111$$Y	::f--q111$$Y	::f--q111$$Y	::f--q111 I66q9c!33F;;]KKK 	#fkkmm*<*<===<<1>>+;+;<<<==s6;;==?Q?QRRRRRr    c                    t          d          }d}|                    dg          }|                     t          |          t          |                                                     |                     t                    5  t          |                    d                     d d d            d S # 1 swxY w Y   d S )Nz((Dme_001,Dme_002),(((Cfa_001,Mms_001),((((Hsa_001,Hsa_001),Ptr_001),Mmu_001),((Hsa_004,Ptr_004),Mmu_004))),(Ptr_002,(Hsa_002,Mmu_002))));z((Dme_001:1,Dme_002:1)1:1,(((Cfa_001:1,Mms_001:1)1:1,(((Ptr_001:1,Hsa_001:1)1:1,Mmu_001:1)1:1,((Hsa_004:1,Ptr_004:1)1:1,Mmu_004:1)1:1)1:1)1:1,(Ptr_002:1,(Hsa_002:1,Mmu_002:1)1:1)1:1)1:1);ru   )r   $collapse_lineage_specific_expansionsr   strrj   assertRaises	TypeErrorprint)r   r   collapsed_hsat2s       r   test_colappsezTest_phylo_module.test_colappsec  s
     c  d  d V33UG<<]++S__===y)) 	A 	A!88??@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   #B44B8;B8N)	__name__
__module____qualname__r   r^   re   rq   r   r   r|   r    r   r   r      s        B)? )? )?VlM lM lM\eM eM eMND D D (S (S (STA A A A Ar    r   __main__)
__future__r   r   unittest r   r   datasetsTestCaser   r   mainr|   r    r   <module>r      s    & & & & & & % % % % % %  " " " " " " " "    aA aA aA aA aA) aA aA aAH zHMOOOOO r    