
    Wh              
       ,   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZmZmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ejp                  js                  de2e3z   e4z   e6z         d        Z:d Z;d Z<ejp                  js                  dejz                  ej|                  ej~                  ej                  f      d        ZAejp                  js                  dejz                  ej|                  ej~                  ej                  f      d        ZBejp                  js                  dd      d        ZCejp                  js                  dg d      d        ZDejp                  js                  dej~                  ej                  f      ejp                  js                  de4      d               ZEd ZFd ZGd ZHd ZIejp                  js                  de5e6z         d         ZJd! ZKejp                  js                  d"d#d$g      d%        ZLd& ZMd' ZNejp                  js                  d(g d)      ejp                  js                  d*g d)      ejp                  js                  dg d+      ejp                  js                  d, eOd-            d.                             ZPd/ ZQejp                  js                  d0 ej                  g d1ejz                  2       ej                  d3d-gej|                  2      g ej                  ej|                        f ej                  g d1ejz                  2       ej                  d3d-gej                  2      g ej                  ej                        f ej                  g d1ejz                  2       ej                  d4d5geT2      g ej                  eT      fg      d6        ZU ej                         d7        ZWejp                  js                  dej~                  ej                  g      d8        ZXejp                  js                  d9g d:      ejp                  js                  d;g d<      ejp                  js                  d=g d>      d?                      ZYejp                  js                  dej~                  ej                  g      d@        ZZdA Z[dB Z\e dC        Z]dD Z^dE Z_dF Z`dG Zaejp                  js                  dHej                  ge4dIge4D  cg c]  } | j                   c} z   J      ejp                  js                  dKej                  ge4dIge4D  cg c]  } | j                   c} z   J      dL               Zcejp                  js                  de4      dM        Zdejp                  js                  dNej                  ge4dIge4D  cg c]  } | j                   c} z   J      dO        Zeejp                  js                  dPdQdRg      dS        ZfdT Zgejp                  js                  dU e       eJ      dV        Zhejp                  js                  dU e       eJ      dW        Ziyc c} w c c} w c c} w )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                     t         j                  j                  d      }|j                  dd      }d|d<   d|d<   t	         | |            t	        |      k(  sJ y )Nr   
   r.      size)      )r0      )nprandomRandomStaterandintr   )r,   rngXs      Z/var/www/html/jupyter_env/lib/python3.12/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr=   :   sY    
 ))


"CBW%AAdGAdG#A&'71:555    c                  $   t         j                  j                  d      } | j                  dd      }t        j                  |j
                        }dD ]:  }t        ||      \  }}t        |||      \  }}t        ||       t        ||       < y )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   s~    
))


"CBW%AggaggG *Atne%at<v4'5&)*r>   c                  |   d} t         j                  j                  d      }|j                  | d      }|j	                  |j
                        }| |d d d df<   |d d d dfxx   dz  cc<   t        ||d      \  }}t        ||        t        |j                         |d d d df   j                  d             y )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Aa!eHa!eHMH11-KD%t[)ekkmQq"1"uX\\!_=r>   dtypec           
         d}d}d}d}| t         j                  k(  rdnd}t        j                  |       } t        |||dd      j	                  | d	
      }|j
                  ||fk(  sJ t        j                  |d	      \  }}}	|j	                  | d	
      }|j	                  | d	
      }|	j	                  | d	
      }	dD ]  }
