3
:>"^Ä  ã               @   sH   d Z ddlmZ ddlZddlmZ G dd„ deƒZG dd„ deƒZ	dS )	z<Objects to represent NEXUS standard data type matrix coding.é    )Úprint_functionN)Ú
basestringc               @   s   e Zd ZdZdS )Ú
NexusErrorz1Provision for the management of Nexus exceptions.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r	   r	   úf/home/psgendb/BIRCHDEV/lib-linux-x86_64/python/lib64/python3.5/site-packages/Bio/Nexus/StandardData.pyr      s   r   c               @   s^   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	j
d dk rJdd„ Zdd„ Zdd„ ZdS )ÚStandardDatazCreate a StandardData iterable object.

    Each coding specifies t [type] => (std [standard], multi [multistate] or
    uncer [uncertain]) and d [data]
    c             C   s  g | _ d| _t|tƒstdƒ‚d}d}dg dœ}xÎt|ƒD ]Â\}}|rf|dkrTd}qâ|d j|ƒ q:n||rŠ|dkrxd}qâ|d j|ƒ q:nX|d	kr¢d
}d|d< q:n@|dkrºd
}d|d< q:n(|dkrÔtd||f ƒ‚n|d j|ƒ | j j|jƒ ƒ dg dœ}q:W dS )zInitialize the class.r   zAThe coding data given to a StandardData object should be a stringFZstd)ÚtÚdú)r   ú}ú(TÚmultir   ú{Úuncerz:Improper character %s at position %i of a coding sequence.N)r   r   )Ú_dataÚ_current_posÚ
isinstancer   r   Ú	enumerateÚappendÚcopy)ÚselfÚdataZmulti_codingZuncertain_codingZcoding_listÚposÚcodingr	   r	   r
   Ú__init__   sD    

zStandardData.__init__c             C   s
   t | jƒS )z4Return the length of the coding, use len(my_coding).)Úlenr   )r   r	   r	   r
   Ú__len__W   s    zStandardData.__len__c             C   s
   | j | S )zPull out child by index.)r   )r   Úargr	   r	   r
   Ú__getitem__[   s    zStandardData.__getitem__c             C   s   | S )zIterate over the items.r	   )r   r	   r	   r
   Ú__iter___   s    zStandardData.__iter__c             C   sF   y| j | j }W n tk
r.   d| _t‚Y nX |  jd7  _|S dS )zReturn next item.r   é   N)r   r   Ú
IndexErrorÚStopIteration)r   Zreturn_codingr	   r	   r
   Ú__next__c   s    
zStandardData.__next__r   é   c             C   s   | j ƒ S )zUReturn next item, deprecated Python 2 style alias for Python 3 style __next__ method.)r'   )r   r	   r	   r
   Únextp   s    zStandardData.nextc             C   s   | j S )z(Return the full coding as a python list.)r   )r   r	   r	   r
   Úrawt   s    zStandardData.rawc             C   sx   d}xn| j D ]d}|d dkr8|ddj|d ƒ d 7 }q|d dkr`|ddj|d ƒ d	 7 }q||d d
 7 }qW |S )z>Return the full coding as a python string, use str(my_coding).Ú r   r   r   r   r   r   r   r   r   )r   Újoin)r   Z
str_returnr   r	   r	   r
   Ú__str__x   s    zStandardData.__str__N)r   r   r   r   r   r    r"   r#   r'   ÚsysÚversion_infor)   r*   r-   r	   r	   r	   r
   r      s   8r   )
r   Ú
__future__r   r.   Ú	Bio._py3kr   Ú	Exceptionr   Úobjectr   r	   r	   r	   r
   Ú<module>
   s
   