
    ^Mh2                         d Z ddlZddlZddlmZmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZmZmZ d Z G d d          Z G d	 d
          Z G d d          ZdS )z4
Unit tests for trust-region iterative subproblem.

    N) estimate_smallest_singular_valuesingular_leading_submatrixIterativeSubproblem)svdget_lapack_funcsdetqrnorm)assert_array_equalassert_equalassert_array_almost_equalc                 ~   t           j                            dd| | f          }t          |d          \  }}}t           j                            |||           }t          j        |          d d d         }t          j        ||          }t          j        ||j                  }	|dk    rSt          j        |           }
t           j                            dd| dz
            |
d d<   t          j        ||
          }
n<|dk    rt          j        |           }
n!t           j                            dd|           }
|	|
fS )N   True)pivotinghardjac_equal_zero)	nprandomuniformr	   sortmultiplydotTzeros)nmin_eigmax_eigcaserandQ_	eigvaluesQauxAgs              k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entryr)      s!    9RQF++D '''GAq! 	!!'7A66I	""44R4(I ;y!$$D
tQSA v~~HQKK""2q!A#..#2#F1aLL	!	!	!HQKKIb!Q''a4K    c                       e Zd Zd ZdS )!TestEstimateSmallestSingularValuec                 4   t          j        g dg dg dg dg          }t          |          \  }}}|d         }|dd d f         }t          |          \  }}t	          ||d           t	          t          |          t          |          d           d S )N)r            )r   g?<      )r   r   皙?	   )r   r   r   
   r      )decimal)r   arrayr   r   r   abs)	selfCUsVtsmin_svdzmin_svdsminzmins	            r(    test_for_ill_condiotioned_matrixzBTestEstimateSmallestSingularValue.test_for_ill_condiotioned_matrix0   s     Hlll&&&$nn#mm% & & q661b R5b!!!e9 6a88
d 	"$!<<<<!#d))S]]AFFFFFFr*   N)__name__
__module____qualname__rC    r*   r(   r,   r,   .   s(        G G G G Gr*   r,   c                        e Zd Zd Zd Zd ZdS )TestSingularLeadingSubmatrixc                    t          j        g dg dg dg          }t          d|f          \  } ||ddd          \  }}t          |||          \  }}||dz
  |dz
  fxx         |z  cc<   t	          t          |d |d |f                   d	           t          j        |t          j        ||                    }t	          |d	           d S )
N)r   r.   r/   )r.   r0      )r/   rK      potrfFTloweroverwrite_acleanr   r   r   r8   r   r   r   r   r   r:   r&   choleskyckdeltavquadratic_terms           r(   +test_for_already_singular_leading_submatrixzHTestSingularLeadingSubmatrix.test_for_already_singular_leading_submatrixI   s     Hiiiiiii! " "
 %Z!66	 xEFFF1-aA66q	!A#qs(u 	"#aBQBi..!444 26!Q<<00!.!44444r*   c                    t          j        g dg dg dg dg dg          }t          d|f          \  } ||ddd	          \  }}t          |||          \  }}||d
z
  |d
z
  fxx         |z  cc<   t	          t          |d |d |f                   d           t          j        |t          j        ||                    }t	          |d           d S )N)r   r.   r/   r2   r6   )r.   rK   rK   r4   r   )r/   rK      r   r.   )r2   r4   r   r2   rK   )r6   r   r.   rK   r6   rM   FTrO   r   r   )r   asarrayr   r   r   r   r   rT   s           r(   #test_for_simetric_indefinite_matrixz@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixb   s    J'(((''	) * * %Z!66	 xEFFF1-aA66q	!A#qs(u 	"#aBQBi..!444 26!Q<<00!.!44444r*   c                    t          j        g dg dg dg          }t          d|f          \  } ||ddd          \  }}t          |||          \  }}||dz
  |dz
  fxx         |z  cc<   t	          t          |d |d |f                   d	           t          j        |t          j        ||                    }t	          |d	           d S )
N)r   r/   r]   )r/      rK   )r]   rK   rL   rM   FTrO   r   r   rS   rT   s           r(   $test_for_first_element_equal_to_zerozATestSingularLeadingSubmatrix.test_for_first_element_equal_to_zero}   s     Hjjj jj jj" # #
 %Z!66	 xEFFF1-aA66q	!A#qs(u 	"#aBQBi..!444 26!Q<<00!.!44444r*   N)rD   rE   rF   r[   r_   rb   rG   r*   r(   rI   rI   G   sA        5 5 525 5 565 5 5 5 5r*   rI   c                   r    e Zd Zd Zd Zd Zd Zd Zej	        
                    d          d             ZdS )	TestIterativeSubproblemc                     g dg dg dg dgg dd}t          dd fd	fd
dd          }|                    |          \  }}t          |g d           t          |d           d S )Nr5   r.   r/   r0   r.   r   r2   r   r/   r2   r   r2   r0   r   r2   r.   )r   r   r   r   r   r   c                     dS Nr   rG   xs    r(   <lambda>z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       A r*   c                 ,    t          j                  S Nr   r8   rm   r'   s    r(   rn   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       BHQKK r*   c                 ,    t          j                  S rq   rr   rm   Hs    r(   rn   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       RXa[[ r*   绽|=rm   funjachessk_easyk_hard)g8<bp?ggEg v?gˍ۪߿Tr   solver   )r:   trust_radiussubprobphits_boundaryrw   r'   s        @@r(   test_for_the_easy_casez.TestIterativeSubproblem.test_for_the_easy_case   s     ]]\\\\\\ LL  &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==66=!! &? &? &? 	@ 	@ 	@!-66666r*   c                     g dg dg dg dgg dd}d}t          dd	 fd
fddd          }|                    |          \  }}t          | |j                   d S )Nrf   rg   rh   ri   )gAS@r   r   r   grvf(n r   r   c                     dS rk   rG   rl   s    r(   rn   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   ro   r*   c                 ,    t          j                  S rq   rr   rs   s    r(   rn   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   rt   r*   c                 ,    t          j                  S rq   rr   rv   s    r(   rn   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   rx   r*   ry   rz   )r   r   r   lambda_current)r:   r=   r   r   r   r   rw   r'   s         @@r(   test_for_the_hard_casez.TestIterativeSubproblem.test_for_the_hard_case   s     ]]\\\\\\ *))  &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==66=!1"g&<=====r*   c                 0   g dg dg dg dg dgg dt          dd fd	fd
          }|                    d          \  }}t          |g d           t          |d           t          |j        d           t          |j        d           d S )N)gno?獞u?,wn)?/K뚘G?)r   g켮wO@٢yn*?r<8ٿ&Î?)r   r   g6
@ĽCԿ8K?)r   r   r   gc?>ڿ)r   r   r   r   g-Q?)g*<sA?gE?gM x?gz?g=޿r   c                     dS rk   rG   rl   s    r(   rn   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   ro   r*   c                 ,    t          j                  S rq   rr   rs   s    r(   rn   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   rt   r*   c                 ,    t          j                  S rq   rr   rv   s    r(   rn   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   rx   r*   )rm   r{   r|   r}   皙?)g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   r   r   r   niterr:   r   r   r   rw   r'   s       @@r(   test_for_interior_convergencez5TestIterativeSubproblem.test_for_interior_convergence   s    HHHJJJIIILLLJJJ	L JII &*5+*?*?*?*?+@+@+@+@B B B #==--=!! &? &? &? 	@ 	@ 	@!-777!'"8!<<<!'-33333r*   c                     g dg dg dg dg dgg dt          dd fd	fd
dd          }|                    d          \  }}t          |g d           t          |d           d S )NgVaU?`A@5F?9)n@cѿr   g{.<?~:]?r   r   g@33 5:Ir   r   r   gйTFKտr   r   r   r   g&R)r   r   r   r   r   r   c                     dS rk   rG   rl   s    r(   rn   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   ro   r*   c                 ,    t          j                  S rq   rr   rs   s    r(   rn   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   rt   r*   c                 ,    t          j                  S rq   rr   rv   s    r(   rn   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   rx   r*   ry   rz   r   giG7㰱?gl$WgZg-O|οgm/Tr   r   s       @@r(   test_for_jac_equal_zeroz/TestIterativeSubproblem.test_for_jac_equal_zero   s    KKKKKKLLLLLLMMM	O OO &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==--=!! &3 &3 &3 	4 	4 	4 	"-66666r*   c                     g dg dg dg dg dgg dt          dd fd	fd
dd          }|                    d          \  }}t          |g d           t          |d           d S )Nr   r   r   r   r   )r   r   r   r   gV瞯<r   c                     dS rk   rG   rl   s    r(   rn   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  ro   r*   c                 ,    t          j                  S rq   rr   rs   s    r(   rn   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  rt   r*   c                 ,    t          j                  S rq   rr   rv   s    r(   rn   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>	  rx   r*   ry   rz   r   r   Tr   r   s       @@r(   test_for_jac_very_close_to_zeroz7TestIterativeSubproblem.test_for_jac_very_close_to_zero   s    KKKKKKLLLLLLMMM	O   &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==--=!! &3 &3 &3 	4 	4 	4 	"-66666r*   r5   c                    t           j                            d           d}dD ]}g d}|D ]\  }}t          ||||          \  g d}|D ]}t	          dd fdfd	d
d
          }|                    |          \  }	}
dt          j        |	t          j        |	                    z  t          j        |	          z   }g d}|D ]\  }}t          |dz
  dt          j        |          z
            }d|z
  }t	          dd fdfd||          }|                    |          \  }}dt          j        |t          j        |                    z  t          j        |          z   }|r=t          t          j
        t          |          |z
            |dz
  |z  k    d           n!t          t          |          |k    d           t          |||z  k    d           !Đd S )Nr   rK   )easyr   r   ))ii))r   r   )r   rK   )r   r5   )r   r5   )rK   r5   )      )	皙?g333333?g333333?r3   r   g333333?gffffff
@g      @r5   r   c                     dS rk   rG   rl   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>1  s    q r*   c                     S rq   rG   rs   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>2      q r*   c                     S rq   rG   rv   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>3  r   r*   ry   )r~   r         ?))r   r.   )r   r   )g?g)\(?c                     dS rk   rG   rl   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>L  s     r*   c                     S rq   rG   rs   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>M       r*   c                     S rq   rG   rv   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>N  r   r*   T)r   r   seedr)   r   r   r   minsqrtr   r9   r
   r   )r:   r   r    
eig_limitsr   r   trust_radius_listr   
subprob_acp_achits_boundary_acJ_acstop_criteriak_optk_trfr~   r   r   r   r   Jrw   r'   s                        @@r(   test_for_random_entriesz/TestIterativeSubproblem.test_for_random_entries  s    		q 6 C	< C	<D$ $ $J %/ 8< 8<  $Aw>>1 %O$N$N!$5 0< 0<L!4Q5@[5@[[[5@[[[<A<A"C "C "CJ .8-=-=l-K-K*D* rvdBF1dOO<<<RVAt__LD%2 %2 %2M )6 < <u "%U1W%&rwu~~%5"7 "7!"5 #6a6Ak6Akkk6Akkk=C=C#E #E #E ,3==+F+F(=  q"&A,, 7 77q!D ) H.rvd1ggl6J/K/K05a/E0FGKM M M M )aL)@$GGG %Q%*_d;;;;=<%0<8<C	< C	<r*   N)rD   rE   rF   r   r   r   r   r   pytestmark	fail_slowr   rG   r*   r(   rd   rd      s        7 7 74> > >24 4 4.7 7 707 7 70 [2J< J< J< J< J<r*   rd   )__doc__r   numpyr   !scipy.optimize._trustregion_exactr   r   r   scipy.linalgr   r   r   r	   r
   numpy.testingr   r   r   r)   r,   rI   rd   rG   r*   r(   <module>r      sm                  @ ? ? ? ? ? ? ? ? ? ? ? ? ?D D D D D D D D D D  <G G G G G G G G2M5 M5 M5 M5 M5 M5 M5 M5`G< G< G< G< G< G< G< G< G< G<r*   