t        |||
d      \  }}}| j                  dk(  r3|j                  | k(  sJ |j                  | k(  sJ |j                  | k(  s_J |j                  t         j                  k(  sJ |j                  t         j                  k(  sJ |j                  t         j                  k(  sJ |j
                  ||fk(  sJ |j
                  |fk(  sJ |j
                  ||fk(  sJ t        |d | ||       t        t        j                  |d d d |f   |	d |d d f         t        j                  ||      |       t        D ]  } ||      }t        |||
d      \  }}}| j                  dk(  r3|j                  | k(  sJ |j                  | k(  sJ |j                  | k(  sSJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ t        |d | |d | |         y )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1HAq" 	
U#A	U#A	5u	%B* 0F
#qZa

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

 , 	FMa A (1!JBB zzS xx5(((xx5(((xx5(((xx}}+++xx}}+++xx}}+++%4"Ud)WE!	FA0Fr>   c                 0   t         j                  j                  d      }t        j                  t        j                  g d|             }t         j
                  j                  |j                  |j                              d   }||z  |j                  z  }t        |dd      \  }}|j                  d	k(  sJ t        |d
dg       |j                  dk(  sJ t        j                  t              5  t        |dd       ddd       y# 1 sw Y   yxY w)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1xzz!A )hOGW==D   gT{3==F""" 
*	+ @!!w?@ @ @s   4DDrs   )r.   2   rN         c           	      (   d}t        |d      }t        || ddd      \  }}t        || ddddd	      \  }}t        ||| z
  |d
z
  f      \  }}|j                         ddd   }	||	   }|dd|	f   }|j                  | fk(  sJ t        ||d       t        ||d       |j                  || fk(  sJ t        j                  |      j                  }
t        ||
      \  }}t        ||
      \  }}t        ||
      \  }}t        ||d       t        ||d       | |k  rqt        |d      }t        || ddd|      \  }}|j                         ddd   }	||	   }t        ||d       |dd|	f   }t        ||
      \  }}t        ||d       yy)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GW /	#'J
 &*	JNJN;&"NN $$&tt,G#G,N#AwJ/N A4'''g~qAj.!D J?222w'))J':.JGQZ4MJ <NAg~qAj.!D 	:~Za8).q!Tb*
& !((*4R40'0!.."M'7
3$^Z@!..!L r>   zn,rank))r.   rX   rM   )rN   P   )rW   r.   )rW      )rW   i  c                 <   || k  sJ t         j                  j                  d      }|j                  | |      }||j                  z  }t        |||      \  }}t        t         j                  j                  |d      t        j                  |j                               t        |j                  |z  t        j                  t        j                  |j                                     |t        j                  |      z  |j                  z  }t        ||d       y)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		!TA	ACCA QTDDAqbiinnQQn79IJaccAgrwwrwwqww/?'@A
NQSS(M mQ:r>   r{   c                 Z   t         j                  j                  d      j                  dd      }| t         j                  u rd}nd}|j                  | d      }|dz  j                  d	      }t        |t        |d
      |       t        t        j                  |      t        |      |       t         j                  t         j                  fD ]  } |||       }|t         j                  u rD|j                  j                  |d      |_        |j                  j                  |d      |_        |j                  j                  |k(  sJ |j                  j                  |k(  sJ t        |t        |d
      |       t        t        j                  |      t        |      |        y )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   ;  sW    			b!''S1A

			U#A!tjjaj GgyD'A9Mbggg.	!iHHHbhh/ 
PQe, bhh&++,,_5,IDK<<..U.KDL||!!_444{{  O333!'9T4+H)T!"'''"2IdOYO
Pr>   c                  j   d} d}d}d}t        | ||dd      }|j                  | |fk(  sJ t        j                  |d	      \  }}}d
D ]h  }t	        ||d|d      \  }}}t        j                  |d | |z
        j                         dkD  sJ t	        |||d      \  }}	}t        |d | |	d       j y )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%0GAq!2 3
 "qzPQ
2q
 vvaebj!%%'$... #qZa
	3
 	AbqE32#3r>   c                  l   d} d}d}d}t        | ||dd      }|j                  | |fk(  sJ t        j                  |d	      \  }}}d
D ]i  }t	        ||d|d      \  }}}t        j                  |d | |z
        j                         dkD  sJ t	        ||d|d      \  }}	}t        |d | |	d       k y )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%0GAq!2 3
 "qzPQ
2q
 vvaebj!%%'#--- #qzPQ
	3 	AbqE32%3r>   c            
         d} d}d}d}t        | ||dd      }|j                  | |fk(  sJ t        ||dd	d
      \  }}}t        ||ddd
      \  }}	}
t        ||ddd
      \  }}}t        j                  |d	      \  }}}t        ||d | d       t        |	|d | d       t        ||d | d       t        t        j                  ||      t        j                  |d d d |f   |d |d d f         d       t        t        j                  ||
      t        j                  |d d d |f   |d |d d f         d       t        |	|       y )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     sZ   IJD
