a
    ¶ÀhL  ã                	   @   sJ  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   s\   t j |¡}| | |¡|j||d|j||dff||fd}|durP| |¡S | ¡ S dS )zÊMake 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'   ú`/var/www/html/assistant/venv/lib/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)ÚspÚissparser   )Úmatrixr'   r'   r(   ÚdensifyA   s    
r.   )é
   éè  g      Y@zn_samples, epséd   én   çÍÌÌÌÌÌì?çš™™™™™ñ?éZ   çš™™™™™¹?ç        é2   iØÿÿÿçš™™™™™É?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_domainQ   s    	r?   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é   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
    6ÿrE   c              	   C   sN   g d¢}|D ]<\}}t  t¡ | ||ƒ W d   ƒ q1 s>0    Y  qd S )N))r   r   )éÿÿÿÿrB   )rB   rF   )rB   r   )rF   r   ©r<   r=   r>   ©Úrandom_matrixÚinputsÚn_componentsr"   r'   r'   r(   Úcheck_input_size_random_matrixj   s    rL   c                 C   s2   g d¢}|D ] \}}| ||ƒj ||fksJ ‚qd S )N))rB   é   )rM   rB   )rM   rM   )rB   rB   r   rH   r'   r'   r(   Úcheck_size_generatedq   s    
þrN   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    rS   c              	   C   sN   d\}}dD ]<}t  t¡ | |||d W d   ƒ q1 s>0    Y  qd S )N)rM   r/   )g      ð¿r7   r4   ©ÚdensityrG   )rI   rK   r"   rU   r'   r'   r(   Ú%check_input_with_sparse_random_matrix„   s    rV   rI   c                 C   s   t | ƒ t| ƒ t| ƒ d S r*   )rL   rN   rS   )rI   r'   r'   r(   Ú$test_basic_property_of_random_matrixŒ   s    rW   c                 C   s"   t | ƒ tj| dd}t|ƒ d S )NrP   rT   )rV   Ú	functoolsÚpartialrS   )rI   Zrandom_matrix_denser'   r'   r(   Ú+test_basic_property_of_sparse_random_matrix”   s    rZ   c                  C   sF   d} d}t | |dd}tdt |¡dƒ ttj|ddd|  dƒ d S )	Nr1   r0   r   rO   r7   rA   rB   ©Zddof)r	   r   r   rQ   Úvar)rK   r"   rR   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 sXJ ‚t |¡ t | ¡ |v svJ ‚|dkr’t |¡dks°J ‚nd	|v sžJ ‚t |¡d
ks°J ‚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Ó?rP   rB   r   )rU   r$   rP   rA   r7   r@   )Údecimalr[   )	r
   r.   r   ÚuniqueÚsqrtr   r   rQ   r\   )rK   r"   rU   ÚsrR   Úvaluesr'   r'   r(   Útest_sparse_random_matrix«   sB    
ÿ
	 (ÿ*ÿ, ý"ýrc   c               	   C   sV   d} g d¢g}t D ]>}t t¡  || d |¡ W d   ƒ q1 sF0    Y  qd S )NÚauto)r   rB   rA   ©rK   )Úall_RandomProjectionr<   r=   r>   Úfit)rK   Zfit_dataÚRandomProjectionr'   r'   r(   Ú0test_random_projection_transformer_invalid_inputä   s
    
ri   r    c              	   C   s\   t | ttt|d d}tD ]>}t t¡  |dd |¡ W d   ƒ q1 sL0    Y  qd S )N©r$   r%   rd   re   )	r)   r!   r"   r#   rf   r<   r=   r   Ú	transform)r    Úglobal_random_seedÚdatarh   r'   r'   r(   Ú test_try_to_transform_before_fitì   s    úrn   c              	   C   sj   t | ddd|d d}tD ]L}|ddd}d}tjt|d | |¡ W d   ƒ q1 sZ0    Y  qd S )	Nr0   r1   ©r!   r"   r#   r$   r%   rd   r6   )rK   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)   rf   r<   r=   r>   rg   )r    rl   rm   rh   ÚrpZexpected_msgr'   r'   r(   Ú.test_too_many_samples_to_find_a_safe_embeddingû   s    ú	ÿrr   c           
      C   s®   t | ddddd d}d}t|dd}| ¡ }|d	k}|| }tD ]h}|d
