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

    N)partial)mkdtemp)	hierarchy)connected_components)AgglomerativeClusteringFeatureAgglomeration	ward_tree)_TREE_BUILDERS_fix_connectivity_hc_cutlinkage_tree)average_merge	max_mergemst_linkage_core)make_circles
make_moons)grid_to_graph)DistanceMetric)adjusted_rand_scorenormalized_mutual_info_score)PAIRED_DISTANCEScosine_distancesmanhattan_distancespairwise_distances)METRICS_DEFAULT_PARAMS)kneighbors_graph)IntFloatDict)assert_almost_equalassert_array_almost_equalassert_array_equalcreate_memmap_backed_dataignore_warnings)LIL_CONTAINERSc                  p   t         j                  j                  d      } | j                  d      }t	        j
                  t              5  t        |d       d d d        t	        j
                  t              5  t        |t        j                  d             d d d        t               j                  |       t        |      }t        |d	      }t        |d
   t        |d	      d
          t        |t        	      }t        |d
   t        |d	      d
          y # 1 sw Y   xY w# 1 sw Y   xY w)N*   )   r&   sizefoo)linkage   r,   connectivityprecomputedaffinityr   cosine	manhattan)nprandomRandomStatenormalpytestraises
ValueErrorr   onesr   fitr   r    r   )rngXdisress       b/var/www/html/bid-api/venv/lib/python3.12/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 :!D, D),D5c                     t         j                  j                  d      } t        j                  ddgt              }d|ddddf<   | j                  dd      }t        |j                   }t        j                         D ]  } ||j                  |      \  }}}}d	|j                  d
   z  d
z
  }	t        |      |z   |	k(  sJ t        j                  t              5   ||j                  t        j                  d             d d d        t        j                  t              5   ||j                  d d |       d d d         y # 1 sw Y   ExY w# 1 sw Y   xY w)Nr   
   dtyper,      2   d   r-         r+   )r4   r5   r6   r;   boolrandnr   shaper
   valuesTlenr8   r9   r:   )
r=   maskr>   r.   tree_builderchildrenn_componentsn_leavesparentn_nodess
             rA   test_structured_linkage_treerY   O   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            	         t         j                  j                  d      } | j                  dd      }||d   fD ]{  }t	               5  t        j                  t              5  t        |j                  d      \  }}}}d d d        d d d        d|j                  d   z  dz
  }t              z   |k(  r{J  t        j                         D ]  }||d   fD ]x  }t	               5  t        j                  t              5   ||j                  d      \  }}}}d d d        d d d        d|j                  d   z  dz
  }t              z   |k(  rxJ   y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   VxY w# 1 sw Y   ZxY w)Nr   rH   rI   rD   )
n_clustersrJ   rK   )r4   r5   r6   rM   r"   r8   warnsUserWarningr	   rP   rN   rQ   r
   rO   )r=   r>   this_XrT   rX   rV   rW   rS   s           rA   test_unstructured_linkage_treer_   f   sQ   
))


"C		"cAad) k*6?UW6X3'8V +  aggaj.1$8}x'7222  '--/!A$iF "\\+.:FR;7Hgx / #
 !''!*nq(Gx=8+w666   0 +*  /. #"sH   E E=E"E7<E+	E7EEE(	+E40E77F c                  x   t         j                  j                  d      } t        j                  ddgt              }| j                  dd      }t        |j                   }t        j                         D ]C  } ||j                  |      \  }}}}d|j                  d   z  dz
  }t        |      |z   |k(  rCJ  y )	Nr   rD   rE   rH   rI   r-   rJ   rK   )r4   r5   r6   r;   rL   rM   r   rN   r
   rO   rP   rQ   )	r=   rR   r>   r.   linkage_funcrT   rX   rV   rW   s	            rA   test_height_linkage_treerb   ~   s    
))


