Ë
    ÷Q(hv}  ã            	       ó  — d Z ddlZddlZddlm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 ddlmZmZmZmZ dd	l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&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 d„ Z8d„ Z9d„ Z:d„ Z;d„ Z<e	jz                  j}                  dddg«      e	jz                  j}                  dddg«      e	jz                  j}                  dg d ¢«      d!„ «       «       «       Z?e	jz                  j}                  d"e7«      d#„ «       Z@d$„ ZAd%„ ZBd&„ ZCd'„ ZDd(„ ZEd)„ ZFe	jz                  j}                  d*e+«      d+„ «       ZGd,„ ZHd-„ ZId.„ ZJd/„ ZKd0„ ZLd1„ ZMd2„ ZNd3„ ZOd4„ ZPd5„ ZQd6„ ZRe	jz                  j}                  dg d7¢«      d8„ «       ZSd9„ ZTd:„ ZUe	jz                  j}                  dg d7¢«      e	jz                  j}                  d;d<d=dgfd>d=dgfd?ddgfg«      d@„ «       «       ZVdA„ ZWdB„ ZXdC„ ZYy)Dz=
Several basic tests for hierarchical clustering procedures

é    N)Úpartial)Úmkdtemp)Ú	hierarchy)Úconnected_components)ÚAgglomerativeClusteringÚFeatureAgglomerationÚ	ward_tree)Ú_TREE_BUILDERSÚ_fix_connectivityÚ_hc_cutÚlinkage_tree)Úaverage_mergeÚ	max_mergeÚmst_linkage_core)Úmake_circlesÚ
make_moons)Úgrid_to_graph)ÚDistanceMetric)Úadjusted_rand_scoreÚnormalized_mutual_info_score)ÚPAIRED_DISTANCESÚcosine_distancesÚmanhattan_distancesÚpairwise_distances)ÚMETRICS_DEFAULT_PARAMS)Úkneighbors_graph)ÚIntFloatDict)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚcreate_memmap_backed_dataÚignore_warnings)ÚLIL_CONTAINERSc                  óp  — t         j                  j                  d«      } | j                  d¬«      }t	        j
                  t        «      5  t        |d¬«       d d d «       t	        j
                  t        «      5  t        |t        j                  d«      ¬«       d d d «       t        «       j                  |«       t        |«      }t        |d¬	«      }t        |d
   t        |d¬	«      d
   «       t        |t        ¬	«      }t        |d
   t        |d¬	«      d
   «       y # 1 sw Y   ŒÈxY w# 1 sw Y   Œ’xY w)Né*   )é   r&   ©ÚsizeÚfoo)Úlinkage©é   r,   ©ÚconnectivityÚprecomputed©Úaffinityr   ÚcosineÚ	manhattan)ÚnpÚrandomÚRandomStateÚnormalÚpytestÚraisesÚ
ValueErrorr   Úonesr   Úfitr   r    r   )ÚrngÚXÚdisÚress       úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_hierarchical.pyÚtest_linkage_miscrB   6   sô   € ä
�)‰)×
Ñ
 Ó
#€CØ�
‰
˜ˆ
Ó€Aä	�‰”zÓ	"ñ 'Ü�Q Õ&÷'ô 
�‰”zÓ	"ñ 6Ü�Q¤R§W¡W¨V£_Õ5÷6ô Ó×Ñ˜qÔ!ô ˜1Ó
€Cä
�s ]Ô
3€CÜ�s˜1‘vœ|¨A¸ÔAÀ!ÑDÔEô �qÔ#6Ô
7€CÜ�s˜1‘vœ|¨A¸ÔDÀQÑGÕH÷#'ð 'ú÷6ð 6ús   ÁD Á:!D,Ä D)Ä,D5c                  óÂ  — t         j                  j                  d«      } t        j                  ddgt        ¬«      }d|dd…dd…f<   | j                  dd«      }t        |j                  Ž }t        j                  «       D ]Å  } ||j                  |¬«      \  }}}}d	|j                  d
   z  d
z
  }	t        |«      |z   |	k(  sJ ‚t        j                  t        «      5   ||j                  t        j                  d«      ¬«       d d d «       t        j                  t        «      5   ||j                  d d |¬«       d d d «       ŒÇ y # 1 sw Y   ŒExY w# 1 sw Y   ŒÞxY w)Nr   é
   ©Údtyper,   é   é2   éd   r-   é   é   r+   )r4   r5   r6   r;   ÚboolÚrandnr   Úshaper
   ÚvaluesÚTÚlenr8   r9   r:   )
r=   Úmaskr>   r.   Útree_builderÚchildrenÚn_componentsÚn_leavesÚparentÚn_nodess
             rA   Útest_structured_linkage_treerY   O   s5  € ä
�)‰)×
Ñ
 Ó
"€CÜ�7‰7�B˜�8¤4Ô(€Dà€Dˆˆ1ˆˆa�ˆcˆ�NØ�	‰	�"�cÓ€AÜ  $§*¡*Ð-€LÜ&×-Ñ-Ó/ò =ˆÙ3?Ø�C‰C˜lô4
Ñ0ˆ�, ¨&ð �a—g‘g˜a‘j‘. 1Ñ$ˆÜ�8‹}˜xÑ'¨7Ò2Ð2Ð2ô �]‰]œ:Ó&ñ 	<Ù˜Ÿ™¬2¯7©7°6«?Õ;÷	<ô �]‰]œ:Ó&ñ 	=Ù˜Ÿ™˜R˜a˜¨|Õ<÷	=ð 	=ñ=÷	<ð 	<ú÷	=ð 	=ús   Ã(E	Ä&EÅ	E	ÅE	c            	      ó  — t         j                  j                  d«      } | j                  dd«      }||d   fD ]{  }t	        «       5  t        j                  t        «      5  t        |j                  d¬«      \  }}}}d d d «       d d d «       d|j                  d   z  dz
  }t        «      z   |k(  rŒ{J ‚ t        j                  «       D ]„  }||d   fD ]x  }t	        «       5  t        j                  t        «      5   ||j                  d¬«      \  }}}}d d d «       d d d «       d|j                  d   z  dz
  }t        «      z   |k(  rŒxJ ‚ Œ† y # 1 sw Y   Œ×xY w# 1 sw Y   ŒÛxY w# 1 sw Y   ŒVxY w# 1 sw Y   ŒZxY w)Nr   rH   rI   rD   )Ú
n_clustersrJ   rK   )r4   r5   r6   rM   r"   r8   ÚwarnsÚUserWarningr	   rP   rN   rQ   r
   rO   )r=   r>   Úthis_XrT   rX   rV   rW   rS   s           rA   Útest_unstructured_linkage_treer_   f   s„  € ä
�)‰)×
Ñ
 Ó
