
    Ri                         d Z ddlZddl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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Z G d d      Z G d d      Z G d d      Z G d d      Zy)zCode to parse BLAST XML output, and to parse the BLAST DTD file defining the XML.

The BLAST XML DTD file is available on the NCBI site at:
https://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtd
    N)deque)expat)Entrez)	Alignment)Hit)HSP)Record)reverse_complement)Seq)
SeqFeature)SimpleLocation)	SeqRecordc                   (    e Zd ZdZd Zd Zd Zd Zy)
DTDHandlerz"Parser for the BLAST XML DTD file.c                     t        j                         }|j                  t         j                         | j                  |_        || _        i | _        i | _        | j                  | j                  ft        _
        y)z7Initialize the parser and parse the BLAST XML DTD file.N)r   ParserCreateSetParamEntityParsingXML_PARAM_ENTITY_PARSING_ALWAYS_externalEntityRefHandlerExternalEntityRefHandlerparserstart_methodsend_methods
XMLHandler_dtd_methodsselfr   s     I/home/agent/.friday_env/lib/python3.12/site-packages/Bio/Blast/_parser.py__init__zDTDHandler.__init__'   sb    ##%$$U%J%JK*.*H*H'"&"4"4d6F6F"F
    c                 
   |}|dvrdD ]  }|j                  |d      } |j                         j                  dd      }d|z   }d|z   }t        t        |      | j                  |<   t        t        |      | j
                  |<   y )N)zBlastOutput_query-IDzBlastOutput_query-defzBlastOutput_query-len)BlastOutput_
Iteration_Parameters_Statistics_Hit_Hsp_ -__start__end_)replacelowergetattrr   r   r   )r   namemodelmethod_nameprefixstart_method
end_methods          r   _elementDeclHandlerzDTDHandler._elementDeclHandler1   s     
 
 > *11&"=> "'')11#s; ;.{*
#*:|#D4 !(Z!@r    c                 6    |J |J | j                  |       yN   )	parseFile)r   contextbasesystemIdpublicIds        r   r   z$DTDHandler._externalEntityRefHandlerK   s%    ||x r    c                 (   t         j                  d   }t        j                  j	                  |d|      }| j
                  j                  d      }| j                  |_        t        |d      5 }|j                  |       ddd       y# 1 sw Y   yxY w)zParse a DTD file.r   DTDsNrb)r   __path__ospathjoinr   ExternalEntityParserCreater6   ElementDeclHandleropen	ParseFile)r   filename	directoryrD   r   streams         r   r:   zDTDHandler.parseFileQ   sw    OOA&	ww||Ivx877=$($<$<!$ 	%V$	% 	% 	%s   -BBN)__name__
__module____qualname____doc__r   r6   r   r:    r    r   r   r   $   s    ,GA4%r    r   c                       e Zd ZdZd Zd Zy)SchemaHandlerzXML Schema parser used to parse NCBI_BlastOutput2.xsd.

    The XML Schema for Blast XML2 is available from
    https://www.ncbi.nlm.nih.gov/data_specs/schema_alt/NCBI_BlastOutput2.xsd
    c                 p    || _         i | _        i | _        | j                  | j                  ft        _        y)z!Initialize the XML Schema parser.N)r   r   r   r   _schema_methodsr   s     r   r   zSchemaHandler.__init__b   s2    %)%7%79I9I%I
"r    c                 .   |dk(  r|d   }t         j                  d   }t        j                  j	                  |d|      }t        j                  d      }| j                  |_        t        |d      5 }|j                  |       ddd       y|d	k(  r|j                  d
      }|yd}	|	 d| }
