U
    ¿9%e‰@  ã                	   @   sÌ  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 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 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!dSdd„Z"dd„ Z#d\Z$Z%e&e$e% d ƒZ'e"e$e%e'ƒ\Z(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#„ Z/d$d%„ Z0d&d'„ Z1ej* +d(e¡d)d*„ ƒZ2ej* +d(e¡d+d,„ ƒZ3d-d.„ Z4d/d0„ Z5d1d2„ Z6d3d4„ Z7d5d6„ Z8d7d8„ Z9d9d:„ Z:d;d<„ Z;d=d>„ Z<d?d@„ Z=dAdB„ Z>ej* +dCe!¡dDdE„ ƒZ?ej* +dFdG¡ej* +dHdG¡ej* +dCe!¡ej* +dIdJdKg¡dLdM„ ƒƒƒƒZ@ej* +dCe!¡ej* +dNejAejAfejBejBfejCejBfejDejBff¡dOdP„ ƒƒZEej* +dCe!¡dQdR„ ƒZFdS )Té    N)ÚAnyÚList)ÚDataDimensionalityWarning)Ú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Ú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ÚspZ
coo_matrixZrandnÚrandintÚtoarrayZtocsr)Ú	n_samplesÚ
n_featuresÚ
n_nonzerosÚrandom_stateÚrngZdata_coo© r"   úc/var/www/html/Darija-Ai-API/env/lib/python3.8/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   )Úmatrixr"   r"   r#   Údensify4   s    
r(   )é
   éè  g      Y@zn_samples, epséd   én   çÍÌÌÌÌÌì?çš™™™™™ñ?éZ   çš™™™™™¹?ç        é2   iØÿÿÿçš™™™™™É?c              	   C   s&   t  t¡ t| |d W 5 Q R X d S )N©Úeps)ÚpytestÚraisesÚ
ValueErrorr
   )r   r5   r"   r"   r#   Útest_invalid_jl_domainE   s    	r9   c                	   C   sT   t  t¡ tddg ddg d W 5 Q R X ttjjdddd	t dd
¡d d S )Né   r+   é   r-   r4   é   r)   )r)   r)   r   ç      à?)r6   r7   r8   r
   r   r   r   Úfullr"   r"   r"   r#   Útest_input_size_jl_min_dimR   s    " 
ÿr?   c              
   C   s@   dddddg}|D ](\}}t  t¡ | ||ƒ W 5 Q R X qd S )N)r   r   )éÿÿÿÿr<   )r<   r@   )r<   r   )r@   r   ©r6   r7   r8   ©Úrandom_matrixÚinputsÚn_componentsr   r"   r"   r#   Úcheck_input_size_random_matrix^   s    rF   c                 C   s6   ddddg}|D ] \}}| ||ƒj ||fkst‚qd S )N)r<   é   )rG   r<   )rG   rG   )r<   r<   )r   ÚAssertionErrorrB   r"   r"   r#   Úcheck_size_generatede   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   ÚmeanZlinalgZnorm)rC   ÚAr"   r"   r#   Úcheck_zero_mean_and_unit_normn   s    rN   c              
   C   s:   d\}}dD ](}t  t¡ | |||d W 5 Q R X qd S )N)rG   r)   )g      ð¿r1   r.   ©ÚdensityrA   )rC   rE   r   rP   r"   r"   r#   Ú%check_input_with_sparse_random_matrixx   s    rQ   rC   c                 C   s   t | ƒ t| ƒ t| ƒ d S r%   )rF   rI   rN   )rC   r"   r"   r#   Ú$test_basic_property_of_random_matrix€   s    rR   c                 C   s"   t | ƒ tj| dd}t|ƒ d S )NrK   rO   )rQ   Ú	functoolsÚpartialrN   )rC   Zrandom_matrix_denser"   r"   r#   Ú+test_basic_property_of_sparse_random_matrixˆ   s    rU   c                  C   sF   d} d}t | |dd}tdt |¡dƒ ttj|ddd|  dƒ d S )	Nr+   r*   r   rJ   r1   r;   r<   ©Zddof)r   r   r   rL   Úvar)rE   r   rM   r"   r"   r#   Útest_gaussian_random_matrix‘   s
    rX   c               	   C   sî  d} d}dD ]Ú}d| }t | ||dd}t|ƒ}t |¡}t |¡t | ¡ |ksXt‚t |¡ t | ¡ |ksvt‚|dkr’t |¡dks°t‚nd	|ksžt‚t |¡d
