U
    ½mœd¾.  ã                
   @   s   d dl mZ d dlZd dlZd dlZd dlmZ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mZmZ d dlmZ dddgZdddgZdBdd„Zej dddejfg¡ej de¡ej de¡dd„ ƒƒƒZej dddejfg¡ej de¡ej de¡dd„ ƒƒƒZej dddg¡dd „ ƒZ ej ddd!g¡d"d#„ ƒZ!d$d%„ Z"ej d&d'd(d)d*d+d,„ d-dfg¡d.d/„ ƒZ#d0d1„ Z$ej de¡ej de¡d2d3„ ƒƒZ%d4d5„ Z&d6d7„ Z'd8d9„ Z(d:d;„ Z)d<d=„ Z*d>d?„ Z+d@dA„ Z,dS )Cé    )ÚproductN)ÚdatasetsÚclone)Úmanifold)Ú	neighbors)Úpipeline)Úpreprocessing)Ú
make_blobs)Úpairwise_distances)Úassert_allcloseÚassert_allclose_dense_sparseÚassert_array_equal)ÚrandÚautoZdenseZarpackZFWÚDé   Fc                 C   sp   t t |¡ƒ}t ttt|ƒdd�ƒ¡j| dd�}|rltj	 
d¡}d| |d¡j| dd� }t ||fd¡}|S )Né   )ÚrepeatF©Úcopyr   çš™™™™™¹?é   )ÚintÚmathÚsqrtÚnpÚarrayÚlistr   ÚrangeÚastypeÚrandomÚRandomStateÚrandnZconcatenate)ÚdtypeÚn_ptsÚ	add_noiseZ
n_per_sideÚXÚrngÚnoise© r)   ú[/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/manifold/tests/test_isomap.pyÚcreate_sample_data   s    $r+   zn_neighbors, radius)é   NÚeigen_solverÚpath_methodc                 C   s¬   d}t | |dd�}|d k	r,tj||dd�}ntj||dd�}tj||d||d�}| |¡ |d k	rvtj|j|dd�}	ntj|j|dd�}	| tj	kr–dnd	}
t
||	|
d
� d S )Nr   F©r$   r%   Údistance©Úmoder   ©Ún_neighborsÚradiusÚn_componentsr-   r.   çñhãˆµøä>r   ©Úatol)r+   r   Úkneighbors_graphÚradius_neighbors_graphr   ÚIsomapÚfitÚ
embedding_r   Úfloat32r   )Úglobal_dtyper4   r5   r-   r.   r$   r&   ÚGÚclfÚG_isor9   r)   r)   r*   Útest_isomap_simple_grid$   s,    û
  ÿrD   c                 C   s  | t jkrt d¡ d}t| |dd�}|d k	rDtj||dd� ¡ }ntj||dd� ¡ }t	 
¡ }| d|d  ¡}	tj||d||d	�}
|
 |¡ |d k	r¬tj|
j|dd�}ntj|
j|dd�}| ¡ }| d|d  ¡}t j |	| ¡| }| t jkrúd
nd}t||
 ¡ |d� d S )NzwSkipping test due to numerical instabilities on float32 datafrom KernelCenterer used in the reconstruction_error methodr   Tr/   r0   r1   g      à¿r   r3   r7   r   r8   )r   r?   ÚpytestÚskipr+   r   r:   Útoarrayr;   r   ZKernelCentererÚfit_transformr   r<   r=   r>   ZlinalgZnormr   Úreconstruction_error)r@   r4   r5   r-   r.   r$   r&   rA   ZcentererÚKrB   rC   ZK_isorI   r9   r)   r)   r*   Ú test_isomap_reconstruction_errorG   s>    
ÿû
  ÿrK   )r   N)Ng      à?c                 C   s˜   d}d}d}t j|dd�\}}|j| dd�}tj|||d�}| |¡}	tj d¡}
