
    -i                        S SK r S SKrS SKrS SKJrJr  S SKJr  S SK	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJrJrJrJr  S S
KJrJrJrJrJrJrJ r   S SK!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  S SK1J2r2J3r3J4r4J5r5J6r6J7r7  \Rp                  Rs                  S\2\3-   \4-   \6-   5      S 5       r:S r;S r<\Rp                  Rs                  S\Rz                  \R|                  \R~                  \R                  45      S 5       rA\Rp                  Rs                  S\Rz                  \R|                  \R~                  \R                  45      S 5       rB\Rp                  Rs                  SS5      S 5       rC\Rp                  Rs                  S/ SQ5      S 5       rD\Rp                  Rs                  S\R~                  \R                  45      \Rp                  Rs                  S\45      S 5       5       rES rFS rGS rHS rI\Rp                  Rs                  S\5\6-   5      S  5       rJS! rK\Rp                  Rs                  S"S#S$/5      S% 5       rLS& rMS' rN\Rp                  Rs                  S(/ S)Q5      \Rp                  Rs                  S*/ S)Q5      \Rp                  Rs                  S/ S+Q5      \Rp                  Rs                  S,\O" S-5      5      S. 5       5       5       5       rPS/ rQ\Rp                  Rs                  S0\R                  " / S1Q\Rz                  S29\R                  " S3S-/\R|                  S29/\R                  " \R|                  5      4\R                  " / S1Q\Rz                  S29\R                  " S3S-/\R                  S29/\R                  " \R                  5      4\R                  " / S1Q\Rz                  S29\R                  " S4S5/\TS29/\R                  " \T5      4/5      S6 5       rU\R                  " 5       S7 5       rW\Rp                  Rs                  S\R~                  \R                  /5      S8 5       rX\Rp                  Rs                  S9/ S:Q5      \Rp                  Rs                  S;/ S<Q5      \Rp                  Rs                  S=/ S>Q5      S? 5       5       5       rY\Rp                  Rs                  S\R~                  \R                  /5      S@ 5       rZSA r[SB r\\ SC 5       r]SD r^SE r_SF r`SG ra\Rp                  Rs                  SH\R                  /\4QSI/\4 V s/ s H  o R                  PM     sn -   SJ9\Rp                  Rs                  SK\R                  /\4QSI/\4 V s/ s H  o R                  PM     sn -   SJ9SL 5       5       rc\Rp                  Rs                  S\45      SM 5       rd\Rp                  Rs                  SN\R                  /\4QSI/\4 V s/ s H  o R                  PM     sn -   SJ9SO 5       re\Rp                  Rs                  SPSQSR/5      SS 5       rfST rg\Rp                  Rs                  SU\" 5       \SJ9SV 5       rh\Rp                  Rs                  SU\" 5       \SJ9SW 5       rigs  sn f s  sn f s  sn f )X    N)linalgsparse)eigh)eigsh)config_context)make_low_rank_matrixmake_sparse_spd_matrix)gen_batches)_init_arpack_v0)_convert_to_numpy_get_namespace_device_dtype_idsget_namespace)yield_namespace_device_dtype_combinations)_array_api_for_testsassert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalskip_if_32bit)_approximate_mode_deterministic_vector_sign_flip_incremental_mean_and_var_randomized_eigsh_safe_accumulator_op	cartesiandensityrandomized_range_finderrandomized_svd	row_normssafe_sparse_dotsoftmaxstable_cumsumsvd_flipweighted_mode)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS_modesparse_containerc                     [         R                  R                  S5      nUR                  SSS9nSUS'   SUS'   [	        U " U5      5      [	        U5      :X  d   eg )Nr   
   r.      size)      )r0      )nprandomRandomStaterandintr   )r,   rngXs      S/var/www/html/venv/lib/python3.13/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr=   :   sY    
 ))


"CBW%AAdGAdG#A&'71:555    c                     [         R                  R                  S5      n U R                  SSS9n[         R                  " UR
                  5      nS H2  n[        X5      u  pE[        XUS9u  pg[        XF5        [        XW5        M4     g )Nr   r.   r/   r1   )Nr   r3   axis)	r6   r7   r8   r9   onesshaper+   r%   r   )r:   xweightsrA   modescoremode2score2s           r<   test_uniform_weightsrJ   G   sm    
))


"CBW%AggaggGAn%at<4'5) r>   c                  h   Sn [         R                  R                  S5      nUR                  U SS9nUR	                  UR
                  5      nXS S 2S S24'   US S 2S S24==   S-  ss'   [        X#SS9u  pE[        X@5        [        UR                  5       US S 2S S24   R                  S5      5        g )N   r   d   r.   r1   r0   r3   r@   )r6   r7   r8   r9   random_samplerC   r%   r   r   ravelsum)mode_resultr:   rD   wrF   rG   s         r<   test_random_weightsrT   U   s     K
))


"CKi0A!''"Aa!eHa!eHMH1-KDt)ekkmQq"1"uX\\!_=r>   dtypec           
         SnSnSnSnU [         R                  :X  a  SOSn[         R                  " U 5      n [        UUUSSS9R	                  U S	S
9nUR
                  X4:X  d   e[        R                  " US	S9u  pxn	UR	                  U S	S
9nUR	                  U S	S
9nU	R	                  U S	S
9n	S GH  n
[        XdU
SS9u  pnU R                  S:X  a7  UR                  U :X  d   eUR                  U :X  d   eUR                  U :X  d   eO`UR                  [         R                  :X  d   eUR                  [         R                  :X  d   eUR                  [         R                  :X  d   eUR
                  X4:X  d   eUR
                  U4:X  d   eUR
                  XB4:X  d   e[        US U XS9  [        [         R                  " US S 2S U24   U	S U2S S 24   5      [         R                  " X5      US9  [         H  nU" U5      n[        XdU
SS9u  pnU R                  S:X  a7  UR                  U :X  d   eUR                  U :X  d   eUR                  U :X  d   eOTUR                  R                  S:X  d   eUR                  R                  S:X  d   eUR                  R                  S:X  d   e[        US U US U US9  M     GM     g )NrN     r0   r.              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerr_   fdecimal)r6   float32rU   r   astyperC   r   svdr   kindfloat64r   dotr(   )rU   r[   r\   rankkrk   r;   UsVt
normalizerUasaVacsr_containers                  r<   'test_randomized_svd_low_rank_all_dtypesr|   g   s    IJD
ABJJ&aAGHHUOE 		 fUf  77y---- zz!51HA" 	
U#A	U#A	5u	%B*
#Za

 ::88u$$$88u$$$88u$$$88rzz)))88rzz)))88rzz)))xxI>)))xxA4xxA?*** 	AbqE27 	FF1QU8RAY'	

 ,Ma A (!JBB zzS xx5(((xx5(((xx5(((xx}}+++xx}}+++xx}}+++%4"Ud)WE! ,A +r>   c                 (   [         R                  R                  S5      n[         R                  " [         R                  " / SQU S95      n[         R
                  R                  UR                  UR                  S95      S   nX2-  UR                  -  n[        USSS9u  pEUR                  S	:X  d   e[        US
S/5        UR                  S:X  d   e[        R                  " [        5         [        USSS9  SSS5        g! , (       d  f       g= f)z@Test that `_randomized_eigsh` returns the appropriate components*   )      ?       rY         @rU   r1   r   r4   module)n_components	selection)r4   r   r   )   r4   valueN)r6   r7   r8   diagarrayr   qrnormalrC   Tr   r   pytestraisesNotImplementedError)rU   r:   r;   rand_roteigvalseigvecss         r<   test_randomized_eigshr      s     ))


#C
.e<=Ayy||CJJAGGJ45a8Hxzz!A )hOG==D   gT{3==F""" 
*	+!!w? 
,	+	+s   .D
Drs   )r.   2   rN         c           
         Sn[        USS9n[        X SSSS9u  p4[        UU SSSSSS	9u  pV[        X!U -
  US
-
  4S9u  pxUR                  5       SSS2   n	Xy   nUSS2U	4   nUR                  U 4:X  d   e[        X7SS9  [        XWSS9  UR                  X4:X  d   e[        R                  " U5      R                  n
[        XJ5      u  pK[        Xj5      u  pk[        X5      u  p[        XHSS9  [        XhSS9  X:  a^  [        USS9n[        X SSSUS9u  pUR                  5       SSS2   n	X   n[        X}SS9  USS2U	4   n[        X5      u  p[        XSS9  gg)a  Check that `_randomized_eigsh` is similar to other `eigsh`

Tests that for a random PSD matrix, `_randomized_eigsh` provides results
comparable to LAPACK (scipy.linalg.eigh) and ARPACK
(scipy.sparse.linalg.eigsh).

Note: some versions of ARPACK do not support k=n_features.
r   r   r_   r      )r   r   n_iterr_      rf   )r   r   n_oversamplesr_   rh   r   r3   )subset_by_indexNrL   rj   r   LA)whichtolmaxiterv0r.      )r	   r   r   argsortrC   r   r6   
zeros_liker   r$   r   r   )rs   r\   r;   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r<   (test_randomized_eigsh_compared_to_othersr      s    Jz:A )	XbqG /	#'J &*	NJN;&"N $$&tt,G#,N#AwJ/N A4'''gqAj!D J?222w'))J'.JGZ4MJ <NgqAj!D 	~Za8).!Tb*
& !((*4R40'0!."M'7
3$^@!.!L r>   zn,rank))r.   rX   rM   )rN   P   )rW   r.   )rW      )rW   i  c                 (   X:  d   e[         R                  R                  S5      nUR                  X5      nX3R                  -  n[        XAUS9u  pV[        [         R                  R                  USS9[         R                  " UR                  5      5        [        UR                  U-  [         R                  " [         R                  " UR                  5      5      5        U[         R                  " U5      -  UR                  -  n[        XtSS9  g)a  Check that randomized_eigsh is able to reconstruct a low rank psd matrix

Tests that the decomposition provided by `_randomized_eigsh` leads to
orthonormal eigenvectors, and that a low rank PSD matrix can be effectively
reconstructed with good accuracy using it.
E   )r   r_   r   r@   rL   rj   N)r6   r7   r8   randnr   r   r   r   normrB   rC   r   )nrr   r:   r;   ASVA_reconstructs           r<   &test_randomized_eigsh_reconst_low_rankr     s    $ 8O8 ))


#C		!A	CCA QDDAbiinnQQn79IJaccAgrwwrwwqww/?'@A
NQSS(M m:r>   r{   c           	      >   [         R                  R                  S5      R                  SS5      nU [         R                  L a  SnOSnUR                  U SS9nUS-  R                  SS	9n[        U[        US
S9U5        [        [         R                  " U5      [        U5      U5        [         R                  [         R                  4 H  nU" X S9nU[         R                  L a>  UR                  R                  USS9Ul        UR                  R                  USS9Ul        UR                  R                  U:X  d   eUR                  R                  U:X  d   e[        U[        US
S9U5        [        [         R                  " U5      [        U5      U5        M     g )Nr~   rN   r   r0   Fr`   r4   r3   r@   T)squaredr   )r6   r7   r8   r   rl   rm   rQ   r   r    sqrtint32int64indptrr   rU   )rU   r{   r;   	precisionsq_normcsr_index_dtypeXcsrs          r<   test_row_normsr   ;  sN    			b!''S1A

			U#A!tjjaj GgyD'A9Mbggg.	!iHHHbhh/Q, bhh&++,,_5,IDK<<..U.KDL||!!_444{{  O333!'9T4+H)T!"'''"2IdOYO 0r>   c            	      L   Sn SnSnSn[        U UUSSS9nUR                  X4:X  d   e[        R                  " USS	9u  pVnS
 H^  n[	        XCSUSS9u  pXn[
        R                  " US U U-
  5      R                  5       S:  d   e[	        XCUSS9u  pYn[        US U U	SS9  M`     g )NrN   rW   r0   r.   皙?r   rZ   Frb   rd   nonere   rf   r   rh   r_   g{Gz?rg   r5   rj   	r   rC   r   rn   r   r6   absmaxr   
r[   r\   rr   rs   r;   r   ru   rw   ry   saps
             r<   'test_randomized_svd_low_rank_with_noiser   W  s    IJD
A 		A 77y---- jj%0GA!2
 "zPQ
q
 vvaebj!%%'$... #Za
	
 	AbqE32# 3r>   c            	      N   Sn SnSnSn[        U UUSSS9nUR                  X4:X  d   e[        R                  " USS	9u  pVnS
 H_  n[	        XCSUSS9u  pXn[
        R                  " US U U-
  5      R                  5       S:  d   e[	        XCSUSS9u  pYn[        US U U	SS9  Ma     g )NrN   rW   r0   r.   r   r   rZ   Frb   r   r   r   r5   rj   r   r   s
             r<   !test_randomized_svd_infinite_rankr     s    IJD
A 		A 77y---- jj%0GA!2
 "zPQ
q
 vvaebj!%%'#--- #zPQ
	 	AbqE32% 3r>   c            
      Z   Sn SnSnSn[        U UUSSS9nUR                  X4:X  d   e[        XCSS	SS
9u  pVn[        XCSSSS
9u  pn
[        XCSSSS
9u  pn[        R                  " US	S9u  pn[        XoS U SS9  [        XS U SS9  [        XS U SS9  [        [        R                  " XW5      [        R                  " US S 2S U24   US U2S S 24   5      SS9  [        [        R                  " X5      [        R                  " US S 2S U24   US U2S S 24   5      SS9  [        X5        g )NrN   rW   r   r.   g      ?r   rZ   r5   F)r   	transposer_   Trd   rb   rj   r4   )r   rC   r   r   rn   r   r6   rq   )r[   r\   rr   rs   r;   U1s1V1U2s2V2U3s3V3U4s4V4s                    r<   )test_randomized_svd_transpose_consistencyr     s>   IJD
A	A 77y----Q%aPJBBQ$QOJBBQ&qQJBBAU3JBBrFA.rFA.rFA.rr!RaR%y"RaRU)(DaPrr!RaR%y"RaRU)(DaP r>   c            
         [         R                  R                  S5      n [        SSSU S9nUSU R	                  SSUR
                  S	9-  -  nSn[        XSS
SS9u  p4nXR                  [         R                  " U5      R                  U5      5      -
  n[        R                  " USS9n[        XSS
SS9u  p4nXR                  [         R                  " U5      R                  U5      5      -
  n[        R                  " USS9n[         R                  " Xx-
  5      S:  d   eS H  n	[        UUSU	SS9u  p4nXR                  [         R                  " U5      R                  U5      5      -
  n[        R                  " USS9nS H|  n
[        UUU
U	SS9u  p4nXR                  [         R                  " U5      R                  U5      5      -
  n[        R                  " USS9nS[         R                  " X{-
  5      :  a  M|   e   M     g )Nr~   rN   rW   r   r]   r_   r5   r   r4   r1   r   r   fro)ordr   )re   rf   rd   )r0   r.   r      )r6   r7   r8   r   r9   rC   r   rq   r   r   r   r   )r:   r;   r   rt   ru   rv   r   error_2error_20rw   ierrors               r<   .test_randomized_svd_power_iteration_normalizerr     s    ))


#CS#bsKAS[[AAGG[,	,,AL 	fSTHA" 	
EE"''!*..$%%Akk!'G	vTUHA" 	
EE"''!*..$%%A{{1%(H66'$%+++*
!'1
b bggajnnR())++aU+A%+5HA" EE"''!*..,--AKKu-Ew////  +r>   c                 4   [         R                  R                  S5      n[        SSSUS9nSnU " U5      nSR	                  U R
                  5      n[        R                  " [        R                  US9   [        X#S	S
S9  S S S 5        g ! , (       d  f       g = f)Nr~   r   r   r.   r   r0   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr3   r   )r   rh   )r6   r7   r8   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r,   r:   r;   r   warn_msgs        r<   #test_randomized_svd_sparse_warningsr     s     ))


#CRBSIALAMTT%%	
 
 
f44H	EqqVT 
F	E	Es   4B		
Bc                  T   [         R                  R                  S5      n SnSnU R                  X5      n[        R
                  " USS9u  pEn[        XFSS9u  px[        [         R                  " Xu-  U5      USS9  UR                  n	[        R
                  " U	SS9u  pEn[        XFS	S9u  p[        [         R                  " X-  U5      U	SS9  [        XFS	S9u  p[        [         R                  " X-  U5      U	SS9  [        XFSS9u  p[        [         R                  " X-  U5      U	SS9  g )
N  r   r.   Frb   u_based_decisionrL   rj   T)
r6   r7   r8   r   r   rn   r$   r   rq   r   )rsr[   r\   r;   rt   r   rv   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r<   test_svd_flipr     s   			t	$BIJ
'A zz!51HA"ae4FBrvr*Aq9 
Bzz"E2HA"ad3FBrvr*B:  =Gw{G4b!D>Gw{G4b!Dr>   zn_samples, n_features)r5   r   )r   r5   c                 f   [         R                  R                  U5      nUR                  X5      n[        R
                  " USS9u  pVn[        XWSS9u  p[         R                  " [         R                  " U5      SS9n	X[         R                  " UR                  S   5      4   S:  R                  5       (       d   e[        XWSS9u  pj[         R                  " [         R                  " U
5      SS9nU
[         R                  " U
R                  S   5      U4   S:  R                  5       (       d   eg )NFrb   Tr   r   r@   r3   )r6   r7   r8   r   r   rn   r$   argmaxr   arangerC   all)r[   r\   global_random_seedr   r;   rt   r   rv   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rows               r<   test_svd_flip_max_abs_colsr     s    			1	2B
'Azz!51HA"QT2EB!#266":A!>299RXXa[+AABaGLLNNNNQU3EA!#266":A!>ryy!%'AABaGLLNNNNr>   c                  
   [         R                  " SS/SS//5      n [        U SSSS9u  pn[        S5       H  n[        U SSUS9u  pVn[	        X5        [	        X75        [	        [         R
                  " XV-  U5      U 5        [	        [         R
                  " UR                  U5      [         R                  " S5      5        [	        [         R
                  " UR                  U5      [         R                  " S5      5        M     g )	Ng       @rY   r   r4   T)   	flip_signr_   r.   )r6   r   r   ranger   rq   r   eye)au1r   v1seedu2r   v2s           r<   test_randomized_svd_sign_flipr  /  s    
3*sCj)*A12FJBBb	#AqDtL
B#B#BFF27B/3BFF244,bffQi8BFF244,bffQi8 r>   c                     S n [         R                  " S5      R                  SS5      n[        USSSS9u  p#nU " X$5      u  pVU(       d   eU(       a   e[        USSSSS	9u  psnU " Xx5      u  pVU(       d   eU(       a   eg )
Nc                    [         R                  " U 5      R                  SS9U R                  SS9:H  R                  5       n[         R                  " U5      R                  SS9UR                  SS9:H  R                  5       nX#4$ )z
returns bool tuple indicating if the values maximising np.abs
are positive across all rows for u and across all columns for v.
r   r@   r3   )r6   r   r   r  )uvu_basedv_baseds       r<   max_loading_is_positiveMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive@  sm    
 66!9==a=(AEEqEM9>>@66!9==a=(AEEqEM9>>@r>   r   r.   r   r5   Tr   r  )r  r   r_   )r6   r  reshaper   )	r  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r<   ,test_randomized_svd_sign_flip_with_transposer$  ;  s    
  ))F

#
#B
+C -S!tRSTI).yDGN7; =KQ$$Q=9!9 / G N7;wr>   r   )r   rN   ,  m)r.   r   r   r  r0   c                    [         R                  R                  U5      nUR                  X5      n[	        XRSSS9u  pgn[	        XRSSS9u  pnUR
                  U	R
                  :X  d   e[        XiSSS9  UR
                  U
R
                  :X  d   e[        XzSSS9  UR
                  UR
                  :X  d   e[        XSSS9  g )Ngesddr   )svd_lapack_driverr_   gesvdgMbP?)atolrtol)r6   r7   r8   randr   rC   r   )r   r&  rs   r  r:   r;   r  r   vt1r  r   vt2s               r<   !test_randomized_svd_lapack_driverr0  \  s     ))


%CA !qQKBC qQKBC 88rxxB.88rxxB.99		!!!C140r>   c                     [         R                  " / SQ5      [         R                  " SS/5      [         R                  " SS/5      4n [         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/5      n[        U 5      n[        X5        [         R                  " S5      n[        US S 2[         R
                  4   [        U45      5        g )Nr3   r4   r5   r   r0   rL   rX   )r3   r   rL   )r3   r   rX   )r3   r0   rL   )r3   r0   rX   )r4   r   rL   )r4   r   rX   )r4   r0   rL   )r4   r0   rX   )r5   r   rL   )r5   r   rX   )r5   r0   rL   )r5   r0   rX   r5   )r6   r   r   r   r  newaxis)axestrue_outoutrD   s       r<   test_cartesianr7  v  s     HHY1a&!1288QF3CDDxx	
H" D/Cx% 			!AqBJJ'A49r>   zarrays, output_dtyper2  r   r   rD   yc                 >    [        U 5      nUR                  U:X  d   eg)z8Check that the cartesian product works with mixed types.N)r   rU   )arraysoutput_dtypeoutputs      r<   test_cartesian_mix_typesr=    s     & vF<<<'''r>   c                  @    [         R                  R                  S5      $ )Nr~   )r6   r7   r8    r>   r<   r:   r:     s    99  $$r>   c                 F   SnU R                  SS5      R                  U5      U-  nU R                  UR                  S   5      U-  n[        USSSUS9u  pVn[        R
                  " X4SS9n[        R
                  " US-  USS9US-  -
  n	[        XX5        [        Xi5        g )Nr.     r   r   sample_weightrE   rA   r4   )r-  rm   rC   r   r6   averager   )
r:   rU   multr;   rC  meanvarr   expected_meanexpected_vars
             r<   2test_incremental_weighted_mean_and_variance_simplerK    s    Dr!!%(4/AHHQWWQZ(4/M,Q1a}ULDqJJqa@M::adMB]TUEUUL,*r>   rG  )r       cAg    crH  )r3   :0yE>g     j@zweight_loc, weight_scale))r   r3   )r   rM  )r3   rM  )r.   r3   )rL  r3   c                    S nSnUR                  X#US   S9nUR                  XUS9n[        [        R                  XSS9n	[        [        R                  X-
  S-  USS9n
U" XX5        UR                  XUS9n[        R                  " US   5      n[        [        R
                  USS9n	[        [        R                  USS9n
U" XX5        g )Nc           
          U R                   S   nSUS-  S-   US-  S-   US-  S-   U4 HC  nSu  pgn[        XE5       H  n	[        X	   UUUX   S9u  phnM     [        Xb5        [        XSS	9  ME     g )
Nr   r3   r.   r   r4   )r   r   r   rB  ư>r+  )rC   r
   r   r   )
r;   rC  rI  rJ  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r<   _assert<test_incremental_weighted_mean_and_variance.<locals>._assert  s    GGAJa2gk16A:qAvz1EJ3:0I$Q37PH#"/"684	_ 4 I5H> Fr>   )rN   r   r   )locscaler2   rD  r4   r@   )r   r   r6   rE  rB   rG  rH  )rG  rH  
weight_locweight_scaler:   rW  r2   weightr;   rI  rJ  ones_weights               r<   +test_incremental_weighted_mean_and_variancer_    s    ? DZZJaZIF 	

tT
2A(QQOM'


Q&1,f1L A}3 	

tT
2A''$q'"K(!!<M':LAM8r>   c           	         [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " / SQ[         R                  S9n[         R                  " S5      n[         R                  " S5      n[         R                  " / SQ/ SQ/ S	Q/5      R	                  U 5      n[         R                  " S
[         R
                  S
S
/[         R
                  S
SS/SS[         R
                  S/SSS[         R
                  //5      R	                  U 5      n[        XaX#US9u  pn
[        UUUUUS9u  pn[        X5        [        X5        [        X5        g )N     @rb  rb  rb       @rd  rd  rd  r4   r4   r4   r4   r   r5   r      rg  rg  rg    ri  ri  ri  r%  r%  r%  r%  rg  ri  r%  rB  )r6   r   r   rB   rm   nanr   r   )rU   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr;   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r<   6test_incremental_weighted_mean_and_variance_ignore_nanrx    s-   56IHH=>MXXl"((;Nwwqz771:
	35IJ	fUm  HH"&&#s#VVS#s##rvvs##sBFF#		
 fUm 
 %>	mCS%!G' 1J*1-K+ K)O1K)r>   c                     [         R                  " / SQ/ SQ/ SQ/ SQ/5      R                  n SnU S U2S S 24   nXS 2S S 24   nUR                  SS9nUR	                  SS9n[         R
                  " UR                  S   UR                  S   [         R                  S9n[        X4XV5      u  pxn	[        XpR                  SS9S5        [        XR	                  SS9S5        [        XR                  S   5        g )N)iX  i  rg  ri  r%  r4   r   r@   r3   r   rL   )
r6   r   r   rG  rH  fullrC   r   r   r   )
r   idxX1X2rl  rm  old_sample_countfinal_meansfinal_variancesfinal_counts
             r<   )test_incremental_variance_update_formulasr    s     	%%%%		
	 a  C	
4C47B	
47BQIFFFNMwwrxx{BHHQKrxxH0I
}1-K+ VVV^Q7A:WWQZ0r>   c            	      .   [         R                  " / SQ5      n [         R                  " / SQ5      n[         R                  " / SQ[         R                  S9n[         R                  " / SQ/ SQ/ SQ/5      n[         R                  " S[         R                  SS/[         R                  SS	S	/S	S	[         R                  S
/S
S
S
[         R                  //5      n[	        X0X5      u  pVn[	        X@X5      u  pn
[        X5        [        X5        [        X5        g )Nra  rc  re  r   rf  rh  rj  rg  ri  r%  )r6   r   r   rk  r   r   )rl  rm  r~  r;   rq  rr  rs  rt  ru  rv  rw  s              r<   -test_incremental_mean_and_variance_ignore_nanr  (  s    56IHH=>MxxBHH=
&(<>RSTAHH"&&#s#VVS#s##rvvs##sBFF#		
E %>	m%!G' 1J-1-K+ K)O1K)r>   c                     S n S nS nS nSnSnSn[         R                  " S[         R                  S	9n[         R                  " S
[         R                  S	9n[         R                  " US-  U4U[         R                  S	9n	[         R                  " US-  U4U[         R                  S	9n
[         R
                  " X45      n[         R                  " U " U5      U" U5      -
  5      R                  5       U:  d   eU	SS S 24   [         R                  " U5      US-  pn[        U
R                  S   5       H  nU" XS S 24   XU5      u  pnM     XR                  S   :X  d   e[         R                  " UR                  SS9U-
  5      R                  5       S:  d   e[         R                  " U " U5      U-
  5      R                  5       U:  d   eU	SS S 24   [         R                  " U5      p[         R                  " XVS-  [         R                  S	9n[        U
R                  S   5       H7  n[        XS S 24   R                  SU
R                  S   45      XU5      u  pnM9     [        XR                  S   5        [!        UR                  SS9U5        U[         R                  " U " U5      U-
  5      R                  5       :  d   eg )Nc                      U R                  SS9$ )Nr   r@   )rH  )r   s    r<   np_var=test_incremental_variance_numerical_stability.<locals>.np_varH  s    uu!u}r>   c                 |    U R                   S   nU S-  R                  SS9U-  nU R                  SS9U-  S-  nX#-
  $ )Nr   r4   r@   )rC   rQ   )r;   r   exp_x2expx_2s       r<   one_pass_varCtest_incremental_variance_numerical_stability.<locals>.one_pass_varM  sI    GGAJQ$#a'%%Q%-!#)r>   c                 t    U R                  SS9nU R                  5       n[        R                   " X!-
  S-  SS9$ )Nr   r@   r4   )rG  ra   r6   )r;   rG  Ys      r<   two_pass_varCtest_incremental_variance_numerical_stability.<locals>.two_pass_varV  s3    vv1v~FFHwwQQ//r>   c                 d    US-   nU[        U5      -  nX-  X-  -   nX%-  X-
  X-
  -  U-  -   nXgU4$ )Nr3   )float)rD   rS  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r<   naive_mean_variance_updateQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_update^  s_    014)E2F,GG/)2KK)}!125IIJ 	 /CCCr>   r   r4   i'  g    חAr   h㈵>r   r@   rP  r3   )r6   r   rp   logrz  vstackr   r   zerosr  rC   rG  r   r   r  r   r   )r  r  r  r  r   r\   r[   x1x2A0A1r   rG  rH  r   r   s                   r<   -test_incremental_variance_numerical_stabilityr  D  sQ   
0D CJI	#RZZ	(B	BJJ	'B	)q.*-r	DB	)q.*-r	DB
		2(A 66&)l1o-.224s:::
 ad8RXXj19>qD288A;1"T(DqI1  
??66!&&a&.4'(,,.55566&)c/"&&(3... 1a4"((:.#

N"((;A288A;0!tHa!-.1
1   q''!*%aff!fnd3q	C(,,....r>   c                  `   [         R                  R                  S5      n U R                  SS5      nUR                  u  p#S GHh  n[         R
                  " SUR                  S   U5      nUS   UR                  S   :w  a  [         R                  " XR/5      n[        R                  " U5       H  u  pgXU2S S 24   nUS:X  al  UR                  SS9n	UR                  SS9n
UR                  S   n[         R                  " UR                  S   UR                  S   [         R                  S	9nO$[        UW	W
W5      nUu  pnXR                  S   -  n[         R                  " US U SS9n[         R                  " US U SS9n[        XS
5        [        XS
5        [        X5        M     GMk     g )Nr   r   r.   )   r   %   r   r   r@   r3   r   rL   )r6   r7   r8   r   rC   r  hstack	itertoolspairwiserG  rH  rz  r   r   r   r   )r:   r;   r[   r\   
batch_sizestepsr   jrV  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r<   test_incremental_variance_ddofr    s   
))


%C		"bAGGI"
		!QWWQZ49
"IIu01E&&u-DAc1fIEAv$)JJAJ$6!(-		q	(9%$)KKN!!wwu{{1~u{{1~RXXV2,.C\ QWM";LA.!wwq!u15#%66!BQ%a#8  1QG 5QO0?' . #r>   c                     [         R                  R                  S5      R                  SS5      n [         R                  " [         R
                  " U 5      SS9n[        U 5      n[         R                  " USS9n[        X5        [         R                  " U [        U R                  S   5      U4   5      n[        XUS S 2[         R                  4   -  5        g )N$   r0   r3   r@   r   )r6   r7   r8   r   r  r   r   r   signr  rC   r3  )datamax_abs_rowsdata_flippedmax_rowssignss        r<   test_vector_sign_flipr    s    99  $**1a0D99RVVD\2L248LyyA.H|.GGDtzz!}-|;<=EtE!RZZ-,@@Ar>   c                     [         R                  R                  S5      n U R                  SS5      n[         R                  " U5      n[         R
                  " USS9R                  S5      n[        [        U5      X#-  5        g )Nr   r5   r0   r3   r@   )r   r3   )	r6   r7   r8   r   exprQ   r  r   r"   )r:   r;   exp_X	sum_exp_Xs       r<   test_softmaxr    s^    
))


"C		!QAFF1IEu1%--g6Igaj%*;<r>   c                  |   [        [        / SQ5      [        R                  " / SQ5      5        [        R                  R                  S5      R                  S5      n [        R                  " [        5         [        U SSS9  S S S 5        [        R                  R                  S5      R                  SSS9n[        [        USS	9[        R                  " USS	95        [        [        US
S	9[        R                  " US
S	95        [        [        USS	9[        R                  " USS	95        g ! , (       d  f       N= f)Nr2  r   i )r,  r+  r  rA  )r0   r0   r0   r1   r@   r3   r4   )r   r#   r6   cumsumr7   r8   r-  r   r   RuntimeWarningr9   )rr   s     r<   test_stable_cumsumr    s    }Y/91EF
		a %%f-A	n	%aaa( 
& 			b!))$Y)?A}QQ/111EF}QQ/111EF}QQ/111EF 
&	%s   6D--
D;A_containerdense)idsB_containerc                     [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " X45      nU " U5      nU" U5      n[        X4SS9n[        Xe5        g )Nr      r.   )r.   r   Tdense_outputr6   r7   r8   rO   rq   r!   r   )r  r  r:   r   Bexpectedactuals          r<   test_safe_sparse_dot_2dr    sk     ))


"C(#A(#Avva|HAAAAQ5FF%r>   c                    [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " X#5      nU " U5      n[        X#5      n[        XT5        UR                  S5      nUR                  S5      n[         R                  " X#5      nU " U5      n[        X#5      n[        XT5        g )Nr   )r4   r5   r   r0   rL   )rL   rX   )r4   r5   )r   r0   r5   rL   r  )r{   r:   r   r  r  r  s         r<   test_safe_sparse_dot_ndr    s    
))


"C 	/*A&!Avva|HaAQ"FF% 	&!A,'Avva|HaAQ"FF%r>   	containerc                 r   [         R                  R                  S5      nUR                  S5      nUR                  S5      n[         R                  " X25      n[        U " U5      U5      n[        XT5        UR                  S5      n[         R                  " X#5      n[        X " U5      5      n[        XT5        g )Nr   r.   r  )r.   r  r  )r  r:   r  r   r  r  s         r<   test_safe_sparse_dot_2d_1dr    s     ))


"C2A 	(#Avva|HYq\1-FF% 	(#Avva|HQ	!-FF%r>   r  TFc                 Z   [         R                  R                  S5      n[        R                  " SSSUS9n[        R                  " SSSUS9nUR	                  U5      n[        X#U S9n[        R                  " U5      U (       + :X  d   eU (       a  UR                  5       n[        XT5        g )Nr   r  r.   r   )r   r_   r   r  )	r6   r7   r8   r   rq   r!   issparsetoarrayr   )r  r:   r   r  r  r  s         r<   !test_safe_sparse_dot_dense_outputr    s    
))


"Cb"c<Ab"c<AuuQxHQ=F??6"<'7888##% 2r>   c                      [         R                  " SS/[         R                  S9n [        U SSS9n[	        USS/5        g	)
zMake sure sklearn.utils.extmath._approximate_mode returns valid
results for cases where "class_counts * n_draws" is enough
to overflow 32-bit signed integer.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/20774
i rA  r   ia  r   )class_countsn_drawsr:   i`  r   N)r6   r   r   r   r   )r;   rets     r<   test_approximate_moder  !  s:     	%bhh/A
Eq
AC
 sUCL)r>   zarray_namespace, device, dtypec                    [        X5      n[        R                  R                  S5      nUR	                  SS9R                  U5      nUR                  XQS9nSnUS:X  a  SOSn[        SS	9   [        XWSS
9u  pn[        XgSS
9u  pn[        U5      S   R                  UR                  :X  d   e[        U5      S   R                  UR                  :X  d   e[        U5      S   R                  UR                  :X  d   e[        [        X5      XS9  [        [        X5      XS9  [        [        X5      XS9  S S S 5        g ! , (       d  f       g = f)Nr   r  r1   devicer0   rl   r  Tarray_api_dispatchr   rQ  )r   r6   r7   r8   r   rm   asarrayr   r   r   r   r   r   )array_namespacer  rU   xpr:   r;   X_xpr   r+  u_nps_npvt_npu_xps_xpvt_xps                  r<   (test_randomized_svd_array_api_compliancer  2  s,    
o	6B
))


"C


!((/A::a:'DLI%41D	4	0*1KE*4ANET"1%.."++===T"1%.."++===U#A&//2;;>>>)$3TE)$3TE)%4eG 
1	0	0s   -CE
Ec                    [        X5      n[        R                  R                  S5      nUR	                  SS9R                  U5      nUR                  XQS9nSnSnUS:X  a  SOSn	[        S	S
9   [        XWUSS9n
[        XgUSS9n[        U5      S   R                  UR                  :X  d   e[        [        X5      XS9  S S S 5        g ! , (       d  f       g = f)Nr   r  r1   r  r0   r.   rl   r  Tr  )r2   r   r_   rQ  )r   r6   r7   r8   r   rm   r  r   r   r   r   r   r   )r  r  rU   r  r:   r;   r  r2   r   r+  Q_npQ_xps               r<   1test_randomized_range_finder_array_api_compliancer  M  s     
o	6B
))


"C


!((/A::a:'DDFI%41D	4	0&qFQRS&tvTUVT"1%.."++===)$3TE 
1	0	0s   /AC


C)jr  numpyr6   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   sklearnr   sklearn.datasetsr   r	   sklearn.utilsr
   sklearn.utils._arpackr   sklearn.utils._array_apir   r   r   r   sklearn.utils._testingr   r   r   r   r   r   r   sklearn.utils.extmathr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   sklearn.utils.fixesr&   r'   r(   r)   r*   r+   markparametrizer=   rJ   rT   r   r   rl   rp   r|   r   r   r   r   r   r   r   r   r   r   r  r  r$  r  r0  r7  r   rU   objectr=  fixturer:   rK  r_  rx  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  )r  s   0r<   <module>r	     s         % " I % 1       "  ^#n4~E6	6*>$ 288RXXrzz2::"NOLF PLF^ 288RXXrzz2::"NO@ P@, 56DM 7DMN 
;
;4 2::rzz":;.9P : <P4&3R&3R @*0Z +^n-LMU NU E2 0662BCO DO	9B n-n-l+q*1 + , . .1,:<  XXirxx0"((Aq62RSHHRXX	

 XXirxx0"((Aq62TUHHRZZ 	

 XXirxx0"((C:V2TUHHV	
"(#"( % % 2::rzz":;	+ <	+ 0/ Q#9 0 1
#9L 2::rzz":;!* <!*H14*8 E/ E/P@@B=
G XX		HI''HH  
 XX		HI''HH  
&& .9& :&( XX		HI''HH  
&
&" $73 83 *" $-/'  
H
H, $-/'  
F
FE I
 IP Is   Y,$Y1Y6