o
    Rŀg6                     @   s   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 ddlm	Z	 dd	lm
Z
 d
ZG dd de
ZG dd deZG dd deZG dd de	ZG dd de	ZG dd dZG dd deZedkrtddlmZ e  dS dS )z9Bio.SearchIO parser for HMMER domain table output format.    )chain)Hit)HSP)HSPFragment)QueryResult   )Hmmer3TabIndexer)Hmmer3TabParser)Hmmer3DomtabHmmhitParserHmmer3DomtabHmmqueryParserHmmer3DomtabHmmhitIndexerHmmer3DomtabHmmqueryIndexerHmmer3DomtabHmmhitWriterHmmer3DomtabHmmqueryWriterc                   @   s    e Zd ZdZdd Zdd ZdS )Hmmer3DomtabParserzBase hmmer3-domtab iterator.c                 C   s8  | j sJ dd | j  dD }t|dkr$d|dd |d< nt|dk r7|d t|dks7J i }|d |d	< |d
 |d< t|d |d< i }|d |d	< |d |d< t|d |d< t|d |d< t|d |d< t|d |d< |d |d< i }t|d |d< t|d |d< t|d |d< t|d |d< t|d |d< t|d d |d < t|d! |d"< t|d# |d$< i }d |d%< |d&< t|d' d |d(< t|d) |d*< t|d+ d |d,< t|d- |d.< d/|d0< | js|d. |d* |d*< |d.< |d, |d( |d(< |d,< ||||d1S )2z3Return a dictionary of parsed row values (PRIVATE).c                 S   s   g | ]}|r|qS  r   ).0xr   r   V/var/www/html/myenv/lib/python3.10/site-packages/Bio/SearchIO/HmmerIO/hmmer3_domtab.py
<listcomp>"   s    z1Hmmer3DomtabParser._parse_row.<locals>.<listcomp>       N    id   	accession   seq_lenr   r         evalue   bitscore   biasdescription	   domain_index   evalue_cond            	env_start   env_end   acc_avg
hit_strandquery_strand   	hit_start   hit_end   query_start   	query_endproteinmolecule_type)qresulthithspfrag)	linestripsplitlenjoinappendintfloat
hmm_as_hit)selfcolsrA   rB   rC   rD   r   r   r   
_parse_row   sR   

zHmmer3DomtabParser._parse_rowc                 c   s   d}d}d}d}d}d}d}d}d}	d}
d\}}g g }}d}d}	 |dur-|}|}	|}
| j rG| j d	sG|  }|d
 d }|d d }n|}d\}}|	|krT|}n|}|
|ks^||kra|}n|}|durt|
|	}|d  D ]
\}}t||| qrt|g}|d  D ]
\}}t||| q|| ||krt|}|d  D ]
\}}t||| q|| g }||ks||krt	||	}|d
  D ]
\}}t||| q|V  ||krdS g }| j
 | _ q#)z%Return QueryResult objects (PRIVATE).r   r   r   r    r   N)NNT#rA   r   rB   rD   rC   )rE   
startswithrP   r   itemssetattrr   rJ   r   r   handlereadline)rN   	state_EOFstate_QRES_NEWstate_QRES_SAMEstate_HIT_NEWstate_HIT_SAME
qres_state	hit_state
file_stateprev_qidprev_hidcurprevhit_listhsp_listcur_qidcur_hidrD   attrvaluerC   rB   rA   r   r   r   _parse_qresultV   sp   





z!Hmmer3DomtabParser._parse_qresultN)__name__
__module____qualname____doc__rP   ri   r   r   r   r   r      s    7r   c                   @      e Zd ZdZdZdS )r
   zHMMER domain table parser using hit coordinates.

    Parser for the HMMER domain table format that assumes HMM profile
    coordinates are hit coordinates.
    TNrj   rk   rl   rm   rM   r   r   r   r   r
          r
   c                   @   rn   )r   zHMMER domain table parser using query coordinates.

    Parser for the HMMER domain table format that assumes HMM profile
    coordinates are query coordinates.
    FNro   r   r   r   r   r      rp   r   c                   @      e Zd ZdZeZdZdS )r   zHMMER domain table indexer using hit coordinates.

    Indexer class for HMMER domain table output that assumes HMM profile
    coordinates are hit coordinates.
    r   N)rj   rk   rl   rm   r
   _parser_query_id_idxr   r   r   r   r          r   c                   @   rq   )r   zHMMER domain table indexer using query coordinates.

    Indexer class for HMMER domain table output that assumes HMM profile
    coordinates are query coordinates.
    r   N)rj   rk   rl   rm   r   rr   rs   r   r   r   r   r      rt   r   c                   @   s6   e Zd ZdZdZdd Zdd Zddd	Zd
