o
    iL                  	   @   sN  U d dl Z 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mZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZmZmZ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$		dVddZ%dd Z&d\Z'Z(e)e'e( d Z*ej+,dddgddgfddgddgfddgddgfgdd Z-d d! Z.d"d# Z/d$d% Z0d&d' Z1d(d) Z2ej+,d*e!d+d, Z3ej+,d*ed-d. Z4d/d0 Z5d1d2 Z6d3d4 Z7ej+,d5ed6d7 Z8ej+,d5ed8d9 Z9ej+,d5ed:d; Z:ej+,d5ed<d= Z;ej+,d5ed>d? Z<ej+,d5ed@dA Z=ej+,d5edBdC Z>dDdE Z?ej+,d5eej+,dFe$dGdH Z@ej+,d5eej+,dIdJej+,dKdJej+,dFe$ej+,dLdMdNgdOdP ZAej+,dFe$ej+,dQejBejBfejCejCfejDejCfejEejCffdRdS ZFej+,dFe$dTdU ZGdS )W    N)AnyList)DataDimensionalityWarningNotFittedError)euclidean_distances)GaussianRandomProjectionSparseRandomProjection_gaussian_random_matrix_sparse_random_matrixjohnson_lindenstrauss_min_dim)assert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equal)COO_CONTAINERSall_sparse_random_matrixall_dense_random_matrixall_SparseRandomProjectionall_DenseRandomProjectioncsrc                 C   sX   t j|}| |||j||d|j||dff||fd}|dur(||S | S )zMake some random data with uniformly located non zero entries with
    Gaussian distributed values; `sparse_format` can be `"csr"` (default) or
    `None` (in which case a dense array is returned).
    sizeshapeN)nprandomRandomStateZrandnrandintZasformattoarray)coo_container	n_samples
n_features
n_nonzerosrandom_statesparse_formatrngZdata_coo r'   s/var/www/html/eduruby.in/lip-sync/lip-sync-env/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)spissparser   )matrixr'   r'   r(   densifyA   s   
r.   )
     g      Y@zn_samples, epsd   n   ?皙?Z   皙?        2   i皙?c                 C   s<   t t t| |d W d    d S 1 sw   Y  d S )Neps)pytestraises
ValueErrorr   )r!   r;   r'   r'   r(   test_invalid_jl_domainQ   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      r3   r:      r/   )r/   r/   r         ?)r<   r=   r>   r   r   r   r   fullr'   r'   r'   r(   test_input_size_jl_min_dim^   s   
rE   c              	   C   sN   g d}|D ]\}}t t | || W d    n1 sw   Y  qd S )N))r   r   )rB   )rB   rF   )rB   r   )rF   r   r<   r=   r>   random_matrixZinputsn_componentsr"   r'   r'   r(   check_input_size_random_matrixj   s   rK   c                 C   s2   g d}|D ]\}}| ||j ||fksJ qd S )N))rB      )rL   rB   )rL   rL   )rB   rB   r   rH   r'   r'   r(   check_size_generatedq   s   
rM   c                 C   s<   t | dddd}tdt|d tdtj|d d S )Ni'  rB   r   r$   r@         ?)r.   r   r   meanZlinalgZnorm)rI   Ar'   r'   r(   check_zero_mean_and_unit_normz   s   rR   c              	   C   sN   d\}}dD ]}t t | |||d W d    n1 sw   Y  qd S )N)rL   r/   )g      r7   r4   densityrG   )rI   rJ   r"   rT   r'   r'   r(   %check_input_with_sparse_random_matrix   s   rU   rI   c                 C   s   t |  t|  t|  d S r*   )rK   rM   rR   )rI   r'   r'   r(   $test_basic_property_of_random_matrix   s   rV   c                 C   s"   t |  tj| dd}t| d S )NrO   rS   )rU   	functoolspartialrR   )rI   Zrandom_matrix_denser'   r'   r(   +test_basic_property_of_sparse_random_matrix   s   rY   c                  C   sF   d} d}t | |dd}tdt|d ttj|ddd|  d d S )	Nr1   r0   r   rN   r7   rA   rB   Zddof)r	   r   r   rP   var)rJ   r"   rQ   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?rO   rB   r   )rT   r$   rO   rA   r7   r@   )decimalrZ   )	r
   r.   r   uniquesqrtr   r   rP   r[   )rJ   r"   rT   srQ   valuesr'   r'   r(   test_sparse_random_matrix   sD   
 	(*, "rb   c               	   C   sV   d} g dg}t D ]}tt || d| W d    n1 s#w   Y  q	d S )Nauto)r   rB   rA   rJ   )all_RandomProjectionr<   r=   r>   fit)rJ   Zfit_dataRandomProjectionr'   r'   r(   0test_random_projection_transformer_invalid_input   s   
rh   r    c              	   C   s\   t | ttt|d d}tD ]}tt |dd| W d    n1 s&w   Y  qd S )Nr$   r%   rc   rd   )	r)   r!   r"   r#   re   r<   r=   r   	transform)r    global_random_seeddatarg   r'   r'   r(    test_try_to_transform_before_fit   s   rm   c              	   C   sj   t | dd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   r!   r"   r#   r$   r%   rc   r6   )rJ   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)   re   r<   r=   r>   rf   )r    rk   rl   rg   rpZexpected_msgr'   r'   r(   .test_too_many_samples_to_find_a_safe_embedding   s"   	rq   c           
      C   s   t | ddddd d}d}t|dd}| }|d	k}|| }tD ]4}|d
