ó
ã™xTc           @   s‹  d  d l  m Z d  d l Z e j d  d k r> d Z d Z n0 d  d l Z e e d d ƒ Z e e d d ƒ Z e d k r“ d e	 f d „  ƒ  YZ n  d e f d	 „  ƒ  YZ
 e d k rá d  d
 l m Z d e e f d „  ƒ  YZ n  d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e j d  d k r[d  d l Z d e f d „  ƒ  YZ n d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionNi   i   t
   MutableSett   OrderedDictc           B   sq   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e d	 „  ƒ Z d
 „  Z RS(   c         C   s
   t  ‚ d S(   s   Add an element.N(   t   NotImplementedError(   t   selft   value(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   add   s    c         C   s
   t  ‚ d S(   s8   Remove an element.  Do not raise an exception if absent.N(   R   (   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   discard   s    c         C   s,   | |  k r t  | ƒ ‚ n  |  j | ƒ d S(   s5   Remove an element. If not a member, raise a KeyError.N(   t   KeyErrorR   (   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   remove   s    c         C   sG   t  |  ƒ } y t | ƒ } Wn t k
 r5 t ‚ n X|  j | ƒ | S(   s2   Return the popped value.  Raise KeyError if empty.(   t   itert   nextt   StopIterationR   R   (   R   t   itR   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   pop   s    
c         C   s3   y x t  r |  j ƒ  q WWn t k
 r. n Xd S(   s6   This is slow (creates N new iterators!) but effective.N(   t   TrueR   R   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   clear'   s
    	c         C   s"   x | D] } |  j  | ƒ q W|  S(   N(   R   (   R   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __ior__/   s    c         C   s&   x |  | D] } |  j  | ƒ q W|  S(   N(   R   (   R   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __iand__4   s    c         C   s_   t  | t ƒ s! |  j | ƒ } n  x7 | D]/ } | |  k rJ |  j | ƒ q( |  j | ƒ q( W|  S(   N(   t
   isinstancet   Sett   _from_iterableR   R   (   R   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __ixor__9   s    c         C   s"   x | D] } |  j  | ƒ q W|  S(   N(   R   (   R   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __isub__C   s    c         C   s
   |  | ƒ S(   s¶   Construct an instance of the class from any iterable input.

      Must override this method if the class constructor signature
      does not accept an iterable for an input.
      (    (   t   clsR   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   H   s    c            s   |  j  ‡  f d †  |  Dƒ ƒ S(   Nc         3   s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   t   .0R   (   t   other(    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pys	   <genexpr>R   s    (   R   (   R   R   (    (   R   s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __sub__Q   s    (   t   __name__t
   __module__R   R   R	   R   R   R   R   R   R   t   classmethodR   R   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR      s   				
				
		t
   OrderedSetc           B   s˜   e  Z d  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e d „ Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e Z d „  Z RS(   sk   
  http://code.activestate.com/recipes/528878-ordered-set/
  Minor changes for Python 2.3 compatibility.
  c         C   sF   g  |  _  } | d  | | g 7} i  |  _ | d  k	 rB |  | O}  n  d  S(   N(   t   endt   Nonet   map(   R   t   iterableR    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __init__\   s
    	c         C   s   t  |  j ƒ S(   N(   t   lenR"   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __len__c   s    c         C   s   | |  j  k S(   N(   R"   (   R   t   key(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __contains__f   s    c         C   s[   | |  j  k rW |  j } d \ } } | | } | | | g | | <| | <|  j  | <n  d  S(   Ni   i   (   i   i   (   R"   R    (   R   R'   R    t   PREVt   NEXTt   curr(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   i   s
    	
c         C   sQ   | |  j  k rM |  j  j | ƒ \ } } } d \ } } | | | <| | | <n  d  S(   Ni   i   (   i   i   (   R"   R   (   R   R'   t   prevR   R)   R*   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   p   s
    
c         c   sI   |  j  } d \ } } | | } x# | | k	 rD | | V| | } q" Wd  S(   Ni    i   (   i    i   (   R    (   R   R    t   KEYR*   R+   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __iter__w   s    	
	c         c   sI   |  j  } d \ } } | | } x# | | k	 rD | | V| | } q" Wd  S(   Ni    i   (   i    i   (   R    (   R   R    R-   R)   R+   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __reversed__   s    	
	c         C   s_   |  s t  d ƒ ‚ n  | r6 x0 |  j ƒ  D] } Pq( Wn x |  j ƒ  D] } PqC W|  j | ƒ | S(   Ns   set is empty(   R   R/   R.   R   (   R   t   lastR'   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   ‡   s      c         C   s1   |  s d |  j  j f Sd |  j  j t |  ƒ f S(   Ns   %s()s   %s(%r)(   t	   __class__R   t   list(   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __repr__‘   s    c         C   sK   t  | t ƒ r= t |  ƒ t | ƒ k o< t |  ƒ t | ƒ k S|  j | ƒ S(   N(   R   R   R%   R2   t
   isdisjoint(   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __eq__–   s    .c         C   s   |  j  | ƒ S(   N(   R5   (   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __ne__›   s    c         C   s   |  j  ƒ  d  S(   N(   R   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __del__ž   s    c         C   s;   d d l  m  } t ƒ  } x |  D] } | j | ƒ q  W| S(   Niÿÿÿÿ(   t   copy(   R8   R   R   (   R   R8   t   resultt   elt(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __copy__¡   s
    	c         C   sD   d d l  m } t ƒ  } x$ |  D] } | j | | | ƒ ƒ q  W| S(   Niÿÿÿÿ(   t   deepcopy(   R8   R<   R   R   (   R   t   memoR<   R9   R:   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __deepcopy__ª   s
    	N(   R   R   t   __doc__R!   R$   R&   R(   R   R   R.   R/   R   R   R3   R5   R6   R7   R;   R8   R>   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   V   s    						
					(   t	   DictMixinc           B   sé   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d „ Z
 d „  Z d	 „  Z e j Z e j Z e j Z e j Z e j Z e j Z e j Z d d
 „ Z d „  Z d „  Z d d „ Z e e ƒ Z d „  Z d „  Z RS(   sÒ   
    An equivalent recipe for the OrderedDict class introduced in Python 2.7
    from ActiveState:
    http://code.activestate.com/recipes/576693/
    With minor modifications for Python 2.3 compatibility.
    c         O   sh   t  | ƒ d k r+ t d t  | ƒ ƒ ‚ n  y |  j Wn t k
 rS |  j ƒ  n X|  j | | Ž  d  S(   Ni   s$   expected at most 1 arguments, got %d(   R%   t	   TypeErrort   _OrderedDict__endt   AttributeErrorR   t   update(   R   t   argst   kwds(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR$   »   s    c         C   s:   g  |  _  } | d  | | g 7} i  |  _ t j |  ƒ d  S(   N(   RB   R!   t   _OrderedDict__mapt   dictR   (   R   R    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   Ä   s    	c         C   s_   | |  k rH |  j  } | d } | | | g | d <| d <|  j | <n  t j |  | | ƒ d  S(   Ni   i   (   RB   RG   RH   t   __setitem__(   R   R'   R   R    R+   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRI   Ê   s
    	
)c         C   sC   t  j |  | ƒ |  j j | ƒ \ } } } | | d <| | d <d  S(   Ni   i   (   RH   t   __delitem__RG   R   (   R   R'   R,   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRJ   Ñ   s    
c         c   s=   |  j  } | d } x# | | k	 r8 | d V| d } q Wd  S(   Ni   i    (   RB   (   R   R    R+   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR.   ×   s
    	
	c         c   s=   |  j  } | d } x# | | k	 r8 | d V| d } q Wd  S(   Ni   i    (   RB   (   R   R    R+   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR/   Þ   s
    	
	c         C   s[   |  s t  d ƒ ‚ n  | r0 t |  ƒ j ƒ  } n t |  ƒ j ƒ  } |  j | ƒ } | | f S(   Ns   dictionary is empty(   R   t   reversedR   R
   R   (   R   R0   R'   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   popitemå   s    c         C   sŽ   g  |  D] } | |  | g ^ q } |  j  |  j f } |  `  |  ` t |  ƒ j ƒ  } | \ |  _  |  _ | r~ |  j | f | f S|  j | f f S(   N(   RG   RB   t   varsR8   R1   (   R   t   kt   itemst   tmpt	   inst_dict(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt
   __reduce__ï   s    #c         C   s
   t  |  ƒ S(   N(   R2   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   keysù   s    c         K   sº   | d  k r n‘ t | d ƒ rH x | j ƒ  D] \ } } | |  | <q+ WnX t | d ƒ r xF | j ƒ  D] } | | |  | <qd Wn! x | D] \ } } | |  | <q† W| r¶ |  j | ƒ n  d  S(   Nt	   iteritemsRS   (   R!   t   hasattrRT   RS   RD   (   R   R   t   kwargsRN   t   v(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRD     s    c         C   s1   |  s d |  j  j f Sd |  j  j |  j ƒ  f S(   Ns   %s()s   %s(%r)(   R1   R   RO   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR3     s    c         C   s   |  j  |  ƒ S(   N(   R1   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR8     s    c         C   s(   |  ƒ  } x | D] } | | | <q W| S(   N(    (   R   R#   R   t   dR'   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   fromkeys  s    	c         C   sM   t  | t ƒ r= t |  ƒ t | ƒ k o< |  j ƒ  | j ƒ  k St j |  | ƒ S(   N(   R   R   R%   RO   RH   R5   (   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR5   &  s    .c         C   s   |  | k S(   N(    (   R   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR6   +  s    N(   R   R   R?   R$   R   RI   RJ   R.   R/   R   RL   RR   RS   R@   t
   setdefaultR   t   valuesRO   t   iterkeyst
   itervaluesRT   R!   RD   R3   R8   RY   R   R5   R6   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR   ³   s0   							
	
											t   deque_templatec           B   s2   e  Z d Z d „  Z d „  Z d „  Z d „  Z RS(   t   _list_proxyt
   _set_proxyc         C   sI   |  j  j ƒ  |  _ |  j  j d  k	 r9 |  j  j ƒ  |  _ n |  j |  _ d  S(   N(   R1   t   list_proxy_typeR_   t   set_proxy_typeR!   R`   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR$   2  s    c         C   s9   |  j  j | ƒ |  j |  j  k	 r5 |  j j | ƒ n  |  S(   N(   R_   t   appendR`   R   (   R   t   item(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   push9  s    c         C   s   t  |  j ƒ S(   N(   t   boolR_   (   R   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   __nonzero__?  s    c         C   s   | |  j  k S(   N(   R`   (   R   Rd   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR(   B  s    (   s   _list_proxys
   _set_proxy(   R   R   t	   __slots__R$   Re   Rg   R(   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyR^   .  s
   			t   stackc           B   s   e  Z e Z d Z d  „  Z RS(   c         C   s8   |  j  j ƒ  } |  j |  j k	 r4 |  j j | ƒ n  | S(   N(   t   _lR   R`   R_   R   (   R   R9   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   pullJ  s    N(   R   R   R2   Ra   R!   Rb   Rk   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRi   F  s   t   hashed_stackc           B   s   e  Z e Z RS(    (   R   R   t   setRb   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRl   Q  s   t   queuec           B   s    e  Z e j Z d Z d  „  Z RS(   c         C   s8   |  j  j ƒ  } |  j |  j  k	 r4 |  j j | ƒ n  | S(   N(   R_   t   popleftR`   R   (   R   R9   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRk   \  s    N(   R   R   t   collectionst   dequeRa   R!   Rb   Rk   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRn   X  s   	c           B   s   e  Z e Z d Z d  „  Z RS(   c         C   sS   |  j  j d ƒ } |  j |  j  k	 rO y |  j j | ƒ WqO t k
 rK qO Xn  | S(   Ni    (   R_   R   R`   R	   t
   ValueError(   R   R9   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRk   h  s    N(   R   R   R2   Ra   R!   Rb   Rk   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRn   d  s   t   hashed_queuec           B   s   e  Z e Z RS(    (   R   R   Rm   Rb   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyRs   r  s   (   i   i   (   i   i   (   t
   __future__R    t   syst   version_infoR!   R   R   Rp   t   getattrRm   R   t   UserDictR@   RH   t   objectR^   Ri   Rl   Rn   Rs   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/libtbx/containers.pyt   <module>   s*   	I[{