o
    i                     @   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:0yE>ư>)	tol_rel_i	tol_rel_bT)r   r	   Z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   f/home/kim/smarthome/.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   ZfunZjacZhessZhessp)      r   r   Tr         ?)gb5m1ݿ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*   r+   r,   r   r   r-   r.   r    r/   r0   r   r6   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)gno?獞u?,wn)?/K뚘G?)r9   g켮wO@٢yn*?r<8ٿ&Î?)r:   r=   g6
@ĽCԿ8K?)r;   r>   r@   gc?>ڿ)r<   r?   rA   rB   g-Q?)g*<sA?gE?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҄gO
L?gp4OF̿g qgo-7?F
r)   r*   r+   r,   r   r-   r.   r    r/   r   r0   r   r6   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VaU?`A@5F?9)n@cѿ)rF   g{.<?~:]?)rG   rJ   g@33 5:I)rH   rK   rM   gйTFKտ)rI   rL   rN   rO   g&Rr   r   r   r   r   rC   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   )giG7㰱?gl$WgZg-O|οgm/TrD   r0   r   r6   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   rP   rC   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_dispr,   Z
readouterrr   
startswithrepr)r1   Zcapsysr2   r3   r4   r5   outerrr   r6   r   	test_disp   s   

z'TestKrylovQuadraticSubproblem.test_dispN)__name__
__module____qualname__r7   r8   rE   rQ   pytestmarkZthread_unsaferY   r   r   r   r   r
      s    *'r
   )__doc__r]   numpyr)   Zscipy.optimize._trlibr   Znumpy.testingr   r   r   r   r+   rT   r
   r   r   r   r   <module>   s    