A	A 77y*----1Q%aPJBB1Q$QOJBB1Q&qQJBBAU3JBBBrFA.BrFA.BrFA.r2r!RaR%y"RaRU)(DaPr2r!RaR%y"RaRU)(DaP Br>   c            	      D   t         j                  j                  d      } t        ddd|       }|d| j	                  dd|j
                  	      z  z  }d}t        ||dd
d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }t        ||dd
d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }t        j                  ||z
        dkD  sJ dD ]  }	t        ||d|	d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }dD ]  }
t        |||
|	d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }dt        j                  ||z
        kD  rJ   y )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HAq" 	
AEE"''!*..$%%Akk!'G	<vTUHAq" 	
AEE"''!*..$%%A{{1%(H66'H$%+++* 0
!'1
1b bggajnnR())++aU+ 
	0A%+5HAq" AEE"''!*..,--AKKu-Ew////
	00r>   c                 <   t         j                  j                  d      }t        ddd|      }d} | |      }dj	                  | j
                        }t        j                  t        j                  |      5  t        ||d	d
       d d d        y # 1 sw Y   y xY w)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 Uq,qVTU U Us   9BBc                     t         j                  j                  d      } d}d}| j                  ||      }t	        j
                  |d      \  }}}t        ||d      \  }}t        t        j                  ||z  |      |d       |j                  }	t	        j
                  |	d      \  }}}t        ||d	      \  }
}t        t        j                  |
|z  |      |	d       t        ||d	      \  }}t        t        j                  ||z  |      |	d       t        ||d      \  }}t        t        j                  ||z  |      |	d       y )
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
J'A zz!51HAq"ae4FBrAvr*Aq9 
Bzz"E2HAq"ad3FBrAvr*B:  2=GWw{G4b!D2>GWw{G4b!Dr>   zn_samples, n_features)r5   r   )r   r5   c                 p   t         j                  j                  |      }|j                  | |      }t	        j
                  |d      \  }}}t        ||d      \  }}t        j                  t        j                  |      d      }	||	t        j                  |j                  d         f   dk\  j                         sJ t        ||d      \  }}
t        j                  t        j                  |
      d      }|
t        j                  |
j                  d         |f   dk\  j                         sJ y )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
J'Azz!51HAq"QT2EB!#266":A!>)299RXXa[+AABaGLLNNNQU3EAr!#266":A!>ryy!%'AABaGLLNNNr>   c                     t        j                  ddgddgg      } t        | ddd      \  }}}t        d      D ]  }t        | dd|      \  }}}t	        ||       t	        ||       t	        t        j
                  ||z  |      |        t	        t        j
                  |j                  |      t        j                  d             t	        t        j
                  |j                  |      t        j                  d              y )	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FJBBb	 9#AqDtL
BB#B#BFF27B/3BFF244,bffQi8BFF244,bffQi89r>   c                      d } t        j                  d      j                  dd      }t        |ddd      \  }}} | ||      \  }}|sJ |rJ t        |dddd	      \  }}} | ||      \  }}|sJ |rJ y )
Nc                 "   t        j                  |       j                  d      | j                  d      k(  j                         }t        j                  |      j                  d      |j                  d      k(  j                         }||fS )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_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive@  so    
 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Iq).y)DGWN7; =KQ$$Q=9a!9 / ":GW N7;wr>   r   )r   rN   ,  m)r.   r   r   r  r0   c                    t         j                  j                  |      }|j                  | |      }t	        ||dd      \  }}}t	        ||dd      \  }	}
}|j
                  |	j
                  k(  sJ t        ||	dd       |j
                  |
j
                  k(  sJ t        ||
dd       |j
                  |j
                  k(  sJ t        ||dd       y )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_driverr/  \  s     ))


%CAA !AqQKBC AqQKBC 88rxxB.88rxxB.99		!!!C140r>   c                     t        j                  g d      t        j                  ddg      t        j                  ddg      f} t        j                  g dg dg dg d	g d
g dg dg dg dg dg dg dg      }t        |       }t        ||       t        j                  d      }t        |d d t         j
                  f   t        |f             y )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_cartesianr6  v  s     HHY1a&!1288QF3CDDxx	