d ZdS )r   zHMMER domain table writer using hit coordinates.

    Writer for hmmer3-domtab output format which writes hit coordinates
    as HMM profile coordinates.
    Tc                 C   s
   || _ dS )zInitialize the class.N)rU   )rN   rU   r   r   r   __init__   s   
z!Hmmer3DomtabHmmhitWriter.__init__c           	      C   s   | j }d\}}}}zt|}W n ty   ||   Y n<w || | t|g|D ],}|rZ|| | |d7 }|t|7 }|tdd |D 7 }|tdd |D 7 }q.||||fS )zsWrite to the handle.

        Returns a tuple of how many QueryResult, Hit, and HSP objects were written.

        )r   r   r   r   r   c                 s   s    | ]}t |V  qd S N)rH   r   rB   r   r   r   	<genexpr>   s    z6Hmmer3DomtabHmmhitWriter.write_file.<locals>.<genexpr>c                 s   s    | ]}t |jV  qd S rv   )rH   	fragmentsrw   r   r   r   rx      s    )	rU   nextStopIterationwrite_build_headerr   
_build_rowrH   sum)	rN   qresultsrU   qresult_counterhit_counterhsp_counterfrag_counterfirst_qresultrA   r   r   r   
write_file   s"   z#Hmmer3DomtabHmmhitWriter.write_fileNc                 C   s&  |r0d}t dt|d j}zt dt|j}t dt|d j}W n ty/   d\}}Y nw d\}}}}d|| d d | | d	d
ddddf }|d|d d|dd|d|dddddddddddddddddddf 7 }|d |d d!|d"d#|d$|d"d#d%d&d#d'd'd%d%d&d#d#d#d#d#d#d#d(d)f 7 }|S )*zBReturn the header string of a domain HMMER table output (PRIVATE).r1   r   
   r   r   )r1   r1   r   r   z#%*s %22s %40s %11s %11s %11s
r   r7   r   z--- full sequence ---z(-------------- this domain -------------z	hmm coordz	ali coordz	env coordz`#%-*s %-*s %5s %-*s %-*s %5s %9s %6s %5s %3s %3s %9s %9s %6s %5s %5s %5s %5s %5s %5s %5s %4s %s
z target namer   tlenz
query nameqlenzE-valuescorer&   rQ   ofzc-Evaluezi-Evaluefromtoacczdescription of targetz\#%*s %*s %5s %*s %*s %5s %9s %6s %5s %3s %3s %9s %9s %6s %5s %5s %5s %5s %5s %5s %5s %4s %s
z-------------------z
----------z-----z--------------------z	---------z------z---z----z---------------------)maxrH   r   r   AttributeError)rN   r   qnamewtnamewqaccwtaccwheaderr   r   r   r}      sH   

z&Hmmer3DomtabHmmhitWriter._build_headerc                 C   sf  d}t dt|j}t dt|d j}zt dt|j}t dt|d j}|j}W n ty:   d\}}d}Y nw |D ]s}z|j}	W n tyO   d}	Y nw |jD ]\}
| jri|
j}|
jd }|
j	}|
j
d }n|
j	}|
j
d }|
j}|
jd }|d||j||	|j||j|||j|j|j|j|
jt|j|
j|
j|
j|
j|||||
jd |
j|
j|jf 7 }qSq=|S )	zGReturn a string or one row or more of the QueryResult object (PRIVATE).r   r1   r   r   r   -r   zq%-*s %-*s %5d %-*s %-*s %5d %9.2g %6.1f %5.1f %3d %3d %9.2g %9.2g %6.1f %5.1f %5d %5d %5ld %5ld %5d %5d %4.2f %s
)r   rH   r   r   r   hspsrM   r:   r8   r>   r<   r   r"   r$   r&   r)   r+   r0   r2   r4   r'   )rN   rA   rowsr   r   r   r   qresult_accrB   hit_accrC   hmm_tohmm_fromali_toali_fromr   r   r   r~   #  sz   





/z#Hmmer3DomtabHmmhitWriter._build_rowrv   )	rj   rk   rl   rm   rM   ru   r   r}   r~   r   r   r   r   r      s    
*r   c                   @   rn   )r   zHMMER domain table writer using query coordinates.

    Writer for hmmer3-domtab output format which writes query coordinates
    as HMM profile coordinates.
    FNro   r   r   r   r   r   l  rp   r   __main__)run_doctestN)rm   	itertoolsr   Bio.SearchIO._modelr   r   r   r   
hmmer3_tabr   r	   __all__r   r
   r   r   r   r   r   rj   
Bio._utilsr   r   r   r   r   <module>   s,   
 

 
