
    {Tix/                     p    d 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	  G d de      Z
 G d	 d
e      Zy)zBio.AlignIO support for "clustal" output from CLUSTAL W and other tools.

You are expected to use this module via the Bio.AlignIO functions (or the
Bio.SeqIO functions if you want to work directly with the gapped sequences).
    )MultipleSeqAlignment)AlignmentIterator)SequentialAlignmentWriter)Seq)	SeqRecordc                       e Zd ZdZd Zy)ClustalWriterzClustalw alignment writer.c                     t        |      dk(  rt        d      |j                         dk(  rt        d      	 t        |j                        }|sd}|j                  d      rd| d}nd	| d
}d}t        |d         }|dk  rt        d      d|j                  v r|j                  d   }n	 |j                  }||k7  r|dz   |kD  r||z
  }nd}|D ]V  }|j                  dd j                  dd      j                  d      }	|	t        |j                  |||z          z  }	||	dz   z  }X |r|d||||z    z   dz   z  }|dz  }||z  }||k7  r| j                  j                  |dz          y# t
        $ r d}Y -w xY w# t
        $ r d}Y w xY w)z=Use this to write (another) single alignment to an open file.r   zMust have at least one sequencez Non-empty sequences are required z1.81z2.zCLUSTAL z multiple sequence alignment


zCLUSTAL X (z ) multiple sequence alignment


clustal_consensusN2       _$   
z$                                    )len
ValueErrorget_alignment_lengthstr_versionAttributeError
startswithcolumn_annotations
_star_infoidreplaceljustseqhandlewrite)
self	alignmentversionoutputcur_char
max_length	star_infoshow_numrecordlines
             H/home/agent/.local/lib/python3.12/site-packages/Bio/AlignIO/ClustalIO.pywrite_alignmentzClustalWriter.write_alignment   s   y>Q>??))+q0?@@	),,-G Gd#y(JKF #7)+NOF1&
??@@)">">>!445HII!%00	
 *$ 2+%0
 $ & yy2..sC8>>rBFJJx8h3FHII$+%& 8x(7J!LLtS dNF H5 *$: 	&4-(q  	G	. " ! 	!s#   E- /E? -E<;E<?FFN)__name__
__module____qualname____doc__r-        r,   r	   r	      s    $C)r3   r	   c                       e Zd ZdZdZd Zy)ClustalIteratorzClustalw alignment iterator.Nc                 x   | j                   }| j                  |j                         }n| j                  }d| _        |st        g d}|j	                         j                         d   |vr>t        |j	                         j                         d   ddj                  |            d}|j                         D ]"  }|d   dk(  r|d   dk(  r|d	d }|d   d
v s |} n |j                         }|j	                         dk(  r$|j                         }|j	                         dk(  r$g }g }d}d}		 |d   dk7  r0|j	                         dk7  r|j                         j                         }
t        |
      dk  st        |
      dkD  rt        d|       |j                  |
