
    Pi.                        d Z ddlZ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 ddlmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZmZ dd	lmZmZ dd
lm Z  ddl!m"Z" ddl#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/ ddl0m1Z1 ddl2m3Z3  ej4        g dg dg dg          Z5dZ6e5j7        \  Z8Z9 e e6e5dd          \  Z:Z;d e1D             Z<ej4        ge1z   Z= e>e<          dk    rg dnddgZ?ej@        A                    de=e?           ej@        A                    d!d"d#g          ej@        A                    d$ejB        ejC        g          d%                                     ZDej@        A                    de=e?           ej@        A                    d!d"d#g          d&                         ZEej@        A                    de=e?           d'             ZFej@        A                    d(d)d*g          ej@        A                    de=e?           ej@        A                    d+g d,          d-                                     ZGej@        A                    d.d"d#g          d/             ZHej@        A                    d0e<          d1             ZId2 ZJej@        A                    d3e:ge<z   e?           ej@        A                    d4d5d6e5K                                d7 gg d8           ej@        A                    d9eeg          d:                                     ZLej@        A                    d4d5d6e5d; gg d8           d<             ZMej@        A                    d=d>d?d@ dAfdBg          ej@        A                    d9eeg          dC                         ZNej@        A                    d9eeg          dD             ZOdE ZPej@        A                    d.d"d#g          ej@        A                    d+dFdg          dG                         ZQdH ZRej@        A                    d9eeg          dI             ZSdJ ZTej@        A                    d3e:ge<z   e?           dK             ZUdL ZVdM ZWej@        A                    dNdOdPg          dQ             ZXdR ZYdS ZZej@        A                    d9eeg          dT             Z[ej@        A                    de=e?           ej@        A                    dUed"fed#fedfg          ej@        A                    dVddg          dW                                     Z\ej@        A                    d0e<          ej@        A                    d9eeg          dX                         Z]ej@        A                    d0e<          ej@        A                    d4d5d6e5gg dY           ej@        A                    d9eeg          dZ                                     Z^ej@        A                    de=e?           ej@        A                    d$ej_        ej`        g          ej@        A                    d4d6d[g          ej@        A                    d9eeg          d\                                                 Zaej@        A                    d9eeg          d]             Zbej@        A                    d9eeg          d^             Zcd_ Zdd` Zeej@        A                    d3e:ge<z   e?           ej@        A                    d9eeg          ej@        f                     egda  e            D                        dbc          dd                                     Zhej@        A                    d$ej_        ej`        ejB        ejC        g          ej@        A                    d9eeg          de                         Ziej@        A                    d3e:ge<z   e?           df             Zjdg Zkdh Zldi Zmej@        A                    d3e:ge<z   e?           ej@        A                    d9eeg          dj                         Znej@        A                    d3e:ge<z   e?           ej@        A                    d9eeg          dk                         Zodl Zpej@        A                    de=e?           dm             Zqej@        A                    d9eeg          dn             Zrdo Zsej@        A                    de=e?           ej@        A                    d!d"d#g          dp                         Ztej@        A                    d$ejB        ejC        g          ej@        A                    dqdrdsg          dt                         Zuej@        A                    d$ejB        ejC        g          du             Zvej@        A                    dvedwfedxfg          dy             Zwej@        A                    d9eeg          dz             Zxej@        A                    d9eeg          ej@        A                    d{d|e6d}z   id~fd4e:dd         idfd4d idfd4e:ddddf         idfd4d idfg          d                         Zyej@        A                    d{de:dd         idfg          d             Zzej@        A                    d3e:ge<z             ej@        A                    d$ejC        ejB        g          d                         Z{ej@        A                    d e/e:dr          dg          d             Z|d Z}d Z~ej@        A                    dd4 ej        d6          iddgd}d}ggd}df          d             Zej@        A                    dedfedfedfg          d             Zej@        A                    de1dgz             d             Zej@        A                    d4d6d5g          d             Zej@        A                    d4d6d5g          d             Zej@        A                    de=e?           ej@        A                    d.d"d#g          d                         ZdS )zTesting for K-means    N)StringIO)sparse)threadpool_info)clone)KMeansMiniBatchKMeansk_meanskmeans_plusplus)_euclidean_dense_dense_wrapper_euclidean_sparse_dense_wrapper_inertia_dense_inertia_sparse_is_same_clustering_relocate_empty_clusters_dense_relocate_empty_clusters_sparse)_labels_inertia_mini_batch_step)
make_blobs)ConvergenceWarning)pairwise_distancespairwise_distances_argmin)v_measure_score)euclidean_distances)assert_allcloseassert_array_equalcreate_memmap_backed_data)	row_norms)CSR_CONTAINERS)_get_threadpool_controller)              @r    r    r    )      ?r"   g      @r    r    )r"   r    r    r!   r"   d   r"   *   )	n_samplescenterscluster_stdrandom_statec                 .    g | ]} |t                     S  )X).0	containers     v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/cluster/tests/test_k_means.py
<listcomp>r/   3   s     ===		!===       )densesparse_matrixsparse_arrayr2   r3   array_constr)idsalgolloydelkandtypec                     | ddgddgddgddgg|          }g d}t          j        ddgddgg|          }g d}d}t          j        ddgd	dgg|          }d
}	t          d
d||          }
|
                    ||           t	          |
