o
    ?Hh*/                  
   @   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)autodensearpack)r   FWD   Fc                 C   sp   t t|}tttt|ddj| dd}|r6tj	
d}d||dj| dd }t||fd}|S )N   )repeatFcopyr   皙?   )intmathsqrtnparraylistr   rangeastyperandomRandomStaterandnconcatenate)dtypen_pts	add_noise
n_per_sideXrngnoise r/   b/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/manifold/tests/test_isomap.pycreate_sample_data   s   $r1   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r;tj|j|dd}	n	tj|j|dd}	| tj	krKdnd	}
t
||	|
d
 d S )Nr   Fr)   r*   distancemoder   n_neighborsradiusn_componentsr3   r4   h㈵>r   atol)r1   r   kneighbors_graphradius_neighbors_graphr   Isomapfit
embedding_r   float32r   )global_dtyper:   r;   r3   r4   r)   r,   GclfG_isor?   r/   r/   r0   test_isomap_simple_grid"   s(   
rJ   c                 C   s  | t ju r
td d}t| |dd}|d ur"tj||dd }n
tj||dd }t	
 }|d|d  }	tj||d||d	}
|
| |d urVt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   Tr5   r6   r7   g      r   r9   r=   r   r>   )r   rE   pytestskipr1   r   r@   toarrayrA   r	   KernelCentererfit_transformr   rB   rC   rD   linalgnormr   reconstruction_error)rF   r:   r;   r3   r4   r)   r,   rG   centererKrH   rI   K_isorR   r?   r/   r/   r0    test_isomap_reconstruction_errorE   s:   

rV   )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 sJJ d S )
N   
   g{Gz?r   random_stateFr   )r<   r:   r;   r   )r   make_s_curver#   r   rB   rO   r   r$   r%   r&   shape	transformr   mean)rF   r:   r;   	n_samplesr<   noise_scaler,   yisoX_isor-   r.   X_iso2r/   r/   r0   test_transformv   s   
(re   )Ng      $@c                 C   sf   t jdd\}}|j|dd}tdtj| |dfdt fg}|	|| d|
||k s1J d S )	Nr   rY   Fr   isomapr:   r;   rH   g?)r   r
   r#   r   Pipeliner   rB   r   KNeighborsClassifierrC   score)r:   r;   rF   r,   ra   rH   r/   r/   r0   test_pipeline   s   
rk   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   rX   r   rY   r   Fr   r6   )r:   	algorithmr8   precomputedr:   metric)r:   neighbors_algorithm)r   r
   r#   r   make_pipeliner   KNeighborsTransformerr   rB   rO   r   r]   )
rF   rl   r:   r,   _X2	est_chainest_compactXt_chain
Xt_compactr/   r/   r0   0test_pipeline_with_nearest_neighbors_transformer   s*   




ry   zmetric, p, is_euclidean)	euclideanr   T)	manhattanr   F)	minkowskir   F)r|   r   Tc                 C   s   t t | d |d  S )Nr   )r   r   sum)x1x2r/   r/   r0   <lambda>   s    r   r   c                 C   s   t jdd\}}|j| dd}t |}tj||d|}|r)t|| d S tjt	dd t|| W d    d S 1 sAw   Y  d S )Nr   rY   Fr   )ro   pzNot equal to tolerancematch)
r   r
   r#   r   rB   rO   r   rK   raisesAssertionError)rF   ro   r   is_euclideanr,   rs   	reference	embeddingr/   r/   r0   test_different_metric   s   "r   c                  C   sF   t  } dD ]}| j|d | tjdd | jj|ks J qd S )N)rX         r:   2   r   )	r   rB   
set_paramsrC   r   r$   r   nbrs_r:   )modelr:   r/   r/   r0   test_isomap_clone_bug   s   r   csr_containerc           
   	   C   s^   |t dddd| |d}tjd||dd}t|}|| }||}	t|	|d	d	d
 d S )Nd      r   csr)densityformatr(   rZ   r      )r<   r3   r4   r:   g-C6?)rtolr?   )sparse_randr   rB   r   rO   rM   r   )
rF   r3   r4   global_random_seedr   r,   	iso_dense
iso_sparseX_trans_denseX_trans_sparser/   r/   r0   test_sparse_input   s(   
r   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 )NrW   r   rY   Fr   rX   r6   )r;   r8   rm   )r:   r;   ro   r|   r=   r>   )r   r[   r#   r   rA   r   rB   rC   rD   rO   r   rE   r   )	rF   r,   ra   r;   grf   precomputed_resultresultr?   r/   r/   r0   (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s#J |jj| ks+J d	S )
zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   r   r   r            r(   N)r   rB   r   r    rC   dist_matrix_r(   rD   )rF   rb   r,   r/   r/   r0   #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   r   r   r   r   r   r   r   N)	r   rB   r   r    rE   rC   float64r   r   )iso_32X_32iso_64X_64r/   r/   r0   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    d S 1 s)w   Y  d S )NT)
return_X_yr   g      @rg   z(Both n_neighbors and radius are providedr   )r   load_digitsr   rB   rK   r   
ValueErrorrO   )r,   rs   rf   msgr/   r/   r0   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    d S 1 s)w   Y  d S )Nr   r   r   r   r      number of connected componentsr   r   r   )r   r    rK   warnsUserWarningr   rB   rC   )r,   r/   r/   r0   "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 s2w   Y  t
j|d	d
d}tjtdd tjddd	| W d    d S 1 s\w   Y  d S )Nr   Fr   r   r   r   rm   rn   r   r6   )r:   r8   )r   r    r#   r   rK   r   r   r   rB   rC   r   r@   r   RuntimeError)rF   r,   X_distancesX_graphr/   r/   r0   5test_multiple_connected_components_metric_precomputedD  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   r   )rZ   
n_featuresr   )r<   c                 S   s   g | ]}d | qS )rf   r/   ).0ir/   r/   r0   
<listcomp>\  s    z.test_get_feature_names_out.<locals>.<listcomp>N)r
   r   rB   rO   get_feature_names_outr   r"   )r,   ra   r<   rb   namesr/   r/   r0   test_get_feature_names_outT  s   
r   )r   F)/r   	itertoolsr   numpyr   rK   scipy.sparser   r   sklearnr   r   r   r   r   r	   sklearn.datasetsr
   sklearn.metrics.pairwiser   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   eigen_solverspath_methodsr1   markparametrizeinfrJ   rV   re   rk   ry   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   <module>   s`     
 .

 

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