
    Ri,                     .    d Z d Zd Z G d d      Zd Zy)a~  Parser for the prosite dat file from Prosite at ExPASy.

See https://www.expasy.org/prosite/

Tested with:
 - Release 20.43, 10-Feb-2009
 - Release 2017_03 of 15-Mar-2017.

Functions:
 - read                  Reads a Prosite file containing one Prosite record
 - parse                 Iterates over records in a Prosite file.

Classes:
 - Record                Holds Prosite data.

c              #   2   K   	 t        |       }|sy| w)zParse Prosite records.

    This function is for parsing Prosite files containing multiple
    records.

    Arguments:
     - handle   - handle to the file.

    N)__read)handlerecords     J/home/agent/.friday_env/lib/python3.12/site-packages/Bio/ExPASy/Prosite.pyparser      s$      	 s   c                 V    t        |       }| j                         }|rt        d      |S )zRead one Prosite record.

    This function is for parsing Prosite files containing
    exactly one record.

    Arguments:
     - handle   - handle to the file.

    z"More than one Prosite record found)r   read
ValueError)r   r   	remainders      r   r	   r	   +   s,     F^FI=>>M    c                       e Zd ZdZd Zy)Recordag  Holds information from a Prosite record.

    Main attributes:
     - name           ID of the record.  e.g. ADH_ZINC
     - type           Type of entry.  e.g. PATTERN, MATRIX, or RULE
     - accession      e.g. PS00387
     - created        Date the entry was created.  (MMM-YYYY for releases
       before January 2017, DD-MMM-YYYY since January 2017)
     - data_update    Date the 'primary' data was last updated.
     - info_update    Date data other than 'primary' data was last updated.
     - pdoc           ID of the PROSITE DOCumentation.
     - description    Free-format description.
     - pattern        The PROSITE pattern.  See docs.
     - matrix         List of strings that describes a matrix entry.
     - rules          List of rule definitions (from RU lines).  (strings)
     - prorules       List of prorules (from PR lines). (strings)

    NUMERICAL RESULTS:
     - nr_sp_release  SwissProt release.
     - nr_sp_seqs     Number of seqs in that release of Swiss-Prot. (int)
     - nr_total       Number of hits in Swiss-Prot.  tuple of (hits, seqs)
     - nr_positive    True positives.  tuple of (hits, seqs)
     - nr_unknown     Could be positives.  tuple of (hits, seqs)
     - nr_false_pos   False positives.  tuple of (hits, seqs)
     - nr_false_neg   False negatives.  (int)
     - nr_partial     False negatives, because they are fragments. (int)

    COMMENTS:
     - cc_taxo_range  Taxonomic range.  See docs for format
     - cc_max_repeat  Maximum number of repetitions in a protein
     - cc_site        Interesting site.  list of tuples (pattern pos, desc.)
     - cc_skip_flag   Can this entry be ignored?
     - cc_matrix_type
     - cc_scaling_db
     - cc_author
     - cc_ft_key
     - cc_ft_desc
     - cc_version     version number (introduced in release 19.0)

    The following are all lists if tuples (swiss-prot accession, swiss-prot name).

    DATA BANK REFERENCES:
     - dr_positive
     - dr_false_neg
     - dr_false_pos
     - dr_potential   Potential hits, but fingerprint region not yet available.
     - dr_unknown     Could possibly belong
     - pdb_structs    List of PDB entries.

    c                    d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _	        g | _
        g | _        g | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        g | _        d| _        g | _        g | _        g | _        g | _        g | _        g | _        y)zInitialize the class. )NNN)nametype	accessioncreateddata_updateinfo_updatepdocdescriptionpatternmatrixrulesprorulespostprocessingnr_sp_release
nr_sp_seqsnr_totalnr_positive
nr_unknownnr_false_posnr_false_neg
nr_partialcc_taxo_rangecc_max_repeatcc_sitecc_skip_flagdr_positivedr_false_negdr_false_posdr_potential
dr_unknownpdb_structs)selfs    r   __init__zRecord.__init__q   s    			
 $'&( r   N)__name__
__module____qualname____doc__r1    r   r   r   r   =   s    1f%r   r   c           	      l   dd l }d }| D ]  }|d d |dd  j                         }}|dk(  r[t               }|j                  d      }t	        |      dk7  rt        d|       |d   |_        |d   j                  d      |_        ||d	k(  r|j                  d
      |_        |dk(  r|j                  d      j                  d      }|d   j                  d      r|d   j                  dd      d   |_        nt        d|       |d   j                  d      r|d   j                  dd      d   |_        nt        d|       |d   j                  d      r|d   j                  dd      d   |_        pt        d|       |dk(  r	||_        |dk(  r|xj                  |z  c_        |dk(  r|j                   j#                  |       |dk(  r,|j$                  j'                  |j                  d
             |dk(  r|j(                  j#                  |       |dk(  r,|j                  d
      }|D ]  }|sd |j                  d      D        \  }	}
|	dk(  r,|
j                  d      \  }}||_        t-        |      |_        S|	dk(  rt-        |
      |_        i|	dk(  rt-        |
      |_        |	dv r|j5                  d|
      }|st7        d|
 d |      t9        t;        t,        |j=                                     }|	d!k(  r||_        |	d"k(  r||_         |	d#k(  r||_!        |	d$k(  s||_"        t        d%|	 d |       O|d&k(  r|j                  d
      }|D ]  }|r|d d' d(k(  r|jG                  d      dk(  r$d) |j                  d      D        \  }	}
