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:   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/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scoremode2score2r:   r:   r;   test_uniform_weightsG   s   
rG   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   ravelsum)mode_resultr8   rA   wrC   rD   r:   r:   r;   test_random_weightsU   s   
(rP   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 )NrJ     r.   r,              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrZ   fdecimal)r4   float32rQ   r   astyper@   r   svdr   kindfloat64r   dotr'   )rQ   rV   rW   rankkrf   r9   UsVt
normalizerUasaVacsr_containerr:   r:   r;   'test_randomized_svd_low_rank_all_dtypesg   sj   

6 rw   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*   )      ?       rT         @rQ   r/   r   r2   module)n_components	selection)r2   r{   rz   )   r2   valueN)r4   r5   r6   diagarrayr   qrnormalr@   Tr   r   pytestraisesNotImplementedError)rQ   r8   r9   rand_roteigvalseigvecsr:   r:   r;   test_randomized_eigsh   s   "r   rn   )r,   2   rJ         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   rZ   r}      )r~   r   n_iterrZ      ra   )r~   r   n_oversamplesrZ   rc   r   r1   )subset_by_indexNrH   re   r   LA)whichtolmaxiterv0r,      )r   r   r   argsortr@   r   r4   
zeros_liker   r#   r
   r   )rn   rW   r9   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpackr:   r:   r;   (test_randomized_eigsh_compared_to_others   sT   




r   zn,rank))r,   rS   rI   )rJ   P   )rR   r,   )rR      )rR   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   )r~   rZ   r   r=   rH   re   N)r4   r5   r6   randnr   r   r   r   normr?   r@   r   )nrm   r8   r9   ASVA_reconstructr:   r:   r;   &test_randomized_eigsh_reconst_low_rank  s   
r   rv   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 )Nrx   rJ   r   r.   Fr[   r2   r1   r=   T)squaredr|   )r4   r5   r6   r   rg   rh   rM   r   r   sqrtint32int64indptrr   rQ   )rQ   rv   r9   	precisionsq_normcsr_index_dtype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 )NrJ   rR   r.   r,   皙?r   rU   Fr]   r_   noner`   ra   r   rc   rZ   g{Gz?rb   r3   re   	r   r@   r   ri   r   r4   absmaxr   
rV   rW   rm   rn   r9   r   rp   rr   rt   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 )NrJ   rR   r.   r,   ry   r   rU   Fr]   r   r   r   r3   re   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 )NrJ   rR   r   r,   g      ?r   rU   r3   F)r   	transposerZ   Tr_   r]   re   r2   )r   r@   r   r   ri   r   r4   rl   )rV   rW   rm   rn   r9   U1s1V1U2s2V2U3s3V3U4s4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 )Nrx   rJ   rR   r   rX   rZ   r3   r   r2   r/   r   r   fro)ordr   )r`   ra   r_   )r.   r,   r      )r4   r5   r6   r   r7   r@   r   rl   r   r   r   r   )r8   r9   r~   ro   rp   rq   r   error_2error_20rr   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 )Nrx   r   r   r,   r   r.   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr1   r   )r   rc   )r4   r5   r6   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r+   r8   r9   r~   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,   Fr]   u_based_decisionrH   re   T)
r4   r5   r6   r   r   ri   r#   r   rl   r   )rsrV   rW   r9   ro   r   rq   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2r:   r:   r;   test_svd_flip  s   r   zn_samples, n_features)r3   r   )r   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 )NFr]   Tr   r   r=   r1   )r4   r5   r6   r   r   ri   r#   argmaxr   aranger@   all)rV   rW   global_random_seedr   r9   ro   r   rq   r   max_abs_U1_row_idx_for_colr   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       @rT   ry   r2   T)   	flip_signrZ   r,   )r4   r   r   ranger   rl   r   eye)au1r   v1seedu2r   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   rZ   )r4   r   reshaper   )	r	  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposer:   r:   r;   ,test_randomized_svd_sign_flip_with_transpose;  s   	
r  r   )r   rJ   ,  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 )Ngesddr   )svd_lapack_driverrZ   gesvdgMbP?)atolrtol)r4   r5   r6   randr   r@   r   )r   r  rn   r  r8   r9   r   r   vt1r  r   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   r   r.   rH   rS   )r1   r   rH   )r1   r   rS   )r1   r.   rH   )r1   r.   rS   )r2   r   rH   )r2   r   rS   )r2   r.   rH   )r2   r.   rS   )r3   r   rH   )r3   r   rS   )r3   r.   rH   )r3   r.   rS   r3   )r4   r   r   r   r   newaxis)axestrue_outoutrA   r:   r:   r;   test_cartesianv  s(   (

"r!  zarrays, output_dtyper  r|   r   rA   yc                 C   s   t | }|j|ksJ dS )z8Check that the cartesian product works with mixed types.N)r   rQ   )arraysoutput_dtypeoutputr:   r:   r;   test_cartesian_mix_types  s   r&  c                   C   s   t jdS )Nrx   )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  rh   r@   r   r4   averager   )
r8   rQ   multr9   r)  meanvarr   expected_meanexpected_varr:   r:   r;   2test_incremental_weighted_mean_and_variance_simple  s   
r1  r-  )r       cAg    cr.  )r1   :0yE>g     j@zweight_loc, weight_scale))r   r1   )r   r3  )r1   r3  )r,   r1   )r2  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,   r   r2   )r   r   r   r(  ư>r  )r@   r	   r   r   )
r9   r)  r/  r0  r   
chunk_size	last_meanlast_weight_sumlast_varbatchr:   r:   r;   _assert  s   
*