|dk(  r;t        j                  | j                  |
<   t        j                  | j                   |
<   y|dv ry|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}|j#                         j%                  dd      }d|z   }d|z   }|dk(  r|dz  }t'        t        |      | j                  |
<   t'        t        |      | j                   |
<   yy# 1 sw Y   yxY w)Found XML start tag.

        Arguments:
         - name       -- name of the tag
         - attributes -- tag attributes

        z(http://www.w3.org/2001/XMLSchema includeschemaLocationr   XSDs namespace_separatorrA   Nz(http://www.w3.org/2001/XMLSchema elementr0   http://www.ncbi.nlm.nih.govBlastOutput2)errorErrcodemessagesubjectsbl2seqparamsparamsearch
iterationsSearch	Iterationzquery-titlez	query-deftitledefr)   r*   r+   r,   	eff-space_xml2)r   rB   rC   rD   rE   r   r   _startElementHandlerStartElementHandlerrH   rI   getr   _start_blastoutputr   _end_blastoutput_xml2r   r.   r-   r/   )r   r0   
attributesrJ   rK   rD   r   rL   tag	namespacekeyr2   r4   r5   s                 r   ro   z"SchemaHandler._startElementHandleri   s    ==!"23H*I77<<	68<D''C@F)-)B)BF&dD! )V  () )??..(C{5IKq&Cn$*4*G*G""3'(2(H(H  %   (?!CH_&CH_%CM)%CG^C!iik11#s;(;6${2
+%')J*1*l*K""3'(/
J(G  %G @) )s   2FFN)rM   rN   rO   rP   r   ro   rQ   r    r   rS   rS   [   s    J3Hr    rS   c                       e Zd ZdZy)
_HSP_cache)num	bit_scorescoreevalueidentitypositive
query_fromquery_toquery_framequery_strandhit_fromhit_to	hit_frame
hit_strandqseqhseqgaps	align_lendensitymidlineN)rM   rN   rO   	__slots__rQ   r    r   ry   ry      s	    Ir    ry   c                   `   e Zd ZdZdZdZdZd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7 Z:d8 Z;d9 Z<d: Z=d; Z>d< Z?d= Z@d> ZAd? ZBd@ ZCdA ZDdB ZEdC ZFdD ZGdE ZHdF ZIdG ZJdH ZKdI ZLdJ ZMdK ZNdL ZOdM ZPdN ZQdO ZRdP ZSdQ ZTdR ZUdS ZVdT ZWdU ZXdV ZYdW ZZdX Z[dY Z\dZ Z]d[ Z^d\ Z_d] Z`d^ Zad_ Zbd` Zcda Zddb Zedc Zfdd Zgde Zhdf Zidg Zjdh Zkdi Zldj Zmdk Zndl Zodm Zpdn Zqdo Zrdp Zsdq Ztdr Zuds Zvdt Zwdu Zxdv Zydw Zzdx Z{dy Z|dz Z}d{ Z~d| Zd} Zd~ Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)r   zHandler for BLAST XML data.z)http://www.w3.org/2001/XMLSchema-instanceNc                 r    | j                   |_        |j                  t        j                         || _        y)zInitialize the expat parser.N)_xmlDeclHandlerXmlDeclHandlerr   r   r   _parserr   s     r   r   zXMLHandler.__init__   s+     $ 4 4$$U%J%JKr    c                 f    | j                   }|t        j                  k(  r| j                  |_        y y N)r   r   schema_namespace_start_blastxml2rp   )r   r3   urir   s       r   _startNamespaceDeclHandlerz%XMLHandler._startNamespaceDeclHandler   s,    *---)-)>)>F& .r    c                      y r   rQ   )r   r3   s     r   _endNamespaceDeclHandlerz#XMLHandler._endNamespaceDeclHandler       r    c                    |j                  d      \  }}|dk(  sJ |dv sJ dt        j                  z  }||   j                         \  }}|dk(  sJ t        j                  t        j
                  j                  |      }t        j                  d   }	t        j
                  j                  |	d|      }
t        j                  d      }t        |      }|j                  |_        t        |
d	      5 }|j!                  |       ddd       t        j                  \  | _        | _        | j&                  }| j                  |_        | j(                  |_        | j,                  |_        d
| _        y# 1 sw Y   mxY w)z7Process the XML schema (before processing the element).rZ   r]   )	BlastXML2r^   z%s schemaLocationNr   rY   r[   rA   r(   )splitr   r   rU   rC   rD   basenamer   rB   rE   r   r   rS   ro   rp   rH   rI   _start_methods_end_methodsr   _endElementHandlerEndElementHandler_characterDataHandlerCharacterDataHandler_characters)r   r0   rt   r   	localnamerw   domainurlrJ   rK   rD   r   handlerrL   s                 r   r   zXMLHandler._start_blastxml2   sR   CY33339999!J$?$?? o++-6666%%-ww'',H*I77<<	68<D''C@F#F+G)0)E)EF&dD! )V  ()1;1K1K.T.%)%>%>"#'#:#: &*&@&@#) )s   3E11E:c                 P    | j                   j                         dk(  sJ d| _         y Nr(   r   stripr   r0   rt   s      r   rr   zXMLHandler._start_blastoutput   '    %%'2---r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_programzXMLHandler._start_program   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_versionzXMLHandler._start_version   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_referencezXMLHandler._start_reference   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   	_start_dbzXMLHandler._start_db   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_blastoutput_query_idz&XMLHandler._start_blastoutput_query_id   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_blastoutput_query_defz'XMLHandler._start_blastoutput_query_def   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_mbstatzXMLHandler._start_mbstat  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_paramzXMLHandler._start_param  r   r    c                 r    | j                   j                         dk(  sJ d| _         i | j                  _        y r   )r   r   _recordsrf   r   s      r   _start_parameterszXMLHandler._start_parameters
  s3    %%'2--- r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_matrixzXMLHandler._start_matrix  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_expectzXMLHandler._start_expect  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_sc_matchzXMLHandler._start_sc_match  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_sc_mismatchzXMLHandler._start_sc_mismatch  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_includezXMLHandler._start_include  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_gap_openzXMLHandler._start_gap_open#  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_gap_extendzXMLHandler._start_gap_extend'  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_filterzXMLHandler._start_filter+  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   
_start_cbszXMLHandler._start_cbs/  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_db_gencodezXMLHandler._start_db_gencode3  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_gencodezXMLHandler._start_query_gencode7  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_bl2seq_modezXMLHandler._start_bl2seq_mode;  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_maskingzXMLHandler._start_query_masking?  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_rangezXMLHandler._start_rangeC  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_fromzXMLHandler._start_fromG  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   	_start_tozXMLHandler._start_toK  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_patternzXMLHandler._start_patternO  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_entrez_queryzXMLHandler._start_entrez_queryS  r   r    c                     t               | j                  _        | j                  j	                         dk(  sJ d| _        y r   )r   r   _cacher   r   r   s      r   _start_iterationszXMLHandler._start_iterationsW  s5    $w%%'2---r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_blastoutput_query_lenz'XMLHandler._start_blastoutput_query_len\  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_seqzXMLHandler._start_query_seq`  r   r    c                 P    | j                   dk(  r|dk(  ry t               }|| _        y )Npsiblast"http://www.ncbi.nlm.nih.gov Search)_programr	   _record)r   r0   rt   records       r   _start_iterationzXMLHandler._start_iterationd  s'    ==J&43W+Wr    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_iter_numzXMLHandler._start_iter_numk  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_idzXMLHandler._start_query_ido  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_defzXMLHandler._start_query_defs  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_lenzXMLHandler._start_query_lenw  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hitszXMLHandler._start_hits{  r   r    c                 n    | j                   j                         dk(  sJ d| _         t               | _        y r   )r   r   r   _alignmentsr   s      r   
_start_hitzXMLHandler._start_hit  s1    %%'2---5r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   
_start_numzXMLHandler._start_num  r   r    c                 &    g | j                   _        y r   )r  targetsr   s      r   _start_descriptionzXMLHandler._start_description  s    #% r    c                      y r   rQ   r   s      r   _start_hitdescrzXMLHandler._start_hitdescr  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   	_start_idzXMLHandler._start_id  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   
_start_defzXMLHandler._start_def  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_taxidzXMLHandler._start_taxid  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_scinamezXMLHandler._start_sciname  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hspszXMLHandler._start_hsps  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   
_start_lenzXMLHandler._start_len  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_accessionzXMLHandler._start_accession  r   r    c                 n    | j                   j                         dk(  sJ d| _         t               | _        y r   )r   r   ry   _hspr   s      r   
_start_hspzXMLHandler._start_hsp  s0    %%'2---L	r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_bit_scorezXMLHandler._start_bit_score  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_scorezXMLHandler._start_score  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_evaluezXMLHandler._start_evalue  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_fromzXMLHandler._start_query_from  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_tozXMLHandler._start_query_to  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_strandzXMLHandler._start_query_strand  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hit_fromzXMLHandler._start_hit_from  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hit_tozXMLHandler._start_hit_to  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hit_strandzXMLHandler._start_hit_strand  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_pattern_fromzXMLHandler._start_pattern_from  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_pattern_tozXMLHandler._start_pattern_to  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_query_framezXMLHandler._start_query_frame  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hit_framezXMLHandler._start_hit_frame  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_identityzXMLHandler._start_identity  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_positivezXMLHandler._start_positive  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_gapszXMLHandler._start_gaps  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_align_lenzXMLHandler._start_align_len  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_densityzXMLHandler._start_density  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_qseqzXMLHandler._start_qseq  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hseqzXMLHandler._start_hseq  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_midlinezXMLHandler._start_midline  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_statzXMLHandler._start_stat  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_messagezXMLHandler._start_message  r   r    c                 ^    | j                   j                         dk(  sJ d| _         i | _        y r   )r   r   _statr   s      r   _start_statisticszXMLHandler._start_statistics  s.    %%'2---
r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_db_numzXMLHandler._start_db_num  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_db_lenzXMLHandler._start_db_len  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_hsp_lenzXMLHandler._start_hsp_len  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_eff_spacezXMLHandler._start_eff_space  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_kappazXMLHandler._start_kappa   r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_lambdazXMLHandler._start_lambda$  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   r   s      r   _start_entropyzXMLHandler._start_entropy(  r   r    c                      y r   rQ   r   s      r   _start_reportzXMLHandler._start_report,  r   r    c                      y r   rQ   r   s      r   _start_search_targetzXMLHandler._start_search_target/  r   r    c                      y r   rQ   r   s      r   _start_targetzXMLHandler._start_target2  r   r    c                      y r   rQ   r   s      r   _start_resultszXMLHandler._start_results5  r   r    c                     | j                   j                         dk(  sJ | j                  }d |_        d |_        d |_        | ` | `| `y r   )r   r   r   rp   r   r   r   )r   r0   r   s      r   _end_blastoutputzXMLHandler._end_blastoutput8  sP    %%'2---%)"#' &*#MLr    c                 B    | j                   j                         dk(  sJ y r   r   r   r0   s     r   rs   z XMLHandler._end_blastoutput_xml2B  s    %%'2---r    c                 &    | j                  |       y r   )rd  rf  s     r   _end_blastxml2zXMLHandler._end_blastxml2E  s    d#r    c                 Z    | j                   }|| _        || j                  _        d| _         y r   )r   r   r   program)r   r0   rj  s      r   _end_programzXMLHandler._end_programH  s(    "" 'r    c                 H    | j                   | j                  _        d| _         y r   )r   r   versionrf  s     r   _end_versionzXMLHandler._end_versionN  s     $ 0 0r    c                 n    t        j                  | j                        | j                  _        d| _        y r   )htmlunescaper   r   	referencerf  s     r   _end_referencezXMLHandler._end_referenceR  s%    "&--0@0@"Ar    c                 H    | j                   | j                  _        d| _         y r   )r   r   dbrf  s     r   _end_dbzXMLHandler._end_dbV  s    ++r    c                 `    | j                   }t        d |      | j                  _        d| _         y r   )r   r   r   queryr   r0   query_ids      r   _end_blastoutput_query_idz$XMLHandler._end_blastoutput_query_idZ  s(    ##'h7r    c                 `    | j                   }|| j                  j                  _        d| _         y r   )r   r   rx  descriptionr   r0   	query_defs      r   _end_blastoutput_query_defz%XMLHandler._end_blastoutput_query_def_  s'    $$	*3'r    c                     t        | j                        }t        d |      | j                  j                  _        d| _        y N)lengthr(   )intr   r   r   rx  seqr   r0   r  s      r   _end_blastoutput_query_lenz%XMLHandler._end_blastoutput_query_lend  s3    T%%&"%d6":r    c                     t        | j                        }d| _        t        |      t        | j                  j                  j
                        k(  sJ || j                  j                  _        y r   )r   r   lenr   rx  r  )r   r0   r  s      r   _end_query_seqzXMLHandler._end_query_seqi  sS    $""#3x3t}}22667777"%r    c                     | j                   j                         dk(  sJ d| _         | j                  | j                  _        | `y r   )r   r   rK  r   mbstatrf  s     r   _end_mbstatzXMLHandler._end_mbstato  s<    %%'2---#zzJr    c                 P    | j                   j                         dk(  sJ d| _         y r   r   rf  s     r   
