o
    Rŀgx/                     @   sd   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 deZ
G d	d
 d
eZdS )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                   @   s   e Zd ZdZdd ZdS )ClustalWriterzClustalw alignment writer.c           
      C   s  t |dkr
td| dkrtdzt|j}W n ty&   d}Y nw |s+d}|dr7d| d}nd	| d
}d}t |d }|dkrMtdd|jv rX|jd }nz|j}W n tyh   d}Y nw ||kr|d |krx|| }nd}|D ]#}|j	dd 
ddd}	|	t|j|||  7 }	||	d 7 }q||r|d||||   d 7 }|d7 }||7 }||ksm| j|d  dS )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line r)   I/var/www/html/myenv/lib/python3.10/site-packages/Bio/AlignIO/ClustalIO.pywrite_alignment   sR   



zClustalWriter.write_alignmentN)__name__
__module____qualname____doc__r+   r)   r)   r)   r*   r      s    r   c                   @   s   e Zd ZdZdZdd ZdS )ClustalIteratorzClustalw alignment iterator.Nc              	   C   s  | j }| jdu r| }n| j}d| _|stg d}|  d |vr6td|  d d|f d}| D ]}|d dkrP|d dkrP|d	d }|d d
v rZ|} nq<| }| dkro| }| dkseg }g }d}d}		 |d dkr| dkr|  }
t	|
dk st	|
dkrtd| |
|
d  |
|
d	  |	du rt	|
d |t	|
d d |
d	  }|t	|
d	  }t||}	~~|
d	 ||	 ksJ t	|
dkrzt|
d }W n ty   td| dw t	|
d	 dd|krtd| nM|d dkr_t	|t	|ks%J t	|dks.J |	dus5J ||	 }|d|	j  rEJ ||	jd  rQJ | }| dks^J n
n	| }|shnqx| dksrJ |	dusyJ |D ]}t	|t	|d ksJ q{|rt	|t	|d ksJ d}|s|r| dkr| }|sn
|r| dks|sn)|dd	d |v r|| _ntt	|D ]}|d dkrtd||  }
t	|
dk st	|
dkrtd||
d || krtd|
d || f |
d	 ||	 krSt	|
d |t	|
d d |
d	  }||	jkrDtd|	|f |t	|
d	  }t||}	~~||  |
d	 7  < t	|| t	|d kslJ t	|
dkrzt|
d }W n ty   td| dw t	|| dd|krtd| | }q|r|d dksJ |	dusJ |||	 7 }t	|t	|d ksJ |d|	j  rJ ||	jd  rJ | }|rt	|t	|ksJ t	|dkst	|d dkrt| jdur!| jt	|kr!tdt	|| jf dd t||D }t|}|r5||_|rXt	|d }t	||krPtd|t	||f ||jd< ||_|S )z)Parse the next alignment from the handle.N)CLUSTALPROBCONSMUSCLEMSAPROBSKalign	Biopythonr   z$%s is not a known CLUSTAL header: %sz, ()   
0123456789r   Tr         zCould not parse line:
z+Could not parse line, bad sequence number:
-z/Could not parse line, invalid sequence number:
FzUnexpected line:
z4Identifiers out of order? Got '%s' but expected '%s'zOld location %s -> %i:XXz5Found %i records in this alignment, told to expect %ic                 s   s&    | ]\}}t t|||d V  qdS ))r   descriptionN)r   r   ).0isr)   r)   r*   	<genexpr>)  s   $ z+ClustalIterator.__next__.<locals>.<genexpr>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fieldsrO   endlettersrB   donerA   recordsr    alignment_lengthr)   r)   r*   __next__b   sB  

*
4*
F 
zClustalIterator.__next__)r,   r-   r.   r/   rD   r`   r)   r)   r)   r*   r0   ]   s    r0   N)r/   	Bio.Alignr   Bio.AlignIO.Interfacesr   r   Bio.Seqr   Bio.SeqRecordr   r   r0   r)   r)   r)   r*   <module>   s   I