z<test_incremental_weighted_mean_and_variance.<locals>._assert)rJ   r   r   )locscaler0   r*  r2   r=   )r   r   r4   r+  r?   r-  r.  )r-  r.  
weight_locweight_scaler8   r;  r0   weightr9   r/  r0  ones_weightr:   r:   r;   +test_incremental_weighted_mean_and_variance  s   	rB  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     @rD  rD  rD       @rF  rF  rF  r2   r2   r2   r2   r|   r3   r      rI  rI  rI    rK  rK  rK  r  r  r  r  rI  rK  r  r(  )r4   r   r   r?   rh   nanr   r   )rQ   	old_meansold_variancesold_weight_sumsample_weights_X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@   

	


rZ  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  rI  rK  r  r2   r   r=   r1   r|   rH   )
r4   r   r   r-  r.  fullr@   r   r   r   )
r   idxX1X2rN  rO  old_sample_countfinal_meansfinal_variancesfinal_countr:   r:   r;   )test_incremental_variance_update_formulas  s*   
rc  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 )NrC  rE  rG  r|   rH  rJ  rL  rI  rK  r  )r4   r   r   rM  r   r   )rN  rO  r_  r9   rS  rT  rU  rV  rW  rX  rY  r:   r:   r;   -test_incremental_mean_and_variance_ignore_nan(  s(   	



rd  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@   rM   )r9   r   exp_x2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-  r\   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   r7  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variancer:   r:   r;   naive_mean_variance_update^  s   
zQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updater   r2   i'  g    חAr|   h㈵>r   r=   r4  r1   )r4   r   rk   logr[  vstackr   r   zerosr   r@   r-  r   r   r
  r   r   )re  rh  rj  rr  r   rW   rV   x1x2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   r|   rH   )r4   r5   r6   r   r@   r   hstack	itertoolspairwiser-  r.  r[  r   r   r   r   )r8   r9   rV   rW   
batch_sizestepsr   jr:  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_means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  )datamax_abs_rowsdata_flippedmax_rows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   exprM   r
  r   r!   )r8   r9   exp_X	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   cumsumr5   r6   r  r   r   RuntimeWarningr7   )rr   r:   r:   r;   test_stable_cumsum  s    r  A_containerdensec                 C      g | ]}|j qS r:   r   .0	containerr:   r:   r;   
<listcomp>      r  )idsB_containerc                 C   r  r:   r  r  r:   r:   r;   r    r  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   rK   rl   r    r   )r  r  r8   r   Bexpectedactualr:   r:   r;   test_safe_sparse_dot_2d  s   

r  c                 C   s   t jd}|d}|d}t ||}| |}t||}t|| |d}|d}t ||}| |}t||}t|| d S )Nr   )r2   r3   r   r.   rH   )rH   rS   )r2   r3   )r   r.   r3   rH   r  )rv   r8   r   r  r  r  r:   r:   r;   test_safe_sparse_dot_nd  s   






r  r  c                 C   r  r:   r  r  r:   r:   r;   r    r  c                 C   sv   t jd}|d}|d}t ||}t| ||}t|| |d}t ||}t|| |}t|| d S )Nr   r,   r  )r,   r  r  )r  r8   r  r   r  r  r:   r:   r;   test_safe_sparse_dot_2d_1d  s   



r  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   rZ   r   r  )	r4   r5   r6   r   rl   r    issparsetoarrayr   )r  r8   r   r  r  r  r:   r:   r;   !test_safe_sparse_dot_dense_output  s   
r  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'  r|   ia  r   )class_countsn_drawsr8   i`  r   N)r4   r   r   r   r   )r9   retr:   r:   r;   test_approximate_mode!  s   r  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.   rg   rs  Tarray_api_dispatchr   r5  )r   r4   r5   r6   r   rh   asarrayr   r   r   r   r   r   )array_namespacer  rQ   xpr8   r9   X_xpr~   r  u_nps_npvt_npu_xps_xpvt_xpr:   r:   r;   (test_randomized_svd_array_api_compliance2  s    
"r  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/   r  r.   r,   rg   rs  Tr  )r0   r   rZ   r5  )r   r4   r5   r6   r   rh   r  r   r   r   r   r   r   )r  r  rQ   r  r8   r9   r  r0   r   r  Q_npQ_xpr:   r:   r;   1test_randomized_range_finder_array_api_complianceM  s   
"r  )ir  numpyr4   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<   rG   rP   r   r   rg   rk   rw   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r!  r   rQ   objectr&  fixturer8   r1  rB  rZ  rc  rd  r{  r  r  r  r  r  r  r  r  r  r  r  r:   r:   r:   r;   <module>   s   $D	 

	
O

G
)) -

!&
&
$


&
$
H 






