§
    ¨éUgR  ã            	       ó„  — 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	j=         >                    dddg¦  «        e	j=         >                    dddg¦  «        e	j=         >                    dg d ¢¦  «        d!„ ¦   «         ¦   «         ¦   «         Z?e	j=         >                    d"e7¦  «        d#„ ¦   «         Z@d$„ ZAd%„ ZBd&„ ZCd'„ ZDd(„ ZEd)„ ZFe	j=         >                    d*e+¦  «        d+„ ¦   «         ZGd,„ ZHd-„ ZId.„ ZJd/„ ZKd0„ ZLd1„ ZMd2„ ZNd3„ ZOd4„ ZPd5„ ZQd6„ ZRe	j=         >                    dg d7¢¦  «        d8„ ¦   «         ZSd9„ ZTd:„ ZUe	j=         >                    dg d7¢¦  «        e	j=         >                    d;d<d=dgfd>d=dgfd?ddgfg¦  «        d@„ ¦   «         ¦   «         ZVdA„ ZWdB„ ZXdC„ ZYe	j=         >                    dDeeg¦  «        dE„ ¦   «         ZZdS )Fz=
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                  óö  — t           j                             d¦  «        } |                      d¬¦  «        }t	          j        t          ¦  «        5  t          |d¬¦  «         d d d ¦  «         n# 1 swxY w Y   t	          j        t          ¦  «        5  t          |t          j        d¦  «        ¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          ¦   «          
                    |¦  «         t          |¦  «        }t          |d¬	¦  «        }t          |d
         t          |d¬	¦  «        d
         ¦  «         t          |t          ¬	¦  «        }t          |d
         t          |d¬	¦  «        d
         ¦  «         d S )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       úf/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/cluster/tests/test_hierarchical.pyÚtest_linkage_miscrB   6   sÈ  € å
Œ)×
Ò
 Ñ
#Ô
#€CØ�
Š
˜ˆ
ÑÔ€Aå	Œ•zÑ	"Ô	"ð 'ð 'Ý�Q Ð&Ñ&Ô&Ð&ð'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'õ 
Œ•zÑ	"Ô	"ð 6ð 6Ý�Q¥R¤W¨V¡_¤_Ð5Ñ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6õ ÑÔ×Ò˜qÑ!Ô!Ð!õ ˜1Ñ
Ô
€Cå
�s ]Ð
3Ñ
3Ô
3€CÝ�s˜1”v�|¨A¸ÐAÑAÔAÀ!ÔDÑEÔEÐEõ �qÕ#6Ð
7Ñ
7Ô
7€CÝ�s˜1”v�|¨A¸ÐDÑDÔDÀQÔGÑHÔHÐHÐHÐHs$   ÁA-Á-A1Á4A1Â$CÃCÃCc                  óÌ  — t           j                             d¦  «        } t          j        ddgt          ¬¦  «        }d|dd…dd…f<   |                      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 ¦  «         n# 1 swxY w Y   t          j        t          ¦  «        5   ||j
        d d…         |¬¦  «         d d d ¦  «         n# 1 swxY w Y   Œåd S )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   sê  € å
Œ)×
Ò
 Ñ
