o
    Rŀg(                     @   sJ   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 dejZdS )	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                   @   s$   e Zd ZdZdZdd Zdd ZdS )AlignmentIteratorzEmboss alignment iterator.

    For reading the (pairwise) alignments from EMBOSS tools in what they
    call the "pairs" and "simple" formats.
    EMBOSSc                 C   sJ  zt |}W n ty   tdd w | dkrtd| i | _d| jd< d }|D ]w}| dkr6 d S |dsAtd| |d ur^|drW|d|d	d    7 }q+|| jd
< d }|dd  dd	\}}|dkrv| | jd< q+|dkr| | jd< q+|dkr| | jd< q+|dkr| | jd< q+|dkr| }q+d S )NzEmpty file.z(########################################Unexpected line: %ssrspairAlign_format# z#        zCommand line   :ProgramRundateReport_fileCommandline)nextStopIteration
ValueErrorrstripmetadata
startswithstripsplit)selfstreamlinecommandlinekeyvalue r"   D/var/www/html/myenv/lib/python3.10/site-packages/Bio/Align/emboss.py_read_header   sD   




zAlignmentIterator._read_headerc              	   C   s  d }i }|D ]"}| d}|sq|drq|dr#g }d }d } ntd| |D ]:}| d}|dkr: n/| dkrAq+|dsLtd| z|dd  dd	\}}	W n tyo   |dd  d
d	\}}	Y nw |dkrt|	 }t|dksJ t|D ]3\}
}|dstd| |dd  d\}}|
d	 t|ksJ ||  t||kr nqq+|dkr|	 ||< q+|dkrt	|	 ||< q+|dkrt	|	 ||< q+|dkrt|	 }q+|dkrt|	 dd ||< q+|dkrt|	 dd ||< q+|dkr#t|	 dd ||< q+|dkr1t	|	 ||< q+|dkr=|	 ||< q+|dkrI|	 ||< q+|dkrU|	 ||< q+|dkra|	 ||< q+td| d S t|dkrttd|d u r}tddg| }dg| }d}dg| }dg| }d}d}|D ]3}| d}|s||kr||kr nd}q|d d  }|dkr||dd 7 }q|d d	\}}|| |sJ |dd  d d	\}}t|}t|}t|| }|
d d}|dkr3t|dkr3||k r|d	8 }||t| ksJ n|d	8 }||t| ks.J |||< nj|| || krl| jd! d"kr\t|dkr\||| ksTJ ||ks[J nA|d	8 }||t| kskJ n1| jd! d"krt|dkr|d	 || ksJ ||ksJ n|d	8 }||t| ksJ |||< ||  |7  < ||  |7  < |dkr|t|7 }n|t|| ksJ |d	7 }qd#d$ |D }t|\}}g }t|}t|D ]^}
||
 }||
 }||
 }|dkrt|}n9||k r||
d d f  |7  < t||i|d%}n||}}|||
d d f  ||
d d f< td|i|d% }t|||
 }|| qt||}|rP||_|rXd&|i|_|S )'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	   c                 S   s   g | ]}|  qS r"   )encode).0aligned_sequencer"   r"   r#   
<listcomp>   s    z:AlignmentIterator._read_next_alignment.<locals>.<listcomp>)lengthemboss_consensus)r   r   r   r   r   intlen	enumerateappendfloatreplacer   r   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startr:   endr<   sequencecoordinatesrecordsndatarecord	alignmentr"   r"   r#   _read_next_alignment@   s(  






























 

z&AlignmentIterator._read_next_alignmentN)__name__
__module____qualname____doc__fmtr$   r`   r"   r"   r"   r#   r      s
    $r   N)	rd   	Bio.Alignr   r   Bio.Seqr   Bio.SeqRecordr   r   r"   r"   r"   r#   <module>   s   