o
    i                  
   @   s"  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j89de2e3 e4 e6 dd Z:dd Z;dd Z<ej89dej=ej>ej?ej@fdd ZAej89dej=ej>ej?ej@fdd ZBej89dddd ZCej89dg ddd  ZDej89dej?ej@fej89d!e4d"d# ZEd$d% ZFd&d' ZGd(d) ZHd*d+ ZIej89de5e6 d,d- ZJd.d/ ZKej89d0d1d2gd3d4 ZLd5d6 ZMd7d8 ZNej89d9g d:ej89d;g d:ej89dg d<ej89d=eOd>d?d@ ZPdAdB ZQej89dCejRg dDej=dEejRdFd>gej>dEgeSej>fejRg dDej=dEejRdFd>gej@dEgeSej@fejRg dDej=dEejRdGdHgeTdEgeSeTfgdIdJ ZUeV dKdL ZWej89dej?ej@gdMdN ZXej89dOg dPej89dQg dRej89dSg dTdUdV ZYej89dej?ej@gdWdX ZZdYdZ Z[d[d\ Z\e d]d^ Z]d_d` Z^dadb Z_dcdd Z`dedf Zaej8j9dgejRge4dhgdidj e4D  dkej8j9dlejRge4dhgdmdj e4D  dkdndo Zbej89d!e4dpdq Zcej8j9drejRge4dhgdsdj e4D  dkdtdu Zdej89dvdwdxgdydz Zed{d| Zfej8j9d}e edkd~d Zgej8j9d}e edkdd ZhdS )    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                 C   sF   t jd}|jddd}d|d< d|d< t| |t|ks!J d S )Nr   
   r,      size)      )r.      )nprandomRandomStaterandintr   )r+   rngX r:   o/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/utils/tests/test_extmath.pytest_density:   s
   r<   c                  C   sh   t jd} | jddd}t |j}dD ]}t||\}}t|||d\}}t|| t|| qd S )Nr   r,   r-   r/   )Nr   r1   axis)	r4   r5   r6   r7   onesshaper*   r$   r   )r8   xweightsr>   modescoreZmode2Zscore2r:   r:   r;   test_uniform_weightsG   s   
rE   c                  C   s   d} t jd}|j| dd}||j}| |d d d df< |d d d df  d7  < t||dd\}}t||  t|	 |d d d df 
d d S )N   r   d   r,   r/   r.   r1   r=   )r4   r5   r6   r7   random_sampler@   r$   r   r   Zravelsum)Zmode_resultr8   rA   wrC   rD   r:   r:   r;   test_random_weightsU   s   
(rL   dtypec              	   C   s`  d}d}d}d}| t jkrdnd}t | } t|||dddj| d	d
}|j||fks-J tj|d	d\}}}	|j| d	d
}|j| d	d
}|	j| d	d
}	dD ]}
t|||
dd\}}}| j	dkrv|j| ksgJ |j| ksnJ |j| ksuJ n|jt j
ks~J |jt j
ksJ |jt j
ksJ |j||fksJ |j|fksJ |j||fksJ t|d | ||d tt |d d d |f |	d |d d f t |||d tD ]X}||}t|||
dd\}}}| j	dkr|j| ksJ |j| ksJ |j| ksJ n|jj	dksJ |jj	dksJ |jj	dksJ t|d | |d | |d qqNd S )NrH     r.   r,              r   	n_samples
n_featureseffective_rankZtail_strengthrandom_stateFcopyZfull_matrices)autoLUQRpower_iteration_normalizerrU   fdecimal)r4   float32rM   r   astyper@   r   svdr   kindfloat64r   dotr'   )rM   rR   rS   rankkr`   r9   UsVt
normalizerZUasaZVacsr_containerr:   r:   r;   'test_randomized_svd_low_rank_all_dtypesg   sj   

6 ro   c                 C   s   t jd}t t jg d| d}t j|j|jdd }|| |j	 }t
|ddd\}}|jd	ks6J t|d
dg |jdksDJ tt t
|ddd W d   dS 1 s\w   Y  dS )z@Test that `_randomized_eigsh` returns the appropriate components*   )      ?       rP         @rM   r/   r   r2   module)n_components	selection)r2   rs   rr   )   r2   valueN)r4   r5   r6   diagarrayr   Zqrnormalr@   Tr   r   pytestZraisesNotImplementedError)rM   r8   r9   Zrand_roteigvalseigvecsr:   r:   r;   test_randomized_eigsh   s   "r   rh   )r,   2   rH         c              	   C   s  d}t |dd}t|| dddd\}}t|| dddddd	\}}t|||  |d
 fd\}}| ddd }	||	 }|dd|	f }|j| fksKJ t||dd t||dd |j|| fksbJ t|j}
