Ë
    ÷Q(hr¾  ã                   ór  — 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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                  d2d3d4e3d5„ gg d6¢¬«      ej|                  j                  d7eeg«      d8„ «       «       «       ZIej|                  j                  d2d3d4e3d9„ gg d6¢¬«      d:„ «       ZJej|                  j                  d;d<d=d>„ d?fd@g«      ej|                  j                  d7eeg«      dA„ «       «       ZKej|                  j                  d7eeg«      dB„ «       ZLdC„ ZMej|                  j                  d,d d!g«      ej|                  j                  d)dDdg«      dE„ «       «       ZNdF„ ZOej|                  j                  d7eeg«      dG„ «       ZPdH„ ZQej|                  j                  d1e8ge:z   e=¬«      dI„ «       ZRdJ„ ZSdK„ ZTej|                  j                  dLdMdNg«      dO„ «       ZUdP„ ZVdQ„ ZWej|                  j                  d7eeg«      dR„ «       ZXe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„ «       «       «       ZYej|                  j                  d.e:«      ej|                  j                  d7eeg«      dV„ «       «       ZZe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\„ «       Z`d]„ Zad^„ Zbej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d7eeg«      d_„ «       «       Zcej|                  j                  d"ej¸                  ejº                  ej€                  ej‚                  g«      ej|                  j                  d7eeg«      d`„ «       «       Zdej|                  j                  d1e8ge:z   e=¬«      da„ «       Zedb„ Zfdc„ Zgdd„ Zhej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d7eeg«      de„ «       «       Ziej|                  j                  d1e8ge:z   e=¬«      ej|                  j                  d7eeg«      df„ «       «       Zjdg„ Zkej|                  j                  de;e=¬«      dh„ «       Zlej|                  j                  d7eeg«      di„ «       Zmdj„ Znej|                  j                  de;e=¬«      ej|                  j                  dd d!g«      dk„ «       «       Zoej|                  j                  d"ej€                  ej‚                  g«      ej|                  j                  dldmdng«      do„ «       «       Zpej|                  j                  d"ej€                  ej‚                  g«      dp„ «       Zqej|                  j                  dqedrfedsfg«      dt„ «       Zrej|                  j                  d7eeg«      du„ «       Zsej|                  j                  d7eeg«      ej|                  j                  dvdwe4dxz   idyfd2e8dd idzfd2d{„ idzfd2e8dd|…dd…f   id}fd2d~„ id}fg«      d„ «       «       Ztej|                  j                  dvd€e8dd id�fg«      d‚„ «       Zuej|                  j                  d1e8ge:z   «      ej|                  j                  d"ej‚                  ej€                  g«      dƒ„ «       «       Zvej|                  j                  d€ e-e8dm¬„«      dg«      d…„ «       Zwd†„ Zxd‡„ Zyej|                  j                  dˆd2 ejô                  d4«      iddgdxdxggdxd‰œ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)Ú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_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   ç      à?é   ©r1   )é   r4   r4   r6   ©r   r   r4   r4   g      Ø?g      À?g      ì?r(   ©Ú
