
     hp3                     h    d Z ddlZddlmZmZ ddlZddlmZ ddl	m
Z
 ddlmZ  G d d          ZdS )	z5
Unit tests for TNC optimization routine from tnc.py
    N)assert_allcloseassert_equalpow)optimize)matrixc                      e Zd ZdZ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!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'd' Z(d( Z)d) Z*d* Z+d+S )-TestTnczTNC non-linear optimization.

    These tests are taken from Prof. K. Schittkowski's test examples
    for constrained non-linear programming.

    http://www.uni-bayreuth.de/departments/math/~kschittkowski/home.htm

    c                     ddd| _         d S )NF   )dispmaxfun)opts)selfs    Y/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_tnc.pysetup_methodzTestTnc.setup_method   s    "c22			          Y@c                     |t          |d         t          |d         d          z
  d          z  t          d|d         z
  d          z   S )N   r            ?r   r   xas      r   f1z
TestTnc.f1   sC    3!s1Q4||+a0003sQqTz13E3EEEr   c                     ddg}d|z  |d         t          |d         d          z
  z  |d<   d|d         |d         dz
  z  dz   z  |d<   |S )Nr   r   r          r   r   )r   r   r   difs       r   g1z
TestTnc.g1   s[    !fQ!A$QqT1-.A1Q#.45A
r   c                 Z    |                      ||          |                     ||          fS N)r   r    r   s      r   fg1zTestTnc.fg1%   s%    wwq!}}dggamm++r   c                 X    |d         t          |d         |d         z
  d          dz  z   S )Nr   r   r   h㈵>r   r   r   s     r   f3z
TestTnc.f3(   s,    tc!A$1+q))F222r   c                 ^    ddg}d|d         |d         z
  z  dz  |d<   d|d         z
  |d<   |S )Nr   r   r   r%   r    r   r   r   s      r   g3z
TestTnc.g3+   s@    !f1!%.As1vA
r   c                 V    |                      |          |                     |          fS r"   )r'   r+   r&   s     r   fg3zTestTnc.fg31   !    wwqzz4771::%%r   c                 L    t          |d         dz   d          dz  |d         z   S )Nr   r      g      @r   r   r&   s     r   f4z
TestTnc.f44   s(    1Q4#:q!!C'!A$..r   c                 P    ddg}t          |d         dz   d          |d<   d|d<   |S )Nr   r   r   r   r   r*   s      r   g4z
TestTnc.g47   s4    !fQqTCZ##AA
r   c                 V    |                      |          |                     |          fS r"   )r1   r3   r&   s     r   fg4zTestTnc.fg4=   r.   r   c                     t          j        |d         |d         z             t          |d         |d         z
  d          z   d|d         z  z
  d|d         z  z   dz   S )Nr   r   r         ?      @r   )npsinr   r&   s     r   f5z
TestTnc.f5@   sc    vadQqTk""S1!a%8%88ad
 1Q4Z(*-. 	.r   c                     ddg}t          j        |d         |d         z             }d|d         |d         z
  z  }||z   dz
  |d<   ||z
  dz   |d<   |S )Nr   r          @r7   r8   )r9   cos)r   r   r   v1v2s        r   g5z
TestTnc.g5D   sc    !fVAaD1Q4K  !A$1+b3Ab3A
r   c                 V    |                      |          |                     |          fS r"   )r;   rA   r&   s     r   fg5zTestTnc.fg5M   r.   r   c           	         dt          |d         t          |d         d          z
  d          z  t          d|d         z
  d          z   dt          |d         t          |d         d          z
  d          z  z   t          d|d         z
  d          z   dt          |d         dz
  d          t          |d         dz
  d          z   z  z   d	|d         dz
  z  |d         dz
  z  z   d
z  S )Nr   r   r   r   r   g     V@r0   g333333$@3@r%   r   r&   s     r   f38zTestTnc.f38P   s    AaD3qtQ<</333C!A$J""#%)C!s1Q4||0CQ,G,G%GHC!A$J""#%)S1Q-?-?-01Q-?-?.@ &AA !s
#qtcz2	3 7=	= 	=r   c                 &   g d}d|d         z  |d         t          |d         d          z
  z  dd|d         z
  z  z
  dz  |d<   d	|d         t          |d         d          z
  z  d
|d         dz
  z  z   d|d         dz
  z  z   dz  |d<   d|d         z  |d         t          |d         d          z
  z  dd|d         z
  z  z
  dz  |d<   d|d         t          |d         d          z
  z  d
