
    >[g*/              
       8   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:                  j=                  dddej>                  fg      ej:                  j=                  de      ej:                  j=                  de      d                      Z ej:                  j=                  dddej>                  fg      ej:                  j=                  de      ej:                  j=                  de      d                      Z!ej:                  j=                  dddg      d        Z"ej:                  j=                  dddg      d        Z#d Z$ej:                  j=                  dddddd ddfg      d         Z%d! Z&ej:                  j=                  de      ej:                  j=                  de      ej:                  j=                  d"e      d#                      Z'd$ Z(d% Z)d& Z*d' Z+d( Z,d) Z-d* Z.y),    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DFc           	         t        t        j                  |            }t        j                  t        t        t        |      d                  j                  | d      }|r]t        j                  j                  d      }d|j                  |d      j                  | 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          ]/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/manifold/tests/test_isomap.pycreate_sample_datar1      s    TYYu%&J
geJ/:;<CCEPUCVAii##A&ciiq)00U0CCNNAu:q)H    zn_neighbors, radius)   Neigen_solverpath_methodc                    d}t        | |d      }|t        j                  ||d      }nt        j                  ||d      }t	        j
                  ||d||      }|j                  |       |#t        j                  |j                  |d      }	n"t        j                  |j                  |d      }	| t        j                  k(  rdnd	}
t        ||	|

       y )N   Fr*   r+   distancemoder   n_neighborsradiusn_componentsr4   r5   h㈵>r   atol)r1   r   kneighbors_graphradius_neighbors_graphr   Isomapfit
embedding_r    float32r   )global_dtyper=   r>   r4   r5   r*   r-   GclfG_isorB   s              r0   test_isomap_simple_gridrM   "   s     E<uFA &&q+JG,,QZH
//!C GGAJ**3>>;ZX00NNF
  2::-41D E5r2   c                 H   | t         j                  u rt        j                  d       d}t	        | |d      }|'t        j                  ||d      j                         }n&t        j                  ||d      j                         }t        j                         }|j                  d|dz  z        }	t        j                  ||d||	      }
|
j                  |       |#t        j                  |
j                  |d      }n"t        j                  |
j                  |d      }|j                         }|j                  d|dz  z        }t         j                   j#                  |	|z
        |z  }| t         j                  k(  rd
nd}t%        ||
j'                         |       y )NzwSkipping test due to numerical instabilities on float32 datafrom KernelCenterer used in the reconstruction_error methodr7   Tr8   r9   r:   g      r   r<   r@   r   rA   )r    rH   pytestskipr1   r   rC   toarrayrD   r
   KernelCentererfit_transformr   rE   rF   rG   linalgnormr   reconstruction_error)rI   r=   r>   r4   r5   r*   r-   rJ   centererKrK   rL   K_isorV   rB   s                  r0    test_isomap_reconstruction_errorrZ   E   so    rzz!J	
 E<uEA &&q+JGOOQ,,QZHPPR++-Htad{+A
//!C GGAJ **3>>;ZX00NNF
 MMOE""4%(?3E 99>>!e)4u<2::-41D(#*B*B*D4Pr2   )r   N)Ng      ?c                    d}d}d}t        j                  |d      \  }}|j                  | d      }t        j                  |||      }|j                  |      }	t        j                  j                  d      }
| |
j                  |j                   z  }|j                  ||z         }t        j                  t        j                  |	|z
  d	z              d	|z  k  sJ y )
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.   r/   X_iso2s                r0   test_transformrj   v   s    ILK   ;DAq	E*A //!{6C a E ))


"C)#))QWW--E]]1u9%F 77277EFNq012Q_DDDr2   )Ng      $@c                 2   t        j                  d      \  }}|j                  |d      }t        j                  dt        j                  | |      fdt        j                         fg      }|j                  ||       d|j                  ||      k  sJ y )	Nr   r^   Fr   isomapr=   r>   rK   g?)r   r   r$   r	   Pipeliner   rE   r   KNeighborsClassifierrF   score)r=   r>   rI   r-   rf   rK   s         r0   test_pipelinerq      s    
 A.DAq	E*A


x;vNOI2245	
C GGAqM1a   r2   c                 $   d}d}t        j                  d      \  }}t        j                  d      \  }}|j                  | d      }|j                  | d      }t        j                  t        j                  ||d	      t        j                  |d
            }t        j                  ||      }|j                  |      }|j                  |      }	t        ||	       |j                  |      }|j                  |      }	t        ||	       y )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
             r0   0test_pipeline_with_nearest_neighbors_transformerr      s     IKA.DAqQ/EB	E*A	<e	,B &&''#yz	
 	KF	I //YK &&q)H**1-JHj)""2&H&&r*JHj)r2   zmetric, p, is_euclidean)	euclideanr   T)	manhattanr   F)	minkowskir   F)r   r   Tc                 d    t        j                  t        j                  | dz  |dz  z               S )Nr   )r    r   sum)x1x2s     r0   <lambda>r      s"    r1ur1u} 56r2   r   c                    t        j                  d      \  }}|j                  | d      }t        j                         j                  |      }t        j                  ||      j                  |      }|rt        ||       y t        j                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)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           r0   test_different_metricr      s     A.DAq	E*A!//2Iv3AA!DI	9-]]>1IJIy1 KJJs    B66B?c                      t        j                         } dD ]^  }| j                  |       | j                  t        j
                  j                  dd             | j                  j                  |k(  r^J  y )N)r]         r=   2   r   )	r   rE   