n_clustersÚn_initÚinitÚ	algorithm©Úsample_weight)
ÚnpÚarrayr   Úfitr   Úlabels_r   Úinertia_Úcluster_centers_Ún_iter_)r,   r.   r1   ÚXr>   Úinit_centersÚexpected_labelsÚexpected_inertiaÚexpected_centersÚexpected_n_iterÚkmeanss              ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_k_means.pyÚtest_kmeans_resultsrN   ;   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   r3   r4   r6   r(   r8   g      Ð?r7   g      è?)r4   r4   r   r   r!   r   )r?   r@   r   rA   r   rC   rE   r   rB   rD   ÚAssertionError)	r,   r.   rF   rG   rL   rK   rI   rH   rJ   s	            rM   Útest_kmeans_relocated_clustersrR   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øÿÿÿéÿÿÿÿr4   é	   ç      #@é
   rU   r4   rX   )rT   éöÿÿÿrY   )g     €0ÀrY   rY   )g      $@r   r   r5   )é   r4   r4   iÜÿÿÿrW   )r?   r@   ÚreshapeÚonesÚzerosÚint32r   r   ÚdataÚindicesÚindptrr   r   )r,   rF   r>   Úcenters_oldÚcenters_newÚweight_in_clustersÚlabelss          rM   Útest_relocate_empty_clustersrf   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Õ6rO   Ú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 )Nrh   ©iˆ  rX   ©Úsize©r'   r   é   r4   )r9   r'   r:   rj   r0   )r<   r9   r'   r:   rj   ç�íµ ÷Æ°>)Úrel)r?   ÚrandomÚRandomStaterh   r   r   rA   r   rD   r   rB   rE   rC   ÚpytestÚapprox)	rg   r,   rj   Úglobal_random_seedÚrndrF   Ú_Úkm_lloydÚkm_elkans	            rM   Ú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ÑJrO   r<   c                 óÌ   — t         j                  j                  |«      }|j                  d¬«      }d}t	        | d|dd|¬«      j                  |«      }|j                  |k  sJ ‚y )Nrm   rn   i,  rq   r4   r   )r<   r9   r'   r:   rj   Úmax_iter)r?   rt   ru   rh   r   rA   rE   )r<   rx   ry   rF   r   Úkms         rM   Útest_kmeans_convergencer�   º   sl   € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�
‰
˜
ˆ
Ó#€AØ€Hä	ØØØ'ØØØô
÷ 
�cˆ!ƒfð ð �:‰:˜Ò Ð Ñ rO   Ú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 )Nrn   r   r5   rX   F)Úrandom_reassignr   )r?   rt   ru   r%   rh   ÚshapeÚcopyÚ
zeros_liker]   rF   r1   r\   r   r   r   r   )r‚   rx   Úrngrb   Úcenters_old_csrrc   Úcenters_new_csrÚweight_sumsÚweight_sums_csrr>   ÚX_mbÚX_mb_csrÚsample_weight_mbÚold_inertiare   Únew_inertiaÚold_inertia_csrÚ
labels_csrÚnew_inertia_csrs                      rM   Ú!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 Õ1rO   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   )rD   r…   r9   Ú
n_featuresrB   r?   Úuniquer   r   Útrue_labelsrC   )r€   r%   re   s      rM   Ú_check_fitted_modelrš     sv   € ð ×!Ñ!€GØ�=‰=œZ¬Ð4Ò4Ð4Ð4à�Z‰Z€FÜ�9‰9�VÓ×"Ñ" 1Ñ%¬Ò3Ð3Ð3ô ”O¤K°Ó8¸#Ô>Ø�;‰;˜ÒÐÑrO   Ú
input_datar;   rt   ú	k-means++c                 ó   — t         S ©N©r%   ©rF   Úkr'   s      rM   ú<lambda>r¢   "  ó   € Ä€ rO   )rt   rœ   ÚndarrayÚcallableÚ	Estimatorc                 ó€   — t        |t        «      rdnd} | |t        d|¬«      j                  |«      }t	        |«       y )NrX   r4   r#   ©r;   r9   r'   r:   )Ú
isinstanceÚstrr9   rA   rš   )r¦   r›   r;   r:   r€   s        rM   Útest_all_initr«     s=   € ô ˜d¤CÔ(‰R¨a€FÙ	Øœj°rÀ&ô
ç	�cˆ*ƒoð ô ˜ÕrO   c                 ó   — t         S rž   rŸ   r    s      rM   r¢   r¢   1  r£   rO   c                 ó²   — t        | t        «      rdnd}t        | t        d|¬«      }t	        d«      D ]  }|j                  t        «       Œ t        |«       y )NrX   r4   r   r¨   r"   )r©   rª   r   r9   ÚrangeÚpartial_fitrF   rš   )r;   r:   r€   Úis       rM   Ú&test_minibatch_kmeans_partial_fit_initr±   /  sR   € ô ˜d¤CÔ(‰R¨a€FÜ	Øœj°qÀô
€Bô �3‹Zò ˆà
�‰”qÕðô ˜ÕrO   zinit, expected_n_init)rœ   r4   )rt   Údefaultc                 óD   — |j                  || j                  d   f¬«      S )Nr4   rn   )Úuniformr…   )rF   r9   r'   s      rM   r¢   r¢   F  s'   € °×0DÑ0DØ  !§'¡'¨!¡*Ð-ð 1Eó 1€ rO   r²   )ú
array-liker4   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"   rX   rq   rµ   r²   r6   rX   Úauto©r9   r;   r:   N)r?   rt   Úrandnr   rA   Ú_n_init)r¦   r;   Úexpected_n_initÚn_sampler—   r9   rF   rL   s           rM   Ú,test_kmeans_init_auto_with_initial_centroidsr½   @  s�   € ð( (2Ñ$€Hˆj˜*Ü
�	‰	�‰˜ *Ó-€AØˆ|ÒÜ�y‰y�‰˜z¨:Ó6ˆØ˜)Ò#Ø(¬OÑ;™!Àˆá *°4ÀÔG×KÑKÈAÓN€FØ�>‰>˜_Ò,Ð,Ñ,rO   c                 ót  — t        j                  t        «      }t        j                  t        «      } | t        t        d|¬«      j                  t        «      } | t        |d|¬«      j                  |«      }t        |j                  |j                  «       t        |j                  |j                  «       y )Nr4   ©r9   r;   r:   r'   )
r?   ÚasfortranarrayrF   r%   r9   rA   r   rD   r   rB   )r¦   rx   Ú	X_fortranÚcenters_fortranÚkm_cÚkm_fs         rM   Útest_fortran_aligned_datarÅ   _  s”   € ô ×!Ñ!¤!Ó$€IÜ×'Ñ'¬Ó0€OáÜ¤G°AÐDVôç	�cŒ!ƒfð 	ñ ÜØØØ'ô	÷
 
