ó
0™xTc           @   s®   d  d l  m Z d  d l Z d  d l m Z d  d l m Z 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_equalc         C   sU   t  j | ƒ } t  j |  | ƒ } t  j | | ƒ } | d k sG t ‚ | | } | S(   Ni    (   R   t   sqrtt   sumt   AssertionError(   t   f_obst   i_calct   fct   numt   dent   k(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   calc_k   s    
c         C   sË   | j  ƒ  | j  ƒ  k s t ‚ | j  ƒ  | j  ƒ  k s< t ‚ | | d } | | d } | j | d k  d ƒ | d | d } t j | ƒ t j |  | ƒ | | }	 |	 j d ƒ s½ t ‚ d |	 }
 |
 S(   Ni   i    i   g:Œ0âŽyE>i   (   t   sizeR   t   set_selectedR   t   pow2t   all_gt(   t   wat   wbt   i_obst   i_sigR   R   t   ikt   skt   pR
   t   weights(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   calc_w   s    (
c         C   sd   |  | d | } t  j | t  j | ƒ ƒ } t  j | t  j |  ƒ ƒ } | d k s\ t ‚ | | S(   Ni   i    (   R   R   R   R   (   R   R   R   R   t   deltat   t_numt   t_den(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   calc_t   s
    c   
      C   sˆ   | d  k	 r t j | ƒ } n  t |  | ƒ } t d | d | d | d | d | d | ƒ } t d | d | d | d | ƒ }	 | | |	 f S(   NR   R   R   R   R   R   R   (   t   NoneR   t   normR   R   R   (
   R   R   R   t   f_calcR   R   R   R   R   t   t(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   kwt!   s     		c         C   s¯   t  |  | | | | | | ƒ \ } } }	 t j j j d |  d | d | d | d | d | d | ƒ }
 t |
 j | ƒ s{ t ‚ t |
 j | ƒ s“ t ‚ t |
 j	 |	 ƒ s« t ‚ |
 S(   NR   R   R   R    R   R   R   (
   R"   t   cctbxt   xrayt   targetst   shelxl_wght_lsR   t   scale_factorR   R   t   target(   R   R   R   R    R   R   R   R   R   R!   t   trg(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   kwt23   s    '	c            s  |  j  d | ƒ ‰ t j ˆ ƒ ‰ |  j  d ˆ j ƒ  ƒ ‰ t j |  j  d ˆ j ƒ  ƒ |  j  d ˆ j ƒ  ƒ ƒ ‰  t j ˆ  ƒ ‰ d ‰ d ‰ t d ˆ d ˆ d ˆ d ˆ  d d  d	 ˆ d
 ˆ ƒ ‰ ‡ ‡ ‡ ‡ ‡ ‡ ‡ f d †  } ‡  ‡ ‡ ‡ ‡ ‡ ‡ ‡ f d †  } | ƒ  | ƒ  d  S(   NR   g®Gáz®ó?g¸…ëQ¸@R   R   R   R    R   R   R   c             sZ  ˆ j  }  ˆ j } d } t j ƒ  } t j ƒ  } xù t ˆ j ƒ  ƒ D]å } g  } g  } ˆ | } xz | | g D]k }	 | |	 ˆ | <t d ˆ  d ˆ d ˆ d d  d ˆ d ˆ d ˆ ƒ }
 | j |
 j	 ƒ | j |
 j  | ƒ qm W| j | d	 | d
 d | ƒ | j | d	 | d
 d | ƒ | ˆ | <qC Wt
 |  | ƒ sAt ‚ t
 | | ƒ sVt ‚ d  S(   Ng�íµ ÷Æ°>R   R   R   R    R   R   R   i    i   i   (   t   i_gradientst   i_curvaturesR   t   doublet   xrangeR   R*   R   t   appendR(   R   R   (   t   g_anat   c_anat   epst   g_fint   c_fint   iht   fst   gst   c_origt
   signed_epst   trg_eps(   R   R   R   R   R)   R   R   (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   check_i_derivsO   s*    		
!!c             s  ˆ j  }  ˆ j } 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
 d ˆ d ˆ d ˆ d ˆ  d d  d	 ˆ d
 ˆ ƒ } |
 j | j ƒ | j | j  | ƒ qŒ W| j |
 d |
 d d | ƒ | j | d | d d | ƒ ql W| j t | Œ  ƒ t | d j	 | d j ƒ s²t ‚ | j | d j | d j	 | d j	 f ƒ | ˆ  | <qC Wt |  | ƒ s t ‚ t | | ƒ st ‚ d  S(   Ng�íµ ÷Æ°>i    i   R   R   R   R    R   R   R   i   (   t   f_gradientst
   f_hessiansR   t   complex_doublet   vec3_doubleR.   R   t   complext   realt   imagR*   R   R/   R(   R   R   (   R0   R1   R2   R3   R4   R5   R8   t   g_fin_abt   c_fin_abt   iabR6   R7   R9   R:   (   R    R   R   R   R   R)   R   R   (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   check_f_derivse   s:    		
 !%#+(   t   random_doubleR   R   R   R>   R   R*   R   (   t   mtt   n_reflR;   RF   (    (   R    R   R   R   R   R)   R   R   sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   exerciseB   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 j d d ƒ } x! t | ƒ D] } t | | ƒ q  Wd GHd  S(   Ni   i   i    t   seedt   OK(   t   lenR   t   intR   t   mersenne_twisterR.   RJ   (   t   argst   argt   arg_valsRI   t   n_trialsRH   t   i_trial(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   run‡   s    t   __main__RP   i   (   t
   __future__R    t   cctbx.xray.targetsR#   t   cctbx.array_familyR   t   libtbx.test_utilsR   R   R   R   R"   R*   RJ   RU   t   __name__t   syst   argv(    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/xray/targets/tst_shelxl_wght_ls.pyt   <module>   s   						E	