
    doi5S                         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S j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                 B   [         R                  R                  U5      nUR                  SSX 4S9n[	        USS9u  n  nUR                  XU S9n[         R
                  " U5      S S S2   n[         R                  " X5      n	[         R                  " XR                  5      n
US:X  aF  [         R                  " U 5      nUR                  SSU S-
  S9US S& [         R                  " Xk5      nX4$ US:X  a  [         R                  " U 5      nX4$ UR                  SSU S9nX4$ )N   )lowhighsizeTrue)pivotinghardjac_equal_zero)
nprandomdefault_rnguniformr	   sortmultiplydotTzeros)nmin_eigmax_eigcaserngrandQ_	eigvaluesQauxAgs               g/var/www/html/land-ocr/venv/lib/python3.13/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entryr.      s   
))


$C ;;2AQF;3D 'GAq! A>I	"4R4(I ;;y$D
tSSA v~HHQK!!A#6#2FF1L 4K 
!	!HHQK 4K KKBQQK/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_matrix1   sw     HHl&$#% & q6b R5b!e9 6a8
 	"$!<!#d)S]AFr/    N)__name__
__module____qualname____firstlineno__rI   __static_attributes__rK   r/   r-   r1   r1   /   s    Gr/   r1   c                   &    \ rS rSrS rS rS rSrg)TestSingularLeadingSubmatrixH   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   r4   r5   )r4   r6      )r5   rU      potrfFTloweroverwrite_acleanr   r   r   r>   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_submatrixJ   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   r4   r5   r8   r<   )r4   rU   rU   r:   r   )r5   rU      r   r4   )r8   r:   r   r8   rU   )r<   r   r4   rU   r<   rW   FTrY   r   r   )r   asarrayr   r   r   r   r   r^   s           r-   #test_for_simetric_indefinite_matrix@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixc   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   r5   rh   )r5      rU   )rh   rU   rV   rW   FTrY   r   r   r]   r^   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/   rK   N)rL   rM   rN   rO   re   rj   rn   rP   rK   r/   r-   rR   rR   H   s    52565r/   rR   c                       \ rS rSrS rS rS rS rS r\	R                  R                  SS9\	R                  R                  S	5      S
 5       5       rS 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r;   r4   r5   r6   r4   r   r8   r   r5   r8   r   r8   r6   r   r8   r4   )r   r   r   r   r   r   c                     gNr   rK   xs    r-   <lambda>@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       Ar/   c                 0   > [         R                  " T5      $ Nr   r>   r{   r,   s    r-   r|   r}          BHHQKr/   c                 0   > [         R                  " T5      $ r   r   r{   Hs    r-   r|   r}          RXXa[r/   绽|=r{   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 )Nrt   ru   rv   rw   )gAS@r   r   r   grvf(n r   r   c                     gry   rK   rz   s    r-   r|   @TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   r~   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   r      r   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   r      r   r/   r   r   )r   r   r   lambda_current)r@   rC   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ry   rK   rz   s    r-   r|   GTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   r~   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   r      r   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   r      r   r/   )r{   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ry   rK   rz   s    r-   r|   ATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   r~   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   r      r   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   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ry   rK   rz   s    r-   r|   ITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  r~   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   r   	  r   r/   c                 0   > [         R                  " T5      $ r   r   r   s    r-   r|   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/   zfails in parallel)reasonr;   c                   ^^ [         R                  R                  S5      nSnS GH  n/ SQnU GH  u  pV[        X%XcUS9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   rU   )easyr   r   ))ii))r   r   )r   rU   )r   r;   )r   r;   )rU   r;   )      )r%   )	皙?g333333?g333333?r9   r   g333333?gffffff
@g      @r;   r   c                     gry   rK   rz   s    r-   r|   ATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>2  s    qr/   c                    > T$ r   rK   r   s    r-   r|   r   3      qr/   c                    > T$ r   rK   r   s    r-   r|   r   4  r   r/   r   )r   r         ?))r   r4   )r   r   )g?g)\(?c                     gry   rK   rz   s    r-   r|   r   M  s    r/   c                    > T$ r   rK   r   s    r-   r|   r   N      r/   c                    > T$ r   rK   r   s    r-   r|   r   O  r   r/   T)r   r   r   r.   r   r   r   minsqrtr   r?   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    ii##A& 6D$J %/  $A3G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/   c                   ^^ [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ S	Q/ S
Q/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      m[         R                  " / SQ5      mSS/nU Hg  n[        SS U4S jU4S jSSUS9nSnUR                  U5      u  pVUc"  UR                  [        R
                  ::  d   eMU  UR                  U::  a  Mg   e   g)zRegression test for gh-12513)g`]B@nضo}crs'@9bS.Q- 8w r   8T`w^ѿ-U\v\?炾_j@R^ݸiT[ʢ]LX?篍>'@,:Y,>7*3?)r   "J@XWmх?%6@x(,@r  yֱ@ַ#@&8L0@皇lB|sɂ(h0s?	@Fyb@{P(CfR?爏c)r   r  gϠrm@G)ܿP{ۍ`t<r  8$p&