�cˆ)ƒnð 	ô �D×)Ñ)¨4×+@Ñ+@ÔAÜ�t—|‘| T§\¡\Õ2rO   c                  óÐ   — t        t        dd¬«      } t        j                  }t	        «       t        _        	 | j                  t        «       |t        _        y # |t        _        w xY w)Nr#   r4   )r9   r'   Úverbose)r   r9   ÚsysÚstdoutr   rA   rF   )r€   Ú
old_stdouts     rM   Útest_minibatch_kmeans_verboserË   r  sA   € ä	¤J¸RÈÔ	K€BÜ—‘€JÜ“„C„Jð Ø
�‰ŒqŒ	àŒ�
ø�ZŒ�
ús   ·A ÁA%rk   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   rm   rn   r#   rt   r4   )r<   r9   r'   r;   r:   rj   rÇ   zInitialization completezIteration [0-9]+, inertiazstrict convergencez center shift .* within tolerance)r?   rt   ru   rh   r   r9   rA   Ú
readouterrÚreÚsearchÚout)r<   rj   ÚcapsysrF   Úcaptureds        rM   Ú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ÑKrO   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©ÚmatchrX   é   )Ú	init_sizer9   )rv   ÚwarnsÚRuntimeWarningr   rA   rF   © rO   rM   Ú'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Õ   rX   ©r;   r9   r:   )rv   rÙ   rÚ   r%   r9   rA   rF   )r¦   s    rM   Ú'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"   rq   )r$   r%   r'   r   r(   r×   rX   rt   )r9   Ú
batch_sizer'   r;   r4   ©ÚaxisrV   znum_non_zero_clusters=z is too smalléÈ   )r9   r'   r;   )r   r   rA   rD   ÚanyÚsumr®   r¯   )rx   Úzeroed_Xr™   r€   Únum_non_zero_clustersr°   s         rM   Ú 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Ñ$rO   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ã   r4   T)r„   Úreassignment_ratiogVçž¯Ò<)r?   Úemptyr9   r—   r®   rF   r™   Úmeanr\   r$   Ú
empty_liker   r   r]   rt   ru   r   )r›   rx   Úperfect_centersr°   r>   rc   Úscore_beforeÚscore_afters           rM   Ú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 Õ1rO   c                  óR   — t        ddt        dd¬«      j                  t        «       y )Nr"   rX   r#   T)r9   râ   rØ   r'   rÇ   )r   r$   rA   rF   rÛ   rO   rM   Ú&test_minibatch_with_many_reassignmentsrõ   ÿ  s&   € ô
 ØØÜØØô÷ 