t	||
\}}t	||
\}}t	||
\}}t||dd t||dd | |k rt
|dd}t|| ddd|d\}}| ddd }	||	 }t||dd |dd|	f }t	||
\}}t||dd dS dS )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   rU   ru      )rv   rw   n_iterrU      r[   )rv   r   Zn_oversamplesrU   r]   rw   r1   )Zsubset_by_indexNrF   r_   rx   ZLA)whichtolmaxiterv0r,      )r   r   r   Zargsortr@   r   r4   Z
zeros_liker}   r#   r
   r   )rh   rS   r9   r   r   Z
eigvals_qrZ
eigvecs_qrZeigvals_lapackZeigvecs_lapackindicesZ
dummy_vecs_r   Zeigvals_arpackZeigvecs_arpackr:   r:   r;   (test_randomized_eigsh_compared_to_others   sT   




r   zn,rank))r,   rO   rG   )rH   P   )rN   r,   )rN      )rN   i  c                 C   s   || k sJ t jd}|| |}||j }t|||d\}}tt jj|ddt 	|j
 t|j| t t 	|j
 |t | |j }t||dd dS )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   )rv   rU   r   r=   rF   r_   N)r4   r5   r6   randnr}   r   r   r   normr?   r@   rz   )nrg   r8   r9   ASVZA_reconstructr:   r:   r;   &test_randomized_eigsh_reconst_low_rank  s   
r   rn   c                 C   s
  t jddd}| t ju rd}nd}|j| dd}|d jdd	}t|t|d
d| tt 	|t|| t j
t jfD ]D}||| d}|t ju r]|jj|dd|_|jj|dd|_|jj|kseJ |jj|ksmJ t|t|d
d| tt 	|t|| q>d S )Nrp   rH   rx   r.   FrV   r2   r1   r=   T)Zsquaredrt   )r4   r5   r6   r   ra   rb   rJ   r   r   sqrtint32int64Zindptrr   rM   )rM   rn   r9   	precisionZsq_normZcsr_index_dtypeZXcsrr:   r:   r;   test_row_norms;  s$   

r   c            
      C   s   d} d}d}d}t | ||ddd}|j| |fksJ tj|dd	\}}}d
D ]5}t||d|dd\}}}t|d | |  dksEJ t|||dd\}}	}t|d | |	dd q&d S )NrH   rN   r.   r,   皙?r   rQ   FrX   rY   nonerZ   r[   r   r]   rU   g{Gz?r\   r3   r_   	r   r@   r   rc   r   r4   absmaxr   
rR   rS   rg   rh   r9   r   rj   rl   rm   Zsapr:   r:   r;   'test_randomized_svd_low_rank_with_noiseW  s.   
"r   c            
      C   s   d} d}d}d}t | ||ddd}|j| |fksJ tj|dd	\}}}d
