o
    tBhF                     @   s	  d Z ddlZddlZddlZddlm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 ddlmZ dd	lm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 ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl!m#Z# ddl!m$Z$ ddl!m%Z% ddl!m&Z& ddl!m'Z' ddl!m(Z( ddl)m*Z* ddl+m,Z, e-g dg dg dgZ.dZ/e.j0\Z1Z2e*e/e.ddd \Z3Z4e5e3Z6ej7j8d!ej-ej5gd"d#gd$ej78d%d&d'gej78d(ej9ej:gd)d* Z;ej7j8d!ej-ej5gd"d#gd$ej78d%d&d'gd+d, Z<ej7j8d!ej-ej5gd"d#gd$d-d. Z=ej78d/d0d1gej7j8d!ej-ej5gd"d#gd$ej78d2g d3d4d5 Z>ej78d6d&d'gd7d8 Z?ej78d6d9d:gd;d< Z@d=d> ZAd?d@ ZBej7j8dAe3e6gd"d#gd$ej7j8dBdCdDe.dEdF gg dGd$ej78dHeegdIdJ ZCej7j8dBdCdDe.dKdF gg dGd$dLdM ZDej78dHeegdNdO ZEej78d%d&d'gej78d(ej9ej:gej78dPejFej5gej78dQg dRdSdT ZGdUdV ZHej78d6d&d'gej78d2dWdgdXdY ZIdZd[ ZJej78dHeegd\d] ZKd^d_ ZLej7j8dAe3e6gd"d#gd$d`da ZMdbdc ZNddde ZOej78dfdgdhgdidj ZPdkdl ZQdmdn ZRej78dHeegdodp ZSej7j8d!ej-ej5gd"d#gd$ej78d(ej9ej:gej78dBdCdDgej78dqed&fed'fedfgdrds ZTej78dHeegdtdu ZUej7j8dBdCdDe.gg dvd$ej78dHeegdwdx ZVej7j8d!ej-ej5gd"d#gd$ej78d(ejWejXgej78dBdDdygej78dHeegdzd{ ZYej78dHeegd|d} ZZej78dHeegd~d Z[dd Z\dd Z]ej7j8dAe3e6gd"d#gd$ej78dHeegdd Z^ej78d(ejWejXej9ej:gej78dHeegdd Z_ej7j8dAe3e6gd"d#gd$dd Z`dd Zadd Zbdd Zcej7j8dAe3e6gd"d#gd$ej78dHeegdd Zdej7j8dAe3e6gd"d#gd$ej78dHeegdd Zedd Zfej7j8d!ej-ej5gd"d#gd$dd Zgej78dHeegdd Zhdd Ziej7j8d!ej-ej5gd"d#gd$ej78d%d&d'gdd Zjej78d(ej9ej:gej78dddgdd Zkej78d(ej9ej:gdd Zlej78dHeegdd Zmej78dHeegej78dddidfddidfde/d idfdBe3dd idfdBddF idfdBe3ddddf idfdBddF idfdBdidfgdd Znej78dd6didfgdd Zoej78dddidfddidfddidfddidfgddƄ Zpej78dddidfde3dd idfgdd̄ Zqej78dAe3e6gej78d(ej:ej9gdd΄ Zrej78dee3ddύdgddф Zsddӄ ZtddՄ Zuej78ddBevdDiddgddggddלfddل Zwej78dedfedfedfgddބ ZxdS )zTesting for K-means    N)sparse)assert_array_equal)assert_allclose)threadpool_limits)clone)ConvergenceWarning)	row_norms)pairwise_distances)pairwise_distances_argmin)v_measure_score)KMeansk_meanskmeans_plusplus)MiniBatchKMeans)_labels_inertia)_mini_batch_step)_relocate_empty_clusters_dense)_relocate_empty_clusters_sparse)_euclidean_dense_dense_wrapper)_euclidean_sparse_dense_wrapper)_inertia_dense)_inertia_sparse)_is_same_clustering)
