ó
”™xTc           @   s®  d  d l  m Z d  d l m Z m Z d  d l m Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d e f d	 „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d  d l Z d Z d e Z d e Z d e Z e j d e ƒ Z e j d e ƒ Z e j d e e f ƒ Z e j d e ƒ Z  e j d e j! ƒ Z" d „  Z# d S(   iÿÿÿÿ(   t   division(   t   OrderedDictt
   OrderedSet(   t   SorryN(   t   StringIO(   t	   DictMixin(   t   flext   cifc           B   s³   e  Z d d  „ Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e
 Z d „  Z d	 „  Z d d
 d d d d „ Z d „  Z e d d d „ Z e d e d „ Z RS(   c         C   se   | d  k	 r t | ƒ |  _ n t ƒ  |  _ t g  |  j j ƒ  D] } | j ƒ  | f ^ q= ƒ |  _ d  S(   N(   t   NoneR   t   blockst   dictt   keyst   lowert
   keys_lower(   t   selfR	   t   key(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __init__   s    c         C   sb   t  | t ƒ s t ‚ t j t d | ƒ s> t d | ƒ ‚ n  | |  j | <| |  j | j	 ƒ  <d  S(   Nt   _s!   %s is not a valid data block name(
   t
   isinstancet   blockt   AssertionErrort   ret   matcht   tag_reR   R	   R   R   (   R   R   t   value(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __setitem__   s
    c         C   s;   |  j  j | j ƒ  ƒ } | d  k r( | S|  j j | | ƒ S(   N(   R   t   getR   R   R	   (   R   R   t   defaultt	   key_lower(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR      s    c         C   s2   |  j  | ƒ } | d  k r. t d | ƒ ‚ n  | S(   Ns!   Unknown CIF data block name: "%s"(   R   R   t   KeyError(   R   R   t   result(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __getitem__"   s    c         C   s+   |  j  |  j | j ƒ  =|  j | j ƒ  =d  S(   N(   R	   R   R   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __delitem__(   s    c         C   s   |  j  j ƒ  S(   N(   R	   R   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   ,   s    c         C   s   t  t |  j ƒ  ƒ ƒ S(   N(   t   reprR   t	   iteritems(   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __repr__/   s    c         C   s   t  |  j j ƒ  ƒ S(   N(   R   R	   t   copy(   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __copy__2   s    c         C   s   t  t j |  j | ƒ ƒ S(   N(   R   R$   t   deepcopyR	   (   R   t   memo(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __deepcopy__7   s    c         C   s   t  j |  ƒ S(   N(   R$   R&   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR&   :   s    s     i"   c         C   so   | d  k r t j } n  xP |  j ƒ  D]B \ } } | d | IJ| j d | d | d | d | d | ƒ q% Wd  S(   Ns   data_%st   outt   indentt
   indent_rowt   data_name_field_widtht   loop_format_strings(   R   t   syst   stdoutt   itemst   show(   R   R)   R*   R+   R,   R-   t   nameR   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR1   =   s    	c         C   s#   t  ƒ  } |  j d | ƒ | j ƒ  S(   NR)   (   R   R1   t   getvalue(   R   t   s(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __str__I   s    	c   	      C   sÎ   | d  k r t j } n  d d l m } i  } | d  k rI | j ƒ  } n  x~ |  j j ƒ  D]m \ } } | j ƒ  } | j	 | ƒ | j
 | ƒ | j | | ƒ | j s­ | j rY | j d | d | ƒ qY qY W| S(   Niÿÿÿÿ(   t
   validationt   show_warningsR)   (   R   R.   R/   t	   iotbx.cifR6   t   ErrorHandlerR	   R"   t	   __class__t   set_error_handlert   validatet
   setdefaultt   error_countt   warning_countR1   (	   R   t
   dictionaryR7   t   error_handlerR)   R6   t   errorsR   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR<   N   s     c         C   sg   t  t |  j j ƒ  d | d | ƒƒ |  _ | rc x0 |  j j ƒ  D] } | j d | d | ƒ q@ Wn  d  S(   NR   t   reverset	   recursive(   R   t   sortedR	   R0   t   valuest   sort(   R   RD   R   RC   t   b(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRG   ]   s    *N(   t   __name__t
   __module__R   R   R   R   R   R    R   R#   R%   R$   R(   R&   R1   R5   t   TrueR<   t   FalseRG   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR      s"   									
	t
   block_basec           B   sõ   e  Z d  „  Z d „  Z d „  Z d „  Z e d d d „ Z d „  Z	 d „  Z
 e e d d „ Z d „  Z d	 „  Z d d
 „ Z d „  Z d „  Z d d „ Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z d „  Z e d e d „ Z d „  Z RS(   c         C   s+   i  |  _  i  |  _ t ƒ  |  _ i  |  _ d  S(   N(   t   _itemst   loopsR   t   _setR   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   d   s    		c         C   sÜ  t  j t | ƒ s% t d | ƒ ‚ n  t | t ƒ rn | |  j | <xc| j ƒ  D] } | |  j | j	 ƒ  <qN Wn9t | t
 ƒ rõ t | ƒ } t  j t | ƒ p¼ t  j t | ƒ p¼ t  j t | ƒ sÒ t d | ƒ ‚ n  | |  j | <| |  j | j	 ƒ  <n² y t | ƒ t | ƒ |  | <Wn‘ t k
 r¦| |  j k r?|  j | =n  x0 |  j j ƒ  D] } | | k rO| | | <qOqOW| |  k r§|  j t d | f d | f ƒ ƒ q§n X| |  j k sÅt | t ƒ rØ|  j j | ƒ n  d  S(   Ns   %s is not a valid data names   Invalid data item for %st   headert   data(   R   R   R   R   R   t   loopRO   R   R   R   t
   basestringt   strt   any_print_char_ret   quoted_string_ret   semicolon_string_reRN   t   floatt	   TypeErrorRF   t   add_loopRP   t   add(   R   R   R   t   kt   vt   loop_(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   j   s6    
)c         C   s‡   |  j  j | j ƒ  | ƒ } | |  j k r5 |  j | Sx+ |  j j ƒ  D] } | | k rE | | SqE W| |  j k r} |  j | St ‚ d  S(   N(   R   R   R   RN   RO   RF   R   (   R   R   RS   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   ˆ   s    c         C   së   |  j  j | j ƒ  | ƒ } | |  j k rG |  j | =|  j j | ƒ n  | |  j ƒ  k rµ xP |  j j ƒ  D]? \ } } | | k ri t	 | ƒ d k r� |  | =n | | =d  Sqi Wt
 ‚ n2 | |  j k rá |  j | =|  j j | ƒ n t
 ‚ d  S(   Ni   (   R   R   R   RN   RP   t   discardR   RO   R"   t   lenR   (   R   R   R]   RS   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR    –   s     

	
c         C   sŽ   | |  k r+ | d  k r | S| | ƒ ‚ n  |  | } t | t j ƒ rK | S| d  k	 rj | d | ƒ ‚ n  | d  k	 rz | St j | g ƒ Sd  S(   Ns   %s is not a looped item(   R   R   R   t
   std_string(   R   R   t	   key_errort   value_errorR   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   get_looped_item¬   s    
c         C   sM   g  } x@ |  D]8 } | j  d ƒ d } | | k r8 q n  | j | ƒ q W| S(   Nt   .i    (   t   splitt   append(   R   t   doneR   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt	   loop_keysÀ   s     c         c   s)   x" |  j  ƒ  D] } |  j | ƒ Vq Wd  S(   N(   Rj   R   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt	   iterloopsÈ   s    c         C   sr   | |  k r+ | d  k r | S| | ƒ ‚ n  |  | } t | t j ƒ sK | S| d  k	 rj | d | ƒ ‚ n | Sd  S(   Ns   %s appears as a looped item(   R   R   R   Rb   (   R   R   Rc   Rd   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   get_single_itemÌ   s    
c         C   si   g  } x\ |  j  D]Q } | |  j k r5 | j | ƒ q | |  j k r | j |  j | j ƒ  ƒ q q W| S(   N(   RP   RN   Rh   RO   t   extendR   (   R   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   Þ   s    !c         C   s   t  t |  j ƒ  ƒ ƒ S(   N(   R!   R   R"   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR#   ç   s    c         K   s§   | d  k r d  St | t ƒ s. t | t ƒ rX xr | j ƒ  D] \ } } | |  | <q; WnK |  j j | j ƒ |  j j | j ƒ |  j | j O_ |  j	 j | j	 ƒ d  S(   N(
   R   R   R   R
   R"   RN   t   updateRO   RP   R   (   R   t   othert   kwargsR   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRn   ê   s    c         C   s   | |  | <d  S(   N(    (   R   t   tagR   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   add_data_itemö   s    c         C   s^   y |  j  | j ƒ  | ƒ Wn= t k
 rY |  j  d t t t | j ƒ  ƒ ƒ ƒ | ƒ n Xd  S(   NR   (   R=   R2   R   RU   t   hasht   tupleR   (   R   RS   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR[   ù   s    c         C   s,   |  j  j | j ƒ  ƒ } | d  k r( | S| S(   N(   RO   R   R   R   (   R   t	   loop_nameR   R_   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   get_loop   s    c         C   s‹   |  j  | ƒ } | d  k r3 t d | j ƒ  ƒ } n  | j ƒ  } xE | j ƒ  D]7 \ } } | | k rL | j | t j | | ƒ ƒ qL qL W| S(   NRQ   (	   Rv   R   RS   R   t   n_rowsR"   t
   add_columnR   Rb   (   R   Ru   t   default_dictR_   Rw   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   get_loop_with_defaults  s    #c         C   s[   |  j  ƒ  } |  j j ƒ  | _ |  j j ƒ  | _ t j |  j ƒ | _ |  j j ƒ  | _ | S(   N(   R:   RN   R$   RO   RP   R   (   R   t   new(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR%     s    c         C   sp   |  j  ƒ  } t j |  j | ƒ | _ t j |  j | ƒ | _ t j |  j | ƒ | _ t j |  j | ƒ | _ | S(   N(   R:   R$   R&   RN   RO   RP   R   (   R   R'   R{   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR(     s    c         C   s   t  j |  ƒ S(   N(   R$   R&   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR&   "  s    c         C   s#   t  ƒ  } |  j d | ƒ | j ƒ  S(   NR)   (   R   R1   R3   (   R   R4   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR5   %  s    	c         C   sš   x0 |  j  j ƒ  D] \ } } | j | | |  ƒ q Wx' |  j j ƒ  D] } | j | |  ƒ qC Wt |  t ƒ r– x' |  j j	 ƒ  D] } | j
 | ƒ q| Wn  d  S(   N(   RN   R"   t   validate_single_itemRO   RF   t   validate_loopR   R   t   savest
   itervaluesR<   (   R   R@   R   R   RS   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR<   *  s    c         C   s†   t  t |  j j ƒ  d | d | ƒt |  j j ƒ  d | d | ƒƒ |  _ | r‚ x0 |  j j ƒ  D] } | j d | d | ƒ q_ Wn  d  S(   NR   RC   (   R   RE   RN   R   RO   RP   RF   RG   (   R   RD   R   RC   t   l(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRG   3  s    (c         C   s‰   |  j  ƒ  } xv |  j |  j f D]b } xY | j ƒ  D]K \ } } | | k rs | | } | | k rf q2 q} | | | <q2 | | | <q2 Wq W| S(   N(   R:   RN   RO   R"   (   R   Ro   R{   R0   R   R   t   other_value(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt
   difference=  s    
 N(   RI   RJ   R   R   R   R    R   R   Re   Rj   Rk   t
   ValueErrorRl   R   R#   Rn   Rr   R[   Rv   Rz   R%   R$   R(   R&   R5   R<   RL   RG   R‚   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRM   c   s6   												
						
t   savec           B   s   e  Z d d  d d „ Z RS(   s     i"   c         C   sÄ   | d  k r0 t j } | j ƒ  d k s0 t ‚ n  d | d } x |  j D]t } |  j j | ƒ } | d  k	 r� | | | | It | ƒ IJqH | | I|  j	 | j
 d | d | | ƒ | JqH Wd  S(   Nt    s   %%-%isi   R)   R*   (   R   R.   R/   t   stripR   RP   RN   R   t   format_valueRO   R1   (   R   R)   R*   R,   t
   format_strR]   R^   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR1   L  s    	!
!N(   RI   RJ   R   R1   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR„   J  s   R   c           B   s}   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d d d d d d „ Z	 e
 d e
 d	 „ Z d
 „  Z d „  Z RS(   c         C   s   t  j |  ƒ i  |  _ d  S(   N(   RM   R   R~   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   ]  s    c         C   sY   t  | t ƒ rB | |  j | <| |  j | j ƒ  <|  j j | ƒ n t j |  | | ƒ d  S(   N(	   R   R„   R~   R   R   RP   R\   RM   R   (   R   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   a  s
    c         C   sI   |  j  j | j ƒ  | ƒ } | |  j k r5 |  j | St j |  | ƒ Sd  S(   N(   R   R   R   R~   RM   R   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   i  s    c         C   s[   |  j  j | j ƒ  | ƒ } | |  j k rG |  j | =|  j j | ƒ n t j |  | ƒ d  S(   N(   R   R   R   R~   RP   R`   RM   R    (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR    p  s
    
c         C   s)   t  j |  ƒ } | j |  j j ƒ  ƒ | S(   N(   RM   R   Rm   R~   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   x  s    c         K   s:   | d  k r d  St j |  | | � |  j j | j ƒ d  S(   N(   R   RM   Rn   R~   (   R   Ro   Rp   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRn   }  s    s     i"   c   	      C   sY  | j  ƒ  d k s t ‚ | d  k r0 t j } n  d | d } x|  j D]	} |  j j | ƒ } | d  k	 r‰ | | | It | ƒ IJqH | |  j	 k râ | J| d | IJ|  j	 | j
 d | d | d | ƒ | | d IJ| JqH | d  k	 r*| | k r*|  j | j
 d | d | d	 | d
 | | ƒ n# |  j | j
 d | d | d	 | ƒ | JqH Wd  S(   NR…   s   %%-%isi   s   save_%sR)   R*   R,   t   save_R+   t   fmt_str(   R†   R   R   R.   R/   RP   RN   R   R‡   R~   R1   RO   (	   R   R)   R*   R+   R,   R-   Rˆ   R]   R^   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR1   ƒ  s*    #c         C   sb   t  j |  d | d | d | ƒ| r^ x6 |  j j ƒ  D]" } | j d | d | d | ƒ q5 Wn  d  S(   NRD   R   RC   (   RM   RG   R~   RF   (   R   RD   R   RC   R4   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRG   ž  s    c         C   s.   t  j |  | ƒ } t j |  j | ƒ | _ | S(   N(   RM   R(   R$   R&   R~   (   R   R'   R{   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR(   ¤  s    c         C   s%   t  j |  ƒ } |  j j ƒ  | _ | S(   N(   RM   R$   R~   (   R   R{   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR%   ©  s    N(   RI   RJ   R   R   R   R    R   R   Rn   R1   RL   RG   R(   R%   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   [  s   							RS   c           B   sû   e  Z d d d  „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d d d d e d „ Z d „  Z d „  Z d e d „ Z d „  Z RS(   c         C   st  t  ƒ  |  _ i  |  _ | d  k	 rí x$ | D] } |  j | t j ƒ  ƒ q( W| d  k	 rpt | ƒ t | ƒ d k s| t d ƒ ‚ t | ƒ t | ƒ } t | ƒ } xI t	 | ƒ D]8 } |  j
 g  t	 | ƒ D] } | | | | ^ qÄ ƒ q« Wqpnƒ | d  k rp| d  k	 rpt | t ƒ s)t | t  ƒ s)t ‚ |  j | ƒ t g  |  j j ƒ  D] } | j ƒ  | f ^ qIƒ |  _ n  d  S(   Ni    s#   Wrong number of data items for loop(   R   t   _columnsR   R   R=   R   Rb   Ra   R   t   ranget   add_rowR   R
   t   add_columnsR   R   (   R   RQ   RR   R   Rw   t	   n_columnst   it   j(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   ¯  s     	(<$c         C   s3  t  j t | ƒ s% t d | ƒ ‚ n  t |  ƒ d k rX t | ƒ |  j ƒ  k sX t ‚ n  t | t j	 ƒ sú xf t j
 t j f D]R } t | | ƒ r¡ | j ƒ  } q} y | | ƒ j ƒ  } Wn t k
 rÍ q} q} XPq} Wt | t j	 ƒ sú t j	 | ƒ } qú n  t | d ƒ st ‚ | |  j | <| |  j | j ƒ  <d  S(   Ns   %s is not a valid data namei    R   (   R   R   R   R   Ra   t   sizeR   R   R   Rb   t   intt   doublet	   as_stringRZ   t   hasattrR‹   R   R   (   R   R   R   t   flex_numeric_type(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   Â  s$    !c         C   s   |  j  |  j | j ƒ  S(   N(   R‹   R   R   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   Ù  s    c         C   s+   |  j  |  j | j ƒ  =|  j | j ƒ  =d  S(   N(   R‹   R   R   (   R   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR    Ü  s    c         C   s   |  j  j ƒ  S(   N(   R‹   R   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR   à  s    c         C   s   t  t |  j ƒ  ƒ ƒ S(   N(   R!   R   R"   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR#   ã  s    c         C   s"   t  |  j ƒ  ƒ j d ƒ j d ƒ S(   NR   Rf   (   t   common_substringR   t   rstrip(   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR2   æ  s    c         C   s6   d } x) |  j  ƒ  D] } t | t | ƒ ƒ } q W| S(   Ni    (   RF   t   maxRa   (   R   R’   t   column(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR’   é  s    c         C   s6   d } x) |  j  ƒ  D] } t | t | ƒ ƒ } q W| S(   Ni    (   RF   Rš   Ra   (   R   R’   R›   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRw   ï  s    c         C   s   t  |  j ƒ  ƒ S(   N(   Ra   R   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR�   õ  s    t   ?c         C   s¸   t  | t ƒ r^ x¢ |  D]A } | | k rF |  | j t | | ƒ ƒ q |  | j | ƒ q WnV t | ƒ t |  ƒ k s| t ‚ x5 t |  ƒ D]' \ } } |  | j t | | ƒ ƒ q‰ Wd  S(   N(   R   R
   Rh   RU   Ra   R   t	   enumerate(   R   t   rowt   default_valueR   R�   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR�   ø  s    c         C   sT   |  j  ƒ  d k r3 t | ƒ |  j  ƒ  k s3 t ‚ n  | |  | <| |  j | j ƒ  <d  S(   Ni    (   R’   Ra   R   R   R   (   R   R   RF   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRx     s    !
c         C   sU   t  | t ƒ s$ t  | t ƒ s$ t ‚ x* | j ƒ  D] \ } } |  j | | ƒ q1 Wd  S(   N(   R   R
   R   R   R"   Rx   (   R   t   columnsR   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRŽ   
  s    $c         C   sT   |  j  ƒ  d k r3 t | ƒ |  j  ƒ  k s3 t ‚ n  | |  | <| |  j | j ƒ  <d  S(   Ni    (   R’   Ra   R   R   R   (   R   R   RF   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   update_column  s    !
c         C   s=   | |  j  ƒ  k  s t ‚ x |  j j ƒ  D] } | | =q( Wd  S(   N(   Rw   R   R‹   RF   (   R   t   indexR›   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt
   delete_row  s    c         C   s1   t  ƒ  } |  j j ƒ  | _ |  j j ƒ  | _ | S(   N(   RS   R‹   R$   R   (   R   R{   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR%     s    	c         C   s=   t  ƒ  } t j |  j | ƒ | _ t j |  j | ƒ | _ | S(   N(   RS   R$   R&   R‹   R   (   R   R'   R{   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR(   "  s    	c         C   s   t  j |  ƒ S(   N(   R$   R&   (   R   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR&   (  s    s     c      	   C   sÔ  |  j  ƒ  d k r$ |  j ƒ  d k sO t d |  j ƒ  |  j  ƒ  |  j ƒ  f ƒ ‚ | d  k rg t j } n  | d  k r| | } n  | j ƒ  d k s” t ‚ | j ƒ  d k s¬ t ‚ | d IJx" |  j ƒ  D] } | | | IJqÃ W|  j j	 ƒ  } | d  k	 rt
 j | ƒ } xu t | ƒ D]g \ } }	 xX t j t j f D]D }
 t |	 |
 ƒ s1y |
 |	 ƒ | | <Wn t k
 rpq1quXPq1q1WqW| d  k r¬| d j d g t | ƒ ƒ } n  x!t |  j ƒ  ƒ D]A } | | t g  t t | ƒ ƒ D] } | | | ^ qâƒ IJq¿WnÉ| rfg  } xÜ t |  j ƒ  ƒ D]È \ } \ } }	 x. t |	 j ƒ  ƒ D] } t |	 | ƒ |	 | <qKWt j d „  |	 Dƒ ƒ } | j ƒ  } |	 j |	 d k |	 d	 k Bƒ }	 y t j |	 ƒ Wn t k
 rÜ| d
 9} n X| j d | ƒ q&W| d j | ƒ } xÈ t |  j ƒ  ƒ D]G } | | t g  t t | ƒ ƒ D] } | | | ^ q;ƒ j ƒ  IJqWnj xg t |  j ƒ  ƒ D]S } g  t t | ƒ ƒ D] } t | | | ƒ ^ q’} | d j | g | ƒ IJqyWd  S(   Ni    s   keys: %s %d %dR…   R_   t    s   %sc         s   s!   |  ] } d  | k r | Vq d S(   s   
N(    (   t   .0t   item(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pys	   <genexpr>U  s    Rf   Rœ   iÿÿÿÿs   %%%iss     (   Rw   R�   R   R   R   R.   R/   R†   R‹   RF   R$   R&   R�   R   R“   R”   R   Rƒ   t   joinRa   RŒ   R’   Rt   R"   R‡   Rb   t   max_element_lengtht   selectRh   R™   (   R   R)   R*   R+   RŠ   t   align_columnsR]   RF   R�   R^   R—   R‘   t   i_vt   v_t   widtht   values_to_print(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR1   +  sb    *			
#B% ;3c         C   s#   t  ƒ  } |  j d | ƒ | j ƒ  S(   NR)   (   R   R1   R3   (   R   R4   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR5   i  s    	c         c   sn   |  j  ƒ  } x[ t |  j ƒ  ƒ D]G } t t | g  t t |  ƒ ƒ D] } |  j ƒ  | | ^ qA ƒ ƒ Vq Wd  S(   N(   R   RŒ   R’   R   t   zipRa   RF   (   R   R   R‘   R�   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   iterrowsn  s    c         C   s.   t  t |  j j ƒ  d | d | ƒƒ |  _ d  S(   NR   RC   (   R   RE   R‹   R0   (   R   R   RC   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRG   s  s    c         C   s¡   t  |  ƒ t  | ƒ k sH |  j ƒ  | j ƒ  k sH |  j ƒ  | j ƒ  k rL t SxN t |  j ƒ  | j ƒ  ƒ D]1 \ } } | | k j t ƒ t  | ƒ k rh t Sqh Wt S(   N(   Ra   R’   R   RL   R¯   RF   t   countRK   (   R   Ro   R   R�   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   __eq__w  s    (!N(   RI   RJ   R   R   R   R   R    R   R#   R2   R’   Rw   R�   R�   Rx   RŽ   R¡   R£   R%   R$   R(   R&   RK   R1   R5   R°   RL   RG   R²   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyRS   ®  s0   																>		c         C   sÑ   t  |  ƒ d k r |  d S|  d } x# |  D] } t | | ƒ j ƒ  } q+ W| j d ƒ pe | j d ƒ sÍ d | k rŠ | j d ƒ d } qÍ | |  k rÍ | j d ƒ d k rÍ d j | j d ƒ d  ƒ } qÍ n  | S(   Ni   i    R   Rf   iÿÿÿÿ(   Ra   t   LCSubstr_sett   popt   endswithRg   R±   R§   (   t   seqt   substrR4   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR˜   ‚  s     
!"c   
      C   s  t  |  ƒ } t  | ƒ } g  t | d ƒ D] } d g | d ^ q) } t ƒ  } d } x· t | ƒ D]© } x  t | ƒ D]’ } |  | | | k ru | | | d }	 |	 | | d | d <|	 | k rÕ |	 } t ƒ  } n  |	 | k r| j |  | |	 d | d !ƒ qqu qu Wqb W| S(   s�   Longest common substring function taken from:
  http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Pythoni   i    (   Ra   t   xranget   setR\   (
   t   St   Tt   mt   nR�   t   Lt   LCSt   longestR‘   R^   (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR³   “  s      .	.s#   !%&()*+,\-./0-9:<=>?@A-Z\\^`a-z{|}~s   %s\"#$'_;[\]s   %s\"#$'_ \t;[\]s   %s\"#$'_ \t[\]s   [%s]*s   _[%s]+s	   [%s][%s]*s   ('|\")[%s]*('|\")s   (\s*)(;).*?(;)(\s*)c         C   sj  t  } |  s d S|  d d k rA t j t |  ƒ } | d  k	 } n  | sft |  ƒ d k r] d Sd |  k r¥ |  j ƒ  d d k r¥ t j t |  ƒ d  k	 r¥ d |  j ƒ  Sd |  k ró |  d d k rÎ d |  }  n  |  d d k rë |  d }  n  d	 |  S|  d d k rd |  SxX t	 j
 D]J } | |  k rd | |  k rWd | |  k rOd |  Sd |  Sd |  SqWn  |  S(   Ns   ''i    t   't   "t   ;s   
%s
s   
iÿÿÿÿs   
;%s;
t   #t   $t   [t   ]R   s   '%s's   
;
%s
;
s   "%s"(   RÁ   RÂ   (   RÄ   RÅ   RÆ   RÇ   R   (   RL   R   R   RW   R   Ra   t   lstripRX   R†   t   stringt
   whitespace(   t   value_stringt   string_is_quotedR¼   t   ws(    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyR‡   µ  s8    "($   t
   __future__R    t   libtbx.containersR   R   t   libtbx.utilsR   R.   RÉ   R$   t	   cStringIOR   t   UserDictR   t   cctbx.array_familyR   R   RM   R„   R   RS   R˜   R³   R   t   _ordinary_char_sett   _non_blank_char_sett   _any_print_char_sett   _text_lead_char_sett   compileRV   R   t   unquoted_string_reRW   t   DOTALLRX   R‡   (    (    (    s=   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/model.pyt   <module>   s6   VçSÔ		


