ó
\™xTc           @   sr   d  Z  d d l m Z d d
 d „  ƒ  YZ d „  Z d „  Z e d k rn d d l m Z	 e e	 ƒ e e	 ƒ n  d	 S(   s›   
Inspired by Press, Teukolsky, Vetterling, Flannery (1992).
Numerical Recipes in C.  Cambridge University Press.
Chapter 3.3.  Cubic Spline Interpolation.
iÿÿÿÿ(   t   divisiont   cubic_splinec           B   s    e  Z d d d  „ Z d „  Z RS(   c         C   sù  d d l  m } t | ƒ t | ƒ k s. t ‚ | j t | ƒ ƒ } | j t | ƒ ƒ |  _ | d  k r� d |  j d <d | d <nK d |  j d <d | d | d | d | d | d | d | | d <xt d t | ƒ d ƒ D]ö } | | | | d | | d | | d } | |  j | d d }	 | d	 |	 |  j | <| | d | | | | d | | | | | | d | | | | d | | <d
 | | | | d | | d | | | d |	 | | <qæ Wt | ƒ }
 | d  k rd } d } nX d } d | |
 d | |
 d | | |
 d | |
 d | |
 d | |
 d } | | | |
 d | |  j |
 d d	 |  j |
 d <xI t |
 d d d ƒ D]1 } |  j | |  j | d | | |  j | <q®W| |  _ | |  _	 d  S(   Niÿÿÿÿ(   t   flexg        i    g      à¿g      @i   g       @g      ð?g      @g      à?i   (
   t   scitbx.array_familyR   t   lent   AssertionErrort   doublet   deriv2t   Nonet   xranget   xarrt   yarr(   t   selfR
   R   t	   lo_deriv1t	   hi_deriv1R   t   temput   it   sigt   pt   NXt   qnt   unt   k(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/cubic_spline.pyt   __init__	   s8     > .'/B 	78/	c         C   s  d } t  |  j ƒ d } xD | | d k r_ | | d ?} |  j | | k rV | } q | } q W|  j | |  j | } | d k sŠ t ‚ |  j | | | } | |  j | | } | |  j | | |  j | | | | | |  j | | | | | |  j | | | d S(   Ni    i   g      @(   R   R
   R   R   R   (   R   t   xt   klot   khiR   t   ht   at   b(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/cubic_spline.pyt   get_y+   s     	
N(   t   __name__t
   __module__R   R   R   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/cubic_spline.pyR      s   "c         C   sÌ   d d  l  } t d d ƒ } g  | D] } | j | ƒ ^ q" } t | | ƒ } g  t d d ƒ D] } | d d ^ q\ } g  | D] } | j | ƒ ^ q} } |  j | | d ƒ |  j | | d ƒ |  j ƒ  d  S(	   Niÿÿÿÿi    i   ie   g      à?g      $@s   r+s   g.(   t   mathR	   t   sinR   R   t   plott   show(   t   pltR!   R
   R   R   t   CSt   xsamt   ysam(    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/cubic_spline.pyt   test_case_19   s    "*"c      	   C   s×   d d  l  } t d d ƒ } d d d d d d d	 d
 d g	 } t | | d d d d ƒ} g  t d d ƒ D] } | d d ^ qg } g  | D] } | j | ƒ ^ qˆ } |  j | | d ƒ |  j | | d ƒ |  j ƒ  d  S(   Niÿÿÿÿiüÿÿÿi   g        g333333Ã?gìQ¸…ëñ?gáz®Gá@g\�Âõ(\÷?g\�Âõ(\ß?g¸…ëQ¸®?R   R   i×ÿÿÿi)   g      à?g      $@s   r+s   g.(   R!   R	   R   R   R#   R$   (   R%   R!   R
   R   R&   R   R'   R(   (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/cubic_spline.pyt   test_case_2D   s    !*"t   __main__(   t   pyplotN(    (
   t   __doc__t
   __future__R    R   R)   R*   R   t
   matplotlibR,   R%   (    (    (    sF   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/math/cubic_spline.pyt   <module>   s   1		