"Ô
"€CÝŒ7�B˜�8¥4Ð(Ñ(Ô(€Dà€Dˆˆ1ˆˆa�ˆcˆ�NØ�	Š	�"�cÑÔ€AÝ  $¤*Ð-€LÝ&Ô-Ñ/Ô/ð =ð =ˆØ3?°<ØŒC˜lð4
ñ 4
ô 4
Ñ0ˆ�, ¨&ð �a”g˜a”j‘. 1Ñ$ˆÝ�8‰}Œ}˜xÑ'¨7Ò2Ð2Ð2Ð2õ Œ]�:Ñ&Ô&ð 	<ð 	<ØˆL˜œ­2¬7°6©?¬?Ð;Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<õ Œ]�:Ñ&Ô&ð 	=ð 	=ØˆL˜œ˜R˜a˜Rœ¨|Ð<Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=øð=ð =s$   Ã%DÄD	ÄD	Ä1EÅE	ÅE	c            	      ó<  — t           j                             d¦  «        } |                      dd¦  «        }||d         fD ]Ÿ}t	          ¦   «         5  t          j        t          ¦  «        5  t          |j	        d¬¦  «        \  }}}}d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d|j
        d         z  dz
  }t          |¦  «        |z   |k    sJ ‚Œ t          j        ¦   «         D ]¨}||d         fD ]›}t	          ¦   «         5  t          j        t          ¦  «        5   ||j	        d¬¦  «        \  }}}}d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d|j
        d         z  dz
  }t          |¦  «        |z   |k    sJ ‚ŒœŒ©d S )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ð 3ˆõ ÑÔð 	Yð 	YÝ”�kÑ*Ô*ð Yð YÝ6?ÀÄÐUWÐ6XÑ6XÔ6XÑ3�˜' 8¨VðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð	Yð 	Yð 	Yñ 	Yô 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yøøøð 	Yð 	Yð 	Yð 	Yð �a”g˜a”j‘. 1Ñ$ˆÝ�8‰}Œ}˜xÑ'¨7Ò2Ð2Ð2Ð2Ð2å&Ô-Ñ/Ô/ð 7ð 7ˆØ˜!˜Aœ$�ið 	7ð 	7ˆFÝ Ñ"Ô"ð ð Ý”\¥+Ñ.Ô.ð ð Ø:F¸,Øœ¨Rð;ñ ;ô ;Ñ7�H˜g x°ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 ˜!œ' !œ*‘n qÑ(ˆGÝ�x‘=”= 8Ñ+¨wÒ6Ð6Ð6Ð6Ð6ð	7ð7ð 7sl   ÁB)Á*BÂB)ÂBÂB)ÂBÂB)Â)B-	Â0B-	ÄE$Ä)E	ÅE$ÅEÅE$ÅEÅE$Å$E(Å+E(c                  óv  — t           j                             d¦  «        } t          j        ddgt          ¬¦  «        }|                      dd¦  «        }t          |j        Ž }t          j	        ¦   «         D ]D} ||j
        |¬¦  «        \  }}}}d|j        d         z  dz
  }t          |¦  «        |z   |k    sJ ‚ŒEd S )	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�B˜�8¥4Ð(Ñ(Ô(€DØ�	Š	�"�cÑÔ€AÝ  $¤*Ð-€LÝ&Ô-Ñ/Ô/ð 3ð 3ˆØ.:¨lØŒC˜lð/
ñ /
ô /
Ñ+ˆ�'˜8 Vð �a”g˜a”j‘. 1Ñ$ˆÝ�8‰}Œ}˜xÑ'¨7Ò2Ð2Ð2Ð2Ð2ð3ð 3ó    c                  óÈ   — t          j        ddgddgg¦  «        } d}t          j        t          |¬¦  «        5  t          | d¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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   Œ   s±   € õ 	Œ�1�a�&˜1˜a˜&Ð!Ñ"Ô"€AØ
G€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð +ð +Ý�Q Ð*Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð +ð +s   ¸AÁAÁAzn_clusters, distance_threshold)Nç      à?)rD   NÚcompute_distancesTFr*   ©ÚwardÚcompleteÚaverageÚsinglec                 óÊ  — t           j                             d¦  «        }t          j        ddgt          ¬¦  «        }d}|                     |d¦  «        }t          |j        Ž }t          | ||||¬¦  «        }	|	 	                    |¦  «         |s|�At          |	d¦  «        sJ ‚|	j        j        d         }
|
dz   }|	j        j        |dz
  fk    sJ ‚d S t          |	d¦  «        rJ ‚d S )	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�B˜�8¥4Ð(Ñ(Ô(€DØ€IØ�	Š	�)˜RÑ Ô €AÝ  $¤*Ð-€Lå(ØØ!ØØ-Ø+ðñ ô €Jð ‡N‚N�1ÑÔÐØð 5Ð/Ð;Ý�z <Ñ0Ô0Ð0Ð0Ð0ØÔ)Ô/°Ô2ˆ
Ø˜q‘.ˆØÔ$Ô*¨w¸©{¨nÒ<Ð<Ð<Ð<Ð<Ð<å˜: |Ñ4Ô4Ð4Ð4Ð4Ð4Ð4rc   Úlil_containerc           
      óœ  — t           j                             | ¦  «        }t          j        ddgt          ¬¦  «        }d}|                     |d¦  «        }t          |j        Ž }dD �]à}t          d||¬¦  «        }| 	                    |¦  «         	 t          ¦   «         }	t          d||	|¬¦  «        }| 	                    |¦  «         |j        }
t          j        t          j        |
¦  «        ¦  «        dk    sJ ‚	 t          j        |	¦  «         n# t          j        |	¦  «         w xY wt          d||¬¦  «        }d|_        | 	                    |¦  «         t#          t%          |j        |
¦  «        d	¦  «         d |_        | 	                    |¦  «         t          j        t          j        |j        ¦  «        ¦  «        dk    sJ ‚t          d ||                     ¦   «         d d…d d…f         ¦  «        |¬¦  «        }t+          j        t.          ¦  «        5  | 	                    |¦  «         d d d ¦  «         n# 1 swxY w Y   �Œât          d|                     ¦   «         d
d¬¦  «        }t+          j        t.          ¦  «        5  | 	                    |¦  «         d d d ¦  «         n# 1 swxY w Y   t1          j        ¦   «         D ]Ž}t          dt          j        ||f¦  «        |d¬¦  «        }| 	                    |¦  «         t          dd |d¬¦  «        }| 	                    |¦  «         t#          t%          |j        |j        ¦  «        d	¦  «         Œ�t          d|d¬¦  «        }| 	                    |¦  «         t5          |¦  «        }t          d|dd¬¦  «        }| 	                    |¦  «         t7          |j        |j        ¦  «         d S )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‹   ´   su  € õ Œ)×
Ò
Ð 2Ñ
3Ô
3€CÝŒ7�B˜�8¥4Ð(Ñ(Ô(€DØ€IØ�	Š	�)˜RÑ Ô €AÝ  $¤*Ð-€LØ<ð &ñ &ˆÝ,Ø¨¸gð
ñ 
ô 
ˆ
ð 	�Š�qÑÔÐð	#Ý‘i”iˆGÝ0ØØ)ØØð	ñ ô ˆJð �NŠN˜1ÑÔÐØÔ'ˆFÝ”7�2œ9 VÑ,Ô,Ñ-Ô-°Ò3Ð3Ð3Ð3Ð3åŒM˜'Ñ"Ô"Ð"Ð"ø�FŒM˜'Ñ"Ô"Ð"Ð"øøøå,Ø¨¸gð
ñ 
ô 
ˆ
ð
 (-ˆ
Ô$Ø�Š�qÑÔÐÝÕ8¸Ô9KÈVÑTÔTÐVWÑXÔXÐXØ"&ˆ
ÔØ�Š�qÑÔÐÝŒw•r”y Ô!3Ñ4Ô4Ñ5Ô5¸Ò;Ð;Ð;Ð;å,ØØ&˜ |×';Ò';Ñ'=Ô'=¸c¸r¸cÀ3ÀBÀ3¸hÔ'GÑHÔHØð
ñ 
ô 
ˆ
õ
 Œ]�:Ñ&Ô&ð 	ð 	Ø�NŠN˜1ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ùõ
 )ØØ!×)Ò)Ñ+Ô+ØØð	ñ ô €Jõ 
