ó
o™xTc           @   s�   d  d l  m Z d  d l Z d  d l m Z e j j ƒ  Z d e	 f d „  ƒ  YZ
 d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d S(
   iÿÿÿÿ(   t   divisionN(   t   flext   FunctionalExceptionc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyR      s    t   damped_newtonc           B   s,   e  Z d d  d d d d d „ Z d „  Z RS(   gü©ñÒMbP?g¼‰Ø—²Òœ<gYóøÂn¥iè  c	          C   s”  | |  _  | }	 | j d |	 ƒ }
 d } |
 |  _ | j d |	 d |
 ƒ } d } d } d } | } d } d } xâ| | k  rPt j t j | ƒ ƒ | k r� Pn  | j d |	 ƒ } | d 7} | d  k r| t j t j | ƒ ƒ } | d k r| j	 ƒ  t |	 j	 ƒ  t
 d ƒ } qn  | j ƒ  } | | k rA| j d | ƒ n  | j ƒ  } t j j | ƒ } | d 7} | j d | ƒ } | j	 ƒ  | | |	 j	 ƒ  k r Pn  |	 | } | j d | ƒ } | d 7} | j d | d | ƒ } | d 7} t j |
 ƒ } t j | ƒ } | | } d } | d k rFd } d | j | | | ƒ } nQ | | t | ƒ d d	 t
 k r—| | j | | ƒ } | d k r—d } q—n  | d k r9| d k r | d k r | | k rñ| t d d d | | d d
 ƒ 9} n | } d } n | | 9} | d 9} | }	 | }
 | } d  } | d 7} qo | | 9} | d 9} qo W|	 |  _ |
 |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   Nt   xi   t   f_xi    i   g      à?t   valuet   bid   i   gUUUUUUÕ?(   t   functiont   ft   f_x0t	   gradientsR   t   maxt   abst   hessiant   Nonet   normt   floating_point_epsilon_doublet	   deep_copyt   matrix_diagonal_add_in_placet   matrix_symmetric_as_packed_ut   scitbxt   linalgt2   gill_murray_wright_cholesky_decomposition_in_placet   solvet   sum_sqt   dott   x_start   f_x_start   number_of_iterationst   number_of_function_evaluationst   number_of_gradient_evaluationst   number_of_hessian_evaluationst!   number_of_cholesky_decompositions(    t   selfR
   t   x0t   mu0t   taut   eps_1t   eps_2t   mu_mint   k_maxR   R   R    t   fpR!   R"   R#   t   mut   nut   kt   fdpt   fdp_plus_mut   ut   gmwt   h_dnt   x_newt   f_x_newt   fp_newR   t   fnt   dft   acceptt   dl(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyt   __init__   sˆ    			
)
 



"*	


						c         C   s�   d GHd G|  j  j ƒ  GHd Gt |  j ƒ GHd Gd |  j j ƒ  d GHd Gd |  j j ƒ  d GHd G|  j GHd	 G|  j GHd
 G|  j	 GHd G|  j
 GHd G|  j GHd  S(   Ns(   scitbx.minimizers.damped_newton results:s     function:s	     x_star:s     0.5*f_x0.norm()**2:g      à?i   s     0.5*f_x_star.norm()**2:s     number_of_iterations:s!     number_of_function_evaluations:s!     number_of_gradient_evaluations:s      number_of_hessian_evaluations:s$     number_of_cholesky_decompositions:(   R
   t   labelt   listR   R   R   R   R   R    R!   R"   R#   (   R$   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyt   show_statistics\   s    N(   R   R   R   R<   R?   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyR   	   s   It   newton_more_thuente_1994c           B   s8   e  Z d d d d d d  d  d d e d „
 Z d „  Z RS(   g¼‰Ø—²Òœ<gê-�™—q=iè  c   $      C   sy  | |  _  | |  _ d  } d  } d  } | j ƒ  } g  d d g D] } t | | d  ƒ ^ q= \ } } | d  k	 r© | d | ƒ } | j d | ƒ } | j d | d | ƒ } n* d  } | j d | ƒ } | j d | ƒ } | |  _ | |  _ d } d } d } d } d } t	 j
 j ƒ  } | d  k	 r*| | _ n  | d  k	 rB| | _ n  | d  k	 rZ| | _ n  | d  k	 rr| | _ n  | d  k	 rŠ| | _ n  d } x…| | k  rt j t j | ƒ ƒ | k rÁPn  | d  k s×|  j r$| j d | ƒ } | d 7} | j d |
 ƒ } t	 j j | ƒ } | d 7} n  | j d | ƒ } d } | j ƒ  }  | d  k	 rd| j ƒ  }! n  | }" | j ƒ  }# xJt rÂyÞ | j d | d	 | d
 | d | d | ƒ x¯ | j d k r[| d  k	 r| d | ƒ } | j d | ƒ } | j d | d | ƒ } n$ | j d | ƒ } | j d | ƒ } | d 7} | d 7} | j d | d	 | d
 | ƒ q­WWn^ t k
 r½| d 7} |  j ƒ  } | d  k	 rž|! j ƒ  } n  |" } |# j ƒ  } | d 9} qyXPqyW| | j 9} | d 7} | rð| d | ƒ n  | j ƒ  |	 |	 | j ƒ  k r“Pq“q“W| |  _  | |  _! | |  _" | |  _# | |  _$ | |  _% | |  _& | |  _' | |  _( | j) |  _* d  S(   NR   t   callback_after_stepR   R   i   i    t   relative_epsilonR	   t
   functionalR   t   search_directiont,   initial_estimate_of_satisfactory_step_lengthiÿÿÿÿg      à?(+   R
   t   constant_hessianR   R   t   getattrRC   R   R   t   functional_x0R   t   matht   line_search_more_thuente_1994t   xtolt   ftolt   gtolt   stpmint   stpmaxR   R   R   R   R   R   R   R   t   Truet   startt	   info_codet   nextR   t   stpR   R   R   t   functional_x_starR   R    t   number_of_functional_exceptionsR!   R"   R#   t   info_meaningt   line_search_info($   R$   R
   R%   RK   RM   RL   RN   RO   R(   R)   t!   matrix_symmetric_relative_epsilonR+   RF   R0   R3   R2   R   t   attrt
   function_fRA   R   RC   R,   R    RV   R!   R"   R#   t   line_searchR/   R4   t   initial_step_lengtht   backup_xt
   backup_f_xt   backup_functionalt	   backup_fp(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyR<   n   s¾    		.		     
						

$

  									c         C   sý   d GHt  |  j d d  ƒ } | d  k	 r5 d G| ƒ  GHn  d Gt |  j ƒ GH|  j d  k	 r� d Gd |  j j ƒ  d GHd Gd |  j j ƒ  d GHn  d	 G|  j GHd
 G|  j	 GHd G|  j
 GHd G|  j GHd G|  j GHd G|  j GHd G|  j GHd G|  j GHd G|  j GHd  S(   Ns3   scitbx.minimizers.newton_more_thuente_1994 results:R=   s     function:s	     x_star:s     0.5*f_x0.norm()**2:g      à?i   s     0.5*f_x_star.norm()**2:s     functional_x0:s     functional_x_star:s     number_of_iterations:s!     number_of_function_evaluations:s"     number_of_functional_exceptions:s!     number_of_gradient_evaluations:s      number_of_hessian_evaluations:s$     number_of_cholesky_decompositions:s     line_search_info:(   RG   R
   R   R>   R   R   R   R   RH   RU   R   R    RV   R!   R"   R#   RX   (   R$   t	   get_label(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyR?   Ø   s.    N(   R   R   R   t   FalseR<   R?   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyR@   l   s   ^(   t
   __future__R    t   scitbx.mathR   t   scitbx.array_familyR   RI   t!   floating_point_epsilon_double_getR   t   RuntimeErrorR   t   objectR   R@   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/minimizers.pyt   <module>   s   c