U
    »mœd]  ã                   @   sd   d 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
mZmZmZ G dd„ dƒZG dd„ dƒZdS )	zt
Unit tests for trust-region optimization routines.

To run it in its simplest form::
  nosetests test_optimize.py

é    N)Úassert_Úassert_equalÚassert_allclose)ÚminimizeÚrosenÚ	rosen_derÚ
rosen_hessÚrosen_hess_prodc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚAccumulatorz This is for testing callbacks.c                 C   s   d| _ d | _d S )Nr   )ÚcountÚaccum©Úself© r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test_trustregion.pyÚ__init__   s    zAccumulator.__init__c                 C   s8   |  j d7  _ | jd kr&t |¡| _n|  j|7  _d S )Né   )r   r   ÚnpÚarray)r   Úxr   r   r   Ú__call__   s    
zAccumulator.__call__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r
      s   r
   c                   @   sT   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d„ Z
dd„ ZdS )ÚTestTrustRegionSolversc                 C   s"   ddg| _ ddg| _ddg| _d S )Ng      ð?g       @g333333ó¿)Úx_optÚ
easy_guessÚ
hard_guessr   r   r   r   Úsetup_method   s    

z#TestTrustRegionSolvers.setup_methodc              	   C   s\   | j }tt|ttddddid�}t||d d ƒ t|d |d d	 ƒ t|d | jƒ d S )
Nç:Œ0âŽyE>ÚdoglegÚ
return_allT©ÚjacÚhessÚtolÚmethodÚoptionsÚallvecsr   r   éÿÿÿÿ)r   r   r   r   r   r   r   ©r   Úx0Úrr   r   r   Útest_dogleg_accuracy$   s     ÿz+TestTrustRegionSolvers.test_dogleg_accuracyc              
   C   s€   t ƒ }d}tt| jtt|dd|dœd�}t|j|ƒ tt|d ƒ|d ƒ t	|d |d d	 ƒ t	t
|d dd … ƒ|jƒ d S )
Né   r!   T)r"   Úmaxiter)r$   r%   Úcallbackr'   r(   r)   r   r   r*   )r
   r   r   r   r   r   r   r   Úlenr   Úsumr   )r   Zaccumulatorr0   r-   r   r   r   Útest_dogleg_callback-   s     þz+TestTrustRegionSolvers.test_dogleg_callbackc              
   C   s:   t jtdd��" tt| jttddddœd� W 5 Q R X d S )NzMaximum number of iterations)Úmatchr!   Tr   )Zdispr0   )r$   r%   r'   r(   )ÚpytestZwarnsÚRuntimeWarningr   r   r   r   r   r   r   r   r   Útest_dogleg_user_warning9   s    ÿ
 þz/TestTrustRegionSolvers.test_dogleg_user_warningc           
   
   C   s  t }t}t}| j| jfD ]ò}t||||ddddid�}t||||ddddid�}t||||ddddid�}t||||ddddid�}t||||dd	ddid�}	t| j|d
 ƒ t| j|d
 ƒ t| j|d
 ƒ t| j|d
 ƒ t| j|	d
 ƒ tt	|d ƒt	|d ƒk ƒ qd S )Nr    r!   r"   Tr#   ú	trust-ncgútrust-krylovz	newton-cgútrust-exactr   r)   )
r   r   r   r   r   r   r   r   r   r2   )
r   ÚfÚgÚhr,   Zr_doglegZr_trust_ncgZr_trust_krylovZr_ncgZr_iterativer   r   r   Útest_solver_concordance@   s<     ÿþþ ÿþz.TestTrustRegionSolvers.test_solver_concordancec              	   C   s>   | j | j| jfD ](}tt|ttddd�}t| j|d ƒ qd S )Nr    r9   )r$   Zhesspr&   r'   r   )r   r   r   r   r   r   r	   r   r+   r   r   r   Útest_trust_ncg_hessp]   s    
 ÿz+TestTrustRegionSolvers.test_trust_ncg_hesspc                 C   s*   t t| jttddd�}t| j|d ƒ d S )Nr    r9   ©r,   r$   r%   r&   r'   r   ©r   r   r   r   r   r   ©r   r-   r   r   r   Útest_trust_ncg_start_in_optimumc   s
     ÿz6TestTrustRegionSolvers.test_trust_ncg_start_in_optimumc                 C   s*   t t| jttddd�}t| j|d ƒ d S )Nr    r:   rA   r   rB   rC   r   r   r   Ú"test_trust_krylov_start_in_optimumh   s
     ÿz9TestTrustRegionSolvers.test_trust_krylov_start_in_optimumc                 C   s*   t t| jttddd�}t| j|d ƒ d S )Nr    r;   rA   r   rB   rC   r   r   r   Ú!test_trust_exact_start_in_optimumm   s
     ÿz8TestTrustRegionSolvers.test_trust_exact_start_in_optimumN)r   r   r   r   r.   r4   r8   r?   r@   rD   rE   rF   r   r   r   r   r      s   	r   )r   r6   Únumpyr   Znumpy.testingr   r   r   Zscipy.optimizer   r   r   r   r	   r
   r   r   r   r   r   Ú<module>   s   