�cŒ!…frO   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 )NrX   rq   r4   )r9   râ   r:   é   é   )r9   râ   r:   rØ   )r   rA   rF   Ú
_init_sizer$   ©r€   s    rM   Ú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Ò%Ð%Ñ%rO   ztol, max_no_improvement)ç-Cëâ6?N)r   rX   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 )Nr6   r   T)r%   r'   Úreturn_centersr×   rX   r4   )	r9   r;   râ   rj   r'   r   r:   rÇ   Úmax_no_improvementz Converged (small centers change)z*Converged (lack of improvement in inertia))r   r   rA   rE   rÍ   rÐ   )rÑ   rj   rÿ   rF   rz   r%   r€   rÒ   s           rM   Ú#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ð rO   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   r6   )r9   râ   r'   rX   )r9   râ   r'   rj   rÿ   r   )
rF   r…   r   rA   rE   r?   ÚceilÚn_steps_r©   Úint)râ   r$   r€   s      rM   Ú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Ô'Ð'Ñ'rO   c                  ó¨   — t         j                  «       } t        dt        d¬«      }|j	                  | «       t        |«       t        | t         «       y )NFr#   )Úcopy_xr9   r'   )rF   r†   r   r9   rA   rš   r   )Úmy_Xr€   s     rM   Útest_kmeans_copyxr	  T  s:   € ä�6‰6‹8€DÜ	�u¬À"Ô	E€BØ‡F�Fˆ4„LÜ˜Ôô �Dœ!ÕrO   c                 ó  — t         j                  j                  |«      j                  dd«      } | d|d¬«      }|j	                  |«      j                  |«      } | d|d¬«      }|j	                  |«      j                  |«      }||kD  sJ ‚y )Nr"   rX   r4   )r:   r'   r   )r?   rt   ru   r¹   rA   Úscore)r¦   rx   rF   Úkm1Ús1Úkm2Ús2s          rM   Útest_score_max_iterr  _  s   € ô 	�	‰	×ÑÐ0Ó1×7Ñ7¸¸RÓ@€Aá
˜1Ð+=ÈÔ
J€CØ	�‰�‹×	Ñ	˜!Ó	€BÙ
˜1Ð+=ÈÔ
K€CØ	�‰�‹×	Ñ	˜!Ó	€BØ�Š7€N‰7rO   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å   rX   ©r$   r—   r%   r'   r5   rt   )r9   r;   r:   r   r'   )r<   )
r   Ú
set_paramsrA   rB   Úpredictr   Úfit_predictrD   r?   Úarange)r¦   r<   r,   r   Úglobal_dtyperx   rF   rz   r€   re   Úpreds              rM   Útest_kmeans_predictr  l  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›]Õ+rO   c                 óz  — t         j                  j                  |«      j                  t        f«      } | t
        |d¬«      }|j                  t        |¬«        | t
        |d¬«      }|j                  ||¬«       t        |j                  |j                  «       t        |j                  |j                  «       y ©Nr4   ©r9   r'   r:   r=   )r?   rt   ru   Úrandom_sampler$   r9   rA   rF   r   rB   r   rD   )r¦   r‚   rx   r>   Úkm_denseÚ	km_sparses         rM   Ú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ÕJrO   )rt   rœ   r¤   c                 ó4  — t        |t        «      rdnd} | t        ||d¬«      }|j                  |«       t	        |j                  t        «      |j                  «       |j                  t        «       t	        |j                  |«      |j                  «       y )NrX   r4   r   r¿   )r©   rª   r9   rA   r   r  rF   rB   )r¦   r;   r‚   r:   r€   s        rM   Ú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 %Ó(¨"¯*©*Õ5rO   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   rX   é   rV   rU   r4   r(   rZ   r5   r¤   r¿   )râ   )r   r4   r4   r   r   r4   r!   )r?   r@   r   r  rA   rD   r1   Úfloat64r   r   rB   r   r¯   )
