
    Ki.                     b   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Jr  S S
K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/J0r0J1r1J2r2J3r3  S SK4J5r5J6r6J7r7J8r8J9r9J:r:  \Rv                  Ry                  S\5\6-   \7-   \9-   5      S 5       r=S r>S r?\Rv                  Ry                  S\R                  \R                  \R                  \R                  45      S 5       rD\Rv                  Ry                  S\R                  \R                  \R                  \R                  45      S 5       rE\Rv                  Ry                  SS5      S 5       rF\Rv                  Ry                  S/ SQ5      S 5       rG\Rv                  Ry                  S\R                  \R                  45      \Rv                  Ry                  S\75      S 5       5       rHS rIS rJS rKS  rL\Rv                  Ry                  S\8\9-   5      S! 5       rMS" rN\Rv                  Ry                  S#S$S%/5      S& 5       rOS' rPS( rQ\Rv                  Ry                  S)/ S*Q5      \Rv                  Ry                  S+/ S*Q5      \Rv                  Ry                  S/ S,Q5      \Rv                  Ry                  S-\R" S.5      5      S/ 5       5       5       5       rSS0 rT\Rv                  Ry                  S1\R                  " / S2Q\R                  S39\R                  " S4S./\R                  S39/\R                  " \R                  5      4\R                  " / S2Q\R                  S39\R                  " S4S./\R                  S39/\R                  " \R                  5      4\R                  " / S2Q\R                  S39\R                  " S5S6/\WS39/\R                  " \W5      4/5      S7 5       rX\Rv                  Ry                  S\R                  \R                  /5      \Rv                  Ry                  S8S95      S: 5       5       rY\Rv                  Ry                  S;\" 5       \S<9S= 5       rZ\Rv                  Ry                  S>/ S?Q5      \Rv                  Ry                  S@/ SAQ5      \Rv                  Ry                  SB/ SCQ5      SD 5       5       5       r[\Rv                  Ry                  S\R                  \R                  /5      SE 5       r\SF r]SG r^\#SH 5       r_SI r`SJ raSK rbSL rc\Rv                  Ry                  SM\R                  /\7QSN/\7 V s/ s H  o R                  PM     sn -   S<9\Rv                  Ry                  SO\R                  /\7QSN/\7 V s/ s H  o R                  PM     sn -   S<9SP 5       5       re\Rv                  Ry                  S\75      SQ 5       rf\Rv                  Ry                  SR\R                  /\7QSN/\7 V s/ s H  o R                  PM     sn -   S<9SS 5       rg\Rv                  Ry                  STSUSV/5      SW 5       rhSX ri\Rv                  Ry                  S;\" 5       \S<9SY 5       rj\Rv                  Ry                  S;\" 5       \S<9SZ 5       rkgs  sn f s  sn f s  sn f )[    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_max_precision_float_dtypeget_namespace)yield_namespace_device_dtype_combinationsdevice)_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   
   r1      size)      )r3      )nprandomRandomStaterandintr    )r/   rngXs      b/var/www/html/dynamic-report/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   r1   r2   r4   )Nr   r6   axis)	r9   r:   r;   r<   onesshaper.   r(   r   )r=   xweightsrD   modescoremode2score2s           r?   test_uniform_weightsrM   K   sm    
))


"CBW%AggaggGAn%at<4'5) rA   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   r1   r4   r3   r6   rC   )r9   r:   r;   r<   random_samplerF   r(   r   r   ravelsum)mode_resultr=   rG   wrI   rJ   s         r?   test_random_weightsrW   Y   s     K
))


