o
    tBh6                     @   s  d dl Zd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlmZ d dlmZ d d	lmZ d d
lmZ d dl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mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl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 Z(dd Z)d d! Z*d"d# Z+e
j,-d$ej.ej/ej0ej1fd%d& Z2e
j,-d$ej.ej/ej0ej1fd'd( Z3e
j,-d)d*d+d, Z4e
j,-d-g d.d/d0 Z5e
j,-d$ej0ej1fd1d2 Z6d3d4 Z7d5d6 Z8d7d8 Z9d9d: Z:d;d< Z;d=d> Z<d?d@ Z=dAdB Z>dCdD Z?dEdF Z@e
A dGdH ZBe
j,-d$ej0ej1gdIdJ ZCe
j,-dKg dLe
j,-dMg dNe
j,-dOg dPdQdR ZDe
j,-d$ej0ej1gdSdT ZEdUdV ZFdWdX ZGedYdZ ZHd[d\ ZId]d^ ZJd_d` ZKdadb ZLe
j,j-dcejMejNgdddegdfe
j,j-dgejMejNgdddegdfdhdi ZOdjdk ZPe
j,j-dcejMejNgdddegdfdldm ZQe
j,-dndodpgdqdr ZRdS )s    N)sparse)linalg)stats)eigsh)expit)gen_batches)_init_arpack_v0)assert_almost_equal)assert_allclose)assert_allclose_dense_sparse)assert_array_equal)assert_array_almost_equal)skip_if_32bit)density_safe_accumulator_op)randomized_svd_randomized_eigsh)	row_norms)weighted_mode)	cartesian)log_logistic)svd_flip)_incremental_mean_and_var)_deterministic_vector_sign_flip)softmax)stable_cumsum)safe_sparse_dot)make_low_rank_matrixmake_sparse_spd_matrixc                  C   s|   t jd} | jddd}d|d< d|d< t|}t|}t|}t|}||||fD ]}t	|t	|ks;J q/d S )Nr   
   r      size)      )r!      )
nprandomRandomStaterandintr   
csr_matrix
csc_matrix
coo_matrix
lil_matrixr   )rngXX_csrX_cscX_cooX_lilX_ r6   w/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_extmath.pytest_density'   s   



r8   c                  C   sj   t jd} | jddd}t |j}dD ]}t||\}}t|||d\}}t	|| t	|| qd S )Nr   r   r    r"   )Nr   r$   axis)
r'   r(   r)   r*   onesshaper   moder   r   )r/   xweightsr:   r=   scoremode2score2r6   r6   r7   test_uniform_weights5   s   
rC   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!   r$   r9   )r'   r(   r)   r*   random_sampler<   r   r   r   ravelsum)mode_resultr/   r>   wr=   r@   r6   r6   r7   test_random_weightsC   s   
(rL   c              	   C   sT  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|}t|||
dd\}}}| j	dkr|j| ksJ |j| ksJ |j| ksJ n|jj	dksJ |jj	dksJ |jj	dksJ t|d | |d | |d qNd S )NrF     r!   r              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrU   fdecimal)r'   float32dtyper   astyper<   r   svdr   kindfloat64r	   dotr   r+   )rc   rQ   rR   rankkra   r0   UsVt
normalizerUasaVar6   r6   r7   check_randomized_svd_low_rankU   sf   

6

 rr   rc   c                 C   s   t |  d S N)rr   rc   r6   r6   r7   'test_randomized_svd_low_rank_all_dtypes      ru   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*   )      ?       rO         @rt   r"   r   r%   module)n_components	selection)r%   rz   ry   )   r%   valueN)r'   r(   r)   diagarrayr   qrnormalr<   Tr   r   pytestraisesNotImplementedError)rc   r/   r0   rand_roteigvalseigvecsr6   r6   r7   test_randomized_eigsh   s   "r   rj   )r   2   rF         c              	   C   s  d}t |dd}t|| dddd\}}t|| dddddd	\}}tj|||  |d
 fd\}}| ddd }	||	 }|dd|	f }|j| fksLJ t||dd t||dd |j|| fkscJ 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   r{      )r|   r}   n_iterrU      r\   )r|   r   n_oversamplesrU   r^   r}   r$   )r   NrD   r`   r~   LA)whichtolmaxiterv0r      )r   r   r   eighargsortr<   r   r'   
