Ë
    8Ò^j-À  ã                   óø  — 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.m/Z/ ddl0m1Z1  ejd                  g d¢g d¢g d¢g«      Z3dZ4e3jj                  \  Z6Z7 ee4e3dd¬«      \  Z8Z9e.D � cg c]
  }  | e8«      ‘Œ c} Z:ejd                  ge.z   Z; e<e:«      dk(  rg d¢nddgZ=ej|                  j                  de;e=¬«      ej|                  j                  dd d!g«      ej|                  j                  d"ej€                  ej‚                  g«      d#„ «       «       «       ZBej|                  j                  de;e=¬«      ej|                  j                  dd d!g«      d$„ «       «       ZCej|                  j                  de;e=¬«      d%„ «       ZDej|                  j                  d&d'd(g«      ej|                  j                  de;e=¬«      ej|                  j                  d)g d*¢«      d+„ «       «       «       ZEej|                  j                  d,d d!g«      d-„ «       ZFej|                  j                  d.e:«      d/„ «       ZGd0„ ZHej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d2d3d4e3j“                  «       d5„ gg d6¢¬«      ej|                  j                  d7eeg«      d8„ «       «       «       ZJej|                  j                  d2d3d4e3d9„ gg d6¢¬«      d:„ «       ZKej|                  j                  d;d<d=d>„ d?fd@g«      ej|                  j                  d7eeg«      dA„ «       «       ZLej|                  j                  d7eeg«      dB„ «       ZMdC„ ZNej|                  j                  d,d d!g«      ej|                  j                  d)dDdg«      dE„ «       «       ZOdF„ ZPej|                  j                  d7eeg«      dG„ «       ZQdH„ ZRej|                  j                  d1e8ge:z   e=¬«      dI„ «       ZSdJ„ ZTdK„ ZUej|                  j                  dLdMdNg«      dO„ «       ZVdP„ ZWdQ„ ZXej|                  j                  d7eeg«      dR„ «       ZYej|                  j                  de;e=¬«      ej|                  j                  dSed fed!fedfg«      ej|                  j                  dTddg«      dU„ «       «       «       ZZej|                  j                  d.e:«      ej|                  j                  d7eeg«      dV„ «       «       Z[ej|                  j                  d.e:«      ej|                  j                  d2d3d4e3gg dW¢¬«      ej|                  j                  d7eeg«      dX„ «       «       «       Z\ej|                  j                  de;e=¬«      ej|                  j                  d"ejº                  ej¼                  g«      ej|                  j                  d2d4dYg«      ej|                  j                  d7eeg«      dZ„ «       «       «       «       Z_ej|                  j                  d7eeg«      d[„ «       Z`ej|                  j                  d7eeg«      d\„ «       Zad]„ Zbd^„ Zcej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d7eeg«      ej|                  jÉ                   eed_„  e	«       D «       «       d`¬a«      db„ «       «       «       Zfej|                  j                  d"ejº                  ej¼                  ej€                  ej‚                  g«      ej|                  j                  d7eeg«      dc„ «       «       Zgej|                  j                  d1e8ge:z   e=¬«      dd„ «       Zhde„ Zidf„ Zjdg„ Zkej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d7eeg«      dh„ «       «       Zlej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d7eeg«      di„ «       «       Zmdj„ Znej|                  j                  de;e=¬«      dk„ «       Zoej|                  j                  d7eeg«      dl„ «       Zpdm„ Zqej|                  j                  de;e=¬«      ej|                  j                  dd d!g«      dn„ «       «       Zrej|                  j                  d"ej€                  ej‚                  g«      ej|                  j                  dodpdqg«      dr„ «       «       Zsej|                  j                  d"ej€                  ej‚                  g«      ds„ «       Ztej|                  j                  dtedufedvfg«      dw„ «       Zuej|                  j                  d7eeg«      dx„ «       Zvej|                  j                  d7eeg«      ej|                  j                  dydze4d{z   id|fd2e8dd id}fd2d~„ id}fd2e8dd…dd…f   id€fd2d�„ id€fg«      d‚„ «       «       Zwej|                  j                  dydƒe8dd id„fg«      d…„ «       Zxej|                  j                  d1e8ge:z   «      ej|                  j                  d"ej‚                  ej€                  g«      d†„ «       «       Zyej|                  j                  dƒ e,e8dp¬‡«      dg«      dˆ„ «       Zzd‰„ Z{dŠ„ Z|ej|                  j                  d‹d2 ejú                  d4«      iddgd{d{ggd{dŒœf«      d�„ «       Z~ej|                  j                  dŽed�fed�fed�fg«      d‘„ «       Zej|                  j                  d’e.dgz   «      d“„ «       Z€ej|                  j                  d2d4d3g«      d”„ «       Z�ej|                  j                  d2d4d3g«      d•„ «       Z‚ej|                  j                  de;e=¬«      ej|                  j                  d,d d!g«      d–„ «       «       Zƒyc c} w )—zTesting for K-meansé    N)ÚStringIO)Úthreadpool_info)Úclone)ÚKMeansÚMiniBatchKMeansÚk_meansÚkmeans_plusplus)Ú_euclidean_dense_dense_wrapperÚ_euclidean_sparse_dense_wrapperÚ_inertia_denseÚ_inertia_sparseÚ_is_same_clusteringÚ_relocate_empty_clusters_denseÚ_relocate_empty_clusters_sparse)Ú_labels_inertiaÚ_mini_batch_step)Ú
make_blobs)ÚConvergenceWarning)Úpairwise_distancesÚpairwise_distances_argmin)Úv_measure_score)Úeuclidean_distances)Úassert_allcloseÚassert_array_equalÚcreate_memmap_backed_data)Ú	row_norms)ÚCSR_CONTAINERSÚ_sparse_random_array)Ú_get_threadpool_controller)ç        ç      @r    r    r    )ç      ð?r"   g      @r    r    )r"   r    r    r!   r"   éd   r"   é*   )Ú	n_samplesÚcentersÚcluster_stdÚrandom_stateé   )ÚdenseÚsparse_matrixÚsparse_arrayr*   r+   Ú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||¬«      }
|
j                  ||¬«       t	        |
j
                  |«       t        |
j                  |«       t        |
j                  |«       |
j                  |	k(  sJ ‚y )Nr   ç      à?é   ©r2   )é   r5   r5   r7   ©r   r   r5   r5   g      Ø?g      À?g      ì?r)   ©Ú
n_clustersÚn_initÚinitÚ	algorithm©Úsample_weight)
ÚnpÚarrayr   Úfitr   Úlabels_r   Úinertia_Úcluster_centers_Ún_iter_)r-   r/   r2   ÚXr?   Úinit_centersÚexpected_labelsÚexpected_inertiaÚexpected_centersÚexpected_n_iterÚkmeanss              úm/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_k_means.pyÚtest_kmeans_resultsrO   ;   sÙ   € ñ 	�q˜!�f˜s A˜h¨¨a¨°1°a°&Ð9ÀÔG€AÚ €MÜ—8‘8˜a ˜V a¨ VÐ,°EÔ:€Lâ"€OØÐÜ—x‘x %¨ ¨e°Q¨ZÐ 8ÀÔFÐØ€Oä˜q¨°ÈÔN€FØ
‡J�Jˆq €JÔ.ä�v—~‘~ Ô7Ü�F—O‘OÐ%5Ô6Ü�F×+Ñ+Ð-=Ô>Ø�>‰>˜_Ò,Ð,Ñ,ó    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||¬«      }|j                  |«       d}d}t	        |j
                  |«       |j                  |k(  sJ ‚	 g d¢}ddgd	dgg}t        |j                  |«       t	        |j                  |«       y # t        $ r; g d
¢}d	dgddgg}t        |j                  |«       t	        |j                  |«       Y y w xY w)Nr   r4   r5   r7   r)   r9   g      Ð?r8   g      è?)r5   r5   r   r   r"   r    )r@   rA   r   rB   r   rD   rF   r   rC   rE   ÚAssertionError)	r-   r/   rG   rH   rM   rL   rJ   rI   rK   s	            rN   Útest_kmeans_relocated_clustersrS   S   s  € ñ 	�q˜!�f˜s A˜h¨¨a¨°1°a°&Ð9Ó:€Aô —8‘8˜c 3˜Z¨!¨Q¨Ð0Ó1€Lä˜q¨°ÈÔN€FØ
‡J�Jˆq„Mà€OØÐÜ�F—O‘OÐ%5Ô6Ø�>‰>˜_Ò,Ð,Ð,ð	CÚ&ˆØ! 1˜I¨¨a yÐ1ÐÜ˜6Ÿ>™>¨?Ô;Ü˜×/Ñ/Ð1AÕBøÜò CÚ&ˆØ! 3˜K¨$°¨Ð5ÐÜ˜6Ÿ>™>¨?Ô;Ü˜×/Ñ/Ð1AÖBð	Cús   Á<8B5 Â5AC9Ã8C9c           
      ó†  — t        j                  g d¢«      j                  dd«      } | |«      }t        j                  d«      }t        j                  g d¢«      j                  dd«      }t        j                  g d¢«      j                  dd«      }t        j                  g d¢«      }t        j                  dt         j
                  ¬«      }| t         j                  u rt        ||||||«       n0t        |j                  |j                  |j                  |||||«       t        |g d	¢«       t        |d
