
gbc           @   s  d  Z  d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 m
 Z
 d d l m Z m Z d d l m Z d d l m Z d d	 l m 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 m Z m Z d d l m Z d d l m  Z  d d l! Z! d d l" Z" d d l# m$ Z$ d d l% m& Z& m' Z' m( Z( d d l) m* Z* d d l+ m, Z, d   Z- d   Z. d   Z/ d   Z0 d   Z1 e! j2 d  Z3 d S(   s+   
Created on 13 oct. 2009

@author: coissac
i(   t   emblIterator(   t   genbankIterator(   t   fnaFastaIterator(   t   fastaAAIteratort   fastaNucIteratort   fastFastaIterator(   t   fastFastqIlluminaIteratort   fastFastqSolexaIterator(   t   fastFastqSangerIterator(   t   qualityIterator(   t   EcoPCRDBSequenceIterator(   t   formatFastat   rawFastaIteratort   formatSAPFastaGenerator(   t   formatFastq(   t   EcoPCRDBSequenceWriter(   t   dumpt   loadt   UnpicklingError(   t   array(   t   chainN(   t
   EcoPCRFile(   t   skipOnErrorIteratort	   skipfirstt   only(   t   BioSequence(   t   FakeFilec         c   s^   t  |   } y4 x- y t |  } | VWq t k
 r: q Xq WWn t k
 rY t  n Xd  S(   N(   R   R   R   t   EOFErrort   StopIteration(   t   lineiteratort   ft   s(    (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   binarySequenceIterator$   s    	c         C   s]  |  j  d d  } | j d d d d d d d	 d
 d  d d d d | j d d d d d d d	 d
 d  d d d d |  j  d d  } | j d d d d d d
 d  d d d d | j d d d d d d
 d  d d d d | j d d d d d d
 t d d  | j d! d d d d d
 d  d d" d d# | j d$ d d d d d
 d  d d% d d& | j d' d d d d d
 d  d d( d d) | j d* d d d d d
 d  d d+ d d, | j d- d d d d d
 d  d d. d d/ | j d0 d d d d d
 d  d d1 d d2 | j d3 d d d d4 d
 d  d d5 d d6 | j d7 d d d d4 d
 d  d d8 d d9 d  S(:   Ns!   Restriction to a sub-part optionss6   Allow to limit analysis to a sub-part of the data files   --skipt   actiont   storet   destt   skipt   metavars   <N>t   defaultt   typet   intt   helps   skip the N first sequencess   --onlyR   s   treat only N sequencess   Input format optionss=   If not specified, a test is done to determine the file formats	   --genbankt   store_constt   seqinformatt   constt   genbanks   Input file is in genbank formats   --emblt   embls   Input file is in embl formats   --skip-on-errort
   store_truet	   skiperrors&   Skip sequence entries with parse errors   --fastat   fastasK   Input file is in fasta nucleic format (including obitools fasta extentions)s   --ecopcrt   ecopcrs   Input file is in ecopcr formats   --raw-fastat   rawfastasC   Input file is in fasta format (but more tolerant to format variant)s   --sangert   sangers=   Input file is in sanger fastq nucleic format (standard fastq)s   --solexat   solexasB   Input file is in fastq nucleic format produced by solexa sequencers
   --ecopcrdbt   ecopcrdbs    Input file is an ecopcr databases   --nuct   moltypet   nucs%   Input file contains nucleic sequencess   --prott   peps%   Input file contains protein sequences(   t   add_option_groupt
   add_optiont   Nonet   False(   t   optionManagert   group(    (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   addInputFormatOption2   s    				
c         C   s   |  j  d  } | j d d d d d d d  d t d	 d
 | j d d d d d d d  d t d	 d | j d d d d d d d  d	 d | j d d d d d d t d	 d d  S(   Ns   Output format optionss   --fasta-outputR!   R*   R#   t   outputR&   R,   R)   s)   Output sequences in obitools fasta formats   --fastq-outputs'   Output sequences in sanger fastq formats   --ecopcrdb-outputR"   t   ecopcroutputs`   Output sequences in ecopcr database format (sequence records are not printed on standard output)s   --uppercaseR/   t	   uppercases5   Print sequences in upper case (default is lower case)(   R:   R;   R<   R   R   R=   (   R>   R?   (    (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   addOutputFormatOption   s&    c         C   s   t  |   t |   d  S(   N(   R@   RD   (   R>   (    (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   addInOutputOption   s    
c            s  t   _ d  _ t j d     f d   }  f d   }    f d   }  j d  k ri | } n j d k r  j d k r t } q j d k r t	 } qt
 } n  j d k r | t  } n j d	 k r | t  } n  j d
 k r| t  } n  j d k r#t } n  j d k rMt  _ d  _ t } n  j d k rwt  _ d  _ t } nZ  j d k rt  _ d  _ t } n0  j d k rt } n  j d k rt } n   j d k r j d  k	 rt  j  } | |  } t  _ d  _ n   j r7t |  } n  t  d  r~ j d  k	 r~t j d  j IJt |  j  } n  t  d  r j d  k	 rt j d  j IJt |  j  } n  | S(   NR1   s#   ^[^ ]+ +| +[0-9]+ +| + [0-9]+ + | +c            s%   t   _ d  _   f d   } | S(   NR1   c         3   s*   x#   |   D] } | j    | Vq Wd  S(   N(   t   extractTaxon(   R   R   (   t   formatIterator(    s6   lib/python2.7/site-packages/obitools/format/options.pyt   iterator   s    
(   R   t   outputFormatert   outputFormat(   RG   RH   (   t   options(   RG   s6   lib/python2.7/site-packages/obitools/format/options.pyt   annotatedIterator   s    		c            s%   t   _ d  _   f d   } | S(   Nt   fastqc         3   sN   xG t  |   D]9 }   j   } t d d   | D  } | | _ | Vq Wd  S(   Nt   dc         s   s   |  ] } d  | d  Vq d S(   g      $@N(    (   t   .0t   x(    (    s6   lib/python2.7/site-packages/obitools/format/options.pys	   <genexpr>   s    (   R   t   nextR   t   quality(   R   R   t   qRR   (   t   qualityfile(    s6   lib/python2.7/site-packages/obitools/format/options.pyRH      s
    	(   R   RI   RJ   (   RT   RH   (   RK   (   RT   s6   lib/python2.7/site-packages/obitools/format/options.pyt   withQualIterator   s    		c            sN  t   _ d  _ |  j   } | d d k rg  j d k rF t } q j d k r^ t } qt } n | d d k r t } t	  _ d  _ n | d d !d	 k r t
 } ni | d d
 !d k r t } nM | d d !d k r t } n1 | d d k s  j |  rt } n	 t d  | t k r2t |   } n | t | g |    } | S(   NR1   i    t   >R8   R9   t   @RM   i   s   ID i   s   LOCUS i   s   #!Picklet   #s;   file is not in fasta, fasta, embl, genbank or ecoPCR format(   R   RI   RJ   RQ   R7   R   R   R   R   R   R    R   R    t   searchR   t   AssertionErrorR   (   R   t   firstt   readert   input(   t   ecopcr_patternRK   (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   autoSequenceIterator   s4    											R8   R9   R3   R-   R.   t   fnaR4   RM   R5   t   illuminaR2   R6   R$   s   Skipping %d sequencesR   s   Analysing only %d sequences(   R   RI   RJ   t   ret   compileR+   R<   R7   R   R   R   R   R   R    R   R   R   R   R   R   R
   t   withqualfileR	   R0   R   t   hasattrR$   t   syst   stderrR   R   (   RK   RL   RU   R_   R\   t   qualfile(    (   R^   RK   s6   lib/python2.7/site-packages/obitools/format/options.pyt   autoEntriesIterator   sh    		
'																		c            s   d d   f d     Y} d d d     Y}   j  d  k	 rJ t     n0   j t k rk |   |   n |   |    f d   } | S(   Nt   SequenceWriterc              s&   e  Z e j d   Z   f d   Z RS(   c         S   s"   d  |  _ | |  _ | j |  _ d  S(   N(   R<   t   _formatt   _fileRC   t   _upper(   t   selfRK   t   file(    (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   __init__D  s    		c            s   |  j  d  k rx t |  _    j d  k	 rW   j |  _  |  j  t k ru t    |  _  qu qx   j d  k	 rx   j |  _  qx n  t | d  r | j r | j   n  |  j  | d |  j	 } y$ |  j
 j |  |  j
 j d  Wn t k
 r t j d  n Xd  S(   Nt	   _hasTaxidt   uppers   
i    (   Rk   R<   R   RA   R   RI   Re   Rq   RF   Rm   Rl   t   writet   IOErrorRf   t   exit(   Rn   t   seqR   (   RK   (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   putH  s     	(   t   __name__t
   __module__Rf   t   stdoutRp   Rw   (    (   RK   (    s6   lib/python2.7/site-packages/obitools/format/options.pyRj   C  s   t   BinaryWriterc           B   s    e  Z e j d   Z d   Z RS(   c         S   s   | |  _  |  j  j d  d  S(   Ns	   #!Pickle
(   Rl   Rs   (   Rn   RK   Ro   (    (    s6   lib/python2.7/site-packages/obitools/format/options.pyRp   ]  s    	c         S   sx   yS t  | t  r+ t | |  j d d n' x$ | D] } t | |  j d d q2 WWn t k
 rs t j d  n Xd  S(   Nt   protocoli   i    (   t
   isinstanceR   R   Rl   Rt   Rf   Ru   (   Rn   Rv   R   (    (    s6   lib/python2.7/site-packages/obitools/format/options.pyRw   `  s    (   Rx   Ry   Rf   Rz   Rp   Rw   (    (    (    s6   lib/python2.7/site-packages/obitools/format/options.pyR{   \  s   c            s     j  |   d  S(   N(   Rw   (   t   sequence(   t   writer(    s6   lib/python2.7/site-packages/obitools/format/options.pyt   sequenceWriterr  s    (    (    (   RB   R<   R   RA   R   (   RK   RA   Rj   R{   R   (    (   RK   R   s6   lib/python2.7/site-packages/obitools/format/options.pyt   sequenceWriterGeneratorB  s    (4   t   __doc__t   obitools.format.sequence.emblR    t    obitools.format.sequence.genbankR   t    obitools.format.sequence.fnaqualR   t   obitools.format.sequence.fastaR   R   R   t   obitools.format.sequence.fastqR   R   t   obitools.fastqR   t   obitools.fnaqual.qualityR	   t   obitools.ecopcr.sequenceR
   t   obitools.fastaR   R   R   R   R   t   cPickleR   R   R   R   t	   itertoolsR   Rf   Rb   t   obitools.ecopcrR   t   obitools.format.sequenceR   R   R   t   obitoolsR   t   obitools.utilsR   R    R@   RD   RE   Ri   Rz   R   (    (    (    s6   lib/python2.7/site-packages/obitools/format/options.pyt   <module>   s4   		k	'		y