a
    ;Za3                     @   sF  U d dl Z d dlmZm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 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e Zd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" Z.d#d$ Z/e	j()d%ed&d' Z0e	j()d%ed(d) Z1d*d+ Z2d,d- Z3e	j()d.g d/d0d1 Z4e	j()d2d3g d4gfd5e&fgd6d7 Z5d8d9 Z6d:d; Z7d<d= Z8d>d? Z9d@dA Z:dBdC Z;dDdE Z<dFdG Z=dS )H    N)ListAny)euclidean_distancesjohnson_lindenstrauss_min_dim)_gaussian_random_matrix)_sparse_random_matrix)SparseRandomProjection)GaussianRandomProjection)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d}tj|||j| |d|j||dff| |fd}| | fS )Nr   sizeshape)	nprandomZRandomStatespZ
coo_matrixZrandnrandinttoarrayZtocsr)	n_samples
n_features
n_nonzerosrngZdata_coo r    Clib/python3.9/site-packages/sklearn/tests/test_random_projection.pymake_sparse_random_data    s    
r"   c                 C   s   t | s| S |  S d S N)r   issparser   )Zmatrixr    r    r!   densify/   s    
r%   )
     g      Y@zn_samples, eps))d   皙?)r(           )r(   皙)r         ?c                 C   s:   t t t| |d W d    n1 s,0    Y  d S )Neps)pytestraises
ValueErrorr   )r   r.   r    r    r!   test_invalid_jl_domain@   s    r2   c                   C   sh   t t( tddg ddg d W d    n1 s80    Y  ttjjdddd	tdd
d d S )N   r(      g?r-      r&   )r&   r&   r   r,   )r/   r0   r1   r   r   r   r   Zfullr    r    r    r!   test_input_size_jl_min_dimH   s
    6r6   c              	   C   sN   g d}|D ]<\}}t t | || W d    q1 s>0    Y  qd S )N))r   r   )r5   )r5   r7   )r5   r   )r7   r   r/   r0   r1   random_matrixZinputsn_componentsr   r    r    r!   check_input_size_random_matrixT   s    r<   c                 C   s2   g d}|D ] \}}| ||j ||fksJ qd S )N))r5      )r=   r5   )r=   r=   )r5   r5   r   r9   r    r    r!   check_size_generated[   s    
r>   c                 C   s<   t | dddd}tdt|d tdtj|d d S )Ni'  r5   r   random_stater3         ?)r%   r   r   meanZlinalgZnorm)r:   Ar    r    r!   check_zero_mean_and_unit_normd   s    rD   c              	   C   sN   d\}}dD ]<}t t | |||d W d    q1 s>0    Y  qd S )N)r=   r&   )g      r*   r)   densityr8   )r:   r;   r   rF   r    r    r!   %check_input_with_sparse_random_matrixn   s    rG   r:   c                 C   s   t |  t|  t|  d S r#   )r<   r>   rD   )r:   r    r    r!   $test_basic_property_of_random_matrixv   s    rH   c                 C   s"   t |  tj| dd}t| d S )NrA   rE   )rG   	functoolspartialrD   )r:   Zrandom_matrix_denser    r    r!   +test_basic_property_of_sparse_random_matrix~   s    rK   c                  C   sF   d} d}t | |dd}tdt|d ttj|ddd|  d d S )	Nr(   r'   r   r?   r*   r4   r5   Zddof)r   r   r   rB   var)r;   r   rC   r    r    r!   test_gaussian_random_matrix   s
    rN   c               	   C   s  d} d}dD ]}d| }t | ||dd}t|}t|}t|t|  |v sXJ t| t|  |v svJ |dkrt|dksJ nd	|v sJ t|d