j        |           t          |
j        |           t          |
j        |           |
j	        |	k    sJ d S )Nr         ?   r:   )   r=   r=   r?   r   r   r=   r=   g      ?g      ?g      ?r1   
n_clustersn_initinit	algorithmsample_weight)
nparrayr   fitr   labels_r   inertia_cluster_centers_n_iter_)r5   r7   r:   r+   rG   init_centersexpected_labelsexpected_inertiaexpected_centersexpected_n_iterkmeanss              r.   test_kmeans_resultsrU   <   s    	q!fsAha1a&9GGGA LLM8aVaV,E:::L"llOx%eQZ 8FFFOqNNNF
JJqJ...v~777FO%5666F+-=>>>>_,,,,,,r0   c                      | ddgddgddgddgg          }t          j        ddgddgg          }t          dd||          }|                    |           d}d}t	          |j        |           |j        |k    sJ 	 g d}ddgd	dgg}t          |j        |           t	          |j	        |           d S # t          $ r: g d
}d	dgddgg}t          |j        |           t	          |j	        |           Y d S w xY w)Nr   r<   r=   r?   r1   rA   g      ?r@   g      ?)r=   r=   r   r   r"   r    )rH   rI   r   rJ   r   rL   rN   r   rK   rM   AssertionError)	r5   r7   r+   rO   rT   rS   rQ   rP   rR   s	            r.   test_kmeans_relocated_clustersrX   T   sX    	q!fsAha1a&9::A 8c3Z!Q011LqNNNF
JJqMMMOFO%5666>_,,,,	C&,,!1Iay16>?;;;/1ABBBBB C C C&,,!3K$56>?;;;/1ABBBBBB	Cs   6B9 9A C=<C=c           
         t          j        g d                              dd          } | |          }t          j        d          }t          j        g d                              dd          }t          j        g d                              dd          }t          j        g d          }t          j        dt           j                  }| t           j        u rt          ||||||           n%t          |j        |j	        |j
        |||||           t          |g d	           t          |d
gdgdgg           d S )N)
      $g      #ig      !ir=   	         #@
   r[   r=   r^   )rZ   r_   )g     0r_   r_   )g      $@r   r   r>   )   r=   r=   ir]   )rH   rI   reshapeoneszerosint32r   r   dataindicesindptrr   r   )r5   r+   rG   centers_oldcenters_newweight_in_clusterslabelss          r.   test_relocate_empty_clustersrl   s   s\   
 	???@@HHQOOAQAGBKKM (,,,--55b!<<K
 (,,,--55b!<<K,,,//Xb)))Frx&}k;8JF	
 	
 	
 	
 	(FIH		
 		
 		
 )999555K3%"u!566666r0   distributionnormalblobstol){Gz?g:0yE>g0.++r   c                 F   t           j                            |          }| dk    r|                    d          }nt	          |          \  }}d||dk     <    ||          }t          d|d|          }t          d	d|d|
          }|                    |           |                    |           t          |j        |j                   t          |j
        |j
                   |j        |j        k    sJ |j        t          j        |j        d          k    sJ d S )Nrn   i  r^   sizer(   r      r=   )rB   r(   rC   rp   r9   )rE   rB   r(   rC   rp   ư>)rel)rH   randomRandomStatern   r   r   rJ   r   rM   r   rK   rN   rL   pytestapprox)	rm   r5   rp   global_random_seedrndr+   _km_lloydkm_elkans	            r.   test_kmeans_elkan_resultsr      s2   
 )

 2
3
3CxJJJJ''s+++1Aa!eHQA1CASVWWWH'  H LLOOOLLOOOH-x/HIIIx')9:::x/////h.?T J J JJJJJJJr0   rE   c                     t           j                            |          }|                    d          }d}t	          | d|dd|                              |          }|j        |k     sJ d S )Nrs   rt   i,  rw   r=   r   )rE   rB   r(   rC   rp   max_iter)rH   rz   r{   rn   r   rJ   rN   )rE   r~   r   r+   r   kms         r.   test_kmeans_convergencer      s     )

 2
3
3C



##AH	'
 
 
 
c!ff  :      r0   X_csrc           
      Z   t           j                            |          }t          |                    t          j                  z   }|                                }t          j        |          }t          j        |          }t          j        |j        d         t          j
                  }t          j        |j        d         t          j
                  }t          j        t          j        d         t          j
                  }	t          d d         }
| d d         }|	d d         }t          |
||||t           j                            |          d          }|dk    sJ t          |
||          \  }}|dk    sJ ||k     sJ t          |||||t           j                            |          d          }|dk    sJ t          |||          \  }}|dk    sJ ||k     sJ t          ||           t          ||           t          ||           t          ||           d S )Nrt   r   r>   r^   F)random_reassignr    )rH   rz   r{   r&   rn   shapecopy
zeros_likerc   r+   r:   rb   r   r   r   r   )r   r~   rngrh   centers_old_csrri   centers_new_csrweight_sumsweight_sums_csrrG   X_mbX_mb_csrsample_weight_mbold_inertiark   new_inertiaold_inertia_csr
labels_csrnew_inertia_csrs                      r.   !test_minibatch_update_consistencyr      sI    )

 2
3
3CCJJGMJ:::K!&&((O-,,KmO44O(;,Q/qw???Kh{0317CCCOGAGAJag666M SbS6DSbSzH$SbS) #
	011  K  *$0@+NNFK$$$$ '
	011  O S     #2"O# #J S    _,,,, vz***K111K111K11111r0   c                    | j         }|j        t          t          fk    sJ | j        }t          j        |          j        d         t          k    sJ t          t          t          |          d           | j
        dk    sJ d S )Nr   r"   r    )rM   r   rB   
n_featuresrK   rH   uniquer   r   true_labelsrL   )r   r&   rk   s      r.   _check_fitted_modelr     s     !G=Z44444ZF9V"1%3333 OK88#>>>;r0   
input_datarD   rz   	k-means++c                 4    t                                           S Nr&   r   r+   kr(   s      r.   <lambda>r   #  s    w||~~ r0   )rz   r   ndarraycallable	Estimatorc                     t          |t                    rdnd} | |t          d|                              |          }t	          |           d S )Nr^   r=   r$   rD   rB   r(   rC   )
isinstancestrrB   rJ   r   )r   r   rD   rC   r   s        r.   test_all_initr     s_     dC((/RRaF	jr&
 
 
	c*oo  r0   c                 4    t                                           S r   r   r   s      r.   r   r   2  s     r0   c                 &   t          | d          r|                                 } t          | t                    rdnd}t	          | t
          d|          }t          d          D ]}|                    t                     t          |           d S )Nr   r^   r=   r   r   r#   )
