
    0Phv}              	       8   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 ZYdS )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                     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       g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_hierarchical.pytest_linkage_miscrB   6   s   
)


#
#C


A	z	"	" ' 'Q&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
z	"	" 6 6QRWV__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
3Cs1v|AAAA!DEEE q#6
7
7
7Cs1v|ADDDQ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7B84(((DD1acN		"cA $*-L&-// = =3?<Cl4
 4
 4
0,& agaj.1$8}}x'72222 ]:&& 	< 	<L276??;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< ]:&& 	= 	=LRaR|<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	== =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?UW6X6X6X3'8V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 agaj.1$8}}x'722222&-// 7 7!A$i 	7 	7F ""  \+..  :F,R; ; ;7Hgx                            
 !'!*nq(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7B84(((D		"cA $*-L&-// 3 3.:lCl/
 /
 /
+'8V agaj.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     	1a&1a&!""A
GC	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7B84(((DI		)R  A $*-L(!-+  J NN1 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
3C7B84(((DI		)R  A $*-L< & &,g
 
 

 	q	#iiG0)	  J NN1'F729V,,--33333M'""""FM'"""",g
 
 


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


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

 	q-VZ
 
 
 	()<j>PQQST	
 	
 	
 	
 )L*  J NN1""F)!	  K OOF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
#CIIb#$6$6
7
7C;AAAEEc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
3C7B84(((D		"cA $*-L ALIIIE	IIaLLL729U]++,,1111OOAE;q>Q$$U++F9VAY$))))eoof55u=== 
z	"	"  		!BQB%                 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;(AxHHHJNN5$Z%7EEq   *EPRSSSG](AxHHHJNN7$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| . .HHGGIIMxA"#RYq\\3tTV,,----QK8A;&++-------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,   GAq!
)

 2
3
3C 7Aq6??L!&(( - -q 	- 	-Acjjq!fj---Ary||AAArzM222AQ2:..A#Ag666CAAArrE
))#E)::I'5g'>( ( ($Ha1
 MMqM!!!DwN   !Xx00C1i22D!#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%Iz:
)

 2
3
3Ccjjy*5j666Ary##AAArzM2	22AQ2:	&&A

Ah
/
/
/CBQBZ&&s++N-h7::Ha1 MMqMB   *h
1
1C
NH==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*FJ??D!:#4#4#6#67 - -c$oo&&(3FEEf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     	)))YYY			999iiiSTTA(---..K#A15IIIL,78L!21lK!P!PL,; 
 
,'
 
 

 	q();[II1	
 	
 	
 	

 
rc   c                      t          j        g d          } t          | dd          }t          d|d          }|                    |            d S )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     sj     		
 	
 	
	 	A& $Ar>>>L"<  D
 	HHQKKKKKrc   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    
 DAq
)

 2
3
3C7Aq6??L1XX C C#**1a&*)))	S29Q<<2:...	QVVV^^AAArzM**$Q<<"1<@@@+A.q0A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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   
 DAq
)

 2
3
3C7Aq6??L1XX !R !R#**1a&*)))	S29Q<<2:...	QVVV^^AAArzM**$Q==="1<QUVVV !1 3,Q/ 	02EFFF -R0(,!"3_EEE8 	R 	RG+gt       ".aRV!W!W!W" /r2O 22 6"21"5$6q$9!%o7HIII%&9;PQQQQ	R  	$$%%%$	
		 		A X'''''''''''''''	
 N ''''''''''''(((	
  ''''''''''''(((	
  HQKKIzWi344N"1d;;; QUVVV ~aaa!e,.@.CDDD~aaa!e,.>q.ABBB nQQQT24Fq4IJJJnQQQT24DQ4GHHH777O)+<=OAA F F)!T7SSS'NGT
 
 

 	7111bqb5>+=a+@AAA7111bqb5>+;A+>??? 	"'!!!Q$-1CA1F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     	1a&1a&!""A
4-%/00A!+++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9S[[2[..55bgE5JJKKDXXc$ii  FT6""A$''  
Uv2RW---ccc2J72s##CCaC(L\22EaRWS888aQGGGG!UBG!<!<!<!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#Aqu===L#>>>E#-15QQQ  E 
IIaLLL	IIaLLLu}em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#Aqu===L 0AD I I I#>>>E#1JKKKE	IIaLLL	IIaLLLu}em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#Aqu===L "Q\
J
J
JCGGAJJJ
Im!!$Gi!m#### J		#qA#Ar>>>L
!Zl
S
S
SCGGAJJJ
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!99L&-// S S,|,,Q\JJJ1MQR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    DLLLrc   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    LLALL<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 Tt$"*UUUL                
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
3C7B84(((DI		)R  A $*-L|$ H H,1	
 
 

 	q&. #BIj.@$A$A B B &g.>JlDT4?
 ?
 ?
;,&) Y*<<==A 	" ),AAAAA ',x(!
 !
 !
 ~/1FGGGGGG3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   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
3
3CID#YN33A )C  	c!ff  'qBBBM]BF+++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   irD   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
3CIC9a.11A(,>  	c!ff  F1[A666AQ6"" > > E/oqqq/1266A6>>BBDD 	  oqqq?"22377Q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     qc
A'Iw  I ""1%%Fvv..!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   
qc
A	z):	;	;	; Q Q4DIIIMMa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 qc
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Ma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 )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   ri  s          rA   @test_precomputed_connectivity_metric_with_2_connected_componentsrs  U  s    (OOOOOOOOOO	
    344Q71<<<<
)


"
"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)Z__doc__r   r   	functoolsr   tempfiler   numpyr4   r8   scipy.clusterr   scipy.sparse.csgraphr   sklearn.clusterr   r   r	   sklearn.cluster._agglomerativer
   r   r   r   "sklearn.cluster._hierarchical_fastr   r   r   sklearn.datasetsr   r    sklearn.feature_extraction.imager   sklearn.metricsr   sklearn.metrics.clusterr   r   sklearn.metrics.pairwiser   r   r   r   'sklearn.metrics.tests.test_dist_metricsr   sklearn.neighborsr   sklearn.utils._fast_dictr   sklearn.utils._testingr   r   r    r!   r"   sklearn.utils.fixesr#   rB   rY   r_   rb   ri   markparametrizery   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r)  r,  r1  r4  rH  rR  r[  rd  rk  rm  ro  rs  rD  rc   rA   <module>r     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 703 3 3+ + + 9K;TUU,tUm<<$M$M$MNN5 5 ON =< VU58 .99[@ [@ :9[@|K K K  *  "	. 	. 	.#2 #2 #2P* * *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sQFmcAq6]S1a&MJ 	4 	4  ED	4  	Q 	Q 	Q$M $M $M $M $Mrc   