o
    Eb
                     @   s\   d 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   G/usr/lib/python3/dist-packages/scipy/optimize/tests/test_trustregion.py__init__   s   
zAccumulator.__init__c                 C   s:   |  j d7  _ | jd u rt|| _d S |  j|7  _d S )N   )r   r   npZ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                   @   sL   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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accumulatorr/   r,   r   r   r   test_dogleg_callback,   s    z+TestTrustRegionSolvers.test_dogleg_callbackc           
   
   C   s  t }t}t}| j| jfD ]y}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   r1   )
r   fghr+   Zr_doglegZr_trust_ncgZr_trust_krylovZr_ncgZr_iterativer   r   r   test_solver_concordance8   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   r4   )r#   Zhesspr%   r&   r   )r   r   r   r   r   r   r	   r   r*   r   r   r   test_trust_ncg_hesspU   s   
z+TestTrustRegionSolvers.test_trust_ncg_hesspc                 C   *   t t| jttddd}t| j|d  d S )Nr   r4   r+   r#   r$   r%   r&   r   r   r   r   r   r   r   r   r,   r   r   r   test_trust_ncg_start_in_optimum[      z6TestTrustRegionSolvers.test_trust_ncg_start_in_optimumc                 C   r<   )Nr   r5   r=   r   r>   r?   r   r   r   "test_trust_krylov_start_in_optimum`   rA   z9TestTrustRegionSolvers.test_trust_krylov_start_in_optimumc                 C   r<   )Nr   r6   r=   r   r>   r?   r   r   r   !test_trust_exact_start_in_optimume   rA   z8TestTrustRegionSolvers.test_trust_exact_start_in_optimumN)r   r   r   r   r-   r3   r:   r;   r@   rB   rC   r   r   r   r   r      s    	r   )r   Znumpyr   Znumpy.testingr   r   r   Zscipy.optimizer   r   r   r   r	   r
   r   r   r   r   r   <module>   s    