"€CØ�	‰	�"�cÓ€AØ�a˜‘d�)ò 3ˆô Óñ 	YÜ—‘œkÓ*ñ YÜ6?ÀÇÁÐUWÔ6XÑ3�˜' 8¨V÷Y÷	Yð �a—g‘g˜a‘j‘. 1Ñ$ˆÜ�8‹}˜xÑ'¨7Ó2Ð2Ð2ð3ô '×-Ñ-Ó/ò 7ˆØ˜!˜A™$�iò 	7ˆFÜ Ó"ñ Ü—\‘\¤+Ó.ñ Ù:FØŸ™¨Rô;Ñ7�H˜g x°÷÷ð
 ˜!Ÿ'™' !™*‘n qÑ(ˆGÜ�x“= 8Ñ+¨wÓ6Ð6Ð6ñ	7ñ7÷Yð Yú÷	Yð 	Yú÷ð ú÷ð úsH   ÁEÁ EÁ=EÃ"E7Ã<E+	ÄE7ÅEÅEÅE(	Å+E4Å0E7Å7F c                  óx  — t         j                  j                  d«      } t        j                  ddgt        ¬«      }| j                  dd«      }t        |j                  Ž }t        j                  «       D ]C  } ||j                  |¬«      \  }}}}d|j                  d   z  dz
  }t        |«      |z   |k(  rŒCJ ‚ y )	Nr   rD   rE   rH   rI   r-   rJ   rK   )r4   r5   r6   r;   rL   rM   r   rN   r
   rO   rP   rQ   )	r=   rR   r>   r.   Úlinkage_funcrT   rX   rV   rW   s	            rA   Útest_height_linkage_treerb   ~   s«   € ä
�)‰)×
Ñ
 Ó
"€CÜ�7‰7�B˜�8¤4Ô(€DØ�	‰	�"�cÓ€AÜ  $§*¡*Ð-€LÜ&×-Ñ-Ó/ò 3ˆÙ.:Ø�C‰C˜lô/
Ñ+ˆ�'˜8 Vð �a—g‘g˜a‘j‘. 1Ñ$ˆÜ�8‹}˜xÑ'¨7Ó2Ð2Ð2ñ3ó    c                  ó¸   — t        j                  ddgddgg«      } d}t        j                  t        |¬«      5  t        | d¬«       d d d «       y # 1 sw Y   y xY w)Nr   rK   z;Cosine affinity cannot be used when X contains zero vectors©Úmatchr2   r0   )r4   Úarrayr8   r9   r:   r   )r>   Úmsgs     rA   Útest_zero_cosine_linkage_treeri   Œ   sQ   € ô 	�‰�1�a�&˜1˜a˜&Ð!Ó"€AØ
G€CÜ	�‰”z¨Ô	-ñ +Ü�Q Õ*÷+÷ +ñ +ús   ¹AÁAzn_clusters, distance_threshold)Nç      à?)rD   NÚcompute_distancesTFr*   ©ÚwardÚcompleteÚaverageÚsinglec                 óÆ  — t         j                  j                  d«      }t        j                  ddgt        ¬«      }d}|j                  |d«      }t        |j                  Ž }t        | ||||¬«      }	|	j                  |«       |s|�Lt        |	d«      sJ ‚|	j                  j                  d   }
|
dz   }|	j                  j                  |dz
  fk(  sJ ‚y t        |	d«      rJ ‚y )	Nr   rD   rE   rI   rH   )r[   r.   r*   Údistance_thresholdrk   Ú
distances_rK   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   ÚhasattrÚ	children_rs   )r[   rk   rr   r*   r=   rR   Ú	n_samplesr>   r.   Ú
clusteringÚ
n_childrenrX   s               rA   Ú'test_agglomerative_clustering_distancesry   •   sá   € ô �)‰)×
Ñ
 Ó
"€CÜ�7‰7�B˜�8¤4Ô(€DØ€IØ�	‰	�)˜RÓ €AÜ  $§*¡*Ð-€Lä(ØØ!ØØ-Ø+ô€Jð ‡N�N�1ÔÙÐ/Ð;Ü�z <Ô0Ð0Ð0Ø×)Ñ)×/Ñ/°Ñ2ˆ
Ø˜q‘.ˆØ×$Ñ$×*Ñ*¨w¸©{¨nÒ<Ð<Ñ<ä˜: |Ô4Ð4Ð4Ð4rc   Úlil_containerc           
      óþ  — t         j                  j                  | «      }t        j                  ddgt        ¬«      }d}|j                  |d«      }t        |j                  Ž }dD �]�  }t        d||¬«      }|j                  |«       	 t        «       }	t        d||	|¬«      }|j                  |«       |j                  }
t        j                  t        j                  |
«      «      dk(  sJ ‚	 t        j                  |	«       t        d||¬«      }d|_        |j                  |«       t#        t%        |j                  |
«      d	«       d |_        |j                  |«       t        j                  t        j                  |j                  «      «      dk(  sJ ‚t        d ||j)                  «       d d…d d…f   «      |¬«      }t+        j,                  t.        «      5  |j                  |«       d d d «       �Œ’ t        d|j)                  «       d
d¬«      }t+        j,                  t.        «      5  |j                  |«       d d d «       t1        j2                  «       D ]�  }t        dt        j                  ||f«      |d¬«      }|j                  |«       t        dd |d¬«      }|j                  |«       t#        t%        |j                  |j                  «      d	«       Œƒ t        d|d¬«      }|j                  |«       t5        |«      }t        d|dd¬«      }|j                  |«       t7        |j                  |j                  «       y # t        j                  	«       w xY w# 1 sw Y   �Œ
xY w# 1 sw Y   �Œ4xY w)NrD   rE   rI   rH   rl   ©r[   r.   r*   )r[   r.   Úmemoryr*   FrK   r3   rm   )r[   r.   Úmetricr*   rn   r/   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r   Úlabels_r(   ÚuniqueÚshutilÚrmtreeÚcompute_full_treer   r   r.   Útoarrayr8   r9   r:   r   Úkeysr   r    )Úglobal_random_seedrz   r=   rR   rv   r>   r.   r*   rw   ÚtempdirÚlabelsr~   Úclustering2ÚX_dists                 rA   Útest_agglomerative_clusteringr‹   ´   s  € ô �)‰)×
Ñ
Ð 2Ó
3€CÜ�7‰7�B˜�8¤4Ô(€DØ€IØ�	‰	�)˜RÓ €AÜ  $§*¡*Ð-€LØ<ó &ˆÜ,Ø¨¸gô
ˆ
ð 	�‰�qÔð	#Ü“iˆGÜ0ØØ)ØØô	ˆJð �N‰N˜1ÔØ×'Ñ'ˆFÜ—7‘7œ2Ÿ9™9 VÓ,Ó-°Ò3Ð3Ñ3ä�M‰M˜'Ô"ä,Ø¨¸gô
ˆ
ð
 (-ˆ
Ô$Ø�‰�qÔÜÔ8¸×9KÑ9KÈVÓTÐVWÔXØ"&ˆ
ÔØ�‰�qÔÜ�w‰w”r—y‘y ×!3Ñ!3Ó4Ó5¸Ò;Ð;Ð;ä,ØÙ& |×';Ñ';Ó'=¸c¸r¸cÀ3ÀBÀ3¸hÑ'GÓHØô
ˆ
ô
 �]‰]œ:Ó&ñ 	Ø�N‰N˜1Ô÷	ñ 	ðK&ôT )ØØ!×)Ñ)Ó+ØØô	€Jô 
