
    -i`                        S SK r S SKrS SKrS SK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  S SKJr  S S	KJr  S S
KJrJr  S SKJr  \R8                  R;                  S 5      rSrSS/S\RA                  \S5      -  -   r!SS/S\RA                  \S5      -  -   r"SS/S\RA                  \S5      -  -   r#SS/S\RA                  \S5      -  -   r$SS/S\RA                  \S5      -  -   r%SS/S\RA                  \S5      -  -   r&\RN                  " \!\"\#\$\%\&45      r(\RR                  RU                  S/ SQS// SQS /SSSS S!S\RV                  /S/SSSS S!S\RV                  /S//5      S" 5       r,\RR                  RU                  SSSS#S$SS%S%\RV                  /S/SSS#S$S&SS%S%\RV                  /	S /SSS#S\RV                  /S /SSS#\RV                  /S//5      S' 5       r-\RR                  RU                  S(/ S)QS S/SS/// S*Q// S)QS S/SS/// S+Q// S)QS S/SS/S S/// S+Q// S,QS S/SS/S S/// S-Q//5      S. 5       r.S/ r/S0 r0\RR                  RU                  S1S2/\ V s/ s H  o S34PM     sn -   5      S4 5       r1S5 r2S6 r3S7 r4S8 r5S9 r6S: r7S; r8\RR                  RU                  S</ S=Q5      \RR                  RU                  S>/ S?Q5      \RR                  RU                  S1S2S@/\ V s/ s H  o S34PM     sn -   5      SA 5       5       5       r9SB r:\RR                  RU                  SC\;" S\(Rx                  S    S-  SD5      5      SE 5       r=\RR                  RU                  SF\5      SG 5       r>SH r?SI r@SJ rA\RR                  RU                  SFS/\-   5      SK 5       rB\RR                  RU                  SF\5      SL 5       rCSM rDgs  sn f s  sn f )N    N)DBSCANOPTICS)_extend_region_extract_xi_labels)generate_clustered_data)
make_blobs)DataConversionWarningEfficiencyWarning)contingency_matrix)pairwise_distances)shuffle)assert_allcloseassert_array_equal)CSR_CONTAINERS
   皙?      皙?   皙?   333333?g?      )r_plotend)r   !@皙!@ffffff!@   r   )r   r!   r"   r#   g333333!@r$   r   r!   r"   r#   r$   c                     [         R                  " U 5      n U S S U SS  -  nUS:  nUS:  n[        X4SS5      nXQ:X  d   eg )Nr   r   grq?r   r   nparrayr   )r   r    ratiosteep_downwardupwardes         T/var/www/html/venv/lib/python3.13/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downwardr.      sR     XXfF3BK&*$Eg%NQYF~q!4A8O8    g @g@   gffffff@c                     [         R                  " U 5      n U S S U SS  -  nUS:*  nUS:  n[        X4SS5      nXQ:X  d   eg )Nr   r   g?r   r   r&   )r   r    r)   steep_upwarddownwardr,   s         r-   test_extend_upwardr4   2   sQ     XXfF3BK&*$EC<LqyH|q!4A8O8r/   )orderingclustersexpectedr   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 0    [        X5      n[        X25        g N)r   r   )r5   r6   r7   labelss       r-   test_the_extract_xi_labelsr<   E   s      3Fv(r/   c                 &   [         R                  R                  S5      nSnSS/SUR                  US5      -  -   nSS/S	UR                  US5      -  -   nS
S/SUR                  US5      -  -   nSS/SUR                  US5      -  -   nSS/SUR                  US5      -  -   nSS/SUR                  US5      -  -   n[         R                  " X4XVU[         R
                  " SS//5      U45      R                  U SS9n	[         R                  S/S-  S/S-  S
/S-  S/S-  S
/S-  SS/S-  4   n
[        XUS9u  p[        SSSSSS9R                  U	5      n[        UR                  U
5        [        S	SSSSS9R                  U	5      n[        UR                  U
5        [         R                  " X4XVU[         R
                  " SS//S-  5      U45      R                  U SS9n	[         R                  S
/S-  S/S-  S/S-  S/S-  S/S-  SSS/S-  4   n
[        XUS9u  p[        SSSSSS9R                  U	5      n[        UR                  U
5        SS/SS	/SS/S	S//nSS/SS/SS/SS//nSS/SS/SS/SS//n[         R                  " X4U45      R                  U SS9n	[         R                  S/S-  S
/S-  S/S-  4   n
[        XUS9u  p[        SS[         R                  SSS9R                  U	5      n[        UR                  U
5        g ) Nr   r   r   r   r   r   r   r   r   r   r   r   r   g333333?r   d   Fcopyrandom_state   xi皙?)min_samplesmin_cluster_sizemax_epscluster_methodrD   g{Gz?皙r   	      Z   n   {Gz?)r'   randomRandomStaterandnvstackr(   astyper_r   r   fitr   labels_inf)global_dtyperngn_points_per_clusterC1C2C3C4C5C6Xexpected_labelsclusts               r-   test_extract_xire   T   s   
 ))


"C
bC#))$8!<<	<B
R3#7;;	;B
R3#7;;	;B
a3#7;;	;B
R3#7;;	;B
Q#		"6::	:B
		222rxx#s'=rBCJJ5 	K 	A eeQC!GaS1WqcAgsQwaaSSTWTUO #FA2ds	c!f 
 u}}o6 $4TW	c!f 
 u}}o6
		222rxx#sq0@'A2FGNN5 	O 	A ee	
a!q1#'A37QC!GRaS1WDO !#FA2ds	c!f 
 u}}o6a&1c(QIQx	0Br(RGb"X2w	/B*sBi#sb#Y	7B
		22,&&|%&@AeeQC!GaS1WqcAg56O #FA266$SW	c!f 
 u}}o6r/   c                 ,   [         R                  R                  U5      nSnSS/SUR                  US5      R	                  U SS9-  -   nSS/SUR                  US5      R	                  U SS9-  -   n[         R
                  " XE45      n[        XbS9n[        SS	S
9R                  U5      R                  nUR                  S:X  d   eS[         R                  " US   5      S-   s=::  a  S::  d   e   e[         R                  " US   5      S-   S:X  d   eg )Nr>   r   r   Fr?   2   rA   rC   r   )rF   rD   )r   r   r   s   r      )r'   rP   rQ   rR   rT   rS   r   r   rV   cluster_hierarchy_shapediff)rY   global_random_seedrZ   r[   r\   r]   rb   r6   s           r-   test_cluster_hierarchyrn      s)   
))

 2
3C
Q!cii 4a8??5 @   
B Q"syy!5q9@@5 A   
B 			2(A$A"-11!4GGH>>V### "''(1+&*1c11111778B< 1$+++r/   zcsr_container, metric)N	minkowski	euclideanc                    Sn[        US9n[        SSSU S9nUR                  Ub  U" U5      OU5        [        [	        UR
                  5      5      [        SUR
                  ;   5      -
  nXR:X  d   eUR
                  R                  [        U5      4:X  d   eUR
                  R                  R                  S:X  d   eUR                  R                  [        U5      4:X  d   eUR                  R                  R                  S	:X  d   eUR                  R                  [        U5      4:X  d   eUR                  R                  R                  S	:X  d   eUR                  R                  [        U5      4:X  d   eUR                  R                  R                  S:X  d   e[	        UR                  5      [	        [        [        U5      5      5      :X  d   eg )
Nr   )
n_clustersg      >@r   r   )rH   rF   rD   metricr   if)r   r   rV   lensetrW   intrk   dtypekindreachability_core_distances_	ordering_range)rs   csr_containerrr   rb   rd   n_clusters_1s         r-   test_correct_number_of_clustersr      s    J:6A 9!FKE	II-";mACs5==)*Su}}1D-EEL%%% ==3q6)+++==##s***$$Q	111$$))S000  &&3q6)333  &&++s222??  SVI---??  %%,,,u3uSV}#5555r/   c                      Sn SS//n[        SSSS9n[        R                  " [        U S9   UR	                  U5        S S S 5        g ! , (       d  f       g = f)Nz#min_samples must be no greater thanr   g      ?r         ?)rH   rF   rG   match)r   pytestraises
ValueErrorrV   )msgrb   rd   s      r-   #test_minimum_number_of_sample_checkr      sI    
/C QA9"sKE 
z	-		! 
.	-	-s   A
Ac                      Sn SS/SS/SS//n[        SUSSS9u  p#[        SS	S
SS9n[        R                  " [        U S9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nz.Specify an epsilon smaller than 0.15. Got 0.3.r   r     rE   r   	n_samplescenterscluster_stdrB   g333333?dbscanr   r   rH   rI   epsrF   r   )r   r   r   r   r   rV   r   r   rb   labels_truerd   s        r-   test_bad_extractr      sl    
:C1vBx!R)GwCaNA
 :hCUWXE	z	-		! 
.	-	-s   A
A*c                      Sn SS/SS/SS//n[        SUSSS9u  p#[        R                  " [        U S9   [	        S	S
S	S9nUR                  U5        S S S 5        g ! , (       d  f       g = f)Nz6All reachability values are inf. Set a larger max_eps.r   r   r   rE   r   r   r   gQ?r   )rH   rF   r   )r   r   warnsUserWarningr   rV   r   s        r-   test_bad_reachabilityr      si    
BC1vBx!R)GwCaNA 
k	-{F		! 
.	-	-s   A
A)c                     Sn [         R                  R                  SS[        S9n[        R
                  " 5          [        R                  " S[        5        [        U S9R                  U5        S S S 5        g ! , (       d  f       g = f)Nrogerstanimotor   r   r   sizery   errorrs   )
r'   rP   randintboolwarningscatch_warningssimplefilterr	   r   rV   )pairwise_metricrb   s     r-   $test_nowarn_if_metric_bool_data_boolr      s`    
 'O
		!&5A		 	 	"g'<=o&**1- 
