ó
JÛáIc           @   s  d  Z  d d l Z d d l Z 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 d d l m Z m Z m Z d d	 l m Z m Z d d
 l m Z y d d l Z Wn e k
 rë e d ƒ ‚ n Xd d d d g Z e ƒ  Z e j d k r»y e j d Z Wn e k
 rFe d ƒ ‚ n Xe j j e ƒ r²xV e D]K Z e j j  e j j! e e d ƒ ƒ r`e j j! e e d ƒ e e <q`q`Wn  [ [ nF d d l" Z" x4 e D], Z d e" j# d e ƒ k rÎe e e <qÎqÎW[ e$ e ƒ e$ e ƒ k  r(e d ƒ ‚ n  d „  Z% d „  Z& d „  Z' d e j( f d „  ƒ  YZ) d e j( f d „  ƒ  YZ* d e j( f d „  ƒ  YZ+ d d d „ Z- d d  „ Z. d! e j( f d" „  ƒ  YZ/ d# „  Z0 e1 d$ k re j2 d% d& ƒ Z3 e j4 d' e3 ƒ e0 ƒ  n  d S((   s:   Runs a few EMBOSS tools to check our wrappers and parsers.iÿÿÿÿN(   t   generic_run(   t   Applications(   t   SeqIO(   t   AlignIO(   t   MissingExternalDependencyError(   t   generic_proteint   generic_dnat   generic_nucleotide(   t   Seqt	   translate(   t	   SeqRecords;   Python 2.3 not supported, this needs the subprocess module.t   watert   needlet   seqrett   transeqt   win32t   EMBOSS_ROOTs-   Install EMBOSS if you want to use Bio.EMBOSS.s   .exes	   not founds   %s -helpc         C   s›   t  d } | d |  7} | d | 7} | d | 7} | d 7} | d 7} t j t | ƒ d t j d t j d	 t j d
 t j d k ƒ} | j j ƒ  | j	 S(   s   Run seqret, returns handle.R   s    -sequence s
    -sformat s    -osformat s    -autos    -filtert   stdint   stdoutt   stderrt   shellR   (
   t   exest
   subprocesst   Popent   strt   PIPEt   syst   platformR   t   closeR   (   t   filenamet
   old_formatt
   new_formatt   clinet   child(    (    s   test_Emboss.pyt   emboss_convert;   s    


			c         C   s$  t  |  ƒ t  | ƒ k r= t d t  |  ƒ t  | ƒ f ƒ ‚ n  xàt |  | ƒ D]Ï\ } } | j | j k rö | j | j k rö | j | j k rö | j | j k rö | j j d d ƒ | j j d d ƒ k rö t d | j | j | j | j f ƒ ‚ n  t  | j ƒ t  | j ƒ k r?t d t  | j ƒ t  | j ƒ f ƒ ‚ n  t | j ƒ j ƒ  t | j ƒ j ƒ  k rÄt  | j ƒ d k  rt d | j | j f ƒ ‚ qÄt d | j d	  | j d	  f ƒ ‚ n  | j	 rM | j	 rM t  | j	 ƒ t  | j	 ƒ k rM t d
 t  | j	 t  | j	 ƒ ƒ ƒ ‚ qM qM Wt
 S(   sE   Check two lists of SeqRecords agree, raises a ValueError if mismatch.s   %i vs %i recordst    t   _s$   '%s' or '%s' vs '%s' or '%s' recordss   %i vs %iiÈ   s   '%s' vs '%s's   '%s...' vs '%s...'id   s   %i vs %i features(   t   lent
   ValueErrort   zipt   idt   namet   replacet   seqR   t   uppert   featurest   True(   t   old_listt   new_listt   oldt   new(    (    s   test_Emboss.pyt   compare_recordsQ   s&    %$$*%+*'&c         C   s«   t  |  ƒ t  | ƒ k r= t d t  |  ƒ t  | ƒ f ƒ ‚ n  xg t |  | ƒ D]V \ } } t  | ƒ t  | ƒ k r– t d t  | ƒ t  | ƒ f ƒ ‚ n  t | | ƒ qM Wt S(   sE   Check two lists of Alignments agree, raises a ValueError if mismatch.s   %i vs %i alignmentss   Alignment with %i vs %i records(   R%   R&   R'   R3   R.   (   R/   R0   R1   R2   (    (    s   test_Emboss.pyt   compare_alignmentsl   s    %t   SeqRetSeqIOTestsc           B   sn   e  Z d  Z d „  Z g  d
 d „ Z g  d „ Z g  d
 d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z RS(   s;   Check EMBOSS seqret against Bio.SeqIO for converting files.c         C   s   t  ƒ  d  S(   N(   t   clean_up(   t   self(    (    s   test_Emboss.pyt   tearDownz   s    c         C   s8  | r* t  t j t | ƒ | | ƒ ƒ } n t  t j t | ƒ | ƒ ƒ } xé d d g D]Û } | | k rm qU n  d | } t | d ƒ } t j | | | ƒ | j ƒ  | j ƒ  t | | d ƒ }	 t  t j |	 d ƒ ƒ }
 y |  j t	 | |
 ƒ ƒ Wn/ t
 k
 r"} t
 d | | | | f ƒ ‚ n Xt j | ƒ qU Wd S(   s/   Can Bio.SeqIO write files seqret can read back?t   genbankt   fastas   Emboss/temp_%s.txtt   ws'   Disagree on file %s %s in %s format: %sN(   t   listR   t   parset   opent   writet   flushR   R"   t   assert_R3   R&   t   ost   remove(   R7   t   in_filenamet	   in_formatt   skip_formatst   alphabett   recordst   temp_formatR   t   temp_handlet   handlet   new_recordst   err(    (    s   test_Emboss.pyt   check_SeqIO_to_EMBOSS}   s&    $


c   	      C   sã   |  j  t j j | ƒ ƒ t t j t | ƒ | ƒ ƒ } x¥ d d d d d g D]Ž } | | k re qM n  t | | | ƒ } t t j | | ƒ ƒ } y |  j  t	 | | ƒ ƒ WqM t
 k
 rÚ } t
 d | | | | f ƒ ‚ qM XqM Wd S(   s3   Can Bio.SeqIO read seqret's conversion of the file?R9   R:   t   pirt   emblt   igs'   Disagree on %s file %s in %s format: %sN(   RA   RB   t   patht   isfileR<   R   R=   R>   R"   R3   R&   (	   R7   R   R   RF   t   old_recordsR   RK   RL   RM   (    (    s   test_Emboss.pyt   check_EMBOSS_to_SeqIO™   s    c         C   s-   |  j  | | | | ƒ |  j | | | ƒ d  S(   N(   RN   RU   (   R7   R   R   RF   RG   (    (    s   test_Emboss.pyt   check_SeqIO_with_EMBOSSª   s    c         C   s   |  j  d d ƒ d S(   sB   SeqIO & EMBOSS reading each other's conversions of a GenBank file.s   GenBank/cor6_6.gbR9   N(   RV   (   R7   (    (    s   test_Emboss.pyt   test_genbank²   s    c         C   s   |  j  d d ƒ d S(   s@   SeqIO & EMBOSS reading each other's conversions of an EMBL file.s   EMBL/U87107.emblRP   N(   RV   (   R7   (    (    s   test_Emboss.pyt	   test_embl¶   s    c         C   s   |  j  d d d t ƒd S(   s>   SeqIO & EMBOSS reading each other's conversions of an ig file.s    IntelliGenetics/VIF_mase-pro.txtRQ   RG   N(   RN   R   (   R7   (    (    s   test_Emboss.pyt   test_igº   s    c         C   s9   |  j  d d d d g ƒ|  j  d d d d d g ƒd S(   s>   SeqIO & EMBOSS reading each other's conversions of a PIR file.s   NBRF/clustalw.pirRO   RF   R9   s   NBRF/DMB_prot.pirRP   N(   RV   (   R7   (    (    s   test_Emboss.pyt   test_pirÃ   s    
c         C   s<   |  j  d d d d d g ƒ|  j  d d d d d g ƒd S(   sC   SeqIO & EMBOSS reading each other's conversions of a Clustalw file.s   Clustalw/hedgehog.alnt   clustalRF   RP   R9   s   Clustalw/opuntia.alnN(   RV   (   R7   (    (    s   test_Emboss.pyt   test_clustalwÌ   s    N(   t   __name__t
   __module__t   __doc__R8   t   NoneRN   RU   RV   RW   RX   RY   RZ   R\   (    (    (    s   test_Emboss.pyR5   w   s   							t   SeqRetAlignIOTestsc           B   sS   e  Z d  Z d „  Z g  d „ Z g  d d „ Z g  d d „ Z d „  Z d „  Z	 RS(   s;   Check EMBOSS seqret against Bio.SeqIO for converting files.c         C   s   t  ƒ  d  S(   N(   R6   (   R7   (    (    s   test_Emboss.pyR8   Ö   s    c   
      C   s5  |  j  t j j | ƒ | ƒ t t j t | ƒ | ƒ ƒ } d d d g } t | ƒ d k rq | j	 d d g ƒ n  x½ | D]µ } | | k r qx n  t
 | | | ƒ } y t t j | | ƒ ƒ } Wn  t d | | | f ƒ ‚ n Xy |  j  t | | ƒ ƒ Wqx t k
 r,}	 t d | | | |	 f ƒ ‚ qx Xqx Wd	 S(
   s1   Can AlignIO read seqret's conversion of the file?R[   t   phylipRQ   i   R:   t   nexuss$   Can't parse %s file %s in %s format.s'   Disagree on %s file %s in %s format: %sN(   RA   RB   RR   RS   R<   R   R=   R>   R%   t   extendR"   R&   R4   (
   R7   R   R   RF   t
   old_alignst   formatsR   RK   t
   new_alignsRM   (    (    s   test_Emboss.pyt   check_EMBOSS_to_AlignIOÙ   s&    c         C   s›  | r* t  t j t | ƒ | | ƒ ƒ } n t  t j t | ƒ | ƒ ƒ } d d d g } t | ƒ d k r | j d d g ƒ n  x| D]} | | k rž q† n  d | } t | d ƒ }	 y t j | |	 | ƒ Wn+ t k
 rû |	 j ƒ  t	 j
 | ƒ q† n X|	 j ƒ  |	 j ƒ  t | | d ƒ }
 t  t j |
 d ƒ ƒ } y |  j t | | ƒ ƒ Wn/ t k
 r…} t d	 | | | | f ƒ ‚ n Xt	 j
 | ƒ q† Wd
 S(   s1   Can Bio.AlignIO write files seqret can read back?R[   Rb   RQ   i   R:   Rc   s   Emboss/temp_%s.txtR;   s'   Disagree on file %s %s in %s format: %sN(   R<   R   R=   R>   R%   Rd   R?   R&   R   RB   RC   R@   R"   RA   R4   (   R7   RD   RE   RF   RG   Re   Rf   RI   R   RJ   RK   Rg   RM   (    (    s   test_Emboss.pyt   check_AlignIO_to_EMBOSSð   s8    



c         C   s-   |  j  | | | | ƒ |  j | | | ƒ d  S(   N(   Ri   Rh   (   R7   R   R   RF   RG   (    (    s   test_Emboss.pyt   check_AlignIO_with_EMBOSS  s    c         C   s]   |  j  d d ƒ |  j  d d ƒ |  j  d d d d g ƒ|  j  d d ƒ |  j  d d ƒ d	 S(
   sE   AlignIO & EMBOSS reading each other's conversions of a ClustalW file.s   Clustalw/hedgehog.alnR[   s   Clustalw/opuntia.alns   Clustalw/odd_consensus.alnRF   Rc   s   Clustalw/protein.alns   Clustalw/promals3d.alnN(   Rj   (   R7   (    (    s   test_Emboss.pyt   test_align_clustalw"  s    
c         C   st   |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ |  j  d d ƒ d	 S(
   sC   AlignIO & EMBOSS reading each other's conversions of a PHYLIP file.s   Phylip/horses.phyRb   s   Phylip/hennigian.phys   Phylip/reference_dna.phys   Phylip/reference_dna2.phys   Phylip/interlaced.phys   Phylip/interlaced2.phys   Phylip/random.phyN(   Rj   (   R7   (    (    s   test_Emboss.pyR\   +  s    N(
   R]   R^   R_   R8   Rh   R`   Ri   Rj   Rk   R\   (    (    (    s   test_Emboss.pyRa   Ó   s   	)		t   PairwiseAlignmentTestsc           B   sb   e  Z d  Z d „  Z e d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z RS(
   s>   Run pairwise alignments with water and needle, and parse them.c         C   s   t  ƒ  d  S(   N(   R6   (   R7   (    (    s   test_Emboss.pyR8   9  s    c         C   s¦  t  | ƒ } t  | ƒ } |  j t | ƒ t | ƒ ƒ xkt | | ƒ D]Z\ } } |  j t | ƒ d ƒ | d j | j k r» | d j | j k r» t d | d j | j | j f ƒ ‚ n  | r1|  j t | d j	 ƒ j
 d d ƒ | k ƒ |  j t | d j	 ƒ j
 d d ƒ j ƒ  t | j	 ƒ j ƒ  k ƒ qD |  j t | ƒ t | d j	 ƒ j
 d d ƒ ƒ |  j t | j	 ƒ j ƒ  t | d j	 ƒ j
 d d ƒ j ƒ  ƒ qD Wt S(   s&   Check pairwise alignment data is sane.i   i   s   %s vs %s or %si    t   -t    (   R<   t   assertEqualR%   R'   R(   R)   t   AssertionErrorRA   R   R+   R*   R,   R.   (   R7   t	   query_seqt   targetst
   alignmentst   localt   targett	   alignment(    (    s   test_Emboss.pyt   pairwise_alignment_check<  s$    #"
(/*c         C   s¨  t  j d t d ƒ } | j d d ƒ | j d d ƒ | j d d ƒ | j d	 d
 ƒ | j d d ƒ t | ƒ \ } } } | j ƒ  j ƒ  } |  j | j d ƒ | ƒ |  j	 | j ƒ  j ƒ  d ƒ | j
 d k rå t j d | IJn  |  j	 | j
 d ƒ | j d ƒ } |  j	 | d ƒ t j j | ƒ s/t ‚ t j t | ƒ d ƒ } |  j	 t | ƒ d ƒ |  j	 t | d j ƒ d ƒ |  j	 t | d j ƒ d ƒ t j | ƒ d S(   s,   water with the asis trick, output to a file.t   cmdR   s
   -asequences   asis:ACCCGGGCGCGGTs
   -bsequences   asis:ACCCGAGCGCGGTs   -gapopent   10s
   -gapextends   0.5s   -outfiles   Emboss/temp_test.waters   Smith-Waterman local alignmentRn   i    s   
%st   embossi   t   ACCCGGGCGCGGTi   t   ACCCGAGCGCGGTN(   R   t   WaterCommandlineR   t   set_parameterR    t   readt   stripRA   t
   startswithRo   t   return_codeR   R   t
   get_resultRB   RR   RS   Rp   R   R>   R%   R   R+   RC   (   R7   R    t   resultt   outRM   t   errorsR   t   align(    (    s   test_Emboss.pyt   test_water_fileX  s*     c         C   s  t  d } | d 7} | d 7} | d 7} | d 7} t j t | ƒ d t j d t j d t j d	 t j d
 k ƒ} | j j ƒ  t	 j
 | j d ƒ } |  j t | ƒ d ƒ |  j t | d j ƒ d ƒ |  j t | d j ƒ d ƒ | j j
 ƒ  d k sþ t ‚ d | j ƒ  k st ‚ d S(   s.   water with asis trick, output piped to stdout.R   s    -asequence asis:ACCCGGGCGCGGTs    -bsequence asis:ACCCGAGCGCGGTs    -autos    -filterR   R   R   R   R   Rz   i   i    R{   i   R|   Rn   N(   R   R   R   R   R   R   R   R   R   R   R   R   Ro   R%   R+   R   Rp   t   wait(   R7   R    R!   R‡   (    (    s   test_Emboss.pyt   test_water_pipedt  s"    




			c         C   s  t  d } | d 7} | d 7} | d 7} | d 7} t j t | ƒ d t j d t j d t j d	 t j d
 k ƒ} | j j ƒ  t	 j
 | j d ƒ } |  j t | ƒ d ƒ |  j t | d j ƒ d ƒ |  j t | d j ƒ d ƒ | j j
 ƒ  d k sþ t ‚ d | j ƒ  k st ‚ d S(   s/   needle with asis trick, output piped to stdout.R   s    -asequence asis:ACCCGGGCGCGGTs    -bsequence asis:ACCCGAGCGCGGTs    -autos    -filterR   R   R   R   R   Rz   i   i    R{   i   R|   Rn   N(   R   R   R   R   R   R   R   R   R   R   R   R   Ro   R%   R+   R   Rp   R‰   (   R7   R    R!   R‡   (    (    s   test_Emboss.pyt   test_needle_pipedŒ  s"    




			c   	      C   sÈ  d } d } d } |  j  t j j | ƒ ƒ t j j | ƒ rM t j | ƒ n  t j d t d ƒ } | j d d | ƒ | j d | ƒ | j d	 d
 ƒ | j d d ƒ | j d | ƒ t	 | ƒ \ } } } | j
 ƒ  j ƒ  } |  j  | j d ƒ | ƒ |  j | j
 ƒ  j ƒ  d ƒ | j d k r6t j d | IJn  |  j | j d ƒ |  j | j d ƒ | ƒ t j j | ƒ szt ‚ |  j | t j t | ƒ d ƒ t j t | ƒ d ƒ d t ƒt j | ƒ d S(   sF   water with the asis trick and nucleotide FASTA file, output to a file.tŒ   ACACACTCACACACACTTGGTCAGAGATGCTGTGCTTCTTGGAAGCAAGGNCTCAAAGGCAAGGTGCACGCAGAGGGACGTTTGAGTCTGGGATGAAGCATGTNCGTATTATTTATATGATGGAATTTCACGTTTTTATGs   Emboss/temp_test2.waters
   Fasta/f002Rx   R   s
   -asequences   asis:%ss
   -bsequences   -gapopenRy   s
   -gapextends   0.5s   -outfiles   Smith-Waterman local alignmentRn   i    s   
%sR:   Rz   Rt   N(   RA   RB   RR   RS   RC   R   R}   R   R~   R    R   R€   R   Ro   R‚   R   R   Rƒ   Rp   Rw   R   R=   R>   R   R.   (	   R7   t   queryt   out_filet   in_fileR    R„   R…   RM   R†   (    (    s   test_Emboss.pyt   test_water_file2¦  s4     	c   	      C   sÈ  d } d } d } |  j  t j j | ƒ ƒ t j j | ƒ rM t j | ƒ n  t j d t d ƒ } | j d d | ƒ | j d | ƒ | j d	 d
 ƒ | j d d ƒ | j d | ƒ t	 | ƒ \ } } } | j
 ƒ  j ƒ  } |  j  | j d ƒ | ƒ |  j | j
 ƒ  j ƒ  d ƒ | j d k r6t j d | IJn  |  j | j d ƒ |  j | j d ƒ | ƒ t j j | ƒ szt ‚ |  j | t j t | ƒ d ƒ t j t | ƒ d ƒ d t ƒt j | ƒ d S(   s=   water with the asis trick and GenBank file, output to a file.t2   TGTTGTAATGTTTTAATGTTTCTTCTCCCTTTAGATGTACTACGTTTGGAs   Emboss/temp_test3.waters   GenBank/cor6_6.gbRx   R   s
   -asequences   asis:%ss
   -bsequences   -gapopent   1s
   -gapextends   0.5s   -outfiles   Smith-Waterman local alignmentRn   i    s   
%sR9   Rz   Rt   N(   RA   RB   RR   RS   RC   R   R}   R   R~   R    R   R€   R   Ro   R‚   R   R   Rƒ   Rp   Rw   R   R=   R>   R   R.   (	   R7   R   RŽ   R   R    R„   R…   RM   R†   (    (    s   test_Emboss.pyt   test_water_file3Ç  s4     	c   	      C   sÈ  d } d } d } |  j  t j j | ƒ ƒ t j j | ƒ rM t j | ƒ n  t j d t d ƒ } | j d d | ƒ | j d | ƒ | j d	 d
 ƒ | j d d ƒ | j d | ƒ t	 | ƒ \ } } } | j
 ƒ  j ƒ  } |  j  | j d ƒ | ƒ |  j | j
 ƒ  j ƒ  d ƒ | j d k r6t j d | IJn  |  j | j d ƒ |  j | j d ƒ | ƒ t j j | ƒ szt ‚ |  j | t j t | ƒ d ƒ t j t | ƒ d ƒ d t ƒt j | ƒ d S(   s?   water with the asis trick and SwissProt file, output to a file.t   DVCTGKALCDPVTQNIKTYPVKIENLRVMIs   Emboss/temp_test4.waters   SwissProt/sp004Rx   R   s
   -asequences   asis:%ss
   -bsequences   -gapopent   20s
   -gapextendt   5s   -outfiles   Smith-Waterman local alignmentRn   i    s   
%st   swissRz   Rt   N(   RA   RB   RR   RS   RC   R   R}   R   R~   R    R   R€   R   Ro   R‚   R   R   Rƒ   Rp   Rw   R   R=   R>   R   R.   (	   R7   R   RŽ   R   R    R„   R…   RM   R†   (    (    s   test_Emboss.pyt   test_water_file4é  s4     	c         C   sù   d } t  d } | d | 7} | d 7} | d 7} | d 7} t j t | ƒ d t j d t j d	 t j d
 t j d k ƒ} | j j ƒ  |  j	 | t
 j t d ƒ d ƒ t j | j d ƒ d t ƒ| j j ƒ  d k sÝ t ‚ d | j ƒ  k sõ t ‚ d S(   sJ   needle with asis trick, and nucleotide FASTA file, output piped to stdout.t,   ACACACTCACACACACTTGGTCAGAGATGCTGTGCTTCTTGGAAR   s    -asequence asis:s    -bsequence Fasta/f002s    -autos    -filterR   R   R   R   R   s
   Fasta/f002R:   Rz   Rt   Rn   i    N(   R   R   R   R   R   R   R   R   R   Rw   R   R=   R>   R   R   t   FalseR   R   Rp   R‰   (   R7   R   R    R!   (    (    s   test_Emboss.pyt   test_needle_piped2  s$    



				(   R]   R^   R_   R8   R.   Rw   Rˆ   RŠ   R‹   R   R“   R˜   R›   (    (    (    s   test_Emboss.pyRl   6  s   					!	"	"c   	      C   s,  |  s t  |  ƒ ‚ n  t d } t |  ƒ d k  rH d } | d |  7} nY d } t | d ƒ } t j t |  d d ƒg | d ƒ | j ƒ  | j	 ƒ  | d	 | 7} | d
 7} | d 7} | d k	 rØ | d t
 | ƒ 7} n  | d k	 rû | d t
 | ƒ 7} n  t j t
 | ƒ d t j d t j d t j d t j d k ƒ} | j j	 ƒ  | j j ƒ  } | d k rt  t
 | ƒ d | ƒ ‚ n  t j | j d ƒ } d | j ƒ  k r»t  t
 | ƒ ƒ ‚ n  | røt j | ƒ | j j d ƒ st  t
 | ƒ ƒ ‚ qn' | j j d ƒ st  t
 | ƒ ƒ ‚ n  t
 | j ƒ S(   s1   Call transeq, returns protein sequence as string.R   id   s    -sequence asis:%ss   Emboss/temp_transeq.txtR;   R(   t   TestR:   s    -sequence %ss    -autos    -filters
    -table %ss
    -frame %sR   R   R   R   R   Rn   s   
i    t   asisN(   R&   R   R%   R`   R>   R   R?   R
   R@   R   R   R   R   R   R   R   R   R   R   R   R‰   RB   RC   R(   R   R+   (	   t   sequencet   tablet   frameR    R   RK   R!   RM   t   record(    (    s   test_Emboss.pyt   emboss_translate'  sJ    
"



			c         C   sá   | d  k rp | t |  j ƒ  ƒ k sT | t t |  ƒ ƒ k sT | t t |  ƒ ƒ k rÝ t d |  | f ƒ ‚ qÝ nm | t |  j | ƒ ƒ k sÁ | t t |  | ƒ ƒ k sÁ | t t |  ƒ | ƒ k rÝ t d |  | | f ƒ ‚ n  t S(   Ns   %s -> %ss   %s -> %s (table %s)(   R`   R   R	   R&   R.   (   Rž   t   translationRŸ   (    (    s   test_Emboss.pyt   check_translationa  s    t   TranslationTestsc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s>   Run pairwise alignments with water and needle, and parse them.c         C   s   t  ƒ  d  S(   N(   R6   (   R7   (    (    s   test_Emboss.pyR8   s  s    c         C   s¶   t  d ƒ t  d t ƒ t  d t ƒ t  d t ƒ g } x| | D]t } t | ƒ d d k rn | t | ƒ d  } n  |  j t | ƒ d d ƒ |  j t | ƒ d k ƒ |  j | ƒ q: Wd S(   sB   transeq vs Bio.Seq for simple translations (including alt tables).t   ACGTGACTGACGTAGCATGCCACTAGGt   TAATACTATTAGt   TANTARTAYTAMTAKTAHTABTADTAVt   ACGGGGGGGGTAAGTGGTGTGTGTGTAGTi   i    N(   R   R   R%   Ro   RA   t   check(   R7   t   examplesRž   (    (    s   test_Emboss.pyt   test_simplev  s    	c         C   s†   t  | ƒ } |  j t | | ƒ ƒ x] d d d d d d d d d	 d
 d d d g D]. } t  | | ƒ } |  j t | | | ƒ ƒ qP Wt S(   sq   Compare our translation to EMBOSS's using all tables.

        Takes a Seq object (and a filename containing it).i   i   i   i   i   i   i	   i
   i   i   i   i   i   (   R¢   RA   R¤   R.   (   R7   Rž   R£   RŸ   (    (    s   test_Emboss.pyRª   ™  s    4c         C   s^   t  d j g  | D]. } | D]! } | D] } | | | ^ q$ q q ƒ t ƒ } |  j | ƒ d  S(   NRn   (   R   t   joinR   Rª   (   R7   t   letterst   c1t   c2t   c3Rž   (    (    s   test_Emboss.pyt   translate_all_codons¥  s    

$	c         C   s   |  j  d ƒ d S(   s?   transeq vs Bio.Seq on unambiguous DNA codons (inc. alt tables).t   ATCGatcgN(   R²   (   R7   (    (    s   test_Emboss.pyt   test_all_unambig_dna_codons­  s    c         C   s   |  j  d ƒ d S(   s?   transeq vs Bio.Seq on unambiguous RNA codons (inc. alt tables).t   AUCGaucgN(   R²   (   R7   (    (    s   test_Emboss.pyt   test_all_unambig_rna_codons±  s    c         C   s   |  j  d ƒ d S(   sC   transeq vs Bio.Seq on unambiguous DNA/RNA codons (inc. alt tables).t
   ATUCGatucgN(   R²   (   R7   (    (    s   test_Emboss.pyt   test_mixed_unambig_rna_codonsµ  s    (
   R]   R^   R_   R8   R¬   Rª   R²   R´   R¶   R¸   (    (    (    s   test_Emboss.pyR¥   p  s   		#				c          C   sK   xD t  j d ƒ D]3 }  |  j d ƒ r y t  j |  ƒ WqC qC Xq q Wd S(   s.   Fallback clean up method to remove temp files.t   Embosst   temp_N(   RB   t   listdirR   RC   (   R   (    (    s   test_Emboss.pyR6   ¹  s    t   __main__t	   verbosityi   t
   testRunner(5   R_   RB   R   t   unittestt   Bio.ApplicationR    t
   Bio.EmbossR   t   BioR   R   R   t   Bio.AlphabetR   R   R   t   Bio.SeqR   R	   t   Bio.SeqRecordR
   R   t   ImportErrort   exes_wantedt   dictR   R   t   environRR   t   KeyErrort   isdirR)   RS   R­   t   commandst	   getoutputR%   R"   R3   R4   t   TestCaseR5   Ra   Rl   R`   R¢   R¤   R¥   R6   R]   t   TextTestRunnert   runnert   main(    (    (    s   test_Emboss.pyt   <module>   sf   	%'				\cñ:I		