o
    A+ i1                     @   sN   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 dZdS )z5
Unit tests for TNC optimization routine from tnc.py
    N)assert_allcloseassert_equalpow)optimizec                   @   sN  e Zd ZdZdd ZdRddZdRddZdRd	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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQS )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                 C   s   ddd| _ d S )NF   )Zdispmaxfun)opts)self r   i/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/scipy/optimize/tests/test_tnc.pysetup_method   s   zTestTnc.setup_method      Y@c                 C   s2   |t |d t |d d d t d|d  d S )N   r            ?r   r   xar   r   r   f1   s   2z
TestTnc.f1c                 C   sN   ddg}d| |d t |d d  |d< d|d |d d  d  |d< |S )Nr   r   r          r   r   )r   r   r   difr   r   r   g1   s   " z
TestTnc.g1c                 C   s   |  ||| ||fS N)r   r   r   r   r   r   fg1$   s   zTestTnc.fg1c                 C   s"   |d t |d |d  dd  S )Nr   r   r   h㈵>r   r   r   r   r   r   f3'   s   "z
TestTnc.f3c                 C   s8   ddg}d|d |d   d |d< d|d  |d< |S )Nr   r   r   r   r   r   r   r   r   r   r   r   g3*   s   z
TestTnc.g3c                 C      |  || |fS r   )r   r    r   r   r   r   fg30      zTestTnc.fg3c                 C   s   t |d d dd |d  S )Nr   r      g      @r   r   r   r   r   r   f43   s   z
TestTnc.f4c                 C   s*   ddg}t |d d d|d< d|d< |S )Nr   r   r   r   r   r   r   r   r   g46   s   z
TestTnc.g4c                 C   r!   r   )r%   r&   r   r   r   r   fg4<   r#   zTestTnc.fg4c                 C   sH   t |d |d  t|d |d  d d|d   d|d   d S )Nr   r   r         ?      @r   )npsinr   r   r   r   r   f5?   s   *

z
TestTnc.f5c                 C   sV   ddg}t |d |d  }d|d |d   }|| d |d< || d |d< |S )Nr   r          @r(   r)   )r*   cos)r   r   r   v1v2r   r   r   g5C   s   z
TestTnc.g5c                 C   r!   r   )r,   r1   r   r   r   r   fg5L   r#   zTestTnc.fg5c                 C   s   dt |d t |d d d t d|d  d dt |d t |d d d  t d|d  d dt |d d dt |d d d   d	|d d  |d d   d
 S )Nr   r   r   r   r   g     V@r$   g333333$@3@r   r   r   r   r   r   f38O   s   zTestTnc.f38c                 C   s  g d}d|d  |d t |d d  dd|d    d |d< d	|d t |d d  d
