ó
VxTc           @   s¸   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z d   Z	 d   Z
 d   Z d   Z d	   Z d
 d d e d  Z d d d     YZ d   Z e d k r´ e   n  d S(   i˙˙˙˙(   t   division(   t   lbfgs(   t   flex(   t   adopt_init_argsc         C   s    d |  d d | |  d d S(   Ni   i   id   (    (   t   xt   y(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   target   s    c         C   s!   d d |  d |  | |  d S(   Niţ˙˙˙i   i  i   (    (   R   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   grad_x   s    c         C   s   d | |  d S(   Ni   id   iČ   (    (   R   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   grad_y   s    c         C   s   d d | d |  d S(   Ni   i  i   (    (   R   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   curv_xx   s    c         C   s   d S(   NiČ   (    (   R   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   curv_yy   s    i    i   c         C   sk  t  j } | j |  j  } d  | _ | r? | j |  j  } n t  | j |  } yĺd } t	 }	 | }
 xĚ|	 r | d 7} n  |  d |	 d |
  \ } } } } |
 rĆ d Gt
 |  G| Gt
 |  GHn d Gt
 |  G| GH| r| d  k rt j | j    } n  | j | | | |  } n | j | | |  } | rW| j   }	 | j   }
 ql n  | j   sjt  | j   s}t  | rŤ| j   | k rť| | |  rťPqťn | |  rťPn  | d  k	 rÝ| j   | k rÝPn  | rţ| j | | | |  } n | j | | |  } | sPn  | j   }	 | j   }
 ql Wn" t k
 r]} t |  | _ n X| | _ | S(   Ni    i   t   requests_f_and_gt   requests_diags   x,f,d:s   x,f:(   t   scitbx_lbfgst   extt	   minimizert   nt   Nonet   errort   traditional_convergence_testt   RuntimeErrort   drop_convergence_testt   Truet   tupleR   t   doublet   sizet   runR   R   t   AssertionErrort   itert   strt   n_calls(   t   target_evaluatort   min_iterationst   max_iterationsR   t   use_curvaturesR   R   t   is_convergedt   icallR   R   R   t   ft   gt   dt   have_requestt   e(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt	   lbfgs_run   sb    		  !   	R   c           B   s2   e  Z d  d d d d  Z d d  Z d   Z RS(   iý˙˙˙iü˙˙˙i    i'  c         C   s>   t  |  t    t j | | g  |  _ |  j j   |  _ d  S(   N(   R   t   localsR   R   R   R   R   (   t   selft   xxt   yyR    R!   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   __init__S   s    c      	   C   sA   t  d |  d |  j d |  j d |  |  _ |  d t d t  |  S(   NR   R    R!   R"   R   R   (   R*   R    R!   R   R   t   False(   R,   R"   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyR   X   s    		c         C   s  |  j  \ |  _ |  _ | r2 | r2 t } t } n  | r t |  j |  j  |  _ t j t |  j |  j  t	 |  j |  j  f  |  _
 d  |  _ n  | rů t j t |  j |  j  t |  j |  j  f  |  _ |  j j d  sć t  d |  j |  _ n  |  j  |  j |  j
 |  j f S(   Ni    i   (   R   R-   R.   R   R   R%   R   R   R   R   R&   R   R'   R	   R
   t   all_neR   (   R,   R   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   __call__a   s"    	(   t   __name__t
   __module__R/   R   R2   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyR   Q   s   	c          C   sé   xâ t  t f D]Ô }  d G|  GHt   j d |   } t | j  Gd GHt | j d  d k su t | j d  d k r t | j  Gd t |   GHn  d G| j j   G| j j	 GHd	 G| j j
 GH| j j
 | j j   k sŕ t  Hq Wd  S(
   Ns   use_curvatures:R"   t   finali    g-Cëâ6?i   s   failure, use_curvatures=s   iter,exception:s   n_calls:(   R0   R   R   R   R   R   t   absR   R   R   R   t   nfunR   (   R"   t   m(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyR   t   s    	2!t   __main__N(    (   t
   __future__R    t   scitbxR   R   t   scitbx.array_familyR   t   libtbxR   R   R   R   R	   R
   R   R0   R*   R   R   R3   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/run.pyt   <module>   s    					4#	