ó
]xTc           @   s  d  d l  m Z d  d l Z d  d l m Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 e j d  e j d  d   Z d   Z d d	  Z d
   Z d   Z d   Z d   Z d   Z d   Z e d k rý d  d l Z e d e j d  n  d S(   i˙˙˙˙(   t   divisionN(   t   flex(   t   approx_equali    c         C   s$   |  | d | | d | | | S(   Ni   i   (    (   t   at   bt   ct   dt   x(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt   residual
   s    c         C   s]   |  \ } } } d } | | | } | | | | | | } | | | } | | | | f S(   Ni   (    (   R   t   x1t   x2t   x3R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt   abcd   s    gíľ ÷Ć°>c         C   s  t  |   } | j   xG | D]? }  t t d | d | d | d | d |   d |  s t  q Wt j j d | d | d | d |  } t  | j  }	 |	 j   x, | j   D] }
 t |
 d |  s­ t  q­ W| rx7 t	 d  D]& } t | | |	 | |  sâ t  qâ Wn  d  S(   NR   R   R   R   R   g        i   (
   t   listt   sortR   R   t   AssertionErrort   scitbxt   matht   cubic_equation_realR   t   xrange(   R   R   R   R   R   t   check_rootst   epst   answert   rt   solutiont   rit   i(    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt   sol   s    
='
c         C   s÷  d } xęt  |   D]Ü} xÓd d d g D]Â} t j | |  | } t j | |  | } t j | |  | } t j | | | g  } t j t j    | } t d |  \ }	 }
 } } t d | d |	 d |
 d | d	 | d
 t  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  t d | d | d | d f d |	 d |
 d | d	 | d
 t	  q) Wq Wd  S(   Nič  gHŻźň×z>g-Cëâ6?g      đ?R   R   R   R   R   R   i    i   i   (
   R   t   randomt   randintR   t   doublet   random_double_point_on_sphereR   R   t   Truet   False(   t   n_trialst   vR   t   scalet   ri1t   ri2t   ri3R   R   R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt	   exercise1#   s$    +@@@@@@@c          C   sÁ   d \ }  } } } t  j j d |  d | d | d |  } t | j d	 d
  sU t  | j d d  k sn t  | j d d  k s t  t t d |  d | d | d | d d
  d	  s˝ t  d  S(   Ni   iö˙˙˙i   i   R   R   R   R   i    i˙˙˙˙i   i   R   (   i   iö˙˙˙i   i   (   R   R   R   R   R   R   t   NoneR   (   R   R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt	   exercise2:   s    'c          C   sÇ   d \ }  } } } t  j j d |  d | d | d |  } t | j d	 d
  sU t  t | j d d
  sq t  t | j d d
  s t  t t d |  d | d | d | d d
  d	  sĂ t  d  S(   Ni   i÷˙˙˙i   iĺ˙˙˙R   R   R   R   i    i   i   R   (   i   i÷˙˙˙i   iĺ˙˙˙(   R   R   R   R   R   R   R   (   R   R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt	   exercise3B   s    'c          C   sý   d \ }  } } } t  j j d |  d | d | d |  } t | j d	 d
  sU t  t | j d d  sq t  t | j d d  s t  t t d |  d | d | d | d d  d	  sĂ t  t t d |  d | d | d | d d
  d	  sů t  d  S(   Ni   iő˙˙˙i'   iÓ˙˙˙R   R   R   R   i    i   i   i   R   (   i   iő˙˙˙i'   iÓ˙˙˙(   R   R   R   R   R   R   R   (   R   R   R   R   R   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt	   exercise4J   s    '6c            sŽ       f d   } x> t  j d g d d g d d t D] \     |   q< WxQ t |   D]C } t j d d    t j d d   t j d d   |   qc Wd  S(   Nc    
         sj  t  d     g  \ }  } } }     g } | j   t j |  } t j j d |  d | d | d |  } x) | j   D] } t | d  s t	  q Wt
 | j  } | j   t j |  } t j | |  } t | d d d g  sř t	  xk     | j d | j d | j d	 g D]< }	 t t d |  d | d | d | d |	  d  s&t	  q&Wd  S(
   NR   R   R   R   R   g        i    i   i   (   R   R   R   R   R   R   R   R   R   R   R   R   t   abs(
   R   R   R   R   R   R   R   R   t   diffR   (   R	   R
   R   (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt   checkT   s    $
'
4iţ˙˙˙i   i   t
   open_rangeiö˙˙˙i
   (   R   t   nested_loopR!   R   R   R   (   R"   R/   R   (    (   R	   R
   R   sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt	   exercise5S   s    6c         C   s   t  |   d k s t  d } t j   } x= t d  D]/ } t |  t   t   t   t |  q7 Wd d l	 m
 } |   GHd  S(   Ni    id   i   i˙˙˙˙(   t   format_cpu_times(   t   lenR   t   timeR   R(   R*   R+   R,   R2   t   libtbx.utilsR3   (   t   argsR"   t   t0R   R3   (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt   runk   s    
t   __main__R7   i   (   t
   __future__R    t   scitbx.mathR   t   scitbx.array_familyR   R   R5   R   t   libtbx.test_utilsR   t   seedt   set_random_seedR   R   R   R(   R*   R+   R,   R2   R9   t   __name__t   syst   argv(    (    (    sR   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_cubic_equation.pyt   <module>   s$   $									