d          |j                  |
d	          |	Qt        |
d         |t        |
d         d j                  |
d	         z   }|t        |
d	         z   }t        ||      }	~~|
d	   ||	   k(  sJ t        |
      dk(  r	 t        |
d         }t        |
d	   j                  dd            |k7  rt        d|       |d   dk(  rt        |      t        |      k(  sJ t        |      dkD  sJ |	J ||	   }|d|	j                   j	                         rJ ||	j                   d j	                         rJ |j                         }|j	                         dk(  sJ nn|j                         }|sn|j	                         dk(  sJ |	J |D ]  }t        |      t        |d         k(  rJ  |rt        |      t        |d         k(  sJ d}|s|r|j	                         dk(  r*|j                         }|sn|s|j	                         dk(  r*|snH|j                  dd	      d   |v r	|| _        n(t#        t        |            D ]  }|d   dk(  rt        d|      |j                         j                         }
t        |
      dk  st        |
      dkD  rt        d|      |
d   ||   k7  rt        d|
d   d||   d      |
d	   ||	   k7  rpt        |
d         |t        |
d         d j                  |
d	         z   }||	j                  k7  rt        d|	|fz        |t        |
d	         z   }t        ||      }	~~||xx   |
d	   z  cc<   t        ||         t        |d         k(  sJ t        |
      dk(  r>	 t        |
d         }t        ||   j                  dd            |k7  rt        d|       |j                         } |r|d   dk(  sJ |	J |||	   z  }t        |      t        |d         k(  sJ |d|	j                   j	                         rJ ||	j                   d j	                         rJ |j                         }|st        |      t        |      k(  sJ t        |      dk(  st        |d         dk(  rt        | j$                  ;| j$                  t        |      k7  r#t        dt        |      | j$                  fz        d t'        ||      D        }t)        |      }|r||_        |rLt        |d         }t        |      |k7  rt        d|t        |      |fz        ||j,                  d<   ||_        |S # t        $ r t        d|       dw xY w# t        $ r t        d|       dw xY w)z)Parse the next alignment from the handle.N)CLUSTALPROBCONSMUSCLEMSAPROBSKalign	Biopythonr   z  is not a known CLUSTAL header: z, ()   
0123456789r   r         zCould not parse line:
z+Could not parse line, bad sequence number:
-z/Could not parse line, invalid sequence number:
FzUnexpected line:
zIdentifiers out of order? Got 'z' but expected ''zOld location %s -> %i:XXz5Found %i records in this alignment, told to expect %ic              3   P   K   | ]  \  }}t        t        |      ||          yw))r   descriptionN)r   r   ).0iss      r,   	<genexpr>z+ClustalIterator.__next__.<locals>.<genexpr>)  s$     Wfq!9SVq99Ws   $&z4Alignment length is %i, consensus length is %i, '%s'r   )r    _headerreadlineStopIterationstripsplitr   joinrstripr   appendfindsliceintr   startstoprangerecords_per_alignmentzipr   r   r   r   )r"   r    r+   known_headersr$   wordidsseqs	consensusseq_colsfieldsrW   endlettersrJ   donerI   recordsr#   alignment_lengths                       r,   __next__zClustalIterator.__next__b   s   <<??$D <<DDL
 ::<"-7::<%%'*DIIm,DF  JJL 	DAw#~$r(c/AbzAw,&	  jjlb ??$D jjlb  	 Aw#~$**,""4,,. v;?c&kAo$'>tf%EFF

6!9%F1I& #q	NT#fQi.2B-C-H-HPQ-SSE#fQi.0C$UC0HsayDN222v;!#$"%fQi.
 6!9,,S"56'A(NtfU  aC3x3t9,,,3x!|#|+++ N	 0(..177999066888(zz|r))) ??$De h zz|r!!!###  	*Aq6Sa\)))	*y>Sa\111  

 2( 

 2 zz$"1%6#3s8_ *)7c>$'9$%BCC,,. v;?c&kAo$'>th%GHH!9A&$!!9c!f. 
 !9X.q	NT#fQi.2B-C-H-HPQ-SSE.()CxQVFW)WXX#fQi.0C$UC0Hs Q6!9$47|s47|333v;!#$"%fQi.
 47??334?(NtfU 
 (U*)X Aw#~%~+++T(^+	9~T!W555 0(..177999066888(I L 3x3t9$$$t9>Sa\Q. &&2**c#h6Gs8T7789 
 XCQUW(1	 !(I"47|9~!11 J'YCD  AJI(()<=#,I S & $(J4&Q#$$l & $(J4&Q#$$s   -\ 2\ \ \9)r.   r/   r0   r1   rL   rh   r2   r3   r,   r5   r5   ]   s    &GWr3   r5   N)r1   	Bio.Alignr   Bio.AlignIO.Interfacesr   r   Bio.Seqr   Bio.SeqRecordr   r	   r5   r2   r3   r,   <module>rm      s:    + 4 <  #F)- F)R\' \r3   