"CKi0A!''"Aa!eHa!eHMH1-KDt)ekkmQq"1"uX\\!_=rA   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 )NrQ     r3   r1              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrb   fdecimal)r9   float32rX   r   astyperF   r   svdr"   kindfloat64r   dotr+   )rX   r^   r_   rankkrn   r>   UsVt
normalizerUasaVacsr_containers                  r?   'test_randomized_svd_low_rank_all_dtypesr   k   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 +rA   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*   )      ?       r\         @rX   r4   r   r7   module)n_components	selection)r7   r   r   )   r7   valueN)r9   r:   r;   diagarrayr   qrnormalrF   Tr   r   pytestraisesNotImplementedError)rX   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rv   )r1   2   rQ         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   rb   r      )r   r   n_iterrb      ri   )r   r   n_oversamplesrb   rk   r   r6   )subset_by_indexNrO   rm   r   LA)whichtolmaxiterv0r1      )r	   r   r   argsortrF   r   r9   
zeros_liker   r'   r   r   )rv   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 rA   zn,rank))r1   r[   rP   )rQ   P   )rZ   r1   )rZ      )rZ   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   rb   r   rC   rO   rm   N)r9   r:   r;   randnr   r   r   r   normrE   rF   r   )nru   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:rA   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   rQ   r   r3   Frc   r7   r6   rC   T)squaredr   )r9   r:   r;   r   ro   rp   rT   r   r#   sqrtint32int64indptrr   rX   )rX   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 0rA   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 )NrQ   rZ   r3   r1   皙?r   r]   Fre   rg   nonerh   ri   r   rk   rb   g{Gz?rj   r8   rm   	r   rF   r   rq   r"   r9   absmaxr   
r^   r_   ru   rv   r>   r   rx   rz   r|   saps
             r?   'test_randomized_svd_low_rank_with_noiser   [  s    IJD
A 		A 77y---- jj%0GA!2
 "zPQ
q
 vvaebj!%%'$... #Za
	
 	AbqE32# 3rA   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 )NrQ   rZ   r3   r1   r   r   r]   Fre   r   r   r   r8   rm   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% 3rA   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 )NrQ   rZ   r   r1   g      ?r   r]   r8   F)r   	transposerb   Trg   re   rm   r7   )r   rF   r"   r   rq   r   r9   rt   )r^   r_   ru   rv   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 rA   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   rQ   rZ   r   r`   rb   r8   r   r7   r4   r   r   fro)ordr   )rh   ri   rg   )r3   r1   r      )r9   r:   r;   r   r<   rF   r"   rt   r   r   r   r   )r=   r>   r   rw   rx   ry   r   error_2error_20rz   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////  +rA   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   r1   r   r3   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.matchr6   r   )r   rk   )r9   r:   r;   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   r1   Fre   u_based_decisionrO   rm   T)
r9   r:   r;   r   r   rq   r'   r   rt   r   )rsr^   r_   r>   rw   r   ry   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!DrA   zn_samples, n_features)r8   r   )r   r8   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 )NFre   Tr   r   rC   r6   )r9   r:   r;   r   r   rq   r'   argmaxr   arangerF   all)r^   r_   global_random_seedr   r>   rw   r   ry   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NrA   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       @r\   r   r7   T)   	flip_signrb   r1   )r9   r   r"   ranger   rt   r   eye)au1r   v1seedu2r   v2s           r?   test_randomized_svd_sign_flipr  3  s    
3*sCj)*A12FJBBb	#AqDtL
B#B#BFF27B/3BFF244,bffQi8BFF244,bffQi8 rA   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   rC   r6   )r9   r   r   r  )uvu_basedv_baseds       r?   max_loading_is_positiveMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiveD  sm    
 66!9==a=(AEEqEM9>>@66!9==a=(AEEqEM9>>@rA   r   r1   r   r8   Tr   r  )r  r   rb   )r9   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;wrA   r   )r   rQ   ,  m)r1   r   r   r  r3   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_driverrb   gesvdgMbP?)atolrtol)r9   r:   r;   randr"   rF   r   )r   r*  rv   r  r=   r>   r  r   vt1r  r   vt2s               r?   !test_randomized_svd_lapack_driverr4  `  s     ))


