o
    tBh
                     @   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   |/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-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   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                   @   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   accumulatorr0   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   r2   )
r   fghr,   r_doglegr_trust_ncgr_trust_krylovr_ncg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    r6   )r$   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    r6   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   rD   )Nr    r7   rE   r   rF   rG   r   r   r   "test_trust_krylov_start_in_optimum`   rI   z9TestTrustRegionSolvers.test_trust_krylov_start_in_optimumc                 C   rD   )Nr    r8   rE   r   rF   rG   r   r   r   !test_trust_exact_start_in_optimume   rI   z8TestTrustRegionSolvers.test_trust_exact_start_in_optimumN)r   r   r   r   r.   r5   rA   rC   rH   rJ   rK   r   r   r   r   r      s    	r   )r   numpyr   numpy.testingr   r   r   scipy.optimizer   r   r   r   r	   r
   r   r   r   r   r   <module>   s    