o
    Rŀg+                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ g dZg dZeZeZ	G dd	 d	Z
d
d Zdd ZedkrDddlmZ e  dS dS )zCode to work with the KEGG Enzyme database.

Functions:
 - parse - Returns an iterator giving Record objects.

Classes:
 - Record - Holds the information from a KEGG Enzyme record.
    )_default_wrap)_struct_wrap)
_wrap_kegg)_write_kegg)r    )z + r      r   )z = r   r   r    $r   r   -r
   r   r   )r   r   r   r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&S )'Recorda  Holds info from a KEGG Enzyme record.

    Attributes:
     - entry       The EC number (without the 'EC ').
     - name        A list of the enzyme names.
     - classname   A list of the classification terms.
     - sysname     The systematic name of the enzyme.
     - reaction    A list of the reaction description strings.
     - substrate   A list of the substrates.
     - product     A list of the products.
     - inhibitor   A list of the inhibitors.
     - cofactor    A list of the cofactors.
     - effector    A list of the effectors.
     - comment     A list of the comment strings.
     - pathway     A list of 3-tuples: (database, id, pathway)
     - genes       A list of 2-tuples: (organism, list of gene ids)
     - disease     A list of 3-tuples: (database, id, disease)
     - structures  A list of 2-tuples: (database, list of struct ids)
     - dblinks     A list of 2-tuples: (database, list of db ids)

    c                 C   sd   d| _ g | _g | _g | _g | _g | _g | _g | _g | _g | _	g | _
g | _g | _g | _g | _g | _dS )zInitialize a new Record.r   N)entryname	classnamesysnamereaction	substrateproduct	inhibitorcofactoreffectorcommentpathwaygenesdisease
structuresdblinksself r    L/var/www/html/myenv/lib/python3.10/site-packages/Bio/KEGG/Enzyme/__init__.py__init__:   s    
zRecord.__init__c                 C   s   |   |   |   |   |   |   |   |   |   | 	  | 
  |   |   |   |   |   d S )z.Return a string representation of this Record.///)_entry_name
