ó
xTc           @   s   d  d l  m Z d   Z d   Z d   Z d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% f Z d   Z d d	  Z d
 S(&   i˙˙˙˙(   t   divisionc            sý  t    d k s t  g     f d   } d  g d   g  g  g  g } xŤ t |  j  D] \ } } t  | j  d k rĹ | j } | d k  s | d k rŤ | d ;} n  d t |    | <q\ n  t  | j  d k rŢ d  S| | j d j |  q\ W f d   }	   f d	   }
 xśt	 d  D]¨} | | } t  |  d k re| d } |
 | | |  q%t  |  d
 k r| \ } } g  | D] } |  j | ^ q\ } } | j
   sťt  | j d | j } } | d k r$t |  d k rd } t |  } n t d |  } d } d } n$ t | |  } t |  } d } |	 | | g  | | | } | |  } |
 | | |  |
 | | | |  q%t  |  d k r%| d d d
 g k sČt  |  j \ } } } | j
   | j d | j } } | j d | j } } | d k rĹ| d k r| d k r| | | | k rNd  St | |  } t |  } t |  } d \ } } qbt | |  } t |  } t |  | } d \ } } n | d k rt | |  } t |  | } t |  } d \ } } nT d t t d t |  t |    } t |  | } t |  | } d \ } } |	 | | | g  | d | } | |  } |
 d | |  |
 d | | |  |
 d
 | | |  q%q%W  j d   d k sět   j     S(   Ni    c            s%    j  |   d t    t   S(   Ni
   (   t   appendt   len(   t   fv(   t   fvarst	   new_fvars(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt   add_fvar   s    i   iü˙˙˙i   i   i
   c            s?   x8 |  D]0 }   t  |  k o. d   k n r d  Sq Wd  S(   Ni   (   t   abst   None(   t   arrayt   p(   t   p_tolerance(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt   check_p   s    &c            s$     |  d  k s t  |   |  <d  S(   N(   R   t   AssertionError(   t   i_termt   value(   t   coded_variables(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt   set_cv   s    i   i˙˙˙˙(   i˙˙˙˙i˙˙˙˙(   i˙˙˙˙i   (   i   i˙˙˙˙(   i   i   (   R   R   R   t	   enumeratet   termst   i_varst   constantt   floatR   t   xranget   is_identityt   multipliersR   t   maxt   countt   extend(   t   OR   t   siteR   R   t   i_var_i_termsR   t   termt   cR   R   t   i_vart   i_termst   i0t   i1t   _t   t0t   t1t   m1t   c1t   p0t   p1t   s1R   t   m10t   t2t   m2t   c2t   p2t   s2(    (   R   R   R   R   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt&   site_constraints_special_op_simplified   s    	 

&	
(c         C   s0   d d l  m } | d t |   d d   d  S(   Ni˙˙˙˙(   t   errorsU   The special position constraints %s cannot be encoded using the SHELX FVAR mechanism.t   line(   t   iotbx.shelx.errorsR5   t   strR   (   t   sosR5   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt4   raise_special_position_constraints_cannot_be_encoded\   s    c         C   sG   |  j    } | j d | d | d |  } | d  k rC t |  n  | S(   NR   R   R   (   t   special_op_simplifiedt   shelx_fvar_encodingR   R:   (   R   R   R   R   R9   t   result(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt"   site_constraints_site_symmetry_opsb   s    	i    i   c      	   C   s  d d l  m } d d l m } |  } | j   j   } | j   } x| j   D]ő } | | j } | j	 |  } | j
   }	 }
 d  g } |	 j d | d |  } | d  k rQ | j |  j   } x~ t D]i } | | j |  } | j |  } | j
   }	 |	 j d | d |  } | d  k	 rĚ | | | _ PqĚ qĚ Wt |
  qQ qQ W| j d | d | d | j   d	 | j    } | j   j | j    st  | S(
   Ni˙˙˙˙(   t   xray(   t   matrixR   R   t   special_position_settingst
   scattererst6   non_unit_occupancy_implies_min_distance_sym_equiv_zerot   scattering_type_registry(   t   cctbxR?   t   scitbxR@   RB   t	   deep_copyt   site_symmetry_tablet   special_position_indicesR   t   getR;   R   R<   t   colt   each_mod_shortt   unit_shifts_prioritizedt   site_symmetryR:   t	   structureRC   RD   t   all_eqR   (   t   xray_structureR?   R@   t   xst   scst   sstabt   i_scR   t   ssR9   t   sos_origR   R   t   site_0t   uR=   (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt/   move_sites_if_necessary_for_shelx_fvar_encoding   s:    		!gť˝×Ůß|Ű=c         C   sí   d d l  m } d g } g  } |  j   } |  j   } xŠ |  j   D] } | | j } | j |  }	 |	 j d | d |  }
 | d  k	 rŇ | d | d |
  \ } } |  j	   j
 | |  } | | k  sŇ t  n  | j |
  qD W| | f S(   Ni˙˙˙˙(   t   decode_variablesi   R   R   t   free_variableR   (   t   iotbx.shelx.parsersR[   RB   RH   RI   R   RJ   R<   R   t	   unit_cellt   distanceR   R   (   RQ   t   validation_toleranceR[   R   t   encoded_sitesRS   RT   RU   R   RV   R   t   valuest	   behaviorst   mismatch(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt   dev_build_shelx76_fvars¨   s     	N(   i    i    i    (   i    i    i   (   i    i   i    (   i   i    i    (   i    i    i˙˙˙˙(   i    i˙˙˙˙i    (   i˙˙˙˙i    i    (   i   i   i    (   i    i   i   (   i   i    i   (   i   i˙˙˙˙i    (   i    i   i˙˙˙˙(   i   i    i˙˙˙˙(   i˙˙˙˙i   i    (   i    i˙˙˙˙i   (   i˙˙˙˙i    i   (   i˙˙˙˙i˙˙˙˙i    (   i    i˙˙˙˙i˙˙˙˙(   i˙˙˙˙i    i˙˙˙˙(   i   i   i   (   i   i   i˙˙˙˙(   i   i˙˙˙˙i   (   i˙˙˙˙i   i   (   i   i˙˙˙˙i˙˙˙˙(   i˙˙˙˙i˙˙˙˙i   (   i˙˙˙˙i   i˙˙˙˙(   i˙˙˙˙i˙˙˙˙i˙˙˙˙(   t
   __future__R    R4   R:   R>   RM   RZ   Re   (    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/shelx/fvar_encoding.pyt   <module>   s@   	Z					!