ó
6™xTc           @   s�   d  d l  m Z d  d l Z d d d „  ƒ  YZ d e f d „  ƒ  YZ d d d „  ƒ  YZ d	 „  Z d
 „  Z d d d „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionNt
   parametersc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   t   alphat   gt   ffpt   fdp(   t   selfR   R   R   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   __init__   s    			c         C   s   |  j  |  j |  j |  j g S(   N(   R   R   R   R   (   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   as_list   s    (   t   __name__t
   __module__R   R   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyR      s   	t	   gradientsc           B   s   e  Z RS(    (   R	   R
   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyR      s    t
   curvaturesc           B   s   e  Z d  „  Z RS(   c         C   s:   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   alpha_alphat   alpha_gt	   alpha_ffpt	   alpha_fdpt   g_ffpt   g_fdp(   R   R   R   R   R   R   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyR      s    					(   R	   R
   R   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyR      s   c         C   s.   g  } x! |  D] } | j  | j ƒ  ƒ q W| S(   N(   t   extendR   (   t   paramst   resultt   p(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   pack_parameters   s    c         C   s
   t  |  ƒ S(   N(   R   (   t   grads(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   pack_gradients!   s    t   g_exp_i_alpha_sumc           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   R   (   R   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyR   &   s    c         C   sQ   d } xD |  j  D]9 } | | j | j d | j t j d | j ƒ 7} q W| S(   s   Mathematica: f=g Exp[I alpha]i    y              ð?(   R   R   R   R   t   cmatht   expR   (   R   R   R   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   f)   s    7c         C   s•   g  } xˆ |  j  D]} } t j d | j ƒ } | j d | j } | j t d | j | d | d | | d | j | d | j d | ƒ ƒ q W| S(   s3   Mathematica: D[f,g]; D[f,ffp]; D[f,fdp]; D[f,alpha]y              ð?R   R   R   R   (	   R   R   R   R   R   R   t   appendR   R   (   R   R   R   t   ejat   ffpifdp(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   d_params0   s    
c         C   s§   g  } xš |  j  D]� } t j d | j ƒ } | j d | j } | j t d | j | | d | d | d | j d | d | j | d | d d | ƒ ƒ q W| S(   sŸ  Mathematica:
         D[f,alpha,alpha]; D[f,alpha,g]; D[f,alpha,ffp]; D[f,alpha,fdp]
         D[f,g,    alpha]; D[f,g,    g]; D[f,g,    ffp]; D[f,g,    fdp]
         D[f,ffp,  alpha]; D[f,ffp,  g]; D[f,ffp,  ffp]; D[f,ffp,  fdp]
         D[f,fdp,  alpha]; D[f,fdp,  g]; D[f,fdp,  ffp]; D[f,fdp,  fdp]
       Zeros/non-zeros in upper triangle:
         . . . .
           0 . .
             0 0
               0
    y              ð?R   R   R   R   R   R   (	   R   R   R   R   R   R   R   R   R   (   R   R   R   R   R    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt	   d2_params=   s    c         C   sx   g  } | j  ƒ  | j ƒ  } } xR |  j ƒ  D]D } | j t g  | j ƒ  D] } | | j | | j ^ qH Œ  ƒ q, W| S(   s.   Rule for derivatives of sum of roots of unity.(   t   dat   dbR!   R   R   R   t   realt   imag(   R   t   targetR   R#   R$   R!   t   d(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   d_target_d_paramsV   s    6c      	   c   sî  | j  ƒ  | j ƒ  } } | j ƒ  | j ƒ  | j ƒ  } } } |  j ƒ  } |  j ƒ  } d }	 xŠt | | ƒ D]y\ }
 } x`t |
 j	 ƒ  ƒ D]L\ } } g  } x„ | D]| } xs t | j	 ƒ  ƒ D]_ \ } } | | j
 | j
 | | j | j | | j
 | j | j | j
 } | j | ƒ q¾ Wq¥ W| d k r\| |	 c | | j j
 | | j j 7<n  | d k st| d k r§| |	 d | c | | j j
 | | j j 7<n  | d k s¿| d k rò| |	 d | c | | j j
 | | j j 7<n  | d k s
| d k r=| |	 d | c | | j j
 | | j j 7<n  | d k sU| d k rˆ| |	 d | c | | j j
 | | j j 7<n  | d k s | d k rÓ| |	 d | c | | j j
 | | j j 7<n  | VqŒ W|	 d 7}	 qm Wd S(   s2   Product rule applied to da * d.real + db * d.imag.i    i   i   i   i   N(   R#   R$   t   daat   dbbt   dabR!   R"   t   zipt	   enumerateR   R%   R&   R   R   R   R   R   R   R   (   R   R'   R#   R$   R*   R+   R,   R(   t   d2t   i4t   dit   d2it   ixit   dixt   rowt   djt   ixjt   djxt   sum(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   d2_target_d_params_   s@    &F	(   R	   R
   R   R   R!   R"   R)   R:   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyR   $   s   						(    (    (    (	   t
   __future__R    R   R   R   R   R   R   R   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/examples/g_exp_i_alpha_derivatives.pyt   <module>   s   
		