"C77B84(D		"cA $**-L&--/.:CCl/
+'8V aggaj.1$8}x'7222 0    c                      t        j                  ddgddgg      } d}t        j                  t        |      5  t        | d       d d d        y # 1 sw Y   y xY w)Nr   rK   z;Cosine affinity cannot be used when X contains zero vectorsmatchr2   r0   )r4   arrayr8   r9   r:   r   )r>   msgs     rA   test_zero_cosine_linkage_treeri      sH     	1a&1a&!"A
GC	z	-Q* 
.	-	-s   AAzn_clusters, distance_threshold)N      ?)rD   Ncompute_distancesTFr*   wardcompleteaveragesinglec                    t         j                  j                  d      }t        j                  ddgt              }d}|j                  |d      }t        |j                   }t        | ||||      }	|	j                  |       |s|Lt        |	d      sJ |	j                  j                  d   }
|
dz   }|	j                  j                  |dz
  fk(  sJ y t        |	d      rJ y )	Nr   rD   rE   rI   rH   )r[   r.   r*   distance_thresholdrk   
distances_rK   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   hasattr	children_rs   )r[   rk   rr   r*   r=   rR   	n_samplesr>   r.   
clustering
n_childrenrX   s               rA   'test_agglomerative_clustering_distancesry      s     ))


"C77B84(DI		)R A $**-L(!-+J NN1/;z<000))//2
q.$$**w{n<<<:|4444rc   lil_containerc           
         t         j                  j                  |       }t        j                  ddgt              }d}|j                  |d      }t        |j                   }dD ]  }t        d||      }|j                  |       	 t               }	t        d||	|      }|j                  |       |j                  }
t        j                  t        j                  |
            dk(  sJ 	 t        j                  |	       t        d||      }d|_        |j                  |       t#        t%        |j                  |
      d	       d |_        |j                  |       t        j                  t        j                  |j                              dk(  sJ t        d ||j)                         d dd df         |      }t+        j,                  t.              5  |j                  |       d d d         t        d|j)                         d
d      }t+        j,                  t.              5  |j                  |       d d d        t1        j2                         D ]  }t        dt        j                  ||f      |d      }|j                  |       t        dd |d      }|j                  |       t#        t%        |j                  |j                        d	        t        d|d      }|j                  |       t5        |      }t        d|dd      }|j                  |       t7        |j                  |j                         y # t        j                  	       w xY w# 1 sw Y   
xY w# 1 sw Y   4xY w)NrD   rE   rI   rH   rl   r[   r.   r*   )r[   r.   memoryr*   FrK   r3   rm   )r[   r.   metricr*   rn   r/   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r   labels_r(   uniqueshutilrmtreecompute_full_treer   r   r.   toarrayr8   r9   r:   r   keysr   r    )global_random_seedrz   r=   rR   rv   r>   r.   r*   rw   tempdirlabelsr~   clustering2X_dists                 rA   test_agglomerative_clusteringr      s    ))

 2
3C77B84(DI		)R A $**-L<,g

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


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


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

 	q-VZ
 	()<)<j>P>PQST	
 *& )L*J NN1"F)!	K OOFz));+>+>?C MM'"& '& 
#	"s%   	A#MM%.M2M"%M/	2M<c                      t         j                  j                  d      } t        | j	                  dd            }t        dd      j                  |       y)zhAgglomerativeClustering must work on mem-mapped dataset.

    Non-regression test for issue #19875.
    r   rH   rI   	euclideanrp   r~   r*   N)r4   r5   r6   r!   rM   r   r<   )r=   Xmms     rA   +test_agglomerative_clustering_memory_mappedr     sB    
 ))


