o
    ?Hh=                     @   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 )	z5
Unit tests for trust-region optimization routines.

    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   e/home/air/sanwanet/gpt-api/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                   @   s\   e Zd Zdd Zdd Zdd Zejj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   sP   t jtdd tt| jttddddd W d    d S 1 s!w   Y  d S )NzMaximum number of iterations)matchr!   Tr   )dispr0   )r$   r%   r'   r(   )pytestwarnsRuntimeWarningr   r   r   r   r   r   r   r   r   test_dogleg_user_warning6   s   
"z/TestTrustRegionSolvers.test_dogleg_user_warningc           
   
   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_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    r<   )r$   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   *   t t| jttddd}t| j|d  d S )Nr    r<   r,   r$   r%   r&   r'   r   r   r   r   r   r   r   r   r-   r   r   r   test_trust_ncg_start_in_optimuma      z6TestTrustRegionSolvers.test_trust_ncg_start_in_optimumc                 C   rJ   )Nr    r=   rK   r   rL   rM   r   r   r   "test_trust_krylov_start_in_optimumf   rO   z9TestTrustRegionSolvers.test_trust_krylov_start_in_optimumc                 C   rJ   )Nr    r>   rK   r   rL   rM   r   r   r   !test_trust_exact_start_in_optimumk   rO   z8TestTrustRegionSolvers.test_trust_exact_start_in_optimumN)r   r   r   r   r.   r5   r8   markthread_unsafer;   rG   rI   rN   rP   rQ   r   r   r   r   r      s    	
r   )r   r8   numpyr   numpy.testingr   r   r   scipy.optimizer   r   r   r   r	   r
   r   r   r   r   r   <module>   s    