|d         dz
  z  z   d|d         dz
  z  z   dz  |d<   |S )N)r   r   r   r   g      yr   r   r   r=   r   r%   g      i@g3333334@rE   r0   g     vg     f@r   r*   s      r   g38zTestTnc.g38W   sD   ll1Q4-1Q4#adA,,#67qt$%(./A1Q4#adA,,./$!A$*2EE!A$*%&)/0AAaD.AaD3qtQ<<$78qt$%(./A1Q4#adA,,./$!A$*2EE!A$*%&)/0A
r   c                 V    |                      |          |                     |          fS r"   )rF   rH   r&   s     r   fg38zTestTnc.fg38c   !    xx{{DHHQKK''r   c                 f    d|d         |d         z  |d         z  |d         z  |d         z  dz  z
  S )Nr=   r   r   r   r0            ^@r)   r&   s     r   f45zTestTnc.f45f   s9    QqTAaD[1Q4'!A$.15===r   c                    dgdz  }|d          |d         z  |d         z  |d         z  dz  |d<   |d          |d         z  |d         z  |d         z  dz  |d<   |d          |d         z  |d         z  |d         z  dz  |d<   |d          |d         z  |d         z  |d         z  dz  |d<   |d          |d         z  |d         z  |d         z  dz  |d<   |S )Nr      r   r   r0   rM   rN   r)   r*   s      r   g45zTestTnc.g45i   s    cAgQ4!A$1%!,u4AQ4!A$1%!,u4AQ4!A$1%!,u4AQ4!A$1%!,u4AQ4!A$1%!,u4A
r   c                 V    |                      |          |                     |          fS r"   )rO   rR   r&   s     r   fg45zTestTnc.fg45r   rK   r   c           	      6   ddgt           j         d gdd gf}}ddg}g }t          j        | j        |d| j        || j        |j                  }t          |j	        |                     |          d           t          t          |          |j                   d S )Nr         TNC)methodjacboundsoptionscallback:0yE>atol)r9   infr   minimizer   r    r   appendr   funr   lennit)r   x0bndsxoptiterxress         r   test_minimize_tnc1zTestTnc.test_minimize_tnc1w   s    7rvgt_tTl;D1vEtw'+TY).7 7 7 	T::::SZZ)))))r   c                    t          ddg          t          j         d gdd gf}}ddg}d}t          j        t
          |          5  t          j        | j        |d|| j	                  j
        }t          |                     |          |                     |          d	           d d d            d S # 1 swxY w Y   d S )
NrV   r   rW   z4Use of `minimize` with `x0.ndim != 1` is deprecated.matchrX   )rY   r[   r\   -C6?r_   )r   r9   ra   pytestwarnsDeprecationWarningr   rb   r   r   r   r   )r   rg   rh   ri   messager   s         r   test_minimize_tnc1bzTestTnc.test_minimize_tnc1b   s   2q'??rvgt_dD\$BD1vH\,G<<< 	B 	B!$'2e)-tyB B BBC DGGAJJDAAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   A!B44B8;B8c                     ddgt           j         d gdd gf}}ddg}t          j        | j        |dd|| j                  j        }t          |                     |          |                     |          d           d S )	NrV   r   rW   rX   TrY   rZ   r[   r\   r^   r_   )	r9   ra   r   rb   r#   r   r   r   r   r   rg   rh   ri   r   s        r   test_minimize_tnc1czTestTnc.test_minimize_tnc1c   s    7rvgt_dD\:D1vdh5"&t&*i1 1 112 	
 	

DGGDMM======r   c                    ddgt           j         d gdd gf}}ddg}t          j        | j        |d| j        || j                  j        }t          |                     |          |                     |          d           d S )	NrV   r   r7   ARrX   rw   r^   r_   )	r9   ra   r   rb   r   r    r   r   r   rx   s        r   test_minimize_tnc2zTestTnc.test_minimize_tnc2   s    7rvgt_sDk:D#S)dgr%"&'$&*i1 1 112 	
 	

DGGDMM======r   c                    ddgt           j         d gdd gf}}ddg}t          j        | j        |d| j        || j                  j        }t          |                     |          |                     |          d           d S )	N
   r           r   rX   rw   r^   r_   )	r9   ra   r   rb   r'   r+   r   r   r   rx   s        r   test_minimize_tnc3zTestTnc.test_minimize_tnc3   s    7rvgt_sDk:D1vdgr%"&'$&*i1 1 112 	
 	

