B
    d                 @   s   d dl mZmZmZ d dlZd dlmZ yd dlmZ W n  ek
rX   d dlmZ Y nX G dd de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G dd deZdS )    )absolute_importdivisionprint_functionN)OrderedDict)
MutableSetc               @   sx   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dddZdd Zdd Zdd ZeZdd ZdS )
OrderedSetzy
  http://code.activestate.com/recipes/576694/ rev9
  recommended replacement: https://pypi.python.org/pypi/orderedset
  Nc             C   s2   g  | _ }|d ||g7 }i | _|d k	r.| |O } d S )N)endmap)selfiterabler    r   p/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/libtbx/containers.py__init__   s
    
zOrderedSet.__init__c             C   s
   t | jS )N)lenr	   )r
   r   r   r   __len__   s    zOrderedSet.__len__c             C   s
   || j kS )N)r	   )r
   keyr   r   r   __contains__   s    zOrderedSet.__contains__c             C   s<   || j kr8| j}|d }|||g |d<  |d< | j |< d S )N      )r	   r   )r
   r   r   currr   r   r   add   s    
zOrderedSet.addc             C   s0   || j kr,| j |\}}}||d< ||d< d S )Nr   r   )r	   pop)r
   r   prevnextr   r   r   discard#   s    
zOrderedSet.discardc             c   s2   | j }|d }x||k	r,|d V  |d }qW d S )Nr   r   )r   )r
   r   r   r   r   r   __iter__)   s
    

zOrderedSet.__iter__c             c   s2   | j }|d }x||k	r,|d V  |d }qW d S )Nr   r   )r   )r
   r   r   r   r   r   __reversed__0   s
    

zOrderedSet.__reversed__Tc             C   s:   | st d|r| jd d n| jd d }| | |S )Nzset is emptyr   r   r   )KeyErrorr   r   )r
   lastr   r   r   r   r   7   s
     
zOrderedSet.popc             C   s&   | sd| j jf S d| j jt| f S )Nz%s()z%s(%r))	__class____name__list)r
   r   r   r   __repr__>   s    zOrderedSet.__repr__c             C   s:   t |tr*t| t|ko(t| t|kS t| t|kS )N)
isinstancer   r   r!   set)r
   otherr   r   r   __eq__C   s    
 zOrderedSet.__eq__c             C   s.   ddl m } t }x| D ]}|| qW |S )Nr   )copy)r'   r   r   )r
   r'   resulteltr   r   r   __copy__H   s
    
zOrderedSet.__copy__c             C   s4   ddl m} t }x| D ]}|||| qW |S )Nr   )deepcopy)r'   r+   r   r   )r
   memor+   r(   r)   r   r   r   __deepcopy__Q   s
    
zOrderedSet.__deepcopy__)N)T)r    
__module____qualname____doc__r   r   r   r   r   r   r   r   r"   r&   r*   r'   r-   r   r   r   r   r   
   s   

r   c               @   s4   e Zd ZdZdd Zdd Zdd ZeZdd	 Zd
S )deque_template)_list_proxy
_set_proxyc             C   s2   | j  | _| j jd k	r&| j  | _n| j| _d S )N)r   list_proxy_typer2   set_proxy_typer3   )r
   r   r   r   r   \   s    zdeque_template.__init__c             C   s(   | j | | j| j k	r$| j| | S )N)r2   appendr3   r   )r
   itemr   r   r   pushc   s    zdeque_template.pushc             C   s
   t | jS )N)boolr2   )r
   r   r   r   __bool__i   s    zdeque_template.__bool__c             C   s
   || j kS )N)r3   )r
   r7   r   r   r   r   n   s    zdeque_template.__contains__N)	r    r.   r/   	__slots__r   r8   r:   __nonzero__r   r   r   r   r   r1   X   s   r1   c               @   s   e Zd ZeZdZdd ZdS )stackNc             C   s&   | j  }| j| jk	r"| j| |S )N)Z_lr   r3   r2   r   )r
   r(   r   r   r   pullv   s    
z
stack.pull)r    r.   r/   r!   r4   r5   r>   r   r   r   r   r=   r   s   r=   c               @   s   e Zd ZeZdS )hashed_stackN)r    r.   r/   r$   r5   r   r   r   r   r?   }   s   r?   c               @   s   e Zd ZejZdZdd ZdS )queueNc             C   s&   | j  }| j| j k	r"| j| |S )N)r2   popleftr3   r   )r
   r(   r   r   r   r>      s    
z
queue.pull)r    r.   r/   collectionsdequer4   r5   r>   r   r   r   r   r@      s   r@   c               @   s   e Zd ZeZdS )hashed_queueN)r    r.   r/   r$   r5   r   r   r   r   rD      s   rD   )
__future__r   r   r   rB   r   collections.abcr   ImportErrorr   objectr1   r=   r?   r@   rD   r   r   r   r   <module>   s   N
