U
    »mœd»  ã                   @   s\   d 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.

To run it in its simplest form::
  nosetests test_optimize.py

é    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	   Zdispc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestKrylovQuadraticSubproblemc                    s4  t  dddgdddgdddgg¡‰ t  dddg¡‰d}tddd	„ ‡fd
d	„dd	„ ‡ fdd	„d�}| |¡\}}t|t  dddg¡ƒ t|dƒ tt j ˆ  	|¡|j
|  ˆ ¡dƒ tt j |¡|ƒ d}| |¡\}}t|t  dddg¡ƒ t|dƒ tt j ˆ  	|¡|j
|  ˆ ¡dƒ tt j |¡|ƒ d S )Nç      ð?ç        ç      @ç       @ç      @g      @r   c                 S   s   dS ©Nr   © ©Úxr   r   úe/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/optimize/tests/test_trustregion_krylov.pyÚ<lambda>!   ó    zFTestKrylovQuadraticSubproblem.test_for_the_easy_case.<locals>.<lambda>c                    s   ˆ S ©Nr   r   ©Úgr   r   r   "   r   c                 S   s   d S r   r   r   r   r   r   r   #   r   c                    s
   ˆ   |¡S r   ©Údot©r   Úy©ÚHr   r   r   $   r   ©r   ZfunZjacZhessZhesspç      ð¿Tç      à?g�b5m1…Ý¿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  dddgdddgdddgg¡‰ t  dddg¡‰d}tddd„ ‡fd	d„d
d„ ‡ fdd„d�}| |¡\}}t|t  dddg¡ƒ tt j ˆ  |¡|j	|  ˆ ¡dƒ tt j |¡|ƒ d}| |¡\}}t|t  dddg¡ƒ tt j ˆ  |¡|j	|  ˆ ¡dƒ tt j |¡|ƒ d S )Nr   r   r   r   r   r   c                 S   s   dS r   r   r   r   r   r   r   K   r   zFTestKrylovQuadraticSubproblem.test_for_the_hard_case.<locals>.<lambda>c                    s   ˆ S r   r   r   r   r   r   r   L   r   c                 S   s   d S r   r   r   r   r   r   r   M   r   c                    s
   ˆ   |¡S r   r   r   r   r   r   r   N   r   r    r!   r"   g      à¿)
r#   r$   r%   r&   r   r   r'   r(   r   r)   r*   r   r0   r   Útest_for_the_hard_case=   s6    þ

üþþz4TestKrylovQuadraticSubproblem.test_for_the_hard_casec                    sÞ   t  dddddgddddd	gddd
ddgdddddgdd	dddgg¡‰ t  dddddg¡‰d}tddd„ ‡fdd„dd„ ‡ fdd„d�}| |¡\}}tt j ˆ  |¡|j|  ˆ ¡dƒ t	|ddd d!d"gƒ t	|d#ƒ d S )$NgÛn‚ošþü?g�ž¶¡½uê?g,wnó)ôË?g”/ËK¼Ëà¿gÿëš˜GÐ?gì¼®ÛwO@gÙ¢y¾n*Ô?gr–<8±Ù¿gõ¶Û&ÃŽ¶?gÓ6›ª
@gøòÄ½CÔ¿g8Š¤ÄKƒÑ?gÀc‘‰èù?gò†«>øÚ¿gÂ-£Qõ?g*‹ã<sAè?g³¢¼E�?gM x¾—©Õ?gzý‹˜ÀÊê?gôÒ=€©Þ¿çš™™™™™ñ?r   c                 S   s   dS r   r   r   r   r   r   r   p   r   zMTestKrylovQuadraticSubproblem.test_for_interior_convergence.<locals>.<lambda>c                    s   ˆ S r   r   r   r   r   r   r   q   r   c                 S   s   d S r   r   r   r   r   r   r   r   r   c                    s
   ˆ   |¡S r   r   r   r   r   r   r   s   r   r    r   g8bÒ„òå¿gåO
©‘L¿?g p4OÇFÌ¿g� Ïqå¿g­oš-7Ô?F©
r#   r$   r%   r&   r   r'   r(   r   r)   r   r*   r   r0   r   Útest_for_interior_convergenced   s0    ü

üþ
 ÿz;TestKrylovQuadraticSubproblem.test_for_interior_convergencec                    sð   t  dddddgddddd	gddd
ddgdddddgdd	dddgg¡‰ t  dddddg¡‰d}tddd„ ‡fdd„dd„ ‡ fdd„d�}| |¡\}}tt j ˆ  |¡|j|  ˆ ¡dƒ tt j |¡|ƒ t	|dddddgƒ t	|dƒ d S ) NgÝVaÐUì?gø˜›±`A@g5“ýF€ï?gÔ9Ô)n@é¿g€îcñÑ¿gµÚ{ú¥§¿g.<íøÕ?g~õýÏËê¿gÔ:]³èÅ?g@33ôë¿g �5Ð:²°¿g¦ä¤IŒâö¿gÐ¹ÛõÒTú¿g¦F¦K°Õ¿g¬¢&—Rùú¿r   r   r3   c                 S   s   dS r   r   r   r   r   r   r   ‹   r   zKTestKrylovQuadraticSubproblem.test_for_very_close_to_zero.<locals>.<lambda>c                    s   ˆ S r   r   r   r   r   r   r   Œ   r   c                 S   s   d S r   r   r   r   r   r   r   �   r   c                    s
   ˆ   |¡S r   r   r   r   r   r   r   Ž   r   r    r   g÷iG7ã°±?glµ$“•W�¿gÀü€ÍZæä¿g-ðOˆ|Î¿g¦mô‚/ë¿Tr4   r*   r   r0   r   Útest_for_very_close_to_zero   s4    ü

üþ þz9TestKrylovQuadraticSubproblem.test_for_very_close_to_zeroc                    s€   t  d¡ ‰ t  dddddg¡‰d}tddd„ ‡fdd„dd„ ‡ fd	d„d
�}| |¡\}}| ¡ \}}t| d¡t|ƒƒ d S )Né   r   r   r3   c                 S   s   dS r   r   r   r   r   r   r   £   r   z9TestKrylovQuadraticSubproblem.test_disp.<locals>.<lambda>c                    s   ˆ S r   r   r   r   r   r   r   ¤   r   c                 S   s   d S r   r   r   r   r   r   r   ¥   r   c                    s
   ˆ   |¡S r   r   r   r   r   r   r   ¦   r   r    z  TR Solving trust region problem)	r#   Úeyer$   ÚKrylovQP_dispr&   Z
readouterrr   Ú
startswithÚrepr)r+   Zcapsysr,   r-   r.   r/   ÚoutÚerrr   r0   r   Ú	test_disp�   s    

üz'TestKrylovQuadraticSubproblem.test_dispN)Ú__name__Ú
__module__Ú__qualname__r1   r2   r5   r6   r>   r   r   r   r   r
      s
   *'r
   )Ú__doc__Únumpyr#   Zscipy.optimize._trlibr   Znumpy.testingr   r   r   r   r%   r9   r
   r   r   r   r   Ú<module>   s   