ks°t‚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Ó?rK   r<   r   )rP   r    rK   r;   r1   r:   )ÚdecimalrV   )
r	   r(   r   ÚuniqueÚsqrtrH   r   r   rL   rW   )rE   r   rP   ÚsrM   Úvaluesr"   r"   r#   Útest_sparse_random_matrixŸ   sP    
   ÿ
	  
 ÿ 
 ÿ, ý"ýr^   c               
   C   sD   d} dddgg}t D ]*}t t¡ || d |¡ W 5 Q R X qd S )NÚautor   r<   r;   ©rE   )Úall_RandomProjectionr6   r7   r8   Úfit)rE   Zfit_dataÚRandomProjectionr"   r"   r#   Ú0test_random_projection_transformer_invalid_inputØ   s
    rd   c               
   C   s4   t D ]*} t t¡ | dd t¡ W 5 Q R X qd S )Nr_   r`   )ra   r6   r7   r8   Ú	transformÚdata)rc   r"   r"   r#   Ú test_try_to_transform_before_fità   s    rg   c               
   C   sR   t dddƒ\} }tD ]8}|ddd}d}tjt|d | | ¡ W 5 Q R X qd S )Nr*   r+   r_   r0   )rE   r5   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$   ra   r6   r7   r8   rb   )rf   Ú_rc   ÚrpZexpected_msgr"   r"   r#   Ú.test_too_many_samples_to_find_a_safe_embeddingæ   s    ÿrk   c            
      C   sª   t dddƒ\} }d}t| dd}| ¡ }|dk}|| }tD ]h}|d|d	d
}| | ¡}t|dd}| ¡ }|| }|| }	|	 ¡ d| k st‚d| |	 ¡ k s<t‚q<d S )Né   iˆ  i˜:  r3   T)Zsquaredr1   r_   r   )rE   r5   r    r<   )r$   r   Zravelra   Úfit_transformÚmaxrH   Úmin)
rf   ri   r5   Zoriginal_distancesZnon_identicalrc   rj   Ú	projectedZprojected_distancesZdistances_ratior"   r"   r#   Ú(test_random_projection_embedding_qualityô   s    
rq   c                  C   sž   t D ]”} | dddd}| t¡ t| t¡tjƒs6t‚t 	t¡}t| |¡tjƒsVt‚| dddd}| t¡}t| t¡tjƒs„t‚t 
| |¡¡st‚qd S )Nr)   Tr   )rE   Zdense_outputr    F)r   rb   rf   Ú
isinstancere   r   ZndarrayrH   r   Ú
csr_matrixr&   )ZSparseRandomProjrj   Zsparse_datar"   r"   r#   Ú+test_SparseRandomProj_output_representation  s    


rt   c               
   C   sd  t D ]X} | dddd t¡}|jdks,t‚|jdks:t‚| tkr^|jdksPt‚t|j	ddƒ |j
jdtfksrt‚| t¡}|jtdfksŽt‚| t¡}t||ƒ | ddd}| t¡}t||ƒ t t¡  | td d …d	d
…f ¡ W 5 Q R X | tkr| dddd}| t¡}|jtdfks&t‚|j
jdtfks<t‚|j
jdk sNt‚d|j
jk st‚qd S )Nr_   r   r=   )rE   r    r5   r,   g¸…ëQ¸ž?r;   )r    r5   r<   rG   r+   gü©ñÒMbP?)rE   rP   r    és   éU   )ra   rb   rf   rE   rH   Ún_components_r   rP   r   Zdensity_Úcomponents_r   r   re   r   r   rm   r6   r7   r8   Znnz)rc   rj   Zprojected_1Zprojected_2Zrp2Zprojected_3rp   r"   r"   r#   Ú2test_correct_RandomProjection_dimensions_embedding'  s0    





$
ry   c               
   C   sT   d} t d| t| d ƒƒ\}}tD ].}t t¡ || d d |¡ W 5 Q R X q d S )Né   rG   é   r<   r`   )r$   Úintra   r6   Zwarnsr   rb   )r   rf   ri   rc   r"   r"   r#   Ú1test_warning_n_components_greater_than_n_featuresQ  s
    r}   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 )Nrz   rG   r{   r:   r<   )rE   r    )	r$   r|   ra   rb   r   rs   r   r(   rx   )r   rf   ri   rc   Zrp_denseZ	rp_sparser"   r"   r#   Útest_works_with_sparse_dataZ  s    ÿ ÿr~   c                   C   s   t ddddkst‚dS )zyTest Johnson-Lindenstrauss for small eps.

    Regression test for #17111: before #19374, 32-bit systems would fail.
    r+   çñhãˆµøä>r4   l   JžWN)r
   rH   r"   r"   r"   r#   Ú"test_johnson_lindenstrauss_min_dimh  s    r€   Úrandom_projection_clsc                    sV   | dd}|  t¡ | ¡ }| j ¡ ‰ tj‡ fdd„t|jƒD ƒt	d}t
