o
    Rŀg
                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ dZedej	Z
G d	d
 d
eZG dd deZedkr@ddlmZ e  dS dS )z6Bio.SearchIO parser for Exonerate cigar output format.    N   )_BaseExonerateParser)_STRAND_MAP)ExonerateVulgarIndexer)ExonerateCigarParserExonerateCigarIndexerz^cigar:\s+
        (\S+)\s+(\d+)\s+(\d+)\s+([\+-\.])\s+  # query: ID, start, end, strand
        (\S+)\s+(\d+)\s+(\d+)\s+([\+-\.])\s+  # hit: ID, start, end, strand
        (\d+)(\s+.*)$                         # score, vulgar components
        c                   @   s   e Zd ZdZdZdd ZdS )r   z#Parser for Exonerate cigar strings.cigarc           
      C   s^  |d }|d }|d }|  dd  tt| j}| jr|d |dks(J |d |d	ks3J |d
 |dks>J |d |dksIJ |d |dksTJ |d |dks_J |d |dksjJ |d |dksuJ |d |dksJ n?|d|d< |d	|d< |d|d
< |d|d< |d|d< |d|d< |d|d< |d|d< |d|d< t|d  |d< t|d  |d< t|d }t|d
 }t|d }t|d }	t	|||d< t
|||d
< t	||	|d< t
||	|d< t|d |d< |d|d< |d |d
 fg|d< |d |d fg|d< |||dS )zIParse alignment block for cigar format, return query results, hits, hsps.qresulthithspc                 S   s
   |  dS )Nr   )
startswith)line r   \/var/www/html/myenv/lib/python3.10/site-packages/Bio/SearchIO/ExonerateIO/exonerate_cigar.py<lambda>&   s   
 z<ExonerateCigarParser.parse_alignment_block.<locals>.<lambda>idr   query_start   	query_end   query_strand      	hit_start   hit_end   
hit_strand   score	   
   
cigar_compquery_ranges
hit_ranges)r	   r
   r   )
read_untilresearch	_RE_CIGARr   has_c4_alignmentgroupr   intminmax)
selfheaderr	   r
   r   cigarsqstartqendhstarthendr   r   r   parse_alignment_block!   sN   z*ExonerateCigarParser.parse_alignment_blockN)__name__
__module____qualname____doc__	_ALN_MARKr5   r   r   r   r   r      s    r   c                   @   s    e Zd ZdZeZdZdd ZdS )r   z(Indexer class for exonerate cigar lines.s   cigarc                 C   sF   | j }|| | }|| jsJ |tt| }|	dS )z.Return the query ID of the nearest cigar line.r   )
_handleseekreadliner   _query_markr&   r'   r(   decoder*   )r.   poshandler   r   r   r   r   get_qresult_id^   s   

z$ExonerateCigarIndexer.get_qresult_idN)r6   r7   r8   r9   r   _parserr>   rB   r   r   r   r   r   X   s
    r   __main__)run_doctest)r9   r&   _baser   r   exonerate_vulgarr   __all__compileVERBOSEr(   r   r   r6   
Bio._utilsrE   r   r   r   r   <module>   s    
<