%CA !qQKBC qQKBC 88rxxB.88rxxB.99		!!!C140rA   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r6   r7   r8   r   r3   rO   r[   )r6   r   rO   )r6   r   r[   )r6   r3   rO   )r6   r3   r[   )r7   r   rO   )r7   r   r[   )r7   r3   rO   )r7   r3   r[   )r8   r   rO   )r8   r   r[   )r8   r3   rO   )r8   r3   r[   r8   )r9   r   r   r   r  newaxis)axestrue_outoutrG   s       r?   test_cartesianr;  z  s     HHY1a&!1288QF3CDDxx	
H" D/Cx% 			!AqBJJ'A49rA   zarrays, output_dtyper6  r   r   rG   yc                 >    [        U 5      nUR                  U:X  d   eg)z8Check that the cartesian product works with mixed types.N)r   rX   )arraysoutput_dtypeoutputs      r?   test_cartesian_mix_typesrA    s     & vF<<<'''rA   as_list)TFc                    [         R                  R                  S5      nSnUR                  SS5      R	                  U 5      U-  nUR                  UR
                  S   5      U-  nU(       a  UR                  5       OUn[        USSSUS9u  pxn	[         R                  " XESS9n
[         R                  " US-  USS9U
S-  -
  n[        Xz5        [        X5        g )	Nr   r1     r   r   sample_weightrH   rD   r7   )
r9   r:   r;   r1  rp   rF   tolistr   averager   )rX   rB  r=   multr>   rF  X1meanvarr   expected_meanexpected_vars               r?   2test_incremental_weighted_mean_and_variance_simplerP    s     ))


#CDr!!%(4/AHHQWWQZ(4/MAB,RAqVLDqJJqa@M::adMB]TUEUUL,*rA   zarray_namespace, device, dtype)idsc           	         [        X5      n[        R                  R                  S5      nSnUR	                  SS5      R                  U5      U-  nUR	                  UR                  S   5      R                  U5      U-  n[        USSSUS9u  pn
UR                  XaS9nUR                  XqS9n[        SS	9   [        USSSUS9u  pn
S S S 5        [        W5      [        U5      :X  d   eUR                  [        X1S9:X  d   e[        W5      [        U5      :X  d   eUR                  [        X1S9:X  d   e[        XS
9n[        XS
9n[        X5        [        X5        g ! , (       d  f       N= f)Nr   r1   rD  r   r   rE  r   Tarray_api_dispatch)xp)r   r9   r:   r;   r1  rp   rF   r   asarrayr   array_devicerX   r   r   r   )array_namespacer   rX   rU  r=   rJ  r>   rF  rL  rM  r   X_xpsample_weight_xpmean_xpvar_xps                  r?   5test_incremental_weighted_mean_and_variance_array_apir]    s[    
o	6B
))


#CDr!!%(4/AHHQWWQZ(//6=M,Q1a}ULDq::a:'Dzz-z?	4	06!Q)9
 
1  L$6666==6rIIII<#5555<<5bHHHH/Gv-FD"C ! 
1	0s   8E  
E.rL  )r       cAg    crM  )r6   :0yE>g     j@zweight_loc, weight_scale))r   r6   )r   r_  )r6   r_  )r1   r6   )r^  r6   c                    [         R                  R                  S5      n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 )	Nr   c           
          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   r6   r1   r   r7   )r   r   r   rE  ư>r/  )rF   r
   r   r   )
r>   rF  rN  rO  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rA   )rQ   r   r   )locscaler5   rG  r7   rC   )	r9   r:   r;   r   r   rI  rE   rL  rM  )rL  rM  
weight_locweight_scaler=   ri  r5   weightr>   rN  rO  ones_weights               r?   +test_incremental_weighted_mean_and_variancerq    s     ))


#C? DZZJaZIF 	

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


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