gdgdgg«       y )N)
ç      $Àg      #Ài÷ÿÿÿg      !Àiøÿÿÿéÿÿÿÿr5   é	   ç      #@é
   rV   r5   rY   )rU   éöÿÿÿrZ   )g     €0ÀrZ   rZ   )g      $@r   r   r6   )é   r5   r5   iÜÿÿÿrX   )r@   rA   ÚreshapeÚonesÚzerosÚint32r   r   ÚdataÚindicesÚindptrr   r   )r-   rG   r?   Úcenters_oldÚcenters_newÚweight_in_clustersÚlabelss          rN   Útest_relocate_empty_clustersrg   r   s	  € ô
 	�‰Ò?Ó@×HÑHÈÈQÓO€AÙ�Q‹€AÜ—G‘G˜B“K€Mô —(‘(Ò,Ó-×5Ñ5°b¸!Ó<€Kô
 —(‘(Ò,Ó-×5Ñ5°b¸!Ó<€KÜŸ™¢,Ó/ÐÜ�X‰X�b¤§¡Ô)€Fà”r—x‘xÑÜ&Øˆ}˜k¨;Ð8JÈFõ	
ô 	(Ø�F‰FØ�I‰IØ�H‰HØØØØØô		
ô Ð)ª9Ô5Ü�K 3 %¨"¨°¨uÐ!5Õ6rP   ÚdistributionÚnormalÚblobsÚtol)ç{®Gáz„?g:Œ0âŽyE>g0Žä.ÿ++r   c                 óH  — t         j                  j                  |«      }| dk(  r|j                  d¬«      }nt	        |¬«      \  }}d||dk  <    ||«      }t        d|d|¬«      }t        d	d|d|¬
«      }|j                  |«       |j                  |«       t        |j                  |j                  «       t        |j                  |j                  «       |j                  |j                  k(  sJ ‚|j                  t        j                  |j                  d¬«      k(  sJ ‚y )Nri   ©iˆ  rY   ©Úsize©r(   r   é   r5   )r:   r(   r;   rk   r1   )r=   r:   r(   r;   rk   ç�íµ ÷Æ°>)Úrel)r@   ÚrandomÚRandomStateri   r   r   rB   r   rE   r   rC   rF   rD   ÚpytestÚapprox)	rh   r-   rk   Úglobal_random_seedÚrndrG   Ú_Úkm_lloydÚkm_elkans	            rN   Útest_kmeans_elkan_resultsr~   œ   s  € ô
 �)‰)×
Ñ
Ð 2Ó
3€CØ�xÒØ�J‰J˜JˆJÓ'‰ä sÔ+‰ˆˆ1Ø€A€aˆ!�e�HÙ�Q‹€Aä Ð1CÈAÐSVÔW€HÜØØØ'ØØô€Hð ‡L�L�„OØ‡L�L�„OÜ�H×-Ñ-¨x×/HÑ/HÔIÜ�x×'Ñ'¨×)9Ñ)9Ô:Ø×Ñ˜x×/Ñ/Ò/Ð/Ð/Ø×Ñ¤§¡¨h×.?Ñ.?ÀTÔ JÒJÐJÑJrP   r=   c                 óÌ   — t         j                  j                  |«      }|j                  d¬«      }d}t	        | d|dd|¬«      j                  |«      }|j                  |k  sJ ‚y )Nrn   ro   i,  rr   r5   r   )r=   r:   r(   r;   rk   Úmax_iter)r@   ru   rv   ri   r   rB   rF   )r=   ry   rz   rG   r€   Úkms         rN   Útest_kmeans_convergencer‚   º   sl   € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�
‰
˜
ˆ
Ó#€AØ€Hä	ØØØ'ØØØô
÷ 
�cˆ!ƒfð ð �:‰:˜Ò Ð Ñ rP   ÚX_csrc           
      ó  — t         j                  j                  |«      }t        |j	                  t        j
                  ¬«      z   }|j                  «       }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                  j                  |«      d¬«      }|dkD  sJ ‚t        |
||«      \  }}|dkD  sJ ‚||k  sJ ‚t        |||||t         j                  j                  |«      d¬«      }|dkD  sJ ‚t        |||«      \  }}|dkD  sJ ‚||k  sJ ‚t        ||«       t        ||«       t        ||«       t        ||«       y )Nro   r   r6   rY   F)Úrandom_reassignr    )r@   ru   rv   r&   ri   ÚshapeÚcopyÚ
zeros_liker^   rG   r2   r]   r   r   r   r   )rƒ   ry   Úrngrc   Úcenters_old_csrrd   Úcenters_new_csrÚweight_sumsÚweight_sums_csrr?   ÚX_mbÚX_mb_csrÚsample_weight_mbÚold_inertiarf   Únew_inertiaÚold_inertia_csrÚ
labels_csrÚnew_inertia_csrs                      rN   Ú!test_minibatch_update_consistencyr–   Í   sð  € ô �)‰)×
Ñ
Ð 2Ó
3€Cä˜CŸJ™J¬G¯M©M˜JÓ:Ñ:€KØ!×&Ñ&Ó(€Oä—-‘- Ó,€KÜ—m‘m OÓ4€Oä—(‘(˜;×,Ñ,¨QÑ/´q·w±wÔ?€KÜ—h‘h˜{×0Ñ0°Ñ3¼1¿7¹7ÔC€Oä—G‘GœAŸG™G A™J¬a¯g©gÔ6€Mô ˆSˆbˆ6€DØ�S�bˆz€HØ$ S bÐ)Ðô #ØØØØØÜ
�	‰	×ÑÐ0Ó1Øô€Kð ˜ÒÐÐô *¨$Ð0@À+ÓNÑ€FˆKØ˜ÒÐÐØ˜Ò$Ð$Ð$ô 'ØØØØØÜ
�	‰	×ÑÐ0Ó1Øô€Oð ˜SÒ Ð Ð ô #2ØÐ" Oó#Ñ€J�ð ˜SÒ Ð Ð Ø˜_Ò,Ð,Ð,ô �v˜zÔ*Ü�K Ô1Ü�K Ô1Ü�K Õ1rP   c                 ó  — | j                   }|j                  t        t        fk(  sJ ‚| j                  }t        j                  |«      j                  d   t        k(  sJ ‚t        t        t        |«      d«       | j                  dkD  sJ ‚y )Nr   r"   r    )rE   r†   r:   Ú
n_featuresrC   r@   Úuniquer   r   Útrue_labelsrD   )r�   r&   rf   s      rN   Ú_check_fitted_modelr›     sv   € ð ×!Ñ!€GØ�=‰=œZ¬Ð4Ò4Ð4Ð4à�Z‰Z€FÜ�9‰9�VÓ×"Ñ" 1Ñ%¬Ò3Ð3Ð3ô ”O¤K°Ó8¸#Ô>Ø�;‰;˜ÒÐÑrP   Ú
input_datar<   ru   ú	k-means++c                 ó*   — t         j                  «       S ©N©r&   r‡   ©rG   Úkr(   s      rN   ú<lambda>r£   "  s   € ÄwÇ|Á|Ã~€ rP   )ru   r�   ÚndarrayÚcallableÚ	Estimatorc                 ó€   — t        |t        «      rdnd} | |t        d|¬«      j                  |«      }t	        |«       y )NrY   r5   r$   ©r<   r:   r(   r;   )Ú
isinstanceÚstrr:   rB   r›   )r¦   rœ   r<   r;   r�   s        rN   Útest_all_initr«     s=   € ô ˜d¤CÔ(‰R¨a€FÙ	Øœj°rÀ&ô
ç	�cˆ*ƒoð ô ˜ÕrP   c                 ó*   — t         j                  «       S rŸ   r    r¡   s      rN   r£   r£   1  s   € ÄÇÁÃ€ rP   c                 óê   — t        | d«      r| j                  «       } t        | t        «      rdnd}t	        | t
        d|¬«      }t        d«      D ]  }|j                  t        «       Œ t        |«       y )Nr‡   rY   r5   r   r¨   r#   )
Úhasattrr‡   r©   rª   r   r:   ÚrangeÚpartial_fitrG   r›   )r<   r;   r�   Úis       rN   Ú&test_minibatch_kmeans_partial_fit_initr²   /  si   € ô ˆt�VÔà�y‰y‹{ˆô ˜d¤CÔ(‰R¨a€FÜ	Øœj°qÀô
€Bô �3‹Zò ˆà
�‰”qÕðô ˜ÕrP   zinit, expected_n_init)r�   r5   )ru   Údefaultc                 óD   — |j                  || j                  d   f¬«      S )Nr5   ro   )Úuniformr†   )rG   r:   r(   s      rN   r£   r£   J  s'   € °×0DÑ0DØ  !§'¡'¨!¡*Ð-ð 1Eó 1€ rP   r³   )ú
array-liker5   c                 ó  — d\  }}}t         j                  j                  ||«      }|dk(  r t         j                  j                  ||«      }|dk(  r| t        u rdnd} | ||d¬«      j	                  |«      }|j
                  |k(  sJ ‚y)	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#   rY   rr   r¶   r³   r7   rY   Úauto©r:   r<   r;   N)r@   ru   Úrandnr   rB   Ú_n_init)r¦   r<   Úexpected_n_initÚn_sampler˜   r:   rG   rM   s           rN   Ú,test_kmeans_init_auto_with_initial_centroidsr¾   D  s�   € ð( (2Ñ$€Hˆj˜*Ü
