a
    �ù»j†0  ã                
   @   sö  d dl Z d dlmZ d dlZd dlZd dlmZ d dl	m
Z
mZmZmZmZ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 g d	¢Zg d
¢Zd=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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%d*d+„ Z&ej de¡ej de¡ej d,e¡d-d.„ ƒƒƒZ'd/d0„ Z(d1d2„ Z)d3d4„ Z*d5d6„ Z+d7d8„ Z,d9d:„ Z-d;d<„ Z.dS )>é    N)Úproduct)Úrand)ÚcloneÚdatasetsÚmanifoldÚ	neighborsÚpipelineÚpreprocessing)Ú
make_blobs)Úpairwise_distances)Úassert_allcloseÚassert_allclose_dense_sparseÚassert_array_equal)ÚCSR_CONTAINERS)ÚautoZdenseZarpack)r   Z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*   úHE:\soccer\ml_env\Lib\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 ur,tj||dd�}ntj||dd�}tj||d||d�}| |¡ |d u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_dtyper5   r6   r.   r/   r%   r'   ÚGÚclfÚG_isor:   r*   r*   r+   Útest_isomap_simple_grid"   s(    û
ÿrE   c                 C   s  | t ju rt d¡ d}t| |dd�}|d urDtj||dd� ¡ }ntj||dd� ¡ }t	 
¡ }| d|d  ¡}	tj||d||d	�}
|
 |¡ |d u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   Tr0   r1   r2   g      à¿r   r4   r8   r   r9   )r   r@   ÚpytestÚskipr,   r   r;   Útoarrayr<   r	   ZKernelCentererÚfit_transformr   r=   r>   r?   ZlinalgZnormr   Úreconstruction_error)rA   r5   r6   r.   r/   r%   r'   rB   ZcentererÚKrC   rD   ZK_isorJ   r:   r*   r*   r+   Ú test_isomap_reconstruction_errorE   s:    
ÿû
ÿrL   )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”J ‚d S )
NéÈ   é
   g{®Gáz„?r   ©Úrandom_stateFr   )r7   r5   r6   r   )r   Úmake_s_curver    r   r=   rI   r   r!   r"   r#   ÚshapeÚ	transformr   Úmean)rA   r5   r6   Z	n_samplesr7   Znoise_scaler'   ÚyÚisoZX_isor(   r)   ZX_iso2r*   r*   r+   Útest_transformv   s    ÿ
rW   )Ng      $@c                 C   sf   t jdd�\}}|j|dd�}t dtj| |d�fdt ¡ fg¡}| 	||¡ d| 
||¡k sbJ ‚d S )	Nr   rO   Fr   Úisomap©r5   r6   rC   gÍÌÌÌÌÌì?)r   r
   r    r   ZPipeliner   r=   r   ZKNeighborsClassifierr>   Zscore)r5   r6   rA   r'   rU   rC   r*   r*   r+   Útest_pipeline�   s    
þÿrZ   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   rN   r   rO   r   Fr   r1   )r5   Ú	algorithmr3   Úprecomputed©r5   Úmetric)r5   Zneighbors_algorithm)r   r
   r    r   Zmake_pipeliner   ZKNeighborsTransformerr   r=   rI   r   rS   )
