§
    ¨éUgr¾  ã                   óð  — 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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l.m/Z/ ddl0m1Z1  ej2        g d¢g d¢g d¢g¦  «        Z3dZ4e3j5        \  Z6Z7 ee4e3dd¬¦  «        \  Z8Z9d„ e/D ¦   «         Z:ej2        ge/z   Z; e<e:¦  «        dk    rg d¢nddgZ=ej>         ?                    de;e=¬¦  «        ej>         ?                    d d!d"g¦  «        ej>         ?                    d#ej@        ejA        g¦  «        d$„ ¦   «         ¦   «         ¦   «         ZBej>         ?                    de;e=¬¦  «        ej>         ?                    d d!d"g¦  «        d%„ ¦   «         ¦   «         ZCej>         ?                    de;e=¬¦  «        d&„ ¦   «         ZDej>         ?                    d'd(d)g¦  «        ej>         ?                    de;e=¬¦  «        ej>         ?                    d*g d+¢¦  «        d,„ ¦   «         ¦   «         ¦   «         ZEej>         ?                    d-d!d"g¦  «        d.„ ¦   «         ZFej>         ?                    d/e:¦  «        d0„ ¦   «         ZGd1„ ZHej>         ?                    d2e8ge:z   e=¬¦  «        ej>         ?                    d3d4d5e3d6„ gg d7¢¬¦  «        ej>         ?                    d8eeg¦  «        d9„ ¦   «         ¦   «         ¦   «         ZIej>         ?                    d3d4d5e3d:„ gg d7¢¬¦  «        d;„ ¦   «         ZJej>         ?                    d<d=d>d?„ d@fdAg¦  «        ej>         ?                    d8eeg¦  «        dB„ ¦   «         ¦   «         ZKej>         ?                    d8eeg¦  «        dC„ ¦   «         ZLdD„ ZMej>         ?                    d-d!d"g¦  «        ej>         ?                    d*dEdg¦  «        dF„ ¦   «         ¦   «         ZNdG„ ZOej>         ?                    d8eeg¦  «        dH„ ¦   «         ZPdI„ ZQej>         ?                    d2e8ge:z   e=¬¦  «        dJ„ ¦   «         ZRdK„ ZSdL„ ZTej>         ?                    dMdNdOg¦  «        dP„ ¦   «         ZUdQ„ ZVdR„ ZWej>         ?                    d8eeg¦  «        dS„ ¦   «         ZXej>         ?                    de;e=¬¦  «        ej>         ?                    dTed!fed"fedfg¦  «        ej>         ?                    dUddg¦  «        dV„ ¦   «         ¦   «         ¦   «         ZYej>         ?                    d/e:¦  «        ej>         ?                    d8eeg¦  «        dW„ ¦   «         ¦   «         ZZej>         ?                    d/e:¦  «        ej>         ?                    d3d4d5e3gg dX¢¬¦  «        ej>         ?                    d8eeg¦  «        dY„ ¦   «         ¦   «         ¦   «         Z[ej>         ?                    de;e=¬¦  «        ej>         ?                    d#ej\        ej]        g¦  «        ej>         ?                    d3d5dZg¦  «        ej>         ?                    d8eeg¦  «        d[„ ¦   «         ¦   «         ¦   «         ¦   «         Z^ej>         ?                    d8eeg¦  «        d\„ ¦   «         Z_ej>         ?                    d8eeg¦  «        d]„ ¦   «         Z`d^„ Zad_„ Zbej>         ?                    d2e8ge:z   e=¬¦  «        ej>         ?                    d8eeg¦  «        d`„ ¦   «         ¦   «         Zcej>         ?                    d#ej\        ej]        ej@        ejA        g¦  «        ej>         ?                    d8eeg¦  «        da„ ¦   «         ¦   «         Zdej>         ?                    d2e8ge:z   e=¬¦  «        db„ ¦   «         Zedc„ Zfdd„ Zgde„ Zhej>         ?                    d2e8ge:z   e=¬¦  «        ej>         ?                    d8eeg¦  «        df„ ¦   «         ¦   «         Ziej>         ?                    d2e8ge:z   e=¬¦  «        ej>         ?                    d8eeg¦  «        dg„ ¦   «         ¦   «         Zjdh„ Zkej>         ?                    de;e=¬¦  «        di„ ¦   «         Zlej>         ?                    d8eeg¦  «        dj„ ¦   «         Zmdk„ Znej>         ?                    de;e=¬¦  «        ej>         ?                    d d!d"g¦  «        dl„ ¦   «         ¦   «         Zoej>         ?                    d#ej@        ejA        g¦  «        ej>         ?                    dmdndog¦  «        dp„ ¦   «         ¦   «         Zpej>         ?                    d#ej@        ejA        g¦  «        dq„ ¦   «         Zqej>         ?                    dredsfedtfg¦  «        du„ ¦   «         Zrej>         ?                    d8eeg¦  «        dv„ ¦   «         Zsej>         ?                    d8eeg¦  «        ej>         ?                    dwdxe4dyz   idzfd3e8dd…         id{fd3d|„ id{fd3e8dd}…dd…f         id~fd3d„ id~fg¦  «        d€„ ¦   «         ¦   «         Ztej>         ?                    dwd�e8dd…         id‚fg¦  «        dƒ„ ¦   «         Zuej>         ?                    d2e8ge:z   ¦  «        ej>         ?                    d#ejA        ej@        g¦  «        d„„ ¦   «         ¦   «         Zvej>         ?                    d� e-e8dn¬…¦  «        dg¦  «        d†„ ¦   «         Zwd‡„ Zxdˆ„ Zyej>         ?                    d‰d3 ejz        d5¦  «        iddgdydyggdydŠœf¦  «        d‹„ ¦   «         Z{ej>         ?                    dŒed�fed�fedŽfg¦  «        d�„ ¦   «         Z|ej>         ?                    d�e/dgz   ¦  «        d‘„ ¦   «         Z}ej>         ?                    d3d5d4g¦  «        d’„ ¦   «         Z~ej>         ?                    d3d5d4g¦  «        d“„ ¦   «         Zej>         ?                    de;e=¬¦  «        ej>         ?                    d-d!d"g¦  «        d”„ ¦   «         ¦   «         Z€dS )•zTesting for K-meansé    N)ÚStringIO)Úsparse)Ú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     úa/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/cluster/tests/test_k_means.pyú
