
ʽXc           @` s   d  Z  d d l m Z m Z m Z d d l m Z m Z m Z m	 Z	 m
 Z
 m Z m Z d d l Z d d l m Z d d l m Z m Z d e f d     YZ d	 e f d
     YZ e d k r e   n  d S(   s#   
Unit test for SLSQP optimization.
i    (   t   divisiont   print_functiont   absolute_import(   t   assert_t   assert_array_almost_equalt   TestCaset   assert_allcloset   assert_equalt   run_module_suitet   assert_raisesN(   t   knownfailure_overridable(   t
   fmin_slsqpt   minimizet
   MyCallBackc           B` s    e  Z d  Z d   Z d   Z RS(   sJ   pass a custom callback function

    This makes sure it's being used.
    c         C` s   t  |  _ d |  _ d  S(   Ni    (   t   Falset   been_calledt   ncalls(   t   self(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   __init__   s    	c         C` s   t  |  _ |  j d 7_ d  S(   Ni   (   t   TrueR   R   (   R   t   x(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   __call__   s    	(   t   __name__t
   __module__t   __doc__R   R   (    (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyR      s   	t	   TestSLSQPc           B` s  e  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	  Z
 d d
  Z d 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 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% d%   Z& e' d&  d'    Z( d(   Z) d)   Z* RS(*   s   
    Test SLSQP algorithm using Example 14.4 from Numerical Methods for
    Engineers by Steven Chapra and Raymond Canale.
    This example maximizes the function f(x) = 2*x*y + 2*x - x**2 - 2*y**2,
    which has a maximum at x=2, y=1.
    c         C` s   i t  d 6|  _ d  S(   Nt   disp(   R   t   opts(   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   setUp$   s    g      ?c         C` s@   | d } | d } | d | | d | | d d | d S(   s  
        Arguments:
        d     - A list of two elements, where d[0] represents x and d[1] represents y
                 in the following equation.
        sign - A multiplier for f.  Since we want to optimize it, and the scipy
               optimizers can only minimize functions, we need to multiply it by
               -1 to achieve the desired solution
        Returns:
        2*x*y + 2*x - x**2 - 2*y**2

        i    i   i   (    (   R   t   dt   signR   t   y(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   fun'   s    

c         C` sZ   | d } | d } | d | d | d } | d | d | } t  j | | g t  S(   so   
        This is the derivative of fun, returning a numpy array
        representing df/dx and df/dy.

        i    i   ii   i   (   t   npt   arrayt   float(   R   R   R   R   R   t   dfdxt   dfdy(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   jac7   s
    

c         C` s"   |  j  | |  |  j | |  f S(   N(   R    R&   (   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   fun_and_jacC   s    c         C` s   t  j | d | d g  S(   s    Equality constraint i    i   (   R!   R"   (   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   f_eqconF   s    c         C` s   t  j d d g g  S(   s!    Equality constraint, derivative i   i(   R!   R"   (   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   fprime_eqconJ   s    c         C` s   |  j  | |  d S(   s    Scalar equality constraint i    (   R(   (   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   f_eqcon_scalarN   s    c         C` s   |  j  | |  d j   S(   s(    Scalar equality constraint, derivative i    (   R)   t   tolist(   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   fprime_eqcon_scalarR   s    c         C` s    t  j | d | d d g  S(   s    Inequality constraint i    i   g      ?(   R!   R"   (   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   f_ieqconV   s    c         C` s   t  j d d g g  S(   s#    Inequality constraint, derivative i   i(   R!   R"   (   R   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   fprime_ieqconZ   s    c         C` s   t  j |  S(   s    Vector inequality constraint (   R!   t   asarray(   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt	   f_ieqcon2^   s    c         C` s   t  j | j d  S(   s*    Vector inequality constraint, derivative i    (   R!   t   identityt   shape(   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   fprime_ieqcon2b   s    c      	   C` s\   t  |  j d d g d d d d d |  j } t | d | d  t | j d	 d
 g  d  S(   Ng      g      ?t   argst   methodt   SLSQPt   optionst   successt   messagei   i   (   g      (   R   R    R   R   R   R   (   R   t   res(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt$   test_minimize_unbounded_approximatedg   s    c         C` se   t  |  j d d g d d d |  j d d d |  j } t | d | d	  t | j d
 d g  d  S(   Ng      g      ?R4   R&   R5   R6   R7   R8   R9   i   i   (   g      (   R   R    R&   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_minimize_unbounded_givenn   s    c         C` s   t  j d d  > t |  j d d g d d d d d f d	 d
 d |  j } Wd  QXt | d | d  t | j d d g  t d | j d k  t | j d d k  d  S(   Nt   invalidt   ignoreg      g      ?R4   t   boundsg      @g      ?R5   R6   R7   R8   R9   i    i   (   g      (   g      @N(   Ng      ?(	   R!   t   errstateR   R    t   NoneR   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt"   test_minimize_bounded_approximatedu   s    c         C` sb   t  |  j d d g d d d t d d d |  j } t | d | d	  t | j d
 d g  d  S(   Ng      g      ?R4   R&   R5   R6   R7   R8   R9   i   i   (   g      (   R   R'   R   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt    test_minimize_unbounded_combined   s    c         C` sz   t  |  j d d g d d d i d d 6|  j d 6d d 6d d	 d
 |  j } t | d | d  t | j d d g  d  S(   Ng      g      ?R4   t   constraintst   eqt   typeR    R5   R6   R7   R8   R9   i   (   g      (   g      (   R   R    R(   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt#   test_minimize_equality_approximated   s    


c         C` s   t  |  j d d g d |  j d d d d d i d d	 6|  j d
 6d d 6d |  j } t | d | d  t | j d d g  d  S(   Ng      g      ?R&   R5   R6   R4   RD   RE   RF   R    R7   R8   R9   i   (   g      (   g      (   R   R    R&   R(   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_minimize_equality_given   s    
c         C` s   t  |  j d d g d d d |  j d d d i d d	 6|  j d
 6d d 6|  j d 6d |  j } t | d | d  t | j d d g  d  S(   Ng      g      ?R5   R6   R&   R4   RD   RE   RF   R    R7   R8   R9   i   (   g      (   g      (	   R   R    R&   R(   R)   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_minimize_equality_given2   s    

c         C` s   t  |  j d d g d d d |  j d d d i d d	 6|  j d
 6d d 6|  j d 6d |  j } t | d | d  t | j d d g  d  S(   Ng      g      ?R5   R6   R&   R4   RD   RE   RF   R    R7   R8   R9   i   (   g      (   g      (	   R   R    R&   R*   R,   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt(   test_minimize_equality_given_cons_scalar   s    

c         C` s   t  |  j d d g d d d |  j d d d i d d	 6|  j d
 6d d 6d |  j } t | d | d  t | j d d g d d d  S(   Ng      g      ?R5   R6   R&   R4   RD   t   ineqRF   R    R7   R8   R9   i   i   t   atolgMbP?(   g      (   g      (   R   R    R&   R-   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_minimize_inequality_given   s    


c         C` s   t  |  j d d g d |  j d d d d d i d d	 6|  j d
 6|  j d 6d |  j } t | d | d  t | j d d g  d  S(   Ng      g      ?R&   R5   R6   R4   RD   RK   RF   R    R7   R8   R9   i   i   (   g      (	   R   R    R&   R0   R3   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt1   test_minimize_inequality_given_vector_constraints   s    

c         C` s   t  |  j d d g d d d |  j d d d d d g d i d d 6|  j d 6d d 6|  j d 6d |  j } t | d | d  t | j d
 d
 g d d t d | j d k o d k n  t d	 | j d k o d
 k n  d  S(   Ng      g      ?R5   R6   R&   R4   R?   gig?RD   RE   RF   R    R7   R8   R9   RL   gMbP?i    i   (   g      (   gg      ?(   ig?(   g      (	   R   R    R&   R(   R)   R   R   R   R   (   R   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt#   test_minimize_bound_equality_given2   s    

'c      	   C` si   t  |  j d d g d d	 d d d d } | \ } } } } } t | d k |  t | d d g  d  S(
   Ng      g      ?R4   t   iprinti    t   full_outputi   i   (   g      (   R   R    R   R   (   R   R:   R   t   fxt   itst   imodet   smode(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_unbounded_approximated   s
    c         C` sr   t  |  j d d g d d
 d |  j d d d d } | \ } } } } } t | d k |  t | d	 d g  d  S(   Ng      g      ?R4   t   fprimeRP   i    RQ   i   i   (   g      (   R   R    R&   R   R   (   R   R:   R   RR   RS   RT   RU   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_unbounded_given   s    	c         C` su   t  |  j d d g d d	 d |  j g d d d d } | \ } } } } } t | d k |  t | d d g  d  S(
   Ng      g      ?R4   t   eqconsRP   i    RQ   i   (   g      (   R   R    R(   R   R   (   R   R:   R   RR   RS   RT   RU   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_equality_approximated   s    c         C` s~   t  |  j d d g d |  j d d
 d |  j g d d d d	 } | \ } } } } } t | d k |  t | d	 d	 g  d  S(   Ng      g      ?RW   R4   RY   RP   i    RQ   i   (   g      (   R   R    R&   R(   R   R   (   R   R:   R   RR   RS   RT   RU   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_equality_given   s    	c         C` s   t  |  j d d g d |  j d d d |  j d |  j d d d	 d
 } | \ } } } } } t | d k |  t | d
 d
 g  d  S(   Ng      g      ?RW   R4   t   f_eqconst   fprime_eqconsRP   i    RQ   i   (   g      (   R   R    R&   R(   R)   R   R   (   R   R:   R   RR   RS   RT   RU   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_equality_given2  s    			c         C` s   t  |  j d d g d |  j d d d |  j g d d d d	 } | \ } } } } } t | d k |  t | d
 d	 g d d d  S(   Ng      g      ?RW   R4   t   ieqconsRP   i    RQ   i   i   t   decimali   (   g      (   R   R    R&   R-   R   R   (   R   R:   R   RR   RS   RT   RU   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_inequality_given  s    c         C` s   t  |  j d d g d |  j d d d d d g d	 |  j d
 |  j d d d d } | \ } } } } } t | d k |  t | d d g d d t d | d k o d k n  t d | d k o d k n  d  S(   Ng      g      ?RW   R4   R?   gig?R\   R]   RP   i    RQ   i   R`   i   (   g      (   gg      ?(   ig?(   R   R    R&   R(   R)   R   R   (   R   R:   R   RR   RS   RT   RU   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_bound_equality_given2  s    		$c         C` so   t  d   d g d d   g d d } t | d g  t  d   d g d	 d
   d d } t | d g  d  S(   Nc         S` s   |  d S(   Ni   (    (   t   z(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   <lambda>'  s    g      @R_   c         S` s   |  d d S(   Ni    i   (    (   Rc   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   (  s    RP   i    g      ?c         S` s   |  d S(   Ni   (    (   Rc   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   ,  s    t	   f_ieqconsc         S` s   |  d d g S(   Ni    i   (    (   Rc   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   -  s    (   R   R   (   R   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_scalar_constraints%  s    			c         C` s,   t  d   d g d d d g g d d d  S(   Nc         S` s   |  d d S(   Ni   i   (    (   Rc   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   3  s    i    R?   i   RP   (   R   (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_integer_bounds1  s    c      	   C` s0   t  t   t d   d d d g  Wd  QXd  S(   Nc         S` s
   d d g S(   Ni    i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   9  s    i   i   i   (   R	   t
   ValueErrorR   (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_obj_must_return_scalar5  s    c         C` s   t  d   d d d g  d  S(   Nc         S` s   d g S(   Ni    (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   ?  s    i   i   i   (   R   (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_obj_returns_scalar_in_list;  s    c         C` sv   t    } t |  j d d g d d d d d | d |  j } t | d | d	  t | j  t | j | d
  d  S(   Ng      g      ?R4   R5   R6   t   callbackR7   R8   R9   t   nit(   g      (   R   R   R    R   R   R   R   R   (   R   Rk   R:   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_callbackA  s    	c      	   C` s   d d g } d   } d   } t  d   | d i d d 6| d	 6i d
 d 6| d	 6f d d d f d d } | j } t | |  d d d t | |  d k  t | j |  d  S(   Ni    i   c         S` s   |  d |  d d S(   Ni    i   i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   U  s    c         S` s   |  d d d S(   Ni    i   i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   V  s    c         S` s   |  d d |  d d S(   Ni    i   i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   X  s    RD   RE   RF   R    RK   R?   R5   R6   RL   g:0yE>g:0yE(   i    N(   i    N(   R   RA   R   R   R   R8   (   R   R   t   f1t   f2t   sol(    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_inconsistent_linearizationJ  s    
				s   This bug is not fixedc      	   C` ss   d d g } t  d   | d i d d 6d   d 6i d	 d 6d
   d 6f d d d f d d } t | j |  d  S(   Ni   i   c         S` s   |  d d |  d d S(   Ni    i   i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   j  s    RD   RE   RF   c         S` s   |  d |  d d S(   Ni    i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   l  s    R    RK   c         S` s   |  d d S(   Ni    i   (    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyRd   m  s    R?   i    R5   R6   (   i    N(   i    N(   R   RA   R   R8   (   R   R   Rp   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_regression_5743d  s    	c         C` sA   d   } t  | d d d g d d } t | j j d k  d  S(   Nc         S` s8   |  d d d d |  d d d d |  d d d S(   Ni    i   i   g      ?(    (   R   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   funcs  s    i    R5   R6   i   (   i   (   R   R   R&   R2   (   R   Rs   Rp   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_gh_6676r  s    	c         C` s   d	 d
 f d d f d d f t  j d f t  j d f f d t  j f d f g } xC | D]; } t t  ' t |  j d d g d | d d Wd  QXqV Wd  S(   Ni   i   i    g      g      ?R?   R5   R6   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i   i   (   i    i   (   R!   t   infR	   Rh   R   R    (   R   t   bounds_listR?   (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   test_invalid_boundsy  s    			(+   R   R   R   R   R    R&   R'   R(   R)   R*   R,   R-   R.   R0   R3   R;   R<   RB   RC   RG   RH   RI   RJ   RM   RN   RO   RV   RX   RZ   R[   R^   Ra   Rb   Rf   Rg   Ri   Rj   Rm   Rq   R
   Rr   Rt   Rw   (    (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyR      sP   								
	
											
		
									t   __main__(   R   t
   __future__R    R   R   t   numpy.testingR   R   R   R   R   R   R	   t   numpyR!   t   scipy._lib._testutilsR
   t   scipy.optimizeR   R   t   objectR   R   R   (    (    (    s>   /tmp/pip-build-7oUkmx/scipy/scipy/optimize/tests/test_slsqp.pyt   <module>   s   4 l