
    XfV                     *   d Z ddlmZ ddlmZ i Zi Zi Zi Zi Z	i Z
i Zi Zi Zi Zi Zi Zdada G d de          Z G d d          Zd	 Z G d
 de          Z G d de          Z G d de          Z G d de          Zd Zd Z eddgej                  g dk    sJ  eddgej                  ddgk    sJ  eddgej                  g dk    sJ  eddgej                  g dk    sJ  eg dej                  g dk    sJ  G d d          Zd  Z  e d!d"d#i d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3d5d6d7d(d8d(d9d(d:d(i d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPdQdRi dSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdgdfdfdfdhdhdididjdjdjdjdk
g dlg dmn            e dodpdqi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdPdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d`dadbdadcdadddadedfdgdfdrdfdfdhdhdididjdjdjdjds	g dtg dun            e dvdwdxi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7dRd8dRd9dRi d:dRd;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdPdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg dzn            e d{d|d}i d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg d~n            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdPdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^d+d_d+d`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0ddDddDd2d3d4d3d5d6d7d(d8d(i d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLi dOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadfdfdfdfdhdhdididjdjdjdjddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdWd[dZd\d+d]d+d^d+d_d+d`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgdOddgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd3d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3d5d6d7d(d8d(d9d(d:d(i d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPdQdRi dSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdgdfdfdfdhdhdididjdjdjdjdk
g dlg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3d5d6d7d(d8d(d9d(d:d+i d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPdQdRi dSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdgdfdfdfdhdhdididjdjdjdjdk
g dld:dOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdPdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^djd_djd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0dd0d2d3d4d3dd6d5d6d7d(d8d(i d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLi dOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdWd[dZd\d+d]d+d^d+d_d+d`dadbdadcdadddadfdfdfdfdhdhdididjdjdjdjddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0ddDd2d3d4d3d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0dd(d2d3d4d3d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdPdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdWd[dZd\d+d]d+d^d+d_d+d`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgdOddgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d.d+d/d0d1d0dd(d2d3d4d3d5d6d7d(d8d(d9d(d:d(i d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPdQdRi dSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdgdfdfdfdhdhdididjdjdjdjdk
g ddOgn            e dddi d$d%d&d%d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3d5d6d7d(d8d(d9d(d:d(d;d<i d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPdQdRdSdRi dTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdgdfdrdfdfdhdhdididjdjdjdjds	g dg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3dd6d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^d+d_dZd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3ddjd5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0d2d3d4d3d5d6d7d(d8d(d9d(d:dfi d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPdQdRi dSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdgdfdfdfdhdhdididjdjdjdjdk
g dld:dOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0ddDddDd2d3d4d3dd6d5d6d7d(i d8d(d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLi dNdLdOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadadfdfdfdfdhdhdididjdjdjdjddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0ddDddDd2d3d4d3dd6d5d6d7d(i d8d(d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLi dNdLdOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadadfdfdfdfdhdhdididjdjdjdjdg dldOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0dd0dd0d2d3d4d3d5d6d7d(d8d(i d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLi dOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadfdfdfdfdhdhdididjdjdjdjddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0ddiddid2d3d4d3d5d6d7d(d8d(i d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLi dOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadfdfdfdfdhdhdididjdjdjdjddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0ddiddid2d3d4d3dd6d5d6d7d(i d8d(d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLi dNdLdOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadadfdfdfdfdhdhdididjdjdjdjdddgdOgn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0dd6d2d3d4d3d5d6d7d(d8d(d9d(i d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLdOdPi dQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^dGd_dGd`dadbdadcdadddadedfdfdfdfdhdhdididjdjdjdjdyddgg dn            e dddi d$d%d&d%d'd(d)d(d*d+d,d+d-d+d.d+d/d0d1d0dd0d2d3d4d3dd6d5d6d7d(d8d(i d9d(d:d(d;d<d=d<d>d<d?d<d@dAdBdAdCdDdEdDdFdGdHdGdIdGdJdGdKdLdMdLdNdLi dOdPdQdRdSdRdTdRdUdRdVdWdXdWdYdZd[dZd\d+d]d+d^d+d_dZd`dadbdadcdadddadfdfdfdfdhdhdididjdjdjdjddgg dn           dS )zCodon tables based on those from the NCBI.

These tables are based on parsing the NCBI file
ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt
using Scripts/update_ncbi_codon_table.py

Last updated at Version 4.4 (May 2019)
    )Optional)	IUPACDataNc                       e Zd ZdZdS )TranslationErrorz.Container for translation specific exceptions.N)__name__