�‰”zÓ	"ñ Ø�‰�qÔ÷ô #×'Ñ'Ó)ò 
ˆä,ØÜŸ™ )¨YÐ!7Ó8ØØô	
ˆ
ð 	�‰�qÔÜ-Ø¨°VÀZô
ˆð 	�‰˜ÔÜÜ(¨×)<Ñ)<¸j×>PÑ>PÓQÐSTõ	
ð
ô& )Ø L¸*ô€Jð ‡N�N�1ÔÜ Ó"€FÜ)ØØ!ØØô	€Kð ‡O�O�FÔÜ�z×)Ñ)¨;×+>Ñ+>Õ?øôC �M‰M˜'Õ"ú÷&	ñ 	ú÷ñ ús%   Â	A#MÇM%È.M2ÍM"Í%M/	Í2M<c                  ó°   — t         j                  j                  d«      } t        | j	                  dd«      «      }t        dd¬«      j                  |«       y)zhAgglomerativeClustering must work on mem-mapped dataset.

    Non-regression test for issue #19875.
    r   rH   rI   Ú	euclideanrp   ©r~   r*   N)r4   r5   r6   r!   rM   r   r<   )r=   ÚXmms     rA   Ú+test_agglomerative_clustering_memory_mappedr�     sB   € ô
 �)‰)×
Ñ
 Ó
"€CÜ
# C§I¡I¨b°#Ó$6Ó
7€CÜ ;¸ÔA×EÑEÀcÕJrc   c                 óâ  — t         j                  j                  | «      }t        j                  ddgt        ¬«      }|j                  dd«      }t        |j                  Ž }t        d|¬«      }|j                  |«       t        j                  t        j                  |j                  «      «      dk(  sJ ‚|j                  |«      }|j                  d   dk(  sJ ‚|j                  |«      }t        j                  |d   «      j                  dk(  sJ ‚t        |j                  |«      |«       t!        j"                  t$        «      5  |j                  |d d «       d d d «       y # 1 sw Y   y xY w)	NrD   rE   rH   rI   r&   ©r[   r.   rK   r   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r(   r€   r   Ú	transformÚinverse_transformr   r8   r9   r:   )r†   r=   rR   r>   r.   ÚaggloÚX_redÚX_fulls           rA   Útest_ward_agglomerationr˜     s!  € ä
�)‰)×
Ñ
Ð 2Ó
3€CÜ�7‰7�B˜�8¤4Ô(€DØ�	‰	�"�cÓ€AÜ  $§*¡*Ð-€LÜ ¨A¸LÔI€EØ	‡I�Iˆa„LÜ�7‰7”2—9‘9˜UŸ]™]Ó+Ó,°Ò1Ð1Ð1à�O‰O˜AÓ€EØ�;‰;�q‰>˜QÒÐÐØ×$Ñ$ UÓ+€FÜ�9‰9�V˜A‘YÓ×$Ñ$¨Ò)Ð)Ð)Ü˜eŸo™o¨fÓ5°uÔ=ô 
�‰”zÓ	"ñ Ø�	‰	�!�B�Q�%Ô÷÷ ñ ús   ÅE%Å%E.c                  ó>  — t        dd¬«      \  } }t        dd¬«      }|j                  | «       t        t	        |j
                  |«      d«       t        dd	d¬
«      \  }}t        dd¬«      }|j                  |«       t        t	        |j
                  |«      d«       y )Ngš™™™™™©?r%   )ÚnoiseÚrandom_staterJ   rp   )r[   r*   rK   rj   gš™™™™™™?)Úfactorrš   r›   )r   r   r<   r   r   r   r   )ÚmoonsÚmoon_labelsrw   ÚcirclesÚcircle_labelss        rA   Útest_single_linkage_clusteringr¡   2  s�   € ä#¨$¸RÔ@Ñ€Eˆ;Ü(°A¸xÔH€JØ‡N�N�5ÔÜÜ$ Z×%7Ñ%7¸ÓEÀqôô *°¸EÐPRÔSÑ€Gˆ]Ü(°A¸xÔH€JØ‡N�N�7ÔÜÜ$ Z×%7Ñ%7¸ÓGÈõrc   c                 óL  — g }| |fD ]€  }t        |«      }|j                  «       dz   }t        j                  ||f«      }d|t        j                  |«      |f<   |j                  t        j                  ||j                  «      «       Œ‚ |d   |d   k(  j                  «       sJ ‚y)zUtil for comparison with scipyrK   r   N)	rQ   Úmaxr4   ÚzerosÚarangeÚappendÚdotrP   Úall)Úcut1Úcut2Úco_clustÚcutÚnÚkÚecuts          rA   Úassess_same_labellingr°   C  s—   € à€HØ�dˆ|ò .ˆÜ�‹HˆØ�G‰G‹I˜‰MˆÜ�x‰x˜˜A˜ÓˆØ"#ˆŒR�Y‰Y�q‹\˜3ÐÑØ�‰œŸ™˜t T§V¡VÓ,Õ-ð.ð �Q‰K˜8 A™;Ñ&×+Ñ+Ô-Ð-Ñ-rc   c                 ó\  — d\  }}}t         j                  j                  | «      }t        j                  ||f«      }t	        j
                  «       D �]  }t        d«      D �]  }d|j                  ||f¬«      z  }|dt        j                  |«      d d …t         j                  f   z  z  }||j                  d¬«      d d …t         j                  f   z  }t        j                  ||¬«      }	|	d d …d d	…f   j                  t        d
