
    -iv}              	          S r SSKrSSKrSSKJr  SSKJr  SSKrSSK	r	SSK
Jr  SSKJr  SSKJrJrJr  SSKJrJrJrJr  SS	KJrJrJr  SS
KJrJr  SSKJr  SSK J!r!  SSK"J#r#J$r$  SSK%J&r&J'r'J(r(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/  SSK0J1r1J2r2J3r3J4r4J5r5  SSK6J7r7  S r8S r9S r:S r;S r<\	Rz                  R}                  SSS/5      \	Rz                  R}                  SSS/5      \	Rz                  R}                  S/ S Q5      S! 5       5       5       r?\	Rz                  R}                  S"\75      S# 5       r@S$ rAS% rBS& rCS' rDS( rES) rF\	Rz                  R}                  S*\+5      S+ 5       rGS, rHS- rIS. rJS/ rKS0 rLS1 rMS2 rNS3 rOS4 rPS5 rQS6 rR\	Rz                  R}                  S/ S7Q5      S8 5       rSS9 rTS: rU\	Rz                  R}                  S/ S7Q5      \	Rz                  R}                  S;S<S=S/4S>S=S/4S?SS/4/5      S@ 5       5       rVSA rWSB rXSC rYg)Dz=
Several basic tests for hierarchical clustering procedures

    N)partial)mkdtemp)	hierarchy)connected_components)AgglomerativeClusteringFeatureAgglomeration	ward_tree)_TREE_BUILDERS_fix_connectivity_hc_cutlinkage_tree)average_merge	max_mergemst_linkage_core)make_circles