tT
2A''$q'"K(!!<M':LAM8rA   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     @rt  rt  rt       @rv  rv  rv  r7   r7   r7   r7   r   r8   r      ry  ry  ry    r{  r{  r{  r)  r)  r)  r)  ry  r{  r)  rE  )r9   r   r   rE   rp   nanr   r   )rX   	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_nanr    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)rA   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  ry  r{  r)  r7   r   rC   r6   r   rO   )
r9   r   r   rL  rM  fullrF   r   r   r   )
r   idxrK  X2r~  r  old_sample_countfinal_meansfinal_variancesfinal_counts
             r?   )test_incremental_variance_update_formulasr  5  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0rA   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 )Nrs  ru  rw  r   rx  rz  r|  ry  r{  r)  )r9   r   r   r}  r   r   )r~  r  r  r>   r  r  r  r  r  r  r  s              r?   -test_incremental_mean_and_variance_ignore_nanr  O  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)rA   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   rC   )rM  )r   s    r?   np_var=test_incremental_variance_numerical_stability.<locals>.np_varo  s    uu!u}rA   c                 |    U R                   S   nU S-  R                  SS9U-  nU R                  SS9U-  S-  nX#-
  $ )Nr   r7   rC   )rF   rT   )r>   r   exp_x2expx_2s       r?   one_pass_varCtest_incremental_variance_numerical_stability.<locals>.one_pass_vart  sI    GGAJQ$#a'%%Q%-!#)rA   c                 t    U R                  SS9nU R                  5       n[        R                   " X!-
  S-  SS9$ )Nr   rC   r7   )rL  rd   r9   )r>   rL  Ys      r?   two_pass_varCtest_incremental_variance_numerical_stability.<locals>.two_pass_var}  s3    vv1v~FFHwwQQ//rA   c                 d    US-   nU[        U5      -  nX-  X-  -   nX%-  X-
  X-
  -  U-  -   nXgU4$ )Nr6   )float)rG   re  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CrA   r   r7   i'  g    חAr   h㈵>r   rC   rb  r6   )r9   r   rs   logr  vstackr   r   zerosr  rF   rL  r   r   r"  r   r   )r  r  r  r  r   r_   r^   x1x2A0A1r   rL  rM  r   r   s                   r?   -test_incremental_variance_numerical_stabilityr  k  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(,,....rA   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   r1   )   r   %   r   r   rC   r6   r   rO   )r9   r:   r;   r   rF   r  hstack	itertoolspairwiserL  rM  r  r   r   r   r   )r=   r>   r^   r_   
batch_sizestepsr   jrh  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?' . #rA   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$   r3   r6   rC   r   )r9   r:   r;   r   r  r   r   r   signr  rF   r7  )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-,@@ArA   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   r8   r3   r6   rC   )r   r6   )	r9   r:   r;   r   exprT   r"  r   r%   )r=   r>   exp_X	sum_exp_Xs       r?   test_softmaxr    s^    
))


"C		!QAFF1IEu1%--g6Igaj%*;<rA   c                      [         R                  " [        SS9   [        / SQ5        S S S 5        g ! , (       d  f       g = f)Nzstable_cumsum.+is deprecatedr   r6  )r   r   FutureWarningr&    rA   r?   test_stable_cumsum_deprecationr    s&    	m+I	Ji  
K	J	Js   1
?A_containerdense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      r1   )r1   r   Tdense_outputr9   r:   r;   rR   rt   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%rA   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   )r7   r8   r   r3   rO   )rO   r[   )r7   r8   )r   r3   r8   rO   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%rA   	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   r1   r  )r1   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%rA   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  r1   r   )r    rb   r   r  )	r9   r:   r;   r   rt   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##% 2rA   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 rD  r   ia  r   )class_countsn_drawsr=   i`  r   N)r9   r   r   r   r   )r>   rets     r?   test_approximate_moder  @  s:     	%bhh/A
Eq
AC
 sUCL)rA   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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  r4   r   r3   ro   r  TrS  r   rc  )r   r9   r:   r;   r   rp   rV  r   r"   r   r   r   r   )rX  r   rX   rU  r=   r>   rY  r   r/  u_nps_npvt_npu_xps_xpvt_xps                  r?   (test_randomized_svd_array_api_compliancer  Q  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  r4   r   r3   r1   ro   r  TrS  )r5   r   rb   rc  )r   r9   r:   r;   r   rp   rV  r   r!   r   r   r   r   )rX  r   rX   rU  r=   r>   rY  r5   r   r/  Q_npQ_xps               r?   1test_randomized_range_finder_array_api_compliancer  l  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)lr  numpyr9   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   sklearnr   sklearn.datasetsr   r	   sklearn.utilsr
   sklearn.utils._arpackr   sklearn.utils._array_apir   r   r   r   r   r   rW  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@   rM   rW   r   r   ro   rs   r   r   r   r   r   r   r   r   r   r   r  r  r  r(  r  r4  r;  r   rX   objectrA  rP  r]  rq  r  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":;M2+ 3 <+ $-/'  
!
!@ 0/ Q#9 0 1
#9L 2::rzz":;!* <!*H14*8 E/ E/P@@B=!
 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   Z"Z'Z,