H" D/Cx% 			!AqBJJ'A49r>   zarrays, output_dtyper1  r   r   rD   yc                 <    t        |       }|j                  |k(  sJ y)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                  @    t         j                  j                  d      S )Nr~   )r6   r7   r8    r>   r<   r:   r:     s    99  $$r>   c                 \   d}| j                  dd      j                  |      |z  }| j                  |j                  d         |z  }t        |ddd|      \  }}}t	        j
                  ||d      }t	        j
                  |dz  |d      |dz  z
  }	t        ||       t        ||	       y )Nr.     r   r   sample_weightrE   rA   r4   )r,  rm   rC   r   r6   averager   )
r:   rU   multr;   rB  meanvarr   expected_meanexpected_vars
             r<   2test_incremental_weighted_mean_and_variance_simplerJ    s    Dr!!%(4/AHHQWWQZ(4/M,Q1a}ULD#qJJq-a@M::adMB]TUEUULm,\*r>   rF  )r       cAg    crG  )r3   :0yE>g     j@zweight_loc, weight_scale))r   r3   )r   rL  )r3   rL  )r.   r3   )rK  r3   c                    d }d}|j                  |||d         }|j                  | ||      }t        t        j                  ||d      }	t        t        j                  ||	z
  dz  |d      }
 ||||	|
       |j                  | ||      }t        j                  |d         }t        t        j
                  |d      }	t        t        j                  |d      }
 ||||	|
       y )Nc           
          | j                   d   }d|dz  dz   |dz  dz   |dz  dz   |fD ]M  }d\  }}}t        ||      D ]  }	t        | |	   |||||	         \  }}} t        ||       t        ||d	       O y )
Nr   r3   r.   r   r4   )r   r   r   rA  ư>r*  )rC   r
   r   r   )
r;   rB  rH  rI  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r<   _assertz<test_incremental_weighted_mean_and_variance.<locals>._assert  s    GGAJa2gk16A:qAvz1E 	?J3:0I$Q
3 7PeH#"/"684	8_ I}5Hl>	?r>   )rN   r   r   )locscaler2   rC  r4   r@   )r   r   r6   rD  rB   rF  rG  )rF  rG  
weight_locweight_scaler:   rV  r2   weightr;   rH  rI  ones_weights               r<   +test_incremental_weighted_mean_and_variancer]    s    ? DZZJlaZIF 	

t3T
2A(QQOM'


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

t3T
2A''$q'"K(!!<M':LA{M<8r>   c           	         t        j                  g d      }t        j                  g d      }t        j                  g dt         j                        }t        j                  d      }t        j                  d      }t        j                  g dg dg d	g      j	                  |       }t        j                  d
t         j
                  d
d
gt         j
                  d
ddgddt         j
                  dgdddt         j
                  gg      j	                  |       }t        |||||      \  }}	}