__module____qualname____doc__     3lib/python3.11/site-packages/Bio/Data/CodonTable.pyr   r   ,   s        8888r   r   c                      e Zd ZU dZi Zeeef         ed<   i Zeeef         ed<   g Z	e
e         ed<   g Ze
e         ed<   ddeee	efdee         dee         deeef         deeef         de
e         de
e         d	dfd
Zd ZdS )
CodonTablezA codon-table, or genetic code.forward_table
back_tablestart_codonsstop_codonsNnucleotide_alphabetprotein_alphabetreturnc                 Z    || _         || _        || _        || _        || _        || _        dS Initialize the class.N)r   r   r   r   r   r   )selfr   r   r   r   r   r   s          r   __init__zCodonTable.__init__9   s9     $7  0*$(&r   c                    | j         rd| j         z  }nd}| j        r*|dd                    d | j        D                       z   z  }| j        }|d|v rd}nd	}|d
z  }|dd                    d |D                       z   dz   z  }|dd                    d |D                       z   dz   z  }|D ]}|D ]}|dz   }|D ]k}||z   |z   }|d| z  }|| j        v r|dz  }!	 | j        |         }n# t          $ r d}Y nt          $ r d}Y nw xY w|| j        v r
|d| dz  }b|d| dz  }l|d|z   z  }|d|z   z  }|dd                    d |D                       z   dz   z  }|S )a  Return a simple text representation of the codon table.

        e.g.::

            >>> import Bio.Data.CodonTable
            >>> print(Bio.Data.CodonTable.standard_dna_table)
            Table 1 Standard, SGC0
            <BLANKLINE>
              |  T      |  C      |  A      |  G      |
            --+---------+---------+---------+---------+--
            T | TTT F   | TCT S   | TAT Y   | TGT C   | T
            T | TTC F   | TCC S   | TAC Y   | TGC C   | C
            ...
            G | GTA V   | GCA A   | GAA E   | GGA G   | A
            G | GTG V   | GCG A   | GAG E   | GGG G   | G
            --+---------+---------+---------+---------+--
            >>> print(Bio.Data.CodonTable.generic_by_id[1])
            Table 1 Standard, SGC0
            <BLANKLINE>
              |  U      |  C      |  A      |  G      |
            --+---------+---------+---------+---------+--
            U | UUU F   | UCU S   | UAU Y   | UGU C   | U
            U | UUC F   | UCC S   | UAC Y   | UGC C   | C
            ...
            G | GUA V   | GCA A   | GAA E   | GGA G   | A
            G | GUG V   | GCG A   | GAG E   | GGG G   | G
            --+---------+---------+---------+---------+--
        zTable %izTable ID unknown , c                     g | ]}||S r   r   .0xs     r   
<listcomp>z&CodonTable.__str__.<locals>.<listcomp>l   s    &B&B&BQ&Bq&B&B&Br   NTTCAGUCAGz