make_blobs)StringIO)              @r   r   r   )      ?r   g      @r   r   )r   r   r   r   r   d   r   *   )	n_samplescenterscluster_stdrandom_statearray_constrdenser   )idsalgolloydelkandtypec                 C   s   | ddgddgddgddgg|d}g d}t jddgddgg|d}g d}d}t jddgd	dgg|d}d
}	td
d||d}
|
j||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      ?   
n_clustersn_initinit	algorithmsample_weight
nparrayr   fitr   labels_r   inertia_cluster_centers_n_iter_)r$   r'   r*   Xr7   init_centersexpected_labelsexpected_inertiaexpected_centersexpected_n_iterkmeans rG   y/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_k_means.pytest_kmeans_results3   s   $rI   c           	      C   s   | ddgddgddgddgg}t ddgddgg}g d}d}ddgddgg}d}tdd||d	}|| t|j| t|j| t|j| |j	|ksQJ d S )
Nr   r+   r,   r.   r/   g      ?g      ?r0   r1   r8   )	r$   r'   r@   rA   rB   rC   rD   rE   rF   rG   rG   rH   test_kmeans_relocated_clustersM   s    
rJ   c              	   C   s   t g ddd}| |}t d}t g ddd}t g ddd}t g d}t jdt jd}| t ju rHt|||||| nt|j|j	|j
||||| t|g d	 t|d
gdgdgg d S )N)
      $g      #ig      !ir,   	         #@
   rL   r,   rO   )rK   rP   )g     0rP   rP   )g      $@r   r   r-   )   r,   r,   irN   )r9   r:   reshapeoneszerosint32r   r   dataindicesindptrr   r   )r$   r@   r7   centers_oldcenters_newweight_in_clusterslabelsrG   rG   rH   test_relocate_empty_clustersf   s.   

r]   distributionnormalblobstol){Gz?g:0yE>g0.++r   c           	      C   s   t j|}| dkr|jdd}nt|d\}}d||dk < ||}tddd|d}td	ddd|d
}|| || t|j|j t	|j
|j
 |j|jksSJ |jtj|jddks`J d S )Nr_   i  rO   sizer#   r      r,   )r2   r#   r3   ra   r)   )r5   r2   r#   r3   ra   ư>)rel)r9   randomRandomStater_   r   r   r;   r   r>   r   r<   r?   r=   pytestapprox)	r^   r$   ra   global_random_seedrndr@   _km_lloydkm_elkanrG   rG   rH   test_kmeans_elkan_results   s    


rs   r5   c                 C   sH   t jd}|jdd}d}t| dddd|d|}|j|k s"J d S )Nr   rc   rd   ,  rg   r,   )r5   r2   r#   r3   ra   max_iter)r9   rj   rk   r_   r   r;   r?   )r5   ro   r@   ru   kmrG   rG   rH   test_kmeans_convergence   s   	rw   autofullc                 C   sl   t jdd}t| d}tjtd|  dd || |jdks$J W d    d S 1 s/w   Y  d S )Nr   r0   r5   zalgorithm='zB' is deprecated, it will be removed in 1.3. Using 'lloyd' instead.matchr(   )	r9   rj   randr   rl   warnsFutureWarningr;   
_algorithm)r5   r@   rF   rG   rG   rH   ,test_algorithm_auto_full_deprecation_warning   s   


"r   c               
   C   s  t jd} t| jtjd }| }t |}t |}t j|jd t	j
d}t j|jd t	j
d}t	d jdd}ttdd	}t jt	jd t	j
d}	t	d d
 }
td d
 }|d d
 }|d d
 }|	d d
 }t|
|||||t jddd}|dksJ t|
|||\}}|dksJ ||k sJ t||||||t jddd}|dksJ t||||\}}|dksJ ||k sJ t|| t|| t|| t|| d S )Nr   rd   r   r-   r0   r,   axisTsquaredrO   F)random_reassignr   )r9   rj   rk   r!   r_   shapecopy
zeros_likerT   r@   r*   sumr   X_csrrS   r   r   r   r   )rngrY   centers_old_csrrZ   centers_new_csrweight_sumsweight_sums_csrx_squared_normsx_squared_norms_csrr7   X_mbX_mb_csrx_mb_squared_normsx_mb_squared_norms_csrsample_weight_mbold_inertiar\   new_inertiaold_inertia_csr
labels_csrnew_inertia_csrrG   rG   rH   !test_minibatch_update_consistency   sf   








r   c                 C   sX   | j }|jttfksJ | j}t|jd tksJ ttt	|d | j
dks*J d S )Nr   r   r   )r>   r   r2   
n_featuresr<   r9   uniquer   r   true_labelsr=   )rv   r!   r\   rG   rG   rH   _check_fitted_model  s   r   rV   r4   rj   	k-means++c                 C      t S Nr!   r@   kr#   rG   rG   rH   <lambda>)      r   )rj   r   ndarraycallable	Estimatorc                 C   s4   t |trdnd}| |td|d|}t| d S )NrO   r,   r   r4   r2   r#   r3   )
isinstancestrr2   r;   r   )r   rV   r4   r3   rv   rG   rG   rH   test_all_init&  s   	r   c                 C   r   r   r   r   rG   rG   rH   r   8  r   c                 C   sF   t | trdnd}t| td|d}tdD ]}|t qt| d S )NrO   r,   r   r   r   )r   r   r   r2   rangepartial_fitr@   r   )r4   r3   rv   irG   rG   rH   &test_minibatch_kmeans_partial_fit_init6  s   r   c                 C   s`   t t}t t}| ttdddt}| t|ddd|}t|j|j t|j	|j	 d S )Nr,   r   r2   r4   r3   r#   )
r9   asfortranarrayr@   r!   r2   r;   r   r>   r   r<   )r   	X_fortrancenters_fortrankm_ckm_frG   rG   rH   test_fortran_aligned_dataG  s   

