o
    g                     @   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:0yE>ư>)	tol_rel_i	tol_rel_bT)r   r	   dispc                   @   s4   e Zd Zdd Zdd Zdd Zdd Z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   j/home/ubuntu/cloudmapper/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         ?)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   K   r   zFTestKrylovQuadraticSubproblem.test_for_the_hard_case.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   L   r   c                 S   r   r   r   r   r   r   r   r   M   r   c                    r   r   r    r"   r$   r   r   r   N   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)gno?獞u?,wn)?/K뚘G?)r>   g켮wO@٢yn*?r<8ٿ&Î?)r?   rB   g6
@ĽCԿ8K?)r@   rC   rE   gc?>ڿ)rA   rD   rF   rG   g-Q?)g*<sA?gE?gM x?gz?g=޿皙?r   c                 S   r   r   r   r   r   r   r   r   p   r   zMTestKrylovQuadraticSubproblem.test_for_interior_convergence.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   q   r   c                 S   r   r   r   r   r   r   r   r   r   r   c                    r   r   r    r"   r$   r   r   r   s   r&   r'   r   )g8b҄gO
L?gp4OF̿g qgo-7?F
r.   r/   r0   r1   r   r2   r3   r!   r4   r   r5   r   r;   r   test_for_interior_convergenced   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ѿ)rK   g{.<?~:]?)rL   rO   g@33 5:I)rM   rP   rR   gйTFKտ)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   )giG7㰱?gl$WgZg-O|οgm/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   r`   r   r   r   r   r      s    *'r   )__doc__numpyr.   scipy.optimize._trlibr   numpy.testingr   r   r   r   r0   rY   r   r   r   r   r   <module>   s    