z  ||c              3   "   K   | ]
}d | dV  dS )z  z      Nr   r!   c2s     r   	<genexpr>z%CodonTable.__str__.<locals>.<genexpr>z   s*      "E"Er????"E"E"E"E"E"Er   z
--++c              3      K   | ]}d V  dS z	---------Nr   r)   s     r   r+   z%CodonTable.__str__.<locals>.<genexpr>{   s"      $C$CR[$C$C$C$C$C$Cr   z+--z |z Stop|?z(s)|z   |
c              3      K   | ]}d V  dS r.   r   r)   s     r   r+   z%CodonTable.__str__.<locals>.<genexpr>   s"      (G(G(G(G(G(G(G(Gr   )	idnamesjoinr   r   r   KeyErrorr   r   )	r   answerlettersc1c3liner*   codonaminos	            r   __str__zCodonTable.__str__J   s4   : 7 	($')FF'F: 	DcDII&B&B$*&B&B&BCCCCF *3'>>GG G 	&%#(("E"EW"E"E"EEEEKK'CHH$C$C7$C$C$CCCCeKK 	P 	PB & &Dy! 4 4BGbLEKKK'D 000(($($6u$=EE' ( ( ($'EEE/ ( ( ($'EEE( D$555 OOOO3DD OOOO3DDb $+%g(G(Gw(G(G(G G GG%OOFFs   C,,D	:D	D	)r   r   r	   r
   r   dictstr__annotations__r   r   listr   r   r   r=   r   r   r   r   r   0   s        ))$&M4S>&&&!#JS#X### L$s)   Kc
 .2*.(5%/".!,' '%c]' #3-' CH~	'
 cN' 3i' #Y' 
' ' ' '"H H H H Hr   r   c                 N    i }t          |           D ]}||| |         <   ||d<   |S )zBack a back-table (naive single codon mapping).

    ONLY RETURNS A SINGLE CODON, chosen from the possible alternatives
    based on their sort order.
    N)sorted)tabledefault_stop_codonr   keys       r   make_back_tablerG      s?     Je}} % %!$
5:)Jtr   c                   H    e Zd ZU dZdZee         ed<   ej	        Z
d Zd ZdS )NCBICodonTablez-Codon table for generic nucleotide sequences.Nr   c                     || _         || _        || _        t          ||d                   | _        || _        || _        dS )r   r   N)r2   r3   r   rG   r   r   r   )r   r2   r3   rD   r   r   s         r   r   zNCBICodonTable.__init__   sC    
")%Q@@(&r   c                 @    | j         j         d| j        d| j        dS )z?Represent the NCBI codon table class as a string for debugging.z(id=z, names=z, ...))	__class__r   r2   r3   )r   s    r   __repr__zNCBICodonTable.__repr__   s*    .)VVtwVV$*VVVVr   )r   r   r	   r
   r   r   r?   r@   r   protein_lettersr   r   rM   r   r   r   rI   rI      s]         77)-#--- 0' ' 'W W W W Wr   rI   c                        e Zd ZdZej        ZdS )NCBICodonTableDNAz*Codon table for unambiguous DNA sequences.N)r   r   r	   r
   r   unambiguous_dna_lettersr   r   r   r   rP   rP              44#;r   rP   c                        e Zd ZdZej        ZdS )NCBICodonTableRNAz*Codon table for unambiguous RNA sequences.N)r   r   r	   r
   r   unambiguous_rna_lettersr   r   r   r   rT   rT      rR   r   rT   c                       e Zd ZdZd Zd ZdS )AmbiguousCodonTablez)Base codon table for ambiguous sequences.c                     t                               | ||t          |j        ||          |j        t          |j        |          t          |j        |                     || _        dS r   )	r   r   AmbiguousForwardTabler   r   list_ambiguous_codonsr   r   _codon_table)r   codon_tableambiguous_nucleotide_alphabetambiguous_nucleotide_valuesambiguous_protein_alphabetambiguous_protein_valuess         r   r   zAmbiguousCodonTable.__init__   s     	)&!)+( 
 " "(*E  "+"9;VWW!	
 	
 	
$ (r   c                 ,    t          | j        |          S )z0Forward attribute lookups to the original table.)getattrr[   )r   names     r   __getattr__zAmbiguousCodonTable.__getattr__   s    t($///r   N)r   r   r	   r
   r   rd   r   r   r   rW   rW      s9        33( ( (@0 0 0 0 0r   rW   c                 H   | \  }}}||         }||         }||         }i }	g }
|D ]I}|D ]D}|D ]?}	 d|	|||z   |z            <   # t           $ r |
                    ||z   |z              Y <w xY wEJ|
