ó
0™xTc           @   s…   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d „  Z d „  Z	 e
 d k r� d  d l Z e	 d	 e j d
 ƒ n  d S(   iÿÿÿÿ(   t   division(   t   r1(   t   flex(   t   approx_equalc            s  |  j  d | ƒ ‰ t j |  j  d ˆ j ƒ  ƒ |  j  d ˆ j ƒ  ƒ ƒ ‰  t j ˆ  ƒ ‰ t j d ˆ d ˆ  ƒ ‰ ‡ ‡ ‡ ‡ f d †  } ‡  ‡ ‡ ‡ f d †  } | ƒ  | ƒ  d ˆ  d <t j ˆ  ƒ ‰ t j d ˆ d ˆ  ƒ ‰ ˆ j ƒ  d d k sú t ‚ ˆ j	 ƒ  d d k st ‚ d  S(	   Nt   sizet   f_obst   f_calcc    	         s‘  d }  t  j ƒ  } t  j ƒ  } xÞ t ˆ  j ƒ  ƒ D]Ê } g  } g  } ˆ  | } x_ |  |  g D]P } | | ˆ  | <t j d ˆ d ˆ  ƒ } | j | j ƒ | j | j | ƒ q[ W| j | d | d d |  ƒ | j | d | d d |  ƒ | ˆ  | <q1 Wˆ d It	 | ƒ IJˆ d It	 ˆ j ƒ IJt
 ˆ j | ƒ sFt ‚ ˆ d	 It	 | ƒ IJˆ d It	 ˆ j ƒ IJt
 ˆ j | ƒ s�t ‚ d  S(
   Ng�íµ ÷Æ°>R   t
   f_calc_absi    i   i   s   g fin:s     ana:s   c fin:(   R   t   doublet   xrangeR   R   t   targett   appendt   tt   gt   numstrR   t   AssertionErrort   c(	   t   epst   g_fint   c_fint   iht   fst   gst   c_origt
   signed_epst   trg_eps(   R   R   t   logt   trg(    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_r1.pyt   check_f_calc_abs_derivs   s*    
!!c             sÓ  d }  t  j ƒ  } t  j ƒ  } x�t ˆ  j ƒ  ƒ D]‰} ˆ  | } g  } g  } xÿ d d g D]ñ } g  } g  }	 xš |  |  g D]‹ }
 | d k r¬ t | j |
 | j ƒ ˆ  | <n t | j | j |
 ƒ ˆ  | <t j	 d ˆ d ˆ  ƒ } | j
 | j ƒ |	 j
 | j | ƒ qz W| j
 | d | d d |  ƒ | j
 |	 d |	 d d |  ƒ qZ W| j
 t | Œ  ƒ t | d j | d j ƒ s…t ‚ | j
 | d j | d j | d j f ƒ | ˆ  | <q1 Wxl t | j ƒ  | j ƒ  ˆ j j ƒ  ƒ D]C \ } } } ˆ d | It | ƒ IJˆ d | It | ƒ IJqæWt ˆ j | ƒ sEt ‚ xo t d	 d
 d g | j ƒ  ˆ j j ƒ  ƒ D]C \ } } } ˆ d | It | ƒ IJˆ d | It | ƒ IJqpWt ˆ j | ƒ sÏt ‚ d  S(   Ng�íµ ÷Æ°>i    i   R   R   i   s	   g fin %s:s	     ana %s:t   aat   bbt   abs	   c fin %s:(   R   t   complex_doublet   vec3_doubleR	   R   t   complext   realt   imagR   R
   R   R   t   f_calc_gradientsR   R   t   zipt
   part_namest   partsR   t   f_calc_hessians(   R   R   R   R   R   t   g_fin_abt   c_fin_abt   iabR   R   R   R   t   pnt   ft   a(   R   R   R   R   (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_r1.pyt   check_f_calc_derivs#   sB    
 !%#+14y                i    (   i    i    i    (
   t   random_doubleR   R    R   t   absR   R
   t   gradients_workR   t   hessians_work(   t   mtt   n_reflR   R   R0   (    (   R   R   R   R   R   sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_r1.pyt   exercise   s    #
c   
      C   s  t  |  ƒ d k  s t ‚ g  |  D] } t | ƒ ^ q } | d d g t  | ƒ } | \ } } | d k so t ‚ | d k s� t ‚ t  |  ƒ d k r¯ d d l m } | ƒ  } n d d  l } | j } t j d d ƒ } x$ t	 | ƒ D] }	 t
 | | | ƒ qã Wd GHd  S(   Ni   i   i    iÿÿÿÿ(   t   null_outt   seedt   OK(   t   lenR   t   intt   libtbx.utilsR8   t   syst   stdoutR   t   mersenne_twisterR	   R7   (
   t   argst   argt   arg_valsR6   t   n_trialsR8   R   R>   R5   t   i_trial(    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_r1.pyt   runO   s    	t   __main__NRA   i   (   t
   __future__R    t   cctbx.xray.targetsR   t   scitbx.array_familyR   t   libtbx.test_utilsR   R7   RF   t   __name__R>   t   argv(    (    (    sG   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_r1.pyt   <module>   s   	I	