<listcomp>r.   2   s    € Ð=Ð=Ð= �	�	�!‘”Ð=Ð=Ð=ó    é   )ÚdenseÚsparse_matrixÚsparse_arrayr1   r2   Ú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   ç      à?é   ©r9   )é   r<   r<   r>   ©r   r   r<   r<   g      Ø?g      À?g      ì?r0   ©Ú
n_clustersÚn_initÚinitÚ	algorithm©Úsample_weight)
ÚnpÚarrayr   Úfitr   Úlabels_r   Úinertia_Úcluster_centers_Ún_iter_)r4   r6   r9   r*   rF   Úinit_centersÚexpected_labelsÚexpected_inertiaÚexpected_centersÚexpected_n_iterÚkmeanss              r-   Útest_kmeans_resultsrT   ;   s  € ð 	ˆ�q˜!�f˜s A˜h¨¨a¨°1°a°&Ð9ÀÐGÑGÔG€AØ �L�L€MÝ”8˜a ˜V a¨ VÐ,°EÐ:Ñ:Ô:€Là"�l�l€OØÐÝ”x %¨ ¨e°Q¨ZÐ 8ÀÐFÑFÔFÐØ€Oå˜q¨°ÈÐNÑNÔN€FØ
‡J‚Jˆq €JÑ.Ô.Ð.å�v”~ Ñ7Ô7Ð7Ý�F”OÐ%5Ñ6Ô6Ð6Ý�FÔ+Ð-=Ñ>Ô>Ð>ØŒ>˜_Ò,Ð,Ð,Ð,Ð,Ð,r/   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>   r0   r@   g      Ð?r?   g      è?)r<   r<   r   r   r!   r   )rG   rH   r   rI   r   rK   rM   r   rJ   rL   ÚAssertionError)	r4   r6   r*   rN   rS   rR   rP   rO   rQ   s	            r-   Útest_kmeans_relocated_clustersrW   S   sX  € ð 	ˆ�q˜!�f˜s A˜h¨¨a¨°1°a°&Ð9Ñ:Ô:€Aõ ”8˜c 3˜Z¨!¨Q¨Ð0Ñ1Ô1€Lå˜q¨°ÈÐNÑNÔN€FØ
‡J‚Jˆq�M„M€Mà€OØÐÝ�F”OÐ%5Ñ6Ô6Ð6ØŒ>˜_Ò,Ð,Ð,Ð,ð	CØ&˜,˜,ˆØ! 1˜I¨¨a yÐ1ÐÝ˜6œ>¨?Ñ;Ô;Ð;Ý˜Ô/Ð1AÑBÔBÐBÐBÐBøÝð Cð Cð CØ&˜,˜,ˆØ! 3˜K¨$°¨Ð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      #Ài÷ÿÿÿg      !Àiøÿÿÿéÿÿÿÿr<   é	   ç      #@é
   rZ   r<   r]   )rY   éöÿÿÿr^   )g     €0Àr^   r^   )g      $@r   r   r=   )é   r<   r<   iÜÿÿÿr\   )rG   rH   ÚreshapeÚonesÚzerosÚint32r   r   ÚdataÚindicesÚindptrr   r   )r4   r*   rF   Úcenters_oldÚcenters_newÚweight_in_clustersÚlabelss          r-   Útest_relocate_empty_clustersrk   r   s\  € õ
 	ŒÐ?Ð?Ð?Ñ@Ô@×HÒHÈÈQÑOÔO€AØˆ�Q‰Œ€AÝ”G˜B‘K”K€Mõ ”(Ð,Ð,Ð,Ñ-Ô-×5Ò5°b¸!Ñ<Ô<€Kõ
 ”(Ð,Ð,Ð,Ñ-Ô-×5Ò5°b¸!Ñ<Ô<€KÝœ , , ,Ñ/Ô/ÐÝŒX�b¥¤Ð)Ñ)Ô)€Fà•r”xÐÐÝ&Øˆ}˜k¨;Ð8JÈFñ	
ô 	
ð 	
ð 	
õ 	(ØŒFØŒIØŒHØØØØØñ		
ô 		
ð 		
õ Ð)¨9¨9¨9Ñ5Ô5Ð5Ý�K 3 %¨"¨°¨uÐ!5Ñ6Ô6Ð6Ð6Ð6r/   ÚdistributionÚnormalÚblobsÚtol)ç{®Gáz„?g:Œ0âŽyE>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 )Nrm   ©iˆ  r]   ©Úsize©r'   r   é   r<   )rA   r'   rB   ro   r8   )rD   rA   r'   rB   ro   ç�íµ ÷Æ°>)Úrel)rG   ÚrandomÚRandomStaterm   r   r   rI   r   rL   r   rJ   rM   rK   ÚpytestÚapprox)	rl   r4   ro   Úglobal_random_seedÚrndr*   Ú_Úkm_lloydÚkm_elkans	            r-   Útest_kmeans_elkan_resultsr‚   œ   s2  € õ
 Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�xÒÐØ�JŠJ˜JˆJÑ'Ô'ˆˆå sÐ+Ñ+Ô+‰ˆˆ1Ø€A€aˆ!‚e�HØˆ�Q‰Œ€Aå Ð1CÈAÐSVÐWÑWÔW€HÝØØØ'ØØðñ ô €Hð ‡L‚L��O„O€OØ‡L‚L��O„O€OÝ�HÔ-¨xÔ/HÑIÔIÐIÝ�xÔ'¨Ô)9Ñ:Ô:Ð:ØÔ˜xÔ/Ò/Ð/Ð/Ð/ØÔ¥¤¨hÔ.?ÀTÐ JÑ JÔ JÒJÐJÐJÐJÐJÐJr/   rD   c                 óÞ   — t           j                             |¦  «        }|                     d¬¦  «        }d}t	          | d|dd|¬¦  «                             |¦  «        }|j        |k     sJ ‚d S )Nrr   rs   i,  rv   r<   r   )rD   rA   r'   rB   ro   Úmax_iter)rG   ry   rz   rm   r   rI   rM   )rD   r}   r~   r*   r„   Úkms         r-   Útest_kmeans_convergencer†   º   sƒ   € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�
Š
˜
ˆ
Ñ#Ô#€AØ€Hå	ØØØ'ØØØð
ñ 
ô 
÷ 
‚cˆ!�f„fð ð Œ:˜Ò Ð Ð Ð Ð Ð r/   Ú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 )Nrs   r   r=   r]   F)Úrandom_reassignr   )rG   ry   rz   r%   rm   ÚshapeÚcopyÚ
zeros_likerb   r*   r9   ra   r   r   r   r   )r‡   r}   Úrngrg   Úcenters_old_csrrh   Úcenters_new_csrÚweight_sumsÚweight_sums_csrrF   ÚX_mbÚX_mb_csrÚsample_weight_mbÚold_inertiarj   Únew_inertiaÚold_inertia_csrÚ
labels_csrÚnew_inertia_csrs                      r-   Ú!test_minibatch_update_consistencyrš   Í   sI  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€Cå˜CŸJšJ­G¬M˜JÑ:Ô:Ñ:€KØ!×&Ò&Ñ(Ô(€Oå”- Ñ,Ô,€KÝ”m OÑ4Ô4€Oå”(˜;Ô,¨QÔ/µq´wÐ?Ñ?Ô?€KÝ”h˜{Ô0°Ô3½1¼7ÐCÑCÔC€Oå”G�AœG AœJ­a¬gÐ6Ñ6Ô6€Mõ ˆSˆbˆSŒ6€DØ�S�b�SŒz€HØ$ S b SÔ)Ðõ #ØØØØØÝ
Œ	×ÒÐ0Ñ1Ô1Øðñ ô €Kð ˜ÒÐÐÐõ *¨$Ð0@À+ÑNÔNÑ€FˆKØ˜ÒÐÐÐØ˜Ò$Ð$Ð$Ð$õ 'ØØØØØÝ
Œ	×ÒÐ0Ñ1Ô1Øðñ ô €Oð ˜SÒ Ð Ð Ð õ #2ØÐ" Oñ#ô #Ñ€J�ð ˜SÒ Ð Ð Ð Ø˜_Ò,Ð,Ð,Ð,õ �v˜zÑ*Ô*Ð*Ý�K Ñ1Ô1Ð1Ý�K Ñ1Ô1Ð1Ý�K Ñ1Ô1Ð1Ð1Ð1r/   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   )rL   rŠ   rA   Ú
n_featuresrJ   rG   Úuniquer   r   Útrue_labelsrK   )r…   r%   rj   s      r-   Ú_check_fitted_modelrŸ     sƒ   € ð Ô!€GØŒ=�Z­Ð4Ò4Ð4Ð4Ð4àŒZ€FÝŒ9�VÑÔÔ" 1Ô%­Ò3Ð3Ð3Ð3õ •O¥K°Ñ8Ô8¸#Ñ>Ô>Ð>ØŒ;˜ÒÐÐÐÐÐr/   Ú
input_datarC   ry   ú	k-means++c                 ó   — t           S ©N©r%   ©r*   Úkr'   s      r-   ú<lambda>r§   "  ó   € Å€ r/   )ry   r¡   ÚndarrayÚcallableÚ	Estimatorc                 ó¤   — t          |t          ¦  «        rdnd} | |t          d|¬¦  «                             |¦  «        }t	          |¦  «         d S )Nr]   r<   r#   ©rC   rA   r'   rB   )Ú
isinstanceÚstrrA   rI   rŸ   )r«   r    rC   rB   r…   s        r-   Útest_all_initr°     s_   € õ ˜d¥CÑ(Ô(Ð/ˆRˆR¨a€FØ	ˆØ�j°rÀ&ð
ñ 
ô 
ç	‚cˆ*�o„oð õ ˜ÑÔÐÐÐr/   c                 ó   — t           S r£   r¤   r¥   s      r-   r§   r§   1  r¨   r/   c                 óÞ   — t          | t          ¦  «        rdnd}t          | t          d|¬¦  «        }t	          d¦  «        D ]}|                     t          ¦  «         Œt          |¦  «         d S )Nr]   r<   r   r­   r"   )r®   r¯   r   rA   ÚrangeÚpartial_fitr*   rŸ   )rC   rB   r…   Úis       r-   Ú&test_minibatch_kmeans_partial_fit_initr¶   /  sy   € õ ˜d¥CÑ(Ô(Ð/ˆRˆR¨a€FÝ	Ø�j°qÀð
ñ 
ô 
€Bõ �3‰ZŒZð ð ˆà
�Š•qÑÔÐÐÝ˜ÑÔÐÐÐr/   zinit, expected_n_init)r¡   r<   )ry   Údefaultc                 óH   — |                      || j        d         f¬¦  «        S )Nr<   rs   )ÚuniformrŠ   )r*   rA   r'   s      r-   r§   r§   F  s*   € °×0DÒ0DØ  !¤'¨!¤*Ð-ð 1Eñ 1ô 1€ r/   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 )	z¬Check 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]   rv   rº   r·   r>   r]   Úauto©rA   rC   rB   N)rG   ry   Úrandnr   rI   Ú_n_init)r«   rC   Úexpected_n_initÚn_samplerœ   rA   r*   rS   s           r-   Ú,test_kmeans_init_auto_with_initial_centroidsrÂ   @  s    € ð( (2Ñ$€Hˆj˜*Ý
Œ	�Š˜ *Ñ-Ô-€AØˆ|ÒÐÝŒy�Š˜z¨:Ñ6Ô6ˆØ˜)Ò#Ð#Ø(­OÐ;Ð;˜!˜!ÀˆàˆY *°4ÀÐGÑGÔG×KÒKÈAÑNÔN€FØŒ>˜_Ò,Ð,Ð,Ð,Ð,Ð,r/   c                 ó‚  — t          j        t          ¦  «        }t          j        t          ¦  «        } | t          t          d|¬¦  «                             t          ¦  «        } | t          |d|¬¦  «                             |¦  «        }t          |j        |j        ¦  «         t          |j	        |j	        ¦  «         d S )Nr<   ©rA   rC   rB   r'   )
rG   Úasfortranarrayr*   r%   rA   rI   r   rL   r   rJ   )r«   r}   Ú	X_fortranÚcenters_fortranÚkm_cÚkm_fs         r-   Útest_fortran_aligned_datarÊ   _  s¸   € õ Ô!¥!Ñ$Ô$€IÝÔ'­Ñ0Ô0€Oàˆ9Ý¥G°AÐDVðñ ô ç	‚c�!�f„fð 	ð ˆ9ÝØØØ'ð	ñ ô ÷
 