Œ•zÑ	"Ô	"ð ð Ø�Š�qÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ #Ô'Ñ)Ô)ð 
ð 
ˆå,ØÝœ )¨YÐ!7Ñ8Ô8ØØð	
ñ 
ô 
ˆ
ð 	�Š�qÑÔÐÝ-Ø¨°VÀZð
ñ 
ô 
ˆð 	�Š˜ÑÔÐÝÝ(¨Ô)<¸jÔ>PÑQÔQÐSTñ	
ô 	
ð 	
ð 	
õ )Ø L¸*ðñ ô €Jð ‡N‚N�1ÑÔÐÝ Ñ"Ô"€FÝ)ØØ!ØØð	ñ ô €Kð ‡O‚O�FÑÔÐÝ�zÔ)¨;Ô+>Ñ?Ô?Ð?Ð?Ð?s1   ÂA)DÄD%ÈH:È:H>	ÉH>	ÊJ'Ê'J+Ê.J+c                  óÒ   — t           j                             d¦  «        } t          |                      dd¦  «        ¦  «        }t          dd¬¦  «                             |¦  «         dS )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�     s[   € õ
 Œ)×
Ò
 Ñ
"Ô
"€CÝ
# C§I¢I¨b°#Ñ$6Ô$6Ñ
7Ô
7€CÝ ;¸ÐAÑAÔA×EÒEÀcÑJÔJÐJÐJÐJrc   c                 ó  — t           j                             | ¦  «        }t          j        ddgt          ¬¦  «        }|                     dd¦  «        }t          |j        Ž }t          d|¬¦  «        }| 	                    |¦  «         t          j
        t          j        |j        ¦  «        ¦  «        dk    sJ ‚|                     |¦  «        }|j        d         dk    sJ ‚|                     |¦  «        }t          j        |d         ¦  «        j
        dk    sJ ‚t          |                     |¦  «        |¦  «         t!          j        t$          ¦  «        5  | 	                    |d d…         ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	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Ô
3€CÝŒ7�B˜�8¥4Ð(Ñ(Ô(€DØ�	Š	�"�cÑÔ€AÝ  $¤*Ð-€LÝ ¨A¸LÐIÑIÔI€EØ	‡I‚Iˆa�L„L€LÝŒ7•2”9˜Uœ]Ñ+Ô+Ñ,Ô,°Ò1Ð1Ð1Ð1à�OŠO˜AÑÔ€EØŒ;�qŒ>˜QÒÐÐÐØ×$Ò$ UÑ+Ô+€FÝŒ9�V˜A”YÑÔÔ$¨Ò)Ð)Ð)Ð)Ý˜eŸošo¨fÑ5Ô5°uÑ=Ô=Ð=õ 
Œ•zÑ	"Ô	"ð ð Ø�	Š	�!�B�Q�B”%ÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÅFÆFÆFc                  ó|  — t          dd¬¦  «        \  } }t          dd¬¦  «        }|                     | ¦  «         t          t	          |j        |¦  «        d¦  «         t          dd	d¬
¦  «        \  }}t          dd¬¦  «        }|                     |¦  «         t          t	          |j        |¦  «        d¦  «         d S )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ÑHÔH€JØ‡N‚N�5ÑÔÐÝÝ$ ZÔ%7¸ÑEÔEÀqñô ð õ *°¸EÐPRÐSÑSÔSÑ€Gˆ]Ý(°A¸xÐHÑHÔH€JØ‡N‚N�7ÑÔÐÝÝ$ ZÔ%7¸ÑGÔGÈñô ð ð ð rc   c                 óh  — g }| |fD ]„}t          |¦  «        }|                     ¦   «         dz   }t          j        ||f¦  «        }d|t          j        |¦  «        |f<   |                     t          j        ||j        ¦  «        ¦  «         Œ…|d         |d         k                         ¦   «         sJ ‚dS )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ŒHˆØ�GŠG‰IŒI˜‰MˆÝŒx˜˜A˜ÑÔˆØ"#ˆ�RŒY�q‰\Œ\˜3ÐÑØ�Š�œ˜t T¤VÑ,Ô,Ñ-Ô-Ð-Ð-Ø�QŒK˜8 Aœ;Ò&×+Ò+Ñ-Ô-Ð-Ð-Ð-Ð-Ð-rc   c                 ó¸  — d\  }}}t           j                             | ¦  «        }t          j        ||f¦  «        }t	          j        ¦   «         D �]C}t          d¦  «        D �]/}d|                     ||f¬¦  «        z  }|dt          j        |¦  «        d d …t           j	        f         z  z  }|| 
                    d¬¦  «        d d …t           j	        f         z  }t          j        ||¬¦  «        }	|	d d …d d	…f                              t          d