|d d   d|d d   d |d< d|d  |d t |d d  dd|d    d |d< d|d t |d d  d
|d d   d|d d   d |d< |S )N)r   r   r   r   g      yr   r   r   r-   r   r   g      i@g3333334@r3   r$   g     vg     f@r   r   r   r   r   g38V   s,    ( (zTestTnc.g38c                 C   r!   r   )r4   r5   r   r   r   r   fg38b   r#   zTestTnc.fg38c                 C   s0   d|d |d  |d  |d  |d  d  S )Nr-   r   r   r   r$            ^@r   r   r   r   r   f45e   s   0zTestTnc.f45c                 C   s   dgd }|d  |d  |d  |d  d |d< |d  |d  |d  |d  d |d< |d  |d  |d  |d  d |d< |d  |d  |d  |d  d |d< |d  |d  |d  |d  d |d< |S )Nr      r   r   r$   r7   r8   r   r   r   r   r   g45h   s   
*****zTestTnc.g45c                 C   r!   r   )r9   r;   r   r   r   r   fg45q   r#   zTestTnc.fg45c              	   C   st   ddgt j d gdd gf}}ddg}g }tj| j|d| j|| j|jd}t|j	| |dd t
t||j d S )Nr         TNC)methodjacboundsoptionscallback:0yE>atol)r*   infr   minimizer   r   r
   appendr   funr   lennit)r   x0bndsxoptZiterxresr   r   r   test_minimize_tnc1v   s   zTestTnc.test_minimize_tnc1c                 C   sd   t ddgt j d gdd gf}}ddg}tj| j|d|| jdj}t| || |dd d S )Nr=   r   r>   r?   )r@   rB   rC   -C6?rF   )	r*   arrayrH   r   rI   r   r
   r   r   r   rN   rO   rP   r   r   r   r   test_minimize_tnc1b   s   $zTestTnc.test_minimize_tnc1bc                 C   s`   ddgt j d gdd gf}}ddg}tj| j|dd|| jdj}t| || |dd d S )	Nr=   r   r>   r?   Tr@   rA   rB   rC   rE   rF   )	r*   rH   r   rI   r   r
   r   r   r   rU   r   r   r   test_minimize_tnc1c   s   zTestTnc.test_minimize_tnc1cc                 C   sb   ddgt j d gdd gf}}ddg}tj| j|d| j|| jdj}t| || |dd d S )	Nr=   r   r(   ARr?   rW   rE   rF   )	r*   rH   r   rI   r   r   r
   r   r   rU   r   r   r   test_minimize_tnc2      zTestTnc.test_minimize_tnc2c                 C   sb   ddgt j d gdd gf}}ddg}tj| j|d| j|| jdj}t| || |dd d S )	N
   r           r   r?   rW   rE   rF   )	r*   rH   r   rI   r   r    r
   r   r   rU   r   r   r   test_minimize_tnc3   r[   zTestTnc.test_minimize_tnc3c                 C   sV   ddgddg}}ddg}t j| j|d| j|| jdj}t| || |d	d
 d S )N      ?      ?r   Nr   Nr   r   r?   rW   rE   rF   )r   rI   r%   r&   r
   r   r   rU   r   r   r   test_minimize_tnc4      zTestTnc.test_minimize_tnc4c                 C   sV   ddgddg}}ddg}t j| j|d| j|| jdj}t| || |dd	 d S )
Nr   r>   r7   r$   Zpes-8Rr?   rW   rE   rF   )r   rI   r,   r1   r
   r   r   rU   r   r   r   test_minimize_tnc5   rd   zTestTnc.test_minimize_tnc5c                 C   s`   t g ddgd }}dgd }tj| j|d| j|| jdj}t| || |dd d S )	Nrg   rg   rl   ir\   r7   r   r?   rW   rE   rF   )	r*   rT   r   rI   r4   r5   r
   r   r   rU   r   r   r   test_minimize_tnc38   s   
zTestTnc.test_minimize_tnc38c                 C   sX   dgd g d}}g d}t j| j|d| j|| jdj}t| || |dd d S )	Nr   r:   )r   r   )r   r   )r   r$   )r   r7   )r   r:   r   r   r$   r7   r:   r?   rW   rE   rF   )r   rI   r9   r;   r
   r   r   rU   r   r   r   test_minimize_tnc45   s   zTestTnc.test_minimize_tnc45c                 C   sz   | j ddgtj d gdd gf}}}ddg}tj|||dtjjdd\}}}t| || |ddtjj	|  d	 d S )
Nr=   r   r>   r   r   )rB   argsmessagesr	   rE   TNC failed with status: rG   err_msg
r   r*   rH   r   fmin_tnc_tncMSG_NONEr   r   	RCSTRINGSr   Zfgr   rB   rP   nfrcr   r   r   	test_tnc1   s   &

zTestTnc.test_tnc1c                 C   st   ddgt j d gdd gf}}ddg}tj| j|d|tjjdd\}}}t| || |ddtjj|  d	 d S )
Nr=   r   r>   Tr   )Zapprox_gradrB   rt   r	   rS   ru   rv   )	r*   rH   r   ry   r   rz   r{   r   r|   r   r   rB   rP   r~   r   r   r   r   
test_tnc1b   s   

zTestTnc.test_tnc1bc                 C   sv   ddgt j d gdd gf}}ddg}tj| j|| j|tjjdd\}}}t| || |ddtjj	|  d d S )	Nr=   r   r>   r   )ZfprimerB   rt   r	   rE   ru   rv   )
r*   rH   r   ry   r   r   rz   r{   r   r|   r   r   r   r   
test_tnc1c   s   

zTestTnc.test_tnc1cc                 C   sx   | j ddgtj d gdd gf}}}ddg}tj|||tjjdd\}}}t| || |ddtjj	|  d	 d S )
Nr=   r   r(   rY   r   rB   rt   r	   rE   ru   rv   rx   r}   r   r   r   	test_tnc2      &


