o
    tBhB                  	   @   s   U d dl Z d dlmZmZ d dlZd dl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 d dlmZ d dlmZ d dlmZ egZee ed< egZee ed< ee ZegZee ed< egZ ee ed< ee  Z!dZddZ"dd Z#d\Z$Z%e&e$e% d Z'e"e$e%e'\Z(Z)e
j*+dg ddd Z,dd Z-dd  Z.d!d" Z/d#d$ Z0d%d& Z1e
j*+d'ed(d) Z2e
j*+d'ed*d+ Z3d,d- Z4d.d/ Z5e
j*+d0g d1d2d3 Z6e
j*+d4d5g d6gfd7e(fgd8d9 Z7d:d; Z8d<d= Z9d>d? Z:d@dA Z;dBdC Z<dDdE Z=dFdG Z>dHdI Z?e
j*+dJe!dKdL Z@e
j*+dMdNe
j*+dOdNe
j*+dJe!e
j*+dPdQdRgdSdT ZAe
j*+dJe!e
j*+dUejBejBfejCejCfejDejCfejEejCffdVdW ZFe
j*+dJe!dXdY ZGdS )[    N)ListAny)euclidean_distancesjohnson_lindenstrauss_min_dim)_gaussian_random_matrix)_sparse_random_matrix)SparseRandomProjection)GaussianRandomProjection)assert_allclose)assert_allclose_dense_sparse)assert_array_equal)assert_almost_equal)assert_array_almost_equal)DataDimensionalityWarningall_sparse_random_matrixall_dense_random_matrixall_SparseRandomProjectionall_DenseRandomProjectionc                 C   sP   t j|}tj|||j| |d|j||dff| |fd}| | fS )Nsizeshape)	nprandomRandomStatesp
coo_matrixrandnrandinttoarraytocsr)	n_samples
n_features
n_nonzerosrandom_staterngdata_coo r(   {/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/tests/test_random_projection.pymake_sparse_random_data#   s   
r*   c                 C   s   t | s| S |  S N)r   issparser    )matrixr(   r(   r)   densify2   s   
r.   )
     g      Y@zn_samples, eps))d   皙?)r1           )r1   皙)r         ?c                 C   s<   t t t| |d W d    d S 1 sw   Y  d S )Neps)pytestraises
ValueErrorr   )r"   r7   r(   r(   r)   test_invalid_jl_domainC   s   "r;   c                   C   sh   t t tddg ddg d W d    n1 sw   Y  ttjjdddd	tdd
d d S )N   r1      g?r6      r/   )r/   r/   r   r5   )r8   r9   r:   r   r   r   r   fullr(   r(   r(   r)   test_input_size_jl_min_dimK   s   
r@   c              	   C   sN   g d}|D ]\}}t t | || W d    n1 sw   Y  qd S )N))r   r   )r>   )r>   rA   )r>   r   )rA   r   r8   r9   r:   random_matrixinputsn_componentsr#   r(   r(   r)   check_input_size_random_matrixW   s   rG   c                 C   s2   g d}|D ]\}}| ||j ||fksJ qd S )N))r>      )rH   r>   )rH   rH   )r>   r>   r   rC   r(   r(   r)   check_size_generated^   s   
rI   c                 C   s<   t | dddd}tdt|d tdtj|d d S )Ni'  r>   r   r%   r<         ?)r.   r   r   meanlinalgnorm)rD   Ar(   r(   r)   check_zero_mean_and_unit_normg   s   rP   c              	   C   sN   d\}}dD ]}t t | |||d W d    n1 sw   Y  qd S )N)rH   r/   )g      r3   r2   densityrB   )rD   rF   r#   rR   r(   r(   r)   %check_input_with_sparse_random_matrixq   s   rS   rD   c                 C   s   t |  t|  t|  d S r+   )rG   rI   rP   )rD   r(   r(   r)   $test_basic_property_of_random_matrixy   s   rT   c                 C   s"   t |  tj| dd}t| d S )NrK   rQ   )rS   	functoolspartialrP   )rD   random_matrix_denser(   r(   r)   +test_basic_property_of_sparse_random_matrix   s   rX   c                  C   sF   d} d}t | |dd}tdt|d ttj|ddd|  d d S )	Nr1   r0   r   rJ   r3   r=   r>   ddof)r   r   r   rL   var)rF   r#   rO   r(   r(   r)   test_gaussian_random_matrix   s
   r\   c               	   C   s  d} d}dD ]}d| }t | ||dd}t|}t|}t|t|  |v s+J t| t|  |v s:J |dkrHt|dksGJ nd	|v sNJ t|d