"C
#CIIb#$6
7C;AEEcJrc   c                    t         j                  j                  |       }t        j                  ddgt              }|j                  dd      }t        |j                   }t        d|      }|j                  |       t        j                  t        j                  |j                              dk(  sJ |j                  |      }|j                  d   dk(  sJ |j                  |      }t        j                  |d         j                  dk(  sJ t        |j                  |      |       t!        j"                  t$              5  |j                  |d d        d d d        y # 1 sw Y   y xY w)	NrD   rE   rH   rI   r&   r[   r.   rK   r   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r(   r   r   	transforminverse_transformr   r8   r9   r:   )r   r=   rR   r>   r.   aggloX_redX_fulls           rA   test_ward_agglomerationr     s   
))

 2
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%%E.c                  >   t        dd      \  } }t        dd      }|j                  |        t        t	        |j
                  |      d       t        dd	d
      \  }}t        dd      }|j                  |       t        t	        |j
                  |      d       y )Ng?r%   )noiserandom_staterJ   rp   )r[   r*   rK   rj   g?)factorr   r   )r   r   r<   r   r   r   r   )moonsmoon_labelsrw   circlescircle_labelss        rA   test_single_linkage_clusteringr   2  s    #$R@E;(AxHJNN5$Z%7%7Eq *EPRSG](AxHJNN7$Z%7%7Grc   c                 L   g }| |fD ]  }t        |      }|j                         dz   }t        j                  ||f      }d|t        j                  |      |f<   |j                  t        j                  ||j                                |d   |d   k(  j                         sJ y)zUtil for comparison with scipyrK   r   N)	rQ   maxr4   zerosarangeappenddotrP   all)cut1cut2co_clustcutnkecuts          rA   assess_same_labellingr   C  s    Hd|HGGIMxxA"#RYYq\3tTVV,-  QK8A;&++---rc   c                 \   d\  }}}t         j                  j                  |       }t        j                  ||f      }t	        j
                         D ]  }t        d      D ]  }d|j                  ||f      z  }|dt        j                  |      d d t         j                  f   z  z  }||j                  d      d d t         j                  f   z  }t        j                  ||      }	|	d d d d	f   j                  t        d
      }
t	        |   ||      \  }}}}|j                  d       t!        ||
d|z          t#        |||      }t#        ||
|      }t%        ||         t'        j(                  t*              5  t#        dz   |       d d d        y # 1 sw Y   y xY w)NrD   r&      r&   皙?r'         @rK   axismethodrJ   Fcopyr-   z2linkage tree differs from scipy impl for linkage: )r4   r5   r6   r;   r
   r   ranger7   r   newaxismeanr   r*   astypeintsortr    r   r   r8   r9   r:   )r   r   pr   r=   r.   r*   ir>   outru   rT   _rV   r   cut_s                   rA   test_sparse_scikit_vs_scipyr   O  s|   GAq!
))

 2
3C 77Aq6?L!&&(qAcjjq!fj--Aryy|ArzzM222AQ2::..A##Ag6CArrE
))#E):I'5g'>($Ha1
 MMqM!DwN !Xx0C1i2D!#t,-  )4 
z	"1h1 
#	"	"s   F""F+c                 J   d\  }}}t         j                  j                  |       }d|j                  ||f      z  }|dt        j                  |      d d t         j
                  f   z  z  }||j                  d      d d t         j
                  f   z  }t        j                  |d      }|d d d d	f   j                  t              }t        d   |      \  }}	}
}	|j                  d       t        ||d
       t        |||
      }t        |||
      }t        ||       y )Nr   r   r'   r   rK   r   rp   r   rJ   z8linkage tree differs from scipy impl for single linkage.)r4   r5   r6   r7   r   r   r   r   r*   r   r   r
   r   r    r   r   )r   rv   
n_featuresr[   r=   r>   r   children_scipyrT   r   rV   r   	cut_scipys                rA   )test_vector_scikit_single_vs_scipy_singler   w  s   (0%Iz:
))

 2
3Ccjjy*5j66Aryy#ArzzM2	22AQ2::	&&A


Ah
/CBQBZ&&s+N-h7:Ha1 MMqMB *h
1C
NH=I#y)rc   metric_param_gridc                    t         j                  j                  d      }|j                  d      }t	        |      }| \  }}|j                         }t        j                  |j                          D ]e  }t        t        ||            }t        j                  |fi |}	t        ||	      }
t        ||	      }t         j                  j                  |
|       g y)zoThe MST-LINKAGE-CORE algorithm must work on mem-mapped dataset.

    Non-regression test for issue #19875.
    rK   )seed)   r,   r'   N)r4   r5   r6   r7   r!   r   	itertoolsproductrO   dictzipr   
get_metricr   testingassert_equal)r   r=   r>   r   r~   
param_gridr   valskwargsdistance_metricmstmst_mms               rA   #test_mst_linkage_core_memory_mappedr     s     ))

Q

'C


 A
#A
&C*FJ??D!!:#4#4#67c$o&(33FEfEq/2!#7


