a
    ;Zèaß  ã                   @   sä   d dl mZ d dlZd dlmZ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 g d¢Zg d¢Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ ZdS )!é    )ÚproductN)Úassert_almost_equalÚassert_array_almost_equal)Údatasets)Úmanifold)Ú	neighbors)Úpipeline)Úpreprocessing)Úpairwise_distances)Úrand)ÚautoZdenseZarpack)r   ZFWÚDc            	      C   s–   d} | d }|d }t  ttt| ƒddƒ¡}tj||dd ¡ }tD ]J}t	D ]@}t
j|d||d}| |¡ tj|j|dd ¡ }t||ƒ qNqFd S )Né   é   é   ©ÚrepeatÚdistance©Úmode©Ún_neighborsÚn_componentsÚeigen_solverÚpath_method)ÚnpÚarrayÚlistr   Úranger   Úkneighbors_graphÚtoarrayÚeigen_solversÚpath_methodsr   ÚIsomapÚfitÚ
embedding_r   )	Ú
N_per_sideÚNptsr   ÚXÚGr   r   ÚclfÚG_iso© r,   úAlib/python3.9/site-packages/sklearn/manifold/tests/test_isomap.pyÚtest_isomap_simple_grid   s$    ü
ÿ
r.   c                  C   s  d} | d }|d }t  ttt| ƒddƒ¡}t j d¡}d| |d¡ }t  ||fd¡}t	j
||dd ¡ }t ¡ }| d	|d  ¡}tD ]t}	tD ]j}
tj|d|	|
d
}| |¡ t	j
|j|dd ¡ }| d	|d  ¡}t j || ¡| }t|| ¡ ƒ q”qŒd S )Nr   r   r   r   r   çš™™™™™¹?r   r   g      à¿r   )r   r   r   r   r   ÚrandomÚRandomStateÚrandnZconcatenater   r   r    r	   ZKernelCentererÚfit_transformr!   r"   r   r#   r$   r%   ZlinalgZnormr   Úreconstruction_error)r&   r'   r   r(   ÚrngÚnoiser)   ZcentererÚKr   r   r*   r+   ZK_isor4   r,   r,   r-   Ú test_isomap_reconstruction_error/   s2    ü
ÿ
r8   c            
      C   s†   d} d}d}t j| dd\}}tj|d}| |¡}tj d¡}||j|j	Ž  }| 
|| ¡}	t t ||	 d ¡¡d| k s‚J ‚d S )NéÈ   é
   g{®Gáz„?r   ©Zrandom_state)r   r   )r   Zmake_s_curver   r#   r3   r   r0   r1   r2   ÚshapeÚ	transformÚsqrtZmean)
Z	n_samplesr   Znoise_scaler(   ÚyZisoZX_isor5   r6   ZX_iso2r,   r,   r-   Útest_transformY   s    
r@   c                  C   sR   t jdd\} }t dt ¡ fdt ¡ fg¡}| | |¡ d| 	| |¡k sNJ ‚d S )Nr   r;   Zisomapr*   gÍÌÌÌÌÌì?)
r   Ú
make_blobsr   ZPipeliner   r#   r   ZKNeighborsClassifierr$   Zscore)r(   r?   r*   r,   r,   r-   Útest_pipelinen   s    ÿrB   c            	      C   s˜   d} d}t jdd\}}t jdd\}}t tj|| ddtj|dd	¡}tj|| d
}| |¡}| |¡}t	||ƒ | 
|¡}| 
|¡}t	||ƒ d S )Nr   r:   r   r;   r   r   )r   Ú	algorithmr   Úprecomputed©r   Úmetric)r   Zneighbors_algorithm)r   rA   r   Zmake_pipeliner   ZKNeighborsTransformerr   r#   r3   r   r=   )	rC   r   r(   Ú_ZX2Z	est_chainZest_compactZXt_chainZ
Xt_compactr,   r,   r-   Ú0test_pipeline_with_nearest_neighbors_transformerz   s&    ÿüÿ




rH   c            	   	   C   sª   dd„ } dddd| ddfg}t jd	d
\}}t ¡  |¡}|D ]f\}}}tj||d |¡}|rlt||ƒ q>tjtdd t||ƒ W d   ƒ q>1 sš0    Y  q>d S )Nc                 S   s   t  t  | d |d  ¡¡S )Nr   )r   r>   Úsum)Zx1Zx2r,   r,   r-   Úcustom_metric™   s    z,test_different_metric.<locals>.custom_metric)Z	euclideanr   T)Z	manhattanr   F)Ú	minkowskir   F)rK   r   Tr   Fr   r;   )rF   Úpznot almost equal©Úmatch)	r   rA   r   r#   r3   r   ÚpytestÚraisesÚAssertionError)	rJ   Zmetricsr(   rG   Z	referencerF   rL   Zis_euclideanZ	embeddingr,   r,   r-   Útest_different_metric—   s    ûrR   c                  C   sF   t  ¡ } dD ]4}| j|d |  tj dd¡¡ | jj|ksJ ‚qd S )N)r:   é   é   ©r   é2   r   )	r   r#   Z
set_paramsr$   r   r0   r   Znbrs_r   )Zmodelr   r,   r,   r-   Útest_isomap_clone_bug²   s
    rW   c                  C   sD   t ddddd} tD ]*}tD ] }tjd||dd}| | ¡ qqd S )	Néd   é   r/   Zcsr)ZdensityÚformatr   é   )r   r   r   r   )Úsparse_randr!   r"   r   r#   r$   )r(   r   r   r*   r,   r,   r-   Útest_sparse_input»   s    ür]   c                  C   s^   t  g d¢¡d d …d f } tjtdd" tjdd | ¡ W d   ƒ n1 sP0    Y  d S )N©r   r   r   r   é   é   únumber of connected componentsrM   r   rU   )r   r   rO   ÚwarnsÚUserWarningr   r#   r$   )r(   r,   r,   r-   Ú"test_multiple_connected_componentsÊ   s    rd   c                  C   sº   t  g d¢¡d d …d f } t| ƒ}tjtdd$ tjddd |¡ W d   ƒ n1 sZ0    Y  t	j
| ddd	}tjtdd$ tjddd |¡ W d   ƒ n1 s¬0    Y  d S )
Nr^   ra   rM   r   rD   rE   r   r   )r   r   )r   r   r
   rO   rb   rc   r   r#   r$   r   r   rP   ÚRuntimeError)r(   ZX_distancesZX_graphr,   r,   r-   Ú5test_multiple_connected_components_metric_precomputedÑ   s    2rf   )Ú	itertoolsr   Znumpyr   Znumpy.testingr   r   rO   Zsklearnr   r   r   r   r	   Zsklearn.metrics.pairwiser
   Zscipy.sparser   r\   r!   r"   r.   r8   r@   rB   rH   rR   rW   r]   rd   rf   r,   r,   r,   r-   Ú<module>   s,   *	