ksWJ tt|d	kdd|  dd tt|t|t|  kdd|  dd tt|t| t|  kdd|  dd ttj|d	kdddd|  d | dd ttj|t|t|  kddddd|   d d|  dd ttj|t| t|  kddddd|   d d|  dd qd S )Nr1   i  )g333333?rK   r>   r   )rR   r%   rK   r=   r3   r<   )decimalrY   )	r   r.   r   uniquesqrtr   r   rL   r[   )rF   r#   rR   srO   valuesr(   r(   r)   test_sparse_random_matrix   sD   
 	(*, "rb   rR   )r2   r   r4   c              	   C   sH   t D ]}tt || dt W d    n1 sw   Y  qd S )NrQ   )r   r8   r9   r:   fitdata)rR   RandomProjectionr(   r(   r)   9test_sparse_random_projection_transformer_invalid_density      rf   zn_components, fit_dataauto)r   r>   r=   ic              	   C   sH   t D ]}tt || d| W d    n1 sw   Y  qd S )NrF   )all_RandomProjectionr8   r9   r:   rc   )rF   fit_datare   r(   r(   r)   0test_random_projection_transformer_invalid_input   rg   rl   c               	   C   sH   t D ]} tt | ddt W d    n1 sw   Y  qd S )Nrh   ri   )rj   r8   r9   r:   	transformrd   )re   r(   r(   r)    test_try_to_transform_before_fit   s   rn   c               	   C   sf   t ddd\} }tD ]&}|ddd}d}tjt|d ||  W d    n1 s+w   Y  q
d S )Nr0   r1   rh   g?)rF   r7   z~eps=0.100000 and n_samples=1000 lead to a target dimension of 5920 which is larger than the original space with n_features=100)match)r*   rj   r8   r9   r:   rc   )rd   _re   rpexpected_msgr(   r(   r)   .test_too_many_samples_to_find_a_safe_embedding   s   rs   c            
      C   s   t ddd\} }d}t| dd}| }|dk}|| }tD ]4}|d|d	d
}|| }t|dd}| }|| }|| }	|	 d| k sHJ d| |	 k sRJ qd S )N   i  i:  g?T)squaredr3   rh   r   )rF   r7   r%   r>   )r*   r   ravelrj   fit_transformmaxmin)
rd   rp   r7   original_distancesnon_identicalre   rq   	projectedprojected_distancesdistances_ratior(   r(   r)   (test_random_projection_embedding_quality   s    
r   c                  C   s   t D ]J} | dddd}|t t|ttjsJ tt}t||tjs+J | dddd}|t}t|ttjsBJ t	||sLJ qd S )Nr/   Tr   )rF   dense_outputr%   F)
r   rc   rd   
isinstancerm   r   ndarrayr   
csr_matrixr,   )SparseRandomProjrq   sparse_datar(   r(   r)   +test_SparseRandomProj_output_representation  s   


r   c               	   C   sp  t D ]} | ddddt}|jdksJ |jdksJ | tv r.|jdks'J t|jdd |j	j
dtfks8J |t}|j
tdfksFJ |t}t|| | ddd}|t}t|| tt |td d d	d
f  W d    n1 s}w   Y  | tv r| dddd}|t}|j
tdfksJ |j	j
dtfksJ |j	jdk sJ d|j	jk sJ qd S )Nrh   r   r5   )rF   r%   r7   n   gQ?r=   )r%   r7   r>   rH   r1   gMbP?)rF   rR   r%   s   U   )rj   rc   rd   rF   n_components_r   rR   r   density_components_r   r#   rm   r"   r   rw   r8   r9   r:   nnz)re   rq   projected_1projected_2rp2projected_3r|   r(   r(   r)   2test_correct_RandomProjection_dimensions_embedding&  s6   





