o
    Ö­j=  ã                   @   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   úb/var/www/html/CropPilot/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ç:Œ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   Ú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    