
gbc           @   s   d  d l  Z  d  d l Z d  d l m Z m Z m Z d  d l m Z d  d l m	 Z	 d  d l m
 Z
 d  d l Z y d  d l m Z Wn! e k
 r d  d l m Z n Xd e f d     YZ d	 e e f d
     YZ d e f d     YZ e d  Z d S(   iN(   t   countt   imapt   combinations(   t   EcoPCRDBFile(   t   universalOpen(   t
   ColumnFile(   t   Countert   Taxonomyc           B   s  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 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 d  Z d   Z d   Z RS(   c         C   s*  |  j  j d  |  j  j d  |  _ |  j  j d  |  _ |  j  j d  |  _ |  j  j d  |  _ i  |  _ x[ |  j D]P } | d |  j k r | d g |  j | d <qw |  j | d j | d  qw W|  j j	 t
 d   |  j D   t
 d	   |  j D  |  _ t d
   |  j D  |  _ d S(   s   
        The taxonomy database constructor
        
        @param path: path to the ecoPCR database including the database prefix name
        @type path: C{str}
        t   obit   speciest   genust   familyt   orderi    i   c         s   s#   |  ] } | d  | d f Vq d S(   i    i   N(    (   t   .0t   x(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>'   s    c         s   s#   |  ] } | d  | d f Vq d S(   i   i   N(    (   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>(   s    c         s   s   |  ] } | d  Vq d S(   i    N(    (   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>*   s    N(   t   _rankst   appendt   indext   _speciesidxt	   _genusidxt
   _familyidxt	   _orderidxt   _nameidxt   _namet   updatet   dictt   _preferedNamet   _preferedidxt   maxt	   _taxonomyt   _bigestTaxid(   t   selfR   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __init__   s    	 #c         C   s   | d  k r d  S|  j | S(   N(   t   NoneR   (   R   t   idx(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   findTaxonByIdx-   s    c         C   s   | d  k r d  S|  j | S(   N(   R!   t   _index(   R   t   taxid(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt	   findIndex2   s    c         C   s   |  j  |  j |   S(   N(   R#   R&   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   findTaxonByTaxid7   s    c         C   s6   g  } x) |  j  | D] } | j |  j |  q W| S(   N(   R   R   R   (   R   t   namet   taxat   i(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   findTaxonByName:   s    c         C   s-   y |  j  j |  SWn t k
 r( d  SXd  S(   N(   R   R   t
   ValueErrorR!   (   R   t   rank(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   findRankByName@   s    c         C   s   z |  j  |  t k	 SWd  t SX(   N(   R'   R!   t   False(   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __contains__F   s    c         c   s   x= t  t |  j   D]& } |  j | d | k r | } q q W|  j | VxG |  j D]< } | d | k rV x# |  j | d  D] } | Vq WqV qV Wd S(   s&   return subtree for given taxonomic id i    i   N(   t   xranget   lenR   t   subTreeIterator(   R   R%   t   tR"   t   subt(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR3   V   s    c         c   sa   |  j  |  } | d k	 rW x* | d d k rG | V|  j | d } q W|  j d Vn t  d S(   su   
           return parental tree for given taxonomic id starting from
           first ancestor to the root.
        i   i    N(   R'   R!   R   t   StopIteration(   R   R%   t   taxon(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   parentalTreeIteratorc   s    c         C   s*   | g  |  j  |  D] } | d ^ q k S(   Ni    (   R8   (   R   t   parentR%   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt
   isAncestorq   s    c   	      G   s7  | s
 d  St |  d k r$ | d St |  d k rg  |  j | d  D] } | d ^ qJ } g  |  j | d  D] } | d ^ qt } | j   | j   t t |  t |   } d } x. | | k  r | | | | k r | d 7} q W| d 8} | | S| d } x$ | d D] } |  j | |  } qW| S(   Ni   i    i   (   R!   R2   R8   t   reverset   mint   lastCommonTaxon(	   R   t   taxidsR   t   t1t   t2R    R*   t   ancetreR7   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR=   t   s&    **

#

c         C   s&   t  g  |  j |  D] } | ^ q  S(   N(   R2   R8   (   R   R%   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   depth   s    g?c         G   sG  d   } t  |  } t |  d k r1 | j   Sg  | D], } g  |  j |  D] } | d ^ qN ^ q8 } x | D] } | j   qq Wg  | D] } | |  ^ q } t } x | rBt g  | D] } | j   ^ q  } t |  d k rt t	 | j
     t |  }	 |	 d | k } n  | r | j d  d d }
 q q W|
 S(   Nc         s   s&   x |  D] } | Vq Wx	 d  Vq Wd  S(   N(   R!   (   R   R*   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   permanentIterator   s    	i   i    (   t   setR2   t   popR8   R;   t   TrueR   t   nextt   floatR   t   valuest   most_common(   R   t   errorR>   RC   t   yR   t
   allLineaget   ct   lcast   maint   lca(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   betterCommonTaxon   s$    	 
6 	%"c         C   s-   |  j  |  } |  j j | |  j | d  S(   Ni   (   R&   R   t   getR   (   R   R%   R"   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   getPreferedName   s    c         C   s   |  j  |  d S(   Ni   (   R'   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   getScientificName   s    c         C   s   |  j  |  d S(   Ni   (   R'   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt	   getRankId   s    c         C   s   |  j  |  j |  S(   N(   R   RV   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   getRank   s    c         C   sy   t  | t  r$ |  j j |  } n  y< g  |  j |  D]  } | d | k r7 | d ^ q7 d SWn t k
 rt d  SXd  S(   Ni   i    (   t
   isinstancet   strR   R   R8   t
   IndexErrorR!   (   R   R%   t   rankidR   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   getTaxonAtRank   s    &c         C   s   |  j  | |  j  S(   N(   R\   R   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt
   getSpecies   s    c         C   s   |  j  | |  j  S(   N(   R\   R   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   getGenus   s    c         C   s   |  j  | |  j  S(   N(   R\   R   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt	   getFamily   s    c         C   s   |  j  | |  j  S(   N(   R\   R   (   R   R%   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   getOrder   s    c         c   s8   x1 t  d  |  j t t |  j    D] } | Vq% Wd  S(   N(   R   R!   R   R1   R2   (   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   rankIterator   s    +c   	      C   s+  g  | D] } |  j  |  ^ q } t d   | D  } t |  d k sV t d   t d g g  |  j D]0 } | d d k ri | d d k  ri | d ^ qi  d } t |  j  } d |  j k r |  j j d  n  |  j j d  } |  j j | | | j	   | f  x | D] } | | d	 <qWd  S(
   Nc         s   s   |  ] } | d  Vq d S(   i   N(    (   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>   s    i   s"   All taxa must have the same parenti- i    i- i 	= t   GROUPi   (
   R'   RD   R2   t   AssertionErrorR   R   R   R   R   RE   (	   R   R)   t	   groupnameR   R4   t   at   newtaxidt   newidxR[   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt	   groupTaxa   s    "Q"i c   
      C   s   |  j  | k  r | n
 |  j  d } |  j |  } |  j t |   } | | | | d f } |  j j |  t |  j  d }	 |  j j | d |	 f  | |  j k r |	 g |  j | <n |  j | j |	  |	 |  j	 | <| |  _  | S(   Ni   t   locals   scientific name(
   R   R.   R&   t   intR   R   R2   R   R   R$   (
   R   R(   R-   R9   t   minimaltaxidRf   R[   t	   parentidxt   txRg   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   addLocalTaxon   s    "	c         C   s{   t   |  j |  } |  j |  } | |  j k s? t d   x5 |  j D]* } | d | k rI |  j | d  qI qI W| S(   Ns   Only local taxon can be deletedi   i    (   t   NotImplementedR&   R#   t   _localtaxonRc   R   t   removeLocalTaxon(   R   R%   t   txidxR7   R4   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyRq      s    c         C   s9   |  j  |  } |  j j | d | g  | |  j | <| S(   NR   (   R&   R   R   R   (   R   R%   R(   R"   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   addPreferedName  s    (   t   __name__t
   __module__R    R#   R&   R'   R+   R.   R0   R3   R8   R:   R=   RB   RR   RT   RU   RV   RW   R\   R]   R^   R_   R`   Ra   Rh   Rn   Rq   Rs   (    (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR      s6   												$													t   EcoTaxonomyDBc           B   s_   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   s#   
    A taxonomy database class
    c         C   s   | |  _  d |  j  |  _ d |  j  |  _ d |  j  |  _ d |  j  |  _ d |  j  |  _ d |  j  |  _ t j d IJ|  j	   t j d IJt
 j |   d	 S(
   s   
        The taxonomy database constructor
        
        @param path: path to the ecoPCR database including the database prefix name
        @type path: C{str}
        s   %s.tdxs   %s.ldxs   %s.rdxs   %s.ndxs   %s.pdxs   %s.adxs#   Reading binary taxonomy database...s    okN(   t   _patht
   _taxonFilet   _localTaxonFilet
   _ranksFilet
   _namesFilet   _preferedNamesFilet
   _aliasFilet   syst   stderrt   _EcoTaxonomyDB__readNodeTableR   R    (   R   t   path(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR      s    	
c         c   s{   xt |  j  |  D]c } t |  } | d } t j d | |  \ } } } } }	 |	 |  }
 |	 | } |
 | | f Vq Wd  S(   Ni   s   > I I I I %ds(   t   _ecoRecordIteratorR2   t   structt   unpack(   R   t   filet   recordt   lrecordt   lnamest   isScientificNamet
   namelengtht   classLengtht
   indextaxidt   namesR(   t	   classname(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoNameIterator9  s    
%

c   
      c   s  xi |  j  |  j  D]U } t |  } | d } t j d | |  \ } } } } } | | | | d f Vq Wy d }	 xy |  j  |  j d t D]_ } t |  } | d } t j d | |  \ } } } } } |	 d 7}	 | | | | d f Vq Wt j d |	 IJWn t j d	 IJn Xd  S(
   Ni   s   > I I I I %dst   ncbii    t   noErrori   Ri   s0    [INFO : Local taxon file found] : %d added taxas%    [INFO : Local taxon file not found] (	   R   Rx   R2   R   R   Ry   RF   R~   R   (
   R   R   R   R   R%   R[   Rl   t
   nameLengthR(   t   lt(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoTaxonomicIteratorC  s     
%
%
c         c   s&   x |  j  |  j  D] } | Vq Wd  S(   N(   R   Rz   (   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoRankIteratorV  s    c         c   sJ   xC |  j  |  j d t D]) } t j d |  \ } } | | f Vq Wd  S(   NR   s   > I i(   R   R}   RF   R   R   (   R   R   R%   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoAliasIteratorZ  s    c         C   s)   g  |  j  |  j  D] } | ^ q } | S(   N(   t   _EcoTaxonomyDB__ecoNameIteratorR{   (   R   R   t	   indexName(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoNameIndexe  s    %c         C   s#   g  |  j    D] } | ^ q } | S(   N(   t   _EcoTaxonomyDB__ecoRankIterator(   R   t   rR-   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoRankIndexi  s    c         C   s   g  } y) t  |  j    } t j d IJt } Wn  t j d IJi  } t } n Xd } d } xo |  j   D]a } | j |  | d d k r | d 7} n  | s | d d k r | | | d <n  | d 7} qk Wt j d IJ| | | f S(   Ns!    [INFO : Taxon alias file found] s%    [INFO : Taxon alias file not found] i    i   Ri   i   s   Taxonomical tree read(   R   t    _EcoTaxonomyDB__ecoAliasIteratorR~   R   R/   RF   t$   _EcoTaxonomyDB__ecoTaxonomicIteratorR   (   R   t   taxonomyR   t
   buildIndext
   localtaxonR*   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __ecoTaxonomyIndexm  s(    

c         C   s  |  j    \ |  _ |  _ |  _ |  j   |  _ |  j   |  _ |  j } x? |  j |  j D]- } |  j j | d d | f  | d 7} qV WyW g  |  j	 |  j
  D] } | d d | d f ^ q |  _ t j d t |  j  IJWn t j d IJg  |  _ n Xd  S(	   Ni   s   scientific namei   i    R   i   s9    [INFO : Preferred taxon name file found] : %d added taxas-    [INFO : Preferred taxon name file not found](   t    _EcoTaxonomyDB__ecoTaxonomyIndexR   R$   Rp   t   _EcoTaxonomyDB__ecoRankIndexR   t   _EcoTaxonomyDB__ecoNameIndexR   R   R   R|   R   R~   R   R2   (   R   R*   R4   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   __readNodeTable  s    	6(   Rt   Ru   t   __doc__R    R   R   R   R   R   R   R   R   (    (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyRv     s   		
						t   TaxonomyDumpc           B   sS   e  Z d    Z d   Z e e  Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s5  | |  _  |  j d |  t j d IJg  |  _ xt |  j d |  D]_ \ } } } |  j j | | |  j | f  | d k rD |  j |  j | j	 | d g  qD qD Wt j d IJx5 |  j
 d |  D]  \ } } |  j | |  j | <q Wt j d IJx( |  j d	 |  D] } d  |  j | <qWt j |   d  S(
   Ns   %s/nodes.dmps   Adding scientific name...s   %s/names.dmps   scientific nameR   s   Adding taxid alias...s   %s/merged.dmps   Adding deleted taxid...s   %s/delnodes.dmp(   Rw   t   _readNodeTableR~   R   R   t   _nameIteratorR   R$   R   t   extendt   _mergedNodeIteratort   _deletedNodeIteratorR!   R   R    (   R   t   taxdirR%   R(   R   t   current(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR      s    		# ( c         C   s5   |  d | d k  r d S|  d | d k r1 d 
Sd S(   Ni    ii   (    (   R?   R@   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt	   _taxonCmp  s
    c         C   s   t  |  j  } d } | } | } | | d } xa | | k r |  j | d | k r |  j | d | k  ru | } n | } | } | | d } q2 W|  j | d | k r | Sd  Sd  S(   Ni    i   (   R2   R   R!   (   R   R%   t   taxCountt   begint   endt   oldcheckt   check(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   _bsearchTaxon  s    &	c   
      C   s  t  |  } t | d d d t t t t t t t t t t t t t f } t j d IJg  | D]! } | d | d | d g ^ q_ } t j d IJt t d	   | D   } | j	   t
 t d  | t t |     } | |  _ t |  |  _ t j d
 IJi  } x, t |  j  D] } | | |  j | d <qWt j d IJx5 |  j D]* }	 | |	 d |	 d <| |	 d |	 d <qNW| |  _ | |  _ g  |  _ d  S(   Nt   sept   |t   typess   Reading taxonomy dump file...i    i   i   s   List all taxonomy rank...c         s   s   |  ] } | d  Vq d S(   i   N(    (   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>  s    s   Indexing taxonomy...s   Indexing parent and rank...(   R   R   Rj   RY   t   boolR~   R   t   listRD   t   sortR   t   mapR!   R1   R2   R   Rp   R   R$   R   (
   R   R   t   nodest   nR   t   rankst   rankidxR   R*   R4   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR     s4    				.
$			c      	   c   sb   t  |  } t | d d d t t t t f } x+ | D]# \ } } } } } | | | f Vq7 Wd  S(   NR   R   R   (   R   R   Rj   RY   (   R   R   R   R%   R(   t   uniqueR   t   white(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR     s    	c         c   sV   t  |  } t | d d d t t t f } x" | D] \ } } } | | f Vq4 Wd  S(   NR   R   R   (   R   R   Rj   RY   (   R   R   t   mergedR%   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR     s    	c         c   sJ   t  |  } t | d d d t t f } x | D] \ } } | Vq1 Wd  S(   NR   R   R   (   R   R   Rj   RY   (   R   R   t   deletedR%   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR     s    	(
   Rt   Ru   R    R   t   staticmethodR   R   R   R   R   (    (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR     s   				*			c            sR  d    d    d     d     f d   }  f d   }  f d   }   f d   } d	      f d
   }  f d   } t  }	 | s| d |  | j  | d |  | j  }	 | d |  g  | j D] }
 |
 d | j k  r |
 ^ q  | d |  | j  n  |	 r.| d |  | j  n  | j rN| d |  | j  n  d  S(   Nc      	   S   sr   t  |  d  } d
 | } y9 t j d | | |  d |  d |  d | |  d  } Wn t d |  d  n X| S(   Ni   i   s   > I I I I I %dsi    i   i   s   Cannot convert %si   i   i   (   R2   R   t   packt	   TypeError(   Rm   R   t	   totalSizet   packed(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoTaxPacker+  s    
c         S   s)   t  |   } t j d | | |   } | S(   Ns   > I %ds(   R2   R   R   (   R-   R   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoRankPacker>  s
    	c         S   su   d } y t  j d | |  |  } WnL t  j k
 rp } t j | |  | f IJt j d | |  | f IJ|  n X| S(   Ni   s   > I I is'   Total size : %d  taxid : %d  index : %di   (   R   R   RK   R~   R   (   R%   R   R   R   t   e(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoAliasPackerH  s    	
c      
   S   s   t  |  d  } t  |  d  } | | d d d d } t j d | | f | t |  d d k  | | |  d |  d |  d  } | S(   Ni    i   i   s   > I I I I I %ds %dss   scientific namei   (   R2   R   R   Rj   (   R(   R   t   classlengthR   R   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoNamePackerW  s    c            s   t  |  d  } t d   d   | D d  } | j t j d |   x4 | D], } | d d k rN | j   |   qN qN W| j   | t |  k  S(   Nt   wbc         S   s   |  | S(   N(    (   R   RL   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   <lambda>k  s    c         s   s%   |  ] } | d  d k r d Vq d S(   i   Ri   i   N(    (   R   R4   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>k  s    i    s   > Ii   Ri   (   t   opent   reducet   writeR   R   t   closeR2   (   R   R   t   outputt   nbtaxonRm   (   R   (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoTaxWriteri  s    
c            s   t  d   d   | D d  } | r t |  d  } | j t j d |   x4 | D], } | d d k rT | j   |   qT qT W| j   n  d  S(   Nc         S   s   |  | S(   N(    (   R   RL   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyR   w  s    c         s   s%   |  ] } | d  d k r d Vq d S(   i   Ri   i   N(    (   R   R4   (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pys	   <genexpr>w  s    i    R   s   > Ii   Ri   (   R   R   R   R   R   R   (   R   R   R   R   Rm   (   R   (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoLocalTaxWriterv  s    c            s`   t  |  d  } | j t j d t |    x! | D] } | j   |   q5 W| j   d  S(   NR   s   > I(   R   R   R   R   R2   R   (   R   R   R   R-   (   R   (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoRankWriter  s
    c            s   t  |  d  } | j t j d t |    xC | D]; } | | } | d  k rZ d } n  | j   | |   q5 W| j   d  S(   NR   s   > Ii(   R   R   R   R   R2   R!   R   (   R   R   R   R%   R*   (   R   (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoAliasWriter  s    
	c         S   sD   |  d j    } | d j    } | | k  r0 d S| | k r@ d Sd S(   Ni    ii   (   t   upper(   t   n1t   n2t   name1t   name2(    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   nameCmp  s    c            sm   t  |  d  } | j t j d t |    | j   x! | D] } | j   |   qB W| j   d  S(   NR   s   > I(   R   R   R   R   R2   R   R   (   R   R   R   R(   (   R   R   (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoNameWriter  s    c            s`   t  |  d  } | j t j d t |    x! | D] } | j   |   q5 W| j   d  S(   NR   s   > I(   R   R   R   R   R2   R   (   R   R   R   R(   (   R   (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoPreferedNameWriter  s
    s   %s.rdxs   %s.tdxs   %s.ndxi   s   %s.adxs   %s.ldxs   %s.pdx(   RF   R   R   R   Rp   R$   R   (   t   prefixR   t	   onlyLocalR   R   R   R   R   R   R   R   (    (   R   R   R   R   R   s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   ecoTaxonomyWriter)  s*    		
				
:	(   R   R~   t	   itertoolsR    R   R   t   obitools.ecopcrR   t   obitools.utilsR   R   t   matht   collectionsR   t   ImportErrort   obitools.collectionst   objectR   Rv   R   R/   R   (    (    (    s7   lib/python2.7/site-packages/obitools/ecopcr/taxonomy.pyt   <module>   s    