¬¦  «        }
t	          |         ||¬¦  «        \  }}}}|                     d¬¦  «         t!          ||
d|z   ¦  «         t#          |||¦  «        }t#          ||
|¦  «        }t%          ||¦  «         �Œ1�ŒEt'          j        t*          ¦  «        5  t#          |dz   ||¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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Ô
3€Cõ ”7˜A˜q˜6‘?”?€LÝ!Ô&Ñ(Ô(ð -ñ -ˆÝ�q‘”ð 	-ñ 	-ˆAØ�c—j’j q¨! f�jÑ-Ô-Ñ-ˆAØ�•r”y ‘|”| A A A¥r¤z MÔ2Ñ2Ñ2ˆAØ�—’˜Q�‘”   ¥2¤: Ô.Ñ.ˆAåÔ# A¨gÐ6Ñ6Ô6ˆCà˜A˜A˜A˜r ˜r˜Eœ
×)Ò)­#°EÐ)Ñ:Ô:ˆIÝ'5°gÔ'>Ø ð(ñ (ô (Ñ$ˆH�a˜ 1ð
 �MŠM˜qˆMÑ!Ô!Ð!ÝØØØDÀwÑNñô ð õ ˜!˜X xÑ0Ô0ˆCÝ˜1˜i¨Ñ2Ô2ˆDÝ! # tÑ,Ô,Ð,Ñ,ñ-	-õ2 
Œ•zÑ	"Ô	"ð 2ð 2Ý�˜1‘˜h¨Ñ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2s   Æ-GÇGÇGc                 óš  — d\  }}}t           j                             | ¦  «        }d|                     ||f¬¦  «        z  }|dt          j        |¦  «        d d …t           j        f         z  z  }||                     d¬¦  «        d d …t           j        f         z  }t          j        |d¬¦  «        }|d d …d d	…f          	                    t          ¦  «        }t          d         |¦  «        \  }}	}
}	|                     d¬¦  «         t          ||d
¦  «         t          |||
¦  «        }t          |||
¦  «        }t          ||¦  «         d S )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  sL  € Ø(0Ñ%€Iˆz˜:Ý
Œ)×
Ò
Ð 2Ñ
3Ô
3€CØˆc�jŠj˜y¨*Ð5ˆjÑ6Ô6Ñ6€AØˆ�rŒy˜Ñ#Ô# A A A¥r¤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Ô
1€CÝ˜
 N°HÑ=Ô=€IÝ˜#˜yÑ)Ô)Ð)Ð)Ð)rc   Úmetric_param_gridc                 óæ  — t           j                             d¬¦  «        }|                     d¬¦  «        }t	          |¦  «        }| \  }}|                     ¦   «         }t          j        |                     ¦   «         Ž D ]q}t          t          ||¦  «        ¦  «        }t          j        |fi |¤Ž}	t          ||	¦  «        }
