ó
V™xTc           @   s�  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 „  Z d „  Z e
 j Z e
 j Z e
 j Z e
 j Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z d d „ Z  d d d d d d d „ Z! d d$ d „  ƒ  YZ" d e# d „ Z$ d d d e# d „ Z& d  d% d! „  ƒ  YZ' d d d" „ Z( e) d# k r™e( ƒ  n  d S(&   iÿÿÿÿ(   t   division(   t   lbfgs(   t   flex(   t   adopt_init_argsNc         C   sˆ   |  \ } } t  j d t  j d t  j d | | | d ƒ t  j | | d d | | | | | d d | | | d ƒ ƒ S(   Ni   i   i   (   t   matht   logt   sqrtt   pit   exp(   t   .0t   s11t   s12t   s22t   xt   y(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   gauss2d0	   s    	c         C   s†   |  \ } } | t  j | d | d ƒ } t  j | ƒ } t  j | ƒ }	 | | | |	 }
 | | | |	 } t |
 | f | | | ƒ S(   Ni   (   R   R   t   cost   sinR   (   R	   R
   R   R   t   twistR   R   t   argt   ct   st   xtt   yt(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   twisted_gauss2d0   s    	c      
   C   s  |  \ } } | d k o! | d k r+ d Sn  d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ t  | t | d | d ƒ ƒ | | | t  | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ t  | t | d | d ƒ ƒ | | | t  | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t  | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t  | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | d | | S(   Ni    g        iþÿÿÿi   g       @(   t   Cost   Sqrtt   Sin(   R	   R
   R   R   R   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   analytic_grad_x   s    	 ÿ ÿ ÝOaDc      
   C   s  |  \ } } | d k o! | d k r+ d Sn  d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t  | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t  | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ t  | t | d | d ƒ ƒ | | | t  | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | | t  | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ t  | t | d | d ƒ ƒ | | | t  | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | d | | S(   Ni    g        iþÿÿÿi   g       @(   R   R   R   (   R	   R
   R   R   R   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   analytic_grad_y3   s    	 ÿ ÿ ßOaDc      
   C   sR
  |  \ } } | d k o! | d k r+ t  Sn  d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ d | t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d d | d | | S(   Ni    iþÿÿÿi   g      ø?i   i   g       @(   t   NoneR   R   R   (   R	   R
   R   R   R   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   analytic_curv_xxL   s"    	 .ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ jaHc      
   C   sT
  |  \ } } | d k o! | d k r+ t  Sn  d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d d | | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d d | d | | S(   Ni    iþÿÿÿi   i   g      ø?i   g       @(   R   R   R   R   (   R	   R
   R   R   R   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   analytic_curv_yy�   s"    	 .ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ laHc      
   C   sô  |  \ } } | d k o! | d k r+ t  Sn  d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | | t | t | d | d ƒ ƒ | t | t | d | d ƒ ƒ | | | d t | t | d | d ƒ ƒ | d | d d | d | d | t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ | | d | t | t | d | d ƒ ƒ | d | d d | d | | d t | t | d | d ƒ ƒ | d | d | | t | t | d | d ƒ ƒ t | d | d ƒ d | t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ d | t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | | | d t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ t | t | d | d ƒ ƒ | | | t | t | d | d ƒ ƒ t | d | d ƒ | | d t | t | d | d ƒ ƒ t | d | d ƒ d | d | | S(   Ni    i   g      ø?g       @(   R   R   R   R   (   R	   R
   R   R   R   R   R   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   analytic_curv_xy¶   s&    	 9ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ n«aDg�íµ ÷Æ°>c   
      C   s`   |  \ } } t  | | | f | | | | ƒ } t  | | | f | | | | ƒ }	 |	 | d | S(   Ni   (   R   (
   R	   R
   R   R   R   t   epsR   R   t   tmt   tp(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   finite_grad_xù   s    	""c   
      C   s`   |  \ } } t  | | | f | | | | ƒ } t  | | | f | | | | ƒ }	 |	 | d | S(   Ni   (   R   (
   R	   R
   R   R   R   R"   R   R   R#   R$   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   finite_grad_yþ   s    	""c   
      C   sf   |  \ } } t  | | | f | | | | | ƒ } t  | | | f | | | | | ƒ }	 |	 | d | S(   Ni   (   R%   (
   R	   R
   R   R   R   R"   R   R   R#   R$   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   finite_curv_xx  s    	%%c   
      C   sf   |  \ } } t  | | | f | | | | | ƒ } t  | | | f | | | | | ƒ }	 |	 | d | S(   Ni   (   R&   (
   R	   R
   R   R   R   R"   R   R   R#   R$   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   finite_curv_yy  s    	%%c   
      C   sf   |  \ } } t  | | | f | | | | | ƒ } t  | | | f | | | | | ƒ }	 |	 | d | S(   Ni   (   R%   (
   R	   R
   R   R   R   R"   R   R   R#   R$   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   finite_curv_xy  s    	%%c   
      C   sf   |  \ } } t  | | | f | | | | | ƒ } t  | | | f | | | | | ƒ }	 |	 | d | S(   Ni   (   R&   (
   R	   R
   R   R   R   R"   R   R   R#   R$   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   finite_curv_yx  s    	%%i   i   g333333ó?i   g      à?i    c      
   C   s  xt  |  |  d ƒ D]ð} xçt  |  |  d ƒ D]Ñ} g  | | f D] } | t |  ƒ ^ qC }	 d sk | rŠ d t |	 | | | | ƒ GHHn  x” t t f t t f f D]z \ }
 } |
 |	 | | | | ƒ } | |	 | | | | ƒ } d së | rd G| GHd G| GHHn  t | | ƒ d k  s£ t ‚ q£ WxÝ t	 t
 f t t f t t f t t f f D]± \ }
 } |
 |	 | | | | ƒ } | |	 | | | | ƒ } d s”| rªd G| GHd G| GHHn  |	 d d g k rLt | | ƒ t d t t | ƒ t | ƒ ƒ ƒ d	 k  sýt ‚ qLqLWq0 Wq Wd  S(
   Ni   i    s   value: %5.3fs   fg:s   ag:gñhãˆµøä>s   fc:s   ac:gü©ñÒMbP?(   t   xranget   floatR   R%   R   R&   R   t   abst   AssertionErrorR'   R   R(   R    R)   R!   R*   t   maxt   min(   t   nR
   R   R   R   t   verboset   ixt   iyt   it   xyt   ft   at   fgt   agt   fct   ac(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   verify_derivatives  s6    )		 				t   fortran_minimizerc           B   s    e  Z d  „  Z d e d „ Z RS(   c         C   s   d d  l  } | j ƒ  |  _ | j ƒ  |  _ | j | j |  j ƒ | j ƒ |  _ | j | j |  j ƒ | j ƒ |  _ | j | j |  j ƒ | j ƒ |  _ d d g |  _	 d |  _
 | j ƒ  |  _ |  j d |  j d d |  j } | j | j | ƒ | j ƒ |  _ | j d g | j ƒ |  _ d  S(   Niÿÿÿÿi   i    gñhãˆµøä>i   (   t   numpyR1   t   mt   arrayt   aranget   float64R   t   gt   diagt   iprintR"   t   xtolt   wt   int32t   iflag(   t   selft   scitbx_minimizerR?   t   size_w(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   __init__6  s    $$$	#!c   	      C   sw  x' t  | ƒ D] \ } } | |  j | <q Wx' t  | ƒ D] \ } } | |  j | <q7 W| d  k	 r� x* t  | ƒ D] \ } } | |  j | <qm Wn  d d l m } | |  j |  j |  j | |  j | |  j |  j	 |  j
 |  j |  j |  j ƒ x' t  |  j ƒ D] \ } } | | | <qö Wx' t  |  j ƒ D] \ } } | | | <q W| d  k	 rsx* t  |  j ƒ D] \ } } | | | <qVWn  d  S(   Niÿÿÿÿ(   R   (   t	   enumerateR   RD   R   RE   t   fortran_lbfgsR   R1   R@   RF   R"   RG   RH   RJ   (	   RK   R   R7   RD   RE   t   diagcoR5   t   vRP   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   __call__D  s&       "   N(   t   __name__t
   __module__RN   R   t   FalseRS   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyR>   4  s   	i † c         C   sb  t  j } | j |  j ƒ } t | ƒ } d } t } | } x| sR | sR t ‚ n  |  d | d | ƒ \ }	 }
 } } | r™ d Gt |	 ƒ G|
 Gt | ƒ GHn d Gt |	 ƒ G|
 GHt j	 j
 ƒ  t j j
 ƒ  | |	 |
 | d | d | ƒd G| j d GH| j d d k r	Pn  | j d d	 k } | j d d
 k } | r< | d	 7} | | k rRPqRq< q< | | _ | S(   Ni    t   requests_f_and_gt   requests_diags   x,f,d:s   x,f:RE   RQ   s   iflag:i   i   (   t   scitbx_lbfgst   extt	   minimizerR1   R>   t   TrueR.   t   tuplet   syst   stdoutt   flusht   stderrRJ   t   n_calls(   t   target_evaluatort	   max_callst   use_curvaturesRZ   RL   R[   t   icallRW   RX   R   R7   RD   t   d(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   fortran_lbfgs_runS  s:    	  
 
	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   RW   RX   s   x,f,d:s   x,f:(   RY   RZ   R[   R1   R   t   errort   traditional_convergence_testt   RuntimeErrort   drop_convergence_testR\   R]   R   t   doublet   sizet   runRW   RX   R.   t   itert   strRb   (   Rc   t   min_iterationst   max_iterationsRj   Re   RZ   R[   t   is_convergedRf   RW   RX   R   R7   RD   Rg   t   have_requestt   e(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt	   lbfgs_runs  sb    		  !   	t   twisted_gaussian_minimizerc           B   s;   e  Z d  d d d d d d „ Z d d d „ Z d „  Z RS(	   i   g333333ó?i   g      à?i    i'  c         C   s8   t  |  t ƒ  ƒ t j | ƒ |  _ |  j j ƒ  |  _ d  S(   N(   R   t   localsR   Rm   R   Rn   R1   (   RK   R   R
   R   R   R   Rr   Rs   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyRN   ­  s    c      	   C   sb   | s3 t  d |  d |  j d |  j d | ƒ |  _ n t d |  d | ƒ |  _ |  d t d t ƒ |  S(   NRc   Rr   Rs   Re   RW   RX   (   Rw   Rr   Rs   R[   Rh   R\   RV   (   RK   t   use_fortranRe   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyRo   ³  s    		c         C   sØ  | r | r t  } t  } n  | r³ t |  j |  j |  j |  j |  j ƒ |  _ t j	 t
 |  j |  j |  j |  j |  j ƒ t |  j |  j |  j |  j |  j ƒ f ƒ |  _ d  |  _ n  | r¼t j	 t |  j |  j |  j |  j |  j ƒ t |  j |  j |  j |  j |  j ƒ f ƒ |  _ t j	 t |  j |  j |  j |  j |  j ƒ t |  j |  j |  j |  j |  j ƒ f ƒ |  _ |  j j d ƒ s…t ‚ t |  j ƒ Gd GHt |  j ƒ Gd GHd |  j |  _ n  |  j |  j |  j |  j f S(   Ni    t   finitet   analytici   (   R\   R   R   R
   R   R   R   R7   R   Rm   R%   R&   RD   R   Rg   R   R    R'   R(   t   dft   all_neR.   R]   (   RK   RW   RX   (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyRS   Á  s*    	*$0$0$0(   RT   RU   RN   Ro   RS   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyRx   «  s   c   	      C   sù  t  j d ƒ d t j d k r* t ƒ  n  d t j d k } xµt d ƒ D]§} g  d D] } t  j  ƒ  |  ^ qW } | Gd GHxrt t f D]d} t d | d | ƒ j	 d	 t d
 | ƒ } | GHt
 | j ƒ Gd GH| rOt d | d | ƒ j	 d	 t d
 | ƒ } | j j | j ƒ st ‚ | j j G| j j GH| j j d | j j k sOt ‚ n  t | j d ƒ d k s�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‰ WqJ Wd  S(   Ni    s   --verifyi   s	   --fortranid   t   startR   R   Rz   Re   t   finalg-Cëâ6?s   failure, use_curvatures=s   iter,exception:s   n_calls:(   i    i   (   t   randomt   seedR^   t   argvR=   R+   RV   R\   Rx   Ro   R]   R   t   all_eqR.   R[   Rb   R-   Rq   Rp   Ri   t   nfun(	   t   scaleR   Rz   t	   iterationR5   R   Re   R@   t   mf(    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyRo   Ø  s4    
#			%2!t   __main__(    (    (*   t
   __future__R    t   scitbxR   RY   t   scitbx.array_familyR   t   libtbxR   R�   R   R^   R   R   R   R   R   R   R   R   R   t   PiR   R   R   R    R!   R%   R&   R'   R(   R)   R*   R=   R>   RV   Rh   R   Rw   Rx   Ro   RT   (    (    (    sO   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgs/dev/twisted_gaussian.pyt   <module>   sF   									5	5	C 4-