‚cˆ)�n„nð 	õ �DÔ)¨4Ô+@ÑAÔAÐAÝ�t”| T¤\Ñ2Ô2Ð2Ð2Ð2r/   c                  óì   — t          t          dd¬¦  «        } t          j        }t	          ¦   «         t          _        	 |                      t          ¦  «         |t          _        d S # |t          _        w xY w)Nr#   r<   )rA   r'   Úverbose)r   rA   ÚsysÚstdoutr   rI   r*   )r…   Ú
old_stdouts     r-   Útest_minibatch_kmeans_verboserÐ   r  sZ   € å	¥J¸RÈÐ	KÑ	KÔ	K€BÝ”€JÝ‘”…C„Jð Ø
�Š�q‰	Œ	ˆ	à�Œ
ˆ
ˆ
ø�Z�Œ
ÐÐÐÐs   ½A% Á%A3rp   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   rr   rs   r#   ry   r<   )rD   rA   r'   rC   rB   ro   rÌ   zInitialization completezIteration [0-9]+, inertiazstrict convergencez center shift .* within tolerance)rG   ry   rz   rm   r   rA   rI   Ú
readouterrÚreÚsearchÚout)rD   ro   Úcapsysr*   Úcaptureds        r-   Útest_kmeans_verboserØ   }  sò   € õ 	Œ	×Ò˜aÑ Ô ×'Ò'¨ZÐ'Ñ8Ô8€Aå
ØÝØØØØØðñ ô ÷ 
‚cˆ!�f„f€fà× Ò Ñ"Ô"€HåŒ9Ð/°´Ñ>Ô>Ð>Ð>Ð>ÝŒ9Ð1°8´<Ñ@Ô@Ð@Ð@Ð@à
ˆa‚x€xÝŒyÐ.°´Ñ=Ô=Ð=Ð=Ð=Ð=Ð=åŒyÐ<¸h¼lÑKÔKÐKÐKÐKÐKÐKr/   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_sizerA   )r{   ÚwarnsÚRuntimeWarningr   rI   r*   r)   r/   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]   ©rC   rA   rB   )r{   rÞ   rß   r%   rA   rI   r*   )r«   s    r-   Ú'test_warning_n_init_precomputed_centersrä      sÀ   € õ 
ŒÝØQð
ñ 
ô 
ð Ið Ið 	ˆ	•w­:¸bÐAÑAÔA×EÒEÅaÑ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"   rv   )r$   r%   r'   r   r0   rÜ   r]   ry   )rA   Ú
batch_sizer'   rC   r<   ©Úaxisr[   znum_non_zero_clusters=z is too smalléÈ   )rA   r'   rC   )r   r   rI   rL   ÚanyÚsumr³   r´   )r}   Úzeroed_Xrž   r…   Únum_non_zero_clustersrµ   s         r-   Ú test_minibatch_sensible_reassignrî   «  sÈ  € õ 'Ø˜qÐ/Aðñ ô Ñ€Hˆkð €HˆSˆSˆqˆS�!�!�!ˆVÑå	Ø "Ð3EÈHð
ñ 
ô 
ç	‚cˆ(�m„mð ð Ô/×3Ò3¸Ð3Ñ;Ô;×?Ò?ÑAÔAÐØ  1Ò$Ð$Ð$Ð&NÐ)>Ð&NÐ&NÐ&NÑ$Ô$Ð$õ 
Ø #Ð4FÈXð
ñ 
ô 
ç	‚cˆ(�m„mð ð Ô/×3Ò3¸Ð3Ñ;Ô;×?Ò?ÑAÔAÐØ  1Ò$Ð$Ð$Ð&NÐ)>Ð&NÐ&NÐ&NÑ$Ô$Ð$õ 
 BÐ5GÈhÐ	WÑ	WÔ	W€BÝ�3‰ZŒZð !ð !ˆØ
�Š�xÑ Ô Ð Ð àÔ/×3Ò3¸Ð3Ñ;Ô;×?Ò?ÑAÔAÐØ  1Ò$Ð$Ð$Ð&NÐ)>Ð&NÐ&NÐ&NÑ$Ô$Ð$Ð$Ð$r/   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çž¯Ò<)rG   ÚemptyrA   rœ   r³   r*   rž   Úmeanra   r$   Ú
empty_liker   r   rb   ry   rz   r   )r    r}   Úperfect_centersrµ   rF   rh   Úscore_beforeÚscore_afters           r-   Útest_minibatch_reassignr÷   Ì  sp  € õ ”h¥
­JÐ7Ñ8Ô8€OÝ•:ÑÔð >ð >ˆÝ�{¨aÒ/Ô0×5Ò5¸1Ð5Ñ=Ô=ˆ˜ÑÐå”G�IÑ&Ô&€MÝ”- Ñ0Ô0€Kõ
 $ J°¸ÐPQÑRÔRÐSTÔUÐU€LåØØØØÝ
Œ•ÑÔÝ
Œ	×ÒÐ0Ñ1Ô1ØØð	ñ 	ô 	ð 	õ # :¨}¸kÈ1ÑMÔMÈaÔPÐP€Kà˜+Ò%Ð%Ð%Ð%õ ØØØØÝ
Œ•ÑÔÝ
Œ	×ÒÐ0Ñ1Ô1ØØ ð	ñ 	ô 	ð 	õ �K Ñ1Ô1Ð1Ð1Ð1r/   c                  óh   — t          ddt          dd¬¦  «                             t          ¦  «         d S )Nr"   r]   r#   T)rA   ræ   rÝ   r'   rÌ   )r   r$   rI   r*   r)   r/   r-   Ú&test_minibatch_with_many_reassignmentsrù   ÿ  s8   € õ
 ØØÝØØðñ ô ÷ 