�	‰	�‰˜ *Ó-€AØˆ|ÒÜ�y‰y�‰˜z¨:Ó6ˆØ˜)Ò#Ø(¬OÑ;™!Àˆá *°4ÀÔG×KÑKÈAÓN€FØ�>‰>˜_Ò,Ð,Ñ,rP   c                 ót  — t        j                  t        «      }t        j                  t        «      } | t        t        d|¬«      j                  t        «      } | t        |d|¬«      j                  |«      }t        |j                  |j                  «       t        |j                  |j                  «       y )Nr5   ©r:   r<   r;   r(   )
r@   ÚasfortranarrayrG   r&   r:   rB   r   rE   r   rC   )r¦   ry   Ú	X_fortranÚcenters_fortranÚkm_cÚkm_fs         rN   Útest_fortran_aligned_datarÆ   c  s”   € ô ×!Ñ!¤!Ó$€IÜ×'Ñ'¬Ó0€OáÜ¤G°AÐDVôç	�cŒ!ƒfð 	ñ ÜØØØ'ô	÷
 
�cˆ)ƒnð 	ô �D×)Ñ)¨4×+@Ñ+@ÔAÜ�t—|‘| T§\¡\Õ2rP   c                  óÐ   — t        t        dd¬«      } t        j                  }t	        «       t        _        	 | j                  t        «       |t        _        y # |t        _        w xY w)Nr$   r5   )r:   r(   Úverbose)r   r:   ÚsysÚstdoutr   rB   rG   )r�   Ú
old_stdouts     rN   Útest_minibatch_kmeans_verboserÌ   v  sA   € ä	¤J¸RÈÔ	K€BÜ—‘€JÜ“„C„Jð Ø
�‰ŒqŒ	àŒ�
ø�ZŒ�
ús   ·A ÁA%rl   c           	      óè  — t         j                  j                  d«      j                  d¬«      }t	        | t
        ddd|d¬«      j                  |«       |j                  «       }t        j                  d|j                  «      sJ ‚t        j                  d	|j                  «      sJ ‚|dk(  r#t        j                  d
|j                  «      sJ ‚y t        j                  d|j                  «      sJ ‚y )Nr   rn   ro   r$   ru   r5   )r=   r:   r(   r<   r;   rk   rÈ   zInitialization completezIteration [0-9]+, inertiazstrict convergencez center shift .* within tolerance)r@   ru   rv   ri   r   r:   rB   Ú
readouterrÚreÚsearchÚout)r=   rk   ÚcapsysrG   Úcaptureds        rN   Útest_kmeans_verboserÔ   �  sÇ   € ô 	�	‰	×Ñ˜aÓ ×'Ñ'¨ZÐ'Ó8€Aä
ØÜØØØØØô÷ 
�cˆ!„fà× Ñ Ó"€Hä�9‰9Ð/°·±Ô>Ð>Ð>Ü�9‰9Ð1°8·<±<Ô@Ð@Ð@à
ˆa‚xÜ�y‰yÐ.°·±Ô=Ð=Ñ=ä�y‰yÐ<¸h¿l¹lÔKÐKÑKrP   c                  ó¤   — t        j                  t        d¬«      5  t        dd¬«      j	                  t
        «       d d d «       y # 1 sw Y   y xY w)Nz,init_size.* should be larger than n_clusters©ÚmatchrY   é   )Ú	init_sizer:   )rw   ÚwarnsÚRuntimeWarningr   rB   rG   © rP   rN   Ú'test_minibatch_kmeans_warning_init_sizerÝ   œ  s@   € ä	�‰ÜÐMô
ñ <ô 	 "°Ô4×8Ñ8¼Ô;÷<÷ <ñ <úó   œ!AÁAc                 ó°   — t        j                  t        d¬«      5   | t        t        d¬«      j                  t        «       d d d «       y # 1 sw Y   y xY w)NzAExplicit initial center position passed: performing only one initrÖ   rY   ©r<   r:   r;   )rw   rÚ   rÛ   r&   r:   rB   rG   )r¦   s    rN   Ú'test_warning_n_init_precomputed_centersrá   ¤  sH   € ô 
�‰ÜØQô
ñ Iñ 	”w¬:¸bÔA×EÑEÄaÔH÷	I÷ Iñ Iús   œ'AÁAc                 óp  — t        dd| ¬«      \  }}d|d d d…d d …f<   t        dd| d¬	«      j                  |«      }|j                  j	                  d
¬«      j                  «       }|dkD  sJ d|›d�«       ‚t        dd| d¬	«      j                  |«      }|j                  j	                  d
¬«      j                  «       }|dkD  sJ d|›d�«       ‚t        d| d¬«      }t        d«      D ]  }|j                  |«       Œ |j                  j	                  d
¬«      j                  «       }|dkD  sJ d|›d�«       ‚y )Nr#   rr   )r%   r&   r(   r   r)   rØ   rY   ru   )r:   Ú
batch_sizer(   r<   r5   ©ÚaxisrW   znum_non_zero_clusters=z is too smalléÈ   )r:   r(   r<   )r   r   rB   rE   ÚanyÚsumr¯   r°   )ry   Úzeroed_Xrš   r�   Únum_non_zero_clustersr±   s         rN   Ú test_minibatch_sensible_reassignrë   ¯  sm  € ô 'Ø˜qÐ/AôÑ€Hˆkð €H‰SˆqˆS’!ˆVÑä	Ø "Ð3EÈHô
ç	�cˆ(ƒmð ð ×/Ñ/×3Ñ3¸Ð3Ó;×?Ñ?ÓAÐØ  1Ò$ÐNÐ)?Ð)>Ð(@ÀÐ&NÓNÐ$ô 
Ø #Ð4FÈXô
ç	�cˆ(ƒmð ð ×/Ñ/×3Ñ3¸Ð3Ó;×?Ñ?ÓAÐØ  1Ò$ÐNÐ)?Ð)>Ð(@ÀÐ&NÓNÐ$ô 
 BÐ5GÈhÔ	W€BÜ�3‹Zò !ˆØ
�‰�xÕ ð!ð ×/Ñ/×3Ñ3¸Ð3Ó;×?Ñ?ÓAÐØ  1Ò$ÐNÐ)?Ð)>Ð(@ÀÐ&NÓNÑ$rP   c           
      ó–  — t        j                  t        t        f«      }t	        t        «      D ]%  }t
        t        |k(     j                  d¬«      ||<   Œ' t        j                  t        «      }t        j                  |«      }t        | ||d«      d    }t        | |||t        j                  t        «      t         j                  j                  |«      dd¬«       t        | ||d«      d    }||kD  sJ ‚t        | |||t        j                  t        «      t         j                  j                  |«      dd¬«       t!        ||«       y )Nr   rä   r5   T)r…   Úreassignment_ratiogVçž¯Ò<)r@   Úemptyr:   r˜   r¯   rG   rš   Úmeanr]   r%   Ú
empty_liker   r   r^   ru   rv   r   )rœ   ry   Úperfect_centersr±   r?   rd   Úscore_beforeÚscore_afters           rN   Útest_minibatch_reassignrô   Ð  s/  € ô —h‘h¤
¬JÐ7Ó8€OÜ”:Óò >ˆÜœ{¨aÑ/Ñ0×5Ñ5¸1Ð5Ó=ˆ˜Òð>ô —G‘GœIÓ&€MÜ—-‘- Ó0€Kô
 $ J°¸ÐPQÓRÐSTÑUÐU€LäØØØØÜ
�‰”ÓÜ
�	‰	×ÑÐ0Ó1ØØõ	ô # :¨}¸kÈ1ÓMÈaÑPÐP€Kà˜+Ò%Ð%Ð%ô ØØØØÜ
�‰”ÓÜ
�	‰	×ÑÐ0Ó1ØØ õ	ô �K Õ1rP   c                  óR   — t        ddt        dd¬«      j                  t        «       y )Nr#   rY   r$   T)r:   rã   rÙ   r(   rÈ   )r   r%   rB   rG   rÜ   rP   rN   Ú&test_minibatch_with_many_reassignmentsrö     s&   € ô
 ØØÜØØô÷ 
�cŒ!…frP   c                  óH  — t        ddd¬«      j                  t        «      } | j                  dk(  sJ ‚t        ddd¬«      j                  t        «      } | j                  dk(  sJ ‚t        dddt        dz   ¬«      j                  t        «      } | j                  t        k(  sJ ‚y )NrY   rr   r5   )r:   rã   r;   é   é   )r:   rã   r;   rÙ   )r   rB   rG   Ú
_init_sizer%   ©r�   s    rN   Útest_minibatch_kmeans_init_sizerü     s•   € ô 
 B°1¸QÔ	?×	CÑ	CÄAÓ	F€BØ�=‰=˜BÒÐÐô 
 B°1¸QÔ	?×	CÑ	CÄAÓ	F€BØ�=‰=˜BÒÐÐô 
