
    tKg1                     T    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y)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*y))+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| _         y )NF   )dispmaxfun)opts)selfs    a/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_tnc.pysetup_methodzTestTnc.setup_method   s    "c2	    c                 l    |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   s;    3!s1Q4|+a003sQqTz13EEEr   c                 x    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   sY    !fQ!A$QqT1-.A1Q#.45A
r   c                 J    | j                  ||      | j                  ||      fS N)r   r   r   s      r   fg1zTestTnc.fg1$   s!    wwq!}dggam++r   c                 >    |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                 L    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                 F    | j                  |      | j                  |      fS r    )r%   r)   r$   s     r   fg3zTestTnc.fg30       wwqz4771:%%r   c                 8    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                 B    ddg}t        |d   dz   d      |d<   d|d<   |S )Nr   r   r   r   r   r(   s      r   g4z
TestTnc.g46   s1    !fQqTCZ#AA
r   c                 F    | j                  |      | j                  |      fS r    )r/   r1   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?   s_    vvadQqTk"S1!a%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          @r5   r6   )r7   cos)r   r   r   v1v2s        r   g5z
TestTnc.g5C   sb    !fVVAaD1Q4K !A$1+b3Ab3A
r   c                 F    | j                  |      | j                  |      fS r    )r9   r?   r$   s     r   fg5zTestTnc.fg5L   r,   r   c           	      Z   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 )N      Y@r   r   r   r   g     V@r.   g333333$@3@r#   r   r$   s     r   f38z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                    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   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    | j                  |      | j                  |      fS r    )rE   rG   r$   s     r   fg38zTestTnc.fg38b       xx{DHHQK''r   c                 H    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                 F    | j                  |      | j                  |      fS r    )rN   rQ   r$   s     r   fg45zTestTnc.fg45q   rJ   r   c           	      Z   ddgt         j                   d gdd gf}}ddg}g }t        j                  | j                  |d| j
                  || j                  |j                        }t        |j                  | j	                  |      d       t        t        |      |j                         y )Nr         TNC)methodjacboundsoptionscallback:0yE>atol)r7   infr   minimizer   r   r   appendr   funr   lennit)r   x0bndsxoptiterxress         r   test_minimize_tnc1zTestTnc.test_minimize_tnc1v   s    7rvvgt_tTl;D1vEtww'+TYY).7 	T:SZ)r   c                 0   t        j                  ddg      t         j                   d gdd gf}}ddg}t        j                  | j
                  |d|| j                        j                  }t        | j                  |      | j                  |      d       y )NrU   r   rV   rW   )rX   rZ   r[   -C6?r^   )	r7   arrayr`   r   ra   r   r   r   r   r   rf   rg   rh   r   s        r   test_minimize_tnc1bzTestTnc.test_minimize_tnc1b   s{    88RG$t&ED1vdggr%%)499>>?a 	

DGGDM=r   c                    ddgt         j                   d gdd gf}}ddg}t        j                  | j                  |dd|| j
                        j                  }t        | j                  |      | j                  |      d       y )	NrU   r   rV   rW   TrX   rY   rZ   r[   r]   r^   )	r7   r`   r   ra   r!   r   r   r   r   ro   s        r   test_minimize_tnc1czTestTnc.test_minimize_tnc1c   sw    7rvvgt_dD\:D1vdhh5"&t&*ii112 	
 	
DGGDM=r   c                     ddgt         j                   d gdd gf}}ddg}t        j                  | j                  |d| j
                  || j                        j                  }t        | j	                  |      | j	                  |      d       y )	NrU   r   r5   ARrW   rr   r]   r^   )	r7   r`   r   ra   r   r   r   r   r   ro   s        r   test_minimize_tnc2zTestTnc.test_minimize_tnc2   s|    7rvvgt_sDk:D#S)dggr%"&''$&*ii112 	
 	
DGGDM=r   c                     ddgt         j                   d gdd gf}}ddg}t        j                  | j                  |d| j
                  || j                        j                  }t        | j	                  |      | j	                  |      d       y )	N
   r           r   rW   rr   r]   r^   )	r7   r`   r   ra   r%   r)   r   r   r   ro   s        r   test_minimize_tnc3zTestTnc.test_minimize_tnc3   s{    7rvvgt_sDk:D1vdggr%"&''$&*ii112 	
 	
DGGDM=r   c                     ddgddg}}ddg}t        j                  | j                  |d| j                  || j                        j
                  }t        | j                  |      | j                  |      d	
       y )N      ?      ?r   Nr   Nr   r   rW   rr   r]   r^   )r   ra   r/   r1   r   r   r   ro   s        r   test_minimize_tnc4zTestTnc.test_minimize_tnc4   sm    %.9i"841vdggr%"&''$&*ii112 	
 	
DGGDM=r   c                     ddgddg}}ddg}t        j                  | j                  |d| j                  || j                        j
                  }t        | j                  |      | j                  |      d	       y )
Nr   rV   rL   r.   Zpes-8RrW   rr   r]   r^   )r   ra   r9   r?   r   r   r   ro   s        r   test_minimize_tnc5zTestTnc.test_minimize_tnc5   so    q6Ig.D$&9:dggr%"&''$&*ii112 	
 	
DGGDM=r   c                 (   t        j                  g d      dgdz  }}dgdz  }t        j                  | j                  |d| j
                  || j                        j                  }t        | j	                  |      | j	                  |      d       y )	Nr   r   r   irx   rL   r   rW   rr   r]   r^   )	r7   rn   r   ra   rE   rG   r   r   r   ro   s        r   test_minimize_tnc38zTestTnc.test_minimize_tnc38   sv    88,-	{1}Ds1udhh5"&((4&*ii112 	
 	TXXd^$?r   c                     dgdz  g d}}g d}t        j                  | j                  |d| j                  || j                        j
                  }t        | j                  |      | j                  |      d       y )	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   sg    37DDdhh5"&((4&*ii112 	
 	TXXd^$?r   c                 ^   | j                   ddgt        j                   d gdd gf}}}ddg}t        j                  |||dt        j
                  j                  d      \  }}}t        | j                  |      | j                  |      ddt        j
                  j                  |   z   	       y )