t          ||	¦  «        }t           j                             |
|¦  «         ŒrdS )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Ô#6Ð7ð -ð -ˆÝ•c˜$ ‘o”oÑ&Ô&ˆÝ(Ô3°FÐEÐE¸fÐEÐEˆÝ˜q /Ñ2Ô2ˆÝ! # Ñ7Ô7ˆÝ
Œ
×Ò  VÑ,Ô,Ð,Ð,ð-ð -rc   c            	      ó‚  — 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 ]L}t          d||¬¦  «        }|                     | ¦  «         t          t          |j	        |¦  «        d¦  «         ŒMd S )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˜Y˜Y¨	¨	¨	°9°9°9¸i¸i¸iÈÈÈÐSÑTÔT€AÝ”(Ð-Ð-Ð-Ñ.Ô.€KÝ# A°1À5ÐIÑIÔI€LØ˜,¨¬Ñ7Ñ8€LÝ!2°1°lÀKÑ!PÔ!PÑ€L�,à;ð 
ð 
ˆÝ,Ø '¸ð
ñ 
ô 
ˆ
ð 	�Š�qÑÔÐåÝ(¨Ô);¸[ÑIÔIÈ1ñ	
ô 	
ð 	
ð 	
ð
ð 
rc   c                  ó¤   — t          j        g d¢¦  «        } t          | dd¬¦  «        }t          d|d¬¦  «        }|                     | ¦  «         d S )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ì   ·  sj   € õ 	Œð	
ð 	
ð 	
ñ	ô 	€Aõ& $ A r¸Ð>Ñ>Ô>€LÝ"Ø <¸ðñ ô €Dð
 	‡H‚HˆQ�K„K€K€K€Krc   c                 ó  — d\  }}t           j                             | ¦  «        }t          j        ||f¦  «        }t	          d¦  «        D ]´}d|                     ||f¬¦  «        z  }|dt          j        |¦  «        d d …t           j        f         z  z  }||                     d¬¦  «        d d …t           j        f         z  }t          |¦  «        }t          ||¬¦  «        }t          |d	         |d	         ¦  «         Œµd S )
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Ô
3€Cå”7˜A˜q˜6‘?”?€LÝ�1‰XŒXð Cð CˆØ�#—*’* 1 a &�*Ñ)Ô)Ñ)ˆØ	ˆS•2”9˜Q‘<”<   ¥2¤: Ô.Ñ.Ñ.ˆØ	ˆQ�VŠV˜ˆV‰^Œ^˜A˜A˜A�rœz˜MÔ*Ñ*ˆå$ Q™<œ<ÐÝ" 1°<Ð@Ñ@Ô@ˆåÐ+¨AÔ.°¸qÔ0AÑBÔBÐBÐBðCð Crc   c           	      ó”  — d\  }}t           j                             | ¦  «        }t          j        ||f¦  «        }t	          d¦  «        D �]R}d|                     ||f¬¦  «        z  }|dt          j        |¦  «        d d …t           j        f         z  z  }||                     d¬¦  «        d d …t           j        f         z  }t          |d¬	¦  «        }t          ||d¬
¦  «        }|d         }	|d         }
t          |	|
¦  «         |d         }|d         }t          ||¦  «         dD ]s}t          |||d¬¦  «        d         }t          ||d¬¦  «        d         }|d         }|d         }|d         }|d         }t          ||¦  «         t          ||¦  «         Œt�ŒTt          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&         ¦  «         Œ¯d S ))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Ô
3€Cå”7˜A˜q˜6‘?”?€LÝ�1‰XŒXð !Rñ !RˆØ�#—*’* 1 a &�*Ñ)Ô)Ñ)ˆØ	ˆS•2”9˜Q‘<”<   ¥2¤: Ô.Ñ.Ñ.ˆØ	ˆQ�VŠV˜ˆV‰^Œ^˜A˜A˜A�rœz˜MÔ*Ñ*ˆå$ Q¸Ð=Ñ=Ô=ÐÝ" 1°<ÐQUÐVÑVÔVˆð !1°Ô 3ÐØ,¨QÔ/Ðõ 	Ð0Ð2EÑFÔFÐFð -¨RÔ0ÐØ(¨Ô,ˆå!Ð"3°_ÑEÔEÐEà8ð 	Rð 	RˆGÝ+Ø °gÈtð ñ  ô  àô Ðõ ".¨a¸ÐRVÐ!WÑ!WÔ!WØô"Ðð /¨rÔ2ˆOØ 2°2Ô 6ÐØ"2°1Ô"5ÐØ$6°qÔ$9Ð!Ý% oÐ7HÑIÔIÐIÝ%Ð&9Ð;PÑQÔQÐQÐQñ	Rõ  	Œà˜Ð$Ø˜Ð$Ø˜Ð%Ø˜Ð%Ø˜Ð%Ø˜Ð$ð	
ñ		ô 		€Aõ ”Xà'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'ð	
ñô €Nõ œà'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø(Ð(Ð(ð	
ñô Ðõ œà'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø'Ð'Ð'Ø(Ð(Ð(ð	
ñô Ðõ œH Q™KœKÑ€IˆzÝ”W˜i¨Ð3Ñ4Ô4€Nå" 1°dÐ;Ñ;Ô;ÐÝ  °ÐQUÐVÑVÔVÐõ �~ a a a¨¨!¨ eÔ,Ð.@ÀÔ.CÑDÔDÐDÝ�~ a a a¨¨!¨ eÔ,Ð.>¸qÔ.AÑBÔBÐBõ ˜n¨Q¨Q¨Q°¨TÔ2Ð4FÀqÔ4IÑJÔJÐJÝ˜n¨Q¨Q¨Q°¨TÔ2Ð4DÀQÔ4GÑHÔHÐHà7Ð7Ð7€OØ)Ð+<Ð=€OÝ °ÑAÔAð Fð FÑˆ�Ý)¨!¸TÈ7ÐSÑSÔSÐÝ'Ø˜N°GÈTð
ñ 
ô 
Ðõ
 	˜7 1 1 1 b q b 5œ>Ð+=¸aÔ+@ÑAÔAÐAÝ˜7 1 1 1 b q b 5œ>Ð+;¸AÔ+>Ñ?Ô?Ð?õ 	" '¨!¨!¨!¨Q¨$¤-Ð1CÀAÔ1FÑGÔGÐGÝ! '¨!¨!¨!¨Q¨$¤-Ð1AÀ!Ô1DÑEÔEÐEÐEðFð Frc   c                  óB  — 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  |                     | ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	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Ô0€AÝ˜! ¨Ð+Ñ+Ô+€AÝ¨Q¸Ð?Ñ?Ô?€AÝ	Œ•kÑ	"Ô	"ð ð Ø	�Šˆa‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á1BÂBÂBc                  óö  — t           j                             d¦  «        } t          j        |                      dd¬¦  «                             t           j        d¬¦  «        ¦  «        }|                      t          |¦  «        ¦  «        }t          ||¦  «        }t          ||¦  «        D ]\  }}||         |k    s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¬¦  «         d S )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  sG  € Ý
Œ)×
Ò
 Ñ
"Ô
"€CÝŒ9�S—[’[ ¨2�[Ñ.Ô.×5Ò5µb´gÀEÐ5ÑJÔJÑKÔK€DØ�XŠX•c˜$‘i”iÑ Ô €Få�T˜6Ñ"Ô"€AÝ˜$ Ñ'Ô'ð ð ‰
ˆˆUØ�Œv˜Šˆˆˆˆå”˜2¥R¤WÐ-Ñ-Ô-¨c¨c°¨cÔ2€JÝ”7˜2˜sÑ#Ô# C C a CÔ(€LÝ˜ \Ñ2Ô2€Eåˆa��RœW Sµ´Ð8Ñ8Ô8¸aÀQÐGÑGÔGÐGÝ�!�U¥¤¨µB´GÐ!<Ñ!<Ô!<À!ÈÐKÑKÔKÐKÐKÐKrc   c                  ó†  — t           j                             d¦  «        } |                      dd¦  «        }t	          |dd¬¦  «        }t          |¬¦  «        }t          t          t          dd¬¦  «        ¬¦  «        }|                     |¦  «         |                     |¦  «         t          |j	        |j	        ¦  «         d S )	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ÑQÔQðñ ô €Eð 
‡I‚Iˆa�L„L€LØ	‡I‚Iˆa�L„L€LÝ�u”} e¤mÑ4Ô4Ð4Ð4Ð4rc   c                  ó€  — t           j                             d¦  «        } |                      dd¦  «        }t	          |dd¬¦  «        }t	          |dd¬¦  «        }t          |¬¦  «        }t          |¬¦  «        }|                     |¦  «         |                     |¦  «         t          |j        |j        ¦  «         d S )	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Ñ IÔ IÐÝ#°Ð>Ñ>Ô>€EÝ#Ð1JÐKÑKÔK€EØ	‡I‚Iˆa�L„L€LØ	‡I‚Iˆa�L„L€LÝ�u”} e¤mÑ4Ô4Ð4Ð4Ð4rc   c                  ó(  — t           j                             d¦  «        } |                      dd¦  «        }t	          |dd¬¦  «        }t          d|¬¦  «        }|                     |¦  «         |j        d         }|j        j        d         }||dz
  k    sJ ‚d	}|                      d