Ø !¨A¼ÀQ¹ô
ç	�cŒ!ƒfð ð �=‰=œIÒ%Ð%Ñ%rP   ztol, max_no_improvement)ç-Cëâ6?N)r   rY   c                 ó  — t        ddd¬«      \  }}}t        d|d|dddd|¬«	      }|j                  |«       d|j                  cxk  rdk  sJ ‚ J ‚| j	                  «       }|€d	|j
                  v sJ ‚|dk(  rd
|j
                  v sJ ‚y y )Nr7   r   T)r&   r(   Úreturn_centersrØ   rY   r5   )	r:   r<   rã   rk   r(   r€   r;   rÈ   Úmax_no_improvementz Converged (small centers change)z*Converged (lack of improvement in inertia))r   r   rB   rF   rÎ   rÑ   )rÒ   rk   r   rG   r{   r&   r�   rÓ   s           rN   Ú#test_minibatch_declared_convergencer  #  s«   € ô  q°qÈÔN�M€A€qˆ'ä	ØØØØØØØØØ-ô

€Bð ‡F�Fˆ1„IØˆr�z‰zÔ˜BÒÐÑÐÐà× Ñ Ó"€HØÐ!Ø1°X·\±\ÑAÐAÐAØ
ˆa‚xØ;¸x¿|¹|ÑKÐKÑKð rP   c                  óà  — d} t         j                  d   }t        d| d¬«      j                  t         «      }|j                  t        j                  |j                  | z  |z  «      k(  sJ ‚t        |j                  t        «      sJ ‚t        d| ddd d¬«      j                  t         «      }|j                  dk(  sJ ‚|j                  d|z  | z  k(  sJ ‚t        |j                  t        «      sJ ‚y )Nrù   r   r7   )r:   rã   r(   rY   )r:   rã   r(   rk   r   r€   )
rG   r†   r   rB   rF   r@   ÚceilÚn_steps_r©   Úint)rã   r%   r�   s      rN   Útest_minibatch_iter_stepsr  ?  sÜ   € à€JÜ—‘˜‘
€IÜ	 A°*È1Ô	M×	QÑ	QÔRSÓ	T€Bð �:‰:œŸ™ "§+¡+°
Ñ":¸iÑ!GÓHÒHÐHÐHÜ�b—j‘j¤#Ô&Ð&Ð&ô 
ØØØØØØô
÷ 
�cŒ!ƒfð ð �:‰:˜ÒÐÐØ�;‰;˜2 	™>¨jÑ8Ò8Ð8Ð8Ü�b—k‘k¤3Ô'Ð'Ñ'rP   c                  ó¨   — t         j                  «       } t        dt        d¬«      }|j	                  | «       t        |«       t        | t         «       y )NFr$   )Úcopy_xr:   r(   )rG   r‡   r   r:   rB   r›   r   )Úmy_Xr�   s     rN   Útest_kmeans_copyxr
  X  s:   € ä�6‰6‹8€DÜ	�u¬À"Ô	E€BØ‡F�Fˆ4„LÜ˜Ôô �Dœ!ÕrP   c                 ó  — t         j                  j                  |«      j                  dd«      } | d|d¬«      }|j	                  |«      j                  |«      } | d|d¬«      }|j	                  |«      j                  |«      }||kD  sJ ‚y )Nr#   rY   r5   )r;   r(   r€   )r@   ru   rv   rº   rB   Úscore)r¦   ry   rG   Úkm1Ús1Úkm2Ús2s          rN   Útest_score_max_iterr  c  s   € ô 	�	‰	×ÑÐ0Ó1×7Ñ7¸¸RÓ@€Aá
˜1Ð+=ÈÔ
J€CØ	�‰�‹×	Ñ	˜!Ó	€BÙ
˜1Ð+=ÈÔ
K€CØ	�‰�‹×	Ñ	˜!Ó	€BØ�Š7€N‰7rP   zEstimator, algorithmr€   c                 ó   — t        ddd|¬«      \  }} |||¬«      } | ddd||¬«      }|�|j                  |¬«       |j                  |«       |j                  }	|j	                  |«      }
t        |
|	«       |j                  |«      }
t        |
|	«       |j	                  |j                  «      }
t        |
t        j                  d«      «       y )Nræ   rY   ©r%   r˜   r&   r(   r6   ru   )r:   r<   r;   r€   r(   )r=   )
r   Ú
set_paramsrB   rC   Úpredictr   Úfit_predictrE   r@   Úarange)r¦   r=   r-   r€   Úglobal_dtypery   rG   r{   r�   rf   Úpreds              rN   Útest_kmeans_predictr  p  sÈ   € ô Ø "¨bÐ?Qô�D€A€qñ 	�Q˜lÔ+€Aá	ØØØØØ'ô
€Bð ÐØ
�‰ 	ˆÔ*Ø‡F�Fˆ1„IØ�Z‰Z€Fð �:‰:�a‹=€DÜ�t˜VÔ$ð �>‰>˜!Ó€DÜ�t˜VÔ$ð �:‰:�b×)Ñ)Ó*€DÜ�tœRŸY™Y r›]Õ+rP   c                 óz  — t         j                  j                  |«      j                  t        f«      } | t
        |d¬«      }|j                  t        |¬«        | t
        |d¬«      }|j                  ||¬«       t        |j                  |j                  «       t        |j                  |j                  «       y ©Nr5   ©r:   r(   r;   r>   )r@   ru   rv   Úrandom_sampler%   r:   rB   rG   r   rC   r   rE   )r¦   rƒ   ry   r?   Úkm_denseÚ	km_sparses         rN   Útest_dense_sparser!  ™  sŸ   € ô —I‘I×)Ñ)Ð*<Ó=×KÑKÜ	ˆó€Mñ ÜÐ,>Àqô€Hð ‡L�L” -€LÔ0ÙÜÐ,>Àqô€Ið ‡M�M�% }€MÔ5ä�x×'Ñ'¨×):Ñ):Ô;Ü�H×-Ñ-¨y×/IÑ/IÕJrP   )ru   r�   r¤   c                 ó4  — t        |t        «      rdnd} | t        ||d¬«      }|j                  |«       t	        |j                  t        «      |j                  «       |j                  t        «       t	        |j                  |«      |j                  «       y )NrY   r5   r   rÀ   )r©   rª   r:   rB   r   r  rG   rC   )r¦   r<   rƒ   r;   r�   s        rN   Útest_predict_dense_sparser#  ­  sh   € ô ˜d¤CÔ(‰R¨a€FÙ	œj¨t¸FÐQRÔ	S€Bà‡F�Fˆ5„MÜ�r—z‘z¤!“} b§j¡jÔ1à‡F�FŒ1„IÜ�r—z‘z %Ó(¨"¯*©*Õ5rP   r¤   c           	      ó0  — 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|j                  d¬«       |j	                  |«       |j
                  j                  t         j                  k(  sJ ‚g d¢}	t        t        |j                  |	«      d«       | t        u rDt        |«      j                  |«      }|j
                  j                  t         j                  k(  sJ ‚y y )Nr   rY   é   rW   rV   r5   r)   r[   r6   r¤   rÀ   )rã   )r   r5   r5   r   r   r5   r"   )r@   rA   r   r  rB   rE   r2   Úfloat64r   r   rC   r   r°   )
r¦   r-   r2   r<   ry   ÚX_denserG   r;   r�   rI   s
             rN   Útest_integer_inputr(  ¿  s  € ô �h‰h˜˜A˜  R ¨2¨q¨'°B¸°7¸QÀ¸FÀQÈÀGÐLÓM€GÙ�W EÔ*€Aà˜)Ò#‰Q¨€FØ )Ò+ˆ7�2�A‰;°€Dá	Ø˜4¨Ð=Oô
€Bð ”OÑ#Ø
�‰ ˆÔ#à‡F�Fˆ1„Ið ×Ñ×$Ñ$¬¯
©
Ò2Ð2Ð2â(€OÜ”O B§J¡J°Ó@À#ÔFð ”OÑ#Ü�2‹Y×"Ñ" 1Ó%ˆØ×"Ñ"×(Ñ(¬B¯J©JÒ6Ð6Ñ6ð $rP   c                 óŽ  —  | t         |¬«      j                  t        «      }|j                  |j                  «      }t        |t        |j                  «      «       t        |j                  «       t        j                  t         «      «       |j                  t        «      }t        |t        t        |j                  «      «       y )N©r:   r(   )r:   rB   rG   Ú	transformrE   r   r   r   Údiagonalr@   r^   )r¦   ry   r�   ÚXts       rN   Útest_transformr.  ß  sˆ   € ñ 
œjÐ7IÔ	J×	NÑ	NÌqÓ	Q€Bð 
�‰�b×)Ñ)Ó	*€BÜ�BÔ*¨2×+>Ñ+>Ó?Ô@ä�r—{‘{“}¤b§h¡h¬zÓ&:Ô;ð 
�‰”a‹€BÜ�BÔ*¬1¨b×.AÑ.AÓBÕCrP   c                 ó¶   —  | |d¬«      j                  t        «      j                  t        «      } | |d¬«      j                  t        «      }t	        ||«       y )Nr5   )r(   r;   )rB   rG   r+  Úfit_transformr   )r¦   ry   ÚX1ÚX2s       rN   Útest_fit_transformr3  ñ  sI   € ñ 
Ð 2¸1Ô	=×	AÑ	AÄ!Ó	D×	NÑ	NÌqÓ	Q€BÙ	Ð 2¸1Ô	=×	KÑ	KÌAÓ	N€BÜ�B˜ÕrP   c                 ó¢   — t         j                  }dD ]:  }t        t        d|| d¬«      j	                  t
        «      }|j                  |k  rŒ:J ‚ y )N)r5   rr   rY   ru   r5   )r:   r<   r;   r(   r€   )r@   Úinfr   r:   rB   rG   rD   )ry   Úprevious_inertiar;   r�   s       rN   Útest_n_initr7  ù  sY   € ä—v‘vÐØò 
