
    (ph1                     T    S r SSKrSSKJrJr  SSKrSSKJr  SSK	J
r
   " S S5      rg)z5
Unit tests for TNC optimization routine from tnc.py
    N)assert_allcloseassert_equalpow)optimizec                      \ rS rSrSrS rS,S jrS,S jrS,S jrS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S*r,g+)-TestTnc   zTNC 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                     SSS.U l         g )NF   )dispmaxfunopts)selfs    P/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_tnc.pysetup_methodTestTnc.setup_method   s    "c2	    c                 l    U[        US   [        US   S5      -
  S5      -  [        SUS   -
  S5      -   $ )N   r            ?r   r   xas      r   f1
TestTnc.f1   s;    3!s1Q4|+a003sQqTz13EEEr   c                 x    SS/nSU-  US   [        US   S5      -
  -  US'   SUS   US   S-
  -  S-   -  US'   U$ )Nr   r   r          r   r   )r   r   r   difs       r   g1
TestTnc.g1   sY    !fQ!A$QqT1-.A1Q#.45A
r   c                 F    U R                  X5      U R                  X5      4$ N)r   r"   r   s      r   fg1TestTnc.fg1$   s    wwq}dggam++r   c                 >    US   [        US   US   -
  S5      S-  -   $ )Nr   r   r   h㈵>r   r   r   s     r   f3
TestTnc.f3'   s)    tc!A$1+q)F222r   c                 L    SS/nSUS   US   -
  -  S-  US'   SUS   -
  US'   U$ )Nr   r    r   r)   r    r   r   r!   s      r   g3
TestTnc.g3*   s@    !f1!%.As1vA
r   c                 F    U R                  U5      U R                  U5      4$ r%   )r+   r0   r*   s     r   fg3TestTnc.fg30       wwqz4771:%%r   c                 8    [        US   S-   S5      S-  US   -   $ )Nr   r      g      @r   r   r*   s     r   f4
TestTnc.f43   s%    1Q4#:q!C'!A$..r   c                 B    SS/n[        US   S-   S5      US'   SUS'   U$ )Nr   r   r   r   r   r/   s      r   g4
TestTnc.g46   s1    !fQqTCZ#AA
r   c                 F    U R                  U5      U R                  U5      4$ r%   )r8   r;   r*   s     r   fg4TestTnc.fg4<   r5   r   c                     [         R                  " US   US   -   5      [        US   US   -
  S5      -   SUS   -  -
  SUS   -  -   S-   $ )Nr   r   r         ?      @r   )npsinr   r*   s     r   f5