ksJ 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 )Nr(   i  )g333333?rA   r5   r   )rF   r@   rA   r4   r*   r3   )ZdecimalrL   )	r   r%   r   uniqueZsqrtr   r   rB   rM   )r;   r   rF   srC   valuesr    r    r!   test_sparse_random_matrix   sB    

	 (*, "rR   rF   )r)   r   r+   c              	   C   sH   t D ]>}tt  || dt W d    q1 s80    Y  qd S )NrE   )r   r/   r0   r1   fitdata)rF   RandomProjectionr    r    r!   9test_sparse_random_projection_transformer_invalid_density   s    rV   zn_components, fit_dataauto)r   r5   r4   ic              	   C   sH   t D ]>}tt  || d| W d    q1 s80    Y  qd S )Nr;   )all_RandomProjectionr/   r0   r1   rS   )r;   Zfit_datarU   r    r    r!   0test_random_projection_transformer_invalid_input   s    rZ   c               	   C   sH   t D ]>} tt  | ddt W d    q1 s80    Y  qd S )NrW   rX   )rY   r/   r0   r1   	transformrT   )rU   r    r    r!    test_try_to_transform_before_fit   s    r\   c               	   C   sf   t ddd\} }tD ]L}|ddd}d}tjt|d ||  W d    q1 sV0    Y  qd S )Nr'   r(   rW   g?)r;   r.   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"   rY   r/   r0   r1   rS   )rT   _rU   rpZexpected_msgr    r    r!   .test_too_many_samples_to_find_a_safe_embedding   s    r`   c            
      C   s   t ddd\} }d}t| dd}| }|dk}|| }tD ]h}|d|d	d
}|| }t|dd}| }|| }|| }	|	 d| k sJ d| |	 k s<J q<d S )N   i  i:  g?T)Zsquaredr*   rW   r   )r;   r.   r@   r5   )r"   r   ZravelrY   fit_transformmaxmin)
rT   r^   r.   Zoriginal_distancesZnon_identicalrU   r_   	projectedZprojected_distancesZdistances_ratior    r    r!   (test_random_projection_embedding_quality   s    
rf   c                  C   s   t D ]} | dddd}|t t|ttjs6J tt}t||tjsVJ | dddd}|t}t|ttjsJ t	||sJ qd S )Nr&   Tr   )r;   Zdense_outputr@   F)
r   rS   rT   
isinstancer[   r   Zndarrayr   
csr_matrixr$   )ZSparseRandomProjr_   Zsparse_datar    r    r!   +test_SparseRandomProj_output_representation  s    


ri   c               	   C   sx  t D ]l} | ddddt}|jdks,J |jdks:J | tv r^|jdksPJ t|jdd |j	j
dtfksrJ |t}|j
tdfksJ |t}t|| | ddd}|t}t|| tt* |td d d	d
f  W d    n1 s0    Y  | tv r| dddd}|t}|j
tdfks:J |j	j
dtfksPJ |j	jdk sbJ d|j	jk sJ qd S )NrW   r   r,   )r;   r@   r.   n   gQ?r4   )r@   r.   r5   r=   r(   gMbP?)r;   rF   r@   s   U   )rY   rS   rT   r;   Zn_components_r   rF   r   Zdensity_components_r   r   r[   r   r   rb   r/   r0   r1   Znnz)rU   r_   Zprojected_1Zprojected_2Zrp2Zprojected_3re   r    r    r!   2test_correct_RandomProjection_dimensions_embedding#  s0    





8
rn   c               	   C   sh   d} t d| t| d \}}tD ]B}tt$ || d d| W d    q 1 sX0    Y  q d S )N   r=      r5   rX   )r"   intrY   r/   Zwarnsr   rS   )r   rT   r^   rU   r    r    r!   1test_warning_n_components_greater_than_n_featuresM  s
    rr   c                  C   sj   d} t d| t| d \}}tD ]D}|ddd|}|dddt|}tt|jt|j q d S )Nro   r=   rp   r3   r5   )r;   r@   )	r"   rq   rY   rS   r   rh   r   r%   rm   )r   rT   r^   rU   Zrp_denseZ	rp_sparser    r    r!   test_works_with_sparse_dataV  s    rs   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.
    r(   gh㈵>r-   l   JWNr   r    r    r    r!   "test_johnson_lindenstrauss_min_dimd  s    rt   )>rI   typingr   r   Znumpyr   Zscipy.sparseZsparser   r/   Zsklearn.metricsr   Zsklearn.random_projectionr   r   r   r	   r
   Zsklearn.utils._testingr   r   r   Zsklearn.exceptionsr   r   __annotations__r   Zall_random_matrixr   r   setrY   r"   r%   r   r   rq   r   rT   Zdata_csrZmarkZparametrizer2   r6   r<   r>   rD   rG   rH   rK   rN   rR   rV   rZ   r\   r`   rf   ri   rn   rr   rs   rt   r    r    r    r!   <module>   sh   

	


9

*	