hasattrr   r   r   r   rB   rangepartial_fitr+   r   )rD   rC   r   is       r.   &test_minibatch_kmeans_partial_fit_initr   0  s     tV yy{{ dC((/RRaF	jq
 
 
B 3ZZ  
qr0   zinit, expected_n_init)r   r=   )rz   defaultc                 H    |                     || j        d         f          S )Nr=   rt   )uniformr   )r+   rB   r(   s      r.   r   r   K  s*    0D0D !'!*- 1E 1 1 r0   r   )
array-liker=   c                     d\  }}}t           j                            ||          }|dk    r t           j                            ||          }|dk    r| t          u rdnd} | ||d                              |          }|j        |k    sJ dS )	zCheck that `n_init="auto"` chooses the right number of initializations.
    Non-regression test for #26657:
    https://github.com/scikit-learn/scikit-learn/pull/26657
    )r#   r^   rw   r   r   r?   r^   autorB   rD   rC   N)rH   rz   randnr   rJ   _n_init)r   rD   expected_n_initn_sampler   rB   r+   rT   s           r.   ,test_kmeans_init_auto_with_initial_centroidsr   E  s    ( (2$Hj*
	*--A|yz:66)##(O;;!!Y*4GGGKKANNF>_,,,,,,r0   c                    t          j        t                    }t          j        t                    } | t          t          d|                              t                    } | t          |d|                              |          }t          |j        |j                   t          |j	        |j	                   d S )Nr=   rB   rD   rC   r(   )
rH   asfortranarrayr+   r&   rB   rJ   r   rM   r   rK   )r   r~   	X_fortrancenters_fortrankm_ckm_fs         r.   test_fortran_aligned_datar   d  s     !!$$I'00O9GADV  	c!ff 	 9'	  
 
c)nn 	 D)4+@AAAt|T\22222r0   c                      t          t          dd          } t          j        }t	                      t          _        	 |                     t                     |t          _        d S # |t          _        w xY w)Nr$   r=   )rB   r(   verbose)r   rB   sysstdoutr   rJ   r+   )r   
old_stdouts     r.   test_minibatch_kmeans_verboser   w  sZ    	JR	K	K	KBJCJ 
q			


Z
s   A% %A3rq   c           	         t           j                            d                              d          }t	          | t
          ddd|d                              |           |                                }t          j	        d|j
                  sJ t          j	        d	|j
                  sJ |dk    rt          j	        d
|j
                  sJ d S t          j	        d|j
                  sJ d S )Nr   rs   rt   r$   rz   r=   )rE   rB   r(   rD   rC   rp   r   zInitialization completezIteration [0-9]+, inertiazstrict convergencez center shift .* within tolerance)rH   rz   r{   rn   r   rB   rJ   
readouterrresearchout)rE   rp   capsysr+   captureds        r.   test_kmeans_verboser     s     		a  ''Z'88A
   
c!fff  ""H9/>>>>>918<@@@@@
axxy.=======y<hlKKKKKKKr0   c                      t          j        t          d          5  t          dd                              t
                     d d d            d S # 1 swxY w Y   d S )Nz,init_size.* should be larger than n_clustersmatchr^      )	init_sizerB   )r|   warnsRuntimeWarningr   rJ   r+   r*   r0   r.   'test_minibatch_kmeans_warning_init_sizer     s    	M
 
 
 < < 	"44488;;;< < < < < < < < < < < < < < < < < <   *AAAc                     t          j        t          d          5   | t          t          d                              t                     d d d            d S # 1 swxY w Y   d S )NzAExplicit initial center position passed: performing only one initr   r^   rD   rB   rC   )r|   r   r   r&   rB   rJ   r+   )r   s    r.   'test_warning_n_init_precomputed_centersr     s     
Q
 
 
 I I 		w:bAAAEEaHHH	I I I I I I I I I I I I I I I I I Is   1AA!Ac                    t          dd|           \  }}d|d d dd d f<   t          dd| d	                              |          }|j                            d
                                          }|dk    sJ d|d            t          dd| d	                              |          }|j                            d
                                          }|dk    sJ d|d            t          d| d          }t          d          D ]}|                    |           |j                            d
                                          }|dk    sJ d|d            d S )Nr#   rw   )r%   r&   r(   r   r1   r   r^   rz   )rB   
batch_sizer(   rD   r=   axisr\   znum_non_zero_clusters=z is too small   )rB   r(   rD   )r   r   rJ   rM   anysumr   r   )r~   zeroed_Xr   r   num_non_zero_clustersr   s         r.    test_minibatch_sensible_reassignr     s    'q/A  Hk HSSqS!!!V	"3EH
 
 
	c(mm  /333;;??AA 1$$$&N)>&N&N&N$$$ 
#4FX
 
 
	c(mm  /333;;??AA 1$$$&N)>&N&N&N$$$ 
B5Gh	W	W	WB3ZZ ! !
x    /333;;??AA 1$$$&N)>&N&N&N$$$$$r0   c           
         t          j        t          t          f          }t	          t                    D ]/}t
          t          |k                                 d          ||<   0t          j        t                    }t          j
        |          }t          | ||d          d          }t          | |||t          j        t                    t           j                            |          dd           t          | ||d          d          }||k    sJ t          | |||t          j        t                    t           j                            |          dd           t!          ||           d S )Nr   r   r=   T)r   reassignment_ratiogV瞯<)rH   emptyrB   r   r   r+   r   meanrb   r%   