r$|	rt          d| d          t          |           t          |	          S )z<Return all possible encoded amino acids for ambiguous codon.   zambiguous codon z( codes for both proteins and stop codons)r5   appendr   rA   )r;   r   r^   r8   r*   r9   x1x2x3possiblestopsy1y2y3s                 r   list_possible_proteinsrp      s   JBB	$R	(B	$R	(B	$R	(BHE / / 	/ 	/B / //<=H]27R<899 / / /LLb2.....//	/   	"T5TTT   uoo>>s   A%A*	)A*	c                      t           fd                                D                       }t           fd                                D                       }t           fd                                D                       }g }|D ]1}|D ],}|D ]'}||z   |z   }	|	|vr|	 vr|                    |	           (-2 dd         }
|D ]@d}fdd                  D             D ]	}	|	 vrd}	
|r|
                               A|
S )	a  Extend a codon list to include all possible ambiguous codons.

    e.g.::

         ['TAG', 'TAA'] -> ['TAG', 'TAA', 'TAR']
         ['UAG', 'UGA'] -> ['UAG', 'UGA', 'URA']

    Note that ['TAG', 'TGA'] -> ['TAG', 'TGA'], this does not add 'TRR'
    (which could also mean 'TAA' or 'TGG').
    Thus only two more codons are added in the following:

    e.g.::

        ['TGA', 'TAA', 'TAG'] -> ['TGA', 'TAA', 'TAG', 'TRA', 'TAR']

    Returns a new (longer) list of codon strings.
    c              3   z   K   | ]5\  }}d  D                                  t          |                    1|V  6dS )c                     h | ]
}|d          S )r   r   r!   r;   s     r   	<setcomp>z2list_ambiguous_codons.<locals>.<genexpr>.<setcomp>!      )))E!H)))r   N
issupersetsetr!   lettermeaningscodonss      r   r+   z(list_ambiguous_codons.<locals>.<genexpr>  c        FH))&)))44S]]CC     r   c              3   z   K   | ]5\  }}d  D                                  t          |                    1|V  6dS )c                     h | ]
}|d          S )rf   r   rt   s     r   ru   z2list_ambiguous_codons.<locals>.<genexpr>.<setcomp>&  rv   r   Nrw   rz   s      r   r+   z(list_ambiguous_codons.<locals>.<genexpr>#  r~   r   c              3   z   K   | ]5\  }}d  D                                  t          |                    1|V  6dS )c                     h | ]
}|d          S )   r   rt   s     r   ru   z2list_ambiguous_codons.<locals>.<genexpr>.<setcomp>+  rv   r   Nrw   rz   s      r   r+   z(list_ambiguous_codons.<locals>.<genexpr>(  r~   r   NTc                 d    g | ],}d                   D ]}d                  D ]
}||z   |z   -S )rf   r   r   )r!   r8   r*   r9   ambig_codonr^   s       r   r#   z)list_ambiguous_codons.<locals>.<listcomp>:  sq     
 
 
1+a.A
 
 1+a.A	
 
  GbL
 
 
 
 
r   r   F)rC   itemsrg   )r}   r^   c1_listc2_listc3_list
candidatesr8   r*   r9   r;   r6   wantedr   s   ``          @r   rZ   rZ   	  s   *      ; A A C C    G
      ; A A C C    G
      ; A A C C    G J - - 	- 	-B - -R"
**uF/B/B%%e,,,-	-
 AAAYF! ' '
 
 
 
 
