ó
+™xTc           @   si   d  d l  m Z d  d l m Z d  d l m Z d  d l Z d d	 d „  ƒ  YZ d e	 f d „  ƒ  YZ
 d S(
   iÿÿÿÿ(   t   division(   t   crystal(   t   flexNt   emptyc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyR      s    t   lbfgsc        	   B   sD   e  Z d d d d e d d d d  „ Z d „  Z d „  Z d „  Z RS(   c      	   C   s·  | d  k r$ t j j d d ƒ } n  |	 |  _ |
 |  _ t ƒ  |  _ d
 \ |  _ |  _	 | r¬ t
 j | ƒ |  _ | j |  j ƒ |  j _ t
 j |  j j j ƒ  d d ƒ |  _ n( d  |  _ t
 j | j ƒ  d d ƒ |  _ | |  j _ | |  j _ | |  j _ | |  j _ | |  j _ d  |  _ t j j d |  d | d | d | ƒ |  _ |  j ƒ  |  j d	 t ƒ |  j j |  _ | j ƒ  | j  |  j j ƒ |  ` |  ` |  j j! |  _" |  j j! |  _# d  S(   Nt   max_iterationsiè  i   i    t   target_evaluatort   termination_paramst   core_paramst   exception_handling_paramst   compute_gradients(   NN($   t   Nonet   scitbxR   t   termination_parameterst   site_labelst   states_collectorR   t   tmpt
   rmsd_bondst   rmsd_anglesR   t   boolt   sites_cart_selectiont   selectt   reduced_sites_cartt   doublet   sizet   xt   geometry_restraints_managert   geometry_restraints_flagst   disable_asu_cachet
   sites_cartt   sites_shiftedt   first_target_resultt   runt	   minimizert   apply_shiftst   compute_targett   Truet   target_resultt   final_target_resultt   cleart   extendt   targett   first_target_valuet   final_target_value(   t   selfR   R   R   t   lbfgs_termination_paramst   lbfgs_core_paramst   lbfgs_exception_handling_paramsR   R   R   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyt   __init__
   sB    		(		

c      	   C   sJ  |  j  rY |  j j t j |  j ƒ } |  j j j ƒ  |  j _ |  j j j	 |  j  | ƒ n" |  j j t j |  j ƒ |  j _ |  j
 d  k	 r¦ |  j
 j d |  j j ƒ n  |  j j j d  k	 rF|  j j j } |  j j j } | d  k	 së t ‚ xX | j ƒ  D]G } t j d | d | j | ƒ j ƒ  d |  j j | ƒ |  j j | <qø Wn  d  S(   NR   t   crystal_symmetryt
   special_opt	   site_cart(   R   R   R   R   t   vec3_doubleR   R   t	   deep_copyR    t   set_selectedR   R   t   addR   R3   t   site_symmetry_tablet   AssertionErrort   special_position_indicesR   t   correct_special_positiont   getR4   (   R.   t   shiftedR3   R:   t   i_seq(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyR$   8   s     	"	c         C   sO   |  j  j j d |  j  j d |  j  j d | d |  j  j d |  j ƒ |  j  _ d  S(   NR   t   flagsR   R   R   (   R   R   t   energies_sitesR    R   R   R   R'   (   R.   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyR%   L   s    c         C   sÕ   |  j  d  k r* |  j j d ƒ s4 t ‚ n
 |  j ƒ  |  j d t ƒ |  j j	 j
 |  _ |  j  d  k rw |  j j	 |  _  n  |  j r­ |  j j	 j } | j |  j ƒ j ƒ  |  _ n |  j j	 j j ƒ  |  _ |  j |  j f S(   Ni    R   (   R!   R   R   t   all_eqR;   R$   R%   R&   R   R'   R+   t   fR   t	   gradientsR   t	   as_doublet   g(   R.   t   ptr(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyt    compute_functional_and_gradientsU   s    
	N(   R   R   R   t   FalseR2   R$   R%   RI   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyR      s   $			(    (   t
   __future__R    t   cctbxR   t   cctbx.array_familyR   t   scitbx.lbfgsR   R   t   objectR   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/geometry_restraints/lbfgs.pyt   <module>   s
   