
    Bpj$U                         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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_allclose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/pdf-tiff/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Fr0    N)__name__
__module____qualname____firstlineno__rJ   __static_attributes__rL   r0   r.   r2   r2   /   s    Gr0   r2   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   r5   r6   )r5   r7      )r6   rV      potrfFTloweroverwrite_acleanr   r   r   r?   r   r   r   r   r   rA   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!.!4r0   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   r5   r6   r9   r=   )r5   rV   rV   r;   r   )r6   rV      r   r5   )r9   r;   r   r9   rV   )r=   r   r5   rV   r=   rX   FTrZ   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!.!4r0   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   r6   ri   )r6      rV   )ri   rV   rW   rX   FTrZ   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!.!4r0   rL   N)rM   rN   rO   rP   rf   rk   ro   rQ   rL   r0   r.   rS   rS   H   s    52565r0   rS   c                       \ rS 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<   r5   r6   r7   r5   r   r9   r   r6   r9   r   r9   r7   r   r9   r5   )r   r   r   r   r   r   c                     gNr   rL   xs    r.   <lambda>@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       Ar0   c                 0   > [         R                  " T5      $ Nr   r?   r|   r-   s    r.   r}   r~          BHHQKr0   c                 0   > [         R                  " T5      $ r   r   r|   Hs    r.   r}   r~          RXXa[r0   绽|=r|   funjachessk_easyk_hard)g8<bp?ggEg v?gˍ۪߿Tr   solver   )rA   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!! &? 	@!-6r0   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 )Nru   rv   rw   rx   )gAS@r   r   r   grvf(n r   r   c                     grz   rL   r{   s    r.   r}   @TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r      r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r      r   r0   r   r   )r   r   r   lambda_current)rA   rD   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&<&<=r0   c           	         ^^ SS/mSS/SS//m[        [        R                  " S5      S U4S jU4S	 jS
SS9nUR                  S5      u  p#[	        USS/5        U(       d   eg )N      r   rV   r5   c                     grz   rL   )r)   s    r.   r}   6TestIterativeSubproblem.test_gh20244.<locals>.<lambda>   s    1r0   c                 0   > [         R                  " T5      $ r   r   )r)   r-   s    r.   r}   r      r   r0   c                 0   > [         R                  " T5      $ r   r   )r)   r   s    r.   r}   r      r   r0   gư>g&.>r   g      ?gќ̪g<;?)r   r   r!   r   r   rA   r   r   r   r   r-   s       @@r.   test_gh20244$TestIterativeSubproblem.test_gh20244   si    I!Wq!f%*?+@-13 #==-K*56}r0   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rz   rL   r{   s    r.   r}   GTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r      r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r      r   r0   )r|   r   r   r   皙?)g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   r   r   r   niterr   s       @@r.   test_for_interior_convergence5TestIterativeSubproblem.test_for_interior_convergence   s    HJILJ	L J &*5*?+@B #==-!! &? 	@!-7!'"8"8!<!'--3r0   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rz   rL   r{   s    r.   r}   ATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r      r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r      r   r0   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 	"-6r0   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rz   rL   r{   s    r.   r}   ITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r     r   r0   c                 0   > [         R                  " T5      $ r   r   r   s    r.   r}   r     r   r0   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 	"-6r0   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   rV   )easyr   r   ))ii)r   )r   r   )r   rV   )r   r<   )r   r<   )rV   r<   )r   r   )r&   )	皙?g333333?g333333?r:   r   g333333?gffffff
@g      @r<   r   c                     grz   rL   r{   s    r.   r}   ATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>?  s    qr0   c                    > T$ r   rL   r   s    r.   r}   r   @      qr0   c                    > T$ r   rL   r   s    r.   r}   r   A  r   r0   r   )r   r         ?))r   r5   )r   r   )g?g)\(?c                     grz   rL   r{   s    r.   r}   r   Z  s    r0   c                    > T$ r   rL   r   s    r.   r}   r   [      r0   c                    > T$ r   rL   r   s    r.   r}   r   \  r   r0   T)r   r   r   r/   r   r   r   minsqrtr   r@   r
   r   )rA   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 %/ 7r0   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,  r9  g<A?r  x극B@sd^[?烙b?睶c~7%7F8Qt?Bd?7`ƭ?Vu]ܿ{jfu?BE)r   r  r  r-  r:  rF  r  g~@sϡ*J@WE@砇}Q4q%@?.XG? }#: @pr*@ݦg	oB@TY"_2#?/)S)r   r  r   r.  r;  rG  r  rR  gBw[E@<ۤbs@W#y4uֲ>Иe);M>''@Ѐz3jXD@!xtJ>ICı=฿crZ?)r  r  r!  r/  r<  rH  r  rS  r]  gR,@珉f`bB<tk3mIE۶T@ۄ{e6r@ǫ#u!qs =磴?)r  r  r"  r0  r=  rI  r  rT  r^  rg  g6mkS@[z4Ud@罹l25ם<9
x>HO$d@瓊_l@瀛o{폽@)r  r  r#  r1  r>  rJ  r  rU  r_  rh  rp  gI~w@u'|rfF>ɋ[餭 '@}@+LcEV!@)r  r  r$  r2  r?  rK  r  rV  r`  ri  rq  rx  gR3Z?A	#?jG@7VeeG|83緭v,?/yng)r  r  r%  r3  r@  rL  r  rW  ra  rj  rr  ry  r  gGb:@G>_R@`)Y禀\ɍ^?9o2)r  r  r&  r4  rA  rM  r  rX  rb  rk  rs  rz  r  r  g6x"m@oe%JnqvyN?~+)r  r  r'  r5  rB  rN  r  rY  rc  rl  rt  r{  r  r  r  gbS?RBU>@WUKܿsliq?)r  r  r(  r6  rC  rO  r  rZ  rd  rm  ru  r|  r  r  r  r  g<8bM@Q;*ʔ K6@)r	  r  r)  r7  rD  rP  r  r[  re  rn  rv  r}  r  r  r  r  r  g&Ad?aBI)r
  r  r*  r8  rE  rQ  r  r\  rf  ro  rw  r~  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rz   rL   r{   s    r.   r}   NTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    ar0   c                    > T$ r   rL   )r|   r   s    r.   r}   r    s    ar0   c                    > T$ r   rL   r   s    r.   r}   r    s    qr0   r   g?)r|   r   r   r   r   r   maxiterr   )r   r?   r   r   r   MAXITER_DEFAULT)	rA   subproblem_maxiterr  r   r   r   r   r   r   s	          @@r.   $test_for_finite_number_of_iterations<TestIterativeSubproblem.test_for_finite_number_of_iterationso  s   HH>
>
<
@
=
@
>
=
?
?
<
<
?
>
>
>
<
?
=u^>`
B HH 
  #BZ)G) G L&}}\:A}}(;(K(KKKK}}///# *r0   rL   N)rM   rN   rO   rP   r   r   r   r   r   r   pytestmarkthread_unsafe	fail_slowr   r  rQ   rL   r0   r.   rr   rr      sg    74>24.7070 [[&9:[[2I<  ;I<X}0r0   rr   r   )__doc__r  numpyr   !scipy.optimize._trustregion_exactr   r   r   scipy.linalgr   r   r   r	   r
   numpy.testingr   r   r   r   r/   r2   rS   rr   rL   r0   r.   <module>r     s[       @ ?D D>G G2M5 M5`T0 T0r0   