d¦  «        }t	          |dd¬¦  «        }t          ||¬¦  «        }|                     |¦  «         |j        d         }|j        j        d         }|||z
  k    sJ ‚d S )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Ñ
JÔ
J€CØ‡G‚GˆA�J„J€JØ”˜”
€IØŒmÔ! !Ô$€GØ�i !‘mÒ#Ð#Ð#Ð#ð €JØ�	Š	�#�qÑÔ€AÝ# A r¸Ð>Ñ>Ô>€LÝ
!¨ZÀlÐ
SÑ
SÔ
S€CØ‡G‚GˆA�J„J€JØ”˜”
€IØŒmÔ! !Ô$€GØ�i *Ñ,Ò,Ð,Ð,Ð,Ð,Ð,rc   c                  ó  — t           j                             d¦  «        } |                      dd¦  «        }t          j        d¦  «        }t          j        ¦   «         D ](} t          |¦  «        ||¬¦  «        d         dk    sJ ‚Œ)d S )Nr   r&   r-   rK   )r4   r5   r6   r  Úeyer
   rO   r"   )r=   r>   r.   ra   s       rA   Útest_n_componentsr4  ±  sŽ   € å
Œ)×
Ò
 Ñ
"Ô
"€CØ�Š��A‰Œ€Aõ ”6˜!‘9”9€Lå&Ô-Ñ/Ô/ð Sð SˆØ,�˜|Ñ,Ô,¨Q¸\ÐJÑJÔJÈ1ÔMÐQRÒRÐRÐRÐRÐRðSð Src   c                  óP  — d} t           j                             d¦  «        }|                     | | ¦  «        }t          j        g d¢¦  «        }t          | | |t           j        ¬¦  «        } G d„ d¦  «        } |¦   «         }t          |||j        ¬¦  «         |j	        dk    sJ ‚d S )	NrJ   r   )TFFT)r  r  rR   Ú	return_asc                   ó   — e Zd Zd„ Zd„ ZdS )ú>test_affinity_passed_to_fix_connectivity.<locals>.FakeAffinityc                 ó   — d| _         d S )Nr   ©Úcounter)Úselfs    rA   Ú__init__zGtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.__init__É  s   € ØˆDŒLˆLˆLrc   c                 ó0   — | 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ŒLØ”<Ðrc   N)Ú__name__Ú
__module__Ú__qualname__r=  r@  © rc   rA   ÚFakeAffinityr8  È  s2   € € € € € ð	ð 	ð 	ð	 ð 	 ð 	 ð 	 ð 	 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Ð.Ð.Ð.Ñ/Ô/€Då  T¨t¸$Í"Ì*ÐUÑUÔU€Lð ð  ð  ð  ð  ñ  ô  ð  ð 
ˆ‰Œ€Bå� ¸¼ÐEÑEÔEÐEàŒ:˜Š?ˆ?ˆ?ˆ?ˆ?ˆ?rc   )rm   rn   ro   c                 ób  — t           j                             |¦  «        }t          j        ddgt          ¬¦  «        }d}|                     |d¦  «        }t          |j        Ž }d}d |fD ]Å}t          d ||| ¬¦  «        }	|	 	                    |¦  «         |	j
        }
