
    Ri
                         d Z ddlZddlmZ ddlmZ ddlmZ dZ ej                  dej                        Z
 G d	 d
e      Z G d de      Zedk(  rddlmZ  e        yy)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                       e Zd ZdZdZd Zy)r   z#Parser for Exonerate cigar strings.cigarc                    |d   }|d   }|d   }| j                  d        t        j                  t        | j                        }| j
                  r|d   |j                  d      k(  sJ |d   |j                  d      k(  sJ |d	   |j                  d
      k(  sJ |d   |j                  d      k(  sJ |d   |j                  d      k(  sJ |d   |j                  d      k(  sJ |d   |j                  d      k(  sJ |d   |j                  d      k(  sJ |d   |j                  d      k(  sJ |j                  d      |d<   |j                  d      |d<   |j                  d
      |d	<   |j                  d      |d<   |j                  d      |d<   |j                  d      |d<   |j                  d      |d<   |j                  d      |d<   |j                  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<   |j                  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                 $    | j                  d      S )Nr
   )
startswith)lines    `/home/agent/.friday_env/lib/python3.12/site-packages/Bio/SearchIO/ExonerateIO/exonerate_cigar.py<lambda>z<ExonerateCigarParser.parse_alignment_block.<locals>.<lambda>&   s    T__W%=     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hends
             r   parse_alignment_blockz*ExonerateCigarParser.parse_alignment_block!   s   #UmUm=>9dii0   4=FLLO333}%a888{#v||A666~&&,,q/999t9Q///{#v||A666y>V\\!_444|$Q777w<6<<?222"LLOGDM!'aC%||AC"(,,q/CQCI%||AC#\\!_C	N &QC!<<?CL *#n*=>N'L(9:LS'(3{#$S%&3y>" .Mvt,Kvt,KVT*I3w<(G"LL,L !$M 2C4DEFN!+.I?@L"3s;;r   N)__name__
__module____qualname____doc__	_ALN_MARKr9    r   r   r   r      s    -I4<r   r   c                       e Zd ZdZeZdZd Zy)r   z(Indexer class for exonerate cigar lines.s   cigarc                    | j                   }|j                  |       |j                         }|j                  | j                        sJ |       t        j                  t        |j                               }|j                  d      S )z.Return the query ID of the nearest cigar line.r   )
_handleseekreadliner   _query_markr*   r+   r,   decoder.   )r2   poshandler   r   s        r   get_qresult_idz$ExonerateCigarIndexer.get_qresult_id^   sd    C t//06$60YYy$++-0xx{r   N)r:   r;   r<   r=   r   _parserrE   rI   r?   r   r   r   r   X   s    2"GKr   r   __main__)run_doctest)r=   r*   _baser   r   exonerate_vulgarr   __all__compileVERBOSEr,   r   r   r:   
Bio._utilsrL   r?   r   r   <module>rS      sm    = 	 '  4
; BJJ
 JJ	9</ 9<x2 $ z&M r   