r   c               	   C   sh   d} t d| t| d \}}tD ]!}tt || d d| W d    n1 s,w   Y  qd S )N   rH      r>   ri   )r*   intrj   r8   warnsr   rc   )r#   rd   rp   re   r(   r(   r)   1test_warning_n_components_greater_than_n_featuresP  s   r   c                  C   sj   d} t d| t| d \}}tD ]"}|ddd|}|dddt|}tt|jt|j qd S )Nr   rH   r   r<   r>   )rF   r%   )	r*   r   rj   rc   r   r   r   r.   r   )r#   rd   rp   re   rp_dense	rp_sparser(   r(   r)   test_works_with_sparse_dataY  s   r   c                   C   s   t ddddks
J dS )zyTest Johnson-Lindenstrauss for small eps.

    Regression test for #17111: before #19374, 32-bit systems would fail.
    r1   h㈵>r6   l   JWNr   r(   r(   r(   r)   "test_johnson_lindenstrauss_min_dimg  s   r   random_projection_clsc                    sV   | dd}| t | }| j  tj fddt|jD t	d}t
|| d S )Nr=   ri   c                    s   g | ]}  | qS r(   r(   ).0iclass_name_lowerr(   r)   
<listcomp>v  s    z<test_random_projection_feature_names_out.<locals>.<listcomp>)dtype)rc   rd   get_feature_names_out__name__lowerr   arrayranger   objectr   )r   random_projection	names_outexpected_names_outr(   r   r)   (test_random_projection_feature_names_outo  s   


r   r"   )r=   	   r/      r0   r#   compute_inverse_componentsTFc              	   C   s   d}||||d}t | || | d d |d\}}||fD ][}	t  tjddtd ||	}
W d    n1 s;w   Y  |rUt|d	sIJ |j}|j||fksUJ |	|
}|j|	jksbJ |
|}t|
d
rp|
 }
t|
|ddd qd S )Nr/   )rF   r   r%   r1   r>   rJ   ignorez>The number of components is higher than the number of features)messagecategoryinverse_components_r    gHz>g|=)rtolatol)r*   warningscatch_warningsfilterwarningsr   rw   hasattrr   r   inverse_transformrm   r    r   )r"   r#   r   r   global_random_seedrF   r   X_denseX_csrXr|   inv_componentsprojected_backprojected_againr(   r(   r)   test_inverse_transform}  s@   





r   zinput_dtype, expected_dtypec                 C   sT   t jd}|dd}| dd}|||}|jj|ks!J |j|ks(J d S )N*        r   rJ   )r   r   r   randrw   astyper   r   )r   input_dtypeexpected_dtyper&   r   rq   transformedr(   r(   r)   "test_random_projection_dtype_match  s   
r   c                 C   st   d}t jd}|dd}| dd}| dd}||t j}||t j}t|||d t	|j
|j
 d S )Nr   r   r   r   r   rJ   )r   )r   r   r   r   rw   r   float32float64r   r   r   )r   r   r&   r   rp_32rp_64projection_32projection_64r(   r(   r)   ,test_random_projection_numerical_consistency  s   

r   )r   )HrU   typingr   r   r   numpyr   scipy.sparsesparser   r8   sklearn.metricsr   sklearn.random_projectionr   r   r   r	   r
   sklearn.utils._testingr   r   r   r   r   sklearn.exceptionsr   r   __annotations__r   all_random_matrixr   r   rj   r*   r.   r"   r#   r   r$   rd   data_csrmarkparametrizer;   r@   rG   rI   rP   rS   rT   rX   r\   rb   rf   rl   rn   rs   r   r   r   r   r   r   r   r   r   r   int32int64r   r   r(   r(   r(   r)   <module>   s   
 

	


9

*	
/



	