DGGDMM======r   c                     ddgddg}}ddg}t          j        | j        |d| j        || j                  j        }t          |                     |          |                     |          d	
           d S )N      ?      ?r   Nr   Nr   r   rX   rw   r^   r_   )r   rb   r1   r3   r   r   r   rx   s        r   test_minimize_tnc4zTestTnc.test_minimize_tnc4   s    %.9i"841vdgr%"&'$&*i1 1 112 	
 	

DGGDMM======r   c                     ddgddg}}ddg}t          j        | j        |d| j        || j                  j        }t          |                     |          |                     |          d	           d S )
Nr   rW   rM   r0   Zpes-8RrX   rw   r^   r_   )r   rb   r;   rA   r   r   r   rx   s        r   test_minimize_tnc5zTestTnc.test_minimize_tnc5   s    q6Ig.D$&9:dgr%"&'$&*i1 1 112 	
 	

DGGDMM======r   c                    t          j        g d          dgdz  }}dgdz  }t          j        | j        |d| j        || j                  j        }t          |                     |          |                     |          d           d S )	Nr   r   r   ir~   rM   r   rX   rw   r^   r_   )	r9   arrayr   rb   rF   rH   r   r   r   rx   s        r   test_minimize_tnc38zTestTnc.test_minimize_tnc38   s    8,,,--	{1}Ds1udh5"&(4&*i1 1 112 	
 	TXXd^^$??????r   c                     dgdz  g d}}g d}t          j        | j        |d| j        || j                  j        }t          |                     |          |                     |          d           d S )	Nr   rQ   )r   r   )r   r   )r   r0   )r   rM   )r   rQ   r   r   r0   rM   rQ   rX   rw   r^   r_   )r   rb   rO   rR   r   r   r   rx   s        r   test_minimize_tnc45zTestTnc.test_minimize_tnc45   s    37DDDDdh5"&(4&*i1 1 112 	
 	TXXd^^$??????r   c                 F   | j         ddgt          j         d gdd gf}}}ddg}t          j        |||dt          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j	        |         z   	           d S )
