o
    Ö­jØ  ã                   @   sd   d Z ddlZddlZddlmZ ddlmZmZm	Z	m
Z
 eddd�Zedddd	�ZG d
d„ dƒZdS )z>
Unit tests for Krylov space trust-region subproblem solver.

é    N)Úget_trlib_quadratic_subproblem)Úassert_Úassert_almost_equalÚassert_equalÚassert_array_almost_equalg:Œ0âŽyE>ç�íµ ÷Æ°>)Ú	tol_rel_iÚ	tol_rel_bT)r   r	   Údispc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zejj	d	d
„ ƒZ
dS )ÚTestKrylovQuadraticSubproblemc                    s(  t  g d¢g d¢g d¢g¡‰ t  g d¢¡‰d}tddd„ ‡fd	d„d
d„ ‡ fdd„d�}| |¡\}}t|t  g d¢¡ƒ t|dƒ tt j ˆ  	|¡|j
|  ˆ ¡dƒ tt j |¡|ƒ d}| |¡\}}t|t  g d¢¡ƒ t|dƒ tt j ˆ  	|¡|j
|  ˆ ¡dƒ tt j |¡|ƒ d S )N©ç      ð?ç        ç      @©r   g       @r   ©r   r   g      @)g      @r   r   r   r   c                 S   ó   dS ©Nr   © ©Úxr   r   úi/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_trustregion_krylov.pyÚ<lambda>    ó    zFTestKrylovQuadraticSubproblem.test_for_the_easy_case.<locals>.<lambda>c                    ó   ˆ S ©Nr   r   ©Úgr   r   r   !   r   c                 S   ó   d S r   r   r   r   r   r   r   "   r   c                    ó
   ˆ   |¡S r   ©Údot©r   Úy©ÚHr   r   r   #   ó   
 ©r   ÚfunÚjacÚhessÚhessp)ç      ð¿r   r   Tr   ç      à?)g�b5m1…Ý¿r   gpë�¬Ó³È¿)ÚnpÚarrayÚKrylovQPÚsolver   r   r   ÚlinalgÚnormr!   Úlam©ÚselfÚtrust_radiusÚsubprobÚpÚhits_boundaryr   ©r%   r   r   Útest_for_the_easy_case   s>   
þ

ü
þÿ
þz4TestKrylovQuadraticSubproblem.test_for_the_easy_casec                    s  t  g d¢g d¢g d¢g¡‰ t  g d¢¡‰d}tddd„ ‡fdd„d	d„ ‡ fd
d„d�}| |¡\}}t|t  g d¢¡ƒ tt j ˆ  |¡|j	|  ˆ ¡dƒ tt j |¡|ƒ d}| |¡\}}t|t  g d¢¡ƒ tt j ˆ  |¡|j	|  ˆ ¡dƒ tt j |¡|ƒ d S )Nr   r   r   r   r   c                 S   r   r   r   r   r   r   r   r   J   r   zFTestKrylovQuadraticSubproblem.test_for_the_hard_case.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   K   r   c                 S   r   r   r   r   r   r   r   r   L   r   c                    r   r   r    r"   r$   r   r   r   M   r&   r'   )r   r,   r   r   r-   )r   g      à¿r   )
r.   r/   r0   r1   r   r   r2   r3   r!   r4   r5   r   r;   r   Útest_for_the_hard_case<   s6   
þ