||
j	|j
Ž  }| || ¡}t t |	| d	 ¡¡d	| k s”t‚d S )
NéÈ   é
   g{®Gáz„?r   ©Úrandom_stateFr   )r6   r4   r5   r   )r   Úmake_s_curver   r   r<   rH   r   r    r!   r"   ÚshapeÚ	transformr   ZmeanÚAssertionError)r@   r4   r5   Z	n_samplesr6   Znoise_scaler&   ÚyÚisoZX_isor'   r(   ZX_iso2r)   r)   r*   Útest_transformx   s      ÿ
rV   )Ng      $@c                 C   sf   t jdd�\}}|j|dd�}t dtj| |d�fdt ¡ fg¡}| 	||¡ d| 
||¡k sbt‚d S )	Nr   rN   Fr   Úisomap©r4   r5   rB   gÍÌÌÌÌÌì?)r   r	   r   r   ZPipeliner   r<   r   ZKNeighborsClassifierr=   ZscorerS   )r4   r5   r@   r&   rT   rB   r)   r)   r*   Útest_pipeline’   s    
þÿrY   c           
      C   s´   d}d}t jdd�\}}t jdd�\}}|j| dd�}|j| dd�}t tj||dd	�tj|d
d�¡}tj||d�}| 	|¡}| 	|¡}	t
||	ƒ | |¡}| |¡}	t
||	ƒ d S )Nr   rM   r   rN   r   Fr   r0   )r4   Ú	algorithmr2   Úprecomputed©r4   Úmetric)r4   Zneighbors_algorithm)r   r	   r   r   Zmake_pipeliner   ZKNeighborsTransformerr   r<   rH   r   rR   )
r@   rZ   r4   r&   Ú_ZX2Z	est_chainZest_compactZXt_chainZ
Xt_compactr)   r)   r*   Ú0test_pipeline_with_nearest_neighbors_transformer£   s0      ÿü ÿ




r_   zmetric, p, is_euclidean)Z	euclideanr   T)Z	manhattanr   F)Ú	minkowskir   F)r`   r   Tc                 C   s   t  t  | d |d  ¡¡S )Nr   )r   r   Úsum)Úx1Zx2r)   r)   r*   Ú<lambda>Ê   ó    rc   r   c              	   C   sx   t jdd�\}}|j| dd�}t ¡  |¡}tj||d� |¡}|rPt||ƒ n$tjt	dd�� t||ƒ W 5 Q R X d S )Nr   rN   Fr   )r]   ÚpzNot equal to tolerance©Úmatch)
r   r	   r   r   r<   rH   r   rE   ÚraisesrS   )r@   r]   re   Zis_euclideanr&   r^   Ú	referenceZ	embeddingr)   r)   r*   Útest_different_metricÃ   s    rj   c                  C   sF   t  ¡ } dD ]4}| j|d� |  tj dd¡¡ | jj|kst	‚qd S )N)rM   é   é   ©r4   é2   r   )
r   r<   Z
set_paramsr=   r   r    r   Znbrs_r4   rS   )Úmodelr4   r)   r)   r*   Útest_isomap_clone_bugÝ   s
    rp   c           	      C   sZ   t dddd| |d�}tjd||dd�}t|ƒ}| | ¡ ¡}| |¡}t||d	d	d
� d S )Néd   é   r   Zcsr)ZdensityÚformatr#   rO   r   é   )r6   r-   r.   r4   g-Cëâ6?)Zrtolr9   )Úsparse_randr   r<   r   rH   rG   r   )	r@   r-   r.   Zglobal_random_seedr&   Z	iso_denseZ
iso_sparseZX_trans_denseZX_trans_sparser)   r)   r*   Útest_sparse_inputæ   s$    ú	ü
rv   c           	      C   s’   t jddd�\}}|j| dd�}d}tj||dd�}tjd |d	d
�}| |¡ |j}tjd |dd
�}| 	|¡}| t
jkr|dnd}t|||d� d S )NrL   r   rN   Fr   rM   r0   )r5   r2   r[   )r4   r5   r]   r`   r7   r8   )r   rP   r   r   r;   r   r<   r=   r>   rH   r   r?   r   )	r@   r&   rT   r5   ÚgrW   Zprecomputed_resultÚresultr9   r)   r)   r*   Ú(test_isomap_fit_precomputed_radius_graph  s    

ry   c                 C   sZ   t jdd�}tjddgddgddgg| d�}| |¡ |jj| ksFt‚|jj| ksVt‚d	S )
zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   rm   r   rr   é   é   é   ©r#   N)	r   r<   r   r   r=   Údist_matrix_r#   rS   r>   )r@   rU   r&   r)   r)   r*   Ú#test_isomap_fitted_attributes_dtype  s
     
