a
    h*/                  
   @   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*   ^/var/www/html/assistant/venv/lib/python3.9/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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_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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   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 sJ d S )
N   
   g{Gz?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 )Nd      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 s0    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^    
 .

 

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