/ˆô Ü!ØØØ+Øô
÷ ‰#Œa‹&ð 	ð �{‰{Ð.Ó.Ð.Ð.ñ
/rP   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kD  sJ ‚y )N)r:   r?   r(   r   r"   r    )
r   rG   r:   r†   r˜   r@   r™   r   r   rš   )ry   Úcluster_centersrf   Úinertias       rN   Útest_k_means_functionr;  	  sy   € ä'.Ü	”j°ÐCUô(Ñ$€O�V˜Wð × Ñ ¤Z´Ð$<Ò<Ð<Ð<Ü�9‰9�VÓ×"Ñ" 1Ñ%¬Ò3Ð3Ð3ô ”O¤K°Ó8¸#Ô>Ø�SŠ=Ð‰=rP   c              #   ó2   K  — | ]  }|d    dk(  sŒ|–— Œ y­w)Úuser_apiÚblasNrÜ   )Ú.0r±   s     rN   ú	<genexpr>r@    s   è ø€ ÒD�!¨A¨j©M¸VÓ,CŒAÑDùs   ‚�zUFails for some global_random_seed on Atlas which cannot be detected by threadpoolctl.)Úreasonc                 óê  —  | d|¬«      }i }i }i }i }t         j                  t         j                  fD ]º  }|j                  |d¬«      }	|j	                  |	«       |j
                  ||<   |j                  |	«      ||<   |j                  ||<   |j                  ||<   |j                  j                  |k(  sJ ‚| t        u sŒŒ|j                  |	dd «       |j                  j                  |k(  rŒºJ ‚ d}
t        |t         j                     |t         j                     |
¬«       t        |t         j                     |t         j                     |t         j                     j                  «       |
z  ¬	«       t        |t         j                     |t         j                     |t         j                     j                  «       |
z  ¬	«       t        |t         j                     |t         j                     «       y )
Nr5   )r;   r(   F©r‡   r   r7   rý   ©Úrtol)Úatol)r@   r&  Úfloat32ÚastyperB   rD   r+  rE   rC   r2   r   r°   r   Úmaxr   )r¦   rœ   ry   r�   r:  r-  r&   rf   r2   rG   rE  s              rN   Útest_float_precisionrJ    sœ  € ñ 
˜!Ð*<Ô	=€Bà€GØ	€BØ€GØ€Fä—*‘*œbŸj™jÐ)ò 6ˆØ×Ñ˜e¨%ÐÓ0ˆØ
�‰ˆqŒ	àŸ™ˆ�‰Ø—L‘L “Oˆˆ5‰	Ø×,Ñ,ˆ�‰ØŸ
™
ˆˆu‰ð ×"Ñ"×(Ñ(¨EÒ1Ð1Ð1ð œÒ'Ø�N‰N˜1˜Q˜q˜6Ô"Ø×&Ñ&×,Ñ,°Ó5Ð5Ð5ð6ð& €DÜ�GœBŸJ™JÑ'¨´·±Ñ)<À4ÕHÜ�B”r—z‘z‘N B¤r§z¡z¡N¸¼B¿J¹J¹×9KÑ9KÓ9MÐPTÑ9TÕUÜØ”—
‘
Ñ˜W¤R§Z¡ZÑ0°w¼r¿z¹zÑ7J×7NÑ7NÓ7PÐSWÑ7Wõô �vœbŸj™jÑ)¨6´"·*±*Ñ+=Õ>rP   c                 óä   — t         j                  |d¬«      }t        j                  |d¬«      } | |t        d¬«      }|j	                  |«       t        j                  |j                  |«      rJ ‚y )NFrC  r5   rà   )rG   rH  r&   r:   rB   r@   Úmay_share_memoryrE   )r¦   r2   Ú
X_new_typeÚcenters_new_typer�   s        rN   Útest_centers_not_mutatedrO  I  sd   € ô —‘˜% e�Ó,€JÜ—~‘~ e°%�~Ó8Ðá	Ð(´ZÈÔ	J€BØ‡F�Fˆ:Ôä×"Ñ" 2×#6Ñ#6Ð8HÔIÐIÐIÐIrP   c                 óØ   — t        t        ¬«      j                  | «      }t        t        |j                  d¬«      j                  | «      }t	        |j                  |j                  «       y )N)r:   r5   r¹   )r   r:   rB   rE   r   )rœ   r  r  s      rN   Útest_kmeans_init_fitted_centersrQ  X  sS   € ô œJÔ
'×
+Ñ
+¨JÓ
7€CÜ
œJ¨S×-AÑ-AÈ!Ô
L×
PÑ
PØó€Cô �C×(Ñ(¨#×*>Ñ*>Õ?rP   c                 ó@  — t        j                  ddgddgddgddgg«      }t        d| ¬«      }d}t        j                  t
        |¬«      5  |j                  |«       t        |j                  «      t        t        d«      «      k(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nr   r5   é   r*  zmNumber of distinct clusters \(3\) found smaller than n_clusters \(4\). Possibly due to duplicate points in X.rÖ   r7   )
r@   Úasarrayr   rw   rÚ   r   rB   ÚsetrC   r¯   )ry   rG   r�   Úmsgs       rN   Ú1test_kmeans_warns_less_centers_than_unique_pointsrW  h  s’   € ä
�
‰
�Q˜�F˜Q ˜F Q¨ F¨Q°¨FÐ3Ó4€AÜ	˜1Ð+=Ô	>€Bð	Dð ô 
�‰Ô(°Ô	4ñ 0Ø
�‰ˆqŒ	ô �2—:‘:‹¤#¤e¨A£h£-Ò/Ð/Ñ/÷	0÷ 0ñ 0ús   Á>BÂBc                 ó0   — t        j                  | d¬«      S ©Nr   rä   )r@   Úsort)r&   s    rN   Ú_sort_centersr[  y  s   € Ü�7‰7�7 Ô#Ð#rP   c                 óX  — t         j                  j                  | «      j                  ddt        ¬«      }t        j
                  t        |d¬«      }t        t        dt        | ¬«      }t        |«      j                  t        |¬«      }t        j
                  |j                  |«      }t        |«      j                  |«      }t        |j                  |«       t        |j                  |j                  «       t        t!        |j"                  «      t!        |j"                  «      «       y )Nr5   rr   ro   r   rä   )r<   r;   r:   r(   r>   )r@   ru   rv   Úrandintr%   ÚrepeatrG   r   r&   r:   r   rB   rC   r   r   rD   r[  rE   )ry   r?   ÚX_repeatr�   Úkm_weightedÚrepeated_labelsÚkm_repeateds          rN   Útest_weighted_vs_repeatedrc  }  sã   € ô
 —I‘I×)Ñ)Ð*<Ó=×EÑEØ	ˆ1”9ð Fó €Mô �y‰yœ˜M°Ô2€Hä	Ü˜Q¬:ÐDVô
€Bô ˜“)—-‘-¤°�-Ó?€KÜ—i‘i × 3Ñ 3°]ÓC€OÜ˜“)—-‘- Ó)€Kä�{×*Ñ*¨OÔ<Ü�K×(Ñ(¨+×*>Ñ*>Ô?ÜÜ�k×2Ñ2Ó3Ü�k×2Ñ2Ó3õrP   c                 óD  — t        j                  t        «      } | t        |d¬«      }t	        |«      j                  |d ¬«      }t	        |«      j                  ||¬«      }t        |j                  |j                  «       t        |j                  |j                  «       y r  )
r@   r]   r%   r:   r   rB   r   rC   r   rE   )r¦   rœ   ry   r?   r�   Úkm_noneÚkm_oness          rN   Útest_unit_weights_vs_no_weightsrg  —  sv   € ô —G‘GœIÓ&€Má	œjÐ7IÐRSÔ	T€BÜ�B‹i�m‰m˜J°dˆmÓ;€GÜ�B‹i�m‰m˜J°mˆmÓD€Gä�w—‘¨¯©Ô8Ü�G×,Ñ,¨g×.FÑ.FÕGrP   c                 ó~  — t         j                  j                  |«      j                  t        ¬«      } | t
        |d¬«      }t        |«      j                  ||¬«      }t        |«      j                  |d|z  ¬«      }t        |j                  |j                  «       t        |j                  |j                  «       y )Nro   r5   r  r>   r4   )r@   ru   rv   rµ   r%   r:   r   rB   r   rC   r   rE   )r¦   rœ   ry   r?   r�   Úkm_origÚ	km_scaleds          rN   Útest_scaled_weightsrk  ª  s’   € ô —I‘I×)Ñ)Ð*<Ó=×EÑEÌ9ÐEÓU€Má	œjÐ7IÐRSÔ	T€BÜ�B‹i�m‰m˜J°mˆmÓD€GÜ�b“	—‘˜j¸¸mÑ8K�ÓL€Iä�w—‘¨	×(9Ñ(9Ô:Ü�G×,Ñ,¨i×.HÑ.HÕIrP   c                  óf   — t        dd¬«      j                  t        «      } | j                  dk(  sJ ‚y )Nr1   r5   )r=   r€   )r   rB   rG   rF   rû   s    rN   Ú test_kmeans_elkan_iter_attributerm  ½  s+   € ô 
