o
    RŀgV                     @   sX(  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 deZG dd dZd	d
 ZG dd deZG dd deZG dd deZG dd deZdd Zdd Zeddgejg dkssJ eddgejddgksJ eddgejg dksJ eddgejg dksJ eg dejg d ksJ G d!d" d"Zd#d$ Z e d%d&d'i d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7d9d:d;d,d<d,d=d,d>d,i d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTdUdVi dWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdkdjdjdjdldldmdmdndndndndo
g dpg dqdr e dsdtdui d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdTdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dddedfdedgdedhdedidjdkdjdvdjdjdldldmdmdndndndndw	g dxg dydr e dzd{d|i d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;dVd<dVd=dVi d>dVd?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdTdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg d~dr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdTdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbd/dcd/dddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4ddHddHd6d7d8d7d9d:d;d,d<d,i d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPi dSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedjdjdjdjdldldmdmdndndndnddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d[d_d^d`d/dad/dbd/dcd/dddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgdSdhgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd7d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7d9d:d;d,d<d,d=d,d>d,i d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTdUdVi dWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdkdjdjdjdldldmdmdndndndndo
g dpg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7d9d:d;d,d<d,d=d,d>d/i d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTdUdVi dWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdkdjdjdjdldldmdmdndndndndo
g dpd>dSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdTdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdndcdndddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4dd4d6d7d8d7dd:d9d:d;d,d<d,i d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPi dSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d[d_d^d`d/dad/dbd/dcd/dddedfdedgdedhdedjdjdjdjdldldmdmdndndndnddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4ddHd6d7d8d7d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4dd,d6d7d8d7d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdTdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d[d_d^d`d/dad/dbd/dcd/dddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgdSdhgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d2d/d3d4d5d4dd,d6d7d8d7d9d:d;d,d<d,d=d,d>d,i d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTdUdVi dWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdkdjdjdjdldldmdmdndndndndo
g ddSgdr e dddi d(d)d*d)d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7d9d:d;d,d<d,d=d,d>d,d?d@i dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTdUdVdWdVi dXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdkdjdvdjdjdldldmdmdndndndndw	g dg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7dd:d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbd/dcd^dddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7ddnd9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4d6d7d8d7d9d:d;d,d<d,d=d,d>dji d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTdUdVi dWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdkdjdjdjdldldmdmdndndndndo
g dpd>dSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4ddHddHd6d7d8d7dd:d9d:d;d,i d<d,d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPi dRdPdSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdededjdjdjdjdldldmdmdndndndnddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4ddHddHd6d7d8d7dd:d9d:d;d,i d<d,d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPi dRdPdSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdededjdjdjdjdldldmdmdndndndndg dpdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4dd4dd4d6d7d8d7d9d:d;d,d<d,i d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPi dSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedjdjdjdjdldldmdmdndndndnddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4ddmddmd6d7d8d7d9d:d;d,d<d,i d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPi dSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedjdjdjdjdldldmdmdndndndnddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4ddmddmd6d7d8d7dd:d9d:d;d,i d<d,d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPi dRdPdSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdededjdjdjdjdldldmdmdndndndndddgdSgdr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4dd:d6d7d8d7d9d:d;d,d<d,d=d,i d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPdSdTi dUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbdKdcdKdddedfdedgdedhdedidjdjdjdjdldldmdmdndndndnd}ddgg ddr e dddi d(d)d*d)d+d,d-d,d.d/d0d/d1d/d2d/d3d4d5d4dd4d6d7d8d7dd:d9d:d;d,d<d,i d=d,d>d,d?d@dAd@dBd@dCd@dDdEdFdEdGdHdIdHdJdKdLdKdMdKdNdKdOdPdQdPdRdPi dSdTdUdVdWdVdXdVdYdVdZd[d\d[d]d^d_d^d`d/dad/dbd/dcd^dddedfdedgdedhdedjdjdjdjdldldmdmdndndndnddgg ddr 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                   @   s   e Zd ZdZdS )TranslationErrorz.Container for translation specific exceptions.N)__name__
__module____qualname____doc__ r	   r	   G/var/www/html/myenv/lib/python3.10/site-packages/Bio/Data/CodonTable.pyr   ,   s    r   c                   @   s   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
dZdd ZdS )
CodonTablezA codon-table, or genetic code.forward_table
back_tablestart_codonsstop_codonsNnucleotide_alphabetprotein_alphabetreturnc                 C   s(   || _ || _|| _|| _|| _|| _dS Initialize the class.N)r   r   r   r   r   r   )selfr   r   r   r   r   r   r	   r	   r
   __init__9   s   