D ]6}t||d|dd\}}}t|d | |  dksEJ t||d|dd\}}	}t|d | |	dd q&d S )NrH   rN   r.   r,   rq   r   rQ   FrX   r   r   r   r3   r_   r   r   r:   r:   r;   !test_randomized_svd_infinite_rank  s.   
"
r   c               	   C   s\  d} d}d}d}t | ||ddd}|j| |fksJ t||dd	dd
\}}}t||dddd
\}}	}
t||dddd
\}}}tj|d	d\}}}t||d | dd t|	|d | dd t||d | dd tt||t|d d d |f |d |d d f dd tt||
t|d d d |f |d |d d f dd t|	| d S )NrH   rN   rx   r,   g      ?r   rQ   r3   F)r   	transposerU   TrY   rX   r_   r2   )r   r@   r   r   rc   r   r4   rf   )rR   rS   rg   rh   r9   U1s1V1U2s2V2ZU3Zs3ZV3ZU4Zs4ZV4r:   r:   r;   )test_randomized_svd_transpose_consistency  s,   >>r   c               	   C   s~  t jd} tddd| d}|d| jdd|jd	 7 }d}t||dd
dd\}}}||t || }t	j
|dd}t||dd
dd\}}}||t || }t	j
|dd}t || dkshJ dD ]R}	t||d|	dd\}}}||t || }t	j
|dd}dD ]-}
t|||
|	dd\}}}||t || }t	j
|dd}dt || ksJ qqjd S )Nrp   rH   rN   r   rT   rU   r3   r   r2   r/   r   r   Zfro)ordr   )rZ   r[   rY   )r.   r,   r      )r4   r5   r6   r   r7   r@   r   rf   rz   r   r   r   )r8   r9   rv   ri   rj   rk   r   Zerror_2Zerror_20rl   ierrorr:   r:   r;   .test_randomized_svd_power_iteration_normalizer  sL   

