a
    Re                     @   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	   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                    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   s   dS Nr    xr   r   `/var/www/sunrise/env/lib/python3.9/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)      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   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"   r   r   r#   )r   g      r   )
r$   r%   r&   r'   r   r   r(   r)   r   r*   r+   r   r1   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?)r4   g켮wO@٢yn*?r<8ٿ&Î?)r5   r8   g6
@ĽCԿ8K?)r6   r9   r;   gc?>ڿ)r7   r:   r<   r=   g-Q?)g*<sA?gE?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҄gO
L?gp4OF̿g qgo-7?F
r$   r%   r&   r'   r   r(   r)   r   r*   r   r+   r   r1   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ѿ)rA   g{.<?~:]?)rB   rE   g@33 5:I)rC   rF   rH   gйTFKտ)rD   rG   rI   rJ   g&Rr   r   r   r   r   r>   r   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   )giG7㰱?gl$WgZg-O|οgm/Tr?   r+   r   r1   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   rK   r>   r   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$   Zeyer%   KrylovQP_dispr'   Z
readouterrr   
startswithrepr)r,   Zcapsysr-   r.   r/   r0   outerrr   r1   r   	test_disp   s    

z'TestKrylovQuadraticSubproblem.test_dispN)__name__
__module____qualname__r2   r3   r@   rL   rS   r   r   r   r   r
      s
   *'r
   )__doc__numpyr$   Zscipy.optimize._trlibr   Znumpy.testingr   r   r   r   r&   rN   r
   r   r   r   r   <module>   s   