#	"	"s   4A88
Bc                  Z   Sn [         R                  R                  SS[         R                  S9nSU  3n[        R
                  " [        US9 n[        R                  " SS[        S	9  [        U S
9R                  U5        [        U5      S:X  d   e S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   z-Data will be converted to boolean for metric r   ignorez+'asyncio.iscoroutinefunction' is deprecated)messagecategoryr   r   )r'   rP   r   int32r   r   r	   r   filterwarningsDeprecationWarningr   rV   rv   )r   rb   r   warn_records       r-   %test_warn_if_metric_bool_data_no_boolr      s     'O
		!&9A9/9J
KC	+3	7;A'	

 	o&**1-;1$$$ 
8	7	7s   AB
B*c                     Sn [         R                  R                  SS[        S9n[         R                  R                  SS[         R                  S9n[
        R                  " 5          [
        R                  " S[        5        [        U S9R                  U5        [        U S9R                  U5        S S S 5        g ! , (       d  f       g = f)Nro   r   r   r   r   r   )r'   rP   r   r   r   r   r   r   r	   r   rV   )r   X_boolX_nums      r-   test_nowarn_if_metric_no_boolr     s     "OYYqvT:FIIafBHH=E		 	 	"g'<= 	o&**62o&**51 
#	"	"s   (AB==
Cc                      SS/SS/SS//n [        SU SSS9u  p[        SSS	S
S9R                  U5      n[        UR                  5      S:X  d   eg )Nr   r   r   rE   r   r   r   r   r   r   r   r   )r   r   rV   maxrW   )r   rb   r   rd   s       r-   test_close_extractr     sf     1vBx!R)GwCaNA
 3xSbQUUVWXEu}}"""r/   r   )r   r         ?rF   )r   r   rC   )Nrp   c           
      P   SS/SS/SS//n[        SUSSS9u  pgUb  U" U5      OUnUR                  USS9n[        US	XS
9R                  U5      n[	        XS9R                  U5      n	[        U	R                  UR                  5      n
[        [        R                  " [        R                  " U
SS95      [        R                  " [        R                  " U
SS95      5      nUR                  S   U-
  n[        R                  " US-
  UR                  S   -  S5      nUS::  d   eg )Nr   r      rE   r   r   Fr?   r   )rF   rI   r   rs   )r   rF   )axisr   g?)r   rT   r   rV   r   r   rW   minr'   sumr   rk   round)r   rF   rs   rY   r   r   rb   r   opdbcontingencyagreedisagreepercent_mismatchs                 r-   test_dbscan_optics_parityr   -  s    1vBx!R)GwCaNA *5a1A	E*A 
c
	c!f 
 
C	1	5	5a	8B$RZZ<K
rvvk*+RVVBFF;Q4O-PE wwqzE!HxxA ;Q? t###r/   c                    SS/SS/SS//nSS/SS/SS//nSS/SS/SS	//n[         R                  " XU45      R                  U S
S9n[         R                  S/S-  S/S-  S/S-  4   n[	        SSSSS9R                  U5      n[        UR                  U5        [         R                  S/S-  S/S-  S/S-  4   n[	        SSSSS9R                  U5      n[        UR                  U5        [         R                  S/S-     n[        R                  " [        SS9   [	        SSSSS9R                  U5      n[        UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   rJ   r   rK   rL   r>   `   j   Fr?   r   r   r   r$   rD   rO   )rF   rH   rI   rD   r   zAll reachability valuesr   r   )r'   rS   rT   rU   r   rV   r   rW   r   r   r   )rY   r\   r]   r^   rb   rc   rd   s          r-   test_min_samples_edge_caser   S  se   a&1c(QI	&Br(RGb"X	&B*sBi#s	,B
		22,&&|%&@AeeQC!GaS1WqcAg56Oq!DTJNNqQEu}}o6eeQC!GaS1WrdQh67Oq!DTJNNqQEu}}o6eeRD1HoO	k)B	C1aNRRSTU5==/: 
D	C	Cs   2E
E'rG      c                    [         S S S2   R                  USS9n[        SU S9R                  U5      n[        R
                  " UR                  UR                  S:g     5      nUR                  (       a  [        U5      U :  d   e[        SXR                  S   -  S9nUR                  U5        [        UR                  UR                  5        g )Nr   Fr?   rK   )rF   rG   r   r   )rb   rT   r   rV   r'   bincountrW   r   r   rk   r   )rG   rY   redXrd   cluster_sizes
clust_fracs         r-   test_min_cluster_sizer   h  s    SqS6==E=2Dq3CDHHNEKKemmr.A BCM=!%5555)JJqM9J NN4u}}j&8&89r/   r   c                    [        [        [        5      S-   S9n[        R                  " [
        SS9   UR                  [        5        S S S 5        [        [        [        5      S-   SS9n[        R                  " [
        SS9   UR                  U " [        5      5        S S S 5        g ! , (       d  f       Nf= f! , (       d  f       g = f)Nr   )rG   zmust be no greater than the r   rp   )rG   rs   )r   rv   rb   r   r   r   rV   )r   rd   s     r-   test_min_cluster_size_invalid2r   x  s    CFQJ/E	z)G	H		! 
I CFQJ{CE	z)G	H		-"# 
I	H	 
I	H 
I	Hs   B)B:)
B7:
Cc                  6   S/S/S/S//n [        SSS9R                  U 5      n[        UR                  [        R
                  SSS/5        [        UR                  SS[        R
                  [        R
                  /5        [        UR                  / SQ5        g )	Nr   r   i   r      rF   rH   r8   )r   rV   r   r{   r'   rX   r|   r}   )Yrd   s     r-   test_processing_orderr     s}     rdSEB4 Aq"-11!4Eu**RVVRR,@Au,,r2rvvrvv.FGu5r/   c                  	   / [         R                  PSPSPSPSPSPSPSPSPSPSPSPS	PS	PS
PS
PS
PS	PS	PSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPSPS PSPS!PS"PS#PS$PS%PS%PS%PS%PS&PS&PS&PS'Pn / S(Qn/ S)Qn[        S*S+9R                  [        5      n[        UR                  [         R                  " U5      5        [        UR                  UR                     [         R                  " U5      5        [        UR                  UR                     [         R                  " U 5      5        UR                  S,S   H2  nUR                  U   UR                  UR                  U      :  a  M2   e   / [         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  PSPSPSPSPSPSPSPSPSPSPS-P[         R                  PS.PSPSPSPSPS/PSPSPSP[         R                  PS	PS	PS
PS
PS
PS	PS	PSPS0P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  P[         R                  Pn/ S1Qn/ S2Qn[        S*S3S49R                  [        5      n[        UR                  [         R                  " U5      5        [        UR                  UR                     [         R                  " U5      5        [        UR                  UR                     [         R                  " U5      5        [         R                  " UR                  S3:*  5      S5   n	[        UR                  U	   UR                  U	   5        g )6Ng@z?gN	H?gއ~NT?gu?g浔E?g#r?gܞ2
@g`z?gP{
V?g:ד?g}~ a?g$@gа{n?g ?guL?g*?g$&?g{P?gx?g\x*x?g~)N{?geE,?goF?g>Ek?gPR?gBQ?gW?g@*?gr2\k?ghG?g[؜]N?g!L?g@gwc?@g;éfh@gK!Q@g,@M@gZv@gr/%A@)<r   r   r   r   r$   r0   r   rK   r   r             "   !   &   '   #   %   $   ,      r         r               rC   (   -   .   r   r   rL                        /   1   +   0   *   )   5   9   3   4   8   ;   6   7   :   rg   )<r   r   r   r   r   r   r0   r   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   )rF   r   g9'%?gΖF?gx?g*?)<r   r   r   r   r   r   r   r$   r0   rK   r   r   rL   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rg   r   r   r   r  r  r  r   r  r  )<r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rL   r   r   r   r   r   rC   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r'   rX   r   rV   rb   r   r}   r(   predecessor_r   r{   r|   where)
r1o1p1clust1rt   r2o2p2clust2indexs
             r-   test_compare_to_ELKIr    sA   
=

=
=
 	=
 		=

 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
  	!=
" 	#=
$ 	%=
& 	'=
( 	)=
* 	+=
, 	-=
. 	/=
0 	1=
2 	3=
4 	5=
6 	7=
8 	9=
: 	;=
< 	==
> 	?=
@ 	A=
B 	C=
D 	E=
F 	G=
H 	I=
J 	K=
L 	M=
N 	O=
P 	Q=
R 	S=
T 	U=
V 	W=
X 	Y=
Z 	[=
\ 	]=
^ 	_=
` 	a=
b 	c=
d 	e=
f 	g=
h 	i=
j 	k=
l 	m=
n 	o=
p 	q=
r 	s=
t 	u=
v 	w=
x 	y=
B|=
B|=
BD "&&q)Fv''"6v**6+;+;<bhhrlKF(()9)9:BHHRLI ab!##A&&*@*@ATATUVAW*XXXX "=

=

=
 	=
 		=

 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
  	!=
" 	#=
$ 	%=
& 	'=
( 	)=
* 	+=
, 	-=
. 	/=
0 	1=
2 	3=
4 	5=
6 	7=
8 	9=
: 	;=
< 	==
> 	?=
@ 	A=
B 	C=
D 	E=
F 	G=
H 	I=
J 	K=
L 	M=
N 	O=
P 	Q=
R 	S=
T 	U=
V 	W=
X 	Y=
Z 	[=
\ 	]=
^ 	_=
` 	a=
b 	c=
d 	e=
f 	g=
h 	i=
j 	k=
l 	m=
n 	o=
p 	q=
r 	s=
t 	u=
v 	w=
x 	y=
B|=
B|=
B| 3/33A6Fv''"6v**6+;+;<bhhrlKF(()9)9:BHHRLIHHV++s23A6EF**5163I3I%3PQr/   c           	      4   [         R                  R                  U5      nSnSS/SUR                  US5      -  -   nSS/SUR                  US5      -  -   nSS/SUR                  US5      -  -   nSS	/SUR                  US5      -  -   n[         R                  " XEXg45      R                  U S
S9n[        SSS9R                  U5      n	[        [         R                  " [         R                  " U	R                  U	R                  S:g     5      5      / SQ5        g )NrC   r   r   r   r   r   r   r   r   Fr?   r   r   )rI   r   r8   )r'   rP   rQ   rR   rS   rT   r   rV   r   sortuniquerW   )
rY   rm   rZ   r[   r\   r]   r^   r_   rb   rd   s
             r-   test_extract_dbscanr     s    ))

 2
3C
bC#))$8!<<	<B
R3#7;;	;B
Q#		"6::	:B
a3#7;;	;B
		22"#**<e*DA(488;E
		%--(;<=>r/   c                    [         S S S2   R                  U SS9n[        USS9nUb  U" U5      OUn[        R                  " 5          [        R
                  " S[        5        [        SSS	S
9R                  U5      nS S S 5        [        SSSS
9R                  U5      n[        WR                  UR                  5        [        UR                  UR                  5        g ! , (       d  f       Ni= f)Nr   Fr?   rp   r   r   r   bruteprecomputed)rF   	algorithmrs   )rb   rT   r   r   r   r   r
   r   rV   r   r{   r   rW   )rY   r   r   distsr  r  s         r-   test_precomputed_distsr  1  s    SqS6==E=2DtK8E$1$=M% 5E		 	 	"h(9:B'-PTT
 
#
 gkJNNtTFF((&*>*>?v~~v~~6 
#	"s   6C  
C.c                    [         R                  R                  U5      R                  SS5      n[         R                  " US5        U " U5      n[        S [        UR                  5       6  5       5      (       d   eUR                  5       n[        SS9R                  U5        UR                  UR                  :X  d   e[        UR                  5       UR                  5       5        g)zCheck that we don't modify in-place the pre-computed sparse matrix.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/27508
r   r   c              3   .   #    U  H  u  pX:g  v   M     g 7fr:    ).0rowcols      r-   	<genexpr>Ktest_optics_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>O  s     <*;hcsz*;s   r  r   N)r'   rP   rQ   randfill_diagonalallzipnonzeror@   r   rV   nnzr   toarray)r   rm   rb   X_copys       r-   8test_optics_input_not_modified_precomputed_sparse_nodiagr,  A  s     			0166q!<A QaA<#qyy{*;<<<<<VVXF
- $$Q' 55FJJqyy{FNN$45r/   c                     [         R                  " / SQ5      R                  SS5      n / SQnX   n[        SSS9R	                  U 5      n[        SSS9R	                  U5      n[        UR                  U   UR                  5        g)	ak  Check that cluster correction using predecessor is working as expected.

In the following example, the predecessor correction was not working properly
since it was not using the right indices.

This non-regression test check that reordering the data does not change the results.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/26324
)r   r   r   r   r0   r0   r$   r>   r   r   )r   r   r   r   r   r   r$   r   r   rp   )rF   rs   N)r'   r(   reshaper   rV   r   rW   )X_1reorderX_2optics_1optics_2s        r-   +test_optics_predecessor_correction_orderingr4  X  su     ((-
.
6
6r1
=C&G
,C!K8<<SAH!K8<<SAHx''0(2B2BCr/   )Er   numpyr'   r   sklearn.clusterr   r   sklearn.cluster._opticsr   r   sklearn.cluster.tests.commonr   sklearn.datasetsr   sklearn.exceptionsr	   r
   sklearn.metrics.clusterr   sklearn.metrics.pairwiser   sklearn.utilsr   sklearn.utils._testingr   r   sklearn.utils.fixesr   rP   rQ   rZ   r[   rR   r\   r]   r^   r_   r`   ra   rS   rb   markparametrizerX   r.   r4   r<   re   rn   r   r   r   r   r   r   r   r   r   r   r~   rk   r   r   r   r  r  r  r,  r4  )	containers   0r-   <module>rC     s      * F @ ' G 6 7 ! F .iiA "Xcii 4a888WsSYY3Q777WsSYY3Q777!WsSYY3Q777WsSYY3Q777Va#))0!444IIr2r2r2&' 	#Q'	(!,
c3Q266	*A.
c3Q266	*A.	 
QS!Q266	*A.
QS#q!Q	/3
QQ	#
QRVV	a 	 (	AA'6	AA'7	AAA/?	AAA/?	))87v,, ~V~)5~VV6	68
	.%*2 # 04-.1?@I;@A
$ 5 1$>;* +U1aggajB6F-KL: M: .9$ :$6ORd" 4&>*AB7 C7 .96 :6,Dc WV As   (O0O