¬«      }
t	        |   ||¬«      \  }}}}|j                  d¬«       t!        ||
d|z   «       t#        |||«      }t#        ||
|«      }t%        ||«       �Œ �Œ t'        j(                  t*        «      5  t#        dz   |«       d d d «       y # 1 sw Y   y xY w)N©rD   r&   é   r&   çš™™™™™¹?r'   ç      @rK   ©Úaxis©ÚmethodrJ   F©Úcopyr-   z2linkage tree differs from scipy impl for linkage: )r4   r5   r6   r;   r
   r…   Úranger7   r¥   ÚnewaxisÚmeanr   r*   ÚastypeÚintÚsortr    r   r°   r8   r9   r:   )r†   r­   Úpr®   r=   r.   r*   Úir>   Úoutru   rT   Ú_rV   r¬   Úcut_s                   rA   Útest_sparse_scikit_vs_scipyrÇ   O  s�  € à�G€A€qˆ!Ü
�)‰)×
Ñ
Ð 2Ó
3€Cô —7‘7˜A˜q˜6“?€LÜ!×&Ñ&Ó(ó -ˆÜ�q“ó 	-ˆAØ�c—j‘j q¨! f�jÓ-Ñ-ˆAØ�”r—y‘y “|¢A¤r§z¡z MÑ2Ñ2Ñ2ˆAØ�—‘˜Q�“¢¤2§:¡: Ñ.Ñ.ˆAä×#Ñ# A¨gÔ6ˆCàšA˜r ˜r˜E™
×)Ñ)¬#°EÐ)Ó:ˆIÜ'5°gÑ'>Ø ô(Ñ$ˆH�a˜ 1ð
 �M‰M˜qˆMÔ!ÜØØØDÀwÑNôô ˜!˜X xÓ0ˆCÜ˜1˜i¨Ó2ˆDÜ! # tÖ,ò-	-ð-ô4 
�‰”zÓ	"ñ 2Ü�˜1‘˜h¨Ô1÷2÷ 2ñ 2ús   ÆF"Æ"F+c                 óJ  — d\  }}}t         j                  j                  | «      }d|j                  ||f¬«      z  }|dt        j                  |«      d d …t         j
                  f   z  z  }||j                  d¬«      d d …t         j
                  f   z  }t        j                  |d¬«      }|d d …d d	…f   j                  t        «      }t        d   |«      \  }}	}
}	|j                  d¬«       t        ||d
«       t        |||
«      }t        |||
«      }t        ||«       y )Nr²   r´   r'   rµ   rK   r¶   rp   r¸   rJ   z8linkage tree differs from scipy impl for single linkage.)r4   r5   r6   r7   r¥   r½   r¾   r   r*   r¿   rÀ   r
   rÁ   r    r   r°   )r†   rv   Ú
n_featuresr[   r=   r>   rÄ   Úchildren_scipyrT   rÅ   rV   r¬   Ú	cut_scipys                rA   Ú)test_vector_scikit_single_vs_scipy_singlerÌ   w  s  € Ø(0Ñ%€Iˆz˜:Ü
�)‰)×
Ñ
Ð 2Ó
3€CØˆc�j‰j˜y¨*Ð5ˆjÓ6Ñ6€AØˆŒr�y‰y˜Ó#¢A¤r§z¡z MÑ2Ñ	2Ñ2€AØˆ�‰�Qˆ‹šœ2Ÿ:™:˜Ñ	&Ñ&€Aä
×
Ñ
˜A hÔ
/€CØš˜B˜Q˜B˜‘Z×&Ñ&¤sÓ+€Nä-¨hÑ7¸Ó:Ñ€Hˆa�˜1ð ‡M�M�q€MÔÜØØØBôô �*˜h¨Ó
1€CÜ˜
 N°HÓ=€IÜ˜#˜yÕ)rc   Úmetric_param_gridc                 ó¸  — t         j                  j                  d¬«      }|j                  d¬«      }t	        |«      }| \  }}|j                  «       }t        j                  |j                  «       Ž D ]e  }t        t        ||«      «      }t        j                  |fi |¤Ž}	t        ||	«      }
t        ||	«      }t         j                  j                  |
|«       Œg y)zoThe MST-LINKAGE-CORE algorithm must work on mem-mapped dataset.

    Non-regression test for issue #19875.
    rK   )Úseed)é   r,   r'   N)r4   r5   r6   r7   r!   r…   Ú	itertoolsÚproductrO   ÚdictÚzipr   Ú
get_metricr   ÚtestingÚassert_equal)rÍ   r=   r>   r�   r~   Ú
param_gridr…   ÚvalsÚkwargsÚdistance_metricÚmstÚmst_mms               rA   Ú#test_mst_linkage_core_memory_mappedrÞ   �  s¿   € ô �)‰)×
Ñ
 QÐ
Ó
'€CØ�
‰
˜ˆ
Ó €AÜ
# AÓ
&€CØ*Ñ€FˆJØ�?‰?Ó€DÜ×!Ñ! :×#4Ñ#4Ó#6Ð7ò -ˆÜ”c˜$ “oÓ&ˆÜ(×3Ñ3°FÑE¸fÑEˆÜ˜q /Ó2ˆÜ! # Ó7ˆÜ
�
‰
×Ñ  VÕ,ñ-rc   c            	      ól  — t        j                  g d¢g d¢g d¢g d¢g d¢g d¢g«      } t        j                  g d¢«      }t        | dd¬«      }d||j                  z   z  }t	        | |d	«      \  }}d
D ]A  }t        d||¬«      }|j                  | «       t        t        |j                  |«      d«       ŒC y )N)r   r   r   )rK   rK   rK   )rJ   rJ   rJ   )r   r   rK   rK   rJ   rJ   r³   F©Ún_neighborsÚinclude_selfrj   r�   )rp   ro   ro   rm   )r[   r*   r.   rK   )
r4   rg   r   rP   r   r   r<   r   r   r   )r>   Útrue_labelsr.   rU   r*   rw   s         rA   Útest_identical_pointsrä   £  sª   € ô 	�‰’)šYª	²9ºiÊÐSÓT€AÜ—(‘(Ò-Ó.€KÜ# A°1À5ÔI€LØ˜,¨¯©Ñ7Ñ8€LÜ!2°1°lÀKÓ!PÑ€L�,à;ò 
ˆÜ,Ø '¸ô
ˆ
ð 	�‰�qÔäÜ(¨×);Ñ);¸[ÓIÈ1õ	
ñ
rc   c                  óŒ   — t        j                  g d¢«      } t        | dd¬«      }t        d|d¬«      }|j	                  | «       y )N))çyé&1¬Œ?g¸…ëQ¸¾?)ræ   gòÒMbX¹?)ræ   g¢E¶óýÔ¸?©gœÄ °rh‘?ç/Ý$�•Ã?rç   ©ç;ßO�—n’?rè   ré   ré   ré   ré   ré   ré   )rê   gÛù~j¼tÃ?)rê   gßO�—nÃ?)rê   g;ßO�—nÂ?rD   F©râ   r,   rm   r|   )r4   rg   r   r   r<   )r>   r.   rm   s      rA   Útest_connectivity_propagationrì   ·  sE   € ô 	�‰ò	
ó	€Aô& $ A r¸Ô>€LÜ"Ø <¸ô€Dð
 	‡H�HˆQ…Krc   c                 óÐ  — d\  }}t         j                  j                  | «      }t        j                  ||f«      }t	        d«      D ]�  }d|j                  ||f¬«      z  }|dt        j                  |«      d d …t         j                  f   z  z  }||j                  d¬«      d d …t         j                  f   z  }t        |«      }t        ||¬«      }t        |d	   |d	   «       ŒŸ y )