r   constructorzseed, max_iter, tol))r   r0   Hz>)r,   r0   皙?)r.   rt   r   )   rt   r   c                 C   sl   t j|}tddd|dd j|dd}||}t| d|||d}|||}	||}
t	|	|
 d S )Ni  rO   r    r   r!   r#   r   Fr   )r5   r2   r#   ra   ru   )
r9   rj   rk   r   astyper   r;   predictfit_predictr   )r'   r*   r   seedru   ra   r   r@   rF   labels_1labels_2rG   rG   rH   test_k_means_fit_predictW  s   

r   c                  C   s<   t tddd} tj}t t_z| t W |t_d S |t_w )Nr   r,   )r2   r#   verbose)r   r2   sysstdoutr   r;   r@   )rv   
old_stdoutrG   rG   rH   test_minibatch_kmeans_verboseu  s   r   rb   c              	   C   s   t jdjdd}t| tddd|dd| | }t	d|j
s%J t	d	|j
s.J |dkr=t	d
|j
s;J d S t	d|j
sFJ d S )Nr   rc   rd   r   rj   r,   )r5   r2   r#   r4   r3   ra   r   zInitialization completezIteration [0-9]+, inertiazstrict convergencez center shift .* within tolerance)r9   rj   rk   r_   r   r2   r;   
readouterrresearchout)r5   ra   capsysr@   capturedrG   rG   rH   test_kmeans_verbose  s"   r   c                   C   F   t jtdd tdddt W d    d S 1 sw   Y  d S )Nz,init_size.* should be larger than n_clustersr{   rO      )	init_sizer2   )rl   r~   RuntimeWarningr   r;   r@   rG   rG   rG   rH   'test_minibatch_kmeans_warning_init_size  s
   "r   c                 C   sH   t jtdd | ttddt W d    d S 1 sw   Y  d S )NzAExplicit initial center position passed: performing only one initr{   rO   r4   r2   r3   )rl   r~   r   r!   r2   r;   r@   )r   rG   rG   rH   'test_warning_n_init_precomputed_centers  s   "r   c                  C   s   t dddd\} }d| d d dd d f< tdddd	d
| }|jjdd dks,J tdddd	d
| }|jjdd dksDJ tddd	d}tdD ]}||  qO|jjdd dksdJ d S )Nr   rg   r   )r    r!   r#   r   r0   r   rO   rj   )r2   
batch_sizer#   r4   r,   r      )r2   r#   r4   )r   r   r;   r>   anyr   r   r   )zeroed_Xr   rv   r   rG   rG   rH    test_minibatch_sensible_reassign  s$   r   c                 C   s   t ttf}ttD ]}tt|k jdd||< qt| dd}t 	t
}t |}t| |||dd  }t| ||||t tt jdddd	 t| |||dd  }||ksZJ t| ||||t tt jdddd	 t|| d S )Nr   r   Tr   r,   )r   reassignment_ratiogV瞯<)r9   emptyr2   r   r   r@   r   meanr   rS   r    
empty_liker   r   rT   rj   rk   r   )rV   perfect_centersr   r   r7   rZ   score_beforescore_afterrG   rG   rH   test_minibatch_reassign  sP   





