
    (ph2                         S r SSKrSSKrSSKJrJrJr  SSKJ	r	J
r
JrJrJr  SSKJrJrJr  S r " S S5      r " S	 S
5      r " S S5      rg)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                    [         R                  R                  SSX 45      n[        USS9u  n  n[         R                  R                  XU 5      n[         R                  " U5      S S S2   n[         R
                  " Xu5      n[         R                  " XR                  5      n	US:X  aV  [         R                  " U 5      n
[         R                  R                  SSU S-
  5      U
S S& [         R                  " XZ5      n
X4$ US:X  a  [         R                  " U 5      n
X4$ [         R                  R                  SSU 5      n
X4$ )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              ^/var/www/html/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entryr)      s    99RQF+D 'GAq! 		!!'A6I	"4R4(I ;;y$D
tSSA v~HHQK""2q!A#.#2FF1L 4K 
!	!HHQK 4K IIb!Q'4K    c                       \ rS rSrS rSrg)!TestEstimateSmallestSingularValue.   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/5      n[        U5      u  p#nUS   nUSS S 24   n[        U5      u  px[	        XuSS9  [	        [        U5      [        U5      SS9  g )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_matrixBTestEstimateSmallestSingularValue.test_for_ill_condiotioned_matrix0   sw     HHl&$#% & q6b R5b!e9 6a8
 	"$!<!#d)S]AFr*    N)__name__
__module____qualname____firstlineno__rD   __static_attributes__rF   r*   r(   r,   r,   .   s    Gr*   r,   c                   &    \ rS rSrS rS rS rSrg)TestSingularLeadingSubmatrixG   c                 d   [         R                  " / SQ/ SQ/ SQ/5      n[        SU45      u  nU" USSSS9u  p4[        XU5      u  pVXS-
  US-
  4==   U-  ss'   [	        [        US U2S U24   5      S	5        [         R                  " U[         R                  " X5      5      n[	        US	5        g )
N)r   r/   r0   )r/   r1      )r0   rP      potrfFTloweroverwrite_acleanr   r   r   r9   r   r   r   r   r   r;   r&   choleskyckdeltavquadratic_terms           r(   +test_for_already_singular_leading_submatrixHTestSingularLeadingSubmatrix.test_for_already_singular_leading_submatrixI   s     HHi! "
 %Z!6	 EF-aA6	A#qs(u 	"#aBQBi.!4 266!<0!.!4r*   c                 p   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n[        SU45      u  nU" USSSS	9u  p4[        XU5      u  pVXS
-
  US
-
  4==   U-  ss'   [	        [        US U2S U24   5      S5        [         R                  " U[         R                  " X5      5      n[	        US5        g )N)r   r/   r0   r3   r7   )r/   rP   rP   r5   r   )r0   rP      r   r/   )r3   r5   r   r3   rP   )r7   r   r/   rP   r7   rR   FTrT   r   r   )r   asarrayr   r   r   r   r   rY   s           r(   #test_for_simetric_indefinite_matrix@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixb   s     JJ'(''	) * %Z!6	 EF-aA6	A#qs(u 	"#aBQBi.!4 266!<0!.!4r*   c                 d   [         R                  " / SQ/ SQ/ SQ/5      n[        SU45      u  nU" USSSS9u  p4[        XU5      u  pVXS-
  US-
  4==   U-  ss'   [	        [        US U2S U24   5      S	5        [         R                  " U[         R                  " X5      5      n[	        US	5        g )
N)r   r0   rc   )r0      rP   )rc   rP   rQ   rR   FTrT   r   r   rX   rY   s           r(   $test_for_first_element_equal_to_zeroATestSingularLeadingSubmatrix.test_for_first_element_equal_to_zero}   s     HHj  " #
 %Z!6	 EF-aA6	A#qs(u 	"#aBQBi.!4 266!<0!.!4r*   rF   N)rG   rH   rI   rJ   r`   re   ri   rK   rF   r*   r(   rM   rM   G   s    52565r*   rM   c                   t    \ rS rSrS rS rS rS rS r\	R                  R                  S5      S 5       rS	rg
)TestIterativeSubproblem   c           	         ^^ / SQ/ SQ/ SQ/ SQ/m/ SQmSn[        SS U4S	 jU4S
 jSSS9nUR                  U5      u  p4[        U/ SQ5        [        US5        g )Nr6   r/   r0   r1   r/   r   r3   r   r0   r3   r   r3   r1   r   r3   r/   )r   r   r   r   r   r   c                     gNr   rF   xs    r(   <lambda>@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       Ar*   c                 0   > [         R                  " T5      $ Nr   r9   rv   r'   s    r(   rw   rx          BHHQKr*   c                 0   > [         R                  " T5      $ r{   r|   rv   Hs    r(   rw   rx          RXXa[r*   绽|=rv   funjachessk_easyk_hard)g8<bp?ggEg v?gˍ۪߿Tr   solver   )r;   trust_radiussubprobphits_boundaryr   r'   s        @@r(   test_for_the_easy_case.TestIterativeSubproblem.test_for_the_easy_case   sp        &*5*?+@-2-24 #==6!! &? 	@!-6r*   c           	         ^^ / SQ/ SQ/ SQ/ SQ/m/ SQmSnSn[        SS	 U4S
 jU4S jSSS9nUR                  U5      u  pE[        U* UR                  5        g )Nro   rp   rq   rr   )gAS@r   r   r   grvf(n r   r   c                     grt   rF   ru   s    r(   rw   @TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   ry   r*   c                 0   > [         R                  " T5      $ r{   r|   r}   s    r(   rw   r      r~   r*   c                 0   > [         R                  " T5      $ r{   r|   r   s    r(   rw   r      r   r*   r   r   )r   r   r   lambda_current)r;   r>   r   r   r   r   r   r'   s         @@r(   test_for_the_hard_case.TestIterativeSubproblem.test_for_the_hard_case   sm      *  &*5*?+@-2-24 #==6!1"g&<&<=r*   c                   ^^ / SQ/ SQ/ SQ/ SQ/ SQ/m/ SQm[        SS U4S	 jU4S
 jS9nUR                  S5      u  p#[        U/ SQ5        [        US5        [        UR                  S5        [        UR                  S5        g )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                     grt   rF   ru   s    r(   rw   GTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   ry   r*   c                 0   > [         R                  " T5      $ r{   r|   r}   s    r(   rw   r      r~   r*   c                 0   > [         R                  " T5      $ r{   r|   r   s    r(   rw   r      r   r*   )rv   r   r   r   皙?)g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   r   r   r   niterr;   r   r   r   r   r'   s       @@r(   test_for_interior_convergence5TestIterativeSubproblem.test_for_interior_convergence   s    HJILJ	L J &*5*?+@B #==-!! &? 	@!-7!'"8"8!<!'--3r*   c           	         ^^ / SQ/ SQ/ SQ/ SQ/ SQ/m/ SQm[        SS U4S	 jU4S
 jSSS9nUR                  S5      u  p#[        U/ SQ5        [        US5        g )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                     grt   rF   ru   s    r(   rw   ATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   ry   r*   c                 0   > [         R                  " T5      $ r{   r|   r}   s    r(   rw   r      r~   r*   c                 0   > [         R                  " T5      $ r{   r|   r   s    r(   rw   r      r   r*   r   r   r   giG7㰱?gl$WgZg-O|οgm/Tr   r   s       @@r(   test_for_jac_equal_zero/TestIterativeSubproblem.test_for_jac_equal_zero   sl    KKLLM	O  &*5*?+@-2-24 #==-!! &3 	4 	"-6r*   c           	         ^^ / SQ/ SQ/ SQ/ SQ/ SQ/m/ SQm[        SS U4S	 jU4S
 jSSS9nUR                  S5      u  p#[        U/ SQ5        [        US5        g )Nr   r   r   r   r   )r   r   r   r   gV瞯<r   c                     grt   rF   ru   s    r(   rw   ITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  ry   r*   c                 0   > [         R                  " T5      $ r{   r|   r}   s    r(   rw   r     r~   r*   c                 0   > [         R                  " T5      $ r{   r|   r   s    r(   rw   r   	  r   r*   r   r   r   r   Tr   r   s       @@r(   test_for_jac_very_close_to_zero7TestIterativeSubproblem.test_for_jac_very_close_to_zero   sl    KKLLM	O   &*5*?+@-2-24 #==-!! &3 	4 	"-6r*   r6   c                   ^^ [         R                  R                  S5        SnS GH  n/ SQnU GH  u  pE[        XXR5      u  mm/ SQnU GH  n[	        SS U4S jU4S	 jS
S
S9nUR                  U5      u  pS[         R                  " U	[         R                  " TU	5      5      -  [         R                  " TU	5      -   n/ SQnU GH	  u  p[        US-
  S[         R                  " U5      -
  5      nSU-
  n[	        SS U4S jU4S jUUS9nUR                  U5      u  nnS[         R                  " U[         R                  " TU5      5      -  [         R                  " TU5      -   nU(       a6  [        [         R                  " [        U5      U-
  5      US-
  U-  :*  S5        O[        [        U5      U:*  S5        [        UX-  :*  S5        GM     GM     GM     GM     g )Nr   rP   )easyr   r   ))ii))r   r   )r   rP   )r   r6   )r   r6   )rP   r6   )      )	皙?g333333?g333333?r4   r   g333333?gffffff
@g      @r6   r   c                     grt   rF   ru   s    r(   rw   ATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>1  s    qr*   c                    > T$ r{   rF   r}   s    r(   rw   r   2      qr*   c                    > T$ r{   rF   r   s    r(   rw   r   3  r   r*   r   )r   r         ?))r   r/   )r   r   )g?g)\(?c                     grt   rF   ru   s    r(   rw   r   L  s    r*   c                    > T$ r{   rF   r}   s    r(   rw   r   M      r*   c                    > T$ r{   rF   r   s    r(   rw   r   N  r   r*   T)r   r   seedr)   r   r   r   minsqrtr   r:   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   Jr   r'   s                        @@r(   test_for_random_entries/TestIterativeSubproblem.test_for_random_entries  s    			q 6D$J %/  $A>1 %O!$5L!4Q5@5@5@<A<A"CJ .8-=-=l-K*D rvvdBFF1dO<<RVVAt_LD%2M )6 "%U1W%&rwwu~%5"7!"5 #6a6A6A6A=C=C#E ,3==+F(=  q"&&A, 77q!D ).rvvd1gl6J/K05a/E0FGKM )aL)@$G %Q%*_d;= )6% %6 %/ 7r*   rF   N)rG   rH   rI   rJ   r   r   r   r   r   pytestmark	fail_slowr   rK   rF   r*   r(   rl   rl      s@    74>24.7070 [[2J< J<r*   rl   )__doc__r   numpyr   !scipy.optimize._trustregion_exactr   r   r   scipy.linalgr   r   r   r	   r
   numpy.testingr   r   r   r)   r,   rM   rl   rF   r*   r(   <module>r      s[       @ ?D D<G G2M5 M5`G< G<r*   