ó
gbc           @   sO   d  „  Z  d d e d d „ Z d d e d d „ Z e d „ Z e d „ Z d S(   c   	      C   sd  x]|  D]U} | d r | j  | d j ƒ  Œ  | d <| j | d ƒ } | j | d ƒ } | j | d ƒ } | d  k	 r‹ | j | ƒ } n d } d } | d  k	 rµ | j | ƒ } n d } d } | d  k	 rß | j | ƒ } n d } d } | | d <| | d <| | d <| | d <| | d	 <| | d
 <| j | d ƒ | d <| j | d ƒ | d <} q q Wd  S(   Nt   merged_taxidt   taxids   ###iÿÿÿÿt   speciest   genust   familyt   species_namet
   genus_namet   family_namet   rankt   scientific_name(   t   lastCommonTaxont   keyst
   getSpeciest   getGenust	   getFamilyt   Nonet   getScientificNamet   getRank(	   t   uniqSeqt   taxonomyt   seqt   tspt   tgnt   tfat   sp_snt   gn_snt   fa_sn(    (    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   mergeTaxonomyClassification   s4    






c            s°  i  } g  } | d  k r! g  } n  | d  k	 r< t | ƒ } n	 t ƒ  } | d  k	 ra | j d ƒ n  x,|  D]$‰  t ‡  f d †  | Dƒ ƒ t ˆ  ƒ f } | | k ry| | } d ˆ  k rÐ | d c ˆ  d 7<n | d c d 7<d ˆ  d <x | D]ø } | d k rT| rTd ˆ  k r-| d j ˆ  d ƒ n  d ˆ  k rTˆ  d | d ˆ  j <qTn  d | }	 | ˆ  k r›| |	 j ˆ  | d ƒ ˆ  d | |	 ˆ  | <qñ |	 ˆ  k rñ x? ˆ  |	 D]0 }
 | |	 j |
 d ƒ ˆ  |	 |
 | |	 |
 <q²Wqñ qñ Wxi ˆ  j ƒ  D][ } | | k rú| | ˆ  | k rú| d k rú| d d !d	 k rú| d
 k rú| | =qúqúW| rŒ| d
 j	 ˆ  j ƒ qŒqh ˆ  | | <xÇ | D]¿ } | d k râ| râd ˆ  k r»i  ˆ  d <n  d ˆ  k râˆ  d ˆ  d ˆ  j <qân  d | }	 |	 ˆ  k ri  ˆ  |	 <n  | ˆ  k rŠˆ  |	 j ˆ  | d ƒ ˆ  d ˆ  |	 ˆ  | <ˆ  | =qŠqŠWd ˆ  k rfd ˆ  d <n  | rˆ  j g ˆ  d
 <n  | j	 ˆ  ƒ qh W| d  k	 r¬t
 | | ƒ n  | S(   NR   c         3   s   |  ] } ˆ  | Vq d  S(   N(    (   t   .0t   x(   R   (    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pys	   <genexpr>6   s    t   counti   t
   taxid_dists	   merged_%si    i   t   merged_t   merged(   R   t   sett   addt   tuplet   strt   updatet   idt   gett   iterkeyst   appendR   (   t   seqIteratorR   t	   mergedKeyt   mergeIdst
   categoriest   uniquesR   t   st   keyt   mkeyt   skey(    (   R   s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   uniqSequence&   sn    		)


15K

.c         C   s·  | d  k r g  } n  d „  } | d  k	 r9 t | ƒ } n	 t ƒ  } | d  k	 r^ | j d ƒ n  t |  ƒ } | st g  S| j | ƒ | j ƒ  } | g } d | k r¯ d | d <n  xj | D]b }	 d |	 }
 |
 | k rß i  | |
 <n  |	 | k r¶ | |
 j | |	 d ƒ d | |
 | |	 <q¶ q¶ W| r5| j g | d <n  x_| r–| j ƒ  } t | ƒ } t	 | ƒ d | !} | t	 | ƒ k rÚd | k rž| d c | d 7<n | d c d 7<xÈ | D]À }	 d |	 }
 |	 | k rþ| |
 j | |	 d ƒ d | |
 | |	 <n  |
 | k rµxh | |
 D]Y } | | k rX| |
 j | | d ƒ | |
 | | |
 | <q| |
 | | |
 | <qWqµqµWx> | j
 ƒ  D]0 }	 |	 | k r†| |	 | |	 k r†| |	 =q†q†W| r“| d j | j ƒ q“q8| } xq | D]i }	 d |	 }
 |
 | k ri  | |
 <n  |	 | k rç| |
 j | |	 d ƒ d | |
 | |	 <| |	 =qçqçWd | k rmd | d <n  | r†| j g | d <n  | j | ƒ q8W| d  k	 r³t | | ƒ n  | S(   Nc         S   s   t  t |  ƒ t | ƒ ƒ S(   N(   t   cmpR%   (   t   s1t   s2(    (    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   cmpseq{   s    R   R   i   s	   merged_%si    R!   (   R   R"   R#   t   listt   sortt   popR(   R'   t   lenR%   R)   R*   R   (   R+   R   R,   R-   R.   R8   t	   sequencest   oldR   R1   R2   R   t   lseqt   poldR3   (    (    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   uniqPrefixSequencev   s|    				
1	
-1! 
*c            s   ‡  ‡ f d †  } | S(   Nc            sx   y |  ˆ  } Wn t  k
 r' d  } n Xy | ˆ  } Wn t  k
 rO d  } n Xˆ rk | } | } | } n  t | | ƒ S(   N(   t   KeyErrorR   R5   (   R   t   yt   c1t   c2R0   (   R1   t   reverse(    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   compareÓ   s    

	(    (   R1   RF   RG   (    (   R1   RF   s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   _cmpOnKeyGeneratorÒ   s    c         C   s&   t  |  ƒ } | j t | | ƒ ƒ | S(   N(   R9   R:   RH   (   R+   R1   RF   t   seqs(    (    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   sortSequenceæ   s    N(   R   R   t   FalseR4   RA   RH   RJ   (    (    (    s4   lib/python2.7/site-packages/obitools/utils/bioseq.pyt   <module>   s   	%P\