
    0Ph*/              
       V   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Zej                            dddej        fg          ej                            de          ej                            de          d                                     Z ej                            dddej        fg          ej                            de          ej                            de          d                                     Z!ej                            dddg          d             Z"ej                            dddg          d             Z#d Z$ej                            dddddd d dfg          d!             Z%d" Z&ej                            de          ej                            de          ej                            d#e          d$                                     Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-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           	         t          t          j        |                    }t          j        t          t          t          |          d                                                  | d          }|rdt          j	        
                    d          }d|                    |d                              | d          z  }t          j        ||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noises          b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/manifold/tests/test_isomap.pycreate_sample_datar2      s    TYu%%&&J
geJ//:::;;<<CCEPUCVVA *i##A&&ciiq))00U0CCCNAu:q))H    zn_neighbors, radius)   Neigen_solverpath_methodc                    d}t          | |d          }|t          j        ||d          }nt          j        ||d          }t	          j        ||d||          }|                    |           |t          j        |j        |d          }	nt          j        |j        |d          }	| t          j	        k    rdnd	}
t          ||	|

           d S )Nr   Fr+   r,   distancemoder   n_neighborsradiusn_componentsr5   r6   h㈵>r   atol)r2   r   kneighbors_graphradius_neighbors_graphr   Isomapfit
embedding_r!   float32r   )global_dtyper=   r>   r5   r6   r+   r.   GclfG_isorB   s              r1   test_isomap_simple_gridrM   "   s     E<uFFFA &q+JGGG,QZHHH
/!  C GGAJJJ*3>;ZXXX0NF
 
 
  2:--441D E555555r3   c                 b   | t           j        u rt          j        d           d}t	          | |d          }|*t          j        ||d                                          }n)t          j        ||d                                          }t          j
                    }|                    d|dz  z            }	t          j        ||d||	          }
|
                    |           |t          j        |
j        |d          }nt          j        |
j        |d          }|                                }|                    d|dz  z            }t           j                            |	|z
            |z  }| t           j        k    rd
nd}t%          ||
                                |           d S )NzwSkipping test due to numerical instabilities on float32 datafrom KernelCenterer used in the reconstruction_error methodr   Tr8   r9   r:   g      r   r<   r@   r   rA   )r!   rH   pytestskipr2   r   rC   toarrayrD   r
   KernelCentererfit_transformr   rE   rF   rG   linalgnormr   reconstruction_error)rI   r=   r>   r5   r6   r+   r.   rJ   centererKrK   rL   K_isorV   rB   s                  r1    test_isomap_reconstruction_errorrZ   E   s    rz!!J	
 	
 	
 E<uEEEA &q+JGGGOOQQ,QZHHHPPRR+--Htad{++A
/!  C GGAJJJ *3>;ZXXX0NF
 
 
 MMOOE""4%(?33E 9>>!e)44u<2:--441D(#*B*B*D*D4PPPPPPr3   )r   N)Ng      ?c                    d}d}d}t          j        |d          \  }}|                    | d          }t          j        |||          }|                    |          }	t          j                            d          }
| |
j	        |j
         z  }|                    ||z             }t          j        t          j        |	|z
  d	z                      d	|z  k     sJ d S )
N   
   g{Gz?r   random_stateFr   )r?   r=   r>   r   )r   make_s_curver%   r   rE   rS   r!   r&   r'   r(   shape	transformr    mean)rI   r=   r>   	n_samplesr?   noise_scaler.   yisoX_isor/   r0   X_iso2s                r1   test_transformrj   v   s    ILK  ;;;DAq	E**A /!{6  C a  E )


"
"C)#)QW--E]]1u9%%F 727EFNq01122Q_DDDDDDr3   )Ng      $@c                 F   t          j        d          \  }}|                    |d          }t          j        dt          j        | |          fdt          j                    fg          }|	                    ||           d|
                    ||          k     sJ d S )	Nr   r^   Fr   isomapr=   r>   rK   g?)r   r   r%   r	   Pipeliner   rE   r   KNeighborsClassifierrF   score)r=   r>   rI   r.   rf   rK   s         r1   test_pipelinerq      s    
 A...DAq	E**A