|	d*k(  r|
|_$        L|	d+k(  r|
|_%        Y|	d,k(  r;|
j                  d      \  }}|jL                  j#                  t-        |      |f       |	d-k(  r|
|_'        |	d.k(  r|
|_(        |	d/k(  r|
|_)        |	d0k(  r|
|_*        |	d1k(  r|
|_+        |	d2k(  r|
|_,        |	d3k(  r|
|_-        t        d%|	 d |       p|d4k(  r|j                  d
      }|D ]  }|sd5 |j                  d      D        \  }}}|d6k(  r|j\                  j#                  ||f       E|d7k(  r|j^                  j#                  ||f       h|d8k(  r|j`                  j#                  ||f       |d9k(  r|jb                  j#                  ||f       |d:k(  r|jd                  j#                  ||f       t        d;|        j|d<k(  rC|j                         }|D ],  }|jf                  j#                  |j                  d
             . |d=k(  r.|j                  d
      }|jh                  j'                  |       |d>k(  r|j                  d
      |_5        |d?k(  r|s nt        d@| dA       y |st        dB      |S )CN          IDz; z'I don't understand identification line
   .AC;DT)z
 (CREATED)z CREATED zI don't understand date line
)z (DATA UPDATE)z DATA UPDATE)z (INFO UPDATE)z INFO UPDATEDEPAMAPPRUNRc              3   <   K   | ]  }|j                           y wNlstrip.0words     r   	<genexpr>z__read.<locals>.<genexpr>        GdkkmG   =z/RELEASE,z
/FALSE_NEGz/PARTIAL)/TOTAL	/POSITIVE/UNKNOWN
/FALSE_POSz(\d+)\((\d+)\)zBroken data z in comment line
rT   rU   rV   rW   zUnknown qual CC   zAutomatic scalingc              3   <   K   | ]  }|j                           y wrI   rJ   rL   s     r   rO   z__read.<locals>.<genexpr>   rP   rQ   z/TAXO-RANGEz/MAX-REPEATz/SITEz
/SKIP-FLAGz/MATRIX_TYPEz/SCALING_DBz/AUTHORz/FT_KEYz/FT_DESCz/VERSIONDRc              3   <   K   | ]  }|j                           y wrI   )striprL   s     r   rO   z__read.<locals>.<genexpr>  s     "KD4::<"KrQ   TFNP?zI don't understand type flag 3DPRDOz//zUnknown keyword z foundzUnexpected end of stream.)6rerstripr   splitlenr
   r   r   r   endswithrsplitr   r   r   r   r   r   appendr   extendr   r   intr   r$   r%   match	Exceptiontuplemapgroupsr    r!   r"   r#   countr&   r'   r(   r)   cc_matrix_typecc_scaling_db	cc_author	cc_ft_key
cc_ft_desc
cc_versionr*   r,   r+   r-   r.   r/   r   r   )r   rf   r   linekeywordvaluecolsdatescolqualdatareleaseseqsmhitsposdescrefsrefaccr   r   idr   s                           r   r   r      s?   F Qbq48??#4d?XF;;t$D4yA~ #KD6!RSSq'FKq'..-FK_$||C0F_ LL%++D1EQx  !;<!&qa!8!; #A$!HIIQx  !CD%*1X__S!%<Q%?" #A$!HIIQx  !CD%*1X__S!%<Q%?" #A$!HII_!&F_NNe#N_MM  '_!!((S)9:_LL&_;;s#D WG		#G
d:%$(JJsOMGT+2F((+D	F%\)*-d)F'Z'(+D	F%NN!2D9A',tf<Nth(WXX S!((*!56Dx'*.,-1*+,0)-.2+$}TF:LTH%UVV5W6 _ ;;s#D "Wc#2h*== 99S>Q& G		#G
d=(+/F(]*+/F(W_ $

3ICNN))3s8T*:;\)*.F'^+,0F)]*+/F(Y&'+F$Y&'+F$Z'(,F%Z'(,F%$}TF:LTH%UVVE"WF _;;s#D M"KCIIcN"KT43;&&--sDk:S[''..T{;S[''..T{;S[''..T{;S[%%,,c4[9$'DTF%KLLM  _;;=D :""))"))C.9:_KK$EOO""5)_,,s+FK_/y?@@_Qb 	455Mr   N)r5   r   r	   r   r   r6   r   r   <module>r      s'   $"$Y Y~Xr   