r   c                   C   s   t ddtdddt d S )Nr   rO   r   T)r2   r   r   r#   r   )r   r    r;   r@   rG   rG   rG   rH   &test_minibatch_with_many_reassignments   s   r   c                  C   sp   t ddddt} | jdksJ t ddddt} | jdks"J t dddtd dt} | jtks6J d S )NrO   rg   r,   )r2   r   r3         )r2   r   r3   r   )r   r;   r@   
_init_sizer    rv   rG   rG   rH   test_minibatch_kmeans_init_size  s   r   ztol, max_no_improvement)g-C6?N)r   rO   c                 C   s   t dddd\}}}td|d|dddd|d	}|| d|j  k r(dk s+J  J |  }|d u r:d	|jv s:J |dkrEd
|jv sGJ d S d S )Nr.   r   T)r!   r#   return_centersr   rO   r,   )	r2   r4   r   ra   r#   ru   r3   r   max_no_improvementz Converged (small centers change)z*Converged (lack of improvement in inertia))r   r   r;   r?   r   r   )r   ra   r   r@   rp   r!   rv   r   rG   rG   rH   #test_minibatch_declared_convergence   s*   
r   c                  C   s   d} t jd }td| ddt }|jt|j|  | ks J t|jt	s(J td| ddd ddt }|jdks<J |jd| |  ksGJ t|jt	sOJ d S )Nr   r   r.   )r2   r   r#   rO   )r2   r   r#   ra   r   ru   )
r@   r   r   r;   r?   r9   ceiln_steps_r   int)r   r    rv   rG   rG   rH   test_minibatch_iter_steps<  s$   
	r   c                  C   s6   t  } tdtdd}||  t| t| t  d S )NFr   )copy_xr2   r#   )r@   r   r   r2   r;   r   r   )my_Xrv   rG   rG   rH   test_kmeans_copyxU  s
   
r   c                 C   s`   t jddd}| dddd}|||}| dddd}|||}||ks.J d S )Nr   r   rO   r,   r   )r3   r#   ru   )r9   rj   rk   randnr;   score)r   r@   km1s1km2s2rG   rG   rH   test_score_max_iter`  s   r   zEstimator, algorithmc           
      C   s   t ddddd\}}||}| d|ddd}|d ur |j|d || |j}||}	t|	| ||}	t|	| ||j}	t|	t	d d S )Ni  rO   r   r   r   rz   )
r   
set_paramsr;   r<   r   r   r   r>   r9   arange)
r   r5   r4   r*   r$   r@   rp   rv   r\   predrG   rG   rH   test_predictm  s   




r  c                 C   sl   t jdtf}| tddd}|jt|d | tddd}|jt|d t	|j
|j
 t|j|j d S )Nr   r,   r2   r#   r3   r6   )r9   rj   rk   random_sampler    r2   r;   r@   r   r   r<   r   r>   )r   r7   km_dense	km_sparserG   rG   rH   test_dense_sparse  s   r  )rj   r   r   c                 C   s^   t |trdnd}| t||dd}|t t|t|j |t t|t|j d S )NrO   r,   r   r   )	r   r   r2   r;   r   r   r   r@   r<   )r   r4   r3   rv   rG   rG   rH   test_predict_dense_sparse  s   

