U
    /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   I/tmp/pip-unpacked-wheel-9gxwnfpp/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:0yE>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   Znumpyr   Znumpy.testingr   r   r   Zscipy.optimizer   r   r   r   r	   r
   r   r   r   r   r   <module>   s   