|dd}| |¡}t|dd}| ¡ }|| }|| }	|	 ¡ d| k s”J ‚d| |	 ¡ k s@J ‚q@d S )Né   iˆ  i˜:  r   ro   r9   T)Zsquaredr7   rd   )rK   r;   r$   rB   )r)   r   Zravelrf   Úfit_transformÚmaxÚmin)
r    rm   r;   Zoriginal_distancesZnon_identicalrh   rq   Ú	projectedZprojected_distancesZdistances_ratior'   r'   r(   Ú(test_random_projection_embedding_quality  s,    ú
rx   c                 C   s¼   t | tttdd d}t | tttddd}tD ]Š}|dddd}| |¡ t| |¡tj	ƒs^J ‚t| |¡tj	ƒstJ ‚|dddd}| |¡}t| |¡tj	ƒs¢J ‚t
 | |¡¡s,J ‚q,d S )Nr   rj   r   r/   T)rK   Zdense_outputr$   F)r)   r!   r"   r#   r   rg   Ú
isinstancerk   r   Zndarrayr+   r,   )r    Ú
dense_dataÚsparse_dataZSparseRandomProjrq   r'   r'   r(   Ú+test_SparseRandomProj_output_representation7  s2    úú

r|   c           
   	   C   sŽ  t | ttt|d d}tD ]n}|dddd |¡}|jdks@J ‚|jdksNJ ‚|tv rr|j	dksdJ ‚t
|jddƒ |jjdtfks†J ‚| |¡}|jtdfks¢J ‚| |¡}t||ƒ |ddd	}| |¡}t||ƒ t t¡* | |d d …d
d…f ¡ W d   ƒ n1 s0    Y  |tv r|dddd}| |¡}	|	jtdfksPJ ‚|jjdtfksfJ ‚|jjdk sxJ ‚d|jjk sJ ‚qd S )Nrj   rd   r   rC   )rK   r$   r;   r2   g¸…ëQ¸ž?rA   )r$   r;   rB   rM   r1   gü©ñÒMbP?)rK   rU   r$   és   éU   )r)   r!   r"   r#   rf   rg   rK   Ún_components_r   rU   r   Zdensity_Úcomponents_r   rk   r   rt   r<   r=   r>   Znnz)
r    rl   rm   rh   rq   Zprojected_1Zprojected_2Zrp2Zprojected_3rw   r'   r'   r(   Ú2test_correct_RandomProjection_dimensions_embedding[  s@    ú





:
r   c              	   C   st   d}d}t |d ƒ}t| ||||d d}tD ]B}t t¡$ ||d d |¡ W d   ƒ q,1 sd0    Y  q,d S )Né   rM   é   rj   rB   re   )Úintr)   rf   r<   Zwarnsr   rg   )r    rl   r"   r!   r#   rm   rh   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‚   rM   rƒ   rj   r   r@   rB   )rK   r$   )r„   r)   rf   rg   r   r.   r€   )
r    rl   r"   r!   r#   rz   r{   rh   Zrp_denseZ	rp_sparser'   r'   r(   Útest_works_with_sparse_data¥  s2    úú	ÿ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 )Nrj   rA   re   c                    s   g | ]}ˆ › |› ‘qS r'   r'   )Ú.0Úi©Zclass_name_lowerr'   r(   Ú
<listcomp>Ý  ó    z<test_random_projection_feature_names_out.<locals>.<listcomp>)Údtype)r)   r!   r"   r#   rg   Zget_feature_names_outÚ__name__Úlowerr   ÚarrayÚranger   Úobjectr   )r    r‰   rl   rm   Ú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 s–0    Y  |rÊt|d
ƒs²J ‚|j}|j||fksÊJ ‚| 	|¡}|j|
jksäJ ‚| 
|¡}t|dƒr| ¡ }t||ddd qZd S )Nr/   )rK   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   gH¯¼šò×z>g»½×Ùß|Û=)ZrtolÚatol)r)   ÚwarningsÚcatch_warningsÚfilterwarningsr   rt   Úhasattrr   r   Zinverse_transformrk   r   r   )r    r!   r"   r‰   r™   rl   rK   r•   ZX_denseZX_csrÚXrw   Zinv_componentsZprojected_backZprojected_againr'   r'   r(   Útest_inverse_transformä  sP    ýúú	
û(

r¤   zinput_dtype, expected_dtypec                 C   sT   t j d¡}| dd¡}| dd}| | |¡¡}|jj|ksBJ ‚|j|ksPJ ‚d S )Né*   é   é¸  r   rO   )r   r   r   Úrandrt   Úastyper€   r   )r‰   Zinput_dtypeZexpected_dtyper&   r£   rq   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   rO   )rž   )r   r   r   r¨   rt   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   )HrX   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   rf   r)   r.   r!   r"   r„   r#   ÚmarkZparametrizer?   rE   rL   rN   rS   rV   rW   rZ   r]   rc   ri   rn   rr   rx   r|   r   r…   r†   rˆ   r–   r¤   r«   r¬   Zint32Zint64rª   r­   r'   r'   r'   r(   Ú<module>   sœ   
  ú
ýþ
	


9


%
#
4

:



üþ	