V, 8rc   c            	      l   t        j                  g dg dg dg dg dg dg      } t        j                  g d      }t        | dd      }d||j                  z   z  }t	        | |d	      \  }}d
D ]A  }t        d||      }|j                  |        t        t        |j                  |      d       C y )N)r   r   r   )rK   rK   rK   )rJ   rJ   rJ   )r   r   rK   rK   rJ   rJ   r   Fn_neighborsinclude_selfrj   r   )rp   ro   ro   rm   )r[   r*   r.   rK   )
r4   rg   r   rP   r   r   r<   r   r   r   )r>   true_labelsr.   rU   r*   rw   s         rA   test_identical_pointsr     s     	)Y	9iSTA((-.K#A15IL,78L!21lK!PL,;,'

 	q(););[I1	
 <rc   c                      t        j                  g d      } t        | dd      }t        d|d      }|j	                  |        y )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                    d\  }}t         j                  j                  |       }t        j                  ||f      }t	        d      D ]  }d|j                  ||f      z  }|dt        j                  |      d d t         j                  f   z  z  }||j                  d      d d t         j                  f   z  }t        |      }t        ||      }t        |d	   |d	           y )
NrD   r&   r&   r   r'   r   rK   r   r-   r   )r4   r5   r6   r;   r   r7   r   r   r   r	   r    )	r   r   r   r=   r.   r   r>   out_unstructuredout_structureds	            rA   test_ward_tree_children_orderr     s    
 DAq
))

 2
3C77Aq6?L1X#**1a&*))	S299Q<2::...	QVVV^ArzzM**$Q<"1<@+A.q0AB rc   c           	      V   d\  }}t         j                  j                  |       }t        j                  ||f      }t	        d      D ]  }d|j                  ||f      z  }|dt        j                  |      d d t         j                  f   z  z  }||j                  d      d d t         j                  f   z  }t        |d	      }t        ||d
      }|d   }	|d   }
t        |	|
       |d   }|d   }t        ||       dD ]Q  }t        |||d      d   }t        ||d      d   }|d   }|d   }|d   }|d   }t        ||       t        ||       S  t        j                  ddgddgddgddgddgddgg      }t        j                  g dg dg dg dg d g      }t        j                  g dg dg dg d!g d"g      }t        j                  g dg dg dg d#g d$g      }t        j                  |      \  }}t        j                  ||f      }t        |d	      }t        ||d
      }t        |d d d d%f   |d          t        |d d d d%f   |d          t        |d d d%f   |d&          t        |d d d%f   |d&          g d'}||g}t        ||      D ]~  \  }}t        |d|(      }t        |||d      }t        |d d d d%f   |d          t        |d d d d%f   |d          t        |d d d%f   |d&          t        |d d d%f   |d&           y ))Nr   r&   r   r'   r   rK   r   T)return_distance)r.   r   r   )ro   rn   rp   )r.   r*   r   )r*   r   gя?geG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
3C77Aq6?L1X#**1a&*))	S299Q<2::...	QVVV^ArzzM**$Q="1<QUV !1 3,Q/ 	02EF -R0(,!"3_E8G+gt   ".aRV!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                  $   t        j                  ddgddgg      } t        j                  ddgddgg      }t        dd|      }t        |d      }t	        j
                  t              5  |j                  |        d d d        y # 1 sw Y   y xY w)	Nr   rK   TFrJ   )n_xn_yrR   rm   r.   r*   )r4   rg   r   r   r8   r\   r]   r<   )xmcws       rA    test_connectivity_fixing_non_lilr  `  sw     	1a&1a&!"A
4-%/0A!+AQ?A	k	"	a 
#	"	"s   +BBc                     t         j                  j                  d      } t        j                  | j	                  dd      j                  t         j                  d            }| j                  t        |            }t        ||      }t        ||      D ]  \  }}||   |k(  rJ  t        j                  dt         j                        d d d	   }t        j                  dd
      d d d	   }t        ||      }t        ||t        j                  dt         j                        dd       t        ||t        j                  dt         j                        dd       y )Nr   rI   rD   r'   Fr   rH   rE   rJ   rj   rK   )rR   n_an_b)r4   r5   r6   r   randintr   intprandrQ   r   r   r   fullr   r;   r   )	r=   r   rO   dkeyvalue
other_keysother_valuesothers	            rA   test_int_float_dictr%  m  s
   
))