N©rD   r&   r&   r´   r'   rµ   rK   r¶   r-   r   )r4   r5   r6   r;   r¼   r7   r¥   r½   r¾   r	   r    )	r†   r­   rÂ   r=   r.   rÃ   r>   Úout_unstructuredÚout_structureds	            rA   Útest_ward_tree_children_orderrñ   Ö  sÑ   € ð
 �D€A€qÜ
�)‰)×
Ñ
Ð 2Ó
3€Cä—7‘7˜A˜q˜6“?€LÜ�1‹Xò CˆØ�#—*‘* 1 a &�*Ó)Ñ)ˆØ	ˆS”2—9‘9˜Q“<¢¤2§:¡: Ñ.Ñ.Ñ.ˆØ	ˆQ�V‰V˜ˆV‹^šAœrŸz™z˜MÑ*Ñ*ˆä$ Q›<ÐÜ" 1°<Ô@ˆäÐ+¨AÑ.°¸qÑ0AÕBñCrc   c           	      óV  — d\  }}t         j                  j                  | «      }t        j                  ||f«      }t	        d«      D �]  }d|j                  ||f¬«      z  }|dt        j                  |«      d d …t         j                  f   z  z  }||j                  d¬«      d d …t         j                  f   z  }t        |d¬	«      }t        ||d¬
«      }|d   }	|d   }
t        |	|
«       |d   }|d   }t        ||«       dD ]Q  }t        |||d¬«      d   }t        ||d¬«      d   }|d   }|d   }|d   }|d   }t        ||«       t        ||«       ŒS �Œ t        j                  ddgddgddgddgddgddgg«      }t        j                  g d¢g d¢g d¢g d¢g d ¢g«      }t        j                  g d¢g d¢g d¢g d!¢g d"¢g«      }t        j                  g d¢g d¢g d¢g d#¢g d$¢g«      }t        j                  |«      \  }}t        j                  ||f«      }t        |d¬	«      }t        ||d¬
«      }t        |d d …d d%…f   |d   «       t        |d d …d d%…f   |d   «       t        |d d …d%f   |d&   «       t        |d d …d%f   |d&   «       g d'¢}||g}t        ||«      D ]~  \  }}t        |d|¬(«      }t        |||d¬«      }t        |d d …d d%…f   |d   «       t        |d d …d d%…f   |d   «       t        |d d …d%f   |d&   «       t        |d d …d%f   |d&   «       Œ€ y ))Nrî   r&   r´   r'   rµ   rK   r¶   T)Úreturn_distance)r.   ró   r   éÿÿÿÿ)ro   rn   rp   )r.   r*   ró   )r*   ró   g»™Ñ�†ãö?gææeGÀg…�w7äÕ@g}°Î)¯J@gZ!E•ø@gÇÇn]#Àgú!º�Ü„@gŠ´,8Àg!«�Yùz @gRÕ¡&<aÀg¤ÚŽF‘�@gÜT“–€!@)g      @rµ   g0rqÐ5×?ç       @)ç      ð?g      @gAæVJÇSü?rõ   )g        rõ   gòL�/ùu@rõ   )ç      @ç       @g6S„HD4"@rµ   )ç      @ç      "@gˆwÊ´GÇ8@r÷   )r÷   rø   gwîfÛ£Þ@rµ   )rù   rú   g63CÆ2@r÷   )r÷   rø   gÐéýoº;@rµ   )rù   rú   g_‡ ½á.@r÷   rJ   r,   )rn   ro   rp   )ró   r*   )r4   r5   r6   r;   r¼   r7   r¥   r½   r¾   r	   r    r   r   rg   rN   rÔ   )r†   r­   rÂ   r=   r.   rÃ   r>   rï   rð   Úchildren_unstructuredÚchildren_structuredÚdist_unstructuredÚdist_structuredr*   Ústructured_itemsÚunstructured_itemsÚstructured_distÚunstructured_distÚstructured_childrenÚunstructured_childrenÚlinkage_X_wardÚlinkage_X_completeÚlinkage_X_averagerv   rÉ   Úconnectivity_XÚout_X_unstructuredÚout_X_structuredÚlinkage_optionsÚX_linkage_truthÚX_truths                                  rA   Ú&test_ward_linkage_tree_return_distancer  ê  s¹  € ð
 �D€A€qÜ