make_moons)grid_to_graph)DistanceMetric)adjusted_rand_scorenormalized_mutual_info_score)PAIRED_DISTANCEScosine_distancesmanhattan_distancespairwise_distances)METRICS_DEFAULT_PARAMS)kneighbors_graph)IntFloatDict)assert_almost_equalassert_array_almost_equalassert_array_equalcreate_memmap_backed_dataignore_warnings)LIL_CONTAINERSc                  `   [         R                  R                  S5      n U R                  SS9n[        R
                  " [        5         [        USS9  S S S 5        [        R
                  " [        5         [        U[         R                  " S5      S9  S S S 5        [        5       R                  U5        [        U5      n[        USS	9n[        US
   [        USS	9S
   5        [        U[        S	9n[        US
   [        USS	9S
   5        g ! , (       d  f       N= f! , (       d  f       N= f)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       Z/var/www/html/venv/lib/python3.13/site-packages/sklearn/cluster/tests/test_hierarchical.pytest_linkage_miscrB   6   s    
))


#C


A	z	"Q& 
# 
z	"QRWWV_5 
# q! 1
C
s]
3Cs1v|AA!DE q#6
7Cs1v|ADQGH# 
#	" 
#	"s   	D6D
D
D-c                     [         R                  R                  S5      n [         R                  " SS/[        S9nSUSS2SS24'   U R                  SS5      n[        UR                  6 n[        R                  " 5        H  nU" UR                  US9u  pVpxS	UR                  S
   -  S
-
  n	[        U5      U-   U	:X  d   e[        R                  " [        5         U" UR                  [         R                  " S5      S9  S S S 5        [        R                  " [        5         U" UR                  S S US9  S S S 5        M     g ! , (       d  f       NJ= f! , (       d  f       M  = f)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77B84(DD1acN		"cA $**-L&--/3?CCl4
0 aggaj.1$8}x'7222 ]]:&2776?; ' ]]:&Ra|< '& 0 '& '&s   &E!E
E	
E#	c            	      ,   [         R                  R                  S5      n U R                  SS5      nXS   4 Hy  n[	        5          [
        R                  " [        5         [        UR                  SS9u  p4pVS S S 5        S S S 5        SUR                  S   -  S-
  n[        W5      W-   U:X  a  My   e   [        R                  " 5        H  nXS   4 Hv  n[	        5          [
        R                  " [        5         U" UR                  SS9u  p4pVS S S 5        S S S 5        SUR                  S   -  S-
  n[        W5      W-   U:X  a  Mv   e   M     g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nj= f! , (       d  f       Ns= f)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   sE   
))


"C		"cAd) k*6?UW6X38 +  aggaj.1$8}x'7222  '--/A$iF "\\+.:FR;7Hx / #
 !''!*nq(Gx=8+w666   0 +*  /. #"sH   E# E8E# F;E4	F
E E##
E1	4
F>F
Fc                  r   [         R                  R                  S5      n [         R                  " SS/[        S9nU R                  SS5      n[        UR                  6 n[        R                  " 5        H@  nU" UR                  US9u  pVpxSUR                  S   -  S-
  n[        U5      U-   U:X  a  M@   e   g )	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77B84(D		"cA $**-L&--/.:CCl/
+8 aggaj.1$8}x'7222 0    c                      [         R                  " SS/SS//5      n Sn[        R                  " [        US9   [        U SS9  S S S 5        g ! , (       d  f       g = f)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      sH     	1a&1a&!"A
GC	z	-Q* 
.	-	-s   A
Azn_clusters, distance_threshold)N      ?)rD   Ncompute_distancesTFr*   wardcompleteaveragesinglec                    [         R                  R                  S5      n[         R                  " SS/[        S9nSnUR                  US5      n[        UR                  6 n[        U UUUUS9n	U	R                  U5        U(       d  UbR  [        U	S5      (       d   eU	R                  R                  S   n
U
S-   nU	R                  R                  US-
  4:X  d   eg [        U	S5      (       a   eg )	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77B84(DI		)R A $**-L(!-+J NN1/;z<0000))//2
q.$$**w{n<<<:|44444rc   lil_containerc           
         [         R                  R                  U 5      n[         R                  " SS/[        S9nSnUR                  US5      n[        UR                  6 nS GH  n[        SXgS9nUR                  U5         [        5       n	[        SUU	US9nUR                  U5        UR                  n
[         R                  " [         R                  " U
5      5      S:X  d   e [        R                  " U	5        [        SXgS9nSUl        UR                  U5        [#        [%        UR                  U
5      S	5        S Ul        UR                  U5        [         R                  " [         R                  " UR                  5      5      S:X  d   e[        SU" UR)                  5       S S2S S24   5      US9n[*        R,                  " [.        5         UR                  U5        S S S 5        GM     [        SUR)                  5       S
SS9n[*        R,                  " [.        5         UR                  U5        S S S 5        [0        R2                  " 5        H|  n[        S[         R                  " XD45      USS9nUR                  U5        [        SS USS9nUR                  U5        [#        [%        UR                  UR                  5      S	5        M~     [        SUSS9nUR                  U5        [5        U5      n[        SUSSS9nUR                  U5        [7        UR                  UR                  5        g ! [        R                  " W	5        f = f! , (       d  f       GM  = f! , (       d  f       GN7= f)NrD   rE   rI   rH   rl   r[   r.   r*   )r[   r.   memoryr*   FrK   r3   rm   )r[   r.   metricr*   rn   r/   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r   labels_r(   uniqueshutilrmtreecompute_full_treer   r   r.   toarrayr8   r9   r:   r   keysr   r    )global_random_seedrz   r=   rR   rv   r>   r.   r*   rw   tempdirlabelsr~   clustering2X_dists                 rA   test_agglomerative_clusteringr      s    ))

 2
3C77B84(DI		)R A $**-L<,

 	q	#iG0)	J NN1''F77299V,-333MM'",


 (-
$q89K9KVTVWX"&
qwwryy!3!345;;;,&|';';'=crc3B3h'GH


 ]]:&NN1 '&K =T )!))+	J 
z	"q 
# #''),)!78	

 	q-VZ
 	()<)<j>P>PQST	
 *& )L*J NN1"F)!	K OOFz));+>+>?C MM'"& '& 
#	"s%   A#L:M&M(:M
M%	(
M7c                      [         R                  R                  S5      n [        U R	                  SS5      5      n[        SSS9R                  U5        g)z`AgglomerativeClustering must work on mem-mapped dataset.

Non-regression test for issue #19875.
r   rH   rI   	euclideanrp   r~   r*   N)r4   r5   r6   r!   rM   r   r<   )r=   Xmms     rA   +test_agglomerative_clustering_memory_mappedr     sB    
 ))