_end_paramzXMLHandler._end_paramu  r   r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   rf  s     r   _end_parameterszXMLHandler._end_parametersy  r   r    c                 X    | j                   | j                  j                  d<   d| _         y )Nmatrixr(   r   r   rf   rf  s     r   _end_matrixzXMLHandler._end_matrix}  $    (,(8(8H%r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nexpectr(   floatr   r   rf   rf  s     r   _end_expectzXMLHandler._end_expect  s)    (-d.>.>(?H%r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nzsc-matchr(   r  r   r   rf   rf  s     r   _end_sc_matchzXMLHandler._end_sc_match  )    *-d.>.>*?J'r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nzsc-mismatchr(   r  rf  s     r   _end_sc_mismatchzXMLHandler._end_sc_mismatch  )    -01A1A-BM*r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nincluder(   r  rf  s     r   _end_includezXMLHandler._end_include  s)    ).t/?/?)@I&r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nzgap-openr(   r  rf  s     r   _end_gap_openzXMLHandler._end_gap_open  r  r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nz
gap-extendr(   r  rf  s     r   _end_gap_extendzXMLHandler._end_gap_extend  )    ,/0@0@,AL)r    c                 X    | j                   | j                  j                  d<   d| _         y )Nfilterr(   r  rf  s     r   _end_filterzXMLHandler._end_filter  r  r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Ncbsr(   r  rf  s     r   _end_cbszXMLHandler._end_cbs  s)    %()9)9%:E"r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nz
db-gencoder(   r  rf  s     r   _end_db_gencodezXMLHandler._end_db_gencode  r  r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nzbl2seq-moder(   r  rf  s     r   _end_bl2seq_modezXMLHandler._end_bl2seq_mode  r  r    c                     | j                   j                         dk(  sJ d| _         | j                  }| `t        |d      }| j                  j
                  j                  j                  |       y )Nr(   masking)type)r   r   	_locationr   r   rx  featuresappend)r   r0   locationfeatures       r   _end_query_maskingzXMLHandler._end_query_masking  s_    %%'2--->>NXI6##**73r    c                 d    | j                   dz
  }| ` | j                  }| `t        ||      | _        y r8   )_from_tor   r  )r   r0   startends       r   
_end_rangezXMLHandler._end_range  s0    

QJhhH's3r    c                 F    t        | j                        | _        d| _        y r   )r  r   r  rf  s     r   	_end_fromzXMLHandler._end_from  s    ))*
r    c                 F    t        | j                        | _        d| _        y r   )r  r   r  rf  s     r   _end_tozXMLHandler._end_to  s    t''(r    c                 j    t        | j                        | j                  j                  d<   d| _        y )Nzquery-gencoder(   r  rf  s     r   _end_query_gencodezXMLHandler._end_query_gencode  s)    /243C3C/DO,r    c                 X    | j                   | j                  j                  d<   d| _         y )Npatternr(   r  rf  s     r   _end_patternzXMLHandler._end_pattern  s$    )-)9)9I&r    c                 X    | j                   | j                  j                  d<   d| _         y )Nzentrez-queryr(   r  rf  s     r   _end_entrez_queryzXMLHandler._end_entrez_query  s$    .2.>.>N+r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   rf  s     r   _end_iterationszXMLHandler._end_iterations  r   r    c                     | j                   j                         dk(  sJ d| _         | j                  dk(  r|dk(  ry | j                  j                  j                  | j                         | `y )Nr(   r   r   )r   r   r   r   r   r  r   rf  s     r   _end_iterationzXMLHandler._end_iteration  s_    %%'2---==J&43W+W##DLL1Lr    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r   rz   rf  s     r   _end_iter_numzXMLHandler._end_iter_num  s!    t//0r    c                 `    | j                   }t        d |      | j                  _        d| _         y r   )r   r   r   rx  ry  s      r   _end_query_idzXMLHandler._end_query_id  s(    ##&tX6r    c                 `    | j                   }|| j                  j                  _        d| _         y r   )r   r   rx  r}  r~  s      r   _end_query_defzXMLHandler._end_query_def  s'    $$	)2&r    c                     t        | j                        }t        d |      | j                  j                  _        d| _        y r  )r  r   r   r   rx  r  r  s      r   _end_query_lenzXMLHandler._end_query_len  s3    T%%&!$T&!9r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   rf  s     r   	_end_hitszXMLHandler._end_hits  r   r    c                     | j                   j                         dk(  sJ d| _         | j                  }| `| j                  j	                  |       y r   )r   r   r  r   r  )r   r0   hits      r   _end_hitzXMLHandler._end_hit  sJ    %%'2---C r    c                 T    | j                   j                  d   | j                   _        y )Nr   )r  r  targetrf  s     r   _end_descriptionzXMLHandler._end_description  s!    "&"2"2":":1"=r    c                 v    | j                   j                  j                  | j                   j                         y r   )r  r  r  r  rf  s     r   _end_hitdescrzXMLHandler._end_hitdescr  s(      ''(8(8(?(?@r    c                 `    | j                   }t        d |      | j                  _        d| _         y r   )r   r   r  r  )r   r0   hit_ids      r   _end_idzXMLHandler._end_id  s*    !!"+D&"9r    c                 `    | j                   }|| j                  j                  _        d| _         y r   )r   r  r  r}  )r   r0   r}  s      r   _end_defzXMLHandler._end_def  s)    &&.9+r    c                     | j                   }t        |      | j                  j                  j                  d<   d| _         y )Ntaxidr(   )r   r  r  r  annotations)r   r0   r  s      r   
_end_taxidzXMLHandler._end_taxid  s5      7:5z++G4r    c                 p    | j                   }|| j                  j                  j                  d<   d| _         y )Nscinamer(   )r   r  r  r  )r   r0   r  s      r   _end_scinamezXMLHandler._end_sciname  s1    ""9@++I6r    c                 `    | j                   }|| j                  j                  _        d| _         y r   )r   r  r  r0   )r   r0   	accessions      r   _end_accessionzXMLHandler._end_accession  s)    $$	'0$r    c                    t        | j                        }t        d |      }| j                  }	 |j                  }|j                  D ]	  }||_         d| _        y # t        $ r ||j                  _        Y d| _        y w xY wr  )r  r   r   r  r  r  AttributeErrorr  )r   r0   r  r  
alignmentsr  r  s          r   _end_lenzXMLHandler._end_len  s    T%%&$v&%%
	! ((G %,, ! 
!  	($'J!
 	(s   A B ?B c                 P    | j                   j                         dk(  sJ d| _         y r   r   rf  s     r   	_end_hspszXMLHandler._end_hsps%  r   r    c                     	 | j                   }t        | j                        |_        d| _        y # t        $ r | j                  }Y 9w xY wr   )r  r  r  r  r   rz   )r   r0   elements      r   _end_numzXMLHandler._end_num)  sH    	'iiG $**+  	'&&G	's   0 AAc                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r{   rf  s     r   _end_bit_scorezXMLHandler._end_bit_score1  s!    #D$4$45		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r|   rf  s     r   
_end_scorezXMLHandler._end_score5  s      0 01		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r}   rf  s     r   _end_evaluezXMLHandler._end_evalue9  s!     !1!12		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_query_fromzXMLHandler._end_query_from=  !    "4#3#34		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_query_tozXMLHandler._end_query_toA  !     !1!12		r    c                 Z    | j                   }|dk(  sJ || j                  _        d| _         y )NPlusr(   )r   r  r   )r   r0   r   s      r   _end_query_strandzXMLHandler._end_query_strandE  s/    ''v%%%!-		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_hit_fromzXMLHandler._end_hit_fromK  r  r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_hit_tozXMLHandler._end_hit_toO  s!    t//0		r    c                 X    | j                   }|dv sJ || j                  _        d| _         y )N)r
  Minusr(   )r   r  r   )r   r0   r   s      r   _end_hit_strandzXMLHandler._end_hit_strandS  s0    %%
....)		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  pattern_fromrf  s     r   _end_pattern_fromzXMLHandler._end_pattern_fromY  s!    !$T%5%5!6		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  
pattern_torf  s     r   _end_pattern_tozXMLHandler._end_pattern_to]  r  r    c                     t        | j                        }| j                  }|dv r|dk(  rn$|dv r|dv rn|dv r|dk(  rnt        d| d|       || j                  _        d	| _        y )
Nblastn	megablastr9   blastxtblastxr9         )blastptblastnrpsblastr   r   unexpected value z& in tag <Hsp_query-frame> for program r(   )r  r   r   
ValueErrorr  r   )r   r0   r   rj  s       r   _end_query_framezXMLHandler._end_query_framea  s    $**+----+2B--+AV2VDDq #K=0VW^V_`  !,		r    c                     t        | j                        }| j                  }|dv r|dv rn$|dv r|dk(  rn|dv r|dv rnt        d| d|       || j                  _        d	| _        y )
Nr  )r#  r9   r&  r  r(  r   r   r'  r  r   r)  z$ in tag <Hsp_hit-frame> for program r(   )r  r   r   r*  r  r   )r   r0   r   rj  s       r   _end_hit_framezXMLHandler._end_hit_framet  s    (()	----)w2FDDVW..9@U3U#I;.RSZR[\  (		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r~   rf  s     r   _end_identityzXMLHandler._end_identity  r  r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_positivezXMLHandler._end_positive  r  r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   	_end_gapszXMLHandler._end_gaps  s     T--.		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_align_lenzXMLHandler._end_align_len  s!    !$"2"23		r    c                 Z    t        | j                        | j                  _        d| _        y r   )r  r   r  r   rf  s     r   _end_densityzXMLHandler._end_density  s!     0 01		r    c                 H    | j                   | j                  _        d| _         y r   )r   r  r   rf  s     r   	_end_qseqzXMLHandler._end_qseq      ))		r    c                 H    | j                   | j                  _        d| _         y r   )r   r  r   rf  s     r   	_end_hseqzXMLHandler._end_hseq  r<  r    c                 H    | j                   | j                  _        d| _         y r   )r   r  r   rf  s     r   _end_midlinezXMLHandler._end_midline  s     ,,		r    c                 |   | j                   j                         dk(  sJ d| _         | j                  }| `| j                  }| j                  j
                  }|| j                  j
                  }|j                  }|j                  }t        |j                        }t        d ||      }| j                  j                  }|j                  }	|j                  }