>Jwy>b*P gc\@K@畑E1@!a"*%DS	5Vh	@k	ؒ@)r   r  r  gOhj?L ?Z"'?r  \,8Q?ZϪޡy?Mؤh?B?NR?HOAK9%?琒O$V?>fB?OZ?ϗ@dA )r   r  r  r#  g3333@J_@r  r`J@"<5@|DL$d@JZRU]Ջ)T@~?@l%H@祿U"翀^sw7 [Z@ 8)&)r   r  r  r$  r1  g<A?r  x극B@sd^[?烙b?睶c~7%7F8Qt?Bd?7`ƭ?Vu]ܿ{jfu?BE)r   r  r  r%  r2  r>  r  g~@sϡ*J@WE@砇}Q4q%@?.XG? }#: @pr*@ݦg	oB@TY"_2#?/)S)r   r	  r  r&  r3  r?  r	  rJ  gBw[E@<ۤbs@W#y4uֲ>Иe);M>''@Ѐz3jXD@!xtJ>ICı=฿crZ?)r   r
  r  r'  r4  r@  r
  rK  rU  gR,@珉f`bB<tk3mIE۶T@ۄ{e6r@ǫ#u!qs =磴?)r   r  r  r(  r5  rA  r  rL  rV  r_  g6mkS@[z4Ud@罹l25ם<9
x>HO$d@瓊_l@瀛o{폽@)r   r  r  r)  r6  rB  r  rM  rW  r`  rh  gI~w@u'|rfF>ɋ[餭 '@}@+LcEV!@)r   r  r  r*  r7  rC  r  rN  rX  ra  ri  rp  gR3Z?A	#?jG@7VeeG|83緭v,?/yng)r   r  r  r+  r8  rD  r  rO  rY  rb  rj  rq  rw  gGb:@G>_R@`)Y禀\ɍ^?9o2)r   r  r  r,  r9  rE  r  rP  rZ  rc  rk  rr  rx  r}  g6x"m@oe%JnqvyN?~+)r   r  r  r-  r:  rF  r  rQ  r[  rd  rl  rs  ry  r~  r  gbS?RBU>@WUKܿsliq?)r   r  r   r.  r;  rG  r  rR  r\  re  rm  rt  rz  r  r  r  g<8bM@Q;*ʔ K6@)r  r  r!  r/  r<  rH  r  rS  r]  rf  rn  ru  r{  r  r  r  r  g&Ad?aBI)r  r  r"  r0  r=  rI  r  rT  r^  rg  ro  rv  r|  r  r  r  r  r  gC	f@)gqՠgbk>g6ߓR>gI눑gXF;>g)	@AnN>g\>ghM>gV֕gH4>Sg͜>gsCa!T>g'sdg6KJg~|WRg,Nh>g		>gZ|O>g+ݱf>Nr;   r   c                     gry   rK   rz   s    r-   r|   NTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    ar/   c                    > T$ r   rK   )r{   r   s    r-   r|   r    s    ar/   c                    > T$ r   rK   r   s    r-   r|   r    s    qr/   r   g?)r{   r   r   r   r   r   maxiterr   )r   r>   r   r   r   MAXITER_DEFAULT)	r@   subproblem_maxiterr  r   r   r   r   r   r   s	          @@r-   $test_for_finite_number_of_iterations<TestIterativeSubproblem.test_for_finite_number_of_iterationsb  s   HH>
>
<
@
=
@
>
=
?
?
<
<
?
>
>
>
<
?
=u^>`
B HH 
  #BZ)G) G L&}}\:A}}(;(K(KKKK}}///# *r/   rK   N)rL   rM   rN   rO   r   r   r   r   r   pytestmarkthread_unsafe	fail_slowr   r  rP   rK   r/   r-   rq   rq      sb    74>24.7070 [[&9:[[2I<  ;I<X}0r/   rq   r   )__doc__r  numpyr   !scipy.optimize._trustregion_exactr   r   r   scipy.linalgr   r   r   r	   r
   numpy.testingr   r   r   r.   r1   rR   rq   rK   r/   r-   <module>r     s[       @ ?D D>G G2M5 M5`G0 G0r/   