r	  r   c           	   	   C   s   t ddgddgddgddgddgddgg}|||d	}|d
kr#dnd}|d
kr/|d d n|}| d||dd}| tu rC|jdd || |jjt jksQJ g d}t|j	| | tu rot
||}|jjt jksqJ d S d S )Nr   rO      rM   rL   r,   r0   rQ   r-   r   r   )r   )r   r,   r,   r   r   r,   )r9   r:   r   r   r;   r>   r*   float64r   r<   r   r   )	r   r$   r*   r4   X_denser@   r3   rv   rB   rG   rG   rH   test_integer_input  s    .
r  c                 C   s`   | t dt}||j}t|t|j t| t	
t  |t}t|tt|j d S )Nr2   )r2   r;   r@   	transformr>   r   r	   r   diagonalr9   rT   )r   rv   XtrG   rG   rH   test_transform  s   
r  c                 C   s8   | ddd tt}| dddt}t|| d S )Nr   r,   )r#   r3   )r;   r@   r  fit_transformr   )r   X1X2rG   rG   rH   test_fit_transform  s   r  c                  C   s:   t j} dD ]}ttd|dddt}|j| ksJ qd S )N)r,   rg   rO   rj   r   r,   )r2   r4   r3   r#   ru   )r9   infr   r2   r;   r@   r=   )previous_inertiar3   rv   rG   rG   rH   test_n_init  s   r  c                  C   s^   t ttd d\} }}| jttfksJ t|jd tksJ ttt	|d |dks-J d S )N)r2   r7   r   r   r   )
r   r@   r2   r   r   r9   r   r   r   r   )cluster_centersr\   inertiarG   rG   rH   test_k_means_function  s   r  c           	      C   s  | ddd}i }i }i }i }t jt jfD ]A}|j|dd}|| |j||< ||||< |j||< |j||< |jj	|ks@J | t
u rU||dd  |jj	|ksUJ qt|t j |t j dd t|t j |t j dd t|t j |t j dd t|t j |t j  d S )	Nr,   r   )r3   r#   Fr   r.   gh㈵>rtol)r9   r  float32r   r;   r=   r  r>   r<   r*   r   r   r   r   )	r   rV   rv   r  r  r!   r\   r*   r@   rG   rG   rH   test_float_precision  s*   



r   c                 C   sJ   t j|dd}tj|dd}| |tdd}|| t|j|r#J d S )NFr   r,   r   )r@   r   r!   r2   r;   r9   may_share_memoryr>   )r   r*   
X_new_typecenters_new_typerv   rG   rG   rH   test_centers_not_mutated)  s
   
r$  c                 C   s8   t td| }t t|jdd| }t|j|j d S )Nr  r,   r2   r4   r3   )r   r2   r;   r>   r   )rV   r   r   rG   rG   rH   test_kmeans_init_fitted_centers8  s   r&  c                  C   s   t ddgddgddgddgg} tdd}d}tjt|d ||  t|jtt	dks2J W d    d S 1 s=w   Y  d S )Nr   r,   r   r  zmNumber of distinct clusters \(3\) found smaller than n_clusters \(4\). Possibly due to duplicate points in X.r{   r.   )
r9   asarrayr   rl   r~   r   r;   setr<   r   )r@   rv   msgrG   rG   rH   1test_kmeans_warns_less_centers_than_unique_pointsB  s   "

"r*  c                 C   s   t j| ddS Nr   r   )r9   sortr   rG   rG   rH   _sort_centersS  s   r-  c                  C   s   t jdjddtd} t jt| dd}ttdt	dd}t
|jt| d}t |j| }t
||}t|j| t|j|j tt|jt|j d S )Nr   r,   rg   rd   r   )r4   r3   r2   r#   r6   )r9   rj   rk   randintr    repeatr@   r   r!   r2   r   r;   r<   r   r   r=   r-  r>   )r7   X_repeatrv   km_weightedrepeated_labelskm_repeatedrG   rG   rH   test_weighted_vs_repeatedW  s   r4  c                 C   s\   t t}| tddd}t|j|d d}t|j||d}t|j|j t|j	|j	 d S )Nr   r,   r  r6   )
r9   rS   r    r2   r   r;   r   r<   r   r>   )r   rV   r7   rv   km_nonekm_onesrG   rG   rH   test_unit_weights_vs_no_weightsm  s   
r7  c                 C   sh   t jdt}| tddd}t|j||d}t|j|d| d}t|j	|j	 t
|j|j d S )Nr   r   r,   r  r6   r+   )r9   rj   rk   uniformr    r2   r   r;   r   r<   r   r>   )r   rV   r7   rv   km_orig	km_scaledrG   rG   rH   test_scaled_weights|  s   r;  c                  C   s$   t dddt} | jdksJ d S )Nr)   r,   )r5   ru   )r   r;   r@   r?   r   rG   rG   rH    test_kmeans_elkan_iter_attribute  s   r<  c                 C   st   | dgdgg}ddg}t dgdgg}td|dd}|j||d tt|jdks.J t|jdgdgg d S )	NrL   r,   gffffff?r   rO   r0   r%  r6   )	r9   r:   r   r;   lenr(  r<   r   r>   )r$   r@   r7   r4   rv   rG   rG   rH   #test_kmeans_empty_cluster_relocated  s   r>  c                 C   s   t jd}|jdd}tddd | tdd|j}W d    n1 s'w   Y  tddd | tdd|j}W d    n1 sGw   Y  t|| d S )	Nr   )2   rO   rd   r,   openmp)limitsuser_apir2   r#   r0   )	r9   rj   rk   r_   r   r2   r;   r<   r   )r   ro   r@   result_1result_2rG   rG   rH   #test_result_equal_in_diff_n_threads  s   rF  c                   C   r   )Nz9algorithm='elkan' doesn't make sense for a single clusterr{   r,   r)   )r2   r5   )rl   r~   r   r   r;   r@   rG   rG   rG   rH   test_warning_elkan_1_cluster  s   "rG  c           
      C   sz   t jdjdd}|d d }| |}dd }|||\}}tdd||dd|}|j}|j}	t|| t	||	 d S )	Nr   )r   rg   rd   rg   c                 S   sP   |  }t| |}t|jd D ]}| ||k jdd||< qt| |}||fS r+  )r   r
   r   r   r   )r@   r4   new_centersr\   labelrG   rG   rH   	py_kmeans  s   

z+test_k_means_1_iteration.<locals>.py_kmeansr,   )r2   r3   r4   r5   ru   )
r9   rj   rk   r8  r   r;   r<   r>   r   r   )
r$   r'   r@   rA   rJ  	py_labels
py_centers	cy_kmeans	cy_labels
cy_centersrG   rG   rH   test_k_means_1_iteration  s   

rP  r   TFc           
      C   s   t jd}tjdddd|| d}| d}|dj| dd	}|d
  }|| d
  }|r4|nt 	|}t
|||}t|j|j|||}	t||	dd t||dd t|	|dd d S )Nr   r,   r   r+   csrdensityformatr#   r*   rL   Fr   r0   rh   r  )r9   rj   rk   sptoarrayrR   r   r   r   sqrtr   r   rV   rW   r   )
r*   r   r   a_sparsea_densebb_squared_normexpecteddistance_dense_densedistance_sparse_denserG   rG   rH   test_euclidean_distance  s    r_  c                 C   sj  t jd}tjdddd|| d}| }|dj| dd}|d	dj| dd}|jd	dt jd
}|||  d j	dd}t 	|| }t
||||dd}	t||||dd}
t|	|
dd t|	|dd t|
|dd d}||k}|| ||  d j	dd}t 	|||  }t
||||d|d}	t||||d|d}
t|	|
dd t|	|dd t|
|dd d S )Nr   r   rO   r+   rQ  rR  Fr   rg   )re   r*   r0   r,   r   )	n_threadsrh   r  )r`  single_label)r9   rj   rk   rU  rV  r   r   r.  rU   r   r   r   r   )r*   r   X_sparser  r7   r!   r\   	distancesr\  inertia_denseinertia_sparserI  maskrG   rG   rH   test_inertia  s<   
rg  c                 C   sR   t dgdgdgg}t g d}| dddj||d t|t g d d S )Nr,   r0   r   )r+   g?g333333?r   rC  r6   )r9   r:   r;   r   )r   r@   r7   rG   rG   rH   test_sample_weight_unchanged  s   rh  zparam, matchr3   zn_init should be > 0ru   zmax_iter should be > 0r2   r,   z#n_samples.* should be >= n_clustersr0   zIThe shape of the initial centers .* does not match the number of clustersc                 C   s   | d d S )Nr0   rG   X_r   r#   rG   rG   rH   r   4  s    rQ   zUThe shape of the initial centers .* does not match the number of features of the datac                 C   s   | d dd df S )NrQ   r0   rG   ri  rG   rG   rH   r   >  s    wrongzJinit should be either 'k-means\+\+', 'random', an array-like or a callablec                 C   sT   | dd}t jt|d |jdi |t W d    d S 1 s#w   Y  d S )Nr,   )r3   r{   rG   )rl   raises
ValueErrorr   r;   r@   )r   paramr|   rv   rG   rG   rH   test_wrong_params'  s   
&"ro  z+Algorithm must be either 'lloyd' or 'elkan'c                 C   H   t jt|d tdi | t W d    d S 1 sw   Y  d S Nr{   rG   )rl   rl  rm  r   r;   r@   rn  r|   rG   rG   rH   test_kmeans_wrong_paramsR  s   "rs  r   rL   z!max_no_improvement should be >= 0r   zbatch_size should be > 0r   zinit_size should be > 0r   z!reassignment_ratio should be >= 0c                 C   rp  rq  )rl   rl  rm  r   r;   r@   rr  rG   rG   rH   "test_minibatch_kmeans_wrong_params]  s   "rt  n_local_trialszKn_local_trials is set to 0 but should be an integer value greater than zeror   zKThe length of x_squared_norms .* should be equal to the length of n_samplesc                 C   sF   t jt|d tttfi |  W d    d S 1 sw   Y  d S )Nr{   )rl   rl  rm  r   r@   r2   rr  rG   rG   rH   !test_kmeans_plusplus_wrong_paramsm  s   "rv  c                 C   s   |  |} t| t\}}|jd tksJ |dk sJ || jd k s(J |jd tks1J |jdd| jddk sAJ |jdd| jddk sQJ tt|  || d S r+  )	r   r   r2   r   allmaxminr   r@   )rV   r*   r!   rW   rG   rG   rH   test_kmeans_plusplus_output  s   
  rz  r   c                 C   s$   t tt| d\}}tt| | d S )N)r   )r   r@   r2   r   )r   r!   rW   rG   rG   rH   test_kmeans_plusplus_norms  s   r{  c                  C   s<   t ttdd\} }tt}t |tdd\}}t| | d S )Nr   rf   )r   r@   r2   r9   r   r   )	centers_crp   r   r   rG   rG   rH   test_kmeans_plusplus_dataorder  s   