|j                  }t        |j                        }t        d |	|
|      }|j                  j!                         }|j"                  j!                         }	 |j$                  }t        |      |k(  sJ t        |      |k(  sJ t'        j(                  ||g      \  \  }}}|j*                  dz
  }|j,                  }|dv r||z
  dt        |      z  k(  sJ t/        dt        |            }| d|j*                   d|j,                   }|j0                  }|dkD  r|dz  |dz
  k(  sJ |dk  r||z
  dz  | dz
  k(  sJ d	| d
}d|i}t3        |d|      }|j4                  j7                  |       nA|dd d fxx   |z  cc<   ||z
  t        |      k(  sJ ||i}|dk(  r	 |j8                  }|dk(  sJ |dv r	 |j<                  }dk(  rV|j@                  dz
  }|jB                  }|dd d fxx   |z  cc<   ||z
  t        |      k(  sJ ||i}tE        ||      |_
        n|dk(  r|jB                  dz
  }|j@                  }||dd d f   z
  |dd d f<   ||z
  t        |      k(  sJ ||z
  |i}tE        ||      }|jG                         |_
        n?|dv rU|j@                  dz
  }|jB                  }|dd d fxx   |z  cc<   ||z
  t        |      k(  sJ ||i}tE        ||      |_
        n|dv r|j@                  dz
  }|jB                  }||z
  dt        |      z  k(  sJ t/        d|      }|	 d|j@                   d|jB                   }|j>                  }|dk\  r|dz  |dz
  k(  sJ |dk  r||z
  dz  | dz
  k(  sJ d	| d
}d|i}t3        |d|      }|j4                  j7                  |       tE        ||      |_
        ntI        d|z        tE        ||      |_
        ||g} tQ        | |      }!|jR                  |!_)        |jT                  |!_*        i }"|jV                  |"d<   |jX                  |"d<   |jZ                  |"d<   	 |j\                  |"d<   	 |j^                  |"d<   	 |j`                  |"d<   |"|!_1        | j                  j7                  |!       y # t:        $ r Y w xY w# t:        $ r |j>                  }|dk(  rd}n|dk(  rd}Y w xY w# t:        $ rR t        |      dk(  sJ t        |      dk(  sJ d }tE        d |      |_
        tK        jL                  dtN              }Y Zw xY w# t:        $ r Y w xY w# t:        $ r Y w xY w# t:        $ r Y w xY w)Nr(   )r}  r9   r  r%  r   :z..zcomplement()coded_byCDS)r  
qualifiersr  r
  r  r#  r  r-  r.  zUnexpected program name '%s')r$  r   )dtypez	bit scorer}   r~   r   r   r   )2r   r   r  r   r   rx  r   idr}  r  r  r   r  r  r0   r   encoder   r   r   parse_printed_alignmentr   r   r   r   r   r  r  r   r  r   r   r   r   r   r
   RuntimeErrornpemptyr  r   rz   r|   r{   r}   r~   r   r   r   r  )#r   r0   hsprj  rx  rz  query_descriptionquery_lengthr  	target_idtarget_nametarget_descriptiontarget_lengthquery_seq_alignedtarget_seq_alignedr   target_seq_dataquery_seq_datacoordinatesquery_start	query_endr  rD  r   rF  r  r   target_strandtarget_frametarget_start
target_endr  	sequences	alignmentr  s#                                      r   _end_hspzXMLHandler._end_hsp  s   %%'2---iiI--""=MM''E88!--599~$6GH!!((II	kk#//FJJ4KEWXHHOO- XX__.a	MI ()Y666)*i777 11#%67#" ..1,KI// ;.!c.6I2IIII)!S-@A&Zq(83<<.I!oo?&?kAo=== 1_(949k\A=MMMM!,XJa8H((3
$XEjQ%%g.AqD![0! ;.#n2EEEE"-~!>h&6'*'7'7  ,v555110$'NNM !F*#&<<!#3L!$J1%5%%4O8LLLL'3_&EO!$_m!DFJ"g-#&::>L!$J(2[A5F(FK1%%4O8LLLL'4z'A?&SOo}=C!$!7!7!9FJHH"||a/ ZZ
AqD!\1!!L0C4HHHH#/"A -@
22"||a/ ZZ
!L0AO8L4LLLL)!];'[#,,r#**F"}}1$'!+|a/????!A%)J6!;}q?PPPP!,XJa8H((3
$XEjQ&&w/ -@
"#AG#KLL5	UO		;/		))	#&==K  #

H"%,,J	&)llK
#	"%((K	%([[K	" !,		*c *  & 0#&==L#r)(.%+(/0c  	6()Q...)*a///!NT=1FJ((65K	6V  		
  		
  		sm   =V3 U8 V &X 6X  X/ 8	VV$V0/V03AXX	XX 	X,+X,/	X;:X;c                     | j                   j                         dk(  sJ d| _         | j                  | j                  _        | `y r   )r   r   rK  r   statrf  s     r   	_end_statzXMLHandler._end_stat6  s<    %%'2--- JJJr    c                 H    | j                   | j                  _        d| _         y r   )r   r   rb   rf  s     r   _end_messagezXMLHandler._end_message<  s    #//r    c                 P    | j                   j                         dk(  sJ d| _         y r   r   rf  s     r   _end_statisticszXMLHandler._end_statistics@  r   r    c                 V    t        | j                        | j                  d<   d| _        y )Nzdb-numr(   r  r   rK  rf  s     r   _end_db_numzXMLHandler._end_db_numD  #    "4#3#34