zCodonTable.__init__c           	      C   s  | j r	d| j  }nd}| jr|dddd | jD  7 }| j}|dur+d|v r+d	}nd
}|d7 }|dddd |D  d 7 }|dddd |D  d 7 }|D ]v}|D ]a}|d }|D ]L}|| | }|d| 7 }|| jv rx|d7 }q_z| j| }W n ty   d}Y n ty   d}Y nw || jv r|d| d7 }q_|d| d7 }q_|d| 7 }|d| 7 }qW|dddd |D  d 7 }qS|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                 S   s   g | ]}|r|qS r	   r	   .0xr	   r	   r
   
<listcomp>l       z&CodonTable.__str__.<locals>.<listcomp>NTTCAGUCAGz

z  ||c                 s   s    | ]	}d | dV  qdS )z  z      Nr	   r   c2r	   r	   r
   	<genexpr>z   s    z%CodonTable.__str__.<locals>.<genexpr>z
--++c                 s       | ]}d V  qdS z	---------Nr	   r"   r	   r	   r
   r$   {       z+--z |z Stop|?z(s)|z   |
c                 s   r&   r'   r	   r"   r	   r	   r
   r$      r(   )	idnamesjoinr   r   r   KeyErrorr   r   )	r   answerlettersc1c3liner#   codonaminor	   r	   r
   __str__J   sD     


"zCodonTable.__str__)r   r   r   r   r   dictstr__annotations__r   r   listr   r   r   r6   r	   r	   r	   r
   r   0   s8   
 


r   c                 C   s*   i }t | D ]}||| | < q||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   keyr	   r	   r
   make_back_table   s
   r?   c                   @   s8   e Zd ZU dZdZee ed< ej	Z
dd Zdd ZdS )NCBICodonTablez-Codon table for generic nucleotide sequences.Nr   c                 C   s2   || _ || _|| _t||d | _|| _|| _dS )r   r   N)r+   r,   r   r?   r   r   r   )r   r+   r,   r<   r   r   r	   r	   r
   r      s   
zNCBICodonTable.__init__c                 C   s   | 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   r+   r,   r   r	   r	   r
   __repr__   s   zNCBICodonTable.__repr__)r   r   r   r   r   r   r8   r9   r   protein_lettersr   r   rC   r	   r	   r	   r
   r@      s   
 	r@   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	   r
   rF          
rF   c                   @   rE   )NCBICodonTableRNAz*Codon table for unambiguous RNA sequences.N)r   r   r   r   r   unambiguous_rna_lettersr   r	   r	   r	   r
   rI      rH   rI   c                   @   s    e Zd ZdZdd Zdd ZdS )AmbiguousCodonTablez)Base codon table for ambiguous sequences.c                 C   s<   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_valuesr	   r	   r
   r      s    	

zAmbiguousCodonTable.__init__c                 C   s   t | j|S )z0Forward attribute lookups to the original table.)getattrrN   )r   namer	   r	   r
   __getattr__   s   zAmbiguousCodonTable.__getattr__N)r   r   r   r   r   rV   r	   r	   r	   r
   rK      s     rK   c                 C   s   | \}}}|| }|| }|| }i }	g }
|D ]*}|D ]%}|D ] }zd|	||| |  < W q t y?   |
|| |  Y qw qq|
rR|	rNt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)r.   appendr   r:   )r4   r   rQ   r1   r#   r2   x1x2x3possiblestopsy1y2y3r	   r	   r
   list_possible_proteins   s.   

ra   c                    s   t fdd D }t fdd D }t fdd D }g }|D ]}|D ]}|D ]}|| | }	|	|vrH|	vrH||	 q3q/q+dd }
|D ]# d} fdd d	  D D ]	}	|	vrnd
}qeqe|rv|
  qS|
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   0    | ]\}}d d  D  t|r|V  qdS )c                 S      h | ]}|d  qS )r   r	   r   r4   r	   r	   r
   	<setcomp>!  r   2list_ambiguous_codons.<locals>.<genexpr>.<setcomp>N
issupersetsetr   lettermeaningscodonsr	   r
   r$         
z(list_ambiguous_codons.<locals>.<genexpr>c                 3   rb   )c                 S   rc   )rW   r	   rd   r	   r	   r
   re   &  r   rf   Nrg   rj   rm   r	   r
   r$   #  ro   c                 3   rb   )c                 S   rc   )   r	   rd   r	   r	   r
   re   +  r   rf   Nrg   rj   rm   r	   r
   r$   (  ro   NTc                    s<   g | ]} d   D ]} d  D ]}|| | qq
