ó
/™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  d l Z d e f d	 „  ƒ  YZ d
 d d „ Z d „  Z d „  Z d „  Z e d k rÏ e d e j d ƒ n  d S(   iÿÿÿÿ(   t   division(   t   ext(   t   flex(   t   approx_equal(   t   iceil(   t   countNt   random_inputsc           B   s5   e  Z d  „  Z d d „ Z d d „ Z d d „ Z RS(   c         C   sÐ   | |  _  | |  _ | j d | ƒ |  _ | j d | ƒ |  _ t j t d t | d ƒ ƒ t	 ƒ } | j
 | t ƒ | j | j d | ƒ ƒ |  _ d | j ƒ  |  _ | j d | ƒ |  _ | j d | ƒ |  _ d  S(   Nt   sizei   g333333ã?(   t   target_typet   obs_typet   random_doublet   obst   weightsR   t   boolt   maxR   t   Falset   resizet   Truet   selectt   random_permutationt   r_free_flagst   scale_factort   at   b(   t   Ot   mtt   n_reflR   R	   t   rff(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   __init__   s    		%i    c         C   sÕ   |  j  d k rj t j d t d |  j d |  j d |  j d |  j d t j	 |  j
 |  j ƒ d | d	 |  j ƒ S|  j  d
 k rÅ t j d |  j d |  j d |  j d |  j d t j	 |  j
 |  j ƒ d | ƒ St d ƒ ‚ d  S(   Nt   lst   compute_scale_using_all_dataR	   R   R   R   t   f_calct   derivatives_depthR   t   ccs   Unknown target_type.(   R   R   t   targets_least_squaresR   R	   R   R   R   R   t   complex_doubleR   R   R   t   targets_correlationt   RuntimeError(   R   R    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   get   s&    					
					g�íµ ÷Æ°>c            s—   t  j ƒ  } x„ t t ƒ  ˆ  j ˆ  j ˆ  j ƒ D]a \ ‰ } } } | rL q. n  ‡  ‡ ‡ f d †  } | j t | | ˆ  j ƒ | | ˆ  j ƒ ƒ ƒ q. W| S(   Nc            sm   g  } xB ˆ ˆ g D]3 } |  | | ˆ <| j  ˆ  j d d ƒ j ƒ  ƒ q W|  | ˆ <| d | d d ˆ S(   NR    i    i   i   (   t   appendR&   t   target_work(   t   xt   Oxt   fst
   signed_eps(   R   t   epst   ih(    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   fd0   s    #
(	   R   R#   t   zipR   R   R   R   R'   t   complex(   R   R-   t   resultR   R   t   fR/   (    (   R   R-   R.   sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   gradients_work_fd,   s    4 2c   
         së   t  j ƒ  ‰ xØ t t ƒ  ˆ  j ˆ  j ˆ  j ƒ D]µ \ ‰ } } } | rL q. n  ‡  ‡ ‡ ‡ f d †  } | | ˆ  j d ƒ } | | ˆ  j d ƒ } | | ˆ  j d ƒ } | | ˆ  j d ƒ }	 t | |	 ƒ sÍ t ‚ ˆ j	 | | | f ƒ q. Wˆ S(   Nc            s†   g  } x[ ˆ ˆ g D]L } |  | | ˆ <ˆ  j  d d ƒ j ƒ  } | j t | t ˆ ƒ | ƒ ƒ q W|  | ˆ <| d | d d ˆ S(   NR    i   i    i   (   R&   t   gradients_workR'   t   getattrt   len(   R)   R*   t   riR+   R,   t   ga(   R   R-   R.   R2   (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyR/   >   s    $
t   realt   imag(
   R   t   vec3_doubleR0   R   R   R   R   R   t   AssertionErrorR'   (
   R   R-   R   R   R3   R/   t   daat   dbbt   dabt   dba(    (   R   R-   R.   R2   sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   hessians_work_fd:   s    4 (   t   __name__t
   __module__R   R&   R4   RB   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyR   	   s   	i
   i   c         C   sè   t  j d d ƒ } xÏ d d g D]Á } x¸ t |  ƒ D]ª } x¡ d d g D]“ } t d | d | d	 | d
 | ƒ } | j d d ƒ } | j ƒ  } | j ƒ  }	 t | |	 ƒ s« t ‚ | j	 ƒ  }
 | j
 ƒ  } t |
 | ƒ sE t ‚ qE Wq2 Wq Wd  S(   Nt   seedi    R   R!   t   Ft   IR   R   R   R	   R    i   (   R   t   mersenne_twistert   xrangeR   R&   R5   R4   R   R=   t   hessians_workRB   (   t   n_trialsR   R   R   t   i_trialR	   R8   t   tgR9   t   gft   cat   cf(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   exercise_randomN   s    c    
      C   sè  t  j d g ƒ }  t  j d g ƒ } t  j d g ƒ } t  j t g ƒ } t  j d g ƒ } t  j d g ƒ } xud d g D]g} x^| d f | d f g D]D\ } } t j d t d | d	 |  d
 | d | d t  j | | ƒ d d d | ƒ }	 | | k rXt |	 j ƒ  | ƒ st	 ‚ t
 |	 j ƒ  ƒ d g k s4t	 ‚ t
 |	 j ƒ  ƒ d g k sÜt	 ‚ q˜ |	 j ƒ  d  k spt	 ‚ |	 j ƒ  d  k sˆt	 ‚ |	 j ƒ  d  k s t	 ‚ |	 j ƒ  j ƒ  d k s¾t	 ‚ |	 j ƒ  j ƒ  d k s˜ t	 ‚ q˜ Wqy Wd  S(   NgX9´Èv¾ó?gÃõ(\�Â@i    RF   RG   gÙÎ÷Sã¥@R   R	   R   R   R   R   R    i   R   y                i   (   i   i   i   (   R   t   doubleR   R   R   R"   R#   R   R   R=   t   listR5   RJ   t   NoneR(   t   target_testR   (
   R   t   weights_2345t   weights_zeroR   R   R   R	   R   R   RM   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   exercise_singular_least_squares]   s8    			!$c             së   ‡  ‡ ‡ ‡ f d †  }  t  j d g ƒ ‰ d  ‰ t  j d g ƒ ‰  t  j d g ƒ ‰ |  ƒ  t  j d d g ƒ ‰ t  j d d g ƒ ‰  t  j d d g ƒ ‰ |  ƒ  t  j d d g ƒ ‰ t  j d d g ƒ ‰  t  j d d g ƒ ‰ |  ƒ  d  S(	   Nc             sÛ   xÔ d d g D]Æ }  t  j d |  d ˆ d ˆ d d  d t j ˆ  ˆ ƒ d d	 ƒ } | j ƒ  d  k sg t ‚ | j ƒ  d  k s t ‚ | j ƒ  d  k s— t ‚ | j	 ƒ  j
 ƒ  d
 k sµ t ‚ | j ƒ  j
 ƒ  d
 k s t ‚ q Wd  S(   NRF   RG   R	   R   R   R   R   R    i   i    (   R   R$   RT   R   R#   R!   R=   R(   RU   R5   R   RJ   (   R	   RM   (   R   R   R   R   (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   check}   s    		gX9´Èv¾ó?i    gÃõ(\�Â@i   i   i   i   (   R   RR   RT   (   RY   (    (   R   R   R   R   sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   exercise_singular_correlation|   s    c         C   s6   t  |  ƒ d k s t ‚ t ƒ  t ƒ  t ƒ  d GHd  S(   Ni    t   OK(   R7   R=   RQ   RX   RZ   (   t   args(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   run™   s
    t   __main__R\   i   (   t
   __future__R    t
   cctbx.xrayR   t   cctbx.array_familyR   t   libtbx.test_utilsR   t   libtbx.math_utilsR   t	   itertoolsR   t   syst   objectR   RQ   RX   RZ   R]   RC   t   argv(    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/boost_python/tst_targets_fd.pyt   <module>   s   E			