ó
l™xTc           @   sœ   d  d l  m Z d  d l m Z d  d l m Z d  d l Z d  d l m Z m	 Z	 m
 Z
 d  d l Z d „  Z e d „ Z d „  Z e d	 k r˜ e ƒ  n  d S(
   iÿÿÿÿ(   t   division(   t   lbfgsb(   t   flexN(   t   approx_equalt   eps_eqt   Exception_expectedc          C   s  d }  d } t  j |  d ƒ } t  j |  d ƒ } t  j |  ƒ } d } d } d } x«t t g D]�} t j j |  | | | | | | | | ƒ	 }	 |	 j ƒ  |  k s¦ t	 ‚ |	 j
 ƒ  | k s¾ t	 ‚ |	 j ƒ  j ƒ  | j ƒ  k sâ t	 ‚ |	 j ƒ  j ƒ  | j ƒ  k st	 ‚ |	 j ƒ  j ƒ  | j ƒ  k s*t	 ‚ |	 j ƒ  | k sBt	 ‚ t |	 j ƒ  | ƒ s]t	 ‚ t |	 j ƒ  | ƒ sxt	 ‚ t |	 j ƒ  | ƒ s“t	 ‚ |	 j ƒ  s¦t	 ‚ |	 j ƒ  s¹t	 ‚ |	 j ƒ  d k sÑt	 ‚ t  j |  d ƒ }
 d } t  j |  d ƒ } |	 j |
 | | t ƒ st	 ‚ |	 j ƒ  d	 k s1t	 ‚ |	 j ƒ  d k sIt	 ‚ | s—y |	 j ƒ  Wn. t k
 r�} t | ƒ j d
 ƒ s”t	 ‚ q-Xt ‚ n– |	 j |
 | | ƒ s³t	 ‚ |	 j ƒ  sÅt	 ‚ t |	 j ƒ  d ƒ sàt	 ‚ t |	 j  ƒ  d g |  ƒ st	 ‚ |	 j! d d ƒ t |	 j ƒ  d ƒ s-t	 ‚ |	 j |
 | | ƒ sHt	 ‚ |	 j ƒ  d k s`t	 ‚ |	 j ƒ  d k sxt	 ‚ |	 j ƒ  s‹t	 ‚ | s°t |
 d g |  ƒ sÌt	 ‚ n t |
 d g |  ƒ sÌt	 ‚ |	 j" ƒ  |	 j |
 | | ƒ sòt	 ‚ |	 j ƒ  d k s
t	 ‚ |	 j# ƒ  |	 j ƒ  d k s,t	 ‚ |	 j$ ƒ  |	 j ƒ  sIt	 ‚ |	 j ƒ  s\t	 ‚ |	 j ƒ  d k stt	 ‚ t j d |  ƒ }	 |	 j ƒ  j% ƒ  |  k s¤t	 ‚ |	 j ƒ  j% ƒ  |  k sÂt	 ‚ |	 j ƒ  j% ƒ  |  k sàt	 ‚ |	 j ƒ  j& d ƒ s^ t	 ‚ q^ Wd  S(   Ni   i   iÿÿÿÿi   g    ÐcAgñhãˆµøä>t   STARTi    t   FG_STARTs+   : SCITBX_ASSERT(enable_stp_init()) failure.gš™™™™™É?t   valueg333333Ó?t	   FG_LNSRCHs   STOP: NO RESTOREs	   STOP: CPUt   n('   R   t   doublet   intt   Falset   TrueR   t   extt	   minimizerR
   t   AssertionErrort   mt   lt   idt   ut   nbdt   enable_stp_initR   t   factrt   pgtolt   iprintt   requests_f_and_gt   is_terminatedt   taskt   processt   ft   requests_stp_initt   RuntimeErrort   strt   endswithR   R   t    relative_step_length_line_searcht   current_search_directiont$   set_relative_step_length_line_searcht   request_stopt   request_stop_with_restoret   request_restartt   sizet   all_eq(   R
   R   R   R   R   R   R   R   R   R   t   xR   t   gt   e(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_lbfgsb.pyt   exercise_minimizer_interface   s|    	!$$$	"


c         C   sõ  d } t  j | ƒ } t  j | ƒ } t  j | ƒ } t  j | ƒ } t  j | ƒ } d t j d k rm d } n d } x8 t d | d ƒ D]$ } d | | <d | | <d	 | | <q† Wx8 t d | d ƒ D]$ } d | | <d
 | | <d	 | | <qÁ Wx t | ƒ D] } d | | <qö Wt j d | d d d | d | d | d d d d d | ƒ }	 d }
 x;t r‰|	 j	 | |
 | |  ƒ rvd | d d d }
 x9 t d | ƒ D]( } |
 | | | | d d d }
 q“Wd |
 }
 | d | d d } d | d d d | d | | d <xY t d | d ƒ D]D } | } | | d | | d } d | d | | | | | <qWd | | | d <qO|	 j
 ƒ  rOPqOqOW|	 j ƒ  d k s¢t ‚ |	 j ƒ  j ƒ  |	 j ƒ  d k sÊt ‚ |	 j ƒ  d |	 j ƒ  k sìt ‚ |	 j ƒ  d |	 j ƒ  k st ‚ |	 j ƒ  s!t ‚ |	 j ƒ  s3t ‚ |	 j ƒ  sEt ‚ d t j d k rñ|	 j ƒ  d k spt ‚ |	 j ƒ  d k sˆt ‚ |	 j ƒ  d  k s t ‚ |	 j ƒ  d k s¸t ‚ |	 j ƒ  d k sÐt ‚ |	 j ƒ  d! k sèt ‚ |	 j ƒ  d k s t ‚ |	 j ƒ  d k st ‚ |	 j ƒ  d k s0t ‚ |	 j ƒ  d k sHt ‚ |	 j ƒ  d k s`t ‚ t  |	 j! ƒ  d" ƒ s{t ‚ |	 j ƒ  d k s“t ‚ |	 j" ƒ  t# j$ j% ƒ  k s´t ‚ t  |	 j& ƒ  |	 j' ƒ  |	 j" ƒ  ƒ sßt ‚ t  |	 j( ƒ  d# ƒ sút ‚ t  |	 j) ƒ  |	 j( ƒ  d ƒ st ‚ |	 j* ƒ  d$ k s7t ‚ |	 j+ ƒ  d$ k sOt ‚ |	 j, ƒ  d$ k sgt ‚ t  |	 j- ƒ  d% ƒ s‚t ‚ t  |	 j. ƒ  d& ƒ s�t ‚ t  |	 j/ ƒ  d' ƒ s¸t ‚ t  |	 j0 ƒ  d ƒ sÓt ‚ t  |	 j1 ƒ  d( ƒ sñt ‚ n  d  S()   Ni   s	   --Verbosei   iè  iÿÿÿÿi    i   g      ð?g      Y@g      YÀg      @R
   R   i   R   R   R   R   g    ÐcAR   gñhãˆµøä>R   g      Ð?g      @g       @g      0@g       @s/   CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCHiþÿÿÿs   --softi   i0   i   g§ØñØxD7@gxì�bð>g{®Gáz”¿g‚Ÿ2óÃ >gàvT˜"”/¾gTUQùYÿõ?gìÂ"
±Ê"?(2   R   R   R   t   syst   argvt   xrangeR   R   R   R   R   R   R   t   f_listR*   t   n_iterationR   t   f_previous_iterationt    initial_x_replaced_by_projectiont   is_constrainedt   is_fully_constrainedt   n_fg_evaluations_totalt   n_fg_evaluations_itert(   n_intervals_explored_cauchy_search_totalt'   n_intervals_explored_cauchy_search_itert   n_skipped_bfgs_updates_totalt   n_bfgs_updates_totalt   subspace_argmin_is_within_boxt   n_free_variablest   n_active_constraintst   n_variables_leaving_active_sett   n_variables_entering_active_setR   t   theta_bfgs_matrix_currentt   floating_point_epsilont   scitbxt   matht!   floating_point_epsilon_double_gett"   factr_times_floating_point_epsilonR   t%   two_norm_line_search_direction_vectort(   two_norm_line_search_direction_vector_sqt   accumulated_time_cauchy_searcht&   accumulated_time_subspace_minimizationt   accumulated_time_line_searcht"   slope_line_search_function_currentt    slope_line_search_function_startt   maximum_relative_step_lengthR$   t    infinity_norm_projected_gradient(   t   use_fortran_libraryR
   R   R,   R   R   R-   R   t   iR   R   t   t1t   t2(    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_lbfgsb.pyt   driver1J   s¨    	



			&
&"(""	c           C   s*   t  ƒ  t d d t j d k ƒ d GHd  S(   NRS   s	   --fortrani   t   OK(   R/   RW   R0   R1   (    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_lbfgsb.pyt   run¡   s    t   __main__(   t
   __future__R    RF   R   t   scitbx.array_familyR   t   scitbx.matht   libtbx.test_utilsR   R   R   R0   R/   R   RW   RY   t   __name__(    (    (    sS   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_lbfgsb.pyt   <module>   s   	BW	