x;vNNNOI2445	
 C GGAqMMM1a      r3   c                 Z   d}d}t          j        d          \  }}t          j        d          \  }}|                    | d          }|                    | d          }t          j        t          j        ||d	          t          j        |d
                    }t          j        ||          }|	                    |          }|	                    |          }	t          ||	           |                    |          }|                    |          }	t          ||	           d S )Nr   r]   r   r^   r   Fr   r9   )r=   	algorithmr;   precomputedr=   metric)r=   neighbors_algorithm)r   r   r%   r	   make_pipeliner   KNeighborsTransformerr   rE   rS   r   rb   )
rI   rs   r=   r.   _X2	est_chainest_compactXt_chain
Xt_compacts
             r1   0test_pipeline_with_nearest_neighbors_transformerr      s;    IKA...DAqQ///EB	E**A	<e	,	,B &'#yz	
 	
 	
 	KFFF	 I /Y  K &&q))H**1--JHj)))""2&&H&&r**JHj)))))r3   zmetric, p, is_euclidean)	euclideanr   T)	manhattanr   F)	minkowskir   F)r   r   Tc                 `    t          j        t          j        | dz  |dz  z                       S )Nr   )r!   r    sum)x1x2s     r1   <lambda>r      s&    r1ur1u} 5 566 r3   r   c                    t          j        d          \  }}|                    | d          }t          j                                        |          }t          j        ||                              |          }|rt          ||           d S t          j        t          d          5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   r^   Fr   )rv   pzNot equal to tolerancematch)
r   r   r%   r   rE   rS   r   rO   raisesAssertionError)rI   rv   r   is_euclideanr.   rz   	reference	embeddings           r1   test_different_metricr      s    A...DAq	E**A!!//22Iv333AA!DDI 2	9-----]>1IJJJ 	2 	2Iy111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   .CCCc                      t          j                    } dD ]]}|                     |           |                     t          j                            dd                     | j        j        |k    sJ ^d S )N)r]         r=   2   r   )	r   rE   
set_paramsrF   r!   r&   r   nbrs_r=   )modelr=   s     r1   test_isomap_clone_bugr      sz    OE# 6 6[111		")..Q''((({&+555556 6r3   csr_containerc           
      .    |t          dddd| |                    }t          j        d||d          }t          |          }|                    |                                          }|                    |          }	t          |	|d	d	
           d S )Nd      r   csr)densityformatr*   r_   r      )r?   r5   r6   r=   g-C6?)rtolrB   )sparse_randr   rE   r   rS   rQ   r   )
rI   r5   r6   global_random_seedr   r.   	iso_dense
iso_sparseX_trans_denseX_trans_sparses
             r1   test_sparse_inputr      s     	+	
 	
 	
		 		A !	  I y!!J++AIIKK88M--a00NNM4HHHHHHr3   c                    t          j        dd          \  }}|                    | d          }d}t          j        ||d          }t          j        d |d	
          }|                    |           |j        }t          j        d |d
          }|	                    |          }| t          j        k    rdnd}t          |||           d S )Nr\   r   r^   Fr   r]   r9   )r>   r;   rt   )r=   r>   rv   r   r@   rA   )r   r`   r%   r   rD   r   rE   rF   rG   rS   r!   rH   r   )	rI   r.   rf   r>   grl   precomputed_resultresultrB   s	            r1   (test_isomap_fit_precomputed_radius_graphr     s      1555DAq	E**AF(6
KKKA_f]SSSF
JJqMMM*_f[QQQF!!!$$F2:--441D&T::::::r3   c                     t          j        d          }t          j        ddgddgddgg|           }|                    |           |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   rE   r!   r"   rF   dist_matrix_r*   rG   )rI   rg   r.   s      r1   #test_isomap_fitted_attributes_dtyper     s     /a
(
(
(C
1a&1a&1a&)>>>AGGAJJJ!\1111><//////r3   c                     t          j        d          } t          j        ddgddgddggt          j                  }|                     |           t          j        d          }t          j        ddgddgddggt          j                  }|                    |           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   rE   r!   r"   rH   rF   float64r   r   )iso_32X_32iso_64X_64s       r1   test_isomap_dtype_equivalencer   %  s    _+++F8aVaVaV,BJ???D
JJt_+++F8aVaVaV,BJ???D
JJtF')<=====r3   c                      t          j        d          \  } }t          j        dd          }d}t	          j        t          |          5  |                    |            d d d            d S # 1 swxY w Y   d S )NT)
return_X_yr   g      @rm   z(Both n_neighbors and radius are providedr   )r   load_digitsr   rE   rO   r   
ValueErrorrS   )r.   rz   rl   msgs       r1   9test_isomap_raise_error_when_neighbor_and_radius_both_setr   2  s     4000DAq_3777F
4C	z	-	-	-    Q                                   s   A//A36A3c                      t          j        g d          d d d f         } t          j        t          d          5  t          j        d                              |            d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r      number of connected componentsr   r   r   )r!   r"   rO   warnsUserWarningr   rE   rF   )r.   s    r1   "test_multiple_connected_componentsr   =  s    
###$$QQQW-A	k)I	J	J	J . .A&&&**1---. . . . . . . . . . . . . . . . . .s   )A22A69A6c                 .   t          j        g d          d d d f                             | d          }t          |          }t	          j        t          d          5  t          j        dd          	                    |           d d d            n# 1 swxY w Y   t          j        |d	d
          }t	          j        t          d          5  t          j        dd          	                    |           d d d            d S # 1 swxY w Y   d S )Nr   Fr   r   r   r   rt   ru   r   r9   )r=   r;   )r!   r"   r%   r   rO   r   r   r   rE   rF   r   rC   r   RuntimeError)rI   r.   X_distancesX_graphs       r1   5test_multiple_connected_components_metric_precomputedr   D  s    	###$$QQQW-44\4NNA %Q''K	k)I	J	J	J N NAm<<<@@MMMN N N N N N N N N N N N N N N (