rA   r[   r5   r'   Ú_ZX2Z	est_chainZest_compactZXt_chainZ
Xt_compactr*   r*   r+   Ú0test_pipeline_with_nearest_neighbors_transformer¡   s*    ÿüÿ




r`   zmetric, p, is_euclidean)Z	euclideanr   T)Z	manhattanr   F)Ú	minkowskir   F)ra   r   Tc                 C   s   t  t  | d |d  ¡¡S )Nr   )r   r   Úsum)Úx1Zx2r*   r*   r+   Ú<lambda>È   ó    rd   r   c                 C   sŒ   t jdd�\}}|j| dd�}t ¡  |¡}tj||d� |¡}|rPt||ƒ n8tjt	dd�� t||ƒ W d   ƒ n1 s~0    Y  d S )Nr   rO   Fr   )r^   ÚpzNot equal to tolerance©Úmatch)
r   r
   r    r   r=   rI   r   rF   ÚraisesÚAssertionError)rA   r^   rf   Zis_euclideanr'   r_   Ú	referenceZ	embeddingr*   r*   r+   Útest_different_metricÁ   s    rl   c                  C   sF   t  ¡ } dD ]4}| j|d� |  tj dd¡¡ | jj|ksJ ‚qd S )N)rN   é   é   ©r5   é2   r   )	r   r=   Z
set_paramsr>   r   r!   r   Znbrs_r5   )Úmodelr5   r*   r*   r+   Útest_isomap_clone_bugÛ   s
    rr   Úcsr_containerc           
   	   C   s^   |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$   rP   r   é   )r7   r.   r/   r5   g-Cëâ6?)Zrtolr:   )Úsparse_randr   r=   r   rI   rH   r   )
rA   r.   r/   Zglobal_random_seedrs   r'   Z	iso_denseZ
iso_sparseZX_trans_denseZX_trans_sparser*   r*   r+   Útest_sparse_inputä   s(    úÿü
ry   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 )NrM   r   rO   Fr   rN   r1   )r6   r3   r\   )r5   r6   r^   ra   r8   r9   )r   rQ   r    r   r<   r   r=   r>   r?   rI   r   r@   r   )	rA   r'   rU   r6   ÚgrX   Zprecomputed_resultÚresultr:   r*   r*   r+   Ú(test_isomap_fit_precomputed_radius_graph  s    

r|   c                 C   sZ   t jdd�}tjddgddgddgg| d�}| |¡ |jj| ksFJ ‚|jj| ksVJ ‚d	S )
zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   ro   r   ru   é   é   é   ©r$   N)r   r=   r   r   r>   Údist_matrix_r$   r?   )rA   rV   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   ro   r   ru   r}   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   s^   t jdd�\} }tjddd�}d}tjt|d�� | | ¡ W d   ƒ n1 sP0    Y  d S )NT)Z
return_X_yru   g      @rY   z(Both n_neighbors and radius are providedrg   )r   Zload_digitsr   r=   rF   ri   Ú
ValueErrorrI   )r'   r_   rX   Úmsgr*   r*   r+   Ú9test_isomap_raise_error_when_neighbor_and_radius_both_set2  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~   r   é   únumber of connected componentsrg   r   ro   )r   r   rF   ÚwarnsÚUserWarningr   r=   r>   )r'   r*   r*   r+   Ú"test_multiple_connected_components=  s    rŒ   c                 C   sÄ   t  g d¢¡d d …d f j| dd�}t|ƒ}tjtdd��$ tjddd� 	|¡ W d   ƒ n1 sd0    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‡   Fr   r‰   rg   r   r\   r]   r   r1   )r5   r3   )r   r   r    r   rF   rŠ   r‹   r   r=   r>   r   r;   ri   ÚRuntimeError)rA   r'   ZX_distancesZX_graphr*   r*   r+   Ú5test_multiple_connected_components_metric_precomputedD  s    $2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   r}   )rP   Z
n_featuresr   )r7   c                 S   s   g | ]}d |› �‘qS )rX   r*   )Ú.0Úir*   r*   r+   Ú
<listcomp>\  re   z.test_get_feature_names_out.<locals>.<listcomp>N)r
   r   r=   rI   Zget_feature_names_outr   r   )r'   rU   r7   rV   Únamesr*   r*   r+   Útest_get_feature_names_outT  s    
r“   )r   F)/r   Ú	itertoolsr   Únumpyr   rF   Zscipy.sparser   rx   Zsklearnr   r   r   r   r   r	   Zsklearn.datasetsr
   Zsklearn.metrics.pairwiser   Zsklearn.utils._testingr   r   r   Zsklearn.utils.fixesr   Zeigen_solversZpath_methodsr,   ÚmarkZparametrizeÚinfrE   rL   rW   rZ   r`   rl   rr   ry   r|   r‚   rƒ   r†   rŒ   rŽ   r“   r*   r*   r*   r+   Ú<module>   s^    
 .

 ûþ

	