t          t          j        |	j
        ¦  «        ¦  «        }t          |          } |||d d¬¦  «        \  }}}}}t          j        ||k    ¦  «        dz   }||k    sJ ‚t          |||¬	¦  «        }t          j        |
|¦  «        sJ ‚ŒÆd S )
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Ô
3€CÝŒ7�B˜�8¥4Ð(Ñ(Ô(€DØ€IØ�	Š	�)˜RÑ Ô €AÝ  $¤*Ð-€LàÐØ�|Ð$ð Hð HˆÝ,ØØ1ØØð	
ñ 
ô 
ˆ
ð 	�Š�qÑÔÐØ&Ô.ÐÝ #¥B¤I¨jÔ.@Ñ$AÔ$AÑ BÔ BÐõ & gÔ.ˆØ>J¸lØ˜D¨TÀ4ð?
ñ ?
ô ?
Ñ;ˆ�, ¨&°)õ Ô˜YÐ*<Ò<Ñ=Ô=ÀÑAð 	"ð )Ð,AÒAÐAÐAÐAå 'Ø,°xÈ(ð!
ñ !
ô !
Ðõ Œ~Ð/Ð1FÑGÔGÐGÐGÐGÐGð3Hð Hrc   c                 óv  — t           j                             | ¦  «        }d}|                     dd|df¬¦  «        }t	          d dd¬¦  «                             |¦  «        }t          |d	d
¬¦  «        }t          j        |t           j        ¦  «         t          j	        |dk    ¦  «        sJ ‚|j
        |k    sJ ‚d S )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Ô
3€CØ€IØ�Š�D˜# Y° NˆÑ3Ô3€Aõ )Ø¨C¸ðñ ô ç	‚cˆ!�f„fð õ ' q°ÀÐBÑBÔB€MÝÔ�]¥B¤FÑ+Ô+Ð+ÝŒ6�- #Ò%Ñ&Ô&Ð&Ð&Ð&ØÔ! YÒ.Ð.Ð.Ð.Ð.Ð.rc   c                 ó¦  — t           j                             | ¦  «        }d}|                     dd|df¬¦  «        }d}t	          d |d¬¦  «                             |¦  «        }|j        }t          |d	d
¬¦  «        }t          j        |t           j	        ¦  «         t          j
        |¦  «        D ]¡}||k    }	||	         d d …|	f                              d¬¦  «                             ¦   «         }
||	         d d …|	 f                              d¬¦  «                             ¦   «         }|	                     ¦   «         dk    r|
|k     sJ ‚||k    sJ ‚Œ¢d S )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Ô
3€CØ€IØ�Š�C˜ 9¨a .ˆÑ1Ô1€AàÐÝ(ØÐ,>Èðñ ô ç	‚cˆ!�f„fð ð Ô€FÝ˜1 [°AÐ6Ñ6Ô6€AåÔ�Q�œÑÔÐÝ”˜6Ñ"Ô"ð >ð >ˆØ  Eš/ˆàˆoÔ˜q˜q˜q /Ð1Ô2×6Ò6¸AÐ6Ñ>Ô>×BÒBÑDÔDð 	 ð ˆoÔ˜q˜q˜q ?Ð"2Ð2Ô3×7Ò7¸QÐ7Ñ?Ô?×CÒCÑEÔEð 	!ð ×ÒÑ Ô  1Ò$Ð$Ø*Ð-?Ò?Ð?Ð?Ð?Ø'Ð+=Ò=Ð=Ð=Ð=Ð=ð>ð >rc   )Ú	thresholdÚy_truerj   rK   rö   g      ø?c                 óŒ   — dgdgg}t          d || ¬¦  «        }|                     |¦  «        }t          ||¦  «        dk    sJ ‚d S )Nr   rK   rT  )r   Úfit_predictr   )r*   re  rf  r>   Ú	clustererÚy_preds         rA   Ú?test_agglomerative_clustering_with_distance_threshold_edge_caserk  *  sb   € ð ˆˆqˆcˆ
€AÝ'Ø¨I¸wðñ ô €Ið ×"Ò" 1Ñ%Ô%€FÝ˜v vÑ.Ô.°!Ò3Ð3Ð3Ð3Ð3Ð3rc   c                  ó,  — dgdgg} t          j        t          d¬¦  «        5  t          d d ¬¦  «                             | ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t          dd¬¦  «                             | ¦  «         d d d ¦  «         n# 1 swxY w Y   dgdgg} t          j        t          d¬¦  «        5  t          d dd¬	¦  «                             | ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )
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ð QÝ¨4ÀDÐIÑIÔI×MÒMÈaÑPÔPÐPðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qõ 
Œ•zÐ):Ð	;Ñ	;Ô	;ð Kð KÝ¨1ÀÐCÑCÔC×GÒGÈÑJÔJÐJðKð Kð Kñ Kô Kð Kð Kð Kð Kð Kð Køøøð Kð Kð Kð Kð ˆˆqˆcˆ
€AÝ	Œ•zÐ)LÐ	MÑ	MÔ	Mð ð ÝØ°ÀUð	
ñ 	
ô 	
ç
Š#ˆa‰&Œ&ˆ&ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s5   ¢%AÁAÁAÁ9%B*Â*B.Â1B.Ã&D	Ä	DÄDc                  ó   — t           j                             d¦  «        } |                      dd¦  «        }t	          j        t          d¬¦  «        5  t          dd¬¦  «                             |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )	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  sâ   € õ Œ)×
Ò
 Ñ