NrU   r   rV   rC   r   )rZ   argsmessagesr   r]   TNC failed with status: r_   err_msg
r!   r7   r`   r   fmin_tnc_tncMSG_NONEr   r   	RCSTRINGSr   fgr   rZ   rh   nfrcs          r   	test_tnc1zTestTnc.test_tnc1   s    2q'bffWdOdD\+JvA1v%%b!F/7}}/E/E-02	2r 	
DGGDM : ( 7 7 ;!<	=r   c                 Z   ddgt         j                   d gdd gf}}ddg}t        j                  | j                  |d|t        j
                  j                  d      \  }}}t        | j	                  |      | j	                  |      ddt        j
                  j                  |   z   	       y )
NrU   r   rV   Tr   )approx_gradrZ   r   r   rm   r   r   )	r7   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%%dggqd-3/7}}/E/E-02	2r
 	
DGGDM : ( 7 7 ;!<	=r   c                 n   ddgt         j                   d gdd gf}}ddg}t        j                  | j                  || j
                  |t        j                  j                  d      \  }}}t        | j	                  |      | j	                  |      ddt        j                  j                  |   z          y )	NrU   r   rV   r   )fprimerZ   r   r   r]   r   r   )
r7   r`   r   r   r   r   r   r   r   r   r   s         r   
test_tnc1czTestTnc.test_tnc1c   s    Gwod|<61v%%dggq-3/7}}/E/E-02	2r
 	
DGGDM : ( 7 7 ;!<	=r   c                 \   | j                   ddgt        j                   d gdd gf}}}ddg}t        j                  |||t        j
                  j                  d      \  }}}t        | j                  |      | j                  |      ddt        j
                  j                  |   z   	       y )
NrU   r   r5   ru   r   rZ   r   r   r]   r   r   r   r   s          r   	test_tnc2zTestTnc.test_tnc2   s    2q'bffWdOc4[+IvA#S)%%b!F/7}}/E/E-02	2r 	
DGGDM : ( 7 7 ;!<	=r   c                 \   | j                   ddgt        j                   d gdd gf}}}ddg}t        j                  |||t        j
                  j                  d      \  }}}t        | j                  |      | j                  |      ddt        j
                  j                  |   z   	       y )
Nrx   r   ry   r   r   r   r]   r   r   )
r+   r7   r`   r   r   r   r   r   r%   r   r   s          r   	test_tnc3zTestTnc.test_tnc3   s    2q'bffWdOc4[+IvA1v%%b!F/7}}/E/E-02	2r 	
DGGDM : ( 7 7 ;!<	=r   c                 6   | j                   ddgddg}}}ddg}t        j                  |||t        j                  j                  d      \  }}}t        | j                  |      | j                  |      d	d
t        j                  j                  |   z          y )Nr|   r}   r~   r   r   r   r   r   r]   r   r   )r3   r   r   r   r   r   r/   r   r   s          r   	test_tnc4zTestTnc.test_tnc4   s    5%.9i2HvA1v%%b!F/7}}/E/E-02	2r 	
DGGDM : ( 7 7 ;!<	=r   c                 6   | j                   ddgddg}}}ddg}t        j                  |||t        j                  j                  d      \  }}}t        | j                  |      | j                  |      dd	t        j                  j                  |   z   
       y )Nr   r   r   r   r   r   r   r]   r   r   )rA   r   r   r   r   r   r9   r   r   s          r   	test_tnc5zTestTnc.test_tnc5  s    1a&9W*=vA$&9:%%b!F/7}}/E/E-02	2r 	
DGGDM : ( 7 7 ;!<	=r   c                 d   | j                   t        j                  g d      dgdz  }}}dgdz  }t        j                  |||t        j
                  j                  d      \  }}}t        | j                  |      | j                  |      ddt        j
                  j                  |   z   	       y )
Nr   r   rL   r   r   r   r]   r   r   )
rI   r7   rn   r   r   r   r   r   rE   r   r   s          r   
test_tnc38zTestTnc.test_tnc38  s    		288,<#=	{1}vAs1u%%b!F/7}}/E/E-02	2r 	TXXd^$ : ( 7 7 ;!<	=r   c                 :   | j                   dgdz  g d}}}g d}t        j                  |||t        j                  j                  d      \  }}}t        | j                  |      | j                  |      ddt        j                  j                  |   z   	       y )
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/E-02	2r 	TXXd^$ : ( 7 7 ;!<	=r   c                 8   d }d }d }t        j                  t              5  t        j                  |ddgd       d d d        t        j                  t
              5  t        j                  |ddgd|       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)	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  s}    	)	%	) ]]<(fq!fU; ) ]]:&!Q '& )( '&s   BBBBc                 p   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                         y )
Nc                      y r    r'   r   s    r   r\   zDTestTnc.test_callback_shouldnt_affect_minimization.<locals>.callbackJ  s    r   )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    	 nnQF58T:J
   F58T:J
 	&#''*TYY)r   Nr   )+__name__
__module____qualname____doc__r   r   r   r!   r%   r)   r+   r/   r1   r3   r9   r?   rA   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
F,3&/&.&=
(>(
	*>>>>>>@@
===
=
=
=
=
==(*r   r	   )r   r   numpy.testingr   r   numpyr7   mathr   scipyr   r	   r'   r   r   <module>r      s'     7   L* L*r   