empty_liker   r   rc   rz   r{   r   )r   r~   perfect_centersr   rG   ri   score_beforescore_afters           r.   test_minibatch_reassignr     sp    h
J788O: > >{a/05515==GI&&M-00K
 $JPQRRSTUUL

	011	 	 	 	 #:}k1MMaPPK+%%%% 

	011 	 	 	 	 K11111r0   c                  h    t          ddt          dd                              t                     d S )Nr#   r^   r$   T)rB   r   r   r(   r   )r   r%   rJ   r+   r*   r0   r.   &test_minibatch_with_many_reassignmentsr     s8    
    
c!fffffr0   c                  l   t          ddd                              t                    } | j        dk    sJ t          ddd                              t                    } | j        dk    sJ t          dddt          dz                                 t                    } | j        t          k    sJ d S )Nr^   rw   r=   )rB   r   rC         )rB   r   rC   r   )r   rJ   r+   
_init_sizer%   r   s    r.   test_minibatch_kmeans_init_sizer     s     
B1Q	?	?	?	C	CA	F	FB=B 
B1Q	?	?	?	C	CA	F	FB=B 
!AQ
 
 
	c!ff  =I%%%%%%r0   ztol, max_no_improvement)-C6?N)r   r^   c                     t          ddd          \  }}}t          d|d|dddd|	  	        }|                    |           d|j        cxk     rdk     sn J |                                 }|d	|j        v sJ |dk    rd
|j        v sJ d S d S )Nr?   r   T)r&   r(   return_centersr   r^   r=   )	rB   rD   r   rp   r(   r   rC   r   max_no_improvementz Converged (small centers change)z*Converged (lack of improvement in inertia))r   r   rJ   rN   r   r   )r   rp   r  r+   r   r&   r   r   s           r.   #test_minibatch_declared_convergencer  $  s     qqNNNMAq'	-

 

 

B FF1IIIrzB  ""H!1X\AAAA
axx;x|KKKK xKKr0   c                     d} t           j        d         }t          d| d                              t                     }|j        t          j        |j        | z  |z            k    sJ t          |j        t                    sJ t          d| ddd d                              t                     }|j        dk    sJ |j        d|z  | z  k    sJ t          |j        t                    sJ d S )Nr   r   r?   )rB   r   r(   r^   )rB   r   r(   rp   r  r   )
r+   r   r   rJ   rN   rH   ceiln_steps_r   int)r   r%   r   s      r.   test_minibatch_iter_stepsr
  @  s    J