1+a.A
 
 
 
	 
	E F""	 #
  	'MM+&&&Mr   TGATAA)r   r   TRATAG)r   r   TARUAGUAA)r   r   UAR)r   r   r   )r   r   r   r   r   c                   ,    e Zd ZdZd Zd ZddZd ZdS )rY   z@Forward table for translation of ambiguous nucleotide sequences.c                 &   || _         || _        || _        i }|                                D ]*\  }}|D ]"}|                    |i           }d||<   |||<   #+|                                D ]\  }}t          |          ||<   || _        i | _        dS )r   rf   N)r   ambiguous_nucleotideambiguous_proteinr   getrA   	_inverted_cache)	r   r   r   r   invertedrc   valcr"   s	            r   r   zAmbiguousForwardTable.__init__x  s    *$8!!2*0022 	  	 ID#    LLB''$  ")) 	' 	'ID#!#YYHTNN!r   c                 b    	 |                      |           dS # t          t          f$ r Y dS w xY w)zCheck if codon works as key for ambiguous forward_table.

        Only returns 'True' if forward_table[codon] returns a value.
        TF)__getitem__r5   r   )r   r;   s     r   __contains__z"AmbiguousForwardTable.__contains__  sH    
	U###4*+ 	 	 	55	s    ..Nc                 R    	 |                      |          S # t          $ r |cY S w xY w)z,Implement get for dictionary-like behaviour.)r   r5   )r   r;   failobjs      r   r   zAmbiguousForwardTable.get  s?    	##E*** 	 	 	NNN	s    &&c                     	  j         |         }|t          u rt          |          |t          u rt          |          |S # t          $ r Y nw xY w	  j        |         }| j         |<   |S # t          $ r Y nw xY w	 t	          | j         j                  }nT# t          $ r  t           j         |<   t          |          dt          $ r t           j         |<   t          |          w xY wt          |          dk    s
J d            t          |          dk    r|d          j         |<   |d         S i }|D ].} j        |         D ]}|                    |d          dz   ||<   /t          |          }g }|	                                D ] \  }}||k    r|
                    |           !t          |          dk    rt           j         |<   t          |          |                     fd           |d         }| j         |<   |S )a  Implement dictionary-like behaviour for AmbiguousForwardTable.

        forward_table[codon] will either return an amino acid letter,
        or throws a KeyError (if codon does not encode an amino acid)
        or a TranslationError (if codon does encode for an amino acid,
        but either is also a stop codon or does encode several amino acids,
        for which no unique letter is available in the given alphabet.
        Nr   zunambiguous codons must coderf   c                 <    t          j        |                    | fS N)lenr   )r"   r   s    r   <lambda>z3AmbiguousForwardTable.__getitem__.<locals>.<lambda>  s    S)?)B%C%CQ$G r   )rF   )r   r   r5   r   rp   r   r   r   r   r   rg   sort)	r   r;   r"   rk   ambiguous_possibler<   termnr   s	   `        r   r   z!AmbiguousForwardTable.__getitem__  s   		E"A $$$&u---H}}uoo%H  	 	 	D		"5)A!"DKH 	 	 	D	
		*-t)4+D HH  	, 	, 	,!)DK5//t+ 	* 	* 	*!1DK"5)))	* 8}}q   "@    x==A!)!DKA;   	O 	OEu- O O+=+A+A$+J+JQ+N"4((O MM,2244 	' 	'JE3axx&&& x==A!1DK"5))) 	GGGGHHHQKEs0   A 
AAA, ,
A98A9=B AC*r   )r   r   r	   r
   r   r   r   r   r   r   r   rY   rY   u  s`        JJ  &	 	 	   M M M M Mr   rY   c                    d |                      dd                               dd                              d          D             }t          |||gz   |||          }t          |t          j        t          j        t          j        t          j                  }i }	i }
|	                                D ]*\  }}||
|<   |                     dd          }||
|<   ||	|<   +g }g }|D ][}|
                    |           d|v r+|                     dd          }|
                    |           |
                    |           \g }g }|D ][}|
                    |           d|v r+|                     dd          }|
                    |           |
                    |           \t          |||gz   |