r   c                  C   s‚   t jdd�} tjddgddgddggtjd�}|  |¡ t jdd�}tjddgddgddggtjd�}| |¡ t| j|jƒ d	S )
z?Check the equivalence of the results with 32 and 64 bits input.r   rm   r   rr   rz   r{   r|   r}   N)	r   r<   r   r   r?   r=   Zfloat64r   r~   )Ziso_32ZX_32Ziso_64ZX_64r)   r)   r*   Útest_isomap_dtype_equivalence"  s    "
"
r€   c               	   C   sJ   t jdd�\} }tjddd�}d}tjt|d�� | | ¡ W 5 Q R X d S )NT)Z
return_X_yrr   g      @rX   z(Both n_neighbors and radius are providedrf   )r   Zload_digitsr   r<   rE   rh   Ú
ValueErrorrH   )r&   r^   rW   Úmsgr)   r)   r*   Ú9test_isomap_raise_error_when_neighbor_and_radius_both_set/  s
    rƒ   c               	   C   sR   t  ddddddg¡d d …d f } tjtdd�� tjdd	� | ¡ W 5 Q R X d S )
Nr   r   r   r{   r|   é   únumber of connected componentsrf   rm   )r   r   rE   ÚwarnsÚUserWarningr   r<   r=   )r&   r)   r)   r*   Ú"test_multiple_connected_components:  s    "rˆ   c              	   C   s¤   t  ddddddg¡d d …d f j| dd�}t|ƒ}tjtd	d
�� tjddd� 	|¡ W 5 Q R X t
j|ddd�}tjtd	d
�� tjddd� 	|¡ W 5 Q R X d S )Nr   r   r   r{   r|   r„   Fr   r…   rf   r[   r\   r0   )r4   r2   )r   r   r   r
   rE   r†   r‡   r   r<   r=   r   r:   rh   ÚRuntimeError)r@   r&   ZX_distancesZX_graphr)   r)   r*   Ú5test_multiple_connected_components_metric_precomputedA  s    ,rŠ   c                  C   sN   t ddd�\} }d}tj|d�}| | ¡ | ¡ }tdd„ t|ƒD ƒ|ƒ dS )	z'Check get_feature_names_out for Isomap.r   rz   )rO   Z
n_featuresr   )r6   c                 S   s   g | ]}d |› �‘qS )rW   r)   )Ú.0Úir)   r)   r*   Ú
<listcomp>Y  s     z.test_get_feature_names_out.<locals>.<listcomp>N)r	   r   r<   rH   Zget_feature_names_outr   r   )r&   rT   r6   rU   Únamesr)   r)   r*   Útest_get_feature_names_outQ  s    
r�   )r   F)-Ú	itertoolsr   Únumpyr   r   rE   Zsklearnr   r   r   r   r   r   Zsklearn.datasetsr	   Zsklearn.metrics.pairwiser
   Zsklearn.utils._testingr   r   r   Zscipy.sparser   ru   Zeigen_solversZpath_methodsr+   ÚmarkZparametrizeÚinfrD   rK   rV   rY   r_   rj   rp   rv   ry   r   r€   rƒ   rˆ   rŠ   r�   r)   r)   r)   r*   Ú<module>   sb   


 .

 ûþ

	