zeros_liker   r   r   r   )rj   rR   r0   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpackr6   r6   r7   (test_randomized_eigsh_compared_to_others   sT   




r   zn,rank))r   rN   rE   )rF   P   )rM   r   )rM      )rM   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|   rU   r   r9   rD   r`   N)r'   r(   r)   randnr   r   r   r   normr;   r<   r   )nri   r/   r0   ASVA_reconstructr6   r6   r7   &test_randomized_eigsh_reconst_low_rank  s   
r   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 ]E}tj|| d}|t ju r^|jj|dd|_|jj|dd|_|jj|ksfJ |jj|ksnJ t|t|d
d| tt 	|t|| q>d S )Nrw   rF   r~   r!   FrV   r%   r$   r9   T)squaredrt   )r'   r(   r)   r   rb   rd   rI   r   r   sqrtint32int64r   r+   indptrr   rc   )rc   r0   	precisionsq_normcsr_index_dtypeXcsrr6   r6   r7   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 )NrF   rM   r!   r   皙?r   rP   FrX   rZ   noner[   r\   r   r^   rU   g{Gz?r]   r&   r`   	r   r<   r   re   r   r'   absmaxr	   
rQ   rR   ri   rj   r0   r   rl   rn   rp   sapr6   r6   r7   'test_randomized_svd_low_rank_with_noiseG  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 )NrF   rM   r!   r   rx   r   rP   FrX   r   r   r   r&   r`   r   r   r6   r6   r7   !test_randomized_svd_infinite_rankp  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 )NrF   rM   r~   r   g      ?r   rP   r&   F)r   	transposerU   TrZ   rX   r`   r%   )r   r<   r   r   re   r	   r'   rh   )rQ   rR   ri   rj   r0   U1s1V1U2s2V2U3s3V3U4s4V4r6   r6   r7   )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 )Nrw   rF   rM   r   rS   rU   r&   r   r%   r"   r   r   fro)ordr   )r[   r\   rZ   )r!   r   r      )r'   r(   r)   r   r*   r<   r   rh   r   r   r   r   )r/   r0   r|   rk   rl   rm   r   error_2error_20rn   ierrorr6   r6   r7   .test_randomized_svd_power_iteration_normalizer  sL   

r   c               	   C   s   t jd} tddd| d}d}tjtjfD ],}||}d|j}t	j
tj|d t||d	d
d W d    n1 s=w   Y  qd S )Nrw   r   r   r   r   r!   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr$   r   )r   r^   )r'   r(   r)   r   r   r.   
dok_matrixformat__name__r   warnsSparseEfficiencyWarningr   )r/   r0   r|   clswarn_msgr6   r6   r7   #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   )u_based_decisionrD   r`   T)
r'   r(   r)   r   r   re   r   r	   rh   r   )rsrQ   rR   r0   rk   r   rm   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2r6   r6   r7   test_svd_flip  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       @rO   rx   r%   T)   	flip_signrU   r   )r'   r   r   ranger	   rh   r   eye)au1r   v1seedu2r   v2r6   r6   r7   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   r9   r$   )r'   r   r   all)uvu_basedv_basedr6   r6   r7   max_loading_is_positive  s   ""zMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiver   r   r   r&   Tr   r   )r   r   rU   )r'   arangereshaper   )	r  mat	u_flippedr   	v_flippedr   r   u_flipped_with_transposev_flipped_with_transposer6   r6   r7   ,test_randomized_svd_sign_flip_with_transpose  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r$   r%   r&   r~   r!   rD   rN   )r$   r~   rD   )r$   r~   rN   )r$   r!   rD   )r$   r!   rN   )r%   r~   rD   )r%   r~   rN   )r%   r!   rD   )r%   r!   rN   )r&   r~   rD   )r&   r~   rN   )r&   r!   rD   )r&   r!   rN   r&   )r'   r   r   r   r  newaxis)axestrue_outoutr>   r6   r6   r7   test_cartesian;  s(   (

"r  c                  C   sL   dd } t ddd}tt|| | t ddg}tt|dd	g d S )
Nc                 S   s   t t| S rs   )r'   logr   )r>   r6   r6   r7   naive_log_logistic[  s   z1test_logistic_sigmoid.<locals>.naive_log_logisticr%   r   g      Yg      Y@ir   )r'   linspacer   r   r   )r  r>   	extreme_xr6   r6   r7   test_logistic_sigmoidY  s
   r  c                   C   s   t jdS )Nrw   )r'   r(   r)   r6   r6   r6   r7   r/   e  rv   r/   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r?   r:   r%   )randrd   r<   r   r'   averager	   )
r/   rc   multr0   r  meanvarr   expected_meanexpected_varr6   r6   r7   2test_incremental_weighted_mean_and_variance_simplej  s   
r!  r  )r       cAg    cr  )r$   :0yE>g     j@zweight_loc, weight_scale))r   r$   )r   r#  )r$   r#  )r   r$   )r"  r$   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   r$   r   r~   r%   )r   r   r   r  ư>)atol)r<   r   r   r
   )
r0   r  r  r   r   
chunk_size	last_meanlast_weight_sumlast_varbatchr6   r6   r7   _assert  s   
*

z<test_incremental_weighted_mean_and_variance.<locals>._assert)rF   r   r   )locscaler#   r  r%   r9   )r   r   r'   r  r;   r  r  )r  r  
weight_locweight_scaler/   r+  r#   weightr0   r  r   ones_weightr6   r6   r7   +test_incremental_weighted_mean_and_variancey  s   
r2  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     @r4  r4  r4       @r6  r6  r6  r%   r%   r%   r%   rt   r&   r~      r9  r9  r9    r;  r;  r;  ,  r=  r=  r=  r9  r;  r=  r  )r'   r   r   r;   rd   nanr   r
   )rc   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr0   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_countr6   r6   r7   6test_incremental_weighted_mean_and_variance_ignore_nan  s@   

	