‚c�!�f„f€f€f€fr/   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]   rv   r<   )rA   ræ   rB   é   é   )rA   ræ   rB   rÝ   )r   rI   r*   Ú
_init_sizer$   ©r…   s    r-   Útest_minibatch_kmeans_init_sizerÿ     s¼   € õ 
 B°1¸QÐ	?Ñ	?Ô	?×	CÒ	CÅAÑ	FÔ	F€BØŒ=˜BÒÐÐÐõ 
 B°1¸QÐ	?Ñ	?Ô	?×	CÒ	CÅAÑ	FÔ	F€BØŒ=˜BÒÐÐÐõ 
Ø !¨A½ÀQ¹ð
ñ 
ô 
ç	‚c�!�f„fð ð Œ=�IÒ%Ð%Ð%Ð%Ð%Ð%r/   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<   )	rA   rC   ræ   ro   r'   r„   rB   rÌ   Úmax_no_improvementz Converged (small centers change)z*Converged (lack of improvement in inertia))r   r   rI   rM   rÒ   rÕ   )rÖ   ro   r  r*   r   r%   r…   r×   s           r-   Ú#test_minibatch_declared_convergencer    sØ   € õ  q°qÈÐNÑNÔN�M€A€qˆ'å	ØØØØØØØØØ-ð

ñ 

ô 

€Bð ‡F‚Fˆ1�I„I€IØˆrŒzÐÐÒÐ˜BÒÐÐÐÐÐà× Ò Ñ"Ô"€HØÐ!Ø1°X´\ÐAÐAÐAÐAØ
ˆa‚x€xØ;¸x¼|ÐKÐKÐKÐKð €xØKÐKr/   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>   )rA   ræ   r'   r]   )rA   ræ   r'   ro   r  r„   )
r*   rŠ   r   rI   rM   rG   ÚceilÚn_steps_r®   Úint)ræ   r$   r…   s      r-   Útest_minibatch_iter_stepsr	  ;  sÿ   € à€JÝ”˜”
€IÝ	 A°*È1Ð	MÑ	MÔ	M×	QÒ	QÕRSÑ	TÔ	T€Bð Œ:�œ "¤+°
Ñ":¸iÑ!GÑHÔHÒHÐHÐHÐHÝ�b”j¥#Ñ&Ô&Ð&Ð&Ð&õ 
ØØØØØØð
ñ 
ô 
÷ 
‚c�!�f„fð ð Œ:˜ÒÐÐÐØŒ;˜2 	™>¨jÑ8Ò8Ð8Ð8Ð8Ý�b”k¥3Ñ'Ô'Ð'Ð'Ð'Ð'Ð'r/   c                  óØ   — t                                ¦   «         } t          dt          d¬¦  «        }|                     | ¦  «         t          |¦  «         t          | t           ¦  «         d S )NFr#   )Úcopy_xrA   r'   )r*   r‹   r   rA   rI   rŸ   r   )Úmy_Xr…   s     r-   Útest_kmeans_copyxr  T  sX   € å�6Š6‰8Œ8€DÝ	�u­À"Ð	EÑ	EÔ	E€BØ‡F‚Fˆ4�L„L€LÝ˜ÑÔÐõ �D�!ÑÔÐÐÐr/   c                 óT  — t           j                             |¦  «                             dd¦  «        } | d|d¬¦  «        }|                     |¦  «                             |¦  «        } | d|d¬¦  «        }|                     |¦  «                             |¦  «        }||k    sJ ‚d S )Nr"   r]   r<   )rB   r'   r„   )rG   ry   rz   r¾   rI   Úscore)r«   r}   r*   Úkm1Ús1Úkm2Ús2s          r-   Útest_score_max_iterr  _  s£   € õ 	Œ	×ÒÐ0Ñ1Ô1×7Ò7¸¸RÑ@Ô@€Aà
ˆ)˜1Ð+=ÈÐ
JÑ
JÔ
J€CØ	�Š�‰Œ×	Ò	˜!Ñ	Ô	€BØ
ˆ)˜1Ð+=ÈÐ
KÑ
KÔ
K€CØ	�Š�‰Œ×	Ò	˜!Ñ	Ô	€BØ�Š7ˆ7ˆ7ˆ7ˆ7ˆ7r/   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=   ry   )rA   rC   rB   r„   r'   )rD   )
r   Ú
set_paramsrI   rJ   Úpredictr   Úfit_predictrL   rG   Úarange)r«   rD   r4   r„   Úglobal_dtyper}   r*   r   r…   rj   Úpreds              r-   Útest_kmeans_predictr  l  s  € õ Ø "¨bÐ?Qðñ ô �D€A€qð 	ˆ�Q˜lÐ+Ñ+Ô+€Aà	ˆØØØØØ'ð
ñ 
ô 
€Bð ÐØ
�Š 	ˆÑ*Ô*Ð*Ø‡F‚Fˆ1�I„I€IØŒZ€Fð �:Š:�a‰=Œ=€DÝ�t˜VÑ$Ô$Ð$ð �>Š>˜!ÑÔ€DÝ�t˜VÑ$Ô$Ð$ð �:Š:�bÔ)Ñ*Ô*€DÝ�t�RœY r™]œ]Ñ+Ô+Ð+Ð+Ð+r/   c                 ó�  — t           j                             |¦  «                             t          f¦  «        } | t
          |d¬¦  «        }|                     t          |¬¦  «          | t
          |d¬¦  «        }|                     ||¬¦  «         t          |j	        |j	        ¦  «         t          |j        |j        ¦  «         d S ©Nr<   ©rA   r'   rB   rE   )rG   ry   rz   Úrandom_sampler$   rA   rI   r*   r   rJ   r   rL   )r«   r‡   r}   rF   Úkm_denseÚ	km_sparses         r-   Útest_dense_sparser$  •  sÏ   € õ ”I×)Ò)Ð*<Ñ=Ô=×KÒKÝ	ˆñô €Mð ˆyÝÐ,>Àqðñ ô €Hð ‡L‚L• -€LÑ0Ô0Ð0Ø�	ÝÐ,>Àqðñ ô €Ið ‡M‚M�% }€MÑ5Ô5Ð5å�xÔ'¨Ô):Ñ;Ô;Ð;Ý�HÔ-¨yÔ/IÑJÔJÐJÐJÐJr/   )ry   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¯   rA   rI   r   r  r*   rJ   )r«   rC   r‡   rB   r…   s        r-   Útest_predict_dense_sparser&  ©  s“   € õ ˜d¥CÑ(Ô(Ð/ˆRˆR¨a€FØ	ˆ�j¨t¸FÐQRÐ	SÑ	SÔ	S€Bà‡F‚Fˆ5�M„M€MÝ�r—z’z¥!‘}”} b¤jÑ1Ô1Ð1à‡F‚F�1�I„I€IÝ�r—z’z %Ñ(Ô(¨"¬*Ñ5Ô5Ð5Ð5Ð5r/   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[   rZ   r<   r0   r_   r=   r©   rÄ   )ræ   )r   r<   r<   r   r   r<   r!   )rG   rH   r   r  rI   rL   r9   Úfloat64r   r   rJ   r   r´   )
r«   r4   r9   rC   r}   ÚX_denser*   rB   r…   rO   s
             r-   Útest_integer_inputr+  »  sY  € õ Œh˜˜A˜  R ¨2¨q¨'°B¸°7¸QÀ¸FÀQÈÀGÐLÑMÔM€GØˆ�W EÐ*Ñ*Ô*€Aà˜)Ò#Ð#ˆQˆQ¨€FØ )Ò+Ð+ˆ7�2�A�2Œ;ˆ;°€Dà	ˆØ˜4¨Ð=Oð
ñ 
ô 
€Bð •OÐ#Ð#Ø
�Š ˆÑ#Ô#Ð#à‡F‚Fˆ1�I„I€Ið ÔÔ$­¬
Ò2Ð2Ð2Ð2à(Ð(Ð(€OÝ•O B¤J°Ñ@Ô@À#ÑFÔFÐFð •OÐ#Ð#Ý�2‰YŒY×"Ò" 1Ñ%Ô%ˆØÔ"Ô(­B¬JÒ6Ð6Ð6Ð6ð $Ð#à6Ð6r/   c                 óÈ  —  | t           |¬¦  «                             t          ¦  «        }|                     |j        ¦  «        }t          |t          |j        ¦  «        ¦  «         t          |                     ¦   «         t          j
        t           ¦  «        ¦  «         |                     t          ¦  «        }t          |t          t          |j        ¦  «        ¦  «         d S )N©rA   r'   )rA   rI   r*   Ú	transformrL   r   r   r   ÚdiagonalrG   rb   )r«   r}   r…   ÚXts       r-   Útest_transformr1  Û  s°   € ð 
ˆ�jÐ7IÐ	JÑ	JÔ	J×	NÒ	NÍqÑ	QÔ	Q€Bð 
�Š�bÔ)Ñ	*Ô	*€BÝ�BÕ*¨2Ô+>Ñ?Ô?Ñ@Ô@Ð@å�r—{’{‘}”}¥b¤h­zÑ&:Ô&:Ñ;Ô;Ð;ð 
�Š•a‰Œ€BÝ�BÕ*­1¨bÔ.AÑBÔBÑCÔCÐCÐCÐCr/   c                 óê   —  | |d¬¦  «                              t          ¦  «                             t          ¦  «        } | |d¬¦  «                             t          ¦  «        }t	          ||¦  «         d S )Nr<   )r'   rB   )rI   r*   r.  Úfit_transformr   )r«   r}   ÚX1ÚX2s       r-   Útest_fit_transformr6  í  sn   € ð 
ˆÐ 2¸1Ð	=Ñ	=Ô	=×	AÒ	AÅ!Ñ	DÔ	D×	NÒ	NÍqÑ	QÔ	Q€BØ	ˆÐ 2¸1Ð	=Ñ	=Ô	=×	KÒ	KÍAÑ	NÔ	N€BÝ�B˜ÑÔÐÐÐr/   c                 ó¤   — t           j        }dD ]@}t          t          d|| d¬¦  «                             t
          ¦  «        }|j        |k    sJ ‚ŒAd S )N)r<   rv   r]   ry   r<   )rA   rC   rB   r'   r„   )rG   Úinfr   rA   rI   r*   rK   )r}   Úprevious_inertiarB   r…   s       r-   Útest_n_initr:  õ  sq   € å”vÐØð 