||          }t          t          j        	                                          }d|d<   t          |d|t          j        t          j                  }t          |||gz   |	||          }t          |t          j        t          j        t          j        t          j                  }|dk    r|a|a|t$          |<   |t&          |<   |t(          |<   |t*          |<   |t,          |<   |t.          |<   ||
                    |           |D ]>} |t0          | <   |t2          | <   |t4          | <   |t6          | <   |t8          | <   |t:          | <   ?dS )	z_Turn codon table data into objects (PRIVATE).

    The data is stored in the dictionaries.
    c                 6    g | ]}|                                 S r   )stripr    s     r   r#   z'register_ncbi_table.<locals>.<listcomp>  s-       		  r   z and z; r   r$   UNrf   )replacesplitrP   rW   r   ambiguous_dna_lettersambiguous_dna_valuesextended_protein_lettersextended_protein_valuesr   rg   rI   r>   ambiguous_rna_valuesrT   ambiguous_rna_lettersstandard_dna_tablestandard_rna_tableunambiguous_dna_by_idunambiguous_rna_by_idgeneric_by_idambiguous_dna_by_idambiguous_rna_by_idambiguous_generic_by_idunambiguous_dna_by_nameunambiguous_rna_by_namegeneric_by_nameambiguous_dna_by_nameambiguous_rna_by_nameambiguous_generic_by_name)rc   alt_namer2   rD   r   r   r3   dna	ambig_dna	rna_tablegeneric_tabler;   r   rna_start_codonsgeneric_start_codonsrna_stop_codonsgeneric_stop_codonsgeneric_merged_valuesambig_genericrna	ambig_rnas                         r   register_ncbi_tabler     si    <<66>>tTJJPPQUVV  E B
 2E<
U
UC#'&*) I IMkkmm  
s"ec3''"e	% ' '##E*** %<<MM#s++E ''...&&&&O & &""5)))%<<MM#s++E&&u---u%%%%
EXJ/CEX G
 )8>>@@AANN3'*) M 