I	A*1	M	M	M	Q	QRS	T	TB :"+
":i!GHHHHHHbj#&&&&& 

 
 
 
c!ff  :;2	>j88888bk3'''''''r0   c                      t                                           } t          dt          d          }|                    |            t          |           t          | t                      d S )NFr$   )copy_xrB   r(   )r+   r   r   rB   rJ   r   r   )my_Xr   s     r.   test_kmeans_copyxr  Y  sX    6688D	u"	E	E	EBFF4LLL D!r0   c                 T   t           j                            |                              dd          } | d|d          }|                    |                              |          } | d|d          }|                    |                              |          }||k    sJ d S )Nr#   r^   r=   )rC   r(   r   )rH   rz   r{   r   rJ   score)r   r~   r+   km1s1km2s2s          r.   test_score_max_iterr  d  s     		01177R@@A
)1+=
J
J
JC			!		B
)1+=
K
K
KC			!		B777777r0   zEstimator, algorithmr   c                    t          ddd|          \  }} |||          } | ddd||          }||                    |           |                    |           |j        }	|                    |          }
t          |
|	           |                    |          }
t          |
|	           |                    |j                  }
t          |
t          j	        d                     d S )Nr   r^   r%   r   r&   r(   r>   rz   )rB   rD   rC   r   r(   )rE   )
r   
set_paramsrJ   rK   predictr   fit_predictrM   rH   arange)r   rE   r5   r   global_dtyper~   r+   r   r   rk   preds              r.   test_kmeans_predictr  q  s    "b?Q  DAq 	Ql+++A	'
 
 
B 
	***FF1IIIZF ::a==DtV$$$ >>!DtV$$$ ::b)**DtRYr]]+++++r0   c                    t           j                            |                              t          f          } | t
          |d          }|                    t          |            | t
          |d          }|                    ||           t          |j	        |j	                   t          |j        |j                   d S Nr=   rB   r(   rC   rF   )rH   rz   r{   random_sampler%   rB   rJ   r+   r   rK   r   rM   )r   r   r~   rG   km_dense	km_sparses         r.   test_dense_sparser%    s     I))*<==KK	 M y,>q  H LL-L000	,>q  I MM%}M555x'):;;;H-y/IJJJJJr0   )rz   r   r   c                 h   t          |t                    rdnd} | t          ||d          }|                    |           t	          |                    t                    |j                   |                    t                     t	          |                    |          |j                   d S )Nr^   r=   r   r   )r   r   rB   rJ   r   r  r+   rK   )r   rD   r   rC   r   s        r.   test_predict_dense_sparser'    s     dC((/RRaF	jtFQR	S	S	SBFF5MMMrzz!}}bj111FF1IIIrzz%(("*55555r0   r   c           	      B   t          j        ddgddgddgddgddgddgg          } |||	          }|d
k    rdnd}|d
k    r
|d d         n|} | d|||          }| t          u r|                    d           |                    |           |j        j        t           j        k    sJ g d}	t          t          |j
        |	          d           | t          u r>t          |                              |          }|j        j        t           j        k    sJ d S d S )Nr   r^      r\   r[   r=   r1   r`   r>   r   r   )r   )r   r=   r=   r   r   r=   r"   )rH   rI   r   r  rJ   rM   r:   float64r   r   rK   r   r   )
r   r5   r:   rD   r~   X_denser+   rC   r   rP   s
             r.   test_integer_inputr,    sY    hAR2q'B7QFQGLMMGWE***A)##QQF)++72A2;;D	4=O
 
 
B O##
###FF1III $
2222(((OOBJ@@#FFF O##2YY""1%%"(BJ6666 $#66r0   c                     | t           |                              t                    }|                    |j                  }t          |t          |j                             t          |                                t          j
        t                                |                    t                    }t          |t          t          |j                             d S )NrB   r(   )rB   rJ   r+   	transformrM   r   r   r   diagonalrH   rc   )r   r~   r   Xts       r.   test_transformr2    s     
j7I	J	J	J	N	Nq	Q	QB 
b)	*	*BB*2+>??@@@r{{}}bhz&:&:;;; 
aBB*1b.ABBCCCCCr0   c                      | |d                               t                                        t                    } | |d                              t                    }t	          ||           d S )Nr=   )r(   rC   )rJ   r+   r/  fit_transformr   )r   r~   X1X2s       r.   test_fit_transformr7    sn     
 21	=	=	=	A	A!	D	D	N	Nq	Q	QB	 21	=	=	=	K	KA	N	NBBr0   c                     t           j        }dD ]@}t          t          d|| d                              t
                    }|j        |k    sJ Ad S )N)r=   rw   r^   rz   r=   )rB   rD   rC   r(   r   )rH   infr   rB   rJ   r+   rL   )r~   previous_inertiarC   r   s       r.   test_n_initr;    sq    v 
/ 
/ !+
 
 
 #a&& 	 {......
/ 
/r0   c                 $   t          t          t          d |           \  }}}|j        t          t          fk    sJ t          j        |          j        d         t          k    sJ t          t          t          |          d           |dk    sJ d S )N)rB   rG   r(   r   r"   r    )
r	   r+   rB   r   r   rH   r   r   r   r   )r~   cluster_centersrk   inertias       r.   test_k_means_functionr?  
  s    '.	jCU( ( ($OVW  Z$<<<<<9V"1%3333 OK88#>>>S======r0   c              #   2   K   | ]}|d          dk    |V  dS )user_apiblasNr*   )r,   r   s     r.   	<genexpr>rC    s0      DD!AjMV,C,CA,C,C,C,CDDr0   zUFails for some global_random_seed on Atlas which cannot be detected by threadpoolctl.)reasonc                     | d|          }i }i }i }i }t           j        t           j        fD ]}|                    |d          }	|                    |	           |j        ||<   |                    |	          ||<   |j        ||<   |j        ||<   |j        j	        |k    sJ | t          u r/|                    |	dd                    |j        j	        |k    sJ d}
t          |t           j                 |t           j                 |
           t          |t           j                 |t           j                 |t           j                                                 |
z  	           t          |t           j                 |t           j                 |t           j                                                 |
z  	           t          |t           j                 |t           j                            d S )
Nr=   )rC   r(   Fr   r   r?   r  rtol)atol)rH   r*  float32astyperJ   rL   r/  rM   rK   r:   r   r   r   maxr   )r   r   r~   r   r>  r1  r&   rk   r:   r+   rH  s              r.   test_float_precisionrM    s    
!*<	=	=	=BG	BGF*bj) 6 6e%00
q			LLOO5	,
u "(E1111 ''NN1QqS6"""&,5555 DGBJ')<4HHHHBrzNBrzNBJ9K9K9M9MPT9TUUUU
WRZ0wrz7J7N7N7P7PSW7W    vbj)6"*+=>>>>>r0   c                     t                               |d          }t                              |d          } | |t          d          }|                    |           t          j        |j        |          rJ d S )NFrF  r=   r   )r+   rK  r&   rB   rJ   rH   may_share_memoryrM   )r   r:   
X_new_typecenters_new_typer   s        r.   test_centers_not_mutatedrR  J  s{     %e,,J~~e%~88	(Z	J	J	JBFF:"2#68HIIIIIIIr0   c                     t          t                                        |           }t          t          |j        d                              |           }t	          |j        |j                   d S )N)rB   r=   r   )r   rB   rJ   rM   r   )r   r  r  s      r.   test_kmeans_init_fitted_centersrT  Y  sj     J
'
'
'
+
+J
7
7C
JS-A!
L
L
L
P
P C C(#*>?????r0   c                 h   t          j        ddgddgddgddgg          }t          d|           }d}t          j        t
          |          5  |                    |           t          |j                  t          t          d                    k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r=      r.  zmNumber of distinct clusters \(3\) found smaller than n_clusters \(4\). Possibly due to duplicate points in X.r   r?   )
rH   asarrayr   r|   r   r   rJ   setrK   r   )r~   r+   r   msgs       r.   1test_kmeans_warns_less_centers_than_unique_pointsrZ  i  s    

QFQFQFQF344A	1+=	>	>	>B	D  
(	4	4	4 0 0
q			 2:#eAhh--/////	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   A
B''B+.B+c                 .    t          j        | d          S Nr   r   )rH   sort)r&   s    r.   _sort_centersr^  z  s    77####r0   c                 |   t           j                            |                               ddt                    }t          j        t          |d          }t          t          dt          |           }t          |                              t          |          }t          j        |j        |          }t          |                              |          }t          |j        |           t          |j        |j                   t          t!          |j                  t!          |j                             d S )Nr=   rw   rt   r   r   )rD   rC   rB   r(   rF   )rH   rz   r{   randintr%   repeatr+   r   r&   rB   r   rJ   rK   r   r   rL   r^  rM   )r~   rG   X_repeatr   km_weightedrepeated_labelskm_repeateds          r.   test_weighted_vs_repeatedrf  ~  s   
 I))*<==EE	19 F  M yM222H	Q:DV
 
 
B ))---??Ki 3]CCO))--))K{*O<<<K(+*>???k233k233    r0   c                 V   t          j        t                    } | t          |d          }t	          |                              |d           }t	          |                              ||          }t          |j        |j                   t          |j	        |j	                   d S r   )
rH   rb   r%   rB   r   rJ   r   rK   r   rM   )r   r   r~   rG   r   km_nonekm_oness          r.   test_unit_weights_vs_no_weightsrj    s     GI&&M	j7IRS	T	T	TBBiimmJdm;;GBiimmJmmDDGw888G,g.FGGGGGr0   c                    t           j                            |                              t                    } | t
          |d          }t          |                              ||          }t          |                              |d|z            }t          |j	        |j	                   t          |j        |j                   d S )Nrt   r=   r!  rF   r<   )rH   rz   r{   r   r%   rB   r   rJ   r   rK   r   rM   )r   r   r~   rG   r   km_orig	km_scaleds          r.   test_scaled_weightsrn    s     I))*<==EE9EUUM	j7IRS	T	T	TBBiimmJmmDDGb		jm8KLLIw	(9:::G,i.HIIIIIr0   c                  r    t          dd                              t                    } | j        dk    sJ d S )Nr9   r=   )rE   r   )r   rJ   r+   rN   r   s    r.    test_kmeans_elkan_iter_attributerp    s7     
'A	.	.	.	2	21	5	5B:??????r0   c                 .    | dgdgg          }ddg}t          j        dgdgg          }t          d|d          }|                    ||           t	          t          |j                            dk    sJ t          |j        dgdgg           d S )	Nr[   r=   gffffff?g?r^   r1   r   rF   )	rH   rI   r   rJ   lenrX  rK   r   rM   )r5   r+   rG   rD   r   s        r.   #test_kmeans_empty_cluster_relocatedrs    s     	rdQC[!!A#JM8bTB4L!!D	14	2	2	2BFF1MF***s2:1$$$$B'2$55555r0   c                 $   t           j                            |          }|                    d          }t	                                          dd          5   | t          |                              |          j        }d d d            n# 1 swxY w Y   t	                                          dd          5   | t          |                              |          j        }d d d            n# 1 swxY w Y   t          ||           d S )N)2   r^   rt   r=   openmp)limitsrA  r.  r1   )
rH   rz   r{   rn   r   limitrB   rJ   rK   r   )r   r~   r   r+   result_1result_2s         r.   #test_result_equal_in_diff_n_threadsr{    s{    )

 2
3
3C


!!A	#	%	%	+	+1x	+	H	H 
 
I:LMMMSVV 	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
$	%	%	+	+1x	+	H	H 
 
I:LMMMSVV 	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 x*****s$   +BBB>+C55C9<C9c                      t          j        t          d          5  t          dd                              t
                     d d d            d S # 1 swxY w Y   d S )Nz9algorithm='elkan' doesn't make sense for a single clusterr   r=   r9   )rB   rE   )r|   r   r   r   rJ   r+   r*   r0   r.   test_warning_elkan_1_clusterr}    s    	I
 
 
 7 7 	!w///33A666	7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7r   c                 d   t           j                            |                              d          }|d d         } | |          }d } |||          \  }}t	          dd||d                              |          }|j        }	|j        }
t          ||	           t          ||
           d S )N)r#   rw   rt   rw   c                     |                                 }t          | |          }t          |j        d                   D ]%}| ||k                                 d          ||<   &t          | |          }||fS r\  )r   r   r   r   r   )r+   rD   new_centersrk   labels        r.   	py_kmeansz+test_k_means_1_iteration.<locals>.py_kmeans  s~    iikk*1d334:a=)) 	A 	AE!"6U?!3!8!8a!8!@!@K*1k::{""r0   r=   )rB   rC   rD   rE   r   )
rH   rz   r{   r   r   rJ   rK   rM   r   r   )r5   r7   r~   r+   rO   r  	py_labels
py_centers	cy_kmeans	cy_labels
cy_centerss              r.   test_k_means_1_iterationr    s    
 		01199x9HHARaR5LQA# # # &Ia66IzQ\TA  	c!ff  !I+Jy),,,J
+++++r0   squaredTFc                    t           j                            |          }t          j        dddd||           }|                                                    d          }|                    d                              | d          }|d	z                                  }||z
  d	z                                  }|r|nt          j	        |          }t          |||          }	t          |j        |j        |||          }
| t           j        k    rd
nd}t          |	|
|           t          |	||           t          |
||           d S )Nr=   r#   r<   csrdensityformatr(   r:   r[   FrF  r1   r  gHz>rG  )rH   rz   r{   sptoarrayra   r   rK  r   sqrtr   r   re   rf   rJ  r   )r:   r  r~   r   a_sparsea_densebb_squared_normexpecteddistance_dense_densedistance_sparse_denserH  s               r.   test_euclidean_distancer    sU   
 )

 2
3
3Cy	3E5  H   ((,,G		#e%00AdZZ\\N1"''))H"9xx(9(9H9'1gNN;x'NG  BJ&&44DD(*?dKKKK((>>>>)8$??????r0   c                 >   t           j                            |          }t          j        dddd||           }|                                }|                    d                              | d          }|                    dd                              | d          }|                    ddt           j        	          }|||         z
  d
z  	                    d          }t          j	        ||z            }	t          ||||d          }
t          ||||d          }| t           j        k    rdnd}t          |
||           t          |
|	|           t          ||	|           d}||k    }||         ||         z
  d
z  	                    d          }t          j	        |||         z            }	t          ||||d|          }
t          ||||d|          }t          |
||           t          |
|	|           t          ||	|           d S )Nr#   r^   r<   r  r  FrF  rw   )ru   r:   r1   r=   r   )	n_threadsr  rx   rG  )r  single_label)rH   rz   r{   r  r  r   rK  r`  rd   r   r   r   rJ  r   )r:   r~   r   X_sparser+  rG   r&   rk   	distancesr  inertia_denseinertia_sparserH  r  masks                  r.   test_inertiar  +  sS    )

 2