/ð 
/ˆõ Ý!ØØØ+Øð
ñ 
ô 
÷ Š#�a‰&Œ&ð 	ð Œ{Ð.Ò.Ð.Ð.Ð.Ð.ð
/ð 
/r/   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)rA   rF   r'   r   r!   r   )
r   r*   rA   rŠ   rœ   rG   r�   r   r   rž   )r}   Úcluster_centersrj   Úinertias       r-   Útest_k_means_functionr>    s’   € å'.Ý	•j°ÐCUð(ñ (ô (Ñ$€O�V˜Wð Ô ¥ZµÐ$<Ò<Ð<Ð<Ð<ÝŒ9�VÑÔÔ" 1Ô%­Ò3Ð3Ð3Ð3õ •O¥K°Ñ8Ô8¸#Ñ>Ô>Ð>Ø�SŠ=ˆ=ˆ=ˆ=ˆ=ˆ=r/   c                 óÞ  —  | 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 ‚Œ¯t          |t           j                 |t           j                 d¬¦  «         t          |t           j                 |t           j                 |t           j                                      ¦   «         dz  ¬	¦  «         t          |t           j                 |t           j                 |t           j                                      ¦   «         dz  ¬	¦  «         t          |t           j                 |t           j                 ¦  «         d S )
Nr<   )rB   r'   F©r‹   r   r>   r   ©Úrtol)Úatol)rG   r)  Úfloat32ÚastyperI   rK   r.  rL   rJ   r9   r   r´   r   Úmaxr   )
r«   r    r}   r…   r=  r0  r%   rj   r9   r*   s
             r-   Útest_float_precisionrG    sÂ  € ð 
ˆ˜!Ð*<Ð	=Ñ	=Ô	=€Bà€GØ	€BØ€GØ€Få”*�bœjÐ)ð 6ð 6ˆØ×Ò˜e¨%ÐÑ0Ô0ˆØ
�Šˆq‰	Œ	ˆ	àœˆ�‰Ø—L’L ‘O”Oˆˆ5‰	ØÔ,ˆ�‰Øœ
ˆˆu‰ð Ô"Ô(¨EÒ1Ð1Ð1Ð1ð �Ð'Ð'Ø�NŠN˜1˜Q˜q˜Sœ6Ñ"Ô"Ð"ØÔ&Ô,°Ò5Ð5Ð5Ð5øõ �G�BœJÔ'¨µ´Ô)<À4ÐHÑHÔHÐHÝ�B•r”z”N B¥r¤z¤N¸½B¼J¼×9KÒ9KÑ9MÔ9MÐPTÑ9TÐUÑUÔUÐUÝØ•”
Ô˜W¥R¤ZÔ0°w½r¼zÔ7J×7NÒ7NÑ7PÔ7PÐSWÑ7Wðñ ô ð õ �v�bœjÔ)¨6µ"´*Ô+=Ñ>Ô>Ð>Ð>Ð>r/   c                 óþ   — t                                |d¬¦  «        }t                               |d¬¦  «        } | |t          d¬¦  «        }|                     |¦  «         t          j        |j        |¦  «        rJ ‚d S )NFr@  r<   rã   )r*   rE  r%   rA   rI   rG   Úmay_share_memoryrL   )r«   r9   Ú
X_new_typeÚcenters_new_typer…   s        r-   Útest_centers_not_mutatedrL  =  s{   € õ —’˜% e�Ñ,Ô,€JÝ—~’~ e°%�~Ñ8Ô8Ðà	ˆÐ(µZÈÐ	JÑ	JÔ	J€BØ‡F‚Fˆ:ÑÔÐåÔ" 2Ô#6Ð8HÑIÔIÐIÐIÐIÐIÐIr/   c                 óè   — t          t          ¬¦  «                             | ¦  «        }t          t          |j        d¬¦  «                             | ¦  «        }t	          |j        |j        ¦  «         d S )N)rA   r<   r½   )r   rA   rI   rL   r   )r    r  r  s      r-   Útest_kmeans_init_fitted_centersrN  L  sj   € õ �JÐ
'Ñ
'Ô
'×
+Ò
+¨JÑ
7Ô
7€CÝ
�J¨SÔ-AÈ!Ð
LÑ
LÔ
L×
PÒ
PØñô €Cõ �CÔ(¨#Ô*>Ñ?Ô?Ð?Ð?Ð?r/   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>   )
rG   Úasarrayr   r{   rÞ   r   rI   ÚsetrJ   r³   )r}   r*   r…   Úmsgs       r-   Ú1test_kmeans_warns_less_centers_than_unique_pointsrT  \  sý   € å
Œ
�Q˜�F˜Q ˜F Q¨ F¨Q°¨FÐ3Ñ4Ô4€AÝ	˜1Ð+=Ð	>Ñ	>Ô	>€Bð	Dð õ 
ŒÕ(°Ð	4Ñ	4Ô	4ð 0ð 0Ø
�Šˆq‰	Œ	ˆ	õ �2”:‰Œ¥#¥e¨A¡h¤h¡-¤-Ò/Ð/Ð/Ð/Ð/ð	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ç   )rG   Úsortr¤   s    r-   Ú_sort_centersrX  m  s   € ÝŒ7�7 Ð#Ñ#Ô#Ð#r/   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<   rv   rs   r   rç   )rC   rB   rA   r'   rE   )rG   ry   rz   Úrandintr$   Úrepeatr*   r   r%   rA   r   rI   rJ   r   r   rK   rX  rL   )r}   rF   ÚX_repeatr…   Úkm_weightedÚrepeated_labelsÚkm_repeateds          r-   Útest_weighted_vs_repeatedr`  q  s  € õ
 ”I×)Ò)Ð*<Ñ=Ô=×EÒEØ	ˆ1•9ð Fñ ô €Mõ Œy�˜M°Ð2Ñ2Ô2€Hå	Ý˜Q­:ÐDVð
ñ 
ô 
€Bõ ˜‘)”)—-’-¥°�-Ñ?Ô?€KÝ”i Ô 3°]ÑCÔC€OÝ˜‘)”)—-’- Ñ)Ô)€Kå�{Ô*¨OÑ<Ô<Ð<Ý�KÔ(¨+Ô*>Ñ?Ô?Ð?ÝÝ�kÔ2Ñ3Ô3Ý�kÔ2Ñ3Ô3ñô ð ð ð r/   c                 óV  — t          j        t          ¦  «        } | t          |d¬¦  «        }t	          |¦  «                             |d ¬¦  «        }t	          |¦  «                             ||¬¦  «        }t          |j        |j        ¦  «         t          |j	        |j	        ¦  «         d S r  )
rG   ra   r$   rA   r   rI   r   rJ   r   rL   )r«   r    r}   rF   r…   Úkm_noneÚkm_oness          r-   Útest_unit_weights_vs_no_weightsrd  ‹  s‘   € õ ”G�IÑ&Ô&€Mà	ˆ�jÐ7IÐRSÐ	TÑ	TÔ	T€BÝ�B‰iŒi�mŠm˜J°dˆmÑ;Ô;€GÝ�B‰iŒi�mŠm˜J°mˆmÑDÔD€Gå�w”¨¬Ñ8Ô8Ð8Ý�GÔ,¨gÔ.FÑGÔGÐGÐGÐGr/   c                 óš  — t           j                             |¦  «                             t          ¬¦  «        } | t
          |d¬¦  «        }t          |¦  «                             ||¬¦  «        }t          |¦  «                             |d|z  ¬¦  «        }t          |j	        |j	        ¦  «         t          |j        |j        ¦  «         d S )Nrs   r<   r   rE   r;   )rG   ry   rz   r¹   r$   rA   r   rI   r   rJ   r   rL   )r«   r    r}   rF   r…   Úkm_origÚ	km_scaleds          r-   Útest_scaled_weightsrh  ž  s¯   € õ ”I×)Ò)Ð*<Ñ=Ô=×EÒEÍ9ÐEÑUÔU€Mà	ˆ�jÐ7IÐRSÐ	TÑ	TÔ	T€BÝ�B‰iŒi�mŠm˜J°mˆmÑDÔD€GÝ�b‘	”	—’˜j¸¸mÑ8K�ÑLÔL€Iå�w”¨	Ô(9Ñ:Ô:Ð:Ý�GÔ,¨iÔ.HÑIÔIÐIÐIÐIr/   c                  ór   — t          dd¬¦  «                             t          ¦  «        } | j        dk    sJ ‚d S )Nr8   r<   )rD   r„   )r   rI   r*   rM   rþ   s    r-   Ú test_kmeans_elkan_iter_attributerj  ±  s7   € õ 
