ó
Z™xTc           @   sˆ  d  Z  d d l m Z d d l 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 d d l Z d d l Z d d l Z d d l Z y d d l Z Wn e k
 rÓ d Z n Xe j j ƒ  Z d d	 „ Z d
 „  Z d d0 d „  ƒ  YZ d d1 d „  ƒ  YZ d d2 d „  ƒ  YZ d d3 d „  ƒ  YZ d d4 d „  ƒ  YZ d e f d „  ƒ  YZ d d5 d „  ƒ  YZ  d e  f d „  ƒ  YZ! d e! f d „  ƒ  YZ" d e! f d „  ƒ  YZ# d e  f d  „  ƒ  YZ$ d! e  f d" „  ƒ  YZ% d# e  f d$ „  ƒ  YZ& d% e  f d& „  ƒ  YZ' d' e  f d( „  ƒ  YZ( d) e  f d* „  ƒ  YZ) d+ e  f d, „  ƒ  YZ* d- „  Z+ d. „  Z, e- d/ k r„e, ƒ  n  d S(6   s(   http://www2.imm.dtu.dk/~hbn/immoptibox/
iÿÿÿÿ(   t   divisionN(   t   matrix(   t   flex(   t   approx_equal(   t   format_cpu_timesgVçž¯Ò<c   
      C   sl  |  j  ƒ  s t ‚ |  j ƒ  d } | t j t j |  ƒ ƒ } t j |  j ƒ  d ƒ } xt | ƒ D]} d } x, t | ƒ D] } | | | | f d 7} q| W|  | | f | } | | k rÂ d  St
 j | ƒ | | | f <x† t | d | ƒ D]q }	 d } x6 t | ƒ D]( } | | |	 | f | | | f 7} qW|  |	 | f | | | | f | |	 | f <qï Wqc W| S(   Ni    i   i   (   t   is_square_matrixt   AssertionErrort   focusR   t   maxt   abst   doublet   accessort   xranget   Nonet   matht   sqrt(
   t   at   relative_epst   nt   epst   ct   kt   sumt   jt   dt   i(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   cholesky_decomposition   s$     &4c         C   so  |  j  ƒ  s t ‚ | j ƒ  s$ t ‚ | j ƒ  |  j ƒ  d k sF t ‚ |  j ƒ  d } t j | d ƒ } xm t | ƒ D]_ } d } x0 t | ƒ D]" } | |  | | f | | 7} qŽ W| | | |  | | f | | <qu Wt j | d ƒ } x~ t | d d d ƒ D]f } d } x7 t | d | ƒ D]" } | |  | | f | | 7} q!W| | | |  | | f | | <qW| S(   Ni    i   iÿÿÿÿ(   R   R   t   is_trivial_1dt   sizeR   R   R
   R   (   R   t   bR   t   zR   R   R   t   x(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   cholesky_solve-   s"    " $ $t   levenberg_marquardtc           B   s)   e  Z d  d d d d d „ Z d „  Z RS(   gü©ñÒMbP?g¼‰Ø—²Òœ<gYóøÂn¥iè  c         C   sæ  | |  _  d } | }	 | j |	 ƒ }
 d } |
 |  _ | j |	 ƒ } d } d } | j ƒ  } | j | ƒ } | j |
 ƒ } t j t j | ƒ ƒ | k } | t j | j	 ƒ  ƒ } d } xô| r«| | k  r«| d 7} | j
 ƒ  } | | k r | j d | ƒ n  | j ƒ  } t j j | ƒ } | d 7} | j d | ƒ } | j ƒ  | |	 j ƒ  | k rdt } q¸ |	 | } | j | ƒ } | d 7} d | j | | | ƒ } | d k s´t ‚ d |
 j ƒ  d | j ƒ  d | } | d k r”| }	 | }
 | j |	 ƒ } | d 7} | j ƒ  } | j | ƒ } | j |
 ƒ } t j t j | ƒ ƒ | k } | | k r…| t d	 d d | d d ƒ 9} n | } d } q¸ | | 9} | d 9} q¸ W|	 |  _ |
 |  _ | |  _ | |  _ | |  _ | |  _ d  S(
   Ni   i   i    t   valueR   g      à?g      @i   gUUUUUUÕ?(   t   functiont   ft   f_x0t   jacobiant   matrix_transposet   matrix_multiplyR   R   R	   t   matrix_diagonalt	   deep_copyt   matrix_diagonal_add_in_placet   matrix_symmetric_as_packed_ut   scitbxt   linalgt2   gill_murray_wright_cholesky_decomposition_in_placet   solvet   normt   Truet   dotR   t   x_start   f_x_start   number_of_iterationst   number_of_function_evaluationst   number_of_jacobian_evaluationst!   number_of_cholesky_decompositions(   t   selfR#   t   x0t   taut   eps_1t   eps_2t   mu_mint   k_maxt   nuR   t   f_xR7   R   R8   R9   t   j_tR   t   gt   foundt   muR   t	   a_plus_mut   ut   gmwt   h_lmt   x_newt   f_x_newt	   rho_denomt   rho(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   __init__B   sj    		

 	

&
&	
					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  S(   Ns   levenberg_marquardt 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_jacobian_evaluations:s$     number_of_cholesky_decompositions:(   R#   t   labelt   listR4   R%   R1   R5   R6   R7   R8   R9   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   show_statisticsƒ   s    (   t   __name__t
   __module__RO   RR   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR!   @   s   :t   damped_newtonc           B   s)   e  Z d d  d d d d „ Z d „  Z RS(   gü©ñÒMbP?g¼‰Ø—²Òœ<iè  c         C   s‹  | |  _  | } | j d | ƒ }	 d }
 |	 |  _ | j d | d |	 ƒ } d } d } d } | } d } d } xÙ| | k  rG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  xY t rq| j ƒ  } | j d | ƒ t d | ƒ } | d 7} | d  k	 rdPn  | d	 9} qWt d
 | d | ƒ } | j	 ƒ  | | | j	 ƒ  k r¬Pn  | | } | j d | ƒ } |
 d 7}
 | j d | d | ƒ } | d 7} t j |	 ƒ } t j | ƒ } | | } d } | d k rRd } d | j | | | ƒ } nQ | | t | ƒ d d t
 k r£| | j | | ƒ } | d k r£d } q£n  | d k r0| d k r÷| d k r÷| t d d d | | d d ƒ 9} d } n | | 9} | d 9} | } | }	 | } d  } | d 7} qo | | 9} | d 9} qo W| |  _ |	 |  _ | |  _ |
 |  _ | |  _ | |  _ | |  _ d  S(   NR   i   RB   i    i   g      à?R"   R   i
   R   R   id   i   gUUUUUUÕ?(   R#   R$   R%   t	   gradientsR   R   R	   t   hessianR   R1   t   floating_point_epsilon_doubleR2   R*   R+   R   R    t   sum_sqR3   R4   R5   R6   R7   t   number_of_gradient_evaluationst   number_of_hessian_evaluationsR9   (   R:   R#   R;   t   mu0R<   R=   R>   R@   R   RB   R7   t   fpRZ   R[   R9   RF   RA   R   t   fdpt   fdp_plus_mut   fdp_plus_mu_choleskyt   h_dnRK   RL   t   fp_newR$   t   fnt   dft   acceptt   dl(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRO   “   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   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#   RP   RQ   R4   R%   R1   R5   R6   R7   RZ   R[   R9   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRR   â   s    N(   RS   RT   R   RO   RR   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRU   ‘   s   Ht#   minpack_levenberg_marquardt_adaptorc           B   s   e  Z d  d „ Z d „  Z RS(   iè  c         C   sz  | |  _  | j d | ƒ |  _ | j ƒ  } d |  _ d |  _ d |  _ t j j	 d | j
 d | d d d d d d d d d	 d
 d t ƒ } xË | j ƒ  sT| j ƒ  rÐ |  j d 7_ | j d | j d | ƒ ƒ qŠ | j ƒ  r|  j d 7_ | j d | j d | ƒ j ƒ  j ƒ  ƒ qŠ | j ƒ  rŠ |  j d 7_ |  j | k rDPn  | j ƒ  qŠ qŠ W| |  _ | j d |  j ƒ |  _ d  S(   NR   i    t   mt   ftolg¼‰Ø—²Òœ<t   xtolt   gtolt   maxfevt   factorg      Y@t   call_back_after_iterationi   t   fvect   fjac(   R#   R$   R%   R*   R6   R7   R8   R-   t   minpackR!   Rh   R2   t   has_terminatedt   requests_fvect   process_fvect   requests_fjact   process_fjacR&   R'   t   as_1dt   calls_back_after_iterationt(   continue_after_call_back_after_iterationR4   R5   (   R:   R#   R;   t   max_iterationsR   t	   minimizer(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRO   ô   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  S(   Ns$   minpack.levenberg_marquardt 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_jacobian_evaluations:(
   R#   RP   RQ   R4   R%   R1   R5   R6   R7   R8   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRR     s    (   RS   RT   RO   RR   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRg   ò   s   !t   lbfgs_adaptorc           B   s&   e  Z d  d „ Z d „  Z d „  Z RS(   iè  c         C   s²   | |  _  | j d | ƒ |  _ | j ƒ  |  _ d |  _ d |  _ t j j	 d |  d t j j
 d t d d d | ƒ ƒ } | j ƒ  |  _ |  j |  _ | j d |  j ƒ |  _ |  ` d  S(	   NR   i    t   target_evaluatort   termination_paramst   traditional_convergence_testt    traditional_convergence_test_epsg¼‰Ø—²Òœ<Rz   (   R#   R$   R%   R*   R   R7   RZ   R-   t   lbfgst   runt   termination_parametersR2   t   iterR6   R4   R5   (   R:   R#   R;   Rz   R{   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRO   #  s    			c         C   sf   d |  j  j d |  j ƒ j ƒ  d } |  j d 7_ |  j  j d |  j ƒ } |  j d 7_ | | f S(   Ng      à?R   i   i   (   R#   R$   R   R1   R7   RV   RZ   (   R:   R$   RD   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt    compute_functional_and_gradients4  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  S(   Ns   lbfgs 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:(
   R#   RP   RQ   R4   R%   R1   R5   R6   R7   RZ   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRR   ;  s    (   RS   RT   RO   R…   RR   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR|   !  s   	t   lbfgsb_adaptorc           B   s   e  Z d  d „ Z d „  Z RS(   iè  c         C   sY  | |  _  | j d | ƒ |  _ | j ƒ  } d |  _ d |  _ t j j d | j	 ƒ  d d d d ƒ } d } t
 j | j	 ƒ  d ƒ } x¡ t r$| j | | | t ƒ rû d |  j  j d | ƒ j ƒ  d } |  j d	 7_ |  j  j d | ƒ } |  j d	 7_ q„ | j ƒ  rPq„ | j ƒ  | k r„ Pq„ q„ W| j ƒ  |  _ | |  _ | j d |  j ƒ |  _ d  S(
   NR   i    R   t   factrg¼‰Ø—²Òœ<t   pgtolg      à?i   i   (   R#   R$   R%   R*   R7   RZ   R-   t   lbfgsbR{   R   R   R
   R2   t   processt   FalseR1   RV   t   is_terminatedt   n_iterationR6   R4   R5   (   R:   R#   R;   Rz   R   R{   R$   RD   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRO   I  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  S(   Ns   lbfgsb 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:(
   R#   RP   RQ   R4   R%   R1   R5   R6   R7   RZ   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRR   `  s    (   RS   RT   RO   RR   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR†   G  s   t   MeyerFunctionErrorc           B   s   e  Z RS(    (   RS   RT   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRŽ   l  s    t   test_functionc           B   sà   e  Z e d  d „ Z d „  Z d d d „ Z d d „ Z d „  Z d d „ Z	 d d	 „ Z
 d d
 „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   i   c         C   s/  | |  _  | |  _ | |  _ | |  _ d |  _ d |  _ |  j ƒ  |  j  |  j k sX t ‚ |  j d  k	 rŸ t
 d |  j d |  j ƒ j ƒ  d |  j ƒ sŸ t ‚ n  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  y |  j ƒ  Wn  t k
 rd G|  j j GHn Xd r+t d  k	 r+|  j ƒ  n  d  S(   Ng�íµ ÷Æ°>g      à?R   i   s    Skipping: exercise_lbfgsb() withi   (   Rh   R   t   verboset   check_with_finite_differencest   check_gradients_tolerancet   check_hessian_tolerancet   initializationR   R4   R   R   R$   R1   t   capital_f_x_start   exercise_levenberg_marquardtt$   exercise_minpack_levenberg_marquardtt   exercise_damped_newtont(   exercise_scitbx_minimizers_damped_newtont3   exercise_scitbx_minimizers_newton_more_thuente_1994t   exercise_lbfgst   exercise_lbfgsbRŽ   t	   __class__RS   t   knitro_adaptbxt   exercise_knitro_adaptbx(   R:   Rh   R   R‘   R�   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRO   p  s.    						
5





c         C   s
   |  j  j S(   N(   R�   RS   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRP   �  s    c         C   s2   | d  k r! |  j d | ƒ } n  d t j | ƒ S(   NR   g      à?(   R   R$   R   RY   (   R:   R   RB   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt
   functional“  s     g:Œ0âŽyE>c   	      C   sæ   | } t  j ƒ  } x¨ t |  j ƒ D]— } t d t | | ƒ ƒ | } g  } xJ | | g D]; } | j ƒ  } | | c | 7<| j |  j d | ƒ ƒ qY W| j	 | d | d d | ƒ q" W| j
 t  j |  j |  j ƒ ƒ | j ƒ  S(   Ni   R   i    i   (   R   R
   R   R   R   R	   R*   t   appendR$   t   extendt   resizet   gridRh   R'   (	   R:   R   R   R;   t   resultR   R   t   fst
   signed_eps(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   jacobian_finite—  s    %c         C   su   |  j  d | ƒ } |  j rq |  j d | ƒ } t d t j t j | ƒ ƒ ƒ } t | | | | d ƒ sq t ‚ n  | S(   NR   i   gñhãˆµøä>(   t   jacobian_analyticalR‘   R¨   R   R   R	   R   R   (   R:   R   t
   analyticalt   finitet   scale(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR&   ¥  s    	!#gH¯¼šò×z>c   	      C   sÁ   | } t  j ƒ  } x¨ t |  j ƒ D]— } t d t | | ƒ ƒ | } g  } xJ | | g D]; } | j ƒ  } | | c | 7<| j |  j d | ƒ ƒ qY W| j | d | d d | ƒ q" W| S(   Ni   R   i    i   (	   R   R
   R   R   R   R	   R*   R¡   R    (	   R:   R   R   R;   R¥   R   R   R¦   R§   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   gradients_finite­  s    %c         C   s@   | d  k r! |  j d | ƒ } n  |  j d | ƒ j ƒ  j | ƒ S(   NR   (   R   R$   R©   R'   R(   (   R:   R   RB   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   gradients_analyticalº  s     c         C   s~   |  j  d | d | ƒ } |  j rz |  j d | ƒ } t d t j t j | ƒ ƒ ƒ } t | | | | |  j ƒ sz t ‚ n  | S(   NR   RB   i   (	   R®   R‘   R­   R   R   R	   R   R’   R   (   R:   R   RB   Rª   R«   R¬   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRV   ¿  s    	!c   	      C   sà   | } t  j ƒ  } x¨ t |  j ƒ D]— } t d t | | ƒ ƒ | } g  } xJ | | g D]; } | j ƒ  } | | c | 7<| j |  j d | ƒ ƒ qY W| j	 | d | d d | ƒ q" W| j
 t  j |  j |  j ƒ ƒ | S(   Ni   R   i    i   (   R   R
   R   R   R   R	   R*   R¡   R®   R¢   R£   R¤   (	   R:   R   R   R;   R¥   R   R   t   gsR§   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   hessian_finiteÈ  s    %c         C   sx   |  j  d | ƒ } |  j rt |  j d | ƒ } t d t j t j | ƒ ƒ ƒ } t | | | | |  j ƒ st t ‚ n  | S(   NR   i   (	   t   hessian_analyticalR‘   R°   R   R   R	   R   R“   R   (   R:   R   Rª   R«   R¬   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRW   Ö  s    	!c         C   s.   |  j  d  k	 r* t | |  j  ƒ s* t ‚ n  d  S(   N(   R4   R   R   R   (   R:   R4   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   check_minimized_x_starß  s    c         C   s<   |  j  d  k	 r8 t d | j ƒ  d |  j  ƒ s8 t ‚ n  d  S(   Ng      à?i   (   R•   R   R   R1   R   (   R:   R5   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt    check_minimized_capital_f_x_starã  s    c         C   s*   |  j  d | j ƒ |  j d | j ƒ d  S(   NR4   R5   (   R²   R4   R³   R5   (   R:   t	   minimized(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   check_minimizedç  s    c         C   sX   t  d |  d |  j d |  j ƒ } |  j r7 | j ƒ  n  |  j d | ƒ |  j rT Hn  d  S(   NR#   R;   R<   R´   (   R!   R;   t   tau0R�   RR   Rµ   (   R:   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR–   ë  s    !	 	 c         C   sO   t  d |  d |  j ƒ } |  j r. | j ƒ  n  |  j d | ƒ |  j rK Hn  d  S(   NR#   R;   R´   (   Rg   R;   R�   RR   Rµ   (   R:   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR—   ñ  s    	 	 c         C   sX   t  d |  d |  j d |  j ƒ } |  j r7 | j ƒ  n  |  j d | ƒ |  j rT Hn  d  S(   NR#   R;   R<   R´   (   RU   R;   R¶   R�   RR   Rµ   (   R:   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR˜   ÷  s    !	 	 c         C   sj   d d  l  } | j j d |  d |  j d |  j ƒ } |  j rI | j ƒ  n  |  j d | ƒ |  j rf Hn  d  S(   NiÿÿÿÿR#   R;   R<   R´   (   t   scitbx.minimizerst
   minimizersRU   R;   R¶   R�   RR   Rµ   (   R:   R-   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR™   ý  s    	 	 c         C   sa   d d  l  } | j j d |  d |  j ƒ } |  j r@ | j ƒ  n  |  j d | ƒ |  j r] Hn  d  S(   NiÿÿÿÿR#   R;   R´   (   R·   R¸   t   newton_more_thuente_1994R;   R�   RR   Rµ   (   R:   R-   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRš     s    	 	 c         C   sO   t  d |  d |  j ƒ } |  j r. | j ƒ  n  |  j d | ƒ |  j rK Hn  d  S(   NR#   R;   R´   (   R|   R;   R�   RR   Rµ   (   R:   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR›     s    	 	 c         C   sO   t  d |  d |  j ƒ } |  j r. | j ƒ  n  |  j d | ƒ |  j rK Hn  d  S(   NR#   R;   R´   (   R†   R;   R�   RR   Rµ   (   R:   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRœ     s    	 	 c         C   sú   t  j d |  d |  j ƒ } |  j r1 | j ƒ  n  |  j d | ƒ |  j rN Hn  t  j d |  d |  j d d ƒ } |  j r… | j ƒ  n  |  j d | ƒ |  j r¢ Hn  t  j d |  d |  j d d ƒ } |  j rÙ | j ƒ  n  |  j d | ƒ |  j rö Hn  d  S(   NR#   R;   R´   t   hessoptt   bfgsR�   (   Rž   R0   R;   R�   RR   Rµ   (   R:   R´   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRŸ     s$    	 	 !	 	 !	 	 N(   RS   RT   R2   RO   RP   R   R    R¨   R&   R­   R®   RV   R°   RW   R²   R³   Rµ   R–   R—   R˜   R™   Rš   R›   Rœ   RŸ   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR�   n  s*    															t   linear_function_full_rankc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sÊ   t  j t  j |  j |  j ƒ d |  j ƒ |  _ |  j j d d ƒ |  j j t  j |  j |  j ƒ d |  j ƒ t  j |  j d ƒ |  _ d |  _	 d |  _
 t  j |  j d ƒ |  _ d |  j |  j |  _ d  S(   Ng       ÀR"   i   g:Œ0âŽyE>i
   iÿÿÿÿg      à?(   R   R
   R¤   R   Rh   R   R+   R£   R;   R¶   t   delta0R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   )  s    .,		c         C   s   d |  j  j |  j |  j f S(   Ns   %s(m=%d, n=%d)(   R�   RS   Rh   R   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRP   3  s    c         C   s#   |  j  j | ƒ t j |  j d ƒ S(   Ni   (   R   R(   R   R
   Rh   (   R:   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   6  s    c         C   s   |  j  S(   N(   R   (   R:   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   9  s    c         C   s   |  j  j ƒ  j |  j  ƒ S(   N(   R   R'   R(   (   R:   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   <  s    (   RS   RT   R”   RP   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR¼   '  s
   	
			t   linear_function_rank_1c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s¥   |  j  } |  j } t j t d | d ƒ ƒ j t j t d | d ƒ ƒ ƒ |  _ t j | d ƒ |  _ d |  _ d |  _	 d  |  _ | | d d d | d |  _ d  S(   Ni   g:Œ0âŽyE>i
   i   i   (   Rh   R   R   R
   R   t   matrix_outer_productR   R;   R¶   R½   R   R4   R•   (   R:   Rh   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   A  s    		"			c         C   sJ   t  t j t d |  j d ƒ ƒ j | ƒ d d |  j d ƒ sF t ‚ d  S(   Ni   i   i   (   R   R   R
   R   R   R3   Rh   R   (   R:   R4   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR²   L  s    %(   RS   RT   R”   R²   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR¾   ?  s   	t1   linear_function_rank_1_with_zero_columns_and_rowsc           B   s   e  Z d  „  Z d „  Z RS(   c         C   sÑ   |  j  } |  j } t j d g t d | d d ƒ d g ƒ j t j d g t d | d d ƒ d g ƒ ƒ |  _ t j | d ƒ |  _ d |  _ d |  _	 d  |  _ | d d | d d d | d |  _ d  S(	   Ni    i   i   g:Œ0âŽyE>i
   i   i   i   (   Rh   R   R   R
   t   rangeR¿   R   R;   R¶   R½   R   R4   R•   (   R:   Rh   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   T  s    		.4			c         C   s\   t  t j d g t d |  j d d ƒ d g ƒ j | ƒ d d |  j d ƒ sX t ‚ d  S(   Ni    i   i   i   (   R   R   R
   RÁ   R   R3   Rh   R   (   R:   R4   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR²   _  s    7(   RS   RT   R”   R²   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRÀ   Q  s   	t   rosenbrock_functionc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sy   |  j  d k s t ‚ |  j d k s* t ‚ t j d d g ƒ |  _ d |  _ d |  _ t j d d g ƒ |  _ d |  _	 d  S(   Ni   g333333ó¿i   i    (
   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   f  s    		c         C   s/   t  j d | d | d d d | d g ƒ S(   Ni
   i   i    i   (   R   R
   (   R:   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   o  s    c         C   s'   t  j d | d d g d d g g ƒ S(   Niìÿÿÿi    i
   iÿÿÿÿ(   R   R
   (   R:   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   r  s    c         C   s^   |  j  d | ƒ } |  j d | ƒ } | j ƒ  j | ƒ t j d | d d g d d g g ƒ S(   NR   iìÿÿÿi    (   R$   R&   R'   R(   R   R
   (   R:   R   R$   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   u  s    (   RS   RT   R”   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRÂ   d  s   				t   helical_valley_functionc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s   |  j  d k s t ‚ |  j d k s* t ‚ t j d d d g ƒ |  _ d |  _ d |  _ t j d d d g ƒ |  _ d |  _	 d  S(   Ni   iÿÿÿÿi    i   (
   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   }  s    		c         C   s’   | \ } } } | d k s! t  ‚ t j | | ƒ d t j } | d k  rX | d 7} n  | d  j ƒ  } t j d | d | d | d | g ƒ S(   Ni    i   g      à?i
   i   (   R   R   t   atant   piR1   R   R
   (   R:   R   t   x1t   x2t   x3t   tt   nx(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   †  s     c   	      C   s†   | \ } } } | d  j  ƒ  } | | } d t j | } d | } t j | | | | d g | | | | d g d d d g g ƒ S(   Ni   i2   i
   i    i   (   R1   R   RÅ   R   R
   (	   R:   R   RÆ   RÇ   RÈ   RÊ   t   nx2t   k1t   k2(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   Ž  s    

c         C   sc  | \ } } } | d  j  ƒ  } | | } d t j | } d | } |  j d | ƒ }	 |  j d | ƒ }
 |
 j ƒ  j |
 ƒ } | d } | d } | | } |	 d | | t j d | | | g | | d | g g ƒ |	 d | | t j | | g | | g g ƒ } xO d d g D]A } x8 d d g D]* }
 | | d |
 c | | d |
 7<q-WqW| S(	   Ni   i2   i
   R   i    iþÿÿÿi   i   (	   R1   R   RÅ   R$   R©   R'   R(   R   R
   (   R:   R   RÆ   RÇ   RÈ   RÊ   RË   RÌ   RÍ   R$   R   R¥   t   q1t   q2t   pt   termsR   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   ™  s"    




>4,(   RS   RT   R”   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRÃ   {  s   				t   powell_singular_functionc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s…   |  j  d k s t ‚ |  j d k s* t ‚ t j d d d d g ƒ |  _ d |  _ d |  _ t j d d d d g ƒ |  _ d |  _	 d  S(   Ni   i   iÿÿÿÿi    i   g:Œ0âŽyE>(
   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   ®  s    		c         C   s   t  | |  j d ƒ s t ‚ d  S(   Ngñhãˆµøä>(   R   R4   R   (   R:   R4   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR²   ·  s    c         C   sS   | \ } } } } t  j | d | d | | | d | d d | | d g ƒ S(   Ni
   i   g      à?i   g¨ô—›wã@gS[Ú:XL	@(   R   R
   (   R:   R   RÆ   RÇ   RÈ   t   x4(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   º  s    c   
   	   C   s˜   | \ } } } } | d | } | | } d	 } d
 }	 t  j d d d d g d d | | g d d | d | d g d |	 | d d d |	 | g g ƒ S(   Ni   i   g      à?i
   i   i    iüÿÿÿiþÿÿÿg¨ô—›wã@gS[Ú:XL	@(   R   R
   (
   R:   R   RÆ   RÇ   RÈ   RÓ   t   d3t   d4t   s5t   s10(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   Â  s    
c   	   
   C   sÒ   d } |  j  d | ƒ \ } } } } |  j d | ƒ } | j ƒ  j | ƒ } | t j | d | d d | d | g d | d | d d g d | d | d d g | d | d d | d | g g ƒ 7} | S(	   Ni
   g      à?R   i   i    i   i   gS[Ú:XL	@(   R$   R©   R'   R(   R   R
   (	   R:   R   R×   t   f1t   f2t   f3t   f4R   R¥   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   Î  s    	 *(   RS   RT   R”   R²   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRÒ   ¬  s
   					t   freudenstein_and_roth_functionc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s”   |  j  d k s t ‚ |  j d k s* t ‚ t j d d g ƒ |  _ d |  _ d |  _ t j d d g ƒ d
 t j d d g ƒ d |  _ d	 |  _	 d  S(   Ni   g      à?iþÿÿÿi   i5   i   i   i   gÛ�Iü}8@g§VTYüÂ@(
   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   Ü  s    		3c         C   sO   | \ } } t  j | | d | d | d | | d | d | d g ƒ S(   Ni   i   i   i   i   i   (   R   R
   (   R:   R   RÆ   RÇ   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   å  s    c         C   sK   | \ } } t  j d d | d d | g d d | d d | g g ƒ S(   Ni   iþÿÿÿi
   i   iòÿÿÿi   (   R   R
   (   R:   R   RÆ   RÇ   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   ë  s    c         C   s{   | \ } } |  j  d | ƒ \ } } |  j d | ƒ } | j ƒ  j | ƒ } | d c | d d | | d d | 7<| S(   NR   i   i
   i   i   (   R$   R©   R'   R(   (   R:   R   RÆ   RÇ   RØ   RÙ   R   R¥   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   ñ  s    ,(   RS   RT   R”   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRÜ   Ú  s   				t   bard_functionc           B   s_   e  Z d  d d d d d d d d d	 d
 d d d d g Z d „  Z d „  Z d „  Z d „  Z RS(   gìQ¸…ëÁ?g
×£p=
Ç?g)\�Âõ(Ì?g      Ð?g�Âõ(\�Ò?g{®GázÔ?gffffffÖ?gö(\�ÂõØ?g®Gáz®×?g�Âõ(\�â?g\�Âõ(\ç?g¸…ëQ¸î?gq=
×£põ?gÍÌÌÌÌÌ @g�Âõ(\�@c         C   s   |  j  d k s t ‚ |  j d k s* t ‚ t j d d d g ƒ |  _ d |  _ d |  _ t j d d d g ƒ |  _ d |  _	 d  S(	   Ni   i   i   g:Œ0âŽyE>gß¥Ô%ãµ?gíS[ê ò?gÇc*ã¿@g¬F†‡öÒp?(
   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   þ  s    		c         C   s§   | \ } } } t  j ƒ  } x… t t d d ƒ t j ƒ D]h \ } } | } d | }	 t | |	 ƒ }
 | |	 | |
 } | d k s† t ‚ | j | | | | ƒ q7 W| S(   Ni   i   i   i    i   (	   R   R
   t   zipRÁ   RÝ   t   yst   minR   R¡   (   R:   R   RÆ   RÇ   RÈ   R¥   R   t   yit   uit   vit   wit   denominator(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$     s    (
c         C   sÎ   | \ } } } t  j ƒ  } x� t d d ƒ D]| } | } d | } t | | ƒ }	 | | | |	 d }
 |
 d k sx t ‚ | j t  j d | | |
 | |	 |
 g ƒ ƒ q+ W| j t  j |  j |  j	 ƒ ƒ | S(   Ni   i   i   i   i    iÿÿÿÿi   (
   R   R
   R   Rà   R   R¢   R£   R¤   Rh   R   (   R:   R   RÆ   RÇ   RÈ   R¥   R   Râ   Rã   Rä   Rå   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©     s    
3c         C   s  | \ } } } |  j  d | ƒ } | j ƒ  j | ƒ } xÓ t t d d ƒ |  j d | ƒ ƒ D]­ \ } } | }	 d | }
 t |	 |
 ƒ } | |
 | | d } | d k s® t ‚ | d |	 | } | d	 c | |
 d 8<| d
 c | |
 | 8<| d c | | d 8<q[ W| d | d <| S(   NR   i   i   i   i   i    i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   R©   R'   R(   RÞ   R   R$   Rà   R   (   R:   R   RÆ   RÇ   RÈ   R   R¥   R   t   fiRâ   Rã   Rä   Rå   t   term(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±      s    1
(   RS   RT   Rß   R”   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRÝ   ù  s   				t   kowalik_and_osborne_functionc           B   sz   e  Z d  d d d d d d d d d	 d
 g Z d d d d d d d d d d d g Z d „  Z d „  Z d „  Z d „  Z RS(   g±áé•²É?g]þCúíëÈ?gh‘í|?5Æ?g{®GázÄ?g^KÈ=›µ?g"Žuq°?gÔ+eâX§?gßà“©‚¡?gaTR' ‰ ?gªñÒMb˜?g�(í¾0™?g      @g       @g      ð?g      à?g      Ð?gÇK7‰A`Å?g      À?gš™™™™™¹?g¥½Á&Sµ?g×4ï8EG²?g      °?c         C   s…   |  j  d k s t ‚ |  j d k s* t ‚ t j d d d d g ƒ |  _ d |  _ d |  _ t j d d	 d
 d g ƒ |  _ d |  _	 d  S(   Ni   i   g      Ð?gö(\�ÂõØ?g�Âõ(\�Ú?i   gš™™™™™¹?gýEFËå­È?gFÜyð{È?g.²˜¡€¿?g
zIŽ}jÁ?gcœ6'$?(
   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   8  s    		c   
      C   s�   | \ } } } } t  j ƒ  } xh t t j t j ƒ D]Q \ } } | | | | }	 |	 d k sd t ‚ | j | | | | | |	 ƒ q4 W| S(   Ni    (   R   R
   RÞ   Rè   Rß   t   usR   R¡   (
   R:   R   RÆ   RÇ   RÈ   RÓ   R¥   Rá   Râ   Rå   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   B  s    %c   
   	   C   sñ   | \ } } } } t  j ƒ  } x­ t j D]¢ } | | | | } | d k sR t ‚ | d }	 |	 d k sn t ‚ | j t  j | | | | | | | | d | | | |	 | | | | |	 g ƒ ƒ q( W| j t  j |  j |  j	 ƒ ƒ | S(   Ni    i   (
   R   R
   Rè   Ré   R   R¢   R£   R¤   Rh   R   (
   R:   R   RÆ   RÇ   RÈ   RÓ   R¥   Râ   Rå   t   denominator_sq(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   L  s    
!c         C   sV  | \ } } } } |  j  d | ƒ } | j ƒ  j | ƒ } xÄt t j |  j d | ƒ ƒ D]¤\ } }	 | | | | }
 |
 d k sˆ t ‚ |
 d } | d k s¤ t ‚ |
 d } | d k sÀ t ‚ | d c d 8<| d c |	 | |
 8<| d	 c |	 | d | | | 8<| d
 c |	 | | | | 8<| d c d 8<| d c |	 | d | | 8<| d c |	 | | | 8<| d c |	 d | d | | | | 8<| d c |	 d | d | | | | 8<| d c |	 d | | | | | 8<qX WxO t d d ƒ D]> } x5 t | d d ƒ D]  } | | | f | | | f <q*WqW| S(   NR   i    i   i   i   i   (   i    i    (   i    i   (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (	   R©   R'   R(   RÞ   Rè   Ré   R$   R   R   (   R:   R   RÆ   RÇ   RÈ   RÓ   R   R¥   Râ   Ræ   Rå   Rê   t   denominator_cuR   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   \  s0    +

%!!,,,"(   RS   RT   Rß   Ré   R”   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRè   1  s   	
	
	t   meyer_functionc           B   sž   e  Z d  d d d d d d d d d	 d
 d d d d d g Z g  e d d ƒ D] Z d d e ^ qL Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(   iÜ‡  iÂo  ib\  i®L  iò?  i˜5  i-  i&  iE   iv  iu  i  iK  iì  ië  i8  i   i   i-   i   c         C   s‘   |  j  d k s t ‚ |  j d k s* t ‚ t j d d d g ƒ |  _ d |  _ d |  _ t j d d	 d
 g ƒ |  _ d |  _	 d |  _
 d |  _ d  S(   Ni   i   g{®Gáz”?i   iú   g�íµ ÷Æ°>id   g¾ äR!úv?g§!ªX%¸@gÔß”“u@g° äˆüE@gü©ñÒMbP?g{®Gáz„?(   Rh   R   R   R   R
   R;   R¶   R½   R4   R•   R’   R“   (   R:   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR”   |  s    				c         C   s1   |  j  r- d t |  j ƒ GHd t | ƒ GHn  d  S(   Ns!     expected x_star: %.6g %.6g %.6gs!       actual x_star: %.6g %.6g %.6g(   R�   t   tupleR4   (   R:   R4   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR²   ˆ  s    	c         C   s3   |  j  r/ d |  j GHd d | j ƒ  d GHn  d  S(   Ns'     expected 0.5*f_x_star.norm()**2: %.6gs'       actual 0.5*f_x_star.norm()**2: %.6gg      à?i   (   R�   R•   R1   (   R:   R5   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR³   �  s    	c   	      C   sœ   | \ } } } t  j ƒ  } xa t t j t j ƒ D]J \ } } | | } | d k sY t ‚ | j | t j	 | | ƒ | ƒ q1 W| d d k r˜ t
 ‚ n  | S(   Ni    id   (   R   R
   RÞ   Rì   Rß   t   tsR   R¡   R   t   expRŽ   (	   R:   R   RÆ   RÇ   RÈ   R¥   Rá   t   tiRå   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR$   ’  s    
&	c   
      C   sÑ   | \ } } } t  j ƒ  } x� t j D]… } | | } | d k sG t ‚ | d } | d k sc t ‚ t j | | ƒ }	 | j t  j |	 | |	 | | |	 | | g ƒ ƒ q% W| j t  j	 |  j
 |  j ƒ ƒ | S(   Ni    i   (   R   R
   Rì   Rî   R   R   Rï   R¢   R£   R¤   Rh   R   (
   R:   R   RÆ   RÇ   RÈ   R¥   Rð   Rå   Rê   Rç   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR©   ž  s    

c         C   s÷  | \ } } } t  j t  j d d ƒ d ƒ } xFt j D];} | | } | d k sY t ‚ | d } | d k su t ‚ | d }	 |	 d k s‘ t ‚ | d }
 |
 d k s­ t ‚ t j | | ƒ } | d c d 8<| d c | | 8<| d	 c | | | 8<| d
 c | | | 8<| d c | | | |	 | | | 8<| d c | | d | |
 d | | | |	 8<q7 WxO t d d ƒ D]> } x5 t | d d ƒ D]  } | | | f | | | f <q Wq†W|  j	 d | ƒ } | | j
 ƒ  j | ƒ 7} | S(   Ni   i    i   i   i   R   (   i    i    (   i    i   (   i    i   (   i   i   (   i   i   (   i   i   (   R   R
   R¤   Rì   Rî   R   R   Rï   R   R©   R'   R(   (   R:   R   RÆ   RÇ   RÈ   R¥   Rð   Rå   Rê   Rë   t   denominator_qaRç   R   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyR±   ®  s2    



)"i   (   RS   RT   Rß   R   R   Rî   R”   R²   R³   R$   R©   R±   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyRì   v  s   *					c          C   sð  t  j d d ƒ }  xÊt d d ƒ D]¹} t  j | | d ƒ } | j t  j | | ƒ ƒ x$ t | ƒ D] } d | | | f <qd Wt | ƒ } | d  k	 sœ t ‚ t	 | j
 | j ƒ  ƒ | ƒ sÀ t ‚ |  j d | d d ƒ d } t | | ƒ } t	 | j
 | ƒ | ƒ s	t ‚ t  j d | d	 d ƒ } x, t | ƒ D] } | | d | | | f <q.Wt | ƒ } | d  k	 snt ‚ t	 | j
 | j ƒ  ƒ | ƒ s’t ‚ |  j d | d d ƒ d } t | | ƒ } t	 | j
 | ƒ | ƒ s" t ‚ q" Wt  j d
 d d d d d d d d
 g	 ƒ } | j t  j d d ƒ ƒ t | ƒ } | d  k	 s@t ‚ t	 | j
 | j ƒ  ƒ | ƒ sdt ‚ t	 | d d d d d d d d d g	 ƒ s”t ‚ t j d d d d d d d g ƒ } xt d ƒ D]}	 t j j |  j d d d d ƒ d t ƒ}
 t  j |
 | |
 j ƒ  ƒ } | j t  j d d ƒ ƒ t | ƒ } | d  k	 sIt ‚ t	 | j
 | j ƒ  ƒ | ƒ smt ‚ xV d% d& d' d( g D]B } t  j | ƒ } t | | ƒ } t	 | j
 | ƒ | ƒ s€t ‚ q€WqÅWxt d d ƒ D]} xt d ƒ D]÷ } |  j d | | d d ƒ d }
 |
 j t  j | | ƒ ƒ |
 j
 |
 j ƒ  ƒ } t | ƒ } | d  k	 s_t ‚ |  j d | d d ƒ d } t | | ƒ } t	 | j
 | ƒ | ƒ s¨t ‚ | | | | | f c d 9<t | ƒ } | d  k sít ‚ qíWqÚWd  S()   Nt   seedi    i   i
   R   Rm   i   i   t   modulusi   iúÿÿÿi	   iþÿÿÿi   gVô‡fž @gFŽîÌvø Àg.2ÌÌvø @g        g]îÞ}+î¿g]É`UUU@t   sym_mat3i   i   iÿÿÿÿid   ih  t   deggš™™™™™¹?g      à¿g333333Ó¿gffffffæ?gÍÌÌÌÌÌô?g333333@iöÿÿÿiìÿÿÿi   (   gš™™™™™¹?g      à¿i   (   g333333Ó¿gffffffæ?iÿÿÿÿ(   gÍÌÌÌÌÌô?g333333@i   (   iöÿÿÿiìÿÿÿi   (   R   t   mersenne_twisterR   R
   R£   R¤   R   R   R   R   R(   R'   t   random_doubleR    t   random_size_tR   t   symR-   R   t   euler_angles_as_matrixR2   t	   transpose(   t   mtR   R   R   R   R   R   R   t   a0t   i_trialt   r(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   exercise_choleskyÉ  sp     $ $"*$		$	!$& c       	   C   sd  d t  j d k }  t ƒ  t } d s, | r€ xQ t d d ƒ D]= } x4 t d | d ƒ D] } t d | d | d |  ƒ qV Wq< Wn  d sŒ | rà xQ t d d ƒ D]= } x4 t d | d ƒ D] } t d | d | d |  ƒ q¶ Wqœ Wn  d sì | r@xQ t d d ƒ D]= } x4 t d | d ƒ D] } t d | d | d |  ƒ qWqü Wn  d sL| rht d d
 d d
 d |  ƒ n  d st| r�t	 d d d d d |  ƒ n  d sœ| r¸t
 d d d d d |  ƒ n  d sÄ| ràt d d
 d d
 d |  ƒ n  d sì| rt d d d d d |  ƒ n  d s| r0t d d d d d |  ƒ n  d s<| rXt d d d d d |  ƒ n  t ƒ  GHd  S(   Ns	   --verbosei   i    i   Rh   R   R�   i   i   i   i   i   i   i   i   i   i   (   t   syst   argvR   R2   R   R¼   R¾   RÀ   RÂ   RÃ   RÒ   RÜ   RÝ   Rè   Rì   R   (   R�   t   default_flagRh   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   exercise  s>    $$t   __main__(    (    (    (    (    (    (.   t   __doc__t
   __future__R    t   scitbx.mathR-   t   scitbx.linalgR   t   scitbx.array_familyR   t   libtbx.test_utilsR   t   libtbx.utilsR   R   R  t   scitbx.minpackt   scitbx.lbfgst   scitbx.lbfgsbRž   t   ImportErrorR   t!   floating_point_epsilon_double_getRX   R   R    R!   RU   Rg   R|   R†   t   RuntimeErrorRŽ   R�   R¼   R¾   RÀ   RÂ   RÃ   RÒ   RÜ   RÝ   Rè   Rì   R   R  RS   (    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/examples/immoptibox_ports.pyt   <module>   sR   
	Qa/&%¹1.8ES	;	!