"C99S[[2[.55bggE5JKDXXc$i FT6"A$'
Uv ( 2RWW-cc2J772s#CaC(L\2EaRWWS8aQG!UBGG!<!Krc   c                  V   t         j                  j                  d      } | j                  dd      }t	        |dd      }t        |      }t        t        t        dd            }|j                  |       |j                  |       t        |j                  |j                         y )	Nr   r   r&   r   Fr   r-   r   )
r4   r5   r6   r  r   r   r   r<   r    r   )r=   r>   r.   aglc1aglc2s        rA   test_connectivity_callabler)  ~  s~    
))


"CQA#Aqu=L#>E#-15QE 
IIaL	IIaLu}}emm4rc   c                  R   t         j                  j                  d      } | j                  dd      }t	        |dd      }t	        |dd      }t        |      }t        |      }|j                  |       |j                  |       t        |j                  |j                         y )	Nr   r   r&   r   Fr   Tr-   )	r4   r5   r6   r  r   r   r<   r    r   )r=   r>   r.   connectivity_include_selfr'  r(  s         rA   "test_connectivity_ignores_diagonalr,    s    
))


"CQA#Aqu=L 0AD I#>E#1JKE	IIaL	IIaLu}}emm4rc   c                     t         j                  j                  d      } | j                  dd      }t	        |dd      }t        d|      }|j                  |       |j                  d   }|j                  j                  d   }||dz
  k(  sJ d	}| j                  d
d      }t	        |dd      }t        ||      }|j                  |       |j                  d   }|j                  j                  d   }|||z
  k(  sJ y )Nr   rD   rJ   r&   Fr   r   rK   e      )	r4   r5   r6   rM   r   r   r<   rN   ru   )r=   r>   r.   agcrv   rX   r[   s          rA   test_compute_full_treer1    s    
))


"C		"aA#Aqu=L "Q\
JCGGAJ
Imm!!!$Gi!m### J		#qA#Ar>L
!Zl
SCGGAJ
Imm!!!$Gi*,,,,rc   c                      t         j                  j                  d      } | j                  dd      }t        j                  d      }t        j                         D ]  } t        |      ||      d   dk(  rJ  y )Nr   r&   r-   rK   )r4   r5   r6   r  eyer
   rO   r"   )r=   r>   r.   ra   s       rA   test_n_componentsr4    si    
))


"CAA 66!9L&--/,|,Q\J1MQRRRR 0rc   c                  F   d} t         j                  j                  d      }|j                  | |       }t        j                  g d      }t        | | |t         j                        } G d d      } |       }t        |||j                         |j                  dk(  sJ y )	NrJ   r   )TFFT)r  r  rR   	return_asc                       e Zd Zd Zd Zy)>test_affinity_passed_to_fix_connectivity.<locals>.FakeAffinityc                     d| _         y )Nr   counter)selfs    rA   __init__zGtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.__init__  s	    DLrc   c                 D    | xj                   dz  c_         | j                   S )NrK   r:  )r<  argsr   s      rA   	incrementzHtest_affinity_passed_to_fix_connectivity.<locals>.FakeAffinity.increment  s    LLAL<<rc   N)__name__
__module____qualname__r=  r@   rc   rA   FakeAffinityr8    s    		 rc   rE  )r.   r1   r   )
r4   r5   r6   rM   rg   r   ndarrayr   r@  r;  )r(   r=   r>   rR   r.   rE  fas          rA   (test_affinity_passed_to_fix_connectivityrH    s     D
))


"C		$A88./D Tt$"**UL    
BE::??rc   )rm   rn   ro   c                 L   t         j                  j                  |      }t        j                  ddgt              }d}|j                  |d      }t        |j                   }d}d |fD ]  }t        d |||       }	|	j                  |       |	j                  }
t        t        j                  |	j                              }t        |    } |||d d      \  }}}}}t        j                  ||k\        dz   }||k(  sJ t        |||	      }t        j                   |
|      rJ  y )
NrD   rE   rI   rH   )r[   rr   r.   r*   T)r.   r[   r   rK   )r[   rT   rV   )r4   r5   r6   r;   rL   rM   r   rN   r   r<   r   rQ   r   r
   count_nonzeror   array_equiv)r*   r   r=   rR   rv   r>   r.   rr   connrw   clusters_producednum_clusters_producedrS   rT   rU   rV   rW   	distancesnum_clusters_at_thresholdclusters_at_thresholds                       rA   5test_agglomerative_clustering_with_distance_thresholdrR    s4    ))

 2