rK  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  r9  r;  r=  r%   r   r9   r$   rt   rD   )
r'   r   r   r  r  fullr<   r   r   r	   )
r   idxX1X2r?  r@  old_sample_countfinal_meansfinal_variancesfinal_countr6   r6   r7   )test_incremental_variance_update_formulas  s*   
rT  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 )Nr3  r5  r7  rt   r8  r:  r<  r9  r;  r=  )r'   r   r   r>  r   r
   )r?  r@  rP  r0   rD  rE  rF  rG  rH  rI  rJ  r6   r6   r7   -test_incremental_mean_and_variance_ignore_nan  s(   	



rU  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   r9   )r  )r   r6   r6   r7   np_var  s   z=test_incremental_variance_numerical_stability.<locals>.np_varc                 S   s:   | j d }| d jdd| }| jdd| d }|| S )Nr   r%   r9   )r<   rI   )r0   r   exp_x2expx_2r6   r6   r7   one_pass_var	  s   
zCtest_incremental_variance_numerical_stability.<locals>.one_pass_varc                 S   s*   | j dd}|  }tj || d ddS )Nr   r9   r%   )r  rW   r'   )r0   r  Yr6   r6   r7   two_pass_var  s   zCtest_incremental_variance_numerical_stability.<locals>.two_pass_varc                 S   sJ   |d }|t | }| | ||  }|| | | | |  |  }|||fS )Nr$   )float)r>   r'  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variancer6   r6   r7   naive_mean_variance_update  s   
zQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updater   r%   i'  g    חArt   gh㈵>r   r9   r$  r$   )r'   r   rg   r  rL  vstackr   r   zerosr   r<   r  r   r   r  r   r   )rV  rY  r[  rc  r   rR   rQ   x1x2A0A1r   r  r  r   r   r6   r6   r7   -test_incremental_variance_numerical_stability   s8   	"&""$$rj  c                  C   sZ  t jd} | dd}|j\}}dD ]}t d|jd |}|d |jd kr/t ||g}t|d d |dd  D ]m\}}|||d d f }|dkro|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|| q<qd S )Nr   r   r   )   r   %   r   r   r$   r9   rt   rD   )r'   r(   r)   r   r<   r  hstackzipr  r  rL  r   r   r	   r   )r/   r0   rQ   rR   
batch_sizestepsr   jr*  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancesr6   r6   r7   test_incremental_variance_ddofI  s4   
"
 
ry  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!   r$   r9   r   )r'   r(   r)   r   argmaxr   r   r   signr   r<   r  )datamax_abs_rowsdata_flippedmax_rowssignsr6   r6   r7   test_vector_sign_flipi  s   
 r  c                  C   sL   t jd} | dd}t |}t j|ddd}tt|||  d S )Nr   r&   r!   r$   r9   )r   r$   )	r'   r(   r)   r   exprI   r  r   r   )r/   r0   exp_X	sum_exp_Xr6   r6   r7   test_softmaxt  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 )rtolr%  rz  r  )r!   r!   r!   r"   r9   r$   r%   )r   r   r'   cumsumr(   r)   r  r   r   RuntimeWarningr*   )rr   r6   r6   r7   test_stable_cumsum|  s    r  A_array_constrdenser   )idsB_array_constrc                 C   sX   t jd}|d}|d}t ||}| |}||}t||dd}t|| d S )Nr      r   )r   r   Tdense_outputr'   r(   r)   rG   rh   r   r
   )r  r  r/   r   Bexpectedactualr6   r6   r7   test_safe_sparse_dot_2d  s   

r  c                  C   s   t jd} | d}| d}t ||}t|}t||}t|| | d}| d}t ||}t|}t||}t|| d S )Nr   )r%   r&   r~   r!   rD   )rD   rN   )r%   r&   )r~   r!   r&   rD   )	r'   r(   r)   rG   rh   r   r+   r   r
   )r/   r   r  r  r  r6   r6   r7   test_safe_sparse_dot_nd  s   








r  c                 C   s~   t jd}|d}|d}t ||}| |}t||}t|| |d}t ||}| |}t||}t|| d S )Nr   r   r  )r   r  r  )r  r/   r  r   r  r  r6   r6   r7   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   rU   r   r  )	r'   r(   r)   r   rh   r   issparsetoarrayr   )r  r/   r   r  r  r  r6   r6   r7   !test_safe_sparse_dot_dense_output  s   
r  )Snumpyr'   scipyr   r   r   scipy.sparse.linalgr   scipy.specialr   r   sklearn.utilsr   sklearn.utils._arpackr   sklearn.utils._testingr	   r
   r   r   r   r   sklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.datasetsr   r   r8   rC   rL   rr   markparametrizer   r   rb   rg   ru   r   r   r   r   r   r   r   r   r   r   r   r	  r  r  fixturer/   r!  r2  rK  rT  rU  rj  ry  r  r  r  r   r+   r  r  r  r  r6   r6   r6   r7   <module>   s   N


G

)) -!

'
$
H 