||ƒ d S )Nr;   r`   c                    s   g | ]}ˆ › |› ‘qS r"   r"   )Ú.0Úi©Zclass_name_lowerr"   r#   Ú
<listcomp>w  s     z<test_random_projection_feature_names_out.<locals>.<listcomp>)Údtype)rb   rf   Zget_feature_names_outÚ__name__Úlowerr   ÚarrayÚrangerw   Úobjectr   )r   Úrandom_projectionZ	names_outZexpected_names_outr"   r„   r#   Ú(test_random_projection_feature_names_outp  s    


þr   r   )r;   é	   r)   é   r*   r   Úcompute_inverse_componentsTFc              
   C   sâ   d}||||d}t | || | d d |d\}}||fD ]¢}	t ¡   tjddtd | |	¡}
W 5 Q R X |r–t|d	ƒs~t‚|j}|j	||fks–t‚| 
|
¡}|j	|	j	ks°t‚| |¡}t|
d
ƒrÌ|
 ¡ }
t|
|ddd q:d S )Nr)   )rE   r   r    r+   r<   rJ   Ú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   rm   ÚhasattrrH   r”   r   Zinverse_transformre   r   r   )r   r   r   r   Zglobal_random_seedrE   rŒ   ZX_denseZX_csrÚXrp   Zinv_componentsZprojected_backZ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sBt‚|j|ksPt‚d S )Né*   é   é¸  r   rJ   )	r   r   r   Úrandrm   Úastyperx   r†   rH   )r   Zinput_dtypeZexpected_dtyper!   rš   rj   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   rJ   )r•   )r   r   r   rŸ   rm   r    Úfloat32Úfloat64r   r   rx   )r   r•   r!   rš   Zrp_32Zrp_64Zprojection_32Zprojection_64r"   r"   r#   Ú,test_random_projection_numerical_consistencyÈ  s    

r¤   )r   )GrS   r–   Útypingr   r   Únumpyr   r6   Zscipy.sparseÚsparser   Zsklearn.exceptionsr   Zsklearn.metricsr   Zsklearn.random_projectionr   r   r   r	   r
   Zsklearn.utils._testingr   r   r   r   r   r   Ú__annotations__r   Zall_random_matrixr   r   ra   r$   r(   r   r   r|   r   rf   Zdata_csrÚmarkZparametrizer9   r?   rF   rI   rN   rQ   rR   rU   rX   r^   rd   rg   rk   rq   rt   ry   r}   r~   r€   r   r›   r¢   r£   Zint32Zint64r¡   r¤   r"   r"   r"   r#   Ú<module>   sˆ    
ýþ
	


9*	
/



üþ	