
    Ri{                         d 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e	fd	e	fd
e	fdZ
defdefdZdefdefdefdefdZ G d d      Zedk(  rddlmZ  e        yy)z8Bio.SearchIO parser for InterProScan XML output formats.    N)ElementTree)Hit)HSP)HSPFragment)QueryResult	accessioniddescription)nameacdescbitscoreevalue)scorer   query_start	query_end	hit_starthit_end)startendz	hmm-startzhmm-endc                   >    e Zd ZdZd Zd Zd Zd Zd
dZd
dZ	d	 Z
y)InterproscanXmlParserz'Parser for the InterProScan XML format.c                 x    t        t        j                  |d            | _        | j	                         | _        y)zInitialize the class.)r   r   )eventsN)iterr   	iterparsexml_iter_parse_header_meta)selfhandles     d/home/agent/.friday_env/lib/python3.12/site-packages/Bio/SearchIO/InterproscanIO/interproscan_xml.py__init__zInterproscanXmlParser.__init__'   s,    [226BRST'')
    c              #   @   K   | j                         E d{    y7 w)zIterate qresults.N)_parse_qresult)r    s    r"   __iter__zInterproscanXmlParser.__iter__,   s     &&(((s   c                     t        | j                        \  }}i }d|d<   d|d<   |j                  d   |d<   t        j                  dd|j
                        | _        |S )	z8Parse the header for the InterProScan version (PRIVATE).InterProtargetInterProScanprogramzinterproscan-versionversionzprotein-matches )nextr   attribresubtagNS)r    eventelemmetas       r"   r   z#InterproscanXmlParser._parse_header0   s\    4==)t#X(Y++&<=Y&&*B9r$   c              #     K   | j                   D ]p  \  }}|dk(  s|j                  | j                  dz   k(  s*|j                  | j                  dz         }|j                  }|j                  | j                  dz         }|j
                  d   }|j
                  d   }g }| j                  |j                  | j                  dz         ||      D ]a  }	|D ]I  }
|
j                  |	j                  k(  s|	j                  D ]  }|
j                  j                  |         P |j                  |	       c t        ||      }t        |d|       | j                  j                         D ]  \  }}t        |||        | s y	w)
zParse query results (PRIVATE).r   proteinsequencexrefr	   r   matchesr
   N)r   r3   r4   findtextr0   
_parse_hitr	   hspsappendr   setattrr   items)r    r5   r6   seq	query_seqr;   query_id
query_deschit_listhit_newhithspqresultkeyvalues                  r"   r&   z$InterproscanXmlParser._parse_qresult;   sf    == !	KE4~$((dgg	.A"Aii* 45HH	 yy6!12;;t,![[0
 #IIdgg	12Hi  1G  ( 166WZZ/'.|| 5 # 45!	1 !01  &h9
;"&**"2"2"4 1JCGS%01C!	s   FFB8F2BFNc           	   #     K   |g }|D ]  }t        j                  d| j                  z  d|j                  d      j                        }|j                  | j                  dz         }|j
                  d   }| j                  |j                  | j                  dz               }t        | j                  |j                  | j                  dz         |||            }	t        |	|      }
t        |
d	|       t        j                         D ]9  \  }\  }}|j
                  j                  |      }|'t        |
| ||             ; ||
j                  d
<   |j                  | j                  dz         }t        |j
                  j                  d            |
j                  d<   t        |j
                  j                  d            |
j                  d<   |
  yw)zParse hit (PRIVATE).Nz%s(\w+)-matchz\1.	signaturer   entry	locationsdbxrefszHit typezsignature-library-releaselibraryTargetr-   zTarget version)r1   r2   r4   r=   r3   r0   _parse_xrefslist
_parse_hspr   rB   	_ELEM_HITrC   get
attributesstr)r    root_hit_elemrF   rE   hit_elemhit_typerQ   hit_idxrefsr@   rJ   rM   attrcasterrN   signature_libs                   r"   r?   z InterproscanXmlParser._parse_hit`   s      M% 	Hvv.8%sASAWAWXH dgg&;<I%%d+F %%innTWWw5F&GHE MM$''K"78(FID dF#CCE*'0'8 6#^dF!((,,S1$Cve}56
 *2CNN:&%NN4775P+PQM'*=+?+?+C+CI+N'OCNN8$/2=3G3G3K3KI3V/WCNN+,I=	s   D.G1B,Gc           	   #     K   |g }|D ]A  }t        ||      }t        |dd       |t        |d|       t        j                         D ]u  \  }\  }}	|j                  j                  |      }
|
'|j                  d      r |	|
      dz
  }
|dk(  rt        |
      }|dk(  rt        |
      }t        || |	|
             w t        |d	z
         t        |g      }t        |d
|       t        |d|       t        j                         D ]9  \  }\  }}	|j                  j                  |      }
|
't        || |	|
             ; | D yw)zParse hsp (PRIVATE).Nmolecule_typer9   queryr      r   r   aln_spanrF   ra   )
r   rB   
_ELEM_FRAGrC   r0   r[   endswithintr   	_ELEM_HSP)r    root_hsp_elemrF   ra   rE   hsp_elemfragrM   rc   rd   rN   r   r   rK   s                 r"   rY   z InterproscanXmlParser._parse_hsp   sZ      M% 	Hvx0DD/95$gy1'1'7'7'9 7#^dF ++C0$}}W- &u 1}, #E
{*!%jD$u67 D*cEk2 tf+CCX.C6*'0'8 6#^dF ++C0$Cve}56 I;	s   A-E0CE2Ec                 \   g }|!|j                  d|j                  d   z          |g }||j                  | j                  dz         z   }||j                  | j                  dz         z   }|D ];  }|j                  d   }d|vr|j                  d   dz   |z   }|j                  |       = |S )zParse xrefs (PRIVATE).zIPR:r   zgo-xrefzpathway-xrefr	   :db)rA   r0   findallr4   )r    root_entry_elemrb   
xref_elemsrR   r;   s         r"   rW   z"InterproscanXmlParser._parse_xrefs   s    &LL/"8"8">>? &J#o&=&=dgg	>Q&RRJ#o&=&=dgg>V&WWJ# #||D)d? <<-3d:DT"	#
 r$   )N)__name__
__module____qualname____doc__r#   r'   r   r&   r?   rY   rW    r$   r"   r   r   $   s+    1*
)	#J$L#Jr$   r   __main__)run_doctest)r{   r1   	xml.etreer   Bio.SearchIO._modelr   r   r   r   r]   rZ   floatrn   rm   rk   r   rx   
Bio._utilsr~   r|   r$   r"   <module>r      s    ? 
 ! # # + + #+C 	 "5)h5FG	 S!s#3	
Y Yz z&M r$   