r   c                 C   sz   t jd}tddd|d}d}| |}d| j}tjtj	|d t
||d	d
d W d    d S 1 s6w   Y  d S )Nrp   r   r   r,   r   r.   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr1   r   )r   r]   )r4   r5   r6   r   format__name__r~   warnsr   ZSparseEfficiencyWarningr   )r+   r8   r9   rv   Zwarn_msgr:   r:   r;   #test_randomized_svd_sparse_warnings  s   "r   c                  C   s  t jd} d}d}| ||}tj|dd\}}}t||dd\}}tt || ||dd |j	}	tj|	dd\}}}t||d	d\}
}tt |
| ||	dd t||d	d\}}tt || ||	dd t||dd\}}tt || ||	dd d S )
N  r   r,   FrX   Zu_based_decisionrF   r_   T)
r4   r5   r6   r   r   rc   r#   r   rf   r}   )rsrR   rS   r9   ri   r   rk   r   r   ZXTr   r   ZU_flip1ZV_flip1ZU_flip2ZV_flip2r:   r:   r;   test_svd_flip  s   r   zn_samples, n_features)r3   rx   )rx   r3   c                 C   s   t j|}|| |}tj|dd\}}}t||dd\}}t jt |dd}	||	t 	|j
d f dk s;J t||dd\}}
t jt |
dd}|
t 	|
j
d |f dk s`J d S )NFrX   Tr   r   r=   r1   )r4   r5   r6   r   r   rc   r#   argmaxr   aranger@   all)rR   rS   Zglobal_random_seedr   r9   ri   r   rk   r   Zmax_abs_U1_row_idx_for_colr   Zmax_abs_V2_col_idx_for_rowr:   r:   r;   test_svd_flip_max_abs_cols   s   $(r   c                  C   s   t ddgddgg} t| dddd\}}}tdD ]<}t| dd|d\}}}t|| t|| tt || ||  tt |j|t d tt |j|t d qd S )	Ng       @rP   rq   r2   T)   	flip_signrU   r,   )r4   r{   r   ranger   rf   r}   eye)au1r   Zv1seedu2r   Zv2r:   r:   r;   test_randomized_svd_sign_flip/  s   

r   c            	      C   s   dd } t ddd}t|dddd	\}}}| ||\}}|s#J |r'J t|ddddd
\}}}| ||\}}|s>J |rBJ d S )Nc                 S   sL   t | jdd| jddk }t |jdd|jddk }||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=   r1   )r4   r   r   r   )uvu_basedv_basedr:   r:   r;   max_loading_is_positive@  s   ""zMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiver   r,   r   r3   Tr   r   )r   r   rU   )r4   r   reshaper   )	r   matZ	u_flippedr   Z	v_flippedr   r   Zu_flipped_with_transposeZv_flipped_with_transposer:   r:   r;   ,test_randomized_svd_sign_flip_with_transpose;  s   	
r   r   )r   rH   ,  m)r,   r   r   r   r.   c                 C   s   t j|}|| |}t||ddd\}}}t||ddd\}	}
}|j|	jks*J t||	ddd |j|
jks:J t||
ddd |j|jksJJ t||ddd d S )NZgesddr   )Zsvd_lapack_driverrU   ZgesvdgMbP?)atolrtol)r4   r5   r6   randr   r@   r   )r   r   rh   r   r8   r9   r   r   Zvt1r   r   Zvt2r:   r:   r;   !test_randomized_svd_lapack_driver\  s   r   c                  C   s   t g dt ddgt ddgf} t 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 d}t|d d t jf t|f d S )Nr1   r2   r3   rx   r.   rF   rO   )r1   rx   rF   )r1   rx   rO   )r1   r.   rF   )r1   r.   rO   )r2   rx   rF   )r2   rx   rO   )r2   r.   rF   )r2   r.   rO   )r3   rx   rF   )r3   rx   rO   )r3   r.   rF   )r3   r.   rO   r3   )r4   r{   r   r   r   newaxis)ZaxesZtrue_outoutrA   r:   r:   r;   test_cartesianv  s(   (

"r   zarrays, output_dtyper   rt   rx   rA   yc                 C   s   t | }|j|ksJ dS )z8Check that the cartesian product works with mixed types.N)r   rM   )ZarraysZoutput_dtypeoutputr:   r:   r;   test_cartesian_mix_types  s   r   c                   C   s   t jdS )Nrp   )r4   r5   r6   r:   r:   r:   r;   r8     s   r8   c           
      C   s   d}|  dd|| }|  |jd | }t|ddd|d\}}}tj||dd}tj|d |dd|d  }	t|| t||	 d S )Nr,     r   r   sample_weightrB   r>   r2   )r   rb   r@   r   r4   averager   )
r8   rM   Zmultr9   r   meanvarr   expected_meanexpected_varr:   r:   r;   2test_incremental_weighted_mean_and_variance_simple  s   
r   r   )r       cAg    cr   )r1   :0yE>g     j@zweight_loc, weight_scale))r   r1   )r   r   )r1   r   )r,   r1   )r   r1   c                 C   s   dd }d}|j |||d d}|j | ||d}ttj||dd}	ttj||	 d |dd}
||||	|
 |j | ||d}t|d }ttj|dd}	ttj|dd}
||||	|
 d S )	Nc           
   	   S   s   | j d }d|d d |d d |d d |fD ]+}d\}}}t||D ]}	t| |	 |||||	 d\}}}q$t|| t||dd	 qd S )
Nr   r1   r,   rx   r2   )r   r   r   r   ư>r   )r@   r	   r   r   )
r9   r   r   r   r   
chunk_size	last_meanZlast_weight_sumZlast_varbatchr:   r:   r;   _assert  s   
*

z<test_incremental_weighted_mean_and_variance.<locals>._assert)rH   r   r   )locscaler0   r   r2   r=   )r|   r   r4   r   r?   r   r   )r   r   Z
weight_locZweight_scaler8   r   r0   weightr9   r   r   Zones_weightr:   r:   r;   +test_incremental_weighted_mean_and_variance  s   	r   c              	   C   s   t g d}t g d}t jg dt jd}t d}t d}t g dg dg d	g| }t 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|||||d\}}	}
t|||||d\}}}t|| t||	 t||
 d S )N     @r   r   r        @r   r   r   r2   r2   r2   r2   rt   r3   rx      r  r  r    r  r  r  r   r   r   r   r  r  r   r   )r4   r{   r   r?   rb   nanr   r   )rM   	old_meansold_variancesZold_weight_sumZsample_weights_XZsample_weights_X_nanr9   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_countr:   r:   r;   6test_incremental_weighted_mean_and_variance_ignore_nan  s@   

	


r  c            
      C   s   t g dg dg dg dgj} d}| d |d d f }| |d d d f }|jdd}|jdd}t j|jd |jd t jd}t||||\}}}	t	|| jddd t	|| jddd t	|	| jd  d S )N)iX  i  r  r  r   r2   r   r=   r1   rt   rF   )
r4   r{   r}   r   r   fullr@   r   r   r   )
r   idxZX1ZX2r  r  old_sample_countZfinal_meansZfinal_variancesZfinal_countr:   r:   r;   )test_incremental_variance_update_formulas  s*   
r  c               	   C   s   t g d} t g d}t jg dt jd}t g dg dg dg}t 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|
| d S )Nr   r   r   rt   r  r  r  r  r  r   )r4   r{   r   r  r   r   )r  r  r  r9   r	  r
  r  r  r  r  r  r:   r:   r;   -test_incremental_mean_and_variance_ignore_nan(  s(   	



r  c                  C   s  dd } dd }dd }dd }d	}d
}d}t jdt jd}t jdt jd}t j|d
 |f|t jd}	t j|d
 |f|t jd}
t |	|
f}t | |||  |ksXJ |	dd d f t ||d
 }}}t	|
j
d D ]}||
|d d f |||\}}}qr||j
d ksJ t |jdd|  dksJ t | ||  |ksJ |	dd d f t |}}t j||d
 t jd}t	|
j
d D ]}t|
|d d f d|
j
d f|||\}}}qt||j
d  t|jdd| |t | ||  ks
J d S )Nc                 S   s   | j ddS )Nr   r=   )r   )r   r:   r:   r;   np_varH  s   z=test_incremental_variance_numerical_stability.<locals>.np_varc                 S   s:   | j d }| d jdd| }| jdd| d }|| S )Nr   r2   r=   )r@   rJ   )r9   r   Zexp_x2Zexpx_2r:   r:   r;   one_pass_varM  s   
zCtest_incremental_variance_numerical_stability.<locals>.one_pass_varc                 S   s*   | j dd}|  }tj || d ddS )Nr   r=   r2   )r   rW   r4   )r9   r   Yr:   r:   r;   two_pass_varV  s   zCtest_incremental_variance_numerical_stability.<locals>.two_pass_varc                 S   sJ   |d }|t | }| | ||  }|| | | | |  |  }|||fS )Nr1   )float)rA   r   Zlast_varianceZlast_sample_countZupdated_sample_countZsamples_ratioZupdated_meanZupdated_variancer:   r:   r;   naive_mean_variance_update^  s   
zQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updater   r2   i'  g    חArt   h㈵>r   r=   r   r1   )r4   r{   re   logr  Zvstackr   r   Zzerosr   r@   r   r   r   r   r   r   )r  r  r  r  r   rS   rR   x1Zx2ZA0A1r   r   r   r   r   r:   r:   r;   -test_incremental_variance_numerical_stabilityD  s8   	"&""$$r   c                  C   sJ  t jd} | dd}|j\}}dD ]}t d|jd |}|d |jd kr/t ||g}t|D ]m\}}|||d d f }|dkrg|j	dd}	|j
dd}
|jd }t j|jd |jd t jd	}nt||	|
|}|\}	}
}||jd 7 }t j	|d | dd}t j
|d | dd}t|	|d
 t|
|d
 t|| q4qd S )Nr   r   r,   )   r   %   r   r   r=   r1   rt   rF   )r4   r5   r6   r   r@   r   Zhstack	itertoolspairwiser   r   r  r   r   r   r   )r8   r9   rR   rS   Z
batch_sizeZstepsr   jr   Zincremental_meansZincremental_variancesZincremental_countZsample_countresultZcalculated_meansZcalculated_variancesr:   r:   r;   test_incremental_variance_ddof  s4   

 
r'  c                  C   s   t jddd} t jt | dd}t| }t j|dd}t|| t | t	| j
d |f }t| ||d d t jf   d S )N$   r.   r1   r=   r   )r4   r5   r6   r   r   r   r   r   signr   r@   r   )dataZmax_abs_rowsZdata_flippedZmax_rowsZsignsr:   r:   r;   test_vector_sign_flip  s   
 r+  c                  C   sL   t jd} | dd}t |}t j|ddd}tt|||  d S )Nr   r3   r.   r1   r=   )r   r1   )	r4   r5   r6   r   exprJ   r   r   r!   )r8   r9   Zexp_XZ	sum_exp_Xr:   r:   r;   test_softmax  s
   
r-  c                  C   s   t tg dtg d tjdd} tt	 t| ddd W d    n1 s.w   Y  tjdj
ddd}t t|dd	tj|dd	 t t|d
d	tj|d
d	 t t|dd	tj|dd	 d S )Nr   r   i )r   r   r(  r   )r.   r.   r.   r/   r=   r1   r2   )r   r"   r4   Zcumsumr5   r6   r   r~   r   RuntimeWarningr7   )rr   r:   r:   r;   test_stable_cumsum  s    r0  A_containerZdensec                 C      g | ]}|j qS r:   r   .0	containerr:   r:   r;   
<listcomp>      r7  )ZidsB_containerc                 C   r2  r:   r3  r4  r:   r:   r;   r7    r8  c                 C   sX   t jd}|d}|d}t ||}| |}||}t||dd}t|| d S )Nr      r,   )r,   r   Tdense_outputr4   r5   r6   rI   rf   r    r   )r1  r9  r8   r   Bexpectedactualr:   r:   r;   test_safe_sparse_dot_2d  s   

rB  c                 C   s   t jd}|d}|d}t ||}| |}t||}t|| |d}|d}t ||}| |}t||}t|| d S )Nr   )r2   r3   rx   r.   rF   )rF   rO   )r2   r3   )rx   r.   r3   rF   r>  )rn   r8   r   r?  r@  rA  r:   r:   r;   test_safe_sparse_dot_nd  s   






rC  r6  c                 C   r2  r:   r3  r4  r:   r:   r;   r7    r8  c                 C   sv   t jd}|d}|d}t ||}t| ||}t|| |d}t ||}t|| |}t|| d S )Nr   r,   r:  )r,   r;  r>  )r6  r8   r?  r   r@  rA  r:   r:   r;   test_safe_sparse_dot_2d_1d  s   



rD  r=  TFc                 C   sv   t jd}tjddd|d}tjddd|d}||}t||| d}t||  ks.J | r4| }t|| d S )Nr   r;  r,   r   )r   rU   r   r<  )	r4   r5   r6   r   rf   r    issparseZtoarrayr   )r=  r8   r   r?  r@  rA  r:   r:   r;   !test_safe_sparse_dot_dense_output  s   
rF  c                  C   s4   t jddgt jd} t| ddd}t|ddg d	S )
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   rt   ia  r   )Zclass_countsZn_drawsr8   i`  r   N)r4   r{   r   r   r   )r9   retr:   r:   r;   test_approximate_mode!  s   rH  zarray_namespace, device, dtypec                 C   s&  t | |}tjd}|jdd|}|j||d}d}|dkr#dnd}tdd	_ t||dd
\}	}
}t||dd
\}}}t	|d j
|j
ksKJ t	|d j
|j
ksWJ t	|d j
|j
kscJ tt|||	|d tt|||
|d tt||||d W d    d S 1 sw   Y  d S )Nr   r:  r/   devicer.   ra   r  TZarray_api_dispatchr   r   )r   r4   r5   r6   r|   rb   asarrayr   r   r   r   r   r   )array_namespacerJ  rM   xpr8   r9   X_xprv   r   Zu_npZs_npZvt_npZu_xpZs_xpZvt_xpr:   r:   r;   (test_randomized_svd_array_api_compliance2  s    
"rP  c                 C   s   t | |}tjd}|jdd|}|j||d}d}d}|dkr%dnd}	td	d
/ t|||dd}
t|||dd}t	|d j
|j
ksIJ tt|||
|	d W d    d S 1 s^w   Y  d S )Nr   r:  r/   rI  r.   r,   ra   r  TrK  )r0   r   rU   r   )r   r4   r5   r6   r|   rb   rL  r   r   r   r   r   r   )rM  rJ  rM   rN  r8   r9   rO  r0   r   r   ZQ_npZQ_xpr:   r:   r;   1test_randomized_range_finder_array_api_complianceM  s   
"rQ  )ir#  numpyr4   r~   Zscipyr   r   Zscipy.linalgr   Zscipy.sparse.linalgr   Zsklearnr   Zsklearn.datasetsr   r   Zsklearn.utilsr	   Zsklearn.utils._arpackr
   Zsklearn.utils._array_apir   r   r   r   Zsklearn.utils._testingr   r   r   r   r   r   r   Zsklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   Zsklearn.utils.fixesr%   r&   r'   r(   r)   r*   markZparametrizer<   rE   rL   r   r   ra   re   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r{   rM   objectr   Zfixturer8   r   r   r  r  r  r   r'  r+  r-  r0  rB  rC  rD  rF  rH  rP  rQ  r:   r:   r:   r;   <module>   s   $D	 

	
O

G
)) -

!&
&
$


&
$
H 