˜'¨AÔ	.×	2Ñ	2´1Ó	5€BØ�:‰:˜Š?Ð‰?rP   c                 ó  —  | dgdgg«      }ddg}t        j                  dgdgg«      }t        d|d¬«      }|j                  ||¬«       t	        t        |j                  «      «      dk(  sJ ‚t        |j                  dgdgg«       y )	NrV   r5   gffffffþ?gš™™™™™¹?rY   r)   r¹   r>   )	r@   rA   r   rB   ÚlenrU  rC   r   rE   )r-   rG   r?   r<   r�   s        rN   Ú#test_kmeans_empty_cluster_relocatedrp  Ä  s†   € ñ 	�r�d˜Q˜C�[Ó!€AØ˜#�J€MÜ�8‰8�b�T˜B˜4�LÓ!€Dä	˜1 4°Ô	2€BØ‡F�Fˆ1˜M€FÔ*äŒs�2—:‘:‹Ó 1Ò$Ð$Ð$Ü�B×'Ñ'¨2¨$°°¨Õ5rP   c                 óÚ  — t         j                  j                  |«      }|j                  d¬«      }t	        «       j                  dd¬«      5   | t        |¬«      j                  |«      j                  }d d d «       t	        «       j                  dd¬«      5   | t        |¬«      j                  |«      j                  }d d d «       t        «       y # 1 sw Y   ŒaxY w# 1 sw Y   Œ"xY w)N)é2   rY   ro   r5   Úopenmp)Úlimitsr=  r*  r)   )
r@   ru   rv   ri   r   Úlimitr:   rB   rC   r   )r¦   ry   rz   rG   Úresult_1Úresult_2s         rN   Ú#test_result_equal_in_diff_n_threadsrx  Ó  sÉ   € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�
‰
˜ˆ
Ó!€Aä	#Ó	%×	+Ñ	+°1¸xÐ	+Ó	Hñ 
á¤Ð:LÔMß‰S�‹Vß‰Wð 	÷
ô 
$Ó	%×	+Ñ	+°1¸xÐ	+Ó	Hñ 
á¤Ð:LÔMß‰S�‹Vß‰Wð 	÷
ô �x Õ*÷
ð 
ú÷
ð 
ús   Á(CÂ(C!ÃCÃ!C*c                  ó¤   — t        j                  t        d¬«      5  t        dd¬«      j	                  t
        «       d d d «       y # 1 sw Y   y xY w)Nz9algorithm='elkan' doesn't make sense for a single clusterrÖ   r5   r1   )r:   r=   )rw   rÚ   rÛ   r   rB   rG   rÜ   rP   rN   Útest_warning_elkan_1_clusterrz  é  s@   € ä	�‰ÜØIô
ñ 7ô 	˜! wÔ/×3Ñ3´AÔ6÷	7÷ 7ñ 7úrÞ   c                 ó8  — t         j                  j                  |«      j                  d¬«      }|d d } | |«      }d„ } |||«      \  }}t	        dd||d¬«      j                  |«      }|j                  }	|j                  }
t        ||	«       t        ||
«       y )N)r#   rr   ro   rr   c                 óÊ   — |j                  «       }t        | |«      }t        |j                  d   «      D ]  }| ||k(     j	                  d¬«      ||<   Œ t        | |«      }||fS rY  )r‡   r   r¯   r†   rï   )rG   r<   Únew_centersrf   Úlabels        rN   Ú	py_kmeansz+test_k_means_1_iteration.<locals>.py_kmeansû  so   € Ø—i‘i“kˆÜ*¨1¨dÓ3ˆÜ˜4Ÿ:™: a™=Ó)ò 	AˆEØ!" 6¨U¡?Ñ!3×!8Ñ!8¸aÐ!8Ó!@ˆK˜Òð	Aä*¨1¨kÓ:ˆØ�{Ð"Ð"rP   r5   )r:   r;   r<   r=   r€   )
r@   ru   rv   rµ   r   rB   rC   rE   r   r   )r-   r/   ry   rG   rH   r  Ú	py_labelsÚ
py_centersÚ	cy_kmeansÚ	cy_labelsÚ
cy_centerss              rN   Útest_k_means_1_iterationr…  ò  s    € ô
 	�	‰	×ÑÐ0Ó1×9Ñ9¸xÐ9ÓH€AØ�R�a�5€LÙ�Q‹€Aò#ñ & a¨Ó6Ñ€IˆzäØ˜Q \¸TÈAôç	�cˆ!ƒfð ð ×!Ñ!€IØ×+Ñ+€Jä�y )Ô,Ü�J 
Õ+rP   ÚsquaredTFc                 óJ  — t         j                  j                  |«      }t        ddd|| ¬«      }|j	                  «       j                  d«      }|j                  d«      j                  | d¬«      }|d	z  j                  «       }||z
  d	z  j                  «       }|r|nt        j                  |«      }t        |||«      }	t        |j                  |j                  |||«      }
| t         j                  k(  rd
nd}t        |	|
|¬«       t        |	||¬«       t        |
||¬«       y )N)r5   r#   r4   Úcsr©ÚdensityÚformatr‰   r2   rV   r#   FrC  r)   rý   gH¯¼šò×z>rD  )r@   ru   rv   r   Útoarrayr\   rº   rH  rè   Úsqrtr
   r   r`   ra   rG  r   )r2   r†  ry   r‰   Úa_sparseÚa_denseÚbÚb_squared_normÚexpectedÚdistance_dense_denseÚdistance_sparse_denserE  s               rN   Útest_euclidean_distancer•    s	  € ô
 �)‰)×
Ñ
Ð 2Ó
3€CÜ#Ø˜# e°¸Eô€Hð ×ÑÓ ×(Ñ(¨Ó,€GØ�	‰	�#‹×Ñ˜e¨%ÐÓ0€AØ˜‘d—Z‘Z“\€Nà˜1‘ Ñ"×'Ñ'Ó)€HÙ"‰x¬¯©°Ó(9€Hä9¸'À1ÀgÓNÐÜ;Ø�‰�x×'Ñ'¨¨N¸GóÐð œBŸJ™JÒ&‰4¨D€DÜÐ(Ð*?ÀdÕKÜÐ(¨(¸Õ>ÜÐ)¨8¸$Ö?rP   c                 ó�  — t         j                  j                  |«      }t        ddd|| ¬«      }|j	                  «       }|j                  d«      j                  | d¬«      }|j                  dd	«      j                  | d¬«      }|j                  ddt         j                  ¬
«      }|||   z
  dz  j                  d¬«      }t        j                  ||z  «      }	t        ||||d¬«      }
t        ||||d¬«      }| t         j                  k(  rdnd}t        |
||¬«       t        |
|	|¬«       t        ||	|¬«       d}||k(  }||   ||   z
  dz  j                  d¬«      }t        j                  |||   z  «      }	t        ||||d|¬«      }
t        ||||d|¬«      }t        |
||¬«       t        |
|	|¬«       t        ||	|¬«       y )N)r#   rY   r4   rˆ  r‰  r#   FrC  rr   rY   )rp   r2   r)   r5   rä   )Ú	n_threadsrý   rs   rD  )r—  Úsingle_label)r@   ru   rv   r   rŒ  rº   rH  r]  r_   rè   r   r   rG  r   )r2   ry   r‰   ÚX_sparser'  r?   r&   rf   Ú	distancesr’  Úinertia_denseÚinertia_sparserE  r~  Úmasks                  rN   Útest_inertiarž  *  sÊ  € ô �)‰)×
Ñ
Ð 2Ó
3€CÜ#Ø˜3 u°#¸Uô€Hð ×ÑÓ €GØ—I‘I˜c“N×)Ñ)¨%°eÐ)Ó<€MØ�i‰i˜˜2Ó×%Ñ% e°%Ð%Ó8€GØ�[‰[˜ ¬B¯H©Hˆ[Ó5€Fà˜G F™OÑ+°Ñ1×6Ñ6¸AÐ6Ó>€IÜ�v‰v�i -Ñ/Ó0€Hä" 7¨M¸7ÀFÐVWÔX€MÜ$Ø�- ¨&¸Aô€Nð œBŸJ™JÒ&‰4¨D€DÜ�M >¸Õ=Ü�M 8°$Õ7Ü�N H°4Õ8ð €EØ�U‰?€DØ˜$‘- '¨%¡.Ñ0°QÑ6×;Ñ;ÀÐ;ÓC€IÜ�v‰v�i -°Ñ"5Ñ5Ó6€Hä"Ø� ¨¸1È5ô€Mô %Ø�- ¨&¸AÈEô€Nô �M >¸Õ=Ü�M 8°$Õ7Ü�N H°4Ö8rP   zKlass, default_n_initrY   r7   c                 óä   —  | dd¬«      }|j                  t        «       |j                  dk(  sJ ‚ | dd¬«      }|j                  t        «       | j                  dk(  r|j                  dk(  sJ ‚y y )Nr¸   r�   )r;   r<   r5   ru   r   rY   )rB   rG   r»   Ú__name__)ÚKlassÚdefault_n_initÚests      rN   Útest_n_init_autor¤  U  sd   € á
�v KÔ
0€CØ‡G�GŒA„JØ�;‰;˜!ÒÐÐá
�v HÔ
-€CØ‡G�GŒA„JØ %§¡°(Ò :ˆ3�;‰;˜"ÒÐAÐAÀÐrP   c                 óà   — t        j                  dgdgdgg«      }t        j                  g d¢«      } | dd¬«      j                  ||¬«       t        |t        j                  g d¢«      «       y )Nr5   r)   rS  )r4   gš™™™™™É?g333333Ó?r   r*  r>   )r@   rA   rB   r   )r¦   rG   r?   s      rN   Útest_sample_weight_unchangedr¦  `  sY   € ô 	�‰�1�#˜�s˜Q˜C�Ó!€AÜ—H‘Hš_Ó-€MÙ˜¨Ô+×/Ñ/°ÀÐ/ÔOä�}¤b§h¡hªÓ&?Õ@rP   zparam, matchr:   r5   z#n_samples.* should be >= n_clusterszIThe shape of the initial centers .* does not match the number of clustersc                 ó   — | d d S )Nr)   rÜ   ©ÚX_r¢   r(   s      rN   r£   r£   u  s   € °°B°Q°€ rP   r[   zUThe shape of the initial centers .* does not match the number of features of the datac                 ó   — | d d…d d…f   S )Nr[   r)   rÜ   r¨  s      rN   r£   r£     s   € °°B°Q°B¸¸¸°F±€ rP   c                 óÀ   —  | d¬«      }t        j                  t        |¬«      5   |j                  di |¤Žj	                  t
        «       d d d «       y # 1 sw Y   y xY w)Nr5   )r;   rÖ   rÜ   )rw   ÚraisesÚ
