
&]\c           @` s  d  Z  d d l m Z m Z m Z d d l m Z d d l Z d d l m	 Z	 d d l
 m Z m Z d d l m Z m Z m Z d d l m Z d d l Z d	 d
 l m Z i e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6e j d 6Z i e j d 6e j d 6e j d 6e j d 6Z d   Z d	 d	 d	 d	 d	 g e _  i  e _! d   Z" d	 d d d d d g e" _  i e j d 6e j d 6e" _! d   Z# d d d d d d g e# _  i  e# _! d   Z$ d	 d d g e$ _  i  e$ _! d   Z% d d g e% _  i e j d 6e j d 6e j d 6e% _! d   Z& d d d d g e& _  i e j d 6e j d 6e j d 6e& _! d    Z' d! d" g e' _  i e j d 6e j d 6e j d 6e' _! d# e( f d$     YZ) d% e( f d&     YZ* d' e( f d(     YZ+ d) e( f d*     YZ, d+ e( f d,     YZ- d S(-   sA    Unit tests for nonlinear solvers
Author: Ondrej Certik
May 2007
i    (   t   divisiont   print_functiont   absolute_import(   t   assert_N(   t   xrange(   t   nonlint   root(   t   matrixt   diagt   dot(   t   invi   (   t   pressure_networkt   andersont   diagbroydent   linearmixingt   excitingmixingt   broyden1t   broyden2t   krylovc         C` sa   t  j |   j }  t t d d d d d g   } d } | |  | t |  j |   |  } | S(   Ni   i   g      ?i   g      ?g{Gz?(   t   npt   asmatrixt   TR   R   t   float(   t   xt   dt   ct   f(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   F   s
    !$c         C` s   |  S(   N(    (   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   F2*   s    i   i   i   i   i   c         C` s   |  S(   N(    (   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   F2_lucky3   s    c         C` s2   t  j d  } t  j d  } t  j | |   | S(   Ns   -2 1 0; 1 -2 1; 0 1 -2s   1 2 3(   R   t   matR	   (   R   t   At   b(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   F3;   s    c         C` sP   d } | |  d |  d d t  j |  d  t  j |  d  d d | g S(   Ng     @i    i   (   R   t   exp(   R   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt	   F4_powellE   s    iic         C` s%   t  |  d t j d d d d g   S(   Ni   g      ?(   R   R   t   array(   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   F5P   s    g       @c         C` s   |  \ } } t  j d d g d d g g  } t  j | d | d d d
 t  j | t  j |  d	  g  } t  j j | |  S(   Ng/$gffffff-@g+,?grD0?i   i   i   i   i   i   (   R   R$   t   sinR"   t   linalgt   solve(   R   t   x1t   x2t   J0t   v(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   F6Z   s    &g      gffffff?t
   TestNonlinc           B` sV   e  Z d  Z d d  Z d d  Z e j j d    Z d   Z	 d   Z
 d   Z RS(   s   
    Check the Broyden methods for a few test problems.

    broyden1, broyden2, and newton_krylov must succeed for
    all functions. Some of the others don't -- tests in KNOWN_BAD are skipped.

    g{Gz?c      	   C` sM   | | | j  d | d d d d } t t j | |   j   | k   d  S(   Nt   f_tolt   maxiteri   t   verbosei    (   t   xinR   R   t   absolutet   max(   t   selfR   t   funcR/   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   _check_nonlin_funcw   s    $c      	   C` sY   t  | | j d | d i | d 6d d 6d d 6} t t j | j  j   | k   d  S(   Nt   methodt   optionst   ftoli   R0   i    t   disp(   R   R2   R   R   R3   t   funR4   (   R5   R   R8   R/   t   res(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   _check_root{   s    c         O` s   d  S(   N(    (   R5   t   at   kw(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   _check_func_fail   s    c         C` s   x t  t t t t t t g D]m } xd t j   D]V } | | j	 j   k ru | t
 j   k r/ |  j | |  q/ q/ n  |  j | |  q/ Wq Wd  S(   N(   R   R   R   R!   R#   R%   R-   t   SOLVERSt   valuest	   KNOWN_BADt	   MUST_WORKRA   R7   (   R5   R   R6   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_problem_nonlin   s    "c         ` sT   t    _   f d   } t j t t j d d d d d d d | t   j  d  S(	   Nc         ` s   t    _ t j |   j   S(   N(   t   Truet   _tol_norm_usedR   R3   R4   (   R   (   R5   (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   local_norm_func   s    	R/   g{Gz?R0   i   R1   i    t   tol_norm(   t   FalseRH   R   t   newton_krylovR   R2   R   (   R5   RI   (    (   R5   s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_tol_norm_called   s
    	$c         C` s   xx t  t t t t t t g D][ } xR t D]J } | | j k rc | t	 k r) |  j
 | |  q) q) n  |  j | |  q) Wq Wd  S(   N(   R   R   R   R!   R#   R%   R-   RB   RD   RE   RA   R>   (   R5   R   t   meth(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_problem_root   s    "(   t   __name__t
   __module__t   __doc__R7   R>   t   pytestt   markt   xfailRA   RF   RM   RO   (    (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR.   n   s   			t
   TestSecantc           B` s^  e  Z d  Z e j d d d d d g e  e j d d d d d g e  e j d d d d d g e  e j d d d d d g e  e j d d d d d g e  e j d d d d d g e  e j d d d d d g e  e j d d d d d g e  g Z g  e D] Z e d d ^ q	Z d d	  Z	 d
   Z
 d   Z d   Z d   Z d   Z RS(   sD   Check that some Jacobian approximations satisfy the secant conditioni   i   i   i   i   i	   i    i   c         K` s}  | |   } | j  |  j d |  j d d  xIt t |  j d |  j d   D]$\ } \ } } | j | |  x t t | | d   D]m } |  j | | d |  j | | }	 |  j | | d |  j | | }
 t	 t
 j |	 | j |
    q W| | k rQ |  j | | d |  j | | }	 |  j | | d |  j | | }
 t	 t
 j |	 | j |
    qQ qQ Wd S(   s|   
        Check that the given Jacobian approximation satisfies secant
        conditions for last `npoints` points.
        i    i   N(   t   setupt   xst   fst   Nonet	   enumeratet   zipt   updateR   t   minR   R   t   allcloseR(   (   R5   t   jac_clst   npointsR@   t   jact   jR   R   t   kt   dxt   df(    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   _check_secant   s    !6 $$#$$c         C` s   |  j  t j  d  S(   N(   Rg   R   t   BroydenFirst(   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_broyden1   s    c         C` s   |  j  t j  d  S(   N(   Rg   R   t   BroydenSecond(   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_broyden2   s    c      	   C` s&  t  j d d  } | j |  j d |  j d d   t j d  d } x t t	 |  j d |  j d   D] \ } \ } } | |  j | } | |  j | } | | t
 | |  d  d   d  f | d  d  d   f t
 | |  7} | j | |  t t j | j   | d d d	 d
  qj Wd  S(   Nt   alphag?i    i   ii   t   rtolg|=t   atolgvIh%<=g      $(   R   Rh   RW   RX   RY   RZ   R   t   identityR[   R\   R	   R]   R   R_   t   todense(   R5   Rb   t   Bt   last_jR   R   Rf   Re   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_broyden1_update   s    !6Hc      	   C` s,  t  j d d  } | j |  j d |  j d d   t j d  d } x t t	 |  j d |  j d   D] \ } \ } } | |  j | } | |  j | } | | t
 | |  d  d   d  f | d  d  d   f t
 | |  7} | j | |  t t j | j   t |  d d d	 d
  qj Wd  S(   NRl   g?i    i   gi   Rm   g|=Rn   gvIh%<=(   R   Rj   RW   RX   RY   RZ   R   Ro   R[   R\   R	   R]   R   R_   Rp   R
   (   R5   Rb   t   HRr   R   R   Rf   Re   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_broyden2_update   s    !6Hc         C` s&   |  j  t j d d d d d d d  S(   Nt   Mi   t   w0i    Ra   (   Rg   R   t   Anderson(   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_anderson   s    (   RP   RQ   RR   R   R$   R   RX   R   RY   Rg   Ri   Rk   Rs   Ru   Ry   (    (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRV      s    $!				t
   TestLinearc           B` s>   e  Z d  Z e d  Z d   Z d   Z d   Z d   Z RS(   s]   Solve a linear equation;
    some methods find the exact solution in a finite number of stepsc         ` s   t  j j d  t  j j | |    | rK   d t  j j | |    n  t  j j |   | r  d t  j j |   n     f d   } t j | t  j |  | d | d d d d  d d	 } t t  j	 t
   |   d
 d  d  S(   Ni{   y              ?c         ` s   t    |    S(   N(   R	   (   R   (   R   R    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR6      s    R0   R/   gư>t   line_searchR1   i    Rn   (   R   t   randomt   seedt   randnR   t   nonlin_solvet   zerosRZ   R   R_   R	   (   R5   Rb   t   NR0   t   complexR@   R6   t   sol(    (   R   R    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   _check   s     !c         C` sH   |  j  t j d d  d d t  |  j  t j d d  d d t  d  S(   NRl   g      ?i   i)   (   R   R   Rh   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRi     s    "c         C` sH   |  j  t j d d  d d t  |  j  t j d d  d d t  d  S(   NRl   g      ?i   i)   (   R   R   Rj   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRk   	  s    "c         C` sT   |  j  t j d d d d  d d t  |  j  t j d d d d  d d t  d  S(   NRv   i2   Rl   g      ?i   i   (   R   R   Rx   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRy     s    (c         C` sB   |  j  t j d d t d d |  j  t j d d t d d d  S(   Ni   i   t   inner_mi
   (   R   R   t   KrylovJacobianRK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_krylov  s    (	   RP   RQ   RR   RK   R   Ri   Rk   Ry   R   (    (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRz      s   			t   TestJacobianDotSolvec           B` se   e  Z d  Z d   Z e d d  Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z RS(   sF   Check that solve/dot methods in Jacobian approximations are consistentc         C` s   | d d t  j |  j |  S(   Ni   i   (   R   R	   R   (   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   _func  s    gư>c         ` s  t  j j d  d }   f d   }  f d   } | | |  |  _ t  j j |  } | |   }	 |	 j | |  j |  |  j  x>t d |  D],}
 | |  } t |	 d  rt  j	 |	  } t |	 d  r
|	 j
 |  } t  j j
 | |  } | | | d  n  t |	 d	  rY|	 j |  } t  j j
 | j j   |  } | | | d
  n  t |	 d  r|	 j |  } t  j | |  } | | | d  n  t |	 d  r|	 j |  } t  j | j j   |  } | | | d  qn  t |	 d  rCt |	 d  rC|	 j |  } |	 j
 |	 j |   } | | | d  n  t |	 d  rt |	 d	  r|	 j |  } |	 j |	 j |   } | | | d  n  | |  } |	 j | |  j |   q Wd  S(   Ni{   i   c          ` s9   t  j j |    }   r5 | d t  j j |    } n  | S(   Ny              ?(   R   R|   t   rand(   R?   t   q(   R   (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR   $  s    c         ` sY   t  |  |  j   }   t  |  j     } | | k rU t d | | f   n  d  S(   Ns
   %s: err %g(   t   absR4   t   AssertionError(   R?   R    t   msgR   R   (   t   tol(    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   assert_close*  s    i   t	   __array__R(   s   solve vs arrayt   rsolves   rsolve vs arrayt   matvecs   dot vs arrayt   rmatvecs   rmatvec vs arrays   dot vs solves   rmatvec vs rsolve(   R   R|   R}   R   R   RW   R   R   t   hasattrR$   R(   R'   R   R   t   conjR   R	   R   R]   (   R5   R`   R   R   R@   R   R   R   t   x0Rb   Rd   R,   t   Jdt   Gvt   Gv2t   Jvt   Jv2R   (    (   R   R   s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt
   _check_dot  sL    c         C` s0   |  j  t j d t |  j  t j d t d  S(   NR   (   R   R   Rh   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRi   [  s    c         C` s0   |  j  t j d t |  j  t j d t d  S(   NR   (   R   R   Rj   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRk   _  s    c         C` s0   |  j  t j d t |  j  t j d t d  S(   NR   (   R   R   Rx   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRy   c  s    c         C` s0   |  j  t j d t |  j  t j d t d  S(   NR   (   R   R   t   DiagBroydenRK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_diagbroydeng  s    c         C` s0   |  j  t j d t |  j  t j d t d  S(   NR   (   R   R   t   LinearMixingRK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_linearmixingk  s    c         C` s0   |  j  t j d t |  j  t j d t d  S(   NR   (   R   R   t   ExcitingMixingRK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_excitingmixingo  s    c         C` s<   |  j  t j d t d d |  j  t j d t d d d  S(   NR   R   gMbP?(   R   R   R   RK   RG   (   R5   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR   s  s    (   RP   RQ   RR   R   RK   R   Ri   Rk   Ry   R   R   R   R   (    (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR     s   	<						t   TestNonlinOldTestsc           B` sz   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z RS(   s    Test case for a simple constrained entropy maximization problem
    (the machine translation example of Berger et al in
    Computational Linguistics, vol 22, num 1, pp 39--72, 1996.)
    c         C` s]   t  j t t j d d d d } t t  j |  d k   t t  j t |   d k   d  S(   Nt   iteri   Rl   i   g&.>(   R   R   R   R2   R   t   norm(   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRi   ~  s    !c         C` s]   t  j t t j d d d d } t t  j |  d k   t t  j t |   d k   d  S(   NR   i   Rl   i   g&.>(   R   R   R   R2   R   R   (   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRk     s    !c      	   C` sD   t  j t t j d d d d d d } t t  j |  d k   d  S(   NR   i   Rl   gQ?Rv   i   gQ?(   R   R   R   R2   R   R   (   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyRy     s    'c         C` s]   t  j t t j d d d d } t t  j |  d k   t t  j t |   d k   d  S(   NR   i<   Rl   g      ?gHz>(   R   R   R   R2   R   R   (   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR     s    !c         C` s]   t  j t t j d d d d } t t  j |  d k   t t  j t |   d k   d  S(   NR   i   Rl   g      ?gh㈵>(   R   R   R   R2   R   R   (   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_exciting  s    !c         C` s]   t  j t t j d d d d } t t  j |  d k   t t  j t |   d k   d  S(   NR   i   Rl   i   g:0yE>(   R   R   R   R2   R   R   (   R5   R   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR     s    !c      
   C` so   t  t t j d d d i d d 6i d d 6d 6} t t j | j  d	 k   t t j | j  d	 k   d  S(
   NR8   R   R9   i   t   niti   Rl   t   jac_optionsg&.>(   R   R   R2   R   R   R   R   R<   (   R5   R=   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_root_broyden1  s    c      
   C` so   t  t t j d d d i d d 6i d d 6d 6} t t j | j  d	 k   t t j | j  d	 k   d  S(
   NR8   R   R9   i   R   i   Rl   R   g&.>(   R   R   R2   R   R   R   R   R<   (   R5   R=   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_root_broyden2  s    c      
   C` sZ   t  t t j d d d i d d 6i d d 6d d	 6d
 6} t t j | j  d k   d  S(   NR8   R   R9   i   R   gQ?Rl   i   Rv   R   gQ?(   R   R   R2   R   R   R   R   (   R5   R=   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_root_anderson  s    
c      
   C` so   t  t t j d d d i d d 6i d d 6d 6} t t j | j  d	 k   t t j | j  d	 k   d  S(
   NR8   R   R9   i<   R   g      ?Rl   R   gHz>(   R   R   R2   R   R   R   R   R<   (   R5   R=   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_root_linearmixing  s
    
c      
   C` so   t  t t j d d d i d d 6i d d 6d 6} t t j | j  d	 k   t t j | j  d	 k   d  S(
   NR8   R   R9   i   R   g      ?Rl   R   gh㈵>(   R   R   R2   R   R   R   R   R<   (   R5   R=   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_root_excitingmixing  s
    
c      
   C` so   t  t t j d d d i d d 6i d d 6d 6} t t j | j  d	 k   t t j | j  d	 k   d  S(
   NR8   R   R9   i   R   i   Rl   R   g:0yE>(   R   R   R2   R   R   R   R   R<   (   R5   R=   (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   test_root_diagbroyden  s
    
(   RP   RQ   RR   Ri   Rk   Ry   R   R   R   R   R   R   R   R   R   (    (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyR   x  s   											(.   RR   t
   __future__R    R   R   t   numpy.testingR   RS   t   scipy._lib.sixR   t   scipy.optimizeR   R   t   numpyR   R   R	   t   numpy.linalgR
   R   t   test_minpackR   R   R   R   R   R   R   RL   RB   RE   R   R2   RD   R   R   R!   R#   R%   R-   t   objectR.   RV   Rz   R   R   (    (    (    s?   lib/python2.7/site-packages/scipy/optimize/tests/test_nonlin.pyt   <module>   s`   								
	
		
5L*_