qS )rW   rp   r	   )r   r1   r#   r2   )ambig_codonrQ   r	   r
   r   :  s    



z)list_ambiguous_codons.<locals>.<listcomp>r   F)r;   itemsrX   )rn   rQ   c1_listc2_listc3_list
candidatesr1   r#   r2   r4   r/   wantedr	   )rq   rQ   rn   r
   rM   	  sB   



rM   TGATAA)rx   ry   TRATAG)r{   ry   TARUAGUAA)r}   r~   UAR)rx   ry   r{   )rx   ry   r{   r|   rz   c                   @   s2   e Zd ZdZdd Zdd ZdddZd	d
 ZdS )rL   z@Forward table for translation of ambiguous nucleotide sequences.c           	      C   s|   || _ || _|| _i }| D ]\}}|D ]}||i }d||< |||< qq| D ]
\}}t|||< q+|| _i | _dS )r   rW   N)r   ambiguous_nucleotideambiguous_proteinrr   getr:   	_inverted_cache)	r   r   r   r   invertedrU   valcr   r	   r	   r
   r   x  s   

zAmbiguousForwardTable.__init__c              	   C   s*   z|  | W dS  ttfy   Y dS w )zCheck if codon works as key for ambiguous forward_table.

        Only returns 'True' if forward_table[codon] returns a value.
        TF)__getitem__r.   r   )r   r4   r	   r	   r
   __contains__  s   
z"AmbiguousForwardTable.__contains__Nc                 C   s$   z|  |W S  ty   | Y S w )z,Implement get for dictionary-like behaviour.)r   r.   )r   r4   failobjr	   r	   r
   r     s
   zAmbiguousForwardTable.getc           	         s  z j | }W n	 ty   Y nw |tu rt||tu r!t||S z j| }| j |< |W S  ty9   Y nw z
t| j j}W n  tyU   t j |< t|d tyd   t j |< t|w t|dksoJ dt|dkr|d  j |< |d S i }|D ]} j| D ]}||dd ||< qqt|}g }|	 D ]\}}||kr|
| qt|dkrt j |< t||j fdd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 coderW   c                    s   t  j|  | fS N)lenr   )r   rB   r	   r
   <lambda>  s    z3AmbiguousForwardTable.__getitem__.<locals>.<lambda>)r>   )r   r.   r   r   ra   r   r   r   r   rr   rX   sort)	r   r4   r   r\   ambiguous_possibler5   termnr   r	   rB   r
   r     sd   	








z!AmbiguousForwardTable.__getitem__r   )r   r   r   r   r   r   r   r   r	   r	   r	   r
   rL   u  s    
rL   c                 C   s  dd |  dd dddD }t|||g |||}t|tjtjtjtj}i }	i }
|	 D ]\}}||
|< | dd}||
|< ||	|< q1g }g }|D ]}|
| d|v rd| dd}|
| |
| qNg }g }|D ]}|
| d|v r| dd}|
| |
| qpt|||g |
||}ttj	 }d|d< t|d|tjtj}t|||g |	||}t|tjtjtjtj}|d	kr|a|a|t|< |t|< |t|< |t|< |t|< |t|< |dur|
| |D ]} |t| < |t| < |t| < |t| < |t| < |t| < qdS )
z_Turn codon table data into objects (PRIVATE).

    The data is stored in the dictionaries.
    c                 S   s   g | ]}|  qS r	   )stripr   r	   r	   r
   r     s    z'register_ncbi_table.<locals>.<listcomp>z and z; r   r   UNrW   )replacesplitrF   rK   r   ambiguous_dna_lettersambiguous_dna_valuesextended_protein_lettersextended_protein_valuesrr   rX   r@   r7   ambiguous_rna_valuesrI   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)rU   alt_namer+   r<   r   r   r,   dna	ambig_dna	rna_tablegeneric_tabler4   r   rna_start_codonsgeneric_start_codonsrna_stop_codonsgeneric_stop_codonsgeneric_merged_valuesambig_genericrna	ambig_rnar	   r	   r
   register_ncbi_table  s   	






r   StandardSGC0rW   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)ry   r{   rx   )r   r   r   )rU   r   r+   r<   r   r   zVertebrate MitochondrialSGC1rp   r  )	r  r  r  r  r  r  r  r	  r
  )ry   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   ry   rx   zThraustochytrium Mitochondrial   )r   ry   r{   rx   )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   r?   r@   rF   rI   rK   ra   rM   r   r   rL   r   r	   r	   r	   r
   <module>   sZ  	e	(A
xn				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				



				