ValueErrorr  rB   rG   )r¦   Úparamr×   r�   s       rN   Útest_wrong_paramsr¯  j  sM   € ñ> 
˜!Ô	€BÜ	�‰”z¨Ô	/ñ &Øˆ�‰Ñ˜Ñ×"Ñ"¤1Ô%÷&÷ &ñ &ús   ¥&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 «       y # 1 sw Y   y xY w)NrÖ   )rw   r¬  r­  r	   rG   r:   )r®  r×   s     rN   Ú!test_kmeans_plusplus_wrong_paramsr²  Ž  s6   € ô 
�‰”z¨Ô	/ñ 0Üœœ:Ñ/¨Ò/÷0÷ 0ñ 0ús	   œ;»Ac                 ó6  — | j                  |«      }t        |t        |¬«      \  }}|j                  d   t        k(  sJ ‚|dk\  j	                  «       sJ ‚||j                  d   k  j	                  «       sJ ‚|j                  d   t        k(  sJ ‚|j                  d¬«      |j                  d¬«      k  j	                  «       sJ ‚|j                  d¬«      |j                  d¬«      k\  j	                  «       sJ ‚t        t        |   j                  |«      |«       y )Nrq   r   rä   )	rH  r	   r:   r†   ÚallrI  Úminr   rG   )rœ   r2   ry   r`   r&   ra   s         rN   Útest_kmeans_plusplus_outputr¶  �  s  € ð ×Ñ˜UÓ#€DÜ&ØŒjÐ'9ôÑ€GˆWð �=‰=˜ÑœzÒ)Ð)Ð)Ø�q‰L×ÑÔÐÐØ�t—z‘z !‘}Ñ$×)Ñ)Ô+Ð+Ð+ð �=‰=˜ÑœzÒ)Ð)Ð)Ø�K‰K˜QˆKÓ 4§8¡8° 8Ó#3Ñ3×8Ñ8Ô:Ð:Ð:Ø�K‰K˜QˆKÓ 4§8¡8° 8Ó#3Ñ3×8Ñ8Ô:Ð:Ð:ô
 ”A�g‘J×%Ñ% eÓ,¨gÕ6rP   ©r†  c                 ó\   — t        t        t        | ¬«      \  }}t        t        |   |«       y )N)r°  )r	   rG   r:   r   )r°  r&   ra   s      rN   Útest_kmeans_plusplus_normsr¹  º  s%   € ô '¤q¬*ÀoÔVÑ€GˆWä”A�g‘J Õ(rP   c                 óª   — t        t        t        | ¬«      \  }}t        j                  t        «      }t        |t        | ¬«      \  }}t        ||«       y )Nrq   )r	   rG   r:   r@   rÁ   r   )ry   Ú	centers_cr{   rÂ   rÃ   s        rN   Útest_kmeans_plusplus_dataorderr¼  Â  sH   € ä"¤1¤jÐ?QÔR�L€Iˆqä×!Ñ!¤!Ó$€Iä(Ø”:Ð,>ôÑ€O�Qô �I˜Õ/rP   c                  óH  — 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 ‚y )N)r5   r   r   r5   r)   r   r)   r5   r6   r7   )r   r)   r)   r   r5   r)   r5   r   )r5   r   r   r)   r)   r   r)   r5   )r@   rA   r_   r   )Úlabels1Úlabels2Úlabels3s      rN   Útest_is_same_clusteringrÁ  Ï  s~   € ä�h‰hÒ/´r·x±xÔ@€GÜ˜w¨°Ô3Ð3Ð3ô �h‰hÒ/´r·x±xÔ@€GÜ˜w¨°Ô3Ð3Ð3ô �h‰hÒ/´r·x±xÔ@€GÜ" 7¨G°QÔ7Ð7Ð7Ð7rP   Úkwargs)r<   r;   c                 ó¢   — t        j                  ddgddgddgddggt         j                  ¬«      }t        dddi| ¤Ž}|j	                  |«       y)	zZCheck that init works with numpy scalar strings.

    Non-regression test for #21964.
    r   r4   r5   r6   r:   r)   NrÜ   )r@   rT  r&  r   rB   )rÂ  rG   Ú
clusterings      rN   Ú-test_kmeans_with_array_like_or_np_scalar_initrÅ  ß  sO   € ô 	�
‰
�Q˜�F˜S !˜H s¨A h°°A°Ð7¼r¿z¹zÔJ€AäÑ/ 1Ð/¨Ñ/€Jà‡N�N�1ÕrP   zKlass, methodrB   r°   c                 ó  — | j                   j                  «       } | «       } t        ||«      t        «       |j                  j
                  d   }|j                  «       }t        t        |«      D �cg c]  }|› |› �‘Œ
 c}|«       yc c}w )z=Check `feature_names_out` for `KMeans` and `MiniBatchKMeans`.r   N)	r   ÚlowerÚgetattrrG   rE   r†   Úget_feature_names_outr   r¯   )r¡  ÚmethodÚ
class_namerM   r:   Ú	names_outr±   s          rN   Útest_feature_names_outrÍ  î  sx   € ð —‘×%Ñ%Ó'€JÙ‹W€FØ„GˆF�FÓœAÔØ×(Ñ(×.Ñ.¨qÑ1€Jà×,Ñ,Ó.€IÜ´E¸*Ó4EÖF¨q˜:˜, q cÒ*ÒFÈ	ÕRùÒFs   Á3B	Úcsr_containerc                 ó  — t        dddd¬«      \  }}| � | |«      }t        «       }|j                  |«      }t        |j                  «      |_        t        |j
                  «      |_        |j                  |«      }t        ||«       y)z_Check that predict does not change cluster centers.

    Non-regression test for gh-24253.
    ræ   rY   r   r  N)r   r   r  r   rE   rC   r  r   )rÎ  rG   r{   rM   Úy_pred1Úy_pred2s         rN   Ú,test_predict_does_not_change_cluster_centersrÒ  ý  sz   € ô  °¸BÈQÔO�D€A€qØÐ Ù˜!Óˆä‹X€FØ× Ñ  Ó#€Gä7¸×8OÑ8OÓP€FÔÜ.¨v¯~©~Ó>€F„Nà�n‰n˜QÓ€GÜ�w Õ(rP   c           
      óR  — t         j                  j                  |«      }t        ddd|¬«      \  }}t	        |d¬«      }t        «       }|j                  ||| |j                  |j                  d   ¬«      dt         j                  j                  |«      ¬	«      }|j                  ||| t        j                  |j                  d   «      dt         j                  j                  |«      ¬	«      }t        j                  t        «      5  t        ||«       d
d
d
«       y
# 1 sw Y   y
xY w)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æ   rY   r  Tr·  r   ro   rr   ©rG   r°  r<   r?   Ún_centroidsr(   N)r@   ru   rv   r   r   r   Ú_init_centroidsrµ   r†   r]   rw   r¬  rR   r   )	r<   ry   r‰   rG   r{   r°  rM   Úclusters_weightedÚclusterss	            rN   Útest_sample_weight_initrÙ    s	  € ô �)‰)×
Ñ
Ð 2Ó
3€CÜØ "¨bÐ?Qô�D€A€qô   ¨4Ô0€Oä‹X€FØ×.Ñ.Ø
Ø'ØØ—k‘k q§w¡w¨q¡z�kÓ2ØÜ—Y‘Y×*Ñ*Ð+=Ó>ð /ó Ðð ×%Ñ%Ø
Ø'ØÜ—g‘g˜aŸg™g a™jÓ)ØÜ—Y‘Y×*Ñ*Ð+=Ó>ð &ó €Hô 
�‰”~Ó	&ñ 5ÜÐ)¨8Ô4÷5÷ 5ñ 5ús   ÄDÄD&c           
      óÄ  — t         j                  j                  |«      }t        ddd|¬«      \  }}|j	                  |j
                  d   ¬«      }d|ddd…<   t        |d¬	«      }t        «       }|j                  ||| |d
t         j                  j                  |«      ¬«      }t        |ddd…   |«      }	t        j                  t        j                  |	d«      «      rJ ‚y)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#   rr   r  r   ro   Nr)   Tr·  rY   rÔ  )r@   ru   rv   r   rµ   r†   r   r   rÖ  r   rç   Úisclose)
r<   ry   r‰   rG   r{   r?   r°  rM   r×  Úds
             rN   Útest_sample_weight_zerorÝ  3  sÛ   € ô �)‰)×
Ñ
Ð 2Ó
3€CÜØ !¨QÐ=Oô�D€A€qð —K‘K Q§W¡W¨Q¡Z�KÓ0€MØ€M‘#�A�#ÑÜ ¨4Ô0€Oä‹X€FØ×.Ñ.Ø
Ø'ØØ#ØÜ—Y‘Y×*Ñ*Ð+=Ó>ð /ó Ðô 	˜A™c ˜c™FÐ$5Ó6€AÜ�v‰v”b—j‘j  AÓ&Ô'Ð'Ð'Ð'rP   c                 ó  — 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  |j                   ||«      «       ddd«       |j                  dk(  sJ ‚y# 1 sw Y   ŒxY w)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   r5   rr   )r:   r<   r=   zENumber of distinct clusters \(4\) found smaller than n_clusters \(5\)rÖ   N)r@   rA   r   rw   rÚ   r   rB   rF   )r=   r-   rG   r�   rV  s        rN   Útest_relocating_with_duplicatesrß  Q  sŠ   € ô 	�‰�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&Ð9Ó:€AÜ	˜1 1°	Ô	:€Bà
R€CÜ	�‰Ô(°Ô	4ñ  Ø
�‰‰|˜A‹Ô÷ ð �:‰:˜Š?Ð‰?÷ ð  ús   ÁBÂB)„Ú__doc__rÏ   rÉ   Úior   Únumpyr@   rw   Úthreadpoolctlr   Úsklearn.baser   Úsklearn.clusterr   r   r   r	   Úsklearn.cluster._k_means_commonr
   r   r   r   r   r   r   Úsklearn.cluster._kmeansr   r   Úsklearn.datasetsr   Úsklearn.exceptionsr   Úsklearn.metricsr   r   Úsklearn.metrics.clusterr   Úsklearn.metrics.pairwiser   Úsklearn.utils._testingr   r   r   Úsklearn.utils.extmathr   Úsklearn.utils.fixesr   r   Úsklearn.utils.parallelr   rA   r&   r%   r†   r:   r˜   rG   rš   ÚX_as_any_csrÚdata_containersro  Údata_containers_idsÚmarkÚparametrizerG  r&  rO   rS   rg   r~   r‚   r–   r›   r‡   r«   r²   r¾   rÆ   rÌ   rÔ   rÝ   rá   rë   rô   rö   rü   r  r  r
  r  r  r!  r#  r_   Úint64r(  r.  r3  r7  r;  Úskipifrç   rJ  rO  rQ  rW  r[  rc  rg  rk  rm  rp  rx  rz  r…  r•  rž  r¤  r¦  r¯  r²  r¶  r¹  r¼  rÁ  Ústr_rÅ  rÍ  rÒ  rÙ  rÝ  rß  )Ú	containers   0rN   ú<module>rú     sÂ  ðÙ ã 	Û 
Ý ã Û Ý )å ß MÓ M÷÷ ñ ÷ FÝ 'Ý 1ß IÝ 3Ý 8÷ñ õ
 ,ß DÝ =ð ˆ"�(‰(â!Ú!Ú!ðó€ð €	Ø Ÿ™Ñ €
ˆJÙØ °cÈô�€€;ð /=Ö= ‘	˜!•Ò=€Ø—8‘8�*˜~Ñ-€ñ ˆ<Ó˜AÒó /à
�?Ð	#ð ð ‡�×Ñ˜¨Ð>QÐÓRØ‡�×Ñ˜ '¨7Ð!3Ó4Ø‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ-ó <ó 5ó Sð-ð* ‡�×Ñ˜¨Ð>QÐÓRØ‡�×Ñ˜ '¨7Ð!3Ó4ñCó 5ó SðCð: ‡�×Ñ˜¨Ð>QÐÓRñ&7ó Sð&7ðR ‡�×Ñ˜¨(°GÐ)<Ó=Ø‡�×Ñ˜¨Ð>QÐÓRØ‡�×Ñ˜Ò 7Ó8ñKó 9ó Só >ðKð6 ‡�×Ñ˜ w°Ð&8Ó9ñ!ó :ð!ð$ ‡�×Ñ˜ ,Ó/ñ<2ó 0ð<2ò~ð ‡�×ÑØØ€Cˆ,ÑØð ó ð
 ‡�×ÑØ
Øˆ{˜GŸL™L›NÑ,UÐVÚ6ð ó ð
 ‡�×Ñ˜ v¨Ð&?Ó@ñó Aóóðð ‡�×ÑØ
Øˆ{˜GÑ%NÐOÚ6ð ó ñ
óð
ð  ‡�×ÑØàØñð ð		
ð 	ð
óð ‡�×Ñ˜ v¨Ð&?Ó@ñ-ó Aóð-ð  ‡�×Ñ˜ v¨Ð&?Ó@ñ3ó Að3ò$ ð ‡�×Ñ˜ w°Ð&8Ó9Ø‡�×Ñ˜  q 	Ó*ñLó +ó :ðLò2<ð ‡�×Ñ˜ v¨Ð&?Ó@ñIó AðIòOðB ‡�×ÑØØ€Cˆ,ÑØð ó ñ
+2óð
+2ò\ò&ð$ ‡�×ÑÐ2°\À7Ð4KÓLñLó MðLò6(ò2ð ‡�×Ñ˜ v¨Ð&?Ó@ñ	ó Að	ð ‡�×Ñ˜¨Ð>QÐÓRØ‡�×ÑØØˆgÐ˜ Ð)¨O¸TÐ+BÐCóð ‡�×Ñ˜ a¨ XÓ.ñ ,ó /ó	ó Sð ,ðF ‡�×Ñ˜ ,Ó/Ø‡�×Ñ˜ v¨Ð&?Ó@ñKó Aó 0ðKð$ ‡�×Ñ˜ ,Ó/Ø‡�×ÑØ
ˆX�{ GÐ,Ò2Tð ó ð ‡�×Ñ˜ v¨Ð&?Ó@ñ
6ó Aóó 0ð

6ð ‡�×Ñ˜¨Ð>QÐÓRØ‡�×Ñ˜ 2§8¡8¨R¯X©XÐ"6Ó7Ø‡�×Ñ˜ +¨yÐ!9Ó:Ø‡�×Ñ˜ v¨Ð&?Ó@ñ7ó Aó ;ó 8ó Sð7ð8 ‡�×Ñ˜ v¨Ð&?Ó@ñDó AðDð" ‡�×Ñ˜ v¨Ð&?Ó@ñó Aðò/ò ð ‡�×ÑØØ€Cˆ,ÑØð ó ð
 ‡�×Ñ˜ v¨Ð&?Ó@Ø‡�×ÑÙÑD‘Ó(ÔDÓDÐDð	ð ó ñ"?óó Aóð"?ðJ ‡�×Ñ˜ 2§8¡8¨R¯X©X°r·z±zÀ2Ç:Á:Ð"NÓOØ‡�×Ñ˜ v¨Ð&?Ó@ñ
Jó Aó Pð
Jð ‡�×ÑØØ€Cˆ,ÑØð ó ñ
@óð
@ò0ò"$òð4 ‡�×ÑØØ€Cˆ,ÑØð ó ð
 ‡�×Ñ˜ v¨Ð&?Ó@ñ
Hó Aóð
Hð ‡�×ÑØØ€Cˆ,ÑØð ó ð
 ‡�×Ñ˜ v¨Ð&?Ó@ñ
Jó Aóð
Jòð ‡�×Ñ˜¨Ð>QÐÓRñ6ó Sð6ð ‡�×Ñ˜ v¨Ð&?Ó@ñ+ó Að+ò*7ð ‡�×Ñ˜¨Ð>QÐÓRØ‡�×Ñ˜ '¨7Ð!3Ó4ñ,ó 5ó Sð,ð6 ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜ T¨5 MÓ2ñ@ó 3ó <ð@ð2 ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ'9ó <ð'9ðT ‡�×ÑÐ0°F¸B°<À/ÐSTÐAUÐ2VÓWñBó XðBð ‡�×Ñ˜ v¨Ð&?Ó@ñAó AðAð ‡�×Ñ˜ v¨Ð&?Ó@Ø‡�×ÑØà
˜	 A™Ð	&Ð(NÐOà�Q�r˜�UˆOð&ð	
ð Ñ7Ð8ð&ð	
ð �Q�r˜�r˜2˜A˜2�v‘YÐð2ð	
ð Ñ;Ð<ð2ð	
ð#óñ4&ó5ó Að6&ð ‡�×ÑØð   " 1 Ð&ð3ð	
ðó	ñ0ó	ð0ð
 ‡�×ÑØØ€Cˆ,Ñóð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ7ó <ó	ð
7ð0 ‡�×ÑÐ*©Y°qÀ$Ô-GÈÐ,NÓOñ)ó Pð)ò
0ò8ð  ‡�×ÑØ�˜˜Ÿ™ Ó,Ð-¸!¸Q¸À!ÀQÀÐ8HÐTUÑ/VÐWóñ	óð	ð ‡�×ÑØØˆe€_�¨Ð.°À-Ð0PÐQóñSó	ðSð ‡�×Ñ˜¨.¸D¸6Ñ*AÓBñ)ó Cð)ð& ‡�×Ñ˜ +¨xÐ!8Ó9ñ5ó :ð5ðB ‡�×Ñ˜ +¨xÐ!8Ó9ñ(ó :ð(ð: ‡�×Ñ˜¨Ð>QÐÓRØ‡�×Ñ˜ w°Ð&8Ó9ñó :ó SñùòC) >s   Ão7