ó
¿×Ic        !   @   s$  d  d l  Z  d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z e j	 j
 ƒ  Z e d d g Z dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm g Z d: d; „ Z d< d d= „ Z d> d? „ Z d@ „  Z xJ e j D]? Z e ƒ  Z e e j e e ƒ ƒ Z e e ƒ dA k st ‚ qWe e j e d ƒ d	 ƒ ƒ Z x} e e j	 ƒ e e j	 ƒ D]_ Z e ƒ  Z y0 e j e g e e ƒ e sÑt dB e ƒ ‚ Wn e e  e! f k
 rîn X[ q“W[ [ xe D]\ Z Z" Z# Z$ dC e e$ e# f GHe  j% j& e$ ƒ sEt e$ ƒ ‚ e e j dD e e$ dE ƒ dF e ƒ ƒ Z e e ƒ e# k sšt dG e e ƒ e# f ƒ ‚ xH e D]@ Z' e e' j( ƒ  ƒ e" k s¡t dH e" e e' j( ƒ  ƒ f ƒ ‚ q¡Wg  Z) x6 e j dD e e$ dE ƒ dF e ƒ D] Z* e) j+ e* ƒ qWe e) ƒ e# k s<t ‚ g  Z, e j dD e e$ dE ƒ dF e ƒ Z- xK e. r°y e- j/ ƒ  Z* Wn e0 k
 r•d Z* n Xe* r¬e, j+ e* ƒ qfPqfWe j dD e e$ dE ƒ dF e ƒ Z- y e- j/ ƒ  Z* Wn e0 k
 rûd Z* n Xe* d k	 r'e* g Z2 e2 j3 e e- ƒ ƒ n g  Z2 e e2 ƒ e# k sEt ‚ e j dD e e$ dE ƒ dF e ƒ Z- y e- j/ ƒ  Z* Wn e0 k
 rd Z* n Xe* d k	 rÆe* g Z4 x$ e- D] Z* e4 j+ e* ƒ q¬Wn g  Z4 e e4 ƒ e# k sät ‚ e# d k r&e j dD e e$ ƒ dF e ƒ Z' e5 e' e ƒ sht ‚ nB y. e j e e$ ƒ e ƒ Z' e sSt dI ƒ ‚ Wn e! k
 rgn Xx| e6 e ƒ D]n \ Z7 Z' e7 d k  se7 d e# k rÏdJ e7 e e' j( ƒ  ƒ e' j8 ƒ  f GHe e' ƒ GHque7 d k rudK GHququWe j9 e' ƒ Z: e: j; ƒ  Z; e d k rje: j< ƒ  Z= e: j> ƒ  Z? y e: j@ ƒ  ZA Wqje! k
 rfZB eC eB ƒ dL k rgeB ‚ qgqjXn  e# d k re dn k re e$ dE ƒ j ƒ  ZD e ƒ  Z e j eD dM eD dM eD ƒ e jE dA ƒ d e e e j dD e dF e dN e" ƒ ƒ ƒ k st ‚ n  e jF ƒ  e e ƒ qWdO GHd S(o   iÿÿÿÿN(   t   StringIO(   t   SeqIO(   t   AlignIO(   t	   Alignment(   t	   AlignInfot   fastat   tabt   clustali   i   s   Clustalw/cw02.alni   s   Clustalw/opuntia.alni   s   Clustalw/hedgehog.alns   Clustalw/odd_consensus.alni   s   Clustalw/protein.alns   Clustalw/promals3d.alni   s   GFF/multi.fnat   nexusi	   s   Nexus/test_Nexus_input.next	   stockholms   Stockholm/simple.sths   Stockholm/funny.stht   phylipi   s   Phylip/reference_dna.phys   Phylip/reference_dna2.phyi
   s   Phylip/hennigian.phys   Phylip/horses.phys   Phylip/random.phys   Phylip/interlaced.phyi   s   Phylip/interlaced2.phyt   embosss   Emboss/alignret.txts   Emboss/needle.txts   Emboss/needle_asis.txts   Emboss/water.txts   Emboss/water2.txts	   fasta-m10s   Fasta/output001.m10s   Fasta/output002.m10s   Fasta/output003.m10s   Fasta/output004.m10s   Fasta/output005.m10s   Fasta/output006.m10t   igi   s    IntelliGenetics/VIF_mase-pro.txtt   pirs   NBRF/clustalw.piri(   c         C   s2   t  |  ƒ | k r |  S|  | d  d |  d Sd  S(   Ni   s   ...iýÿÿÿ(   t   len(   t   textt   max_len(    (    s   test_AlignIO.pyt   str_summary=   s    s     c         C   s%  g  } |  j  ƒ  } t |  j ƒ  ƒ } | | k  rp xå |  D]2 } | j d | t | j j ƒ  ƒ | j f ƒ q7 Wn¨ xE t t	 d | ƒ ƒ D]. } | j | t |  j
 | ƒ ƒ d | ƒ q† W| d k r| d } | j | t d | ƒ d ƒ | j | t |  j
 | ƒ ƒ d | ƒ n  d j | ƒ S(   s=   Returns a concise summary of an Alignment object as a string.s   %s%s %si   s    alignment column %ii   t   |s    ...s   
(   t   get_alignment_lengthR   t   get_all_seqst   appendR   t   seqt   tostringt   idt   ranget   mint
   get_columnt   join(   t	   alignmentt   indext   vertical_thresholdt   answert   alignment_lent	   rec_countt   recordt   i(    (    s   test_AlignIO.pyt   alignment_summaryC   s"    	*&
%t    c   	   	   C   sG  x@t  D]8} t |  d j ƒ  ƒ } x/ |  D]' } | t | j ƒ  ƒ k r* d  } q* q* W| rn | t k rn q n  | d | GHt ƒ  } y7 t j |  d | d | ƒ} | t |  ƒ k sº t ‚ Wn) t	 k
 ræ } | d t
 | ƒ GHq n X| r“| j ƒ  | j d ƒ y( t t j d | d | d | ƒ ƒ } WnQ t	 k
 r} | j d ƒ t	 d t
 | ƒ t | j ƒ  ƒ t | ƒ f ƒ ‚ n Xt |  | | ƒ n  | t k r | j ƒ  | j d ƒ y" t t j d | d | ƒ ƒ } WnQ t	 k
 r+} | j d ƒ t	 d t
 | ƒ t | j ƒ  ƒ t | ƒ f ƒ ‚ n Xt |  | | ƒ q q Wd  S(   Ni    s&   Checking can write/read as '%s' formatt   handlet   formats
   Failed: %st	   seq_counts
   %s

%s

%s(   t$   test_write_read_align_with_seq_countR   R   t   Nonet!   test_write_read_alignment_formatsR    R   t   writet   AssertionErrort
   ValueErrort   strt   flusht   seekt   listt   parset   reprt   readt   simple_alignment_comparison(	   t
   alignmentst   indentR(   t   records_per_alignmentt   aR'   t   ct   et   alignments2(    (    s   test_AlignIO.pyt   check_simple_write_read[   sJ    	
/
"/c         C   s  t  |  ƒ t  | ƒ k s t ‚ x÷t |  | ƒ D]æ\ } } | j ƒ  | j ƒ  k sX t ‚ t  | j ƒ  ƒ t  | j ƒ  ƒ k s‚ t ‚ xt | | ƒ D]~\ } } | j j ƒ  | j j ƒ  k sÂ t ‚ | d k r| j j d d ƒ j d d ƒ d  | j k st d | j | j f ƒ ‚ q’ | d k rh| j j d d	 ƒ d
  | j k st d | j | j f ƒ ‚ q’ | d k r±| j j d d	 ƒ | j k st d | j | j f ƒ ‚ q’ | d k râ| j j	 ƒ  d | j k st ‚ q’ | j | j k s’ t d | j | j f ƒ ‚ q’ Wq. Wt
 S(   NR
   t   [t    t   ]i
   s   '%s' vs '%s'R   R&   t   _i   R	   R   i    (   R   R.   t   zipR   R   R   R   R   t   replacet   splitt   True(   R8   R>   R(   t   a1t   a2t   r1t   r2(    (    s   test_AlignIO.pyR7   •   s(    *$1%!%!i    s/   Writing non-alignment to %s format should fail!s4   Testing reading %s format file %s with %i alignmentsR'   t   rR(   s#   Found %i alignments but expected %is)   Expected %i records per alignment, got %is(   Bio.AlignIO.read(...) should have faileds-    Alignment %i, with %i sequences of length %is    ...sI   Error in alphabet: not Nucleotide or Protein, supply expected frequenciess   

R)   s   Finished tested reading files(   R   i   i   s   Clustalw/cw02.aln(   R   i   i   s   Clustalw/opuntia.aln(   R   i   i   s   Clustalw/hedgehog.aln(   R   i   i   s   Clustalw/odd_consensus.aln(   R   i   i   s   Clustalw/protein.aln(   R   i   i   s   Clustalw/promals3d.aln(   R   i   i   s   GFF/multi.fna(   R   i	   i   s   Nexus/test_Nexus_input.nex(   R	   i   i   s   Stockholm/simple.sth(   R	   i   i   s   Stockholm/funny.sth(   R
   i   i   s   Phylip/reference_dna.phy(   R
   i   i   s   Phylip/reference_dna2.phy(   R
   i
   i   s   Phylip/hennigian.phy(   R
   i
   i   s   Phylip/horses.phy(   R
   i
   i   s   Phylip/random.phy(   R
   i   i   s   Phylip/interlaced.phy(   R
   i   i   s   Phylip/interlaced2.phy(   R   i   i   s   Emboss/alignret.txt(   R   i   i   s   Emboss/needle.txt(   R   i   i   s   Emboss/needle_asis.txt(   R   i   i   s   Emboss/water.txt(   R   i   i   s   Emboss/water2.txt(   s	   fasta-m10i   i   s   Fasta/output001.m10(   s	   fasta-m10i   i   s   Fasta/output002.m10(   s	   fasta-m10i   i   s   Fasta/output003.m10(   s	   fasta-m10i   i   s   Fasta/output004.m10(   s	   fasta-m10i   i   s   Fasta/output005.m10(   s	   fasta-m10i   i   s   Fasta/output006.m10(   R   i   i   s    IntelliGenetics/VIF_mase-pro.txt(   R   i   i   s   NBRF/clustalw.pir(   R   R   s	   fasta-m10(G   t   osR    t   BioR   R   t   Bio.Align.GenericR   t	   Bio.AlignR   t   _FormatToWritert   keysR,   R*   t
   test_filesR   R%   R?   R7   t   _FormatToIteratort   t_formatR'   R3   R4   R8   R   R.   R6   t   opent   list_of_recordsR-   t   Falset	   TypeErrort   AttributeErrorR/   t   t_pert   t_countt
   t_filenamet   patht   isfileR   R   R>   R#   R   t   alignments3t   seq_iteratorRG   t   nextt   StopIterationR+   t   alignments4t   extendt   alignments5t
   isinstancet	   enumerateR$   R   t   SummaryInfot   summaryt   dumb_consensust   pos_specific_score_matrixt   pssmt   replacement_dictionaryt   rep_dictt   information_contentt   info_contentR=   R0   t   dataR2   t   reverse(    (    (    s   test_AlignIO.pyt   <module>   s  	:		#	' (!	
!
	!
			9