KKKG	|+K	L	L	L J JAm<<<@@IIIJ J J J J J J J J J J J J J J J J Js$    *BBB*D

DDc                      t          dd          \  } }d}t          j        |          }|                    |            |                                }t          d t          |          D             |           dS )z'Check get_feature_names_out for Isomap.r   r   )r_   
n_featuresr   )r?   c                     g | ]}d | S )rl    ).0is     r1   
<listcomp>z.test_get_feature_names_out.<locals>.<listcomp>\  s    BBBBBBr3   N)r   r   rE   rS   get_feature_names_outr   r$   )r.   rf   r?   rg   namess        r1   test_get_feature_names_outr   T  s    1333DAqL
/|
4
4
4Ca%%''EBBeL.A.ABBBEJJJJJr3   )r   F)/r   	itertoolsr   numpyr!   rO   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_methodsr2   markparametrizeinfrM   rZ   rj   rq   r   r   r   r   r   r   r   r   r   r   r   r   r3   r1   <module>r      s               , , , , , , Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q ' ' ' ' ' ' 7 7 7 7 7 7         
 / . . . . .+++"""	 	 	 	 .dBF^0LMM77556 6 65 87 NM6@ .dBF^0LMM7755+Q +Q 65 87 NM+Q\ .K0HIIE E JIE2 .L0IJJ! ! KJ! * * *@ 	6	65A	 	2 2	 	2 6 6 6 7755.99I I :9 65 87I<; ; ;&
0 
0 
0
> 
> 
>     . . .J J J K K K K Kr3   