8r    c                 V    t        | j                        | j                  d<   d| _        y )Nzdb-lenr(   rk  rf  s     r   _end_db_lenzXMLHandler._end_db_lenH  rm  r    c                 V    t        | j                        | j                  d<   d| _        y )Nzhsp-lenr(   rk  rf  s     r   _end_hsp_lenzXMLHandler._end_hsp_lenL  s#     #D$4$4 5

9r    c                     | j                   }|j                         rt        |      }nt        |      }|| j                  d<   d| _         y Nrm   r(   )r   isdigitr  r  rK  )r   r0   
charactersvalues       r   _end_eff_spacezXMLHandler._end_eff_spaceP  sB    %%

OE*%E"'

;r    c                 V    t        | j                        | j                  d<   d| _        y rs  rk  rf  s     r   _end_eff_space_xml2zXMLHandler._end_eff_space_xml2Y  s#    "%d&6&6"7

;r    c                 V    t        | j                        | j                  d<   d| _        y )Nkappar(   r  r   rK  rf  s     r   
_end_kappazXMLHandler._end_kappa]  s#    #D$4$45

7r    c                 V    t        | j                        | j                  d<   d| _        y )Nlambdar(   r|  rf  s     r   _end_lambdazXMLHandler._end_lambdaa  s#    $T%5%56

8r    c                 V    t        | j                        | j                  d<   d| _        y )Nentropyr(   r|  rf  s     r   _end_entropyzXMLHandler._end_entropye  s#     %d&6&6 7

9r    c                      y r   rQ   rf  s     r   _end_reportzXMLHandler._end_reporti  r   r    c                      y r   rQ   rf  s     r   _end_search_targetzXMLHandler._end_search_targetl  r   r    c                      y r   rQ   rf  s     r   _end_targetzXMLHandler._end_targeto  r   r    c                      y r   rQ   rf  s     r   _end_resultszXMLHandler._end_resultsr  r   r    c                    | j                   }| j                  |_        | j                  |_        | j
                  |_        | j                  |_        | j                  |_
        | j                  |_        d| _        d |_        y r   )r   r   r   r   StartNamespaceDeclHandlerr   EndNamespaceDeclHandlerro   rp   r   r   r   r   r   r   )r   rm  encoding
