ó
^™xTc           @   sÞ   d  d l  m Z d  d l m Z d  d l 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 e j d ƒ e j d ƒ d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e d k rÚ e ƒ  d GHn  d S(   iÿÿÿÿ(   t   division(   t   randomN(   t   approx_equal(   t   frange(   t   flex(   t   curve_fittingi    c         C   s)   g  |  j  | ƒ D] } t j | ƒ ^ q S(   N(   t   finite_differencesR   t   double(   t   functort   xt   g(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyR      s    c          C   s  d „  }  t  j t d d ƒ ƒ } |  | d ƒ |  | d ƒ xÀ t d	 d
 ƒ D]¯ } g  t | ƒ D] } d t j ƒ  ^ q^ } t  j t t j d	 d ƒ t j d	 d ƒ d ƒ ƒ } t j | Œ  } t | | ƒ } t	 | j
 | ƒ | d ƒ sí t ‚ |  | | ƒ qK Wd  S(   Nc         S   sš   t  | ƒ } t j |  j ƒ  ƒ } x8 t t  | ƒ ƒ D]$ } | | | t j |  | ƒ 7} q4 Wt j |  | d | d ƒ} t | | j	 d d ƒs– t
 ‚ d  S(   Nt   degreei   t   epsg-Cëâ6?(   t   lenR   R   t   sizet   ranget   powR   t   univariate_polynomial_fitR   t   paramst   AssertionError(   R	   R   t   n_termst   yt   it   fit(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   do_polynomial_fit   s    "iÎÿÿÿi2   i   i   i   g-Cëâ6*¿iüÿÿi   i   id   i
   gš™™™™™¹?g-Cëâ6?(   i   i   i   (   g-Cëâ6*¿iüÿÿ(   R   R   R   R   R   t   randintR   t   univariate_polynomialR   R   t   partial_derivativesR   (   R   R	   R   R   R   R   t   fd_grads(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   exercise_polynomial_fit   s    	)4!c          C   sÁ  d „  }  xö t  d ƒ D]è } t j ƒ  d } t j ƒ  d d } d t j d d ƒ t j ƒ  d } t j | | | ƒ } | d | } | d | } | | d } t j t | | | ƒ ƒ }	 t | |	 ƒ }
 t	 | j
 |	 ƒ |
 d ƒ sî t ‚ |  | | | ƒ q Wd	 } d
 } d } t j t d d d ƒ ƒ }	 | t j t j |	 | ƒ d | d ƒ } d } t j g  t  |	 j ƒ  ƒ D]  } | | | k r{|	 | ^ q{ƒ }	 t j g  t  | j ƒ  ƒ D]  } | | | k r½| | ^ q½ƒ } t j |	 t j | ƒ d d ƒ} | j \ } } } t	 | | d | ƒ s7t ‚ t	 | | d d | ƒ sXt ‚ t j d d d ƒ t j d d d ƒ g } t j t d d d ƒ ƒ }	 t j |	 j ƒ  ƒ } xQ t  t | ƒ ƒ D]= } | | } | j | j | j } } } | | |	 ƒ 7} qÅWt j d d d ƒ t j d d d ƒ g } t j |	 | | ƒ } xƒ t | | j ƒ D]o \ } } t	 | j | j d d ƒs…t ‚ t	 | j | j d d ƒs¦t ‚ t	 | j | j d d ƒsXt ‚ qXWt j d d d ƒ t j d d d ƒ t j d d  d! ƒ t j d" d# d$ ƒ t j d% d& d' ƒ g } t j t d d( d ƒ ƒ }	 t j |	 j ƒ  ƒ } xQ t  t | ƒ ƒ D]= } | | } | j | j | j } } } | | |	 ƒ 7} qnWt j j d) d* ƒ } t j d d+ d, ƒ t j d d- d. ƒ t j d d/ d0 ƒ t j d d1 d2 ƒ t j d d3 d4 ƒ g } t j |	 | | d5 | ƒ} | j ƒ  } t	 | | d d ƒsft ‚ t j j d6 ƒ } | r½t j  | |	 | ƒ } | j ƒ  } t	 | | d d ƒs½t ‚ n  d  S(7   Nc   	      S   sß   | d | } | d | } | | d } t  j t | | | ƒ ƒ } |  t  j t  j | | ƒ d | d ƒ } t j | | ƒ } t | j |  d ƒ sŸ t	 ‚ t | j
 | d d ƒs½ t	 ‚ t | j | d d ƒsÛ t	 ‚ d  S(   Ni   iè  i   g-Cëâ6?R   (   R   R   R   t   expt   pow2R   t   single_gaussian_fitR   t   aR   t   bt   c(	   t   scalet   mut   sigmat   startt   stopt   stepR	   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   do_gaussian_fit+   s    -i
   iè  g-Cëâ6?iÿÿÿÿi    i   i   i{   gš™™™™™	@gš™™™™™¹?i   i   g{®Gáz„?gVçž¯Ò<R   gîZç„uˆÙ?g­,v óÿ@gûó#48 è?gÏ#�\ˆé?g›ò×  @gKÖ—[ à?i   R   gå9*Pîëº?g@öz÷ÇS7@gÛ†Q<~@g[…ƒs¼Ý?gH§®|–‹@@g‘|%�û@g‚ÐQyÓ?g¦]Pß¢D@g~ãkÏ,@g”7úw·?gþš¬QŸI@gK?ªaO@gƒ„‹‰¥?gâKº¨N@g%>w‚ýG@iP   t   min_iterationsiô  i   gÍÌÌÌÌÌ @i   gffffff@i(   gš™™™™™@i3   g333333ó?i<   gffffff@t   termination_paramst   cma_es(!   R   R   R   R   t   gaussianR   R   R   R   R   R   R   R   R   R   R   t   logR   R   R!   R"   R#   t   gaussian_fitt   zipt	   gaussianst   scitbxt   lbfgst   termination_parameterst   compute_y_calct   libtbxt   envt
   has_modulet   cma_es_minimiser(   R*   R   R$   R&   R%   R   R'   R(   R)   R	   R   R   R   R   R#   R"   R!   R2   R
   t   starting_gaussianst   g1t   g2R,   t   y_calct   have_cma_es(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   exercise_gaussian_fit(   s†    	$!-BB!!
!!%
	c          C   sþ   d \ }  } } t  j t d d d ƒ ƒ } t j |  | | ƒ } | | ƒ } t | | ƒ } | j | ƒ } t | | d ƒ s� t ‚ d \ }  } } t j |  | | ƒ } t	 j
 j d
 d ƒ }	 t j | g | | d |	 ƒ}
 t |
 j d j | j ƒ sú t ‚ d  S(   Ng       @g      @g       @i    i
   gš™™™™™¹?g-Cëâ6?i   i   R+   id   R,   (   g       @g      @g       @(   i   i    i   (   R   R   R   R   t   skew_normalR   R   R   R   R3   R4   R5   t   generic_minimisert	   functionsR   (   t   shapet   locationR$   t   x_obst   ft   y_obsR   t	   ana_gradst
   starting_fR,   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   exercise_skew_normal_fit‡   s    	c           C   s   t  ƒ  t ƒ  t ƒ  d  S(   N(   RK   R   R@   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   runŸ   s    t   __main__t   OK(   t
   __future__R    t   stdlibR   t   libtbx.load_envR7   t   libtbx.test_utilsR   t   libtbx.utilsR   t   scitbx.array_familyR   t   scitbx.mathR   t   scitbx.lbfgsR3   t   seedt   set_random_seedR   R   R@   RK   RL   t   __name__(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/tests/tst_curve_fitting.pyt   <module>   s"   			_		