zTestTnc.test_tnc2c                 C   sx   | j ddgtj d gdd gf}}}ddg}tj|||tjjdd\}}}t| || |ddtjj	|  d	 d S )
Nr\   r   r]   r   r   r   rE   ru   rv   )
r"   r*   rH   r   ry   rz   r{   r   r   r|   r}   r   r   r   	test_tnc3   r   zTestTnc.test_tnc3c                 C   sl   | j ddgddg}}}ddg}tj|||tjjdd\}}}t| || |d	d
tjj|  d d S )Nr_   r`   ra   rb   r   r   r   r   rE   ru   rv   )r'   r   ry   rz   r{   r   r%   r|   r}   r   r   r   	test_tnc4      


zTestTnc.test_tnc4c                 C   sl   | j ddgddg}}}ddg}tj|||tjjdd\}}}t| || |dd	tjj|  d
 d S )Nr   re   rf   rh   ri   r   r   rE   ru   rv   )r2   r   ry   rz   r{   r   r,   r|   r}   r   r   r   	test_tnc5  r   zTestTnc.test_tnc5c                 C   sv   | j tg ddgd }}}dgd }tj|||tjjdd\}}}t| || |ddtjj	|  d	 d S )
Nrk   rm   r7   r   r   r   rE   ru   rv   )
r6   r*   rT   r   ry   rz   r{   r   r4   r|   r}   r   r   r   
test_tnc38  s   "



zTestTnc.test_tnc38c                 C   sn   | j dgd g d}}}g d}tj|||tjjdd\}}}t| || |ddtjj|  d	 d S )
Nr   r:   ro   rp   r   r   rE   ru   rv   )r<   r   ry   rz   r{   r   r9   r|   r}   r   r   r   
test_tnc45#  s   


zTestTnc.test_tnc45c                 C   s   dd }dd }dd }t t tj|ddgd	d
 W d    n1 s&w   Y  t t tj|ddgd	|d W d    d S 1 sGw   Y  d S )Nc                 S      t d)Nmyfunc)RuntimeErrorr   r   r   r   r   3     z/TestTnc.test_raising_exceptions.<locals>.myfuncc                 S   s
   t | S r   )r   rosenr   r   r   r   myfunc16  s   
z0TestTnc.test_raising_exceptions.<locals>.myfunc1c                 S   r   )NrD   )
ValueErrorr   r   r   r   rD   9  r   z1TestTnc.test_raising_exceptions.<locals>.callbackr   r   r?   )r@   )r@   rD   )pytestZraisesr   r   rI   r   )r   r   r   rD   r   r   r   test_raising_exceptions0  s   "zTestTnc.test_raising_exceptionsc                 C   s   dd }t j}dgd }g d}t j|||dddid	}t j|||dddi|d
}t|j|j t|j|j t|j|j d S )Nc                 S   s   d S r   r   r   r   r   r   rD   J  s   zDTestTnc.test_callback_shouldnt_affect_minimization.<locals>.callback)r   r\   r7   )r   r   r$   g      @r?   r	   i  )rB   r@   rC   )rB   r@   rC   rD   )r   r   rI   r   r   rK   r   Znfev)r   rD   rK   rB   rN   rQ   Zres2r   r   r   *test_callback_shouldnt_affect_minimizationD  s   
z2TestTnc.test_callback_shouldnt_affect_minimizationNrr   )+__name__
__module____qualname____doc__r   r   r   r   r   r    r"   r%   r&   r'   r,   r1   r2   r4   r5   r6   r9   r;   r<   rR   rV   rX   rZ   r^   rc   rj   rn   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sR    


			r   )r   r   Znumpy.testingr   r   numpyr*   mathr   Zscipyr   r   r   r   r   r   <module>   s    