_classname_sysname	_reaction
_substrate_product
_inhibitor	_cofactor	_effector_comment_pathway_genes_disease_structures_dblinksr   r    r    r!   __str__M   sD   	
zRecord.__str__c                 C   s   t dd| j gS )NENTRYzEC )r   r   r   r    r    r!   r$   c   s   zRecord._entryc                 C      t ddd | jD S )NNAMEc                 S      g | ]}t |td qS 	wrap_ruler   	name_wrap.0liner    r    r!   
<listcomp>h       z Record._name.<locals>.<listcomp>)r   r   r   r    r    r!   r%   f      zRecord._namec                 C   s   t d| jS )NCLASS)r   r   r   r    r    r!   r&   k   s   zRecord._classnamec                 C   r6   )NSYSNAMEc                 S   r8   r9   r<   r>   r    r    r!   rA   p   rB   z#Record._sysname.<locals>.<listcomp>)r   r   r   r    r    r!   r'   n   rC   zRecord._sysnamec                 C   r6   )NREACTIONc                 S   r8   r9   )r   rxn_wrapr>   r    r    r!   rA   u   rB   z$Record._reaction.<locals>.<listcomp>)r   r   r   r    r    r!   r(   s   rC   zRecord._reactionc                 C   r6   )N	SUBSTRATEc                 S   r8   r9   r<   r>   r    r    r!   rA   {   rB   z%Record._substrate.<locals>.<listcomp>)r   r   r   r    r    r!   r)   x      zRecord._substratec                 C   r6   )NPRODUCTc                 S   r8   r9   r<   r>   r    r    r!   rA      rB   z#Record._product.<locals>.<listcomp>)r   r   r   r    r    r!   r*   ~   rC   zRecord._productc                 C   r6   )N	INHIBITORc                 S   r8   r9   r<   r>   r    r    r!   rA      rB   z%Record._inhibitor.<locals>.<listcomp>)r   r   r   r    r    r!   r+      rI   zRecord._inhibitorc                 C   r6   )NCOFACTORc                 S   r8   r9   r<   r>   r    r    r!   rA      rB   z$Record._cofactor.<locals>.<listcomp>)r   r   r   r    r    r!   r,      rI   zRecord._cofactorc                 C   r6   )NEFFECTORc                 S   r8   r9   r<   r>   r    r    r!   rA      rB   z$Record._effector.<locals>.<listcomp>)r   r   r   r    r    r!   r-      rI   zRecord._effectorc                 C   r6   )NCOMMENTc                 S      g | ]
}t |td dqS )r   r:   r   id_wrapr>   r    r    r!   rA          z#Record._comment.<locals>.<listcomp>)r   r   r   r    r    r!   r.      rC   zRecord._commentc                 C   J   g }| j D ]}||d d |d  d |d   qtddd |D S )	Nr   : r        PATHWAYc                 S   rO   )   r:   rP   r>   r    r    r!   rA      rR   z#Record._pathway.<locals>.<listcomp>)r   appendr   r   sr   r    r    r!   r/         
(zRecord._pathwayc                 C   sD   g }| j D ]}||d d d|d   qtddd |D S )Nr   rT   r	   r   GENESc                 S   rO      r:   rP   r>   r    r    r!   rA      rR   z!Record._genes.<locals>.<listcomp>)r   rY   joinr   rZ   r    r    r!   r0      s   
"zRecord._genesc                 C   rS   )	Nr   rT   r   rU   rV   DISEASEc                 S   rO   )   r:   rP   r>   r    r    r!   rA      rR   z#Record._disease.<locals>.<listcomp>)r   rY   r   rZ   r    r    r!   r1      r\   zRecord._diseasec                 C   sH   g }| j D ]}||d d d|d  d  qtddd |D S )Nr   rT   rU   r   
STRUCTURESc                 S   rO   r^   )r   struct_wrapr>   r    r    r!   rA      rR   z&Record._structures.<locals>.<listcomp>)r   rY   r`   r   rZ   r    r    r!   r2      s   
&zRecord._structuresc                 C   s:   g }| j D ]}||d d d|d   qtd|S )Nr   rT   rU   r   DBLINKS)r   rY   r`   r   rZ   r    r    r!   r3      s   
"
zRecord._dblinksN)__name__
__module____qualname____doc__r"   r4   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r    r    r    r!   r   #   s(    r   c                 c   s   t  }| D ]}|dd dkr|V  t  }q|dd dkr&|dd }|dd  }|dkr<| }|d |_q|dkrG|j| q|d	krR|j| q|d
kr]|j| q|dkrd|v r{|d\}}| }||f}|j| q|jd }|\}}|	|  ||f}||jd< q|dkrd|v r|d\}	}|dd\}
}|	|
|f}|j
| q|j
d }|\}	}
}|d | }|	|
|f}||j
d< q|dkr|j|d q|dkr:|dd dks|dd dkr|dd\}}dd | D }||f}|j| q|jd }|\}}| D ]}|dd }|| q ||f}||jd< q|dkrI|j|d q|dkrX|j|d q|dkr|dd dkr{|dd\}}}d ||f}|j| q|dd\}}d ||f}|j| q|d!kr|j|d q|d"kr|j|d q|d#kr|dd d$kr|dd }	|dd  }|	|f}|j| q|jd }|\}	}|	|  |	|f}||jd< q|d%kr|j|d q|d&kr|j|d qdS )'a  Parse a KEGG Enzyme file, returning Record objects.

    This is an iterator function, typically used in a for loop.  For
    example, using one of the example KEGG files in the Biopython
    test suite,

    >>> with open("KEGG/enzyme.sample") as handle:
    ...     for record in parse(handle):
    ...         print("%s %s" % (record.entry, record.name[0]))
    ...
    1.1.1.1 alcohol dehydrogenase
    1.1.1.62 17beta-estradiol 17-dehydrogenase
    1.1.1.68 Transferred to 1.5.1.20
    1.6.5.3 NADH:ubiquinone reductase (H+-translocating)
    1.14.13.28 3,9-dihydroxypterocarpan 6a-monooxygenase
    2.4.1.68 glycoprotein 6-alpha-L-fucosyltransferase
    3.1.1.6 acetylesterase
    2.7.2.1 acetate kinase

    N   r#      z            zENTRY       r   zCLASS       zCOFACTOR    zCOMMENT     zDBLINKS     :zDISEASE     r	   zEFFECTOR    ;zGENES       r_   rT         c                 S   s   g | ]	}| d d qS )(r   )split)r?   valuer    r    r!   rA   	  s    zparse.<locals>.<listcomp>rq   r   zINHIBITOR   zNAME        zPATHWAY     zPATH:rV   PATHzPRODUCT     zREACTION    zSTRUCTURES  zPDB:zSUBSTRATE   zSYSNAME     )r   striprr   r   r   rY   r   r   r   extendr   r   r   r   r   r   r   r   r   r   r   )handlerecordr@   keyworddatawordskeyvaluesrowdatabasenumberr   rs   _map_numr   ec_num
accessionsr    r    r!   parse   s   






"











r   c                 C   sT   t | }zt|}W n ty   tddw zt| td ty)   Y |S w )aZ  Parse a KEGG Enzyme file with exactly one entry.

    If the handle contains no records, or more than one record,
    an exception is raised.  For example:

    >>> with open("KEGG/enzyme.new") as handle:
    ...     record = read(handle)
    ...     print("%s %s" % (record.entry, record.name[0]))
    ...
    6.2.1.25 benzoate---CoA ligase
    zNo records found in handleNz$More than one record found in handle)r   nextStopIteration
ValueError)rw   recordsrx   r    r    r!   read7  s   
r   __main__)run_doctestN)ri   Bio.KEGGr   r   r   r   rG   r=   rQ   rd   r   r   r   rf   
Bio._utilsr   r    r    r    r!   <module>   s"   	 #r