|dd}||}t|dd}| }|| }|| }	|	 d| k sJJ d| |	 k sTJ q d S )N   i  i:  r   rn   r9   T)Zsquaredr7   rc   )rJ   r;   r$   rB   )r)   r   Zravelre   fit_transformmaxmin)
r    rl   r;   Zoriginal_distancesZnon_identicalrg   rp   	projectedZprojected_distancesZdistances_ratior'   r'   r(   (test_random_projection_embedding_quality  s.   
rw   c                 C   s   t | tttdd d}t | tttddd}tD ]E}|dddd}|| t||tj	s/J t||tj	s:J |dddd}||}t||tj	sQJ t
||s[J qd S )Nr   ri   r   r/   T)rJ   Zdense_outputr$   F)r)   r!   r"   r#   r   rf   
isinstancerj   r   Zndarrayr+   r,   )r    
dense_datasparse_dataZSparseRandomProjrp   r'   r'   r(   +test_SparseRandomProj_output_representation7  s4   

r{   c           
   	   C   s  t | ttt|d d}tD ]}|dddd|}|jdksJ |jdks&J |tv r8|j	dks1J t
|jdd |jjdtfksBJ ||}|jtdfksPJ ||}t|| |ddd	}||}t|| tt ||d d d
df  W d    n1 sw   Y  |tv r|dddd}||}	|	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 )Nri   rc   r   rC   )rJ   r$   r;   r2   gQ?rA   )r$   r;   rB   rL   r1   gMbP?)rJ   rT   r$   s   U   )r)   r!   r"   r#   re   rf   rJ   n_components_r   rT   r   Zdensity_components_r   rj   r   rs   r<   r=   r>   Znnz)
r    rk   rl   rg   rp   Zprojected_1Zprojected_2Zrp2Zprojected_3rv   r'   r'   r(   2test_correct_RandomProjection_dimensions_embedding[  sF   





r   c              	   C   st   d}d}t |d }t| ||||d d}tD ]!}tt ||d d| W d    n1 s2w   Y  qd S )N   rL      ri   rB   rd   )intr)   re   r<   Zwarnsr   rf   )r    rk   r"   r!   r#   rl   rg   r'   r'   r(   1test_warning_n_components_greater_than_n_features  s"   	r   c           
      C   s   d}d}t |d }t| ||||d d}t| ||||dd}tD ]}|ddd|}|ddd|}	tt|jt|	j q d S )	Nr   rL   r   ri   r   r@   rB   )rJ   r$   )r   r)   re   rf   r   r.   r   )
r    rk   r"   r!   r#   ry   rz   rg   Zrp_denseZ	rp_sparser'   r'   r(   test_works_with_sparse_data  s4   	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㈵>r:   l   JWN)r   r'   r'   r'   r(   "test_johnson_lindenstrauss_min_dim  s   r   random_projection_clsc                    sj   t | ttt|d d}|dd}|| | }|j  tj	 fddt
|jD td}t|| d S )Nri   rA   rd   c                    s   g | ]}  | qS r'   r'   ).0iZclass_name_lowerr'   r(   
<listcomp>  s    z<test_random_projection_feature_names_out.<locals>.<listcomp>)dtype)r)   r!   r"   r#   rf   Zget_feature_names_out__name__lowerr   arrayranger~   objectr   )r    r   rk   rl   random_projectionZ	names_outZexpected_names_outr'   r   r(   (test_random_projection_feature_names_out  s"   


r   r!   )rA   	   r/      r0   r"   compute_inverse_componentsTFc              	   C   s  d}||||d}t | |||| d d |d d}t | |||| d d |dd}	||	fD ][}
t  tjddtd	 ||
}W d    n1 sKw   Y  |ret|d
sYJ |j}|j||fkseJ |	|}|j|
jksrJ |
|}t|dr| }t||ddd q-d S )Nr/   )rJ   r   r$   r1   rB   )r#   r$   r%   r   ignorez>The number of components is higher than the number of features)messagecategoryinverse_components_r   gHz>g|=)Zrtolatol)r)   warningscatch_warningsfilterwarningsr   rs   hasattrr   r   Zinverse_transformrj   r   r   )r    r!   r"   r   r   rk   rJ   r   ZX_denseZX_csrXrv   Zinv_componentsZprojected_backZprojected_againr'   r'   r(   test_inverse_transform  sT   	




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   rN   )r   r   r   randrs   astyper   r   )r   Zinput_dtypeZexpected_dtyper&   r   rp   Z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   rN   )r   )r   r   r   r   rs   r   float32float64r   r   r   )r   r   r&   r   Zrp_32Zrp_64Zprojection_32Zprojection_64r'   r'   r(   ,test_random_projection_numerical_consistency:  s   

r   )Nr   )HrW   r   typingr   r   numpyr   r<   Zscipy.sparsesparser+   Zsklearn.exceptionsr   r   Zsklearn.metricsr   Zsklearn.random_projectionr   r   r	   r
   r   Zsklearn.utils._testingr   r   r   r   r   Zsklearn.utils.fixesr   r   __annotations__r   Zall_random_matrixr   r   re   r)   r.   r!   r"   r   r#   markZparametrizer?   rE   rK   rM   rR   rU   rV   rY   r\   rb   rh   rm   rq   rw   r{   r   r   r   r   r   r   r   r   Zint32Zint64r   r   r'   r'   r'   r(   <module>   s   
 

	


9


%
#
4

:



	