
    {Ti                     <    d Z  G d d      Z G d d      Zd Zd Zy)a  Code to parse output from the EMBOSS eprimer3 program.

As elsewhere in Biopython there are two input functions, read and parse,
for single record output and multi-record output. For primer3, a single
record object is created for each target sequence and may contain
multiple primers.

i.e. If you ran eprimer3 with a single target sequence, use the read
function. If you ran eprimer3 with multiple targets, use the parse
function to iterate over the retsults.
c                       e Zd ZdZd Zy)RecordzRepresent information from a primer3 run finding primers.

    Members:

        - primers  - list of Primer objects describing primer pairs for
          this target sequence.
        - comments - the comment line(s) for the record

    c                      d| _         g | _        y)Initialize the class. N)commentsprimersselfs    E/home/agent/.local/lib/python3.12/site-packages/Bio/Emboss/Primer3.py__init__zRecord.__init__%   s        N)__name__
__module____qualname____doc__r    r   r   r   r      s    r   r   c                       e Zd ZdZd Zd Zy)Primersa  A primer set designed by Primer3.

    Members:

        - size - length of product, note you can use len(primer) as an
          alternative to primer.size

        - forward_seq
        - forward_start
        - forward_length
        - forward_tm
        - forward_gc

        - reverse_seq
        - reverse_start
        - reverse_length
        - reverse_tm
        - reverse_gc

        - internal_seq
        - internal_start
        - internal_length
        - internal_tm
        - internal_gc

    c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        y)r       r   g        N)sizeforward_seqforward_startforward_length
forward_tm
forward_gcreverse_seqreverse_startreverse_length
reverse_tm
reverse_gcinternal_seqinternal_startinternal_lengthinternal_tminternal_gcr	   s    r   r   zPrimers.__init__G   s}    	 r   c                     | j                   S )z1Length of the primer product (i.e. product size).)r   r	   s    r   __len__zPrimers.__len__Z   s    yyr   N)r   r   r   r   r   r(   r   r   r   r   r   +   s    6&r   r   c              #   D  K   	 | j                         }|j                         rn"d}d}	 |j                  d      r)|| t               }|xj                  |z  c_        d}n|j                  d      r+|j                         dk7  r[|xj                  |z  c_        nD|j                         sn2|dd dk(  r:t               }t        |dd       |_        |j                  j                  |       n|dd dk(  r|j                         }|r|j                  d	k(  r%t               }|j                  j                  |       t        |d
         |_        t        |d         |_        t        |d         |_        t        |d         |_        |d   |_        nJ|dd dk(  r|j                         }|r|j                  d	k(  r%t               }|j                  j                  |       t        |d
         |_        t        |d         |_        t        |d         |_        t        |d         |_        |d   |_        n|dd dk(  r|j                         }|r|j                  d	k(  r%t               }|j                  j                  |       t        |d
         |_        t        |d         |_        t        |d         |_        t        |d         |_        	 |d   |_        	 t9        |       }# t6        $ r
 d|_        Y  w xY w# t:        $ r Y nw xY w|r| yyw)zAIterate over primer3 output as Bio.Emboss.Primer3.Record objects.N)z
# EPRIMER3z	# PRIMER3#z9#                      Start  Len   Tm     GC%   Sequence      zPRODUCT SIZE: zFORWARD PRIMERr               zREVERSE PRIMERzINTERNAL OLIGOr   )readlinestrip
startswithr   r   r   intr   r   appendsplitr   r   floatr   r   r   r   r   r    r!   r   r#   r$   r%   r&   r"   
IndexErrornextStopIteration)handlelinerecordprimerwordss        r   parser@   _   s      ::<  FF
??67!XFOOt#OF__S!

NO 4'!BZ++YFd23i.FKNN!!&)!BZ++JJLEV[[A- %%f-#&uQx=F $'aMF! %eAhF %eAhF!&qF!BZ++JJLEV[[A- %%f-#&uQx=F $'aMF! %eAhF %eAhF!&qF!BZ++JJLEV[[A- %%f-$'aMF!%(q]F"!&uQxF!&uQxF)&+Ah#	<Dm f  )&(#)  		 sH   KL 
K3 &L	 1L 3LL LL 		LL LL c                     t        |       }	 t        |      }	 t        |       t        d      # t        $ r t        d      dw xY w# t        $ r Y |S w xY w)zParse primer3 output into a Bio.Emboss.Primer3.Record object.

    This is for when there is one and only one target sequence. If
    designing primers for multiple sequences, use the parse function.
    zNo records found in handleNz$More than one record found in handle)r@   r9   r:   
ValueError)r;   iteratorr=   s      r   readrD      sm     V}HAhX?@@	  A56D@A
  Ms   / A A	AAN)r   r   r   r@   rD   r   r   r   <module>rE      s+   
  "1 1hEPr   