ó
9™xTc           @   sá   d  d l  m Z d  d l m Z m Z m Z m Z d  d l m Z d  d l	 m
 Z
 d  d l Z d  d l Z d  d l m Z d  d l Z e j d ƒ d d	 „ Z d d
 „ Z d „  Z d „  Z e d k rÝ e e j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t
   parameterst	   gradientst   pack_gradientst   structure_factor(   t   least_squares(   t   approx_equalN(   t   StringIOi    g:Œ0âŽyE>c      
   C   sB  g  } t  j | ƒ } x&t t | ƒ ƒ D]} g  } x× t d ƒ D]É }	 g  }
 x™ | | g D]Š } | | j ƒ  } | |	 c | 7<t | d  | d Œ | | <t d | d | d | ƒ } t d |  d | j ƒ  ƒ } |
 j	 | j ƒ  ƒ q[ W| j	 |
 d |
 d	 d
 | ƒ qA W| j	 t
 | d  | d Œ ƒ | | | | <q( W| S(   Ni   i   t   hklt	   d_star_sqt   paramst   obst   calci    i   i   (   t   copyt   deepcopyt   xranget   lent   as_listR   R   R   t   ft   appendR   (   R   R   R	   R
   t   epst   resultt
   params_epst   i_paramt   dxt   ixt   tst
   signed_epst   pi_epst   sft   target(    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives.pyt   d_target_d_params_finite   s"    %c      
   C   sR  g  } t  j | ƒ } x6t t | ƒ ƒ D]"} xt d ƒ D]ý } g  }	 x« | | g D]œ }
 | | j ƒ  } | | c |
 7<t | d  | d Œ | | <t d | d | d | ƒ } t d |  d | j ƒ  ƒ } | j	 d | ƒ } |	 j
 t | ƒ ƒ qU W| j
 g  t |	 d	 |	 d
 ƒ D] \ } } | | d | ^ qƒ q; W| | | | <q( W| S(   Ni   i   R   R	   R
   R   R   R   i    i   i   (   R   R   R   R   R   R   R   R   R   t   d_target_d_paramsR   R   t   zip(   R   R   R	   R
   R   R   R   R   R   t   gsR   R   R   R   t   dpt   gpt   gm(    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives.pyt   d2_target_d_params_finite    s     Gc      	   C   s)  t  d |  d | d | d | ƒ } | d It | ƒ IJt d | d | d | ƒ } t d |  d | j ƒ  ƒ } | j d | ƒ } | d It | ƒ IJt t | ƒ t | ƒ ƒ s¶ t ‚ t d |  d | d | d | ƒ }	 | d	 I|	 IJ| j	 d | ƒ }
 | d
 I|
 IJt |
 |	 d ƒ s!t ‚ | Jd  S(   NR   R   R	   R
   s
   grads_fin:R   R   s
   grads_ana:s
   curvs_fin:s
   curvs_ana:gñhãˆµøä>(
   R   R   R   R   R   R    R   t   AssertionErrorR&   t   d2_target_d_params(   R   R   R	   R
   t   outt	   grads_finR   R   t	   grads_anat	   curvs_fint	   curvs_ana(    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives.pyt   compare_analytical_and_finite2   s    !c         C   sˆ  d |  k } | s t  ƒ  } n	 t j } d } d } xIt d d ƒ D]8} x/t d ƒ D]!} g  } x� t | ƒ D] } | j t d g  t d ƒ D] } t j ƒ  ^ qŽ d t j ƒ  d	 d
 t j ƒ  d t j ƒ  d d d t j ƒ  d d ƒ ƒ qo Wt d | d | d | ƒ }	 t |	 j	 ƒ  ƒ }
 t
 d |
 d | d | d | d | ƒ t
 d |
 t j ƒ  d d | d | d | d | ƒ qV WqC Wd GHd  S(   Ns	   --verbosei   i   i   gü©ñÒMbP?i   t   xyzt   ugš™™™™™¹?t   wt   fpg      à?t   fdpR   R	   R
   R   R)   t   OK(   i   i   i   (   R   t   syst   stdoutR   R   R   t   randomR   t   absR   R.   (   t   argst   verboseR)   R   R	   t   n_paramst   i_trialR
   t   iR   R   (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives.pyt   exerciseC   s>    	%t   __main__i   (   t
   __future__R    t+   cctbx.examples.structure_factor_derivativesR   R   R   R   t&   cctbx.examples.exp_i_alpha_derivativesR   t   libtbx.test_utilsR   R7   R   t	   cStringIOR   R5   t   seedR   R&   R.   R>   t   __name__t   argv(    (    (    s]   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/tst_structure_factor_derivatives.pyt   <module>   s   "		"