üþþz4TestKrylovQuadraticSubproblem.test_for_the_hard_casec                    s´   t  g d¢g d¢g d¢g d¢g d¢g¡‰ t  g d¢¡‰d}tdd	d
„ ‡fdd
„dd
„ ‡ fdd
„d�}| |¡\}}tt j ˆ  |¡|j|  ˆ ¡dƒ t	|g d¢ƒ t	|dƒ d S )N)gÛn‚ošþü?ç�ž¶¡½uê?ç,wnó)ôË?ç”/ËK¼Ëà¿çÿëš˜GÐ?)r>   gì¼®ÛwO@çÙ¢y¾n*Ô?çr–<8±Ù¿çõ¶Û&ÃŽ¶?)r?   rB   gÓ6›ª
@çøòÄ½CÔ¿ç8Š¤ÄKƒÑ?)r@   rC   rE   gÀc‘‰èù?çò†«>øÚ¿)rA   rD   rF   rG   gÂ-£Qõ?)g*‹ã<sAè?g³¢¼E�?gM x¾—©Õ?gzý‹˜ÀÊê?gôÒ=€©Þ¿çš™™™™™ñ?r   c                 S   r   r   r   r   r   r   r   r   o   r   zMTestKrylovQuadraticSubproblem.test_for_interior_convergence.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   p   r   c                 S   r   r   r   r   r   r   r   r   q   r   c                    r   r   r    r"   r$   r   r   r   r   r&   r'   r   )g8bÒ„òå¿gåO
©‘L¿?g p4OÇFÌ¿g� Ïqå¿g­oš-7Ô?F©
r.   r/   r0   r1   r   r2   r3   r!   r4   r   r5   r   r;   r   Útest_for_interior_convergencec   s*   
ü

üþz;TestKrylovQuadraticSubproblem.test_for_interior_convergencec                    sÆ   t  g d¢g d¢g d¢g d¢g d¢g¡‰ t  g d¢¡‰d}tdd	d
„ ‡fdd
„dd
„ ‡ fdd
„d�}| |¡\}}tt j ˆ  |¡|j|  ˆ ¡dƒ tt j |¡|ƒ t	|g d¢ƒ t	|dƒ d S )N)gÝVaÐUì?çø˜›±`A@ç5“ýF€ï?çÔ9Ô)n@é¿ç€îcñÑ¿)rK   gµÚ{ú¥§¿ç.<íøÕ?ç~õýÏËê¿çÔ:]³èÅ?)rL   rO   g@33ôë¿ç �5Ð:²°¿ç¦ä¤IŒâö¿)rM   rP   rR   gÐ¹ÛõÒTú¿ç¦F¦K°Õ¿)rN   rQ   rS   rT   g¬¢&—Rùú¿©r   r   r   r   r   rH   r   c                 S   r   r   r   r   r   r   r   r   Š   r   zKTestKrylovQuadraticSubproblem.test_for_very_close_to_zero.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   ‹   r   c                 S   r   r   r   r   r   r   r   r   Œ   r   c                    r   r   r    r"   r$   r   r   r   �   r&   r'   r   )g÷iG7ã°±?glµ$“•W�¿gÀü€ÍZæä¿g-ðOˆ|Î¿g¦mô‚/ë¿TrI   r5   r   r;   r   Útest_for_very_close_to_zero~   s,   
ü

üþz9TestKrylovQuadraticSubproblem.test_for_very_close_to_zeroc                    sz   t  d¡ ‰ t  g d¢¡‰d}tddd„ ‡fdd„dd„ ‡ fd	d„d
�}| |¡\}}| ¡ \}}t| d¡t|ƒƒ d S )Né   rU   rH   r   c                 S   r   r   r   r   r   r   r   r   £   r   z9TestKrylovQuadraticSubproblem.test_disp.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   ¤   r   c                 S   r   r   r   r   r   r   r   r   ¥   r   c                    r   r   r    r"   r$   r   r   r   ¦   r&   r'   z  TR Solving trust region problem)	r.   Úeyer/   ÚKrylovQP_dispr1   Ú
readouterrr   Ú
startswithÚrepr)r6   Úcapsysr7   r8   r9   r:   ÚoutÚerrr   r;   r   Ú	test_dispœ   s   

üz'TestKrylovQuadraticSubproblem.test_dispN)Ú__name__Ú
__module__Ú__qualname__r<   r=   rJ   rV   ÚpytestÚmarkÚthread_unsafer`   r   r   r   r   r      s    *'r   )Ú__doc__rd   Únumpyr.   Úscipy.optimize._trlibr   Únumpy.testingr   r   r   r   r0   rY   r   r   r   r   r   Ú<module>   s    ÿ