3C77B84(DI		)R A $**-L|$,1	

 	q&.. #BIIj.@.@$A B &g.>JDT4?
;,&) Y*<<=A 	" ),AAAA ',x(!
 ~~/1FGGG3 %rc   c                 f   t         j                  j                  |       }d}|j                  dd|df      }t	        d dd      j                  |      }t        |d	d
      }t        j                  |t         j                         t        j                  |dkD        sJ |j                  |k(  sJ y )NrD   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                 V   t         j                  j                  |       }d}|j                  dd|df      }d}t	        d |d      j                  |      }|j                  }t        |d	d
      }t        j                  |t         j                         t        j                  |      D ]}  }||k(  }	||	   d d |	f   j                  d      j                         }
||	   d d |	 f   j                  d      j                         }|	j                         dkD  r|
|k  sJ ||k\  r}J  y )NrI   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    s5   
))

 2
3CIC9a.1A(,>	c!f  F1[A6AQ6" E/oq/1266A6>BBD 	  oq?"22377Q7?CCE 	!  1$*-????'+==== #rc   )	thresholdy_truerj   rK   r   g      ?c                 p    dgdgg}t        d ||       }|j                  |      }t        ||      dk(  sJ y )Nr   rK   rT  )r   fit_predictr   )r*   re  rf  r>   	clusterery_preds         rA   ?test_agglomerative_clustering_with_distance_threshold_edge_caserk  *  sI     qc
A'IwI ""1%Fvv.!333rc   c                     dgdgg} t        j                  t        d      5  t        d d       j	                  |        d d d        t        j                  t        d      5  t        dd      j	                  |        d d d        dgdgg} t        j                  t        d      5  t        d dd	      j	                  |        d d d        y # 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   y xY w)
Nr   rK   zExactly one of re   )r[   rr   rJ   z!compute_full_tree must be True ifF)r[   rr   r   )r8   r9   r:   r   r<   )r>   s    rA   &test_dist_threshold_invalid_parametersrm  :  s    
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                      t         j                  j                  d      } | j                  dd      }t	        j
                  t        d      5  t        dd      j                  |       d d d        y # 1 sw Y   y xY w)	Nr   r&   r   z>Distance matrix should be square, got matrix of shape \(5, 3\)re   r/   rn   r   )	r4   r5   r6   r  r8   r9   r:   r   r<   )r=   r>   s     rA   *test_invalid_shape_precomputed_dist_matrixro  I  s`     ))


"CAA	O
 	 }jIMMaP	
 
 
s   A33A<c                     t        j                  g dg dg dg dg dg      } t        |       d   dk(  sJ t         j                  j	                  d      }|j                  dd      }t        |      }t        d	| d
      }d}t        j                  t        |      5  |j                  |       ddd       t        | d
      }t        j                  t        |      5  |j                  |       ddd       t        |j                  |j                         t        |j                  |j                         y# 1 sw Y   xY w# 1 sw Y   VxY w)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    ((	
   34Q71<<<
))


"C		!RA"F3+>
 ;C	k	-!!&) 
. ((*I 
k	-a 
. y((*?*G*GHy**,A,K,KL 
.	- 
.	-s   D<!E<EE)Z__doc__r   r   	functoolsr   tempfiler   numpyr4   r8   scipy.clusterr   scipy.sparse.csgraphr   sklearn.clusterr   r   r	   sklearn.cluster._agglomerativer
   r   r   r   "sklearn.cluster._hierarchical_fastr   r   r   sklearn.datasetsr   r    sklearn.feature_extraction.imager   sklearn.metricsr   sklearn.metrics.clusterr   r   sklearn.metrics.pairwiser   r   r   r   'sklearn.metrics.tests.test_dist_metricsr   sklearn.neighborsr   sklearn.utils._fast_dictr   sklearn.utils._testingr   r   r    r!   r"   sklearn.utils.fixesr#   rB   rY   r_   rb   ri   markparametrizery   r   r   r   r   r   r   r   r   r   r   r   r  r  r%  r)  r,  r1  r4  rH  rR  r[  rd  rk  rm  ro  rs  rD  rc   rA   <module>r     sF         # 5 T T  
 6 : * U  K . 1  /I2=.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   