�)‰)×
Ñ
Ð 2Ó
3€Cä—7‘7˜A˜q˜6“?€LÜ�1‹Xó !RˆØ�#—*‘* 1 a &�*Ó)Ñ)ˆØ	ˆS”2—9‘9˜Q“<¢¤2§:¡: Ñ.Ñ.Ñ.ˆØ	ˆQ�V‰V˜ˆV‹^šAœrŸz™z˜MÑ*Ñ*ˆä$ Q¸Ô=ÐÜ" 1°<ÐQUÔVˆð !1°Ñ 3ÐØ,¨QÑ/Ðô 	Ð0Ð2EÔFð -¨RÑ0ÐØ(¨Ñ,ˆä!Ð"3°_ÔEà8ò 	RˆGÜ+Ø °gÈtô àñ Ðô ".¨a¸ÐRVÔ!WØñ"Ðð /¨rÑ2ˆOØ 2°2Ñ 6ÐØ"2°1Ñ"5ÐØ$6°qÑ$9Ð!Ü% oÐ7HÔIÜ%Ð&9Ð;PÕQò	Rð+!RôJ 	�‰à˜Ð$Ø˜Ð$Ø˜Ð%Ø˜Ð%Ø˜Ð%Ø˜Ð$ð	
ó		€Aô —X‘Xâ'Ú'Ú'Ú'Ú'ð	
ó€Nô Ÿ™â'Ú'Ú'Ú'Ú(ð	
óÐô Ÿ™â'Ú'Ú'Ú'Ú(ð	
óÐô ŸH™H Q›KÑ€IˆzÜ—W‘W˜i¨Ð3Ó4€Nä" 1°dÔ;ÐÜ  °ÐQUÔVÐô �~¢a¨¨!¨ eÑ,Ð.@ÀÑ.CÔDÜ�~¢a¨¨!¨ eÑ,Ð.>¸qÑ.AÔBô ˜nªQ°¨TÑ2Ð4FÀqÑ4IÔJÜ˜nªQ°¨TÑ2Ð4DÀQÑ4GÔHâ7€OØ)Ð+<Ð=€OÜ °ÓAò FÑˆ�Ü)¨!¸TÈ7ÔSÐÜ'Ø˜N°GÈTô
Ðô
 	˜7¢1 b q b 5™>Ð+=¸aÑ+@ÔAÜ˜7¢1 b q b 5™>Ð+;¸AÑ+>Ô?ô 	" 'ª!¨Q¨$¡-Ð1CÀAÑ1FÔGÜ! 'ª!¨Q¨$¡-Ð1AÀ!Ñ1DÕEñFrc   c                  ó$  — t        j                  ddgddgg«      } t        j                  ddgddgg«      }t        dd|¬«      }t        |d¬«      }t	        j
                  t        «      5  |j                  | «       d d d «       y # 1 sw Y   y xY w)	Nr   rK   TFrJ   )Ún_xÚn_yrR   rm   ©r.   r*   )r4   rg   r   r   r8   r\   r]   r<   )ÚxÚmÚcÚws       rA   Ú test_connectivity_fixing_non_lilr  `  s€   € ô 	�‰�1�a�&˜1˜a˜&Ð!Ó"€Aä
�‰�4˜�- %¨ Ð/Ó0€AÜ˜! ¨Ô+€AÜ¨Q¸Ô?€AÜ	�‰”kÓ	"ñ Ø	�‰ˆaŒ÷÷ ñ ús   Á+BÂBc                  óÆ  — t         j                  j                  d«      } t        j                  | j	                  dd¬«      j                  t         j                  d¬«      «      }| j                  t        |«      «      }t        ||«      }t        ||«      D ]  \  }}||   |k(  rŒJ ‚ t        j                  dt         j                  ¬«      d d d	…   }t        j                  dd
«      d d d	…   }t        ||«      }t        ||t        j                  dt         j                  ¬«      dd¬«       t        ||t        j                  dt         j                  ¬«      dd¬«       y )Nr   rI   rD   r'   Frº   rH   rE   rJ   rj   rK   )rR   Ún_aÚn_b)r4   r5   r6   r€   Úrandintr¿   ÚintpÚrandrQ   r   rÔ   r¥   Úfullr   r;   r   )	r=   r…   rO   ÚdÚkeyÚvalueÚ
other_keysÚother_valuesÚothers	            rA   Útest_int_float_dictr%  m  s  € Ü
�)‰)×
Ñ
 Ó
"€CÜ�9‰9�S—[‘[ ¨2�[Ó.×5Ñ5´b·g±gÀEÐ5ÓJÓK€DØ�X‰X”c˜$“iÓ €Fä�T˜6Ó"€AÜ˜$ Ó'ò ‰
ˆˆUØ�‰v˜‹Ðˆðô —‘˜2¤R§W¡WÔ-©c°¨cÑ2€JÜ—7‘7˜2˜sÓ#¡C a CÑ(€LÜ˜ \Ó2€Eäˆa�œRŸW™W S´·±Ô8¸aÀQÕGÜ�!�U¤§¡¨´B·G±GÔ!<À!ÈÖKrc   c                  óV  — t         j                  j                  d«      } | j                  dd«      }t	        |dd¬«      }t        |¬«      }t        t        t        dd¬«      ¬«      }|j                  |«       |j                  |«       t        |j                  |j                  «       y )	Nr   rÐ   r&   r³   Frë   r-   rà   )
r4   r5   r6   r  r   r   r   r<   r    r   )r=   r>   r.   Úaglc1Úaglc2s        rA   Útest_connectivity_callabler)  ~  s~   € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��Q‹€AÜ# A q°uÔ=€LÜ#°Ô>€EÜ#ÜÔ-¸1È5ÔQô€Eð 
‡I�Iˆa„LØ	‡I�Iˆa„LÜ�u—}‘} e§m¡mÕ4rc   c                  óR  — t         j                  j                  d«      } | j                  dd«      }t	        |dd¬«      }t	        |dd¬«      }t        |¬«      }t        |¬«      }|j                  |«       |j                  |«       t        |j                  |j                  «       y )	Nr   rÐ   r&   r³   Frë   Tr-   )	r4   r5   r6   r  r   r   r<   r    r   )r=   r>   r.   Úconnectivity_include_selfr'  r(  s         rA   Ú"test_connectivity_ignores_diagonalr,  ‹  s   € Ü
�)‰)×
Ñ
 Ó
"€CØ�‰��Q‹€AÜ# A q°uÔ=€LÜ 0°°AÀDÔ IÐÜ#°Ô>€EÜ#Ð1JÔK€EØ	‡I�Iˆa„LØ	‡I�Iˆa„LÜ�u—}‘} e§m¡mÕ4rc   c                  ó  — t         j                  j                  d«      } | j                  dd«      }t	        |dd¬«      }t        d|¬«      }|j                  |«       |j                  d   }|j                  j                  d   }||dz
  k(  sJ ‚d	}| j                  d
d«      }t	        |dd¬«      }t        ||¬«      }|j                  |«       |j                  d   }|j                  j                  d   }|||z
  k(  sJ ‚y )Nr   rD   rJ   r&   Frë   r’   rK   ée   éÈ   )	r4   r5   r6   rM   r   r   r<   rN   ru   )r=   r>   r.   Úagcrv   rX   r[   s          rA   Útest_compute_full_treer1  —  sð   € ä
�)‰)×
Ñ
 Ó
"€CØ�	‰	�"�aÓ€AÜ# A q°uÔ=€Lô "¨Q¸\Ô
J€CØ‡G�GˆA„JØ—‘˜‘
€IØ�m‰m×!Ñ! !Ñ$€GØ�i !‘mÒ#Ð#Ð#ð €JØ�	‰	�#�qÓ€AÜ# A r¸Ô>€LÜ
!¨ZÀlÔ
S€CØ‡G�GˆA„JØ—‘˜‘
€IØ�m‰m×!Ñ! !Ñ$€GØ�i *Ñ,Ò,Ð,Ñ,rc   c                  óø   — t         j                  j                  d«      } | j                  dd«      }t        j                  d«      }t        j                  «       D ]  } t        |«      ||¬«      d   dk(  rŒJ ‚ y )Nr   r&   r-   rK   )r4   r5   r6   r  Úeyer
   rO   r"   )r=   r>   r.   ra   s       rA   Útest_n_componentsr4  ±  sp   € ä
�)‰)×
Ñ
 Ó