TestTnc.f5?   s_    vvadQqTk"S1!a%88ad
 1Q4Z(*-. 	.r   c                     SS/n[         R                  " US   US   -   5      nSUS   US   -
  -  nX4-   S-
  US'   X4-
  S-   US'   U$ )Nr   r          @rA   rB   )rC   cos)r   r   r!   v1v2s        r   g5
TestTnc.g5C   s^    !fVVAaD1Q4K !A$1+3A3A
r   c                 F    U R                  U5      U R                  U5      4$ r%   )rE   rL   r*   s     r   fg5TestTnc.fg5L   r5   r   c           	      Z   S[        US   [        US   S5      -
  S5      -  [        SUS   -
  S5      -   S[        US   [        US   S5      -
  S5      -  -   [        SUS   -
  S5      -   S[        US   S-
  S5      [        US   S-
  S5      -   -  -   S	US   S-
  -  US   S-
  -  -   S
-  $ )N      Y@r   r   r   r   g     V@r7   g333333$@3@r)   r   r*   s     r   f38TestTnc.f38O   s    AaD3qtQ</33C!A$J"#%)C!s1Q4|0CQ,G%GHC!A$J"#%)S1Q-?-01Q-?.@ &AA !s
#qtcz2	3 7=	= 	=r   c                    / SQnSUS   -  US   [        US   S5      -
  -  SSUS   -
  -  -
  S-  US'   S	US   [        US   S5      -
  -  S
US   S-
  -  -   SUS   S-
  -  -   S-  US'   SUS   -  US   [        US   S5      -
  -  SSUS   -
  -  -
  S-  US'   SUS   [        US   S5      -
  -  S
US   S-
  -  -   SUS   S-
  -  -   S-  US'   U$ )N)r   r   r   r   g      yr   r   r   rH   r   r)   g      i@g3333334@rS   r7   g     vg     f@r   r/   s      r   g38TestTnc.g38V   s8   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                 F    U R                  U5      U R                  U5      4$ r%   )rT   rW   r*   s     r   fg38TestTnc.fg38b       xx{DHHQK''r   c                 H    SUS   US   -  US   -  US   -  US   -  S-  -
  $ )NrH   r   r   r   r7            ^@r.   r*   s     r   f45TestTnc.f45e   s9    QqTAaD[1Q4'!A$.15===r   c                 >   S/S-  nUS   * US   -  US   -  US   -  S-  US'   US   * US   -  US   -  US   -  S-  US'   US   * US   -  US   -  US   -  S-  US'   US   * US   -  US   -  US   -  S-  US'   US   * US   -  US   -  US   -  S-  US'   U$ )Nr      r   r   r7   r^   r_   r.   r/   s      r   g45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                 F    U R                  U5      U R                  U5      4$ r%   )r`   rd   r*   s     r   fg45TestTnc.fg45q   r\   r   c           
      L   SS/[         R                  * S /SS /4p!SS/n/ n[        R                  " U R                  USU R
                  X R                  UR                  S9n[        UR                  U R	                  U5      SS9  [        [        U5      UR                  5        g )Nr         TNC)methodjacboundsoptionscallback:0yE>atol)rC   infr   minimizer   r"   r   appendr   funr   lennit)r   x0bndsxoptiterxress         r   test_minimize_tnc1TestTnc.test_minimize_tnc1v   s    7rvvgt_tTl;D1vEtww'+YY).7 	T:SZ)r   c                 $   [         R                  " SS/5      [         R                  * S /SS /4p!SS/n[        R                  " U R
                  USX R                  S9R                  n[        U R                  U5      U R                  U5      SS9  g )Nrj   r   rk   rl   )rm   ro   rp   -C6?rs   )	rC   arrayru   r   rv   r   r   r   r   r   r{   r|   r}   r   s        r   test_minimize_tnc1bTestTnc.test_minimize_tnc1b   sw    88RG$t&ED1vdggr%%)99>>?a 	

DGGDM=r   c           	          SS/[         R                  * S /SS /4p!SS/n[        R                  " U R                  USSUU R
                  S9R                  n[        U R                  U5      U R                  U5      SS9  g )	Nrj   r   rk   rl   Trm   rn   ro   rp   rr   rs   )	rC   ru   r   rv   r&   r   r   r   r   r   s        r   test_minimize_tnc1cTestTnc.test_minimize_tnc1c   su    7rvvgt_dD\:D1vdhh5"&t&*ii112 	
 	
DGGDM=r   c           	         SS/[         R                  * S /SS /4p!SS/n[        R                  " U R                  USU R
                  UU R                  S9R                  n[        U R	                  U5      U R	                  U5      SS9  g )	Nrj   r   rA   ARrl   r   rr   rs   )	rC   ru   r   rv   r   r"   r   r   r   r   s        r   test_minimize_tnc2TestTnc.test_minimize_tnc2   sz    7rvvgt_sDk:D#S)dggr%"&''$&*ii112 	
 	
DGGDM=r   c           	         SS/[         R                  * S /SS /4p!SS/n[        R                  " U R                  USU R
                  UU R                  S9R                  n[        U R	                  U5      U R	                  U5      SS9  g )	N
   r           r   rl   r   rr   rs   )	rC   ru   r   rv   r+   r0   r   r   r   r   s        r   test_minimize_tnc3TestTnc.test_minimize_tnc3   sy    7rvvgt_sDk:D1vdggr%"&''$&*ii112 	
 	
DGGDM=r   c           	          SS/SS/p!SS/n[         R                  " U R                  USU R                  UU R                  S9R
                  n[        U R                  U5      U R                  U5      S	S
9  g )N      ?      ?r   Nr   Nr   r   rl   r   rr   rs   )r   rv   r8   r;   r   r   r   r   s        r   test_minimize_tnc4TestTnc.test_minimize_tnc4   sk    %.9i"841vdggr%"&''$&*ii112 	
 	
DGGDM=r   c           	          SS/SS/p!SS/n[         R                  " U R                  USU R                  UU R                  S9R
                  n[        U R                  U5      U R                  U5      SS	9  g )
Nr   rk   r^   r7   Zpes-8Rrl   r   rr   rs   )r   rv   rE   rL   r   r   r   r   s        r   test_minimize_tnc5TestTnc.test_minimize_tnc5   sm    q6Ig.D$&9:dggr%"&''$&*ii112 	
 	
DGGDM=r   c           	         [         R                  " / SQ5      S/S-  p!S/S-  n[        R                  " U R                  USU R
                  UU R                  S9R                  n[        U R	                  U5      U R	                  U5      SS9  g )	Nr   r   r   ir   r^   r   rl   r   rr   rs   )	rC   r   r   rv   rT   rW   r   r   r   r   s        r   test_minimize_tnc38TestTnc.test_minimize_tnc38   st    88,-	{1}Ds1udhh5"&((4&*ii112 	
 	TXXd^$?r   c           	          S/S-  / SQp!/ SQn[         R                  " U R                  USU R                  UU R                  S9R
                  n[        U R                  U5      U R                  U5      SS9  g )	Nr   rc   )r   r   )r   r   )r   r7   )r   r^   )r   rc   r   r   r7   r^   rc   rl   r   rr   rs   )r   rv   r`   rd   r   r   r   r   s        r   test_minimize_tnc45TestTnc.test_minimize_tnc45   se    37DDdhh5"&((4&*ii112 	
 	TXXd^$?r   c           	      N   U R                   SS/[        R                  * S /SS /4p2nSS/n[        R                  " XUS[        R
                  R                  SS9u  p%n[        U R                  U5      U R                  U5      SS[        R
                  R                  U   -   S	9  g )
Nrj   r   rk   rR   r   )ro   argsmessagesr   rr   TNC failed with status: rt   err_msg
r&   rC   ru   r   fmin_tnc_tncMSG_NONEr   r   	RCSTRINGSr   fgr   ro   r}   nfrcs          r   	test_tnc1TestTnc.test_tnc1   s    2q'bffWdOdD\+Jv1v%%bF/7}}/E/E-02	r 	
DGGDM : ( 7 7 ;!<	=r   c           	      L   SS/[         R                  * S /SS /4p!SS/n[        R                  " U R                  USU[        R
                  R                  SS9u  pn[        U R	                  U5      U R	                  U5      SS[        R
                  R                  U   -   S	9  g )
Nrj   r   rk   Tr   )approx_gradro   r   r   r   r   r   )	rC   ru   r   r   r   r   r   r   r   r   r   ro   r}   r   r   s         r   
test_tnc1bTestTnc.test_tnc1b   s    Gwod|<61v%%dggqd-3/7}}/E/E-02	r
 	
DGGDM : ( 7 7 ;!<	=r   c           	      ^   SS/[         R                  * S /SS /4p!SS/n[        R                  " U R                  XR
                  U[        R                  R                  SS9u  pn[        U R	                  U5      U R	                  U5      SS[        R                  R                  U   -   S9  g )	Nrj   r   rk   r   )fprimero   r   r   rr   r   r   )
rC   ru   r   r   r   r"   r   r   r   r   r   s         r   
test_tnc1cTestTnc.test_tnc1c   s    Gwod|<61v%%dggq-3/7}}/E/E-02	r
 	
DGGDM : ( 7 7 ;!<	=r   c                 L   U R                   SS/[        R                  * S /SS /4p2nSS/n[        R                  " XU[        R
                  R                  SS9u  p%n[        U R                  U5      U R                  U5      SS[        R
                  R                  U   -   S	9  g )
Nrj   r   rA   r   r   ro   r   r   rr   r   r   r   r   s          r   	test_tnc2TestTnc.test_tnc2   s    2q'bffWdOc4[+Iv#S)%%bF/7}}/E/E-02	r 	
DGGDM : ( 7 7 ;!<	=r   c                 L   U R                   SS/[        R                  * S /SS /4p2nSS/n[        R                  " XU[        R
                  R                  SS9u  p%n[        U R                  U5      U R                  U5      SS[        R
                  R                  U   -   S	9  g )
Nr   r   r   r   r   r   rr   r   r   )
r3   rC   ru   r   r   r   r   r   r+   r   r   s          r   	test_tnc3TestTnc.test_tnc3   s    2q'bffWdOc4[+Iv1v%%bF/7}}/E/E-02	r 	
DGGDM : ( 7 7 ;!<	=r   c                 &   U R                   SS/SS/p2nSS/n[        R                  " XU[        R                  R                  SS9u  p%n[        U R                  U5      U R                  U5      S	S
[        R                  R                  U   -   S9  g )Nr   r   r   r   r   r   r   r   rr   r   r   )r>   r   r   r   r   r   r8   r   r   s          r   	test_tnc4TestTnc.test_tnc4   s    5%.9i2Hv1v%%bF/7}}/E/E-02	r 	
DGGDM : ( 7 7 ;!<	=r   c                 &   U R                   SS/SS/p2nSS/n[        R                  " XU[        R                  R                  SS9u  p%n[        U R                  U5      U R                  U5      SS	[        R                  R                  U   -   S
9  g )Nr   r   r   r   r   r   r   rr   r   r   )rO   r   r   r   r   r   rE   r   r   s          r   	test_tnc5TestTnc.test_tnc5  s    1a&9W*=v$&9:%%bF/7}}/E/E-02	r 	
DGGDM : ( 7 7 ;!<	=r   c                 V   U R                   [        R                  " / SQ5      S/S-  p2nS/S-  n[        R                  " XU[        R
                  R                  SS9u  p%n[        U R                  U5      U R                  U5      SS[        R
                  R                  U   -   S	9  g )
Nr   r   r^   r   r   r   rr   r   r   )
rZ   rC   r   r   r   r   r   r   rT   r   r   s          r   
test_tnc38TestTnc.test_tnc38  s    		288,<#=	{1}vs1u%%bF/7}}/E/E-02	r 	TXXd^$ : ( 7 7 ;!<	=r   c                 *   U R                   S/S-  / SQp2n/ SQn[        R                  " XU[        R                  R                  SS9u  p%n[        U R                  U5      U R                  U5      SS[        R                  R                  U   -   S	9  g )
Nr   rc   r   r   r   r   rr   r   r   )rg   r   r   r   r   r   r`   r   r   s          r   
test_tnc45TestTnc.test_tnc45#  s    		A37 -=v%%bF/7}}/E/E-02	r 	TXXd^$ : ( 7 7 ;!<	=r   c                 H   S nS nS n[         R                  " [        5         [        R                  " USS/SS9  S S S 5        [         R                  " [
        5         [        R                  " USS/SUS9  S S S 5        g ! , (       d  f       NK= f! , (       d  f       g = f)	Nc                     [        S5      e)Nmyfunc)RuntimeErrorr   s    r   r   /TestTnc.test_raising_exceptions.<locals>.myfunc3  s    x((r   c                 .    [         R                  " U 5      $ r%   )r   rosenr   s    r   myfunc10TestTnc.test_raising_exceptions.<locals>.myfunc16  s    >>!$$r   c                     [        S5      e)Nrq   )
ValueErrorr   s    r   rq   1TestTnc.test_raising_exceptions.<locals>.callback9  s    Z((r   r   r   rl   )rm   )rm   rq   )pytestraisesr   r   rv   r   )r   r   r   rq   s       r   test_raising_exceptionsTestTnc.test_raising_exceptions0  s}    	)	%	) ]]<(fq!fU; ) ]]:&!Q '& )( '&s   BB
B
B!c           	      d   S n[         R                  nS/S-  n/ SQn[         R                  " X$USSS0S9n[         R                  " X$USSS0US	9n[        UR                  UR                  5        [        UR
                  UR
                  5        [        UR                  UR                  5        g )
Nc                     g r%   r.   r   s    r   rq   DTestTnc.test_callback_shouldnt_affect_minimization.<locals>.callbackJ  s    r   )r   r   r^   )r   r   r7   g      @rl   r   i  )ro   rm   rp   )ro   rm   rp   rq   )r   r   rv   r   r   rx   r   nfev)r   rq   rx   ro   r{   r   res2s          r   *test_callback_shouldnt_affect_minimization2TestTnc.test_callback_shouldnt_affect_minimizationD  s    	 nnQF58T:J
   F58T:J
 	&#''*TYY)r   r   Nr   )-__name__
__module____qualname____firstlineno____doc__r   r   r"   r&   r+   r0   r3   r8   r;   r>   rE   rL   rO   rT   rW   rZ   r`   rd   rg   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__r.   r   r   r	   r	      s    3
F,3&/&.&=
(>(
	*>>>>>>@@
===
=
=
=
=
==(*r   r	   )r   r   numpy.testingr   r   numpyrC   mathr   scipyr   r	   r.   r   r   <module>r      s'     7   L* L*r   