r¦   r,   r1   r;   rx   ÚX_denserF   r:   r€   rH   s
             rM   Ú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ð $rO   c                 óŽ  —  | t         |¬«      j                  t        «      }|j                  |j                  «      }t        |t        |j                  «      «       t        |j                  «       t        j                  t         «      «       |j                  t        «      }t        |t        t        |j                  «      «       y )N©r9   r'   )r9   rA   rF   Ú	transformrD   r   r   r   Údiagonalr?   r]   )r¦   rx   r€   ÚXts       rM   Ú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ÕCrO   c                 ó¶   —  | |d¬«      j                  t        «      j                  t        «      } | |d¬«      j                  t        «      }t	        ||«       y )Nr4   )r'   r:   )rA   rF   r*  Úfit_transformr   )r¦   rx   ÚX1ÚX2s       rM   Útest_fit_transformr2  í  sI   € ñ 
Ð 2¸1Ô	=×	AÑ	AÄ!Ó	D×	NÑ	NÌqÓ	Q€BÙ	Ð 2¸1Ô	=×	KÑ	KÌAÓ	N€BÜ�B˜ÕrO   c                 ó¢   — t         j                  }dD ]:  }t        t        d|| d¬«      j	                  t
        «      }|j                  |k  rŒ:J ‚ y )N)r4   rq   rX   rt   r4   )r9   r;   r:   r'   r   )r?   Úinfr   r9   rA   rF   rC   )rx   Úprevious_inertiar:   r€   s       rM   Útest_n_initr6  õ  sY   € ä—v‘vÐØò 
/ˆô Ü!ØØØ+Øô
÷ ‰#Œa‹&ð 	ð �{‰{Ð.Ó.Ð.Ð.ñ
/rO   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)r9   r>   r'   r   r!   r   )
r   rF   r9   r…   r—   r?   r˜   r   r   r™   )rx   Úcluster_centersre   Úinertias       rM   Útest_k_means_functionr:    sy   € ä'.Ü	”j°ÐCUô(Ñ$€O�V˜Wð × Ñ ¤Z´Ð$<Ò<Ð<Ð<Ü�9‰9�VÓ×"Ñ" 1Ñ%¬Ò3Ð3Ð3ô ”O¤K°Ó8¸#Ô>Ø�SŠ=Ð‰=rO   c                 óæ  —  | 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 ‚ t        |t         j                     |t         j                     d¬«       t        |t         j                     |t         j                     |t         j                     j                  «       dz  ¬	«       t        |t         j                     |t         j                     |t         j                     j                  «       dz  ¬	«       t        |t         j                     |t         j                     «       y )
Nr4   )r:   r'   F©r†   r   r6   rü   ©Úrtol)Úatol)r?   r%  Úfloat32ÚastyperA   rC   r*  rD   rB   r1   r   r¯   r   Úmaxr   )
r¦   r›   rx   r€   r9  r,  r%   re   r1   rF   s
             rM   Útest_float_precisionrC    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ô& �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´"·*±*Ñ+=Õ>rO   c                 óä   — t         j                  |d¬«      }t        j                  |d¬«      } | |t        d¬«      }|j	                  |«       t        j                  |j                  |«      rJ ‚y )NFr<  r4   rß   )rF   rA  r%   r9   rA   r?   Úmay_share_memoryrD   )r¦   r1   Ú
