ó
`™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  d e d	 „ Z d
 e f d „  ƒ  YZ d d d d d d „ Z d S(   iÿÿÿÿ(   t   division(   t   lbfgs(   t   flex(   t   chebyshev_lsq(   t   chebyshev_polynome(   t   chebyshev_baseNi   c         C   sÂ   t  j t |  ƒ ƒ d } d | d |  } | t j d } t  j | ƒ } | r t  j | ƒ t  j | ƒ d } | | } n  d | | d | | | } | r¾ | | d <| | |  d <n  | S(   Ni   g       @g      ð?g      à?i    (   R   t   doublet   ranget   matht   pit   cost   maxt   min(   t   nt   lowt   hight   include_limitst   xt   span(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/chebyshev_lsq_fit.pyt   chebyshev_nodes
   s     
t   chebyshev_lsq_fitc           B   s)   e  Z d d d d e d  „ Z d „  Z RS(   c	   
      C   s  | |  _  | |  _ | |  _ |  j d  k rH t j | j ƒ  t ƒ |  _ n  d  |  _ | d  k	 ri | |  _ n t j	 | j ƒ  d ƒ |  _ t j	 | d ƒ |  _
 | r¼ t j | ƒ d d |  _
 n  t j |  j  d ƒ |  _ t j |  j  d ƒ |  _ d  |  _ | d  k	 r| |  _ n  | d  k	 r%| |  _ n  t j |  j d ƒ d |  j
 d <t | |  j |  j |  j  |  j |  j |  j ƒ |  _ |  j j |  j
 ƒ t j d t d t d t ƒ }	 t j d	 |  d
 |	 ƒ |  _ |  j j ƒ  |  _ |  j j ƒ  |  _ |  j j ƒ  |  _ |  `
 d  S(   Ng      ð?i    g      à?g      $@g       @t-   ignore_line_search_failed_step_at_lower_boundt-   ignore_line_search_failed_step_at_upper_boundt    ignore_line_search_failed_maxfevt   target_evaluatort   exception_handling_params(   t   x_obst   y_obst
   free_flagst   NoneR   t   boolt   sizet   Truet   w_obsR   R   t   random_doublet   min_defaultt	   low_limitt   max_defaultt
   high_limitt   ft   mean_defaultR   t
   lsq_objectt   replaceR   t   exception_handling_parameterst   runt	   minimizert   coefst   residualt   free_residualt   free_f(
   t   selft   n_termsR   R   R!   R   R$   R&   t	   randomiset   lbfgs_exception_handling_params(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/chebyshev_lsq_fit.pyt   __init__   sN    						 			c         C   sD   |  j  j |  j ƒ |  j  j ƒ  } |  j  j ƒ  } | |  _ | | f S(   N(   R)   R*   R   R/   t   gradientR'   (   R2   R'   t   g(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/chebyshev_lsq_fit.pyt    compute_functional_and_gradientsU   s
    	N(   t   __name__t
   __module__R   t   FalseR6   R9   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/chebyshev_lsq_fit.pyR      s   0i
   i   id   i   c         C   s_  | d  k rÈ | d k  r! d } n  g  } t j |  j ƒ  t ƒ } t j |  j ƒ  ƒ }	 x" t | ƒ D] }
 t | |	 |
 <qa Wx? t | | ƒ D]. } t | |  | | | ƒ } | j	 | j
 ƒ q‰ Wt j | ƒ S| d  k rï t j |  j ƒ  d ƒ } n  t j | | d ƒ } xB t | ƒ D]4 } | t |  | | d | d | d | d d  ƒ7} qW| t j | ƒ Sd  S(   Ni   i   i    t	   min_termst	   max_termst   n_freet   n_goes(   R   R   R   R   R    t   random_permutationR   R<   R   t   appendR1   R   t+   cross_validate_to_determine_number_of_termst	   min_index(   R   R   R!   R=   R>   R?   R@   t   free_residualsR   t   free_permutt   iit   countt   fitt
   free_residt   jj(    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/chebyshev_lsq_fit.pyRC   ]   s*    	(   t
   __future__R    t   scitbxR   t   scitbx.array_familyR   t   scitbx.mathR   R   R   R   R<   R   t   objectR   R   RC   (    (    (    sK   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/chebyshev_lsq_fit.pyt   <module>   s   A