3
3CyRUE  H   GIIcNN))%e)<<Mii2%%e%%88G[[BH[55FGFO+166A6>>Ivi-/00H"7M7FVWXXXM$-&A  N BJ&&44DDM>====M8$7777NH48888 EU?D$-'%.0Q6;;;CCIvi-"5566H"15  M %-&AE  N M>====M8$7777NH4888888r0   zKlass, default_n_initr^   r?   c                      | dd          }|                     t                     |j        dk    sJ  | dd          }|                     t                     | j        dk    r|j        dk    snd S J d S )Nr   r   )rC   rD   r=   rz   r   r^   )rJ   r+   r   __name__)Klassdefault_n_initests      r.   test_n_init_autor  V  s    
%vK
0
0
0CGGAJJJ;!
%vH
-
-
-CGGAJJJ %( : :3;"Ar0   c                     t          j        dgdgdgg          }t          j        g d          } | dd                              ||           t          |t          j        g d                     d S )Nr=   r1   rV  )r<   g?g333333?r   r.  rF   )rH   rI   rJ   r   )r   r+   rG   s      r.   test_sample_weight_unchangedr  a  s~     	1#sQC!!AH___--MI+++///OOO}bh&?&?@@@@@r0   zparam, matchrB   r=   z#n_samples.* should be >= n_clusterszIThe shape of the initial centers .* does not match the number of clustersc                     | d d         S )Nr1   r*   X_r   r(   s      r.   r   r   v  s    BQB r0   r`   zUThe shape of the initial centers .* does not match the number of features of the datac                     | d dd df         S )Nr`   r1   r*   r  s      r.   r   r     s    BQBF r0   c                      | d          }t          j        t          |          5   |j        di |                    t
                     d d d            d S # 1 swxY w Y   d S )Nr=   )rC   r   r*   )r|   raises
ValueErrorr  rJ   r+   )r   paramr   r   s       r.   test_wrong_paramsr  k  s    > 
!			B	z	/	/	/ & &""1%%%& & & & & & & & & & & & & & & & & &s   &AA"Ax_squared_normszKThe length of x_squared_norms .* should be equal to the length of n_samplesc                     t          j        t          |          5  t          t          t
          fi |  d d d            d S # 1 swxY w Y   d S )Nr   )r|   r  r  r
   r+   rB   )r  r   s     r.   !test_kmeans_plusplus_wrong_paramsr    s     
z	/	/	/ 0 0://///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   AA	Ac                    |                      |          }t          |t          |          \  }}|j        d         t          k    sJ |dk                                    sJ ||j        d         k                                    sJ |j        d         t          k    sJ |                    d          |                    d          k                                    sJ |                    d          |                    d          k                                    sJ t          t          |                              |          |           d S )Nrv   r   r   )	rK  r
   rB   r   allrL  minr   r+   )r   r:   r~   re   r&   rf   s         r.   test_kmeans_plusplus_outputr    sG    U##D&j'9  GW =z))))qLtz!}$))+++++ =z))))KKQK4888#3#3388:::::KKQK4888#3#3388:::::
 AgJ%%e,,g66666r0   r  c                 z    t          t          t          |           \  }}t          t          |         |           d S )N)r  )r
   r+   rB   r   )r  r&   rf   s      r.   test_kmeans_plusplus_normsr    s7     'q*oVVVGWAgJ(((((r0   c                     t          t          t          |           \  }}t          j        t                    }t          |t          |           \  }}t          ||           d S )Nrv   )r
   r+   rB   rH   r   r   )r~   	centers_cr   r   r   s        r.   test_kmeans_plusplus_dataorderr    sd    "1j?QRRRLIq!!$$I(:,>  OQ I/////r0   c                  D   t          j        g dt           j                  } t          | | d          sJ t          j        g dt           j                  }t          | |d          sJ t          j        g dt           j                  }t          | |d          rJ d S )N)r=   r   r   r=   r1   r   r1   r=   r>   r?   )r   r1   r1   r   r=   r1   r=   r   )r=   r   r   r1   r1   r   r1   r=   )rH   rI   rd   r   )labels1labels2labels3s      r.   test_is_same_clusteringr    s    h///rx@@@Gw33333 h///rx@@@Gw33333 h///rx@@@G"7GQ7777777r0   kwargs)rD   rC   c                     t          j        ddgddgddgddggt           j                  }t          dddi| }|                    |           dS )	zZCheck that init works with numpy scalar strings.

    Non-regression test for #21964.
    r   r<   r=   r>   rB   r1   Nr*   )rH   rW  r*  r   rJ   )r  r+   
