
:>"^Ä  ã               @   sb   d  Z  d d l m Z d d l Z d d l m Z Gd d „  d e ƒ Z Gd 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	   ú;/tmp/pip-build-ww9dw3qa/biopython/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  rm d 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   sr  g  |  _  d |  _ t | t ƒ s- t d ƒ ‚ d } d } d d d g  i } x t | ƒ D]\ } } | r– | d k r d } qB| d j | ƒ qX n¬ | rÈ | d k r± d } qB| d j | ƒ qX nz | d	 k rê d
 } d | d <qX nX | d k rd
 } d | d <qX n6 | d k r1t d | | f ƒ ‚ n | d j | ƒ |  j  j | j ƒ  ƒ d d d g  i } qX Wd S)zInitialize the class.r   zAThe coding data given to a StandardData object should be a stringFÚtZstdÚdú)Ú}ú(TÚmultiÚ{Ú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   sO   y |  j  |  j } Wn! t k
 r7 d |  _ t ‚ Yn X|  j d 7_ | Sd 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   s”   d } x‡ |  j  D]| } | d d k rH | d d j | d ƒ d 7} q | d d k rz | 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.   Z	Bio._py3kr   Ú	Exceptionr   Úobjectr   r	   r	   r	   r
   Ú<module>
   s
   