˜'¨AÐ	.Ñ	.Ô	.×	2Ò	2µ1Ñ	5Ô	5€BØŒ:˜Š?ˆ?ˆ?ˆ?ˆ?ˆ?r/   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 )	NrZ   r<   gffffffþ?gš™™™™™¹?r]   r0   r½   rE   )	rG   rH   r   rI   ÚlenrR  rJ   r   rL   )r4   r*   rF   rC   r…   s        r-   Ú#test_kmeans_empty_cluster_relocatedrm  ¸  s§   € ð 	ˆ�r�d˜Q˜C�[Ñ!Ô!€AØ˜#�J€MÝŒ8�b�T˜B˜4�LÑ!Ô!€Då	˜1 4°Ð	2Ñ	2Ô	2€BØ‡F‚Fˆ1˜M€FÑ*Ô*Ð*å�s�2”:‰ŒÑÔ 1Ò$Ð$Ð$Ð$Ý�BÔ'¨2¨$°°¨Ñ5Ô5Ð5Ð5Ð5r/   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]   rs   r<   Úopenmp)ÚlimitsÚuser_apir-  r0   )
rG   ry   rz   rm   r   ÚlimitrA   rI   rJ   r   )r«   r}   r~   r*   Úresult_1Úresult_2s         r-   Ú#test_result_equal_in_diff_n_threadsrv  Ç  s{  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CØ�
Š
˜ˆ
Ñ!Ô!€Aå	#Ñ	%Ô	%×	+Ò	+°1¸xÐ	+Ñ	HÔ	Hð 
ð 
àˆI¥Ð:LÐMÑMÔMßŠS�‰VŒVÜð 	ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ 
$Ñ	%Ô	%×	+Ò	+°1¸xÐ	+Ñ	HÔ	Hð 
ð 
àˆI¥Ð:LÐMÑMÔMßŠS�‰VŒVÜð 	ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ �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<   r8   )rA   rD   )r{   rÞ   rß   r   rI   r*   r)   r/   r-   Útest_warning_elkan_1_clusterrx  Ý  s¦   € å	ŒÝØIð
ñ 
ô 
ð 7ð 7õ 	˜! wÐ/Ñ/Ô/×3Ò3µAÑ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"   rv   rs   rv   c                 óò   — |                      ¦   «         }t          | |¦  «        }t          |j        d         ¦  «        D ]%}| ||k                                  d¬¦  «        ||<   Œ&t          | |¦  «        }||fS rV  )r‹   r   r³   rŠ   rò   )r*   rC   Únew_centersrj   Úlabels        r-   Ú	py_kmeansz+test_k_means_1_iteration.<locals>.py_kmeansï  s~   € Ø—i’i‘k”kˆÝ*¨1¨dÑ3Ô3ˆÝ˜4œ: aœ=Ñ)Ô)ð 	Að 	AˆEØ!" 6¨U¢?Ô!3×!8Ò!8¸aÐ!8Ñ!@Ô!@ˆK˜ÑÐÝ*¨1¨kÑ:Ô:ˆØ�{Ð"Ð"r/   r<   )rA   rB   rC   rD   r„   )
rG   ry   rz   r¹   r   rI   rJ   rL   r   r   )r4   r6   r}   r*   rN   r}  Ú	py_labelsÚ
py_centersÚ	cy_kmeansÚ	cy_labelsÚ
cy_centerss              r-   Útest_k_means_1_iterationrƒ  æ  sÑ   € õ
 	Œ	×ÒÐ0Ñ1Ô1×9Ò9¸xÐ9ÑHÔH€AØ�R�a�R”5€LØˆ�Q‰Œ€Að#ð #ð #ð &˜I a¨Ñ6Ô6Ñ€IˆzåØ˜Q \¸TÈAðñ ô ç	‚cˆ!�f„fð ð Ô!€IØÔ+€Jå�y )Ñ,Ô,Ð,Ý�J 
