U
    /dS                     @   sV   d dl Z d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
 G dd dZdd ZdS )    N)assert_allcloseassert_assert_array_equal)fmin_cobylaminimizec                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
TestCobylac                 C   s.   ddg| _ tddg| _ddddd	| _d S )
Ng@gQ?g888@gUUUUUU?F   h㈵>d   )disprhobegtolmaxiter)x0mathsqrtsolutionoptsself r   D/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/optimize/tests/test_cobyla.pysetup_method   s
    
zTestCobyla.setup_methodc                 C   s   |d d t |d d  S )Nr      r      )absr   xr   r   r   fun   s    zTestCobyla.func                 C   s   |d d |d d  d S )Nr   r   r      r   r   r   r   r   con1   s    zTestCobyla.con1c                 C   s   |  | S N)r    r   r   r   r   con2   s    zTestCobyla.con2c              	   C   s6   t | j| j| j| jgddddd}t|| jdd d S )Nr   r	   r
   T)r   rhoendZmaxfunr   -C6?Zatol)r   r   r   r    r"   r   r   r   r   r   r   test_simple   s      zTestCobyla.test_simplec                 C   s   G dd d}| }d| j dd| jdf}t| j| jd||| jd}t|j| jdd t	|j
|j t	|jd	k | t	|jd
k | t	|j| | jd k | t	|j|jkd t|j|jd d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z1TestCobyla.test_minimize_simple.<locals>.Callbackc                 S   s   d| _ d | _d S )Nr   n_callslast_xr   r   r   r   __init__"   s    z:TestCobyla.test_minimize_simple.<locals>.Callback.__init__c                 S   s   |  j d7  _ || _d S Nr   r'   r   r   r   r   __call__&   s    z:TestCobyla.test_minimize_simple.<locals>.Callback.__call__N)__name__
__module____qualname__r*   r,   r   r   r   r   Callback!   s   r0   ineqtyper   cobyla)methodconstraintscallbackoptionsr$   r%   r	   F   gMbP?z<Callback is not called exactly once for every function eval.zGLast design vector sent to the callback is not equal to returned value.)r    r"   r   r   r   r   r   r   r   r   successmessagemaxcvZnfevr(   r   r)   )r   r0   r7   conssolr   r   r   test_minimize_simple    s(    	

 
zTestCobyla.test_minimize_simplec           	   	      s   t jd t jddt jdfdd fdd} fdd} fd	d
} fdd}d|dd|dd|df}t d}d}tjt|d6 t||d|ddid}t	|j
dk t	|j  W 5 Q R X d S )Ni  
   c                    s
     | S r!   )dotw)pbr   r   p@   s    z8TestCobyla.test_minimize_constraint_violation.<locals>.pc                    s   |      S r!   )sumrB   )spreadr   r   fC   s    z8TestCobyla.test_minimize_constraint_violation.<locals>.fc                    s   dt  |   S )Ni  r   rF   rB   rE   r   r   c1F   s    z9TestCobyla.test_minimize_constraint_violation.<locals>.c1c                    s   dt  |   S N   rI   rB   rJ   r   r   c2I   s    z9TestCobyla.test_minimize_constraint_violation.<locals>.c2c                    s   dt  |   S rL   )r   maxrB   rJ   r   r   c3L   s    z9TestCobyla.test_minimize_constraint_violation.<locals>.c3r1   r2   )r@   r   z4Use of `minimize` with `x0.ndim != 1` is deprecated.)matchr4   Zcatolgư>)r5   r6   r8   )nprandomseedZrandzerospytestZwarnsDeprecationWarningr   r   r<   r:   )	r   rH   rK   rN   rP   r=   Zw0r;   r>   r   )rE   rD   rG   r   "test_minimize_constraint_violation;   s(    

z-TestCobyla.test_minimize_constraint_violationN)
r-   r.   r/   r   r   r    r"   r&   r?   rX   r   r   r   r   r   
   s   r   c            	         s  dd   fdd} dd }dd }t d	d
g} ||g}ddg}d}t ||dd}t||dd t || dd}t |ddd dd |D }t ||dd}t|j|dd t|j|j t|j	|dd d| d}t ||dd}t|j	ddd d S )Nc                 S   s    | d d d | d d d  S )Nr   r   r   g      @r   r   r   r   r   r   ^   s    z$test_vector_constraints.<locals>.func                    s    | d S r+   r   rY   r   r   r   fmina   s    z%test_vector_constraints.<locals>.fminc                    sD   t dddgdddgdddgg t  fddtt D S )Nr   r      c                    s@   g | ]8} |d f d    |df d    |df  qS )r   r   r   r   ).0iar   r   r   
<listcomp>f   s   &
z:test_vector_constraints.<locals>.cons1.<locals>.<listcomp>)rR   arrayrangelenrY   r   ra   r   cons1d   s    "
z&test_vector_constraints.<locals>.cons1c                 S   s   | S r!   r   rY   r   r   r   cons2i   s    z&test_vector_constraints.<locals>.cons2r   r   gffffff?g333333?g?r	   )r#   r$   r%   r   c                 S   s   g | ]}d |dqS )r1   r2   r   )r_   r=   r   r   r   rc   z   s     z+test_vector_constraints.<locals>.<listcomp>)r6   r   r1   r2   )
rR   rd   r   r   r   r   r   r:   r;   r   )	r[   rg   rh   r   Z	cons_listZxsolZfsolr>   r6   r   rZ   r   test_vector_constraints[   s(    

ri   )r   ZnumpyrR   rV   Znumpy.testingr   r   r   Zscipy.optimizer   r   r   ri   r   r   r   r   <module>   s   Q