U
    e.                  
   @   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)   c/var/www/html/assets/scripts/venv/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rd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	rtj|
j|dd}ntj|
j|dd}| }|d|d  }t j|	| | }| t jkrd
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 std S )
N   
   g{Gz?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 )Nd      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   


 .

 

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