Ñ+Ô+Ð+Ð+Ð+r/   Ú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'   r9   rZ   Fr@  r0   r   gH¯¼šò×z>rA  )rG   ry   rz   ÚspÚtoarrayr`   r¾   rE  rë   Úsqrtr
   r   rd   re   rD  r   )r9   r„  r}   r�   Úa_sparseÚa_denseÚbÚb_squared_normÚexpectedÚdistance_dense_denseÚdistance_sparse_denserB  s               r-   Útest_euclidean_distancer”    sU  € õ
 Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝŒyØ	ˆ3˜ E¸À5ðñ ô €Hð ×ÒÑ Ô ×(Ò(¨Ñ,Ô,€GØ�	Š	�#‰Œ×Ò˜e¨%ÐÑ0Ô0€AØ˜‘d—Z’Z‘\”\€Nà˜1‘ Ñ"×'Ò'Ñ)Ô)€HØ"Ð9ˆxˆx­¬°Ñ(9Ô(9€Hå9¸'À1ÀgÑNÔNÐÝ;ØŒ�xÔ'¨¨N¸Gñô Ðð �BœJÒ&Ð&ˆ4ˆ4¨D€DÝÐ(Ð*?ÀdÐKÑKÔKÐKÝÐ(¨(¸Ð>Ñ>Ô>Ð>ÝÐ)¨8¸$Ð?Ñ?Ô?Ð?Ð?Ð?r/   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‡  Fr@  rv   )rt   r9   r0   r<   rç   )Ú	n_threadsr   rw   rA  )r–  Úsingle_label)rG   ry   rz   rŠ  r‹  r¾   rE  rZ  rc   rë   r   r   rD  r   )r9   r}   r�   ÚX_sparser*  rF   r%   rj   Ú	distancesr‘  Úinertia_denseÚinertia_sparserB  r|  Úmasks                  r-   Útest_inertiar�    sS  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝŒyØˆR˜ U¸ÀEðñ ô €Hð ×ÒÑ Ô €GØ—I’I˜c‘N”N×)Ò)¨%°eÐ)Ñ<Ô<€MØ�iŠi˜˜2ÑÔ×%Ò% e°%Ð%Ñ8Ô8€GØ�[Š[˜ ­B¬Hˆ[Ñ5Ô5€Fà˜G FœOÑ+°Ñ1×6Ò6¸AÐ6Ñ>Ô>€IÝŒv�i -Ñ/Ñ0Ô0€Hå" 7¨M¸7ÀFÐVWÐXÑXÔX€MÝ$Ø�- ¨&¸Aðñ ô €Nð �BœJÒ&Ð&ˆ4ˆ4¨D€DÝ�M >¸Ð=Ñ=Ô=Ð=Ý�M 8°$Ð7Ñ7Ô7Ð7Ý�N H°4Ð8Ñ8Ô8Ð8ð €EØ�UŠ?€DØ˜$”- '¨%¤.Ñ0°QÑ6×;Ò;ÀÐ;ÑCÔC€IÝŒv�i -°Ô"5Ñ5Ñ6Ô6€Hå"Ø� ¨¸1È5ðñ ô €Mõ %Ø�- ¨&¸AÈEðñ ô €Nõ �M >¸Ð=Ñ=Ô=Ð=Ý�M 8°$Ð7Ñ7Ô7Ð7Ý�N H°4Ð8Ñ8Ô8Ð8Ð8Ð8r/   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¡   )rB   rC   r<   ry   r   r]   )rI   r*   r¿   Ú__name__)ÚKlassÚdefault_n_initÚests      r-   Útest_n_init_autor£  I  s‰   € à
ˆ%�v KÐ
0Ñ
0Ô
0€CØ‡G‚G�A�J„J€JØŒ;˜!ÒÐÐÐà
ˆ%�v HÐ
-Ñ
-Ô
-€CØ‡G‚G�A�J„J€JØ %¤°(Ò :Ð :ˆ3Œ;˜"ÒÐÐÐÐÐÐÐÐr/   c                 óò   — t          j        dgdgdgg¦  «        }t          j        g d¢¦  «        } | dd¬¦  «                             ||¬¦  «         t          |t          j        g d¢¦  «        ¦  «         d S )Nr<   r0   rP  )r;   gš™™™™™É?g333333Ó?r   r-  rE   )rG   rH   rI   r   )r«   r*   rF   s      r-   Útest_sample_weight_unchangedr¥  T  s~   € õ 	Œ�1�#˜�s˜Q˜C�Ñ!Ô!€AÝ”H˜_˜_˜_Ñ-Ô-€MØ€I˜¨Ð+Ñ+Ô+×/Ò/°ÀÐ/ÑOÔOÐOå�}¥b¤h¨¨¨Ñ&?Ô&?Ñ@Ô@Ð@Ð@Ð@r/   zparam, matchrA   r<   z#n_samples.* should be >= n_clusterszIThe shape of the initial centers .* does not match the number of clustersc                 ó   — | d d…         S )Nr0   r)   ©ÚX_r¦   r'   s      r-   r§   r§   i  s   € °°B°Q°B´€ r/   r_   zUThe shape of the initial centers .* does not match the number of features of the datac                 ó   — | d d…d d…f         S )Nr_   r0   r)   r§  s      r-   r§   r§   s  s   € °°B°Q°B¸¸¸°F´€ r/   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<   )rB   rÚ   r)   )r{   ÚraisesÚ
ValueErrorr  rI   r*   )r«   ÚparamrÛ   r…   s       r-   Útest_wrong_paramsr®  ^  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*   rA   )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 )Nru   r   rç   )	rE  r	   rA   rŠ   ÚallrF  Úminr   r*   )r    r9   r}   rd   r%   re   s         r-   Útest_kmeans_plusplus_outputrµ  ‘  sG  € ð ×Ò˜UÑ#Ô#€DÝ&Ø�jÐ'9ðñ ô Ñ€GˆWð Œ=˜Ô�zÒ)Ð)Ð)Ð)Ø�qŠL×ÒÑÔÐÐÐØ�t”z !”}Ò$×)Ò)Ñ+Ô+Ð+Ð+Ð+ð Œ=˜Ô�zÒ)Ð)Ð)Ð)Ø�KŠK˜QˆKÑÔ 4§8¢8° 8Ñ#3Ô#3Ò3×8Ò8Ñ:Ô:Ð:Ð:Ð:Ø�KŠK˜QˆKÑÔ 4§8¢8° 8Ñ#3Ô#3Ò3×8Ò8Ñ:Ô:Ð:Ð:Ð:õ
 •A�g”J×%Ò% eÑ,Ô,¨gÑ6Ô6Ð6Ð6Ð6r/   ©r„  c                 óz   — t          t          t          | ¬¦  «        \  }}t          t          |         |¦  «         d S )N)r¯  )r	   r*   rA   r   )r¯  r%   re   s      r-   Útest_kmeans_plusplus_normsr¸  ®  s7   € õ '¥q­*ÀoÐVÑVÔVÑ€GˆWå•A�g”J Ñ(Ô(Ð(Ð(Ð(r/   c                 óÊ   — t          t          t          | ¬¦  «        \  }}t          j        t          ¦  «        }t          |t          | ¬¦  «        \  }}t          ||¦  «         d S )Nru   )r	   r*   rA   rG   rÅ   r   )r}   Ú	centers_cr   rÆ   rÇ   s        r-   Útest_kmeans_plusplus_dataorderr»  ¶  sd   € å"¥1¥jÐ?QÐRÑRÔR�L€IˆqåÔ!¥!Ñ$Ô$€Iå(Ø•:Ð,>ðñ ô Ñ€O�Qõ �I˜Ñ/Ô/Ð/Ð/Ð/r/   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<   r0   r   r0   r<   r=   r>   )r   r0   r0   r   r<   r0   r<   r   )r<   r   r   r0   r0   r   r0   r<   )rG   rH   rc   r   )Úlabels1Úlabels2Úlabels3s      r-   Útest_is_same_clusteringrÀ  Ã  s«   € åŒhÐ/Ð/Ð/µr´xÐ@Ñ@Ô@€GÝ˜w¨°Ñ3Ô3Ð3Ð3Ð3õ ŒhÐ/Ð/Ð/µr´xÐ@Ñ@Ô@€GÝ˜w¨°Ñ3Ô3Ð3Ð3Ð3õ ŒhÐ/Ð/Ð/µr´xÐ@Ñ@Ô@€GÝ" 7¨G°QÑ7Ô7Ð7Ð7Ð7Ð7Ð7r/   Úkwargs)rC   rB   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=   rA   r0   Nr)   )rG   rQ  r)  r   rI   )rÁ  r*   Ú
clusterings      r-   Ú-test_kmeans_with_array_like_or_np_scalar_initrÄ  Ó  sc   € õ 	Œ
�Q˜�F˜S !˜H s¨A h°°A°Ð7½r¼zÐJÑJÔJ€AåÐ/Ð/ 1Ð/¨Ð/Ð/€Jà‡N‚N�1ÑÔÐÐÐr/   zKlass, methodrI   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ÐF¨q˜:Ð* qÐ*Ð*ÐFÐFÐFr/   N)	rŸ  ÚlowerÚgetattrr*   rL   rŠ   Úget_feature_names_outr   r³   )r   ÚmethodrS   rA   Ú	names_outrÇ  s        @r-   Útest_feature_names_outrÍ  â  s‘   ø€ ð ”×%Ò%Ñ'Ô'€JØˆU‰WŒW€FØ…GˆF�FÑÔ�AÑÔÐØÔ(Ô.¨qÔ1€Jà×,Ò,Ñ.Ô.€IÝÐFÐFÐFÐFµE¸*Ñ4EÔ4EÐFÑFÔFÈ	ÑRÔRÐRÐRÐRr/   Ú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   rL   rJ   r  r   )rÎ  r*   r   rS   Úy_pred1Úy_pred2s         r-   Ú,test_predict_does_not_change_cluster_centersrÒ  ñ  sš   € õ  °¸BÈQÐOÑOÔO�D€A€qØÐ ØˆM˜!ÑÔˆå‰XŒX€FØ× Ò  Ñ#Ô#€Gå7¸Ô8OÑPÔP€FÔÝ.¨v¬~Ñ>Ô>€F„Nà�nŠn˜QÑÔ€GÝ�w Ñ(Ô(Ð(Ð(Ð(r/   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 )zªCheck 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   rs   rv   ©r*   r¯  rC   rF   Ún_centroidsr'   N)rG   ry   rz   r   r   r   Ú_init_centroidsr¹   rŠ   ra   r{   r«  rV   r   )	rC   r}   r�   r*   r   r¯  rS   Úclusters_weightedÚclusterss	            r-   Útest_sample_weight_initrÙ    s�  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝØ "¨bÐ?Qðñ ô �D€A€qõ   ¨4Ð0Ñ0Ô0€Oå‰XŒX€FØ×.Ò.Ø
Ø'ØØ—k’k q¤w¨q¤z�kÑ2Ô2ØÝ”Y×*Ò*Ð+=Ñ>Ô>ð /ñ ô Ðð ×%Ò%Ø
Ø'ØÝ”g˜aœg aœjÑ)Ô)ØÝ”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 )z»Check 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"   rv   r  r   rs   Nr0   Tr¶  r]   rÔ  )rG   ry   rz   r   r¹   rŠ   r   r   rÖ  r   rê   Úisclose)
rC   r}   r�   r*   r   rF   r¯  rS   r×  Úds
             r-   Útest_sample_weight_zerorÝ  '  s  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝØ !¨QÐ=Oðñ ô �D€A€qð —K’K Q¤W¨Q¤Z�KÑ0Ô0€MØ€M�#�#�A�#ÑÝ ¨4Ð0Ñ0Ô0€Oå‰XŒX€FØ×.Ò.Ø
