
    ^Mh1                     \    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
  G d d          ZdS )z5
Unit tests for TNC optimization routine from tnc.py
    N)assert_allcloseassert_equalpow)optimizec                      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*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    ]/var/www/html/test/jupyter/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.fg30   !    wwqzz4771::%%r   c                 L    t          |d         dz   d          dz  |d         z   S )Nr   r      g      @r   r   r%   s     r   f4z
TestTnc.f43   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.g46   s4    !fQqTCZ##AA
r   c                 V    |                      |          |                     |          fS r!   )r0   r2   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          @r6   r7   )r8   cos)r   r   r   v1v2s        r   g5z
TestTnc.g5C   sc    !fVAaD1Q4K  !A$1+b3Ab3A
r   c                 V    |                      |          |                     |          fS r!   )r:   r@   r%   s     r   fg5zTestTnc.fg5L   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@r/   g333333$@3@r$   r   r%   s     r   f38zTestTnc.f38O   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@rD   r/   g     vg     f@r   r)   s      r   g38zTestTnc.g38V   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!   )rE   rG   r%   s     r   fg38zTestTnc.fg38b   !    xx{{DHHQKK''r   c                 f    d|d         |d         z  |d         z  |d         z  |d         z  dz  z
  S )Nr<   r   r   r   r/            ^@r(   r%   s     r   f45zTestTnc.f45e   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   r/   rL   rM   r(   r)   s      r   g45zTestTnc.g45h   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!   )rN   rQ   r%   s     r   fg45zTestTnc.fg45q   rJ   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)r8   infr   minimizer   r   r   appendr   funr   lennit)r   x0bndsxoptiterxress         r   test_minimize_tnc1zTestTnc.test_minimize_tnc1v   s    7rvgt_tTl;D1vEtw'+TY).7 7 7 	T::::SZZ)))))r   c                     t          j        ddg          t           j         d gdd gf}}ddg}t          j        | j        |d|| j                  j        }t          |                     |          |                     |          d           d S )NrU   r   rV   rW   )rX   rZ   r[   -C6?r^   )	r8   arrayr`   r   ra   r   r   r   r   r   rf   rg   rh   r   s        r   test_minimize_tnc1bzTestTnc.test_minimize_tnc1b   s    8RG$$t&ED1vdgr%%)49> > >>? 	


DGGDMM======r   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 )	NrU   r   rV   rW   TrX   rY   rZ   r[   r]   r^   )	r8   r`   r   ra   r"   r   r   r   r   ro   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 )	NrU   r   r6   ARrW   rr   r]   r^   )	r8   r`   r   ra   r   r   r   r   r   ro   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   rW   rr   r]   r^   )	r8   r`   r   ra   r&   r*   r   r   r   ro   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   rW   rr   r]   r^   )r   ra   r0   r2   r   r   r   ro   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   rV   rL   r/   Zpes-8RrW   rr   r]   r^   )r   ra   r:   r@   r   r   r   ro   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   irx   rL   r   rW   rr   r]   r^   )	r8   rn   r   ra   rE   rG   r   r   r   ro   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   rP   )r   r   )r   r   )r   r/   )r   rL   )r   rP   r   r   r/   rL   rP   rW   rr   r]   r^   )r   ra   rN   rQ   r   r   r   ro   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 )
NrU   r   rV   r   r   )rZ   argsmessagesr   r]   TNC failed with status: r_   err_msg
r"   r8   r`   r   fmin_tnc_tncMSG_NONEr   r   	RCSTRINGSr   fgr   rZ   rh   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 )
NrU   r   rV   Tr   )approx_gradrZ   r   r   rm   r   r   )	r8   r`   r   r   r   r   r   r   r   r   r   rZ   rh   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 )	NrU   r   rV   r   )fprimerZ   r   r   r]   r   r   )
r8   r`   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 )
NrU   r   r6   ru   r   rZ   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 )
Nrx   r   ry   r   r   r   r]   r   r   )
r,   r8   r`   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   )r4   r   r   r   r   r   r0   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   )rB   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   rL   r   r   r   r]   r   r   )
rI   r8   rn   r   r   r   r   r   rE   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   rP   r   r   r   r   r]   r   r   )rS   r   r   r   r   r   rN   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>.myfunc3  s    x(((r   c                 *    t          j        |           S r!   )r   rosenr   s    r   myfunc1z0TestTnc.test_raising_exceptions.<locals>.myfunc16  s    >!$$$r   c                      t          d          )Nr\   )
ValueErrorr   s    r   r\   z1TestTnc.test_raising_exceptions.<locals>.callback9  s    Z(((r   r   r   rW   )rX   )rX   r\   )pytestraisesr   r   ra   r   )r   r   r   r\   s       r   test_raising_exceptionszTestTnc.test_raising_exceptions0  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>.callbackJ  s    Dr   )r   rx   rL   )r   r   r/   g      @rW   r   i  )rZ   rX   r[   )rZ   rX   r[   r\   )r   r   ra   r   r   rc   r   nfev)r   r\   rc   rZ   rf   rj   res2s          r   *test_callback_shouldnt_affect_minimizationz2TestTnc.test_callback_shouldnt_affect_minimizationD  s    	 	 	 nQ]]F58T:J
 
 
  F58T:J
 
 
 	&&&#'***TY)))))r   Nr   )+__name__
__module____qualname____doc__r   r   r   r"   r&   r*   r,   r0   r2   r4   r:   r@   rB   rE   rG   rI   rN   rQ   rS   rk   rp   rs   rv   rz   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  & & &/ / /  & & &. . .  & & &= = =
 
 
( ( (> > >  ( ( (
	* 	* 	*> > >> > >> > >> > >> > >> > >@ @ @@ @ @
= 
= 
== = == = =
= 
= 
=
= 
= 
=
= 
= 
=
= 
= 
=
= 
= 
== = =  (* * * * *r   r	   )r   r   numpy.testingr   r   numpyr8   mathr   scipyr   r	   r(   r   r   <module>r      s      7 7 7 7 7 7 7 7                L* L* L* L* L* L* L* L* L* L*r   