§
    qŠtjx�  ã            	       ó:  — 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=        j@        e	j=         >                    d"e7¦  «        d#„ ¦   «         ¦   «         ZAd$„ ZBd%„ ZCd&„ ZDd'„ ZEd(„ ZFd)„ ZGe	j=         >                    d*e+¦  «        d+„ ¦   «         ZHd,„ ZId-„ ZJd.„ ZKd/„ ZLd0„ ZMd1„ ZNd2„ ZOd3„ ZPd4„ ZQd5„ ZRd6„ ZSe	j=         >                    dg d7¢¦  «        d8„ ¦   «         ZTd9„ ZUd:„ ZVe	j=         >                    dg d7¢¦  «        e	j=         >                    d;d<d=dgfd>d=dgfd?ddgfg¦  «        d@„ ¦   «         ¦   «         ZWdA„ ZXdB„ ZYdC„ ZZe	j=         >                    dDeeg¦  «        dE„ ¦   «         Z[e	j=         >                    dDeeg¦  «        e	j=         >                    dFdGdHg¦  «        dI„ ¦   «         ¦   «         Z\dS )Jz=
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       úe/var/www/html/CA-Chatbot/venv/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   �Œâ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   rn   ©r[   r.   Úmetricr*   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Ô
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ÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ùõ #Ô'Ñ)Ô)ð 
ð 
ˆå,ØÝœ )¨YÐ!7Ñ8Ô8ØØð	
ñ 
ô 
ˆ
ð 	�Š�qÑÔÐÝ-Ø¨°VÀZð
ñ 
ô 
ˆð 	�Š˜ÑÔÐÝÝ(¨Ô)<¸jÔ>PÑQÔQÐSTñ	
ô 	
ð 	
ð 	
õ )Ø L¸*ðñ ô €Jð ‡N‚N�1ÑÔÐÝ Ñ"Ô"€FÝ)ØØ!ØØð	ñ ô €Kð ‡O‚O�FÑÔÐÝ�zÔ)¨;Ô+>Ñ?Ô?Ð?Ð?Ð?s   ÂA)DÄD%ÈH:È:H>	ÉH>	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¢   (  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±   9  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È   E  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Í   m  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  V  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&  c  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*  t  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_treer2  �  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_componentsr5  §  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>  rA  © rc   rA   ÚFakeAffinityr9  ¾  s2   € € € € € ð	ð 	ð 	ð	 ð 	 ð 	 ð 	 ð 	 rc   rF  )r.   r1   r´   )
r4   r5   r6   rM   rg   r   Úndarrayr   rA  r<  )r(   r=   r>   rR   r.   rF  Úfas          rA   Ú(test_affinity_passed_to_fix_connectivityrI  ³  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_thresholdrS  Í  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   rU  rV  rJ   rW  r   r·   rK   )r4   r5   r6   r  r   r<   r€   r   rX  rY  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_thresholdre    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   rU  )r   Úfit_predictr   )r*   rf  rg  r>   Ú	clustererÚy_preds         rA   Ú?test_agglomerative_clustering_with_distance_threshold_edge_caserl     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_parametersrn  0  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_matrixrp  ?  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   rj  s          rA   Ú@test_precomputed_connectivity_metric_with_2_connected_componentsrt  K  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Ú
Clusteringc                 óš  — t           j                             d¦  «        }t          j        ddgt          ¬¦  «        }d}|                     |d¦  «        }t          |j        Ž } | d|                     ¦   «         dd¬¦  «        }t          j
        t          ¦  «        5  |                     |¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
z[Check that we raise an error when 'euclidean' or 'l2' are not passed with
    ward linkage.r   rD   rE   rI   rH   r3   rm   r~   N)r4   r5   r6   r;   rL   rM   r   rN   r…   r8   r9   r:   r<   )ru  r=   rR   rv   r>   r.   rw   s          rA   Ú*test_agglomeration_ward_constrained_metricrw  r  s  € õ Œ)×
Ò
 Ñ
"Ô
"€CÝŒ7�B˜�8¥4Ð(Ñ(Ô(€DØ€IØ�	Š	�)˜RÑ Ô €AÝ  $¤*Ð-€Là�ØØ!×)Ò)Ñ+Ô+ØØð	ñ ô €Jõ 
Œ•zÑ	"Ô	"ð ð Ø�Š�qÑÔÐðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ÂC Ã CÃCr   rŽ   Úl2c                 ó6  — t           j                             d¦  «        }t          j        ddgt          ¬¦  «        }d}|                     |d¦  «        }t          |j        Ž } | d|                     ¦   «         |d¬¦  «        }| 	                    |¦  «         dS )zHCheck that we can pass 'euclidean' and 'l2' as metric with Ward linkage.r   rD   rE   rI   rm   r~   N)
r4   r5   r6   r;   rL   rM   r   rN   r…   r<   )ru  r   r=   rR   rv   r>   r.   rw   s           rA   Ú!test_agglomeration_ward_euclideanrz  †  s�   € õ Œ)×
Ò
 Ñ
"Ô
"€CÝŒ7�B˜�8¥4Ð(Ñ(Ô(€DØ€IØ�	Š	�)˜SÑ!Ô!€AÝ  $¤*Ð-€Là�ØØ!×)Ò)Ñ+Ô+ØØð	ñ ô €Jð ‡N‚N�1ÑÔÐÐÐrc   )]Ú__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   Úno_check_spmatrixrŒ   r‘   r™   r¢   r±   rÈ   rÍ   rß   rå   rí   rò   r  r  r&  r*  r-  r2  r5  rI  rS  r\  re  rl  rn  rp  rt  rw  rz  rE  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ðP@ð P@ñ :Ô9ñ ÔðP@ðf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ðN „×Ò˜Ð(?ÐAUÐ'VÑWÔWðð ñ XÔWðð& „×Ò˜Ð(?ÐAUÐ'VÑWÔWØ„×Ò˜ K°Ð#6Ñ7Ô7ðð ñ 8Ô7ñ XÔWðð ð rc   