o
    i*/                  
   @   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}|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randnZconcatenate)dtypen_pts	add_noiseZ
n_per_sideXrngnoise r*   q/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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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_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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   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 sJJ 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 s1J 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>   s    rd   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   rO   Fr   )r^   pzNot equal to tolerancematch)
r   r
   r    r   r=   rI   r   rF   raisesAssertionError)rA   r^   re   Zis_euclideanr'   r_   	referenceZ	embeddingr*   r*   r+   test_different_metric   s   "rk   c                  C   sF   t  } dD ]}| 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   rq   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_seedrr   r'   Z	iso_denseZ
iso_sparseZX_trans_denseZX_trans_sparser*   r*   r+   test_sparse_input   s(   
rx   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s#J |jj| ks+J d	S )
zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   rn   r   rt            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   rn   r   rt   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    d S 1 s)w   Y  d S )NT)Z
return_X_yrt   g      @rY   z(Both n_neighbors and radius are providedrf   )r   Zload_digitsr   r=   rF   rh   
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    d S 1 s)w   Y  d S )Nr   r   r   r}   r~      number of connected componentsrf   r   rn   )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 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   rf   r   r\   r]   r   r1   )r5   r3   )r   r   r    r   rF   r   r   r   r=   r>   r   r;   rh   RuntimeError)rA   r'   ZX_distancesZX_graphr*   r*   r+   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|   )rP   Z
n_featuresr   )r7   c                 S   s   g | ]}d | qS )rX   r*   ).0ir*   r*   r+   
<listcomp>\  s    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   rw   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`   rk   rq   rx   r{   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s`     
 .

 

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