Ø'ØØ#ØÝ”Y×*Ò*Ð+=Ñ>Ô>ð /ñ ô Ðõ 	˜A˜c˜c ˜cœFÐ$5Ñ6Ô6€AÝŒv•b”j  AÑ&Ô&Ñ'Ô'Ð'Ð'Ð'Ð'Ð'r/   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 )zµCheck 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<   rv   )rA   rC   rD   zENumber of distinct clusters \(4\) found smaller than n_clusters \(5\)rÚ   N)rG   rH   r   r{   rÞ   r   rI   rM   )rD   r4   r*   r…   rS  s        r-   Útest_relocating_with_duplicatesrß  E  så   € õ 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&Ð9Ñ:Ô:€AÝ	˜1 1°	Ð	:Ñ	:Ô	:€Bà
R€CÝ	ŒÕ(°Ð	4Ñ	4Ô	4ð  ð  Ø
�Šˆ|ˆ|˜A‰ŒÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð Œ:˜Š?ˆ?ˆ?ˆ?ˆ?ˆ?s   ÁA>Á>BÂB)�Ú__doc__rÓ   rÍ   Úior   ÚnumpyrG   r{   Úscipyr   rŠ  Ú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   rH   r%   r$   rŠ   rA   rœ   r*   rž   ÚX_as_any_csrÚdata_containersrl  Údata_containers_idsÚmarkÚparametrizerD  r)  rT   rW   rk   r‚   r†   rš   rŸ   r°   r¶   rÂ   rÊ   rÐ   rØ   rà   rä   rî   r÷   rù   rÿ   r  r	  r  r  r  r$  r&  rc   Úint64r+  r1  r6  r:  r>  rG  rL  rN  rT  rX  r`  rd  rh  rj  rm  rv  rx  rƒ  r”  r�  r£  r¥  r®  r±  rµ  r¸  r»  rÀ  Ústr_rÄ  rÍ  rÒ  rÙ  rÝ  rß  r)   r/   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¤:¨r¬zÐ":Ñ;Ô;ð-ð -ñ <Ô;ñ 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ð&7ðR „×Ò˜¨(°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ˆ,ÑØð ñ ô ð
 „×ÒØ
Øˆ{˜GÐ%GÐ%GÐHØ6Ð6Ð6ð ñ ô ð
 „×Ò˜ v¨Ð&?Ñ@Ô@ðð ñ AÔ@ñô ñô ðð „×ÒØ
Øˆ{˜GÐ%GÐ%GÐHØ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°\À7Ð4KÑLÔLðLð Lñ MÔLðLð6(ð (ð (ð2ð ð ð „×Ò˜ v¨Ð&?Ñ@Ô@ð	ð 	ñ AÔ@ð	ð „×Ò˜¨Ð>QÐÑRÔRØ„×ÒØØˆgÐ˜ Ð)¨O¸TÐ+BÐCñô ð „×Ò˜ a¨ XÑ.Ô.ð ,ð  ,ñ /Ô.ñ	ô ñ SÔRð ,ðF „×Ò˜ ,Ñ/Ô/Ø„×Ò˜ v¨Ð&?Ñ@Ô@ðKð Kñ AÔ@ñ 0Ô/ðKð$ „×Ò˜ ,Ñ/Ô/Ø„×ÒØ
ˆX�{ GÐ,Ð2TÐ2TÐ2Tð ñ ô ð „×Ò˜ v¨Ð&?Ñ@Ô@ð
6ð 
6ñ AÔ@ñô ñ 0Ô/ð

6ð „×Ò˜¨Ð>QÐÑRÔRØ„×Ò˜ 2¤8¨R¬XÐ"6Ñ7Ô7Ø„×Ò˜ +¨yÐ!9Ñ:Ô:Ø„×Ò˜ v¨Ð&?Ñ@Ô@ð7ð 7ñ AÔ@ñ ;Ô:ñ 8Ô7ñ SÔRð7ð8 „×Ò˜ v¨Ð&?Ñ@Ô@ðDð Dñ AÔ@ðDð" „×Ò˜ v¨Ð&?Ñ@Ô@ðð ñ AÔ@ðð/ð /ð /ð ð ð ð „×ÒØØ€Cˆ,ÑØð ñ ô ð
 „×Ò˜ v¨Ð&?Ñ@Ô@ð!?ð !?ñ AÔ@ñô ð!?ðH „×Ò˜ 2¤8¨R¬X°r´zÀ2Ä:Ð"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¤:¨r¬zÐ":Ñ;Ô;Ø„×Ò˜ T¨5 MÑ2Ô2ð@ð @ñ 3Ô2ñ <Ô;ð@ð2 „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ð'9ð '9ñ <Ô;ð'9ðT „×ÒÐ0°F¸B°<À/ÐSTÐAUÐ2VÑWÔWðBð Bñ XÔWðBð „×Ò˜ v¨Ð&?Ñ@Ô@ðAð Añ AÔ@ðAð „×Ò˜ v¨Ð&?Ñ@Ô@Ø„×ÒØà
˜	 A™Ð	&Ð(NÐOà�Q�r˜�r”UˆOð&ð	
ð Ð7Ð7Ð8ð&ð	
ð �Q�r˜�r˜2˜A˜2�v”YÐð2ð	
ð Ð;Ð;Ð<ð2ð	
ð#ñô ð4&ð &ñ5ô ñ AÔ@ð6&ð „×ÒØð   " 1 "¤Ð&ð3ð	
ðñ	ô 	ð0ð 0ñ	ô 	ð0ð
 „×ÒØØ€Cˆ,Ññô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ð7ð 7ñ <Ô;ñ	ô ð
7ð0 „×ÒÐ*¨Y¨Y°qÀ$Ð-GÑ-GÔ-GÈÐ,NÑOÔOð)ð )ñ PÔOð)ð
0ð 
0ð 
0ð8ð 8ð 8ð  „×ÒØ�˜˜œ Ñ,Ô,Ð-¸!¸Q¸À!ÀQÀÐ8HÐTUÐ/VÐ/VÐWñô ð	ð 	ñô ð	ð „×ÒØØˆe€_�¨Ð.°À-Ð0PÐQñô ðSð Sñ	ô ðSð „×Ò˜¨.¸D¸6Ñ*AÑBÔBð)ð )ñ CÔBð)ð& „×Ò˜ +¨xÐ!8Ñ9Ô9ð5ð 5ñ :Ô9ð5ðB „×Ò˜ +¨xÐ!8Ñ9Ô9ð(ð (ñ :Ô9ð(ð: „×Ò˜¨Ð>QÐÑRÔRØ„×Ò˜ w°Ð&8Ñ9Ô9ðð ñ :Ô9ñ SÔRðð ð r/   