clusterings      r.   -test_kmeans_with_array_like_or_np_scalar_initr    sc     	
QFS!HsAhA7rzJJJA//1///JNN1r0   zKlass, methodrJ   r   c                 (   | j                                          |             } t          ||          t                     |j        j        d         }|                                }t          fdt          |          D             |           dS )z=Check `feature_names_out` for `KMeans` and `MiniBatchKMeans`.r   c                     g | ]} | 	S r*   r*   )r,   r   
class_names     r.   r/   z*test_feature_names_out.<locals>.<listcomp>  s$    FFFq:*q**FFFr0   N)	r  lowergetattrr+   rM   r   get_feature_names_outr   r   )r  methodrT   rB   	names_outr  s        @r.   test_feature_names_outr    s     %%''JUWWFGFFA(.q1J,,..IFFFFE*4E4EFFF	RRRRRr0   csr_containerc                 @   t          dddd          \  }}|  | |          }t                      }|                    |          }t          |j                  |_        t          |j                  |_        |                    |          }t          ||           dS )z_Check that predict does not change cluster centers.

    Non-regression test for gh-24253.
    r   r^   r   r  N)r   r   r  r   rM   rK   r  r   )r  r+   r   rT   y_pred1y_pred2s         r.   ,test_predict_does_not_change_cluster_centersr    s     BQOOODAq M!XXF  ##G78OPPF.v~>>FNnnQGw(((((r0   c           
         t           j                            |          }t          ddd|          \  }}t	          |d          }t                      }|                    ||| |                    |j        d                   dt           j                            |          	          }|                    ||| t          j	        |j        d                   dt           j                            |          	          }t          j        t                    5  t          ||           d
d
d
           d