NrV   r   rW   r   r   )r[   argsmessagesr   r^   TNC failed with status: r`   err_msg
r#   r9   ra   r   fmin_tnc_tncMSG_NONEr   r   	RCSTRINGSr   fgr   r[   ri   nfrcs          r   	test_tnc1zTestTnc.test_tnc1   s    2q'bfWdOdD\+JvA1v%b!F/7}/E-02 2 2	2r 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 B   ddgt           j         d gdd gf}}ddg}t          j        | j        |d|t          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j        |         z   	           d S )
NrV   r   rW   Tr   )approx_gradr[   r   r   rp   r   r   )	r9   ra   r   r   r   r   r   r   r   r   r   r[   ri   r   r   s         r   
test_tnc1bzTestTnc.test_tnc1b   s    Gwod|<61v%dgqd-3/7}/E-02 2 2	2r
 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 L   ddgt           j         d gdd gf}}ddg}t          j        | j        || j        |t          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j	        |         z              d S )	NrV   r   rW   r   )fprimer[   r   r   r^   r   r   )
r9   ra   r   r   r   r    r   r   r   r   r   s         r   
test_tnc1czTestTnc.test_tnc1c   s    Gwod|<61v%dgq-3/7}/E-02 2 2	2r
 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 D   | j         ddgt          j         d gdd gf}}}ddg}t          j        |||t          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j	        |         z   	           d S )
NrV   r   r7   r{   r   r[   r   r   r^   r   r   r   r   s          r   	test_tnc2zTestTnc.test_tnc2   s    2q'bfWdOc4[+IvA#S)%b!F/7}/E-02 2 2	2r 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 D   | j         ddgt          j         d gdd gf}}}ddg}t          j        |||t          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j	        |         z   	           d S )
Nr~   r   r   r   r   r   r^   r   r   )
r-   r9   ra   r   r   r   r   r   r'   r   r   s          r   	test_tnc3zTestTnc.test_tnc3   s    2q'bfWdOc4[+IvA1v%b!F/7}/E-02 2 2	2r 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 &   | j         ddgddg}}}ddg}t          j        |||t          j        j        d          \  }}}t          |                     |          |                     |          d	d
t          j        j        |         z              d S )Nr   r   r   r   r   r   r   r   r^   r   r   )r5   r   r   r   r   r   r1   r   r   s          r   	test_tnc4zTestTnc.test_tnc4  s    5%.9i2HvA1v%b!F/7}/E-02 2 2	2r 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 &   | j         ddgddg}}}ddg}t          j        |||t          j        j        d          \  }}}t          |                     |          |                     |          dd	t          j        j        |         z   
           d S )Nr   r   r   r   r   r   r   r^   r   r   )rC   r   r   r   r   r   r;   r   r   s          r   	test_tnc5zTestTnc.test_tnc5  s    1a&9W*=vA$&9:%b!F/7}/E-02 2 2	2r 	

DGGDMM : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 R   | j         t          j        g d          dgdz  }}}dgdz  }t          j        |||t          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j	        |         z   	           d S )
Nr   r   rM   r   r   r   r^   r   r   )
rJ   r9   r   r   r   r   r   r   rF   r   r   s          r   
test_tnc38zTestTnc.test_tnc38  s    	28,<,<,<#=#=	{1}vAs1u%b!F/7}/E-02 2 2	2r 	TXXd^^$ : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 *   | j         dgdz  g d}}}g d}t          j        |||t          j        j        d          \  }}}t          |                     |          |                     |          ddt          j        j        |         z   	           d S )
Nr   rQ   r   r   r   r   r^   r   r   )rT   r   r   r   r   r   rO   r   r   s          r   
test_tnc45zTestTnc.test_tnc45&  s    	A37 -= -= -=vA%b!F/7}/E-02 2 2	2r 	TXXd^^$ : ( 7 ;!<	= 	= 	= 	= 	= 	=r   c                 D   d }d }d }t          j        t                    5  t          j        |ddgd           d d d            n# 1 swxY w Y   t          j        t
                    5  t          j        |ddgd|           d d d            d S # 1 swxY w Y   d S )	Nc                      t          d          )Nmyfunc)RuntimeErrorr   s    r   r   z/TestTnc.test_raising_exceptions.<locals>.myfunc6  s    x(((r   c                 *    t          j        |           S r"   )r   rosenr   s    r   myfunc1z0TestTnc.test_raising_exceptions.<locals>.myfunc19  s    >!$$$r   c                      t          d          )Nr]   )
ValueErrorr   s    r   r]   z1TestTnc.test_raising_exceptions.<locals>.callback<  s    Z(((r   r   r   rX   )rY   )rY   r]   )rq   raisesr   r   rb   r   )r   r   r   r]   s       r   test_raising_exceptionszTestTnc.test_raising_exceptions3  sO   	) 	) 	)	% 	% 	%	) 	) 	) ]<(( 	< 	<fq!fU;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< ]:&& 	 	!Q   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s#   A		AA-BBBc                 B   d }t           j        }dgdz  }g d}t          j        |||dddi          }t          j        |||dddi|	          }t          |j        |j                   t          |j        |j                   t          |j        |j                   d S )
Nc                     d S r"   r)   r   s    r   r]   zDTestTnc.test_callback_shouldnt_affect_minimization.<locals>.callbackM  s    Dr   )r   r~   rM   )r   r   r0   g      @rX   r   i  )r[   rY   r\   )r[   rY   r\   r]   )r   r   rb   r   r   rd   r   nfev)r   r]   rd   r[   rg   rk   res2s          r   *test_callback_shouldnt_affect_minimizationz2TestTnc.test_callback_shouldnt_affect_minimizationG  s    	 	 	 nQ]]F58T:J
 
 
  F58T:J
 
 
 	&&&#'***TY)))))r   c                     d}t          j        t          |          5  t          j        | j        ddgdddi           d d d            d S # 1 swxY w Y   d S )Nz2'maxiter' has been deprecated in favor of 'maxfun'rn   r   r0   rX   maxiter)rY   r\   )rq   rr   rs   r   rb   r   )r   msgs     r   test_maxiter_depreciationsz"TestTnc.test_maxiter_depreciations^  s    B\,C888 	 	!Q	1~   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   "AAANr   ),__name__
__module____qualname____doc__r   r   r    r#   r'   r+   r-   r1   r3   r5   r;   rA   rC   rF   rH   rJ   rO   rR   rT   rl   ru   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r)   r   r   r
   r
      s        3 3 3
F F F F   , , , ,3 3 3  & & &/ / /  & & &. . .  & & &= = =
 
 
( ( (> > >  ( ( (
	* 	* 	*B B B> > >> > >> > >> > >> > >@ @ @@ @ @
= 
= 
== = == = =
= 
= 
=
= 
= 
=
= 
= 
=
= 
= 
=
= 
= 
== = =  (* * *.    r   r
   )r   rq   numpy.testingr   r   numpyr9   mathr   scipyr   scipy.sparse._sputilsr   r
   r)   r   r   <module>r      s      7 7 7 7 7 7 7 7                 ( ( ( ( ( (U U U U U U U U U Ur   