"€CØ�‰��A‹€Aô —6‘6˜!“9€Lä&×-Ñ-Ó/ò SˆØ,Œ˜|Ó,¨Q¸\ÔJÈ1ÑMÐQRÓRÐRÐRñSrc   c                  óF  — d} t         j                  j                  d«      }|j                  | | «      }t        j                  g d¢«      }t        | | |t         j                  ¬«      } G d„ d«      } |«       }t        |||j                  ¬«       |j                  dk(  sJ ‚y )	NrJ   r   )TFFT)r  r  rR   Ú	return_asc                   ó   — e Zd Zd„ Zd„ Zy)ú>test_affinity_passed_to_fix_connectivity.<locals>.FakeAffinityc                 ó   — d| _         y )Nr   ©Úcounter)Úselfs    rA   Ú__init__zGtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.__init__É  s	   € ØˆD�Lrc   c                 óD   — | xj                   dz  c_         | j                   S )NrK   r:  )r<  ÚargsrÚ   s      rA   Ú	incrementzHtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.incrementÌ  s   € Ø�LŠL˜AÑ�LØ—<‘<Ðrc   N)Ú__name__Ú
__module__Ú__qualname__r=  r@  © rc   rA   ÚFakeAffinityr8  È  s   „ ò	ó	 rc   rE  )r.   r1   r³   )
r4   r5   r6   rM   rg   r   Úndarrayr   r@  r;  )r(   r=   r>   rR   r.   rE  Úfas          rA   Ú(test_affinity_passed_to_fix_connectivityrH  ½  sƒ   € ð €DÜ
�)‰)×
Ñ
 Ó
"€CØ�	‰	�$˜Ó€AÜ�8‰8Ò.Ó/€Dä  T¨t¸$Ì"Ï*É*ÔU€L÷ ñ  ñ 
‹€Bä� ¸¿¹ÕEà�:‰:˜Š?Ð‰?rc   )rm   rn   ro   c                 óL  — t         j                  j                  |«      }t        j                  ddgt        ¬«      }d}|j                  |d«      }t        |j                  Ž }d}d |fD ]¹  }t        d ||| ¬«      }	|	j                  |«       |	j                  }
t        t        j                  |	j                  «      «      }t        |    } |||d d¬«      \  }}}}}t        j                  ||k\  «      dz   }||k(  sJ ‚t        |||¬	«      }t        j                   |
|«      rŒ¹J ‚ y )
NrD   rE   rI   rH   )r[   rr   r.   r*   T)r.   r[   ró   rK   )r[   rT   rV   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r   rQ   r€   r
   Úcount_nonzeror   Úarray_equiv)r*   r†   r=   rR   rv   r>   r.   rr   Úconnrw   Úclusters_producedÚnum_clusters_producedrS   rT   rU   rV   rW   Ú	distancesÚnum_clusters_at_thresholdÚclusters_at_thresholds                       rA   Ú5test_agglomerative_clustering_with_distance_thresholdrR  ×  s;  € ô �)‰)×
Ñ
Ð 2Ó
3€CÜ�7‰7�B˜�8¤4Ô(€DØ€IØ�	‰	�)˜RÓ €AÜ  $§*¡*Ð-€LàÐØ�|Ð$ò HˆÜ,ØØ1ØØô	
ˆ
ð 	�‰�qÔØ&×.Ñ.ÐÜ #¤B§I¡I¨j×.@Ñ.@Ó$AÓ BÐô & gÑ.ˆÙ>JØ˜D¨TÀ4ô?
Ñ;ˆ�, ¨&°)ô ×Ñ˜YÐ*<Ñ<Ó=ÀÑAð 	"ð )Ð,AÒAÐAÐAä 'Ø,°xÈ(ô!
Ðô �~‰~Ð/Ð1FÕGÐGÐGñ3Hrc   c                 óf  — t         j                  j                  | «      }d}|j                  dd|df¬«      }t	        d dd¬«      j                  |«      }t        |d	d
¬«      }t        j                  |t         j                  «       t        j                  |dkD  «      sJ ‚|j                  |k(  sJ ‚y )NrD   iÔþÿÿi,  r³   r'   rö   rp   ©r[   rr   r*   Ú	minkowskirJ   ©r~   rÂ   r´   )r4   r5   r6   r  r   r<   r   Úfill_diagonalÚinfr¨   Ún_clusters_)r†   r=   rv   r>   rw   Úall_distancess         rA   Útest_small_distance_thresholdr[  þ  s¢   € Ü
�)‰)×
Ñ
Ð 2Ó
3€CØ€IØ�‰�D˜# Y° NˆÓ3€Aô )Ø¨C¸ôç	�cˆ!ƒfð ô ' q°ÀÔB€MÜ×Ñ�]¤B§F¡FÔ+Ü�6‰6�- #Ñ%Ô&Ð&Ð&Ø×!Ñ! YÒ.Ð.Ñ.rc   c                 óV  — t         j                  j                  | «      }d}|j                  dd|df¬«      }d}t	        d |d¬«      j                  |«      }|j                  }t        |d	d
¬«      }t        j                  |t         j                  «       t        j                  |«      D ]}  }||k(  }	||	   d d …|	f   j                  d¬«      j                  «       }
||	   d d …|	 f   j                  d¬«      j                  «       }|	j                  «       dkD  r|
|k  sJ ‚||k\  rŒ}J ‚ y )NrI   iöÿÿÿrD   r³   r'   r,   rp   rT  rU  rJ   rV  r   r¶   rK   )r4   r5   r6   r  r   r<   r   r   rW  rX  r€   Úminr£   Úsum)r†   r=   rv   r>   rr   rw   rˆ   ÚDÚlabelÚin_cluster_maskÚmax_in_cluster_distanceÚmin_out_cluster_distances               rA   Ú.test_cluster_distances_with_distance_thresholdrd    s:  € Ü
�)‰)×
Ñ
Ð 2Ó
3€CØ€IØ�‰�C˜ 9¨a .ˆÓ1€AàÐÜ(ØÐ,>Èôç	�cˆ!ƒfð ð ×Ñ€FÜ˜1 [°AÔ6€Aä×Ñ�QœŸ™ÔÜ—‘˜6Ó"ò >ˆØ  E™/ˆàˆoÑšq /Ð1Ñ2×6Ñ6¸AÐ6Ó>×BÑBÓDð 	 ð ˆoÑšq ?Ð"2Ð2Ñ3×7Ñ7¸QÐ7Ó?×CÑCÓEð 	!ð ×ÑÓ  1Ò$Ø*Ð-?Ò?Ð?Ð?Ø'Ð+=Ó=Ð=Ð=ñ>rc   )Ú	thresholdÚy_truerj   rK   rö   g      ø?c                 óp   — dgdgg}t        d || ¬«      }|j                  |«      }t        ||«      dk(  sJ ‚y )Nr   rK   rT  )r   Úfit_predictr   )r*   re  rf  r>   Ú	clustererÚy_preds         rA   Ú?test_agglomerative_clustering_with_distance_threshold_edge_caserk  *  sI   € ð ˆˆqˆcˆ
€AÜ'Ø¨I¸wô€Ið ×"Ñ" 1Ó%€FÜ˜v vÓ.°!Ò3Ð3Ñ3rc   c                  óæ  — dgdgg} t        j                  t        d¬«      5  t        d d ¬«      j	                  | «       d d d «       t        j                  t        d¬«      5  t        dd¬«      j	                  | «       d d d «       dgdgg} t        j                  t        d¬«      5  t        d dd¬	«      j	                  | «       d d d «       y # 1 sw Y   Œ‘xY w# 1 sw Y   Œ]xY w# 1 sw Y   y xY w)
Nr   rK   zExactly one of re   )r[   rr   rJ   z!compute_full_tree must be True ifF)r[   rr   rƒ   )r8   r9   r:   r   r<   )r>   s    rA   Ú&test_dist_threshold_invalid_parametersrm  :  sÛ   € Ø
ˆˆqˆcˆ
€AÜ	�‰”zÐ):Ô	;ñ QÜ¨4ÀDÔI×MÑMÈaÔP÷Qô 
�‰”zÐ):Ô	;ñ KÜ¨1ÀÔC×GÑGÈÔJ÷Kð ˆˆqˆcˆ
€AÜ	�‰”zÐ)LÔ	Mñ ÜØ°ÀUô	
ç
‰#ˆaŒ&÷ð ÷Qð Qú÷Kð Kú÷ð ús#   ¢CÁ"CÂ(C'ÃCÃC$Ã'C0c                  óþ   — t         j                  j                  d«      } | j                  dd«      }t	        j
                  t        d¬«      5  t        dd¬«      j                  |«       d d d «       y # 1 sw Y   y xY w)	Nr   r&   r³   z>Distance matrix should be square, got matrix of shape \(5, 3\)re   r/   rn   rŽ   )	r4   r5   r6   r  r8   r9   r:   r   r<   )r=   r>   s     rA   Ú*test_invalid_shape_precomputed_dist_matrixro  I  si   € ô �)‰)×