t        |||||      \  }}}t        ||       t        ||	       t        ||
       y )N     @r`  r`  r`       @rb  rb  rb  r4   r4   r4   r4   r   r5   r      re  re  re    rg  rg  rg  r$  r$  r$  r$  re  rg  r$  rA  )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_nanrv    s;   56IHH=>MXXl"((;Nwwqz771:
	35IJ	fUm  HH"&&#s#VVS#s##rvvs##sBFF#		
 fUm 
 %>	9m^CS%!G[' 1J*1-K+ K)O[1K)r>   c                     t        j                  g dg dg dg dg      j                  } d}| d |d d f   }| |d d d f   }|j                  d      }|j	                  d      }t        j
                  |j                  d   |j                  d   t         j                        }t        ||||      \  }}}	t        || j                  d      d       t        || j	                  d      d       t        |	| j                  d          y )N)iX  i  re  rg  r$  r4   r   r@   r3   r   rL   )
r6   r   r   rF  rG  fullrC   r   r   r   )
r   idxX1X2rj  rk  old_sample_countfinal_meansfinal_variancesfinal_counts
             r<   )test_incremental_variance_update_formulasr    s     	%%%%		
	 a  C	
4C47B	
347BQIFFFNMwwrxx{BHHQKrxxH0I
I}&61-K+ QVVV^Q7A:QWWQZ0r>   c            	      <   t        j                  g d      } t        j                  g d      }t        j                  g dt         j                        }t        j                  g dg dg dg      }t        j                  dt         j                  ddgt         j                  dd	d	gd	d	t         j                  d
gd
d
d
t         j                  gg      }t	        || ||      \  }}}t	        || ||      \  }}	}
t        ||       t        |	|       t        |
|       y )Nr_  ra  rc  r   rd  rf  rh  re  rg  r$  )r6   r   r   ri  r   r   )rj  rk  r|  r;   ro  rp  rq  rr  rs  rt  ru  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 %>	9m%5%!G[' 1Jy-)91-K+ K)O[1K)r>   c                     d } d }d }d }d}d}d}t        j                  dt         j                  	      }t        j                  d
t         j                  	      }t        j                  |dz  |f|t         j                  	      }	t        j                  |dz  |f|t         j                  	      }
t        j
                  |	|
f      }t        j                   | |       ||      z
        j                         |kD  sJ |	dd d f   t        j                  |      |dz  }}}t        |
j                  d         D ]  } ||
|d d f   |||      \  }}} ||j                  d   k(  sJ t        j                  |j                  d      |z
        j                         dkD  sJ t        j                   | |      |z
        j                         |kD  sJ |	dd d f   t        j                  |      }}t        j                  ||dz  t         j                  	      }t        |
j                  d         D ]9  }t        |
|d d f   j                  d|
j                  d   f      |||      \  }}}; t        ||j                  d          t!        |j                  d      |       |t        j                   | |      |z
        j                         kD  sJ y )Nc                 &    | j                  d      S )Nr   r@   )rG  )r   s    r<   np_varz=test_incremental_variance_numerical_stability.<locals>.np_varH  s    uu!u}r>   c                     | j                   d   }| dz  j                  d      |z  }| j                  d      |z  dz  }||z
  S )Nr   r4   r@   )rC   rQ   )r;   r   exp_x2expx_2s       r<   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_varM  sK    GGAJQ$#a'%%Q%-!#)r>   c                     | j                  d      }| j                         }t        j                   ||z
  dz  d      S )Nr   r@   r4   )rF  ra   r6   )r;   rF  Ys      r<   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_varV  s5    vv1v~FFHwwDQQ//r>   c                 p    |dz   }|t        |      z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr3   )float)rD   rR  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r<   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_update^  sm    014)E2F,GG//)m2KKM)9}\!125IIJ 	 -/CCCr>   r   r4   i'  g    חAr   h㈵>r   r@   rO  r3   )r6   r   rp   logrx  vstackr   r   zerosr  rC   rF  r   r   r  r   r   )r  r  r  r  r   r\   r[   x1x2A0A1r   rF  rG  r   r   s                   r<   -test_incremental_variance_numerical_stabilityr  D  su   
0D CJI	#RZZ	(B	BJJ	'B	)q.*-r	DB	)q.*-r	DB
		2r(A 66&)l1o-.224s:::
 ad8RXXj19>q#D288A; J1"QT(D#qIc1J
??66!&&a&.4'(,,.55566&)c/"&&(3... 1a4"((:.#D

IN"((;A288A; 
0q!tHa!-.c1
c1
 q!''!*%aff!fnd3q	C(,,....r>   c                  |   t         j                  j                  d      } | j                  dd      }|j                  \  }}dD ]v  }t        j
                  d|j                  d   |      }|d   |j                  d   k7  rt        j                  ||g      }t        j                  |      D ]
  \  }}|||d d f   }|dk(  rt|j                  d      }	|j                  d      }
|j                  d   }t        j                  |j                  d   |j                  d   t         j                  	      }n&t        |	
      }|\  }	}
}||j                  d   z  }t        j                  |d | d      }t        j                  |d | d      }t        |	|d
       t        |
|d
       t        ||        y y )Nr   r   r.   )   r   %   r   r   r@   r3   r   rL   )r6   r7   r8   r   rC   r  hstack	itertoolspairwiserF  rG  rx  r   r   r   r   )r:   r;   r[   r\   
batch_sizestepsr   jrU  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r<   test_incremental_variance_ddofr    s   
))


%C		"bAGGIz" @
		!QWWQZ49
"IIui01E&&u- 	@DAqac1fIEAv$)JJAJ$6!(-		q	(9%$)KKN!!wwu{{1~u{{1~RXXV2,.C\ QWM"$9;LA.!wwq!u15#%66!BQ%a#8  13CQG 57KQO0,?'	@@r>   c                     t         j                  j                  d      j                  dd      } t        j                  t        j
                  |       d      }t        |       }t        j                  |d      }t        ||       t        j                  | t        | j                  d         |f         }t        | ||d d t         j                  f   z         y )N$   r0   r3   r@   r   )r6   r7   r8   r   r  r   r   r   signr  rC   r2  )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|X.GGDtzz!}-|;<=Et\E!RZZ-,@@Ar>   c                     t         j                  j                  d      } | j                  dd      }t        j                  |      }t        j
                  |d      j                  d      }t        t        |      ||z         y )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                     t        t        g d      t        j                  g d             t        j                  j                  d      j                  d      } t        j                  t              5  t        | dd       d d d        t        j                  j                  d      j                  dd      }t        t        |d	      t        j                  |d	             t        t        |d
	      t        j                  |d
	             t        t        |d	      t        j                  |d	             y # 1 sw Y   xY w)Nr1  r   i )r+  r*  r  r@  )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   4E  E	A_containerdense)idsB_containerc                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      } ||      }t        ||d      }t        ||       y )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    sq     ))


"C(#A(#Avva|HAAAAQ5FFH%r>   c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       |j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       y )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FH% 	&!A,'Avva|HaAQ"FFH%r>   	containerc                 x   t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      }t         | |      |      }t        ||       |j                  d      }t        j                  ||      }t        | | |            }t        ||       y )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FH% 	(#Avva|HQ	!-FFH%r>   r  TFc                 V   t         j                  j                  d      }t        j                  ddd|      }t        j                  ddd|      }|j	                  |      }t        |||       }t        j                  |      |  k(  sJ | r|j                         }t        ||       y )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                      t        j                  ddgt         j                        } t        | dd      }t	        |ddg       y	)
a  Make 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 r@  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                    t        | |      }t        j                  j                  d      }|j	                  d      j                  |      }|j                  ||      }d}|dk(  rdnd}t        d	      5  t        ||d
      \  }	}
}t        ||d
      \  }}}t        |      d   j                  |j                  k(  sJ t        |      d   j                  |j                  k(  sJ t        |      d   j                  |j                  k(  sJ t        t        ||      |	|       t        t        ||      |
|       t        t        ||      ||       d d d        y # 1 sw Y   y xY w)Nr   r  r1   devicer0   rl   r  Tarray_api_dispatchr   rP  )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  sQ    
ov	6B
))


"C


!((/A::a:'DLI%41D	4	0 
H*1lKdE*4ANdET"1%.."++===T"1%.."++===U#A&//2;;>>>)$3TE)$3TE)%4e$G
H 
H 
Hs   7C"E""E+c                    t        | |      }t        j                  j                  d      }|j	                  d      j                  |      }|j                  ||      }d}d}|dk(  rdnd}	t        d	
      5  t        |||d      }
t        |||d      }t        |      d   j                  |j                  k(  sJ t        t        ||      |
|	       d d d        y # 1 sw Y   y xY w)Nr   r  r1   r  r0   r.   rl   r  Tr  )r2   r   r_   rP  )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     
ov	6B
))


"C


!((/A::a:'DDFI%41D	4	0 F&qtFQRS&t$vTUVT"1%.."++===)$3TEF F Fs   9A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  r/  r6  r   rU   objectr<  fixturer:   rJ  r]  rv  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,:<  RXXirxx0("((Aq62RSBHHRXX	

 RXXirxx0("((Aq62TUBHHRZZ 	

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