U
    9%ep3                     @   sZ   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 dZdS )	z5
Unit tests for TNC optimization routine from tnc.py
    N)assert_allcloseassert_equalpow)optimize)matrixc                   @   sV  e Zd ZdZdd ZdTddZdUddZdVd	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*dQdR Z+dSS )W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   \/var/www/html/Darija-Ai-API/env/lib/python3.8/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    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   s   |  || |fS r   )r   r!   r   r   r   r   fg31   s    zTestTnc.fg3c                 C   s   t |d d dd |d  S )Nr   r      g      @r   r   r   r   r   r   f44   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   g47   s    z
TestTnc.g4c                 C   s   |  || |fS r   )r$   r%   r   r   r   r   fg4=   s    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   Zv1Zv2r   r   r   g5D   s    z
TestTnc.g5c                 C   s   |  || |fS r   )r+   r.   r   r   r   r   fg5M   s    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   f38P   s    zTestTnc.f38c                 C   s  ddddg}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 )Nr   g      yr   r   r,   r   r   g      i@g3333334@r0   r#   g     vg     f@r   r    r   r   r   g38W   s,     ( (zTestTnc.g38c                 C   s   |  || |fS r   )r1   r2   r   r   r   r   fg38c   s    zTestTnc.fg38c                 C   s0   d|d |d  |d  |d  |d  d  S )Nr,   r   r   r   r#            ^@r   r   r   r   r   f45f   s    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#   r4   r5   r   r    r   r   r   g45i   s    
*****zTestTnc.g45c                 C   s   |  || |fS r   )r6   r8   r   r   r   r   fg45r   s    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_tnc1w   s     zTestTnc.test_minimize_tnc1c              	   C   s   t ddgtj d gdd gf }}ddg}d}tjt|d: tj| j|d|| j	dj
}t| || |dd	 W 5 Q R X d S )
Nr:   r   r;   z4Use of `minimize` with `x0.ndim != 1` is deprecated.matchr<   )r=   r?   r@   -C6?rC   )r   r)   rE   pytestwarnsDeprecationWarningr   rF   r   r   r   r   )r   rK   rL   rM   messager   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=   r>   r?   r@   rB   rC   )	r)   rE   r   rF   r   r   r   r   r   r   rK   rL   rM   r   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<   rX   rB   rC   )	r)   rE   r   rF   r   r   r   r   r   rY   r   r   r   test_minimize_tnc2   s     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<   rX   rB   rC   )	r)   rE   r   rF   r   r!   r   r   r   rY   r   r   r   test_minimize_tnc3   s     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<   rX   rB   rC   )r   rF   r$   r%   r   r   r   rY   r   r   r   test_minimize_tnc4   s     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;   r4   r#   Zpes-8Rr<   rX   rB   rC   )r   rF   r+   r.   r   r   r   rY   r   r   r   test_minimize_tnc5   s     zTestTnc.test_minimize_tnc5c                 C   sd   t ddddgdgd  }}dgd }tj| j|d| j|| jdj}t| || |dd	 d S )
Nrg   ir]   r4   r   r<   rX   rB   rC   )	r)   arrayr   rF   r1   r2   r   r   r   rY   r   r   r   test_minimize_tnc38   s    
 zTestTnc.test_minimize_tnc38c                 C   sd   dgd dddddg }}ddd	d
dg}t j| j|d| j|| jdj}t| || |dd d S )Nr   r7   r   r   r   r   r   r#   r   r4   r   r7   r   r#   r4   r<   rX   rB   rC   )r   rF   r6   r8   r   r   r   rY   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	   )r?   argsmessagesr
   rB   TNC failed with status: rD   err_msg
r   r)   rE   r   fmin_tnc_tncMSG_NONEr   r   	RCSTRINGSr   Zfgr   r?   rM   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_gradr?   rv   r
   rR   rw   rx   )	r)   rE   r   r{   r   r|   r}   r   r~   r   r   r?   rM   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fprimer?   rv   r
   rB   rw   rx   )
r)   rE   r   r{   r   r   r|   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'   r[   r	   r?   rv   r
   rB   rw   rx   rz   r   r   r   r   	test_tnc2   s    &

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   rB   rw   rx   )
r"   r)   rE   r   r{   r|   r}   r   r   r~   r   r   r   r   	test_tnc3   s    &

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`   ra   rb   rc   r   r   r	   r   rB   rw   rx   )r&   r   r{   r|   r}   r   r$   r~   r   r   r   r   	test_tnc4  s    

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   rB   rw   rx   )r/   r   r{   r|   r}   r   r+   r~   r   r   r   r   	test_tnc5  s    

zTestTnc.test_tnc5c                 C   sz   | j tddddgdgd   }}}dgd }tj|||tjjdd\}}}t| || |dd	tjj	|  d
 d S )Nrg   rk   rl   r4   r   r	   r   rB   rw   rx   )
r3   r)   rm   r   r{   r|   r}   r   r1   r~   r   r   r   r   
test_tnc38  s    &


zTestTnc.test_tnc38c                 C   sz   | j dgd dddddg  }}}ddd	d
dg}tj|||tjjdd\}}}t| || |ddtjj|  d d S )Nr   r7   ro   rp   rq   rr   rs   r   r#   r4   r	   r   rB   rw   rx   )r9   r   r{   r|   r}   r   r6   r~   r   r   r   r   
test_tnc45&  s     

zTestTnc.test_tnc45c              	   C   sr   dd }dd }dd }t t tj|ddgd	d
 W 5 Q R X t t tj|ddgd	|d W 5 Q R X d S )Nc                 S   s   t dd S )Nmyfunc)RuntimeErrorr   r   r   r   r   6  s    z/TestTnc.test_raising_exceptions.<locals>.myfuncc                 S   s
   t | S r   )r   rosenr   r   r   r   myfunc19  s    z0TestTnc.test_raising_exceptions.<locals>.myfunc1c                 S   s   t dd S )NrA   )
ValueErrorr   r   r   r   rA   <  s    z1TestTnc.test_raising_exceptions.<locals>.callbackr   r   r<   )r=   )r=   rA   )rS   Zraisesr   r   rF   r   )r   r   r   rA   r   r   r   test_raising_exceptions3  s       zTestTnc.test_raising_exceptionsc                 C   s   dd }t j}dgd }ddddg}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   rA   M  s    zDTestTnc.test_callback_shouldnt_affect_minimization.<locals>.callback)r   r]   r4   r   r   r#   g      @r<   r
   i  )r?   r=   r@   )r?   r=   r@   rA   )r   r   rF   r   r   rH   r   Znfev)r   rA   rH   r?   rK   rN   Zres2r   r   r   *test_callback_shouldnt_affect_minimizationG  s,    
        z2TestTnc.test_callback_shouldnt_affect_minimizationc              	   C   s>   d}t jt|d" tj| jddgdddid W 5 Q R X d S )Nz2'maxiter' has been deprecated in favor of 'maxfun'rP   r   r#   r<   maxiter)r=   r@   )rS   rT   rU   r   rF   r   )r   msgr   r   r   test_maxiter_depreciations^  s       z"TestTnc.test_maxiter_depreciationsN)r   )r   )r   ),__name__
__module____qualname____doc__r   r   r   r   r   r!   r"   r$   r%   r&   r+   r.   r/   r1   r2   r3   r6   r8   r9   rO   rW   rZ   r\   r_   rd   rj   rn   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sR   


				r   )r   rS   Znumpy.testingr   r   numpyr)   mathr   Zscipyr   Zscipy.sparse._sputilsr   r   r   r   r   r   <module>   s   