standaloner   s        r   r   zXMLHandler._xmlDeclHandleru  so    *.*H*H'+/+J+J()-)F)F&%)%>%>"#'#:#: &*&@&@# $r    c                     |J |J |dvrt        d      |dk(  sJ t        j                  ,t               }|j	                  d       d| j
                  _        t        j                  \  | _        | _        y)zHandle the DTD declaration.N)NCBI_BlastOutput.dtdz4http://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtdz5https://www.ncbi.nlm.nih.gov/dtd/NCBI_BlastOutput.dtdz output from legacy BLAST programz-//NCBI//NCBI BlastOutput/ENr  r9   )	r*  r   r   r   r:   r   r   r   r   )r   r;   r<   r=   r>   r   s         r   r   z$XMLHandler._externalEntityRefHandler  s    || 
 

 ?@@9999""* lG4548DLL11;1H1H.T.r    c                     | j                   j                  |      }|*t        d|d| j                   j                         d       || ||       y)rW   NzFailed to find method for z (rC  )r   rq   r*  keys)r   r0   rt   methods       r   ro   zXMLHandler._startElementHandler  sQ     $$((.>7;T=P=P=U=U=WX  	tT:&r    c                 l    | j                   j                  |      }|t        d|z         || |       y)zLFound XML end tag.

        Arguments:
         - name -- tag name

        NzFailed to find method for %s)r   rq   r*  )r   r0   r  s      r   r   zXMLHandler._endElementHandler  s:     ""&&t,>;dBCCtTr    c                 .    | xj                   |z  c_         y)zWFound some text.

        Arguments:
         - characters -- characters read

        N)r   )r   ru  s     r   r   z XMLHandler._characterDataHandler  s     	J&r    c                     | S r   rQ   )r   s    r   __iter__zXMLHandler.__iter__  s    r    c                     	 | j                   }	 | j                  }t        t	        |             }||d| dS |	d| d| dS |	d| d| dS d| d| d| dS # t        $ r d }Y Zw xY w# t        $ r d }Y ^w xY w)	Nz(<Bio.Blast._parser.XMLHandler object at z with no stream or parser>z with parser z and no stream>z with stream z and no parser>z and parser >)_streamr  r   hexrH  )r   rL   r   addresss       r   __repr__zXMLHandler.__repr__  s    	\\F	\\F bh->fn=gYF`aa^=gYmTZS[[jkk^=gYmTZS[[jkk=gYmTZS[[ghngoopqq  	F	  	F	s"   A A, A)(A),A:9A:)rM   rN   rO   rP   r   rU   r   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r'  r)  r+  r-  r/  r1  r3  r5  r7  r9  r;  r=  r?  rA  rC  rE  rG  rI  rL  rN  rP  rR  rT  rV  rX  rZ  r\  r^  r`  rb  rd  rs   rh  rk  rn  rs  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r+  r/  r1  r3  r5  r7  r9  r;  r>  r@  rb  re  rg  ri  rl  ro  rq  rw  ry  r}  r  r  r  r  r  r  r   r   ro   r   r   r  r  rQ   r    r   r   r      s   %BOL?0!

!
&!

.$


&44


!>A




& P+d	%$'
'rr    r   )rP   rp  os.pathrC   collectionsr   xml.parsersr   Bior   	Bio.Alignr   	Bio.Blastr   r   r	   Bio.Seqr
   r   Bio.SeqFeaturer   r   Bio.SeqRecordr   numpyrL  r   rS   ry   r   rQ   r    r   <module>r     sk             &  % ) # 4% 4%nAH AHH 2Rr Rrr    