ó
BxTc           @   s˛   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m	 Z	 d   Z
 d e f d	     YZ d
 e e f d     YZ d e f d     YZ d S(   i˙˙˙˙(   t   division(   t   iteration_limit_exceeded(   t   reduction_base(   t   minimum_reduction_mixin(   t   uctbx(   t   matrixc         C   sJ   t  |   } |  | d k  r) | d 8} n  |  | d k  sF | d 7} n  | S(   s,   greatest integer which is not greater than xi    i   (   t   int(   t   xt   result(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   entier   s      t	   reductionc           B   sM   e  Z d d d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s-   t  j |  | | |  x |  j   r( q Wd  S(   N(   R   t   __init__t   step(   t   selft	   unit_cellt   relative_epsilont   iteration_limit(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR      s     c         C   s   d S(   Nt   Gruber(    (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   _name   s    c         C   s*  |  j  } |  j } | |  j |  j  s] | |  j |  j  rj | t |  j  t |  j   rj |  j   n  | |  j |  j  sľ | |  j |  j  rĂ | t |  j  t |  j	   rĂ |  j
   t S|  j   rÜ |  j   n
 |  j   |  j   rö t S|  j   rt S|  j   rt S|  j   r&t St S(   N(   t   eps_eqt   eps_gtt   at   bt   abst   dt   et	   n1_actiont   ct   ft	   n2_actiont   Truet   def_gt_0t   n3_true_actiont   n3_false_actiont	   b2_actiont	   b3_actiont	   b4_actiont	   b5_actiont   False(   t   st   eqt   gt(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR      s&    		KK

    c      
   C   sę   |  j  t |  j  |  j  s" t St |  j |  j d |  j  } | d k rS t S|  j d d d d d | d d d f	  |  j | | |  j | |  j 7_ |  j d | |  j 8_ |  j | |  j	 8_ |  j d k sć t
  t S(   Ni   i    i   (   R   R   R   R   R&   R	   t	   cb_updateR   R   R   t   AssertionErrorR   (   R'   t   j(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR"   -   s     ! )%c      
   C   sę   |  j  t |  j  |  j  s" t St |  j |  j d |  j  } | d k rS t S|  j d d | d d d d d d f	  |  j | | |  j | |  j 7_ |  j | |  j	 8_ |  j d | |  j 8_ |  j d k sć t
  t S(   Ni   i    i   (   R   R   R   R   R&   R	   R*   R   R   R   R+   R   (   R'   R,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR#   8   s     ! )%c      
   C   sę   |  j  t |  j  |  j  s" t St |  j |  j d |  j  } | d k rS t S|  j d | d d d d d d d f	  |  j | | |  j | |  j 7_ |  j | |  j	 8_ |  j d | |  j 8_ |  j d k sć t
  t S(   Ni   i    i   (   R   R   R   R   R&   R	   R*   R   R   R   R+   R   (   R'   R,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR$   C   s     ! )%c      
   C   s  |  j  |  j } |  j |  j |  j } |  j | | d  sA t St | | d |  } | d k ri t S|  j d d | d d | d d d f	  |  j	 | | | | | 7_	 |  j  | d |  j |  j 8_  |  j | d |  j |  j 8_ |  j	 d k s	t
  t S(   Ni    i   i   (   R   R   R   R   R   t   eps_ltR&   R	   R*   R   R+   R   (   R'   t   det   fabR,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR%   N   s      *!!N(
   t   __name__t
   __module__t   NoneR   R   R   R"   R#   R$   R%   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR
      s   					t   minimum_reductionc           B   s#   e  Z d  Z d d  Z d   Z RS(   st   Development and regression test code. Do not use for applications.
     Use uctbx.fast_minimum_reduction instead.
  c         C   s   t  j |  | |  d  S(   N(   R   R   (   R   R   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR   `   s    c         C   s&   t  j |   |  j   s" t  n  d  S(   N(   R
   R!   t   significant_change_testt   StopIteration(   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR!   c   s    N(   R0   R1   t   __doc__R2   R   R!   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR3   [   s   t   fast_minimum_reductionc           B   sÝ   e  Z d  Z d d d d  Z d   Z d   Z d   Z d   Z d   Z	 d	   Z
 d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   st   Development and regression test code. Do not use for applications.
     Use uctbx.fast_minimum_reduction instead.
  i   i   c      
   C   sň   | d  k r d |  _ n	 | |  _ | |  _ | |  _ | j   } | d |  _ | d |  _ | d |  _ d | d |  _ d | d |  _	 d | d |  _
 t j d  |  _ d |  _ d |  _ |  j |  j |  j f |  _ x |  j   rí qŢ Wd  S(	   Nid   i    i   i   i   i   i   (	   i   i    i    i    i   i    i    i    i   (   R2   t   _iteration_limitt"   multiplier_significant_change_testt   min_n_no_significant_changet   metrical_matrixR   R   R   R   R   R   R   t   sqrt   _r_invt   _n_iterationst   _n_no_significant_changet!   _last_abc_significant_change_testR   (   R   R   R   R9   R:   t   sym_mat3(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR   m   s$    					 c         C   s(   |  j  |  j |  j |  j |  j |  j f S(   N(   R   R   R   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   as_gruber_matrix   s    c         C   s4   |  j  |  j |  j |  j d |  j d |  j d f S(   Ni   (   R   R   R   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   as_niggli_matrix   s    c         C   s4   |  j  |  j |  j |  j d |  j d |  j d f S(   Ni   (   R   R   R   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   as_sym_mat3   s    c         C   s   t  j d |  j    S(   NR;   (   R   R   RD   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   as_unit_cell   s    c         C   s   |  j  S(   N(   R8   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR      s    c         C   s   |  j  S(   N(   R=   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   r_inv   s    c         C   s   |  j  S(   N(   R>   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   n_iterations   s    c         C   sž   d } d } d |  j  k  r( | d 7} n |  j  d k  sD | d 7} n  d |  j k  r` | d 7} n |  j d k  s| | d 7} n  d |  j k  r | d 7} n |  j d k  s´ | d 7} n  | | f S(   Ni    i   (   R   R   R   (   R'   t   n_zerot
   n_positive(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   def_test   s          c         C   s4   |  j    \ } } | d k p3 | d k o3 | d k S(   Ni   i    i   (   RJ   (   R   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR   Ł   s    c         C   s6   |  j    \ } } | d k r" d S| d k r2 d Sd S(   Ni   i   i    i   (   RJ   (   R   RH   RI   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   type§   s      c         C   sś   |  j  |  j k  r |  j   n  |  j |  j  k  r? |  j   t S|  j   rX |  j   n |  j   |  j	   sr t
 S|  j   r t S|  j   r t S|  j   r˘ t S|  j   r˛ t St
 S(   N(   R   R   R   R   R   R   R   R    R!   R4   R&   R"   R#   R$   R%   (   R'   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR   ­   s&    

    c         C   s°   |  j  |  j |  j f } |  j } t g  t | |  j  D]& \ } } | | | | | | ^ q7  } | d k r |  j d 7_ |  j |  j k rŁ t	 Sn	 d |  _ | |  _ t
 S(   Ni    i   (   i    i    i    (   R   R   R   R9   t   tuplet   zipR@   R?   R:   R&   R   (   R   t   abct   mt   newt   lastt   change(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR4   Â   s    	?		c         C   sS   |  j  |  j k r( t d |  j   n  |  j t j |  9_ |  j  d 7_  d  S(   Ns+   Gruber iteration limit exceeded (limit=%d).i   (   R>   R8   R   R=   R   R<   (   R   t   m_elems(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR*   Đ   s    c      
   C   sC   |  j  d  |  j |  j |  _ |  _ |  j |  j |  _ |  _ d  S(   Ni    i˙˙˙˙(	   i    i˙˙˙˙i    i˙˙˙˙i    i    i    i    i˙˙˙˙(   R*   R   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR   Ř   s    c      
   C   sC   |  j  d  |  j |  j |  _ |  _ |  j |  j |  _ |  _ d  S(   Ni˙˙˙˙i    (	   i˙˙˙˙i    i    i    i    i˙˙˙˙i    i˙˙˙˙i    (   R*   R   R   R   R   (   R   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR   Ý   s    c      
   C   sš   d \ } } } |  j  d k  r' d } n  |  j d k  r? d } n  |  j d k  rW d } n  |  j | d d d | d d d | f	  t |  j   |  _  t |  j  |  _ t |  j  |  _ d  S(   Ni   i    i˙˙˙˙(   i   i   i   (   R   R   R   R*   R   (   R'   t   iR,   t   k(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR    â   s     	 	 	(c         C   sa  d d d g } d } d |  j  k  r1 d | d <n |  j  d k  sI d } n  d |  j k  re d | d <n |  j d k  s} d } n  d |  j k  r d | d <n |  j d k  są d } n  | d | d | d d k  rđ | d k să t  d | | <n  |  j | d d d d | d d d d | d f	  t |  j   |  _  t |  j  |  _ t |  j  |  _ d  S(   Ni   i˙˙˙˙i    i   (   R   R   R   R+   R*   R   (   R'   R   t   z(    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR!   ě   s*      	  	  	 4c      
   C   sä   |  j  t |  j  k  s t St |  j |  j  d |  j   } | d k rM t S|  j d d d d d | d d d f	  |  j | | |  j  | |  j 7_ |  j d | |  j  8_ |  j | |  j 8_ d |  j k  sŕ t	  t
 S(   Ni   i    i   (   R   R   R   R&   R	   R*   R   R   R   R+   R   (   R'   R,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR"   ý   s     ! )%c      
   C   sä   |  j  t |  j  k  s t St |  j |  j  d |  j   } | d k rM t S|  j d d | d d d d d d f	  |  j | | |  j  | |  j 7_ |  j | |  j 8_ |  j d | |  j  8_ d |  j k  sŕ t	  t
 S(   Ni   i    i   (   R   R   R   R&   R	   R*   R   R   R   R+   R   (   R'   R,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR#     s     ! )%c      
   C   sä   |  j  t |  j  k  s t St |  j |  j  d |  j   } | d k rM t S|  j d | d d d d d d d f	  |  j | | |  j  | |  j 7_ |  j | |  j 8_ |  j d | |  j  8_ d |  j k  sŕ t	  t
 S(   Ni   i    i   (   R   R   R   R&   R	   R*   R   R   R   R+   R   (   R'   R,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR$     s     ! )%c      
   C   s  |  j  |  j } |  j |  j |  j } | | d k  s; t St | | d |  } | d k rc t S|  j d d | d d | d d d f	  |  j | | | | | 7_ |  j  | d |  j |  j 8_  |  j | d |  j |  j 8_ d |  j k  st	  t
 S(   Ni    i   i   (   R   R   R   R   R   R&   R	   R*   R   R+   R   (   R'   R.   R/   R,   (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR%     s      *!!N(   R0   R1   R6   R2   R   RB   RC   RD   RE   R   RF   RG   RJ   R   RK   R   R4   R*   R   R   R    R!   R"   R#   R$   R%   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyR7   h   s2   																
				N(   t
   __future__R    t   cctbx.uctbx.reduction_baseR   R   R   t   cctbxR   t   scitbxR   R	   R
   R3   t   objectR7   (    (    (    sE   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/uctbx/gruber_1973.pyt   <module>   s   	L