"C
#CIIb#$6
7C;AEEcJrc   c                    [         R                  R                  U 5      n[         R                  " SS/[        S9nUR                  SS5      n[        UR                  6 n[        SUS9nUR                  U5        [         R                  " [         R                  " UR                  5      5      S:X  d   eUR                  U5      nUR                  S   S:X  d   eUR                  U5      n[         R                  " US   5      R                  S:X  d   e[        UR                  U5      U5        [         R"                  " [$        5         UR                  US S 5        S S S 5        g ! , (       d  f       g = f)	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
3C77B84(D		"cA $**-L ALIE	IIaL77299U]]+,111OOAE;;q>Q$$U+F99VAY$$)))eoof5u= 
z	"		!BQ% 
#	"	"s   	E''
E5c                  "   [        SSS9u  p[        SSS9nUR                  U 5        [        [	        UR
                  U5      S5        [        SS	SS
9u  p4[        SSS9nUR                  U5        [        [	        UR
                  U5      S5        g )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(AxHJNN5$Z%7%7Eq *EPRSG(AxHJNN7$Z%7%7Grc   c                 Z   / nX4 H  n[        U5      nUR                  5       S-   n[        R                  " XE45      nSU[        R                  " U5      U4'   UR                  [        R                  " XfR                  5      5        M     US   US   :H  R                  5       (       d   eg)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|HGGIMxx"#RYYq\3tVV,-  QK8A;&++----rc   c                 <   Su  pn[         R                  R                  U 5      n[         R                  " X45      n[        R
                  " 5        GH  n[        S5       H  nSUR                  X4S9-  nUS[         R                  " U5      S S 2[         R                  4   -  -  nXR                  SS9S S 2[         R                  4   -  n[        R                  " XS9n	U	S S 2S S	24   R                  [        S
S9n
[        U   " XS9u  ppUR                  SS9  [!        UU
SU-   5        [#        X;U5      n[#        X:U5      n[%        X5        M     GM     [&        R(                  " [*        5         [#        WS-   WU5        S S S 5        g ! , (       d  f       g = f)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  sf   GA!
))

 2
3C 77A6?L!&&(qAcjjqfj--Aryy|ArzzM222AQ2::..A##A6CArrE
))#E):I'5g'>($H
 MMqM!DwN !x0C12D!#,-  )4 
z	"1h1 
#	"	"s   3F
Fc                 (   Su  pn[         R                  R                  U 5      nSUR                  X4S9-  nUS[         R                  " U5      S S 2[         R
                  4   -  -  nXUR                  SS9S S 2[         R
                  4   -  n[        R                  " USS9nUS S 2S S	24   R                  [        5      n[        S   " U5      u  ppUR                  SS9  [        UUS
5        [        X8U
5      n[        X7U
5      n[        X5        g )Nr   r   r'   r   rK   r   rp   r   rJ   z8linkage tree differs from scipy impl for single linkage.)r4   r5   r6   r7   r   r   r   r   r*   r   r   r
   r   r    r   r   )r   rv   
n_featuresr[   r=   r>   r   children_scipyrT   r   rV   r   	cut_scipys                rA   )test_vector_scikit_single_vs_scipy_singler   w  s   (0%I:
))

 2
3Ccjjy5j66Aryy#ArzzM2	22AQ2::	&&A


Ah
/CBQBZ&&s+N-h7:H MMqMB *
1C
H=I#)rc   metric_param_gridc                    [         R                  R                  SS9nUR                  SS9n[	        U5      nU u  pEUR                  5       n[        R                  " UR                  5       6  Hc  n[        [        Xg5      5      n[        R                  " U40 UD6n	[        X)5      n
[        X95      n[         R                  R                  X5        Me     g)zgThe 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??D!!:#4#4#67c$o&(33FEfEq2!#7


, 8rc   c            	      `   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      n [         R                  " / SQ5      n[        U SSS9nSX"R                  -   -  n[	        XS	5      u  p#S
 H>  n[        SXBS9nUR                  U 5        [        [        UR                  U5      S5        M@     g )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	9iSTA((-.K#A15IL,78L!21K!PL;,'

 	q(););[I1	
 <rc   c                      [         R                  " / SQ5      n [        U SSS9n[        SUSS9nUR	                  U 5        g )N))y&1?gQ?)r   gMbX?)r   gEԸ?g rh?/$?r   ;On?r   r   r   r   r   r   r   )r   g~jt?)r   gOn?)r   g;On?rD   Fr   r,   rm   r|   )r4   rg   r   r   r<   )r>   r.   rm   s      rA   test_connectivity_propagationr     sE     		
	A& $Ar>L"<D
 	HHQKrc   c                    Su  p[         R                  R                  U 5      n[         R                  " X45      n[	        S5       H  nSUR                  X4S9-  nUS[         R                  " U5      S S 2[         R                  4   -  -  nXfR                  SS9S S 2[         R                  4   -  n[        U5      n[        XdS9n[        US	   US	   5        M     g )
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    
 DA
))

 2
3C77A6?L1X#**1&*))	S299Q<2::...	VVV^ArzzM**$Q<"1@+A.q0AB rc   c           	          Su  p[         R                  R                  U 5      n[         R                  " X45      n[	        S5       H  nSUR                  X4S9-  nUS[         R                  " U5      S S 2[         R                  4   -  -  nXfR                  SS9S S 2[         R                  4   -  n[        USS	9n[        XdSS
9nUS   n	US   n
[        X5        US   nUS   n[        X5        S HJ  n[        XdUSS9S   n[        XmSS9S   nUS   nUS   nUS   nUS   n[        UU5        [        UU5        ML     M     [         R                  " SS/SS/SS/SS/SS/SS//5      n[         R                  " / SQ/ SQ/ SQ/ SQ/ S Q/5      n[         R                  " / SQ/ SQ/ SQ/ S!Q/ S"Q/5      n[         R                  " / SQ/ SQ/ SQ/ S#Q/ S$Q/5      n[         R                  " U5      u  nn[         R                  " UU45      n[        USS	9n[        UUSS
9n[        US S 2S S%24   US   5        [        US S 2S S%24   US   5        [        US S 2S%4   US&   5        [        US S 2S%4   US&   5        / S'QnUU/n[        UU5       Hy  u  nn[        USUS(9n[        UUUSS9n[        US S 2S S%24   US   5        [        US S 2S S%24   US   5        [        US S 2S%4   US&   5        [        US S 2S%4   US&   5        M{     g ))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gw7@g})J@gZ!E@gn]#g!܄@g,8g!Yz @gRա&<agڎF@gT!@)g      @r   g0rq5?       @)      ?g      @gAVJS?r   )g        r   gL/u@r   )      @       @g6SHD4"@r   )      @      "@gwʴG8@r   )r   r   gwfۣ@r   )r   r   g63C2@r   )r   r   go;@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   
 DA
))

 2
3C77A6?L1X#**1&*))	S299Q<2::...	VVV^ArzzM**$Q="1QUV !1 3,Q/ 	0F -R0(,!"3E8G+gt   ".aRV!W" /r2O 22 6"21"5$6q$9!%o7HI%&9;PQ 9+ J 	$$%%%$	
		A XX'''''	
N ''''(	
 ''''(	
 HHQKIzWWi34N"1d; QUV ~a!e,.@.CD~a!e,.>q.AB nQT24Fq4IJnQT24DQ4GH7O)+<=OA)!T7S'NGT

 	71bqb5>+=a+@A71bqb5>+;A+>? 	"'!Q$-1CA1FG!'!Q$-1A!1DE Brc   c                  (   [         R                  " SS/SS//5      n [         R                  " SS/SS//5      n[        SSUS9n[        USS9n[        R
                  " [        5         UR                  U 5        S S S 5        g ! , (       d  f       g = f)	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  `  sw     	1a&1a&!"A
4-%/0A!+AQ?A	k	"	a 
#	"	"s   (B
Bc            	         [         R                  R                  S5      n [         R                  " U R	                  SSS9R                  [         R                  SS95      nU R                  [        U5      5      n[        X5      n[        X5       H  u  pEX4   U:X  a  M   e   [         R                  " S[         R                  S9S S S	2   n[         R                  " SS
5      S S S	2   n[        Xg5      n[        X8[         R                  " S[         R                  S9SSS9  [        X8[         R                  " S[         R                  S9SSS9  g )Nr   rI   rD   r'   Fr   rH   rE   rJ   rj   rK   )rR   n_an_b)r4   r5   r6   r   randintr   intprandrQ   r   r   r   fullr   r;   r   )	r=   r   rO   dkeyvalue
other_keysother_valuesothers	            rA   test_int_float_dictr%  m  s    
))


"C99S[[2[.55bggE5JKDXXc$i FT"A$'
v ( 2RWW-cc2J772s#CaC(L2EaRWWS8aQG!BGG!<!Krc   c                  >   [         R                  R                  S5      n U R                  SS5      n[	        USSS9n[        US9n[        [        [        SSS9S9nUR                  U5        UR                  U5        [        UR                  UR                  5        g )	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#Aqu=L#>E#-15QE 
IIaL	IIaLu}}emm4rc   c                  :   [         R                  R                  S5      n U R                  SS5      n[	        USSS9n[	        USSS9n[        US9n[        US9nUR                  U5        UR                  U5        [        UR                  UR                  5        g )	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#Aqu=L 0AD I#>E#1JKE	IIaL	IIaLu}}emm4rc   c                     [         R                  R                  S5      n U R                  SS5      n[	        USSS9n[        SUS9nUR                  U5        UR                  S   nUR                  R                  S   nXTS-
  :X  d   eS	nU R                  S
S5      n[	        USSS9n[        XbS9nUR                  U5        UR                  S   nUR                  R                  S   nXTU-
  :X  d   eg )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#Aqu=L "Q\
JCGGAJ
Imm!!!$G!m### J		#qA#Ar>L
!Z
SCGGAJ
Imm!!!$G*,,,,rc   c                      [         R                  R                  S5      n U R                  SS5      n[         R                  " S5      n[
        R                  " 5        H  n[        U5      " XS9S   S:X  a  M   e   g )Nr   r&   r-   rK   )r4   r5   r6   r  eyer
   rO   r"   )r=   r>   r.   ra   s       rA   test_n_componentsr4    se    
))


"CAA 66!9L&--/|,QJ1MQRRRR 0rc   c                  8   Sn [         R                  R                  S5      nUR                  X 5      n[         R                  " / SQ5      n[        X U[         R                  S9n " S S5      nU" 5       n[        X$UR                  S9  UR                  S:X  d   eg )	NrJ   r   )TFFT)r  r  rR   	return_asc                        \ rS rSrS rS rSrg)>test_affinity_passed_to_fix_connectivity.<locals>.FakeAffinityi  c                     SU l         g )Nr   counter)selfs    rA   __init__Gtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.__init__  s	    DLrc   c                 D    U =R                   S-  sl         U R                   $ )NrK   r:  )r<  argsr   s      rA   	incrementHtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.increment  s    LLAL<<rc   r:  N)__name__
__module____qualname____firstlineno__r=  rA  __static_attributes__ rc   rA   FakeAffinityr8    s    		 rc   rI  )r.   r1   r   )
r4   r5   r6   rM   rg   r   ndarrayr   rA  r;  )r(   r=   r>   rR   r.   rI  fas          rA   (test_affinity_passed_to_fix_connectivityrL    s}     D
))


"C		$A88./D T$"**UL    
BE::??rc   )rm   rn   ro   c                 F   [         R                  R                  U5      n[         R                  " SS/[        S9nSnUR                  US5      n[        UR                  6 nSnS U4 H  n[        S UUU S9n	U	R                  U5        U	R                  n
[        [         R                  " U	R                  5      5      n[        U    nU" XXS SS9u  pnnn[         R                  " UU:  5      S-   nUU:X  d   e[        XUS	9n[         R                   " U
U5      (       a  M   e   g )
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_thresholdrV    s1    ))

 2
3C77B84(DI		)R A $**-L|$,1	

 	q&.. #BIIj.@.@$A B &g.>JT4?
;&) Y*<<=A 	" ),AAAA ',(!
 ~~/1FGGGG3 %rc   c                 d   [         R                  R                  U 5      nSnUR                  SSUS4S9n[	        S SSS9R                  U5      n[        US	S
S9n[         R                  " U[         R                  5        [         R                  " US:  5      (       d   eUR                  U:X  d   eg )NrD   ii,  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
3CID#YN3A )C	c!f  'qBM]BFF+66-#%&&&&!!Y...rc   c                 <   [         R                  R                  U 5      nSnUR                  SSUS4S9nSn[	        S USS9R                  U5      nUR                  n[        US	S
S9n[         R                  " U[         R                  5        [         R                  " U5       Hv  nXh:H  n	Xy   S S 2U	4   R                  SS9R                  5       n
Xy   S S 2U	) 4   R                  SS9R                  5       nU	R                  5       S:  a  X:  d   eX:  a  Mv   e   g )NrI   irD   r   r'   r,   rp   rX  rY  rJ   rZ  r   r   rK   )r4   r5   r6   r  r   r<   r   r   r[  r\  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_thresholdrh    s)   
))

 2
3CIC9a.1A(,>	c!f  F1[A6AQ6" /q/1266A6>BBD 	  q?"22377Q7?CCE 	!  1$*???'=== #rc   )	thresholdy_truerj   rK   r   g      ?c                 h    S/S//n[        S XS9nUR                  U5      n[        X%5      S:X  d   eg )Nr   rK   rX  )r   fit_predictr   )r*   ri  rj  r>   	clusterery_preds         rA   ?test_agglomerative_clustering_with_distance_threshold_edge_casero  *  sE     qc
A'II ""1%Fv.!333rc   c                     S/S//n [         R                  " [        SS9   [        S S S9R	                  U 5        S S S 5        [         R                  " [        SS9   [        SSS9R	                  U 5        S S S 5        S/S//n [         R                  " [        SS9   [        S SSS	9R	                  U 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       g = f)
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_parametersrq  :  s    
qc
A	z):	;4DIMMaP 
< 
z):	;1CGGJ 
< qc
A	z)L	MU	

#a& 
N	M 
<	; 
<	; 
N	Ms#   C CC" 
C
C"
C0c                      [         R                  R                  S5      n U R                  SS5      n[        R
                  " [        SS9   [        SSS9R                  U5        S S S 5        g ! , (       d  f       g = f)	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_matrixrs  I  s`     ))


"CAA	O
 	 }jIMMaP	
 
 
s   A..
A<c                     [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      n [        U 5      S   S:X  d   e[         R                  R	                  S5      nUR                  SS5      n[        U5      n[        S	U S
S9nSn[        R                  " [        US9   UR                  U5        SSS5        [        U S
S9n[        R                  " [        US9   UR                  U5        SSS5        [        UR                  UR                  5        [        UR                  UR                  5        g! , (       d  f       N= f! , (       d  f       N`= f)zCheck 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   rm  s          rA   @test_precomputed_connectivity_metric_with_2_connected_componentsrw  U  s    ((	
   34Q71<<<
))


"C		!RA"F3+>
 ;C	k	-!!&) 
. ((*I 
k	-a 
. y((*?*G*GHy**,A,K,KL 
.	- 
.	-s   D4E4
E
E)Z__doc__r   r   	functoolsr   tempfiler   numpyr4   r8   scipy.clusterr   scipy.sparse.csgraphr   sklearn.clusterr   r   r	   sklearn.cluster._agglomerativer
   r   r   r   "sklearn.cluster._hierarchical_fastr   r   r   sklearn.datasetsr   r    sklearn.feature_extraction.imager   sklearn.metricsr   sklearn.metrics.clusterr   r   sklearn.metrics.pairwiser   r   r   r   'sklearn.metrics.tests.test_dist_metricsr   sklearn.neighborsr   sklearn.utils._fast_dictr   sklearn.utils._testingr   r   r    r!   r"   sklearn.utils.fixesr#   rB   rY   r_   rb   ri   markparametrizery   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r)  r,  r1  r4  rL  rV  r_  rh  ro  rq  rs  rw  rH  rc   rA   <module>r     sF         # 5 T T  
 6 : * U  K . 1  /I2=.703+ 9K;TU,tUm<$MN5 O = V58 .9[@ :[@|K*"	.#2P*2 ,.DE- F-$
(>C(sFl
L"
5	5-4	S4 $CD#H E#HL/">6 $CDsQFmcAq6]S1a&MJ	4 E	4	Q$Mrc   