ó
î&]\c           @` sý   d  d l  m Z m Z m Z d  d l Z d  d l m Z m Z m	 Z	 m
 Z
 d  d l m Z d  d l m Z d  d l m Z m Z m Z m Z d d d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d d d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d S(   i    (   t   divisiont   print_functiont   absolute_importN(   t   TestCaset   assert_array_almost_equalt   assert_array_equalt   assert_(   t
   csr_matrix(   t   LinearOperator(   t   ScalarFunctiont   VectorFunctiont   LinearVectorFunctiont   IdentityVectorFunctiont   ExScalarFunctionc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` s   d |  _  d |  _ d |  _ d  S(   Ni    (   t   nfevt   ngevt   nhev(   t   self(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   __init__   s    		c         C` s7   |  j  d 7_  d | d d | d d d | d S(   Ni   i   i    (   R   (   R   t   x(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   fun   s    c         C` s6   |  j  d 7_  t j d | d d d | d g ƒ S(   Ni   i   i    (   R   t   npt   array(   R   R   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   grad   s    c         C` s    |  j  d 7_  d t j d ƒ S(   Ni   i   i   (   R   R   t   eye(   R   R   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   hess   s    (   t   __name__t
   __module__R   R   R   R   (    (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR      s   			t   TestScalarFunctionc           B` s   e  Z d  „  Z d „  Z RS(   c      	   C` s—  t  ƒ  } d } d } d d g } t | j | d | j | j d  t j t j f ƒ } | d 7} | d 7} t | j	 | ƒ t | j	 | ƒ t | j
 | ƒ t | j
 | ƒ t | j | d d | j d  t j t j f ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | j ƒ t | j | j ƒ d d g } | j | ƒ } | j | ƒ }	 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ }
 | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | |
 ƒ t |	 | ƒ d	 d g } | j | ƒ }	 | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t |	 | ƒ d
 d g } | j | ƒ } | j | ƒ }	 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ }
 | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | |
 ƒ t |	 | ƒ d d g } | j | ƒ } | j | ƒ }	 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ }
 | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | |
 ƒ t |	 | ƒ d  S(   Ni    g      ð?g        i   s   2-pointi   i
   g333333Ó?g       @g      @i   (    (    (   R   R	   R   R   R   t   NoneR   t   infR   R   R   t   fR   t   g(   R   t   exR   R   t   x0t   analitt   approxR   t   f_analitt   g_analitt   f_approxt   g_approx(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   test_finite_difference_grad#   s²    	













c      	   C` sŒ  t  ƒ  } d } d } d } d d g } t | j | d | j | j d  t j t j f ƒ } | d 7} | d 7} | d 7} t | j	 | ƒ t | j	 | ƒ t | j
 | ƒ t | j
 | ƒ t | j | ƒ t | j | ƒ t | j | d | j d d  t j t j f ƒ } t t | j t ƒ ƒ xt d d g d d g d	 d g f D]Q } t | j | j ƒ t | j | j ƒ t | j j | ƒ | j j | ƒ ƒ qBW| d 7} | d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }	 | j |	 ƒ }
 | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |	 ƒ } t t | t ƒ ƒ xH d d g d d g d	 d g f D]% } t |
 j | ƒ | j | ƒ ƒ qþW| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }	 | j |	 ƒ }
 | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |	 ƒ } t t | t ƒ ƒ xH d d g d d g d	 d g f D]% } t |
 j | ƒ | j | ƒ ƒ q„W| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }	 | j |	 ƒ } | j |	 ƒ }
 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |	 ƒ } | j |	 ƒ } t t | t ƒ ƒ xH d d g d d g d	 d g f D]% } t |
 j | ƒ | j | ƒ ƒ q2W| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }	 | j |	 ƒ } | j |	 ƒ }
 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |	 ƒ } | j |	 ƒ } t t | t ƒ ƒ xH d d g d d g d	 d g f D]% } t |
 j | ƒ | j | ƒ ƒ qàW| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d  S(   Ni    g      ð?g        i   s   2-pointg       @g      @g      @g      @i   gÍÌÌÌÌÌ @g333333ó?g      @g333333Ó?gÍÌÌÌÌÌ@gffffff@(    (    (   R   R	   R   R   R   R   R   R   R   R   R   R   R   t
   isinstancet   HR   R   R   R    t   dot(   R   R!   R   R   R   R"   R#   R$   t   vR   t   H_analitt   H_approxt   _(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt+   test_finite_difference_hess_linear_operator„   sê    	


()


(#

(#


(#


(#
(   R   R   R)   R1   (    (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR   !   s   	at   ExVectorialFunctionc           B` s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C` s   d |  _  d |  _ d |  _ d  S(   Ni    (   R   t   njevR   (   R   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR     s    		c         C` sn   |  j  d 7_  t j d | d d | d d d | d d | d d | d d d d | d g ƒ S(   Ni   i   i    i   i   (   R   R   R   (   R   R   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR     s    -c         C` sZ   |  j  d 7_  t j d | d d d | d g d | d d d d | d g g ƒ S(   Ni   i   i    i   i   i   i   (   R3   R   R   (   R   R   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   jac  s    #c         C` sW   |  j  d 7_  | d d t j d ƒ | d t j d | d d g d d g g ƒ S(   Ni   i    i   i   i   i   (   R   R   R   R   (   R   R   R-   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR     s    6(   R   R   R   R   R4   R   (    (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR2     s   			t   TestVectorialFunctionc           B` s   e  Z d  „  Z d „  Z RS(   c      	   C` s¯  t  ƒ  } d } d } d d g } d d g } t | j | | j | j d  d  t j t j f d  ƒ } | d 7} | d 7} t | j	 | ƒ t | j	 | ƒ t | j
 | ƒ t | j
 | ƒ t | j | d | j d  d  t j t j f d  ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | j ƒ t | j | j ƒ d d g } | j | ƒ }	 | j | ƒ }
 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ } | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t |	 | ƒ t |
 | d	 d
 ƒd d g } | j | ƒ }
 | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t |
 | ƒ d d g } | j | ƒ }	 | j | ƒ }
 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ } | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t |	 | ƒ t |
 | ƒ d d g } | j | ƒ }	 | j | ƒ }
 | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ | j | ƒ } | j | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t |	 | ƒ t |
 | ƒ d  S(   Ni    g      ð?g        i   s   2-pointi   i
   g333333Ó?t   decimali   g       @g      @i   (   R2   R
   R   R4   R   R   R   R   R   R   R3   R   R   t   J(   R   R!   R   R3   R"   t   v0R#   R$   R   R%   t   J_analitR'   t   J_approx(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   test_finite_difference_jac  s´    	













c      	   C` sà  t  ƒ  } d } d } d } d d g } d d g } t | j | | j | j d  d  t j t j f d  ƒ } | d 7} | d 7} | d 7} t | j	 | ƒ t | j	 | ƒ t | j
 | ƒ t | j
 | ƒ t | j | ƒ t | j | ƒ t | j | | j d d  d  t j t j f d  ƒ } t t | j t ƒ ƒ xt d d g d d g d	 d g f D]Q }	 t | j | j ƒ t | j | j ƒ t | j j |	 ƒ | j j |	 ƒ ƒ qTW| d 7} | d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }
 | j |
 | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |
 | ƒ } t t | t ƒ ƒ xN d d g d d g d	 d g f D]+ }	 t | j |	 ƒ | j |	 ƒ d d ƒqW| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }
 d d g } | j |
 | ƒ } | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |
 | ƒ } t t | t ƒ ƒ xH d d g d d g d	 d g f D]% } t | j | ƒ | j | ƒ ƒ q´W| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }
 | j |
 ƒ } | j |
 | ƒ } | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |
 ƒ } | j |
 | ƒ } t t | t ƒ ƒ xN d d g d d g d	 d g f D]+ } t | j | ƒ | j | ƒ d d
 ƒqhW| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d d g }
 d d g } | j |
 ƒ } | j |
 | ƒ } | d 7} | d 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ | j |
 ƒ } | j |
 | ƒ } t t | t ƒ ƒ xN d d g d d g d	 d g f D]+ } t | j | ƒ | j | ƒ d d
 ƒq.W| d
 7} t | j	 | ƒ t | j	 | j	 | ƒ t | j
 | ƒ t | j
 | j
 | ƒ t | j | ƒ t | j | j | ƒ d  S(   Ni    g      ð?g        g       @i   s   2-pointg      @g      @g      @i   R6   i   gÍÌÌÌÌÌ @g333333ó?g      @g333333Ó?gÍÌÌÌÌÌ@gffffff@(   R2   R
   R   R4   R   R   R   R   R   R   R3   R   R   R*   R+   R   R   R   R7   R,   (   R   R!   R   R3   R   R"   R8   R#   R$   t   pR   R.   R/   R-   R0   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR1   {  sò    	


()


(

(#


()


()
(   R   R   R;   R1   (    (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyR5     s   	ac          C` sÑ  t  j d d d g d d d g g ƒ }  t  j d ƒ } t |  ƒ } t  j d d d g ƒ } t  j d d g ƒ } t  j d d g ƒ } t |  | d  ƒ } t | j ƒ t |  | t ƒ } t | j ƒ t |  | t	 ƒ } t | j ƒ t | | d  ƒ }	 t |	 j ƒ t | | t ƒ }
 t |
 j ƒ t | | t	 ƒ } t | j ƒ t
 | j | ƒ | ƒ t
 | j | ƒ | ƒ t
 | j | ƒ |  ƒ t
 | j | ƒ j ƒ  | j ƒ  ƒ t
 | j | | ƒ j ƒ  t  j d	 ƒ ƒ d  S(
   Niÿÿÿÿi   i    i   i   i   iýÿÿÿiüÿÿÿ(   i   i   (   R   R   t   zerosR   R   R   R   t   sparse_jacobiant   Truet   FalseR   R   R4   t   toarrayR   (   t   A_denseR"   t   A_sparseR   R-   t   Axt   f1t   f2t   f3t   f4t   f5t   f6(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   test_LinearVectorFunctionü  s2    "c          C` s  t  j d d d g d d d g g ƒ }  t  j d d d g ƒ } t |  | t ƒ } t | | j ƒ t |  j | ƒ | j ƒ t  j d d d g ƒ } t |  | j | ƒ ƒ t | | j ƒ t |  j | ƒ | j ƒ t |  j | ƒ | j	 | ƒ ƒ t |  j | ƒ | j ƒ d  S(   Niÿÿÿÿi   i    i   i   i   i
   (
   R   R   R   R@   R   R   R,   R   R4   R   (   t   AR"   R   t   x1(    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt%   test_LinearVectorFunction_memoization   s    'c          C` s0  t  j d ƒ }  t |  d  ƒ } t |  t ƒ } t |  t ƒ } t | j ƒ t | j ƒ t | j ƒ t  j d d d g ƒ } t  j d d d g ƒ } t	 | j
 | ƒ | ƒ t	 | j
 | ƒ | ƒ t	 | j | ƒ j ƒ  t  j d ƒ ƒ t	 | j | ƒ t  j d ƒ ƒ t	 | j | | ƒ j ƒ  t  j d ƒ ƒ d  S(   Ni   iÿÿÿÿi   i   iþÿÿÿi    (   i   i   (   R   R=   R   R   R@   R?   R   R>   R   R   R   R4   RA   R   R   (   R"   RE   RF   RG   R   R-   (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   test_IdentityVectorFunction0  s    %(    (    (   t
   __future__R    R   R   t   numpyR   t   numpy.testingR   R   R   R   t   scipy.sparseR   t   scipy.sparse.linalgR   t(   scipy.optimize._differentiable_functionsR	   R
   R   R   R   R   R2   R5   RK   RN   RO   (    (    (    sQ   lib/python2.7/site-packages/scipy/optimize/tests/test_differentiable_functions.pyt   <module>   s   ""àä	$	