r}  c                  C   sp   t jg dt jd} t| | dsJ t jg dt jd}t| |ds$J t jg dt jd}t| |dr6J d S )N)r,   r   r   r,   r0   r   r0   r,   r-   r.   )r   r0   r0   r   r,   r0   r,   r   )r,   r   r   r0   r0   r   r0   r,   )r9   r:   rU   r   )labels1labels2labels3rG   rG   rH   test_is_same_clustering  s   r  kwargs)r4   r3   c                 C   sH   t jddgddgddgddggt jd}tdddi| }|| dS )	zZCheck that init works with numpy scalar strings.

    Non-regression test for #21964.
    r   r+   r,   r-   r2   r0   NrG   )r9   r'  r  r   r;   )r  r@   
clusteringrG   rG   rH   -test_kmeans_with_array_like_or_np_scalar_init  s   (r  zKlass, methodr;   r   c                    sR   | j   |  }t||t |jjd }| }t fddt|D | dS )z=Check `feature_names_out` for `KMeans` and `MiniBatchKMeans`.r   c                    s   g | ]}  | qS rG   rG   ).0r   
class_namerG   rH   
<listcomp>  s    z*test_feature_names_out.<locals>.<listcomp>N)	__name__lowergetattrr@   r>   r   get_feature_names_outr   r   )KlassmethodrF   r2   	names_outrG   r  rH   test_feature_names_out  s   
 r  )y__doc__r   r   numpyr9   scipyr   rU  rl   sklearn.utils._testingr   r   sklearn.utils.fixesr   sklearn.baser   sklearn.exceptionsr   sklearn.utils.extmathr   sklearn.metricsr	   r
   sklearn.metrics.clusterr   sklearn.clusterr   r   r   r   sklearn.cluster._kmeansr   r   sklearn.cluster._k_means_commonr   r   r   r   r   r   r   sklearn.datasetsr   ior   r:   r!   r    r   r2   r   r@   r   
csr_matrixr   markparametrizer  r  rI   rJ   r]   rs   rw   r   r   r   r   r   r   r'  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  rU   int64r  r  r  r  r  r   r$  r&  r*  r-  r4  r7  r;  r<  r>  rF  rG  rP  r_  rg  rh  ro  rs  rt  rv  rz  r{  r}  r  str_r  r  rG   rG   rG   rH   <module>   s   



)

H	

	


5




"
	

	
)
	



!	





	

$