S # 1 swxY w Y   d
S )zCheck that sample weight is used during init.

    `_init_centroids` is shared across all classes inheriting from _BaseKMeans so
    it's enough to check for KMeans.
    r   r^   r  Tr  r   rt   rw   r+   r  rD   rG   n_centroidsr(   N)rH   rz   r{   r   r   r   _init_centroidsr   r   rb   r|   r  rW   r   )	rD   r~   r   r+   r   r  rT   clusters_weightedclusterss	            r.   test_sample_weight_initr    s    )

 2
3
3C"b?Q  DAq  4000OXXF..
'kkqwqzk22Y**+=>> /   %%
'gagaj))Y**+=>> &  H 
~	&	& 5 5)84445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   D88D<?D<c           
         t           j                            |          }t          ddd|          \  }}|                    |j        d                   }d|ddd<   t          |d	          }t                      }|                    ||| |d
t           j                            |                    }t          |ddd         |          }	t          j
        t          j        |	d                    rJ dS )zCheck that if sample weight is 0, this sample won't be chosen.

    `_init_centroids` is shared across all classes inheriting from _BaseKMeans so
    it's enough to check for KMeans.
    r#   rw   r  r   rt   Nr1   Tr  r^   r  )rH   rz   r{   r   r   r   r   r   r  r   r   isclose)
rD   r~   r   r+   r   rG   r  rT   r  ds
             r.   test_sample_weight_zeror  4  s    )

 2
3
3C!Q=O  DAq KKQWQZK00MM##A#4000OXXF..
'#Y**+=>> /   	AcccF$566AvbjA&&'''''''r0   c                 0   t          j        ddgddgddgddgddgg          }t          d||           }d}t          j        t
          |          5  |                     ||                     ddd           n# 1 swxY w Y   |j        dk    sJ dS )zCheck that kmeans stops when there are more centers than non-duplicate samples

    Non-regression test for issue:
    https://github.com/scikit-learn/scikit-learn/issues/28055
    r   r=   rw   )rB   rD   rE   zENumber of distinct clusters \(4\) found smaller than n_clusters \(5\)r   N)rH   rI   r   r|   r   r   rJ   rN   )rE   r5   r+   r   rY  s        r.   test_relocating_with_duplicatesr  R  s     	1a&1a&1a&1a&1a&9::A	11		:	:	:B
RC	(	4	4	4    
||A                              :??????s   A>>BB)__doc__r   r   ior   numpyrH   r|   scipyr   r  threadpoolctlr   sklearn.baser   sklearn.clusterr   r   r	   r
   sklearn.cluster._k_means_commonr   r   r   r   r   r   r   sklearn.cluster._kmeansr   r   sklearn.datasetsr   sklearn.exceptionsr   sklearn.metricsr   r   sklearn.metrics.clusterr   sklearn.metrics.pairwiser   sklearn.utils._testingr   r   r   sklearn.utils.extmathr   sklearn.utils.fixesr   sklearn.utils.parallelr   rI   r&   r%   r   rB   r   r+   r   X_as_any_csrdata_containersrr  data_containers_idsmarkparametrizerJ  r*  rU   rX   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r%  r'  rd   int64r,  r2  r7  r;  r?  skipifr   rM  rR  rT  rZ  r^  rf  rj  rn  rp  rs  r{  r}  r  r  r  r  r  r  r  r  r  r  r  str_r  r  r  r  r  r  r*   r0   r.   <module>r     s     				 



                  ) ) ) ) ) )       M M M M M M M M M M M M                  F E E E E E E E ' ' ' ' ' ' 1 1 1 1 1 1 I I I I I I I I 3 3 3 3 3 3 8 8 8 8 8 8         
 , + + + + + . . . . . . = = = = = = "(!!!!!!!!!  	  
Jc  ; >=n===8*~- s<A /...
?	#  >QRR'7!3442:rz":;;- - <; 54 SR-* >QRR'7!344C C 54 SRC: >QRR&7 &7 SR&7R (G)<==>QRR 7 7 788K K 98 SR >=K6 w&899! ! :9!$ ,//<2 <2 0/<2~   C,   
 
{GLLNN,U,UV666   
 v&?@@  A@   
{G%N%NO666   
  
    		
 	
  v&?@@- - A@ -  v&?@@3 3 A@3$      w&899q	**L L +* :9L2< < < v&?@@I I A@IO O OB C,   
+2 +2 
+2\  & & &$ 2\74KLLL L MLL6( ( (2   v&?@@	 	 A@	 >QRRg)OT+BC  aX.. ,  , /.	  SR ,F ,//v&?@@K K A@ 0/K$ ,//
X{G,2T2T2T    v&?@@
6 
6 A@  0/

6 >QRR28RX"677+y!9::v&?@@7 7 A@ ;: 87 SR78 v&?@@D D A@D" v&?@@  A@/ / /    C,   
 v&?@@DD((DDDDDD	   "? "?  A@ "?J 28RXrz2:"NOOv&?@@
J 
J A@ PO
J C,   
@ @ 
@0 0 0"$ $ $  4 C,   
 v&?@@
H 
H A@ 
H C,   
 v&?@@
J 
J A@ 
J   >QRR6 6 SR6 v&?@@+ + A@+*7 7 7 >QRR'7!344, , 54 SR,6 2:rz":;;T5M22@ @ 32 <;@2 2:rz":;;'9 '9 <;'9T 0FB</STAU2VWWB B XWB v&?@@A A A@A v&?@@
	A	&(NOQrrUO&	
 778&	
 Qrr2A2vY2	
 ;;<2	
# 4& &5  A@6&  "1"&3	
	 	0 0	 	0
 C,  2:rz":;;7 7 <;	 
70 *YYq$-G-G-G,NOO) ) PO)
0 
0 
08 8 8  ,,-!Q!Q8HTU/V/VW 	 	 	 e_.-0PQ S S	 S .D6*ABB) ) CB)& +x!8995 5 :95B +x!899( ( :9(: >QRRw&899  :9 SR  r0   