"Ô
"€CØ�Š��A‰Œ€AÝ	ŒÝØOð
ñ 
ô 
ð Qð Qõ 	  }¸jÐIÑIÔI×MÒMÈaÑPÔPÐPð	Qð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð Qð Qð Qs   Á%BÂBÂ
Bc                  óÜ  — t          j        g d¢g d¢g d¢g d¢g d¢g¦  «        } t          | ¦  «        d         dk    sJ ‚t           j                             d¦  «        }|                     dd¦  «        }t          |¦  «        }t          d	| d
¬¦  «        }d}t          j	        t          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          | d
¬¦  «        }t          j	        t          |¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   t          |j        |j        ¦  «         t          |j        |j        ¦  «         dS )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  € õ œ(àˆOˆOØˆOˆOØˆOˆOØˆOˆOØˆOˆOð	
ñô Ðõ  Ð 3Ñ4Ô4°QÔ7¸1Ò<Ð<Ð<Ð<å
Œ)×
Ò
 Ñ
"Ô
"€CØ�	Š	�!�RÑÔ€Aå Ñ"Ô"€FÝ3ØÐ+>È
ðñ ô Ðð ;€CÝ	Œ•k¨Ð	-Ñ	-Ô	-ð *ð *Ø×!Ò! &Ñ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *õ (Ø(°*ðñ ô €Iõ 
Œ•k¨Ð	-Ñ	-Ô	-ð ð Ø�Š�aÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ �yÔ(Ð*?Ô*GÑHÔHÐHÝ�yÔ*Ð,AÔ,KÑLÔLÐLÐLÐLs$   Â2CÃCÃCÄD-Ä-D1Ä4D1ÚAgglomerationc           	      óü   — t          j        ddgddgddgddgddgddgg¦  «        }d}t          j        t          |¬¦  «        5   | d ¬¦  «                             |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrK   rJ   r,   r   z>`metric=None` is deprecated in version 1.4 and will be removedre   )r~   )r4   rg   r8   r\   ÚFutureWarningr<   )rt  r>   Úwarn_msgs      rA   Ú$test_deprecation_warning_metric_Nonerx  }  s×   € õ 	Œ�1�a�&˜1˜a˜& 1 a &¨1¨a¨&°1°a°&¸1¸a¸&ÐAÑBÔB€AØO€HÝ	Œ•m¨8Ð	4Ñ	4Ô	4ð *ð *Øˆ˜TÐ"Ñ"Ô"×&Ò& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *s   Á A1Á1A5Á8A5)[Ú__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  rx  rD  rc   rA   ú<module>rŽ     sÂ  ððð ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð
 6Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø :Ð :Ð :Ð :Ð :Ð :Ø *Ð *Ð *Ð *Ð *Ð *Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uðð ð ð ð ð ð ð ð ð ð ð ð KÐ JÐ JÐ JÐ JÐ JØ .Ð .Ð .Ð .Ð .Ð .Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .ðIð Ið Ið2=ð =ð =ð.7ð 7ð 7ð03ð 3ð 3ð+ð +ð +ð „×ÒÐ9¸KÈÐ;TÑUÔUØ„×ÒÐ,¨t°U¨mÑ<Ô<Ø„×Ò˜Ð$MÐ$MÐ$MÑNÔNð5ð 5ñ OÔNñ =Ô<ñ VÔUð5ð8 „×Ò˜¨.Ñ9Ô9ð[@ð [@ñ :Ô9ð[@ð|Kð Kð Kðð ð ð*ð ð ð"	.ð 	.ð 	.ð#2ð #2ð #2ðP*ð *ð *ð2 „×ÒÐ,Ð.DÑEÔEð-ð -ñ FÔEð-ð$
ð 
ð 
ð(ð ð ð>Cð Cð Cð(sFð sFð sFðl
ð 
ð 
ðLð Lð Lð"
5ð 
5ð 
5ð	5ð 	5ð 	5ð-ð -ð -ð4	Sð 	Sð 	Sðð ð ð4 „×Ò˜Ð$CÐ$CÐ$CÑDÔDð#Hð #Hñ EÔDð#HðL/ð /ð /ð">ð >ð >ð6 „×Ò˜Ð$CÐ$CÐ$CÑDÔDØ„×ÒØ˜s Q¨ F˜m¨c°A°q°6¨]¸SÀ1ÀaÀ&¸MÐJñô ð	4ð 	4ñô ñ EÔDð	4ðð ð ð	Qð 	Qð 	Qð$Mð $Mð $MðP „×ÒØÐ-Ð/CÐDñô ð*ð *ñô ð*ð *ð *rc   