EXJ	+;_ C $'&*) I 
Qww   #" #"M"''"/BX 8 8(+%(+% '&/d#&/d#*7!$''8 8r   StandardSGC0rf   TTTFTTCTTALTTGTCTSTCCTCATCGTATYTACTGTCTGCTGGWCTTCTCCTACTGCCTPCCCCCACCGCATHCACCAAQCAGCGTRCGCCGACGGATTIATCATAATGMACTr$   ACCACAACGAATNAACAAAKAAGAGTAGCAGAAGGGTTVGTCGTAGTGGCTAGCCDEG)
GCAGCGGATGACGAAGAGGGTGGCGGAGGG)r   r   r   )r   r   r  )rc   r   r2   rD   r   r   zVertebrate MitochondrialSGC1r   r  )	r  r  r   r!  r"  r#  r$  r%  r&  )r   r   r  r  )r   r   r  r  r  zYeast MitochondrialSGC2   )r  r  r  r  r   r!  r"  r#  r$  r%  r&  )r  r  r  z`Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; SpiroplasmaSGC3   )r   r   r   r   r   r  r  r  zInvertebrate MitochondrialSGC4   )r   r   r   r  r  r  z8Ciliate Nuclear; Dasycladacean Nuclear; Hexamita NuclearSGC5   )r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  z0Echinoderm Mitochondrial; Flatworm MitochondrialSGC8	   zEuplotid NuclearSGC9
   z%Bacterial, Archaeal and Plant Plastid   )r   r   r   r   r  r  r  zAlternative Yeast Nuclear   zAscidian Mitochondrial   )r   r  r  r  z"Alternative Flatworm Mitochondrial   zBlepharisma Macronuclear   zChlorophycean Mitochondrial   zTrematode Mitochondrial   z"Scenedesmus obliquus Mitochondrial   )r   r   r   zThraustochytrium Mitochondrial   )r   r   r   r   )r   r  r  zPterobranchia Mitochondrial   )r   r   r  r  z*Candidate Division SR1 and Gracilibacteria   )r   r  r  zPachysolen tannophilus Nuclear   zKaryorelict Nuclear   )r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  zCondylostoma Nuclear   zMesodinium Nuclear   zPeritrich Nuclear   zBlastocrithidia Nuclear   zBalanophoraceae Plastid    zCephalodiscidae Mitochondrial!   )!r
   typingr   Bio.Datar   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	Exceptionr   r   rG   rI   rP   rT   rW   rp   rZ   r   r   rY   r   r   r   r   <module>rJ     sN                            9 9 9 9 9y 9 9 9b b b b b b b bJ  W W W W WZ W W W(< < < < < < < << < < < < < < <%0 %0 %0 %0 %0* %0 %0 %0P  4> > >B eU^Y-KLL Q Q Q    
 eU^Y-KLL		Q     eU^Y-KLL Q Q Q    
 eU^Y-KLL Q Q Q    
 222I4RSS X X X    0u u u u u u u up`8 `8 `8\  	s3 %s,13s3 %s,13 	s 3 	s	 3	 -23	
 	s
 3
 !&s
 -23  	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s   3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3  (+33s33s3!  $ &%%&&&/   4  	#s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 	s 3 !&s -23 	s 3 !&s  473s33s3!  $ -,,444/   4  	s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ &&&/   4  
-s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ III1   6  	%s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ ;;;/   4  	Cs3 %s,13s3 %s,13 	s 3 !&s -23 	s	 3	 -23	
 	s
 3 
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s   -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23  3s33s33s3!  $ /   4  	;s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ /   4  		s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ /   4  	0	s3 %s,13s3 %s,13 	s 3 	s	 3	 -23	
 	s
 3
 !&s
 -23  	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s   3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3  (+33s33s3!  $ &%%BBB/   4  	$	s3 %s,13s3 %s,13 	s 3 	s	 3	 -23	
 	s
 3
 !&s
 -23  	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s   3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3  (+33s33s3!  $ &%%/   4  	!	s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ ---/   4  	-	s3 %s,13s3 %s,13 	s 3 !&s 	s	 3	 !&s	 -23	
 	s
 3 
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s   -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23  3s33s33s3!  $ /   4  	#	s3 %s,13s3 %s,13 	s 3 -23 	s	 3	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ /   4  	&	s3 %s,13s3 %s,13 	s 3 -23 	s	 3	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ /   4  	"	s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ /   4  	-	s3 %s,13s3,13 	s 3 -23 	s	 3	 -23	
 	s
 3
 !&s
 -23  	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s   3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3  (+33s33s3!  $ &%%/   4  	)	s3,13s3 %s,13 	s 3 	s	 3	 -23	
 	s
 3
 !&s
 -23 	s  3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3   !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s  473s33s3!  $ -,,&&&/   4  	&	s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ ---/   4  	5	s3 %s,13s3 %s,13 	s 3 	s	 3	 !&s	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ &&&/   4  	)	s3 %s,13s3 %s,13 	s 3 	s	 3	 -23	
 	s
 3
 !&s
 -23  	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s   3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3  (+33s33s3!  $ &%%/   4  		s3 %s,13s3 %s,13 	s 3 !&s -23 	s	 3	 !&s	 -23	
 	s 
 3
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3   !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s  473s33s33s3!  $ /   4  		s3 %s,13s3 %s,13 	s 3 !&s -23 	s	 3	 !&s	 -23	
 	s 
 3
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3   !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s  473s33s33s3!  $ &%%/   4  		s3 %s,13s3 %s,13 	s 3 !&s -23 	s	 3	 -23	
 	s
 3 
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s   -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23  3s33s33s3!  $ /   4  		s3 %s,13s3 %s,13 	s 3 !&s -23 	s	 3	 -23	
 	s
 3 
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s   -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23  3s33s33s3!  $ /   4  	"	s3 %s,13s3 %s,13 	s 3 !&s -23 	s	 3	 !&s	 -23	
 	s 
 3
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3   !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s  473s33s33s3!  $ /   4  	"	s3 %s,13s3 %s,13 	s 3 -23 	s	 3	 -23	
 	s
 3
 !&s 
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23   	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s  s33s33s3!  $ BBB/   4  	(	s3 %s,13s3 %s,13 	s 3 !&s 	s	 3	 !&s	 -23	
 	s
 3 
 !&s
 -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s   -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23 	s 3 !&s -23  3s33s33s3!  $ ---/     r   