set_paramsrF   r    r%   r   nbrs_r=   )modelr=   s     r0   test_isomap_clone_bugr      s\    OOE#[1		"))..Q'({{&&+555 $r2   csr_containerc           
           |t        dddd| |            }t        j                  d||d      }t        |      }|j	                  |j                               }|j	                  |      }	t        |	|d	d	
       y )Nd      r   csr)densityformatr)   r_   r      )r?   r4   r5   r=   g-C6?)rtolrB   )sparse_randr   rE   r   rS   rQ   r   )
rI   r4   r5   global_random_seedr   r-   	iso_dense
iso_sparseX_trans_denseX_trans_sparses
             r0   test_sparse_inputr      s     	+	
		A !	I y!J++AIIK8M--a0NNM4Hr2   c                    t        j                  dd      \  }}|j                  | d      }d}t        j                  ||d      }t        j                  d |d	
      }|j                  |       |j                  }t        j                  d |d
      }|j                  |      }| t        j                  k(  rdnd}t        |||       y )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	            r0   (test_isomap_fit_precomputed_radius_graphr     s       15DAq	E*AF((6
KA__f]SF
JJqM**__f[QF!!!$F2::-41D&T:r2   c                     t        j                  d      }t        j                  ddgddgddgg|       }|j	                  |       |j
                  j                  | k(  sJ |j                  j                  | k(  sJ y	)
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      r0   #test_isomap_fitted_attributes_dtyper     sr     //a
(C
1a&1a&1a&)>AGGAJ!!\111>><///r2   c                     t        j                  d      } t        j                  ddgddgddggt        j                        }| j                  |       t        j                  d      }t        j                  ddgddgddggt        j                        }|j                  |       t        | j                  |j                         y	)
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       r0   test_isomap_dtype_equivalencer   %  s    __+F88aVaVaV,BJJ?D
JJt__+F88aVaVaV,BJJ?D
JJtF'')<)<=r2   c                      t        j                  d      \  } }t        j                  dd      }d}t	        j
                  t        |      5  |j                  |        d d d        y # 1 sw Y   y xY w)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       r0   9test_isomap_raise_error_when_neighbor_and_radius_both_setr   2  sU     40DAq__37F
4C	z	-Q 
.	-	-s   A))A2c                      t        j                  g d      d d d f   } t        j                  t        d      5  t        j                  d      j                  |        d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r      number of connected componentsr   r   r   )r    r!   rO   warnsUserWarningr   rE   rF   )r-   s    r0   "test_multiple_connected_componentsr   =  sM    
#$QW-A	k)I	JA&**1- 
K	J	Js   &A))A2c                     t        j                  g d      d d d f   j                  | d      }t        |      }t	        j
                  t        d      5  t        j                  dd      j                  |       d d d        t        j                  |d	d
      }t	        j                  t        d      5  t        j                  dd      j                  |       d d d        y # 1 sw Y   lxY w# 1 sw Y   y xY w)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       r0   5test_multiple_connected_components_metric_precomputedr   D  s     	#$QW-44\4NA %Q'K	k)I	JAm<@@M 
K ((
KG	|+K	LAm<@@I 
M	L 
K	J
 
M	Ls   'C(8'C4(C14C=c                      t        dd      \  } }d}t        j                  |      }|j                  |        |j	                         }t        t        |      D cg c]  }d| 	 c}|       yc c}w )z'Check get_feature_names_out for Isomap.r   r   )r_   
n_featuresr   )r?   rl   N)r   r   rE   rS   get_feature_names_outr   r#   )r-   rf   r?   rg   namesis         r0   test_get_feature_names_outr   T  sj    13DAqL
//|
4Ca%%'EeL.AB.A&.ABEJBs   A1)r7   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_methodsr1   markparametrizeinfrM   rZ   rj   rq   r   r   r   r   r   r   r   r   r   r   r    r2   r0   <module>r      s2       , Q Q ' 7 
 /+"	 .dBFF^0LM756 6 8 N6@ .dBFF^0LM75+Q 6 8 N+Q\ .K0HIE JE2 .L0IJ! K! *@ 	65A	2	2 6 75.9I : 6 8I<;&
0
> .J Kr2   