
    Ri(                     b    d Z ddlmZ ddlmZ ddlmZ ddlmZ  G d dej                        Zy)	zBio.Align support for "emboss" alignment output from EMBOSS tools.

This module contains a parser for the EMBOSS srspair/pair/simple file format,
for example from the needle, water, and stretcher tools.
    )	Alignment)
interfaces)Seq)	SeqRecordc                        e Zd ZdZdZd Zd Zy)AlignmentIteratorzEmboss alignment iterator.

    For reading the (pairwise) alignments from EMBOSS tools in what they
    call the "pairs" and "simple" formats.
    EMBOSSc                    |j                         }|st        d      |j                         dk7  rt        d      |z  i | _        d| j                  d<   d }|D ]1  }|j                         dk(  r y |j	                  d      st        d      |z  |<|j	                  d      r|d|d	d  j                         z   z  }e|| j                  d
<   d }|dd  j                  dd	      \  }}|dk(  r|j                         | j                  d<   |dk(  r|j                         | j                  d<   |dk(  r|j                         | j                  d<   |dk(  r|j                         | j                  d<   |dk(  s"|j                         }4 y )NzEmpty file.z(########################################Unexpected line: %ssrspairAlign_format# z#        zCommand line   :ProgramRundateReport_fileCommandline)readline
ValueErrorrstripmetadata
startswithstripsplit)selfstreamlinecommandlinekeyvalues         H/home/agent/.friday_env/lib/python3.12/site-packages/Bio/Align/emboss.py_read_headerzAlignmentIterator._read_header   sw    ]++;;=FF23d:: (1n% 	,D{{} JJ??4( !67$>>&??7+3ab)9#99K0;n-"abQ/JCi+0;;=i(	!+0;;=i(%/4{{}m,&05n-%#kkm+	,    c                 n   d }i }|D ]N  }|j                  d      }|s|j                  d      r)|j                  d      rg }d }d } nt        d|z         |D ]  }|j                  d      }|dk(  r n|j                         dk(  r1|j                  d      st        d      |z  	 |dd  j	                  dd	      \  }}	|dk(  rt        |	j                               }t              dk(  sJ t        |      D ]~  \  }
}|j                  d      st        d      |z  |dd  j	                  d      \  }}|
d	z   t        |      k(  sJ |j                  |j                                t        |      |k(  s} " %|dk(  r|	j                         ||<   ?|dk(  rt        |	j                               ||<   b|dk(  rt        |	j                               ||<   |dk(  rt        |	j                               }|dk(  r0t        |	j                         j	                  d      d         ||<   |dk(  r0t        |	j                         j	                  d      d         ||<   |dk(  r0t        |	j                         j	                  d      d         ||<   D|dk(  rt        |	j                               ||<   g|dk(  r|	j                         ||<   |dk(  r|	j                         ||<   |dk(  r|	j                         ||<   |dk(  r|	j                         ||<   t        d|z         y t              dk(  rt        d      t        d      dg|z  }dg|z  }d}dg|z  }dg|z  }d}d}|D ]  }|j                  d      }|s||k(  r
||k(  r nd}'|d d j                         }|dk(  r	||dd z  }H|j	                  d d	      \  }}||   j                  |      sJ |dd  j	                  d d	      \  }}t        |      }t        |      }t        ||         }|j                  d d      }|dk(  rIt        |      dkD  r;||k  r|d	z  }||t        |      z   k(  sJ |d	z  }||t        |      z
  k(  sJ |||<   n||   ||   k  rI| j                  d!   d"k(  rt        |      dk(  r|||   k(  sJ ||k(  sfJ |d	z  }||t        |      z   k(  sNJ | j                  d!   d"k(  r"t        |      dk(  r|d	z
  ||   k(  sJ ||k(  sJ |d	z  }||t        |      z
  k(  sJ |||<   ||xx   |z  cc<   ||xx   |z  cc<   |dk(  r|t        |      z  }n|t        ||         k(  sJ |d	z  } |D cg c]  }|j                          }}t        j                  |      \  }}g }t        |      }t        |      D ]  }
||
   }||
   }||
   }|dk(  rt!        |      }nZ||k  r!||
d d fxx   |z  cc<   t!        ||i|#      }n4||}}|||
d d f   z
  ||
d d f<   t!        d|i|#      j#                         }t%        |||
         }|j                  |        t        ||      }|r||_        |r	d$|i|_        |S # t        $ r |dd  j	                  d
d	      \  }}	Y w xY wc c}w )%Nz
z(#---------------------------------------z(#=======================================r   #r   r   r   r   z = Aligned_sequencesr   MatrixGap_penaltyExtend_penaltyLengthIdentity/
SimilarityGapsScoreLongest_IdentityLongest_SimilarityShortest_IdentityShortest_SimilarityzFailed to parse line '%s'zNumber of sequences missing!zLength of alignment missing!    G   -r   r   )lengthemboss_consensus)r   r   r   r   r   intlen	enumerateappendfloatreplacer   encoder   parse_printed_alignmentranger   reverse_complementr   annotationscolumn_annotations)r   r   number_of_sequencesrG   r    identifiersncols	sequencesr"   r#   inumber
identifieraligned_sequences	consensusstartsendscolumnindexprefixstartaligned_sequenceendr;   sequencecoordinatesrecordsndatarecord	alignments                                  r$   _read_next_alignmentz&AlignmentIterator._read_next_alignment?   s   " 	?D;;v&D!KL!KL  	 !6!=>>	?  =	D;;v&DAA$__T* !67$>>6!!"X^^C3
U ))&)%++-&8#;'1,,,(0 GAt??40()>?$FF)-ab)<&FJq5CK///&&z'7'7'9:;'+>> #(;;=C %#(#7C ((#(#7C EKKM*
"#&u{{}':':3'?'B#CC $#&u{{}':':3'?'B#CC #&u{{}':':3'?'B#CC #(#7C  **#(;;=C ,,#(;;=C ++#(;;=C --#(;;=C  !<t!CDDw=	z {q ;<<=;<<D..	D#66	**s(( ?	D;;v&D//E#2Y__&F|T"R[(	$*LLq$9!
E"5)44Z@@@(,RS	a(@% #E
#hYu-.+33C<Q;3x=1#4s{
"ec(m&;;;;q"ec(m&;;;;$)F5Me}U3 !MM.9YF #H 2#(DK#77#7#&%</<!QJE#&%#h-*?#??#? !MM.9YF #H 2#(19U#;;#;#&%</<1HC#&%#h-*?#??#?!U% H, !%(,<<(A:c"233F!S):5)A%BBBB
?	B ?P
*:##%
 
 "+!B!BCT!U	;	Nq 	#A1IEq'CQ<Dzt9AqD!U*!t}S9 %s$'+ad*;$;AqD!4y5HHJxQ8FNN6"!	#" g{3	$/I!,>	+JI(u  6
 "!"X^^E15
U6|
s   +Z
 Z2
!Z/.Z/N)__name__
__module____qualname____doc__fmtr%   ra    r&   r$   r   r      s     C!,Fwr&   r   N)	re   	Bio.Alignr   r   Bio.Seqr   Bio.SeqRecordr   r   rg   r&   r$   <module>rk      s,         #c
44 cr&   