Ñ
 Ó
"€CØ�‰��A‹€AÜ	�‰ÜØOô
ñ Qô 	  }¸jÔI×MÑMÈaÔP÷	Q÷ Qñ Qús   ÁA3Á3A<c                  ó¨  — t        j                  g d¢g d¢g d¢g d¢g d¢g«      } t        | «      d   dk(  sJ ‚t         j                  j	                  d«      }|j                  dd«      }t        |«      }t        d	| d
¬«      }d}t        j                  t        |¬«      5  |j                  |«       ddd«       t        | d
¬«      }t        j                  t        |¬«      5  |j                  |«       ddd«       t        |j                  |j                  «       t        |j                  |j                  «       y# 1 sw Y   ŒŒxY w# 1 sw Y   ŒVxY w)zÁCheck that connecting components works when connectivity and
    affinity are both precomputed and the number of connected components is
    greater than 1. Non-regression test for #16151.
    )r   rK   rK   r   r   )r   r   rK   r   r   )r   r   r   r   r   )r   r   r   r   rK   r   rJ   r&   rD   r/   rn   )r~   r.   r*   z.Completing it to avoid stopping the tree earlyre   Nr  )r4   rg   r   r5   r6   rM   r   r   r8   r\   r]   r<   r    r   ru   )Úconnectivity_matrixr=   r>   rŠ   Úclusterer_precomputedrh   ri  s          rA   Ú@test_precomputed_connectivity_metric_with_2_connected_componentsrs  U  s-  € ô Ÿ(™(âÚÚÚÚð	
óÐô  Ð 3Ó4°QÑ7¸1Ò<Ð<Ð<ä
�)‰)×
Ñ
 Ó
"€CØ�	‰	�!�RÓ€Aä Ó"€FÜ3ØÐ+>È
ôÐð ;€CÜ	�‰”k¨Ô	-ñ *Ø×!Ñ! &Ô)÷*ô (Ø(°*ô€Iô 
�‰”k¨Ô	-ñ Ø�‰�aÔ÷ô �y×(Ñ(Ð*?×*GÑ*GÔHÜ�y×*Ñ*Ð,A×,KÑ,KÕL÷*ð *ú÷ð ús   ÂD<Ã!EÄ<EÅE)ZÚ__doc__rÑ   r�   Ú	functoolsr   Útempfiler   Únumpyr4   r8   Úscipy.clusterr   Úscipy.sparse.csgraphr   Úsklearn.clusterr   r   r	   Úsklearn.cluster._agglomerativer
   r   r   r   Ú"sklearn.cluster._hierarchical_fastr   r   r   Úsklearn.datasetsr   r   Ú sklearn.feature_extraction.imager   Úsklearn.metricsr   Úsklearn.metrics.clusterr   r   Úsklearn.metrics.pairwiser   r   r   r   Ú'sklearn.metrics.tests.test_dist_metricsr   Úsklearn.neighborsr   Úsklearn.utils._fast_dictr   Úsklearn.utils._testingr   r   r    r!   r"   Úsklearn.utils.fixesr#   rB   rY   r_   rb   ri   ÚmarkÚparametrizery   r‹   r�   r˜   r¡   r°   rÇ   rÌ   rÞ   rä   rì   rñ   r  r  r%  r)  r,  r1  r4  rH  rR  r[  rd  rk  rm  ro  rs  rD  rc   rA   ú<module>r‰     sF  ðñó Û Ý Ý ã Û Ý #Ý 5ç TÑ T÷ó ÷ñ ÷
 6Ý :Ý *ß U÷ó õ KÝ .Ý 1÷õ õ /òIò2=ò.7ò03ò+ð ‡�×ÑÐ9¸KÈÐ;TÓUØ‡�×ÑÐ,¨t°U¨mÓ<Ø‡�×Ñ˜Ò$MÓNñ5ó Oó =ó Vð5ð8 ‡�×Ñ˜¨.Ó9ñ[@ó :ð[@ò|Kòò*ò"	.ò#2òP*ð2 ‡�×ÑÐ,Ð.DÓEñ-ó Fð-ò$
ò(ò>Cò(sFòl
òLò"
5ò	5ò-ò4	Sòð4 ‡�×Ñ˜Ò$CÓDñ#Hó Eð#HòL/ò">ð6 ‡�×Ñ˜Ò$CÓDØ‡�×ÑØ˜s Q¨ F˜m¨c°A°q°6¨]¸SÀ1ÀaÀ&¸MÐJóñ	4óó Eð	4òò	Qó$Mrc   