X_new_typeÚcenters_new_typer€   s        rM   Útest_centers_not_mutatedrH  =  sd   € ô —‘˜% e�Ó,€JÜ—~‘~ e°%�~Ó8Ðá	Ð(´ZÈÔ	J€BØ‡F�Fˆ:Ôä×"Ñ" 2×#6Ñ#6Ð8HÔIÐIÐIÐIrO   c                 óØ   — t        t        ¬«      j                  | «      }t        t        |j                  d¬«      j                  | «      }t	        |j                  |j                  «       y )N)r9   r4   r¸   )r   r9   rA   rD   r   )r›   r  r  s      rM   Útest_kmeans_init_fitted_centersrJ  L  sS   € ô œJÔ
'×
+Ñ
+¨JÓ
7€CÜ
œJ¨S×-AÑ-AÈ!Ô
L×
PÑ
PØó€Cô �C×(Ñ(¨#×*>Ñ*>Õ?rO   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   r4   é   r)  zmNumber of distinct clusters \(3\) found smaller than n_clusters \(4\). Possibly due to duplicate points in X.rÕ   r6   )
r?   Úasarrayr   rv   rÙ   r   rA   ÚsetrB   r®   )rx   rF   r€   Úmsgs       rM   Ú1test_kmeans_warns_less_centers_than_unique_pointsrP  \  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?   ÚsortrŸ   s    rM   Ú_sort_centersrT  m  s   € Ü�7‰7�7 Ô#Ð#rO   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 )Nr4   rq   rn   r   rã   )r;   r:   r9   r'   r=   )r?   rt   ru   Úrandintr$   ÚrepeatrF   r   r%   r9   r   rA   rB   r   r   rC   rT  rD   )rx   r>   ÚX_repeatr€   Úkm_weightedÚrepeated_labelsÚkm_repeateds          rM   Útest_weighted_vs_repeatedr\  q  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õrO   c                 óD  — t        j                  t        «      } | t        |d¬«      }t	        |«      j                  |d ¬«      }t	        |«      j                  ||¬«      }t        |j                  |j                  «       t        |j                  |j                  «       y r  )
r?   r\   r$   r9   r   rA   r   rB   r   rD   )r¦   r›   rx   r>   r€   Úkm_noneÚkm_oness          rM   Útest_unit_weights_vs_no_weightsr`  ‹  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ÕGrO   c                 ó~  — t         j                  j                  |«      j                  t        ¬«      } | t
        |d¬«      }t        |«      j                  ||¬«      }t        |«      j                  |d|z  ¬«      }t        |j                  |j                  «       t        |j                  |j                  «       y )Nrn   r4   r  r=   r3   )r?   rt   ru   r´   r$   r9   r   rA   r   rB   r   rD   )r¦   r›   rx   r>   r€   Úkm_origÚ	km_scaleds          rM   Útest_scaled_weightsrd  ž  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ÕIrO   c                  óf   — t        dd¬«      j                  t        «      } | j                  dk(  sJ ‚y )Nr0   r4   )r<   r   )r   rA   rF   rE   rú   s    rM   Ú test_kmeans_elkan_iter_attributerf  ±  s+   € ô 
˜'¨AÔ	.×	2Ñ	2´1Ó	5€BØ�:‰:˜Š?Ð‰?rO   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 )	NrU   r4   gffffffþ?gš™™™™™¹?rX   r(   r¸   r=   )	r?   r@   r   rA   ÚlenrN  rB   r   rD   )r,   rF   r>   r;   r€   s        rM   Ú#test_kmeans_empty_cluster_relocatedri  ¸  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¨$°°¨Õ5rO   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   rX   rn   r4   Úopenmp)ÚlimitsÚuser_apir)  r(   )
r?   rt   ru   rh   r   Úlimitr9   rA   rB   r   )r¦   rx   ry   rF   Úresult_1Úresult_2s         rM   Ú#test_result_equal_in_diff_n_threadsrr  Ç  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Õ   r4   r0   )r9   r<   )rv   rÙ   rÚ   r   rA   rF   rÛ   rO   rM   Útest_warning_elkan_1_clusterrt  Ý  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"   rq   rn   rq   c                 óÊ   — |j                  «       }t        | |«      }t        |j                  d   «      D ]  }| ||k(     j	                  d¬«      ||<   Œ t        | |«      }||fS rR  )r†   r   r®   r…   rî   )rF   r;   Únew_centersre   Úlabels        rM   Ú	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Ó:ˆØ�{Ð"Ð"rO   r4   )r9   r:   r;   r<   r   )
r?   rt   ru   r´   r   rA   rB   rD   r   r   )r,   r.   rx   rF   rG   ry  Ú	py_labelsÚ
py_centersÚ	cy_kmeansÚ	cy_labelsÚ
cy_centerss              rM   Ú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 
Õ+rO   ÚsquaredTFc                 ó`  — t         j                  j                  |«      }t        j                  d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 )Nr4   r"   r3   Úcsr©ÚdensityÚformatr'   r1   rU   Fr<  r(   rü   gH¯¼šò×z>r=  )r?   rt   ru   ÚspÚtoarrayr[   r¹   rA  rç   Úsqrtr
   r   r_   r`   r@  r   )r1   r€  rx   rˆ   Úa_sparseÚa_denseÚbÚb_squared_normÚexpectedÚdistance_dense_denseÚdistance_sparse_denser>  s               rM   Útest_euclidean_distancer�    s  € ô
 �)‰)×
Ñ
Ð 2Ó
3€CÜ�y‰yØ	ˆ3˜ E¸À5ô€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¸$Ö?rO   c                 ó¦  — t         j                  j                  |«      }t        j                  d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 )Nr"   rX   r3   r‚  rƒ  Fr<  rq   )ro   r1   r(   r4   rã   )Ú	n_threadsrü   rr   r=  )r’  Úsingle_label)r?   rt   ru   r†  r‡  r¹   rA  rV  r^   rç   r   r   r@  r   )r1   rx   rˆ   ÚX_sparser&  r>   r%   re   Ú	distancesr�  Úinertia_denseÚinertia_sparser>  rx  Úmasks                  rM   Útest_inertiar™    sÐ  € ô �)‰)×
Ñ
Ð 2Ó
3€CÜ�y‰yØˆR˜ U¸ÀEô€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Ö8rO   zKlass, default_n_initrX   r6   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;   r4   rt   r   rX   )rA   rF   rº   Ú__name__)ÚKlassÚdefault_n_initÚests      rM   Útest_n_init_autorŸ  I  sd   € á
�v KÔ
0€CØ‡G�GŒA„JØ�;‰;˜!ÒÐÐá
�v HÔ
-€CØ‡G�GŒA„JØ %§¡°(Ò :ˆ3�;‰;˜"ÒÐAÐAÀÐrO   c                 óà   — t        j                  dgdgdgg«      }t        j                  g d¢«      } | dd¬«      j                  ||¬«       t        |t        j                  g d¢«      «       y )Nr4   r(   rL  )r3   gš™™™™™É?g333333Ó?r   r)  r=   )r?   r@   rA   r   )r¦   rF   r>   s      rM   Útest_sample_weight_unchangedr¡  T  sY   € ô 	�‰�1�#˜�s˜Q˜C�Ó!€AÜ—H‘Hš_Ó-€MÙ˜¨Ô+×/Ñ/°ÀÐ/ÔOä�}¤b§h¡hªÓ&?Õ@rO   zparam, matchr9   r4   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      rM   r¢   r¢   i  s   € °°B°Q°€ rO   rZ   zUThe shape of the initial centers .* does not match the number of features of the datac                 ó   — | d d…d d…f   S )NrZ   r(   rÛ   r£  s      rM   r¢   r¢   s  s   € °°B°Q°B¸¸¸°F±€ rO   c                 óÀ   —  | d¬«      }t        j                  t        |¬«      5   |j                  di |¤Žj	                  t
        «       d d d «       y # 1 sw Y   y xY w)Nr4   )r:   rÕ   rÛ   )rv   ÚraisesÚ
ValueErrorr  rA   rF   )r¦   ÚparamrÖ   r€   s       rM   Útest_wrong_paramsrª  ^  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Õ   )rv   r§  r¨  r	   rF   r9   )r©  rÖ   s     rM   Ú!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 )Nrp   r   rã   )	rA  r	   r9   r…   ÚallrB  Úminr   rF   )r›   r1   rx   r_   r%   r`   s         rM   Ú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Õ6rO   ©r€  c                 ó\   — t        t        t        | ¬«      \  }}t        t        |   |«       y )N)r«  )r	   rF   r9   r   )r«  r%   r`   s      rM   Útest_kmeans_plusplus_normsr´  ®  s%   € ô '¤q¬*ÀoÔVÑ€GˆWä”A�g‘J Õ(rO   c                 óª   — t        t        t        | ¬«      \  }}t        j                  t        «      }t        |t        | ¬«      \  }}t        ||«       y )Nrp   )r	   rF   r9   r?   rÀ   r   )rx   Ú	centers_crz   rÁ   rÂ   s        rM   Útest_kmeans_plusplus_dataorderr·  ¶  sH   € ä"¤1¤jÐ?QÔR�L€Iˆqä×!Ñ!¤!Ó$€Iä(Ø”:Ð,>ôÑ€O�Qô �I˜Õ/rO   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)r4   r   r   r4   r(   r   r(   r4   r5   r6   )r   r(   r(   r   r4   r(   r4   r   )r4   r   r   r(   r(   r   r(   r4   )r?   r@   r^   r   )Úlabels1Úlabels2Úlabels3s      rM   Ú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Ð7rO   Ú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   r3   r4   r5   r9   r(   NrÛ   )r?   rM  r%  r   rA   )r½  rF   Ú
clusterings      rM   Ú-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ÕrO   zKlass, methodrA   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ÚgetattrrF   rD   r…   Úget_feature_names_outr   r®   )rœ  ÚmethodÚ
class_namerL   r9   Ú	names_outr°   s          rM   Ú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å   rX   r   r  N)r   r   r  r   rD   rB   r  r   )rÉ  rF   rz   rL   Úy_pred1Úy_pred2s         rM   Ú,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 Õ(rO   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å   rX   r  Tr²  r   rn   rq   ©rF   r«  r;   r>   Ún_centroidsr'   N)r?   rt   ru   r   r   r   Ú_init_centroidsr´   r…   r\   rv   r§  rQ   r   )	r;   rx   rˆ   rF   rz   r«  rL   Úclusters_weightedÚclusterss	            rM   Ú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"   rq   r  r   rn   Nr(   Tr²  rX   rÏ  )r?   rt   ru   r   r´   r…   r   r   rÑ  r   ræ   Úisclose)
r;   rx   rˆ   rF   rz   r>   r«  rL   rÒ  Úds
             rM   Útest_sample_weight_zerorØ  '  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Ó&Ô'Ð'Ð'Ð'rO   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   r4   rq   )r9   r;   r<   zENumber of distinct clusters \(4\) found smaller than n_clusters \(5\)rÕ   N)r?   r@   r   rv   rÙ   r   rA   rE   )r<   r,   rF   r€   rO  s        rM   Útest_relocating_with_duplicatesrÚ  E  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?   rv   Ú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   r@   r%   r$   r…   r9   r—   rF   r™   ÚX_as_any_csrÚdata_containersrh  Údata_containers_idsÚmarkÚparametrizer@  r%  rN   rR   rf   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-  r2  r6  r:  rC  rH  rJ  rP  rT  r\  r`  rd  rf  ri  rr  rt  r  r�  r™  rŸ  r¡  rª  r­  r±  r´  r·  r¼  Ústr_rÀ  rÈ  rÍ  rÔ  rØ  rÚ  )Ú	containers   0rM   ú<module>rô     s‡  ðÙ ã 	Û 
Ý ã Û Ý å ß MÓ M÷÷ ñ ÷ FÝ 'Ý 1ß IÝ 3Ý 8÷ñ õ
 ,Ý .Ý =ð ˆ"�(‰(â!Ú!Ú!ðó€ð €	Ø Ÿ™Ñ €
ˆ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Ñ%GÐHÚ6ð ó ð
 ‡�×Ñ˜ v¨Ð&?Ó@ñó Aóóðð ‡�×ÑØ
Øˆ{˜GÑ%GÐHÚ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¨Ð&?Ó@ñ!?ó Aóð!?ðH ‡�×Ñ˜ 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ñùòk( >s   Ãn4