
     hW                        d dl Zd dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ ej                            d           ZdZddgde                     ed          z  z   Z!ddgde                     ed          z  z   Z"ddgde                     ed          z  z   Z#ddgde                     ed          z  z   Z$ddgde                     ed          z  z   Z%ddgde                     ed          z  z   Z& ej'        e!e"e#e$e%e&f          Z(ej)        *                    dg ddgg d d gdd!d"d#d$dej+        gdgdd!d"d#d$dej+        gdgg          d%             Z,ej)        *                    dddd&d'dd(d(ej+        gdgddd&d'd)dd(d(ej+        g	d gddd&dej+        gd gddd&ej+        gdgg          d*             Z-ej)        *                    d+g d,d dgddggg d-gg d,d dgddggg d.gg d,d dgddgd dggg d.gg d/d dgddgd dggg d0gg          d1             Z.d2 Z/d3 Z0ej)        *                    d4d5d6gd7d8gg          d9             Z1d: Z2d; Z3d< Z4d= Z5d> Z6d? Z7d@ Z8ej)        *                    dAg dB          ej)        *                    dCg dD          ej)        *                    d4d5d6gd7d6gd7d8gg          dE                                     Z9dF Z:ej)        *                    dG e;de(j<        d          dz  dH                    dI             Z=dJ Z>dK Z?dL Z@dM ZAej)        *                    dNd6d8g          dO             ZBdS )P    N)sparse)
make_blobs)OPTICS)_extend_region_extract_xi_labels)DataConversionWarning)contingency_matrix)pairwise_distances)DBSCAN)shuffle)assert_array_equal)assert_allclose)EfficiencyWarning)generate_clustered_data
   皙?      皙?   皙?   333333?g?      )r_plotend)r   !@皙!@ffffff!@   r   )r   r!   r"   r#   g333333!@r$   r   r!   r"   r#   r$   c                     t          j        |           } | d d         | dd          z  }|dk    }|dk     }t          ||dd          }||k    sJ d S )Nr   r   grq?r   r   nparrayr   )r   r    ratiosteep_downwardupwardes         ]/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downwardr.   "   sd     XfF3B3K&*$Eg%NQYF~vq!44A888888    g @g@   gffffff@c                     t          j        |           } | d d         | dd          z  }|dk    }|dk    }t          ||dd          }||k    sJ d S )Nr   r   g?r   r   r&   )r   r    r)   steep_upwarddownwardr,   s         r-   test_extend_upwardr4   5   sc     XfF3B3K&*$EC<LqyH|Xq!44A888888r/   )orderingclustersexpectedr   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   c                 F    t          | |          }t          ||           d S )N)r   r   )r5   r6   r7   labelss       r-   test_the_extract_xi_labelsr;   H   s)      (33Fvx(((((r/   c                    t           j                            d          }d}ddgd|                    |d          z  z   }ddgd	|                    |d          z  z   }d
dgd|                    |d          z  z   }ddgd|                    |d          z  z   }ddgd|                    |d          z  z   }ddgd|                    |d          z  z   }t          j        |||||t          j        ddgg          |f                              | d          }	t           j        dgdz  dgdz  d
gdz  dgdz  d
gdz  ddgdz  f         }
t          |	|
|          \  }	}
t          ddddd          
                    |	          }t          |j        |
           t          d	dddd          
                    |	          }t          |j        |
           t          j        |||||t          j        ddggdz            |f                              | d          }	t           j        d
gdz  dgdz  dgdz  dgdz  dgdz  dddgdz  f         }
t          |	|
|          \  }	}
t          ddddd          
                    |	          }t          |j        |
           ddgdd	gddgd	dgg}ddgddgddgddgg}ddgddgddgddgg}t          j        |||f                              | d          }	t           j        dgdz  d
gdz  dgdz  f         }
t          |	|
|          \  }	}
t          ddt           j        dd          
                    |	          }t          |j        |
           d S ) 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_methodrC   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_xird   W   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
	2r2r2rx#s'='=rBCCJJ5 	K 	 	A eQC!GaS1WqcAgsQwaaSSTWTUO O#FFFA2ds  	c!ff 
 u}o666 $4TW  	c!ff 
 u}o666
	2r2r2rx#sq0@'A'A2FGGNN5 	O 	 	A e	
a!q1#'A37QC!GRaS1WDO !O#FFFA2ds  	c!ff 
 u}o666a&1c(QIQx	0Br(RGb"X2w	/B*sBi#sb#Y	7B
	2r2,&&|%&@@AeQC!GaS1WqcAg56O O#FFFA26$SW  	c!ff 
 u}o66666r/   c                 \   t           j                            d          }d}ddgd|                    |d                              | d          z  z   }ddgd|                    |d                              | d          z  z   }t          j        ||f          }t          |d          }t          dd	
                              |          j	        }|j
        dk    sJ t          j        |t          j        ddgddgg          z
            }|t          |          z  dk     sJ d S )Nr   r=   r   Fr>   2   r@   rB   r   )rE   rC   )r   r   c      皙?)r'   rO   rP   rQ   rS   rR   r   r   rU   cluster_hierarchy_shapesumr(   len)rX   rY   rZ   r[   r\   ra   r6   diffs           r-   test_cluster_hierarchy_ro      sJ   
)


"
"C
Q!cii 4a88??5 @    
B Q"syy!5q99@@5 A    
B 		2r(A"""A"---11!44GH>V####6(RX2wC&9:::;;D#a&&=4r/   zmetric, is_sparse	minkowskiF	euclideanTc                 `   d}t          |          }t          ddd|           }|                    |rt          j        |          n|           t          t          |j                            t          d|j        v           z
  }||k    sJ |j        j	        t          |          fk    sJ |j        j
        j        dk    sJ |j        j	        t          |          fk    sJ |j        j
        j        d	k    sJ |j        j	        t          |          fk    sJ |j        j
        j        d	k    sJ |j        j	        t          |          fk    sJ |j        j
        j        dk    sJ t          |j                  t          t          t          |                              k    sJ d S )
Nr   )
n_clustersg      >@r   r   )rG   rE   rC   metricr   if)r   r   rU   r   
csr_matrixrm   setrV   intrk   dtypekindreachability_core_distances_	ordering_range)rt   	is_sparsers   ra   rc   n_clusters_1s         r-   test_correct_number_of_clustersr      s    J:666A 9!FKKKE	IIi6f"""Q777s5=))**Su}1D-E-EEL:%%%% =3q66)++++=#s****$Q	1111$)S0000 &3q66)3333 &+s2222? SVVI----? %,,,,u3uSVV}}#5#5555555r/   c                      d} ddgg}t          ddd          }t          j        t          |           5  |                    |           d d d            d S # 1 swxY w Y   d S )Nz#min_samples must be no greater thanr   g      ?r   )rG   rE   rF   match)r   pytestraises
ValueErrorrU   )msgra   rc   s      r-   #test_minimum_number_of_sample_checkr      s    
/C QA9"qIIIE 
z	-	-	-  		!                 s   AAAc                     d} ddgddgddgg}t          d|dd          \  }}t          dd	d
d          }t          j        t          |           5  |                    |           d d d            d S # 1 swxY w Y   d S )Nz.Specify an epsilon smaller than 0.15. Got 0.3.r   r     rD   r   	n_samplescenterscluster_stdrA   g333333?dbscanr   r   rG   rH   epsrE   r   )r   r   r   r   r   rU   r   r   ra   labels_truerc   s        r-   test_bad_extractr      s    
:C1vBx!R)GwCa  NA{
 :hCUWXXXE	z	-	-	-  		!                 s   A55A9<A9c                     d} ddgddgddgg}t          d|dd          \  }}t          j        t          |           5  t	          d	d
d	          }|                    |           d d d            d S # 1 swxY w Y   d S )Nz6All reachability values are inf. Set a larger max_eps.r   r   r   rD   r   r   r   gQ?r   )rG   rE   r   )r   r   warnsUserWarningr   rU   r   s        r-   test_bad_reachabilityr      s    
BC1vBx!R)GwCa  NA{ 
k	-	-	-  {FFF		!                 s   (A44A8;A8c                  *   d} t           j                            ddt                    }t	          j                    5  t	          j        dt                     t          |           	                    |           d d d            d S # 1 swxY w Y   d S )Nrogerstanimotor   r   r   sizerz   errorrt   )
r'   rO   randintboolwarningscatch_warningssimplefilterr   r   rU   )pairwise_metricra   s     r-   $test_nowarn_if_metric_bool_data_boolr      s    
 'O
	!&55A		 	"	" . .g'<===o&&&**1---. . . . . . . . . . . . . . . . . .s   >BBBc                  F   d} t           j                            ddt           j                  }d|  }t	          j        t          |          5 }t          |                               |           t          |          dk    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr   r   r   r   z-Data will be converted to boolean for metric r   r   r   )
r'   rO   r   int32r   r   r   r   rU   rm   )r   ra   r   warn_records       r-   %test_warn_if_metric_bool_data_no_boolr      s     'O
	!&99A
K/
K
KC	+3	7	7	7 %;o&&&**1---;1$$$$$% % % % % % % % % % % % % % % % % %s   9BBBc                     d} t           j                            ddt                    }t           j                            ddt           j                  }t          j                    5  t          j        dt                     t          |           
                    |           t          |           
                    |           d d d            d S # 1 swxY w Y   d S )Nrp   r   r   r   r   r   )r'   rO   r   r   r   r   r   r   r   r   rU   )r   X_boolX_nums      r-   test_nowarn_if_metric_no_boolr     s
    "OYqvT::FIafBH==E		 	"	" 2 2g'<=== 	o&&&**6222o&&&**51112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   )A!CCCc                      ddgddgddgg} t          d| dd          \  }}t          ddd	d
                              |          }t          |j                  dk    sJ d S )Nr   r   r   rD   r   r   g      ?r   r   r   r   r   )r   r   rU   maxrV   )r   ra   r   rc   s       r-   test_close_extractr     s     1vBx!R)GwCa  NA{
 3xSbQQQUUVWXXEu}""""""r/   r   )r   r         ?rE   )r   r   rB   c           	         ddgddgddgg}t          d|dd          \  }}|rt          j        |          n|}|                    |d          }t	          |d	| |
                              |          }t          | |                              |          }	t          |	j        |j                  }
t          t          j        t          j        |
d                    t          j        t          j        |
d                              }|j        d         |z
  }t          j        |dz
  |j        d         z  d          }|dk    sJ d S )Nr   r   r   rD   r   r   Fr>   r   )rE   rH   r   rt   )r   rE   )axisr   ri   )r   r   rw   rS   r   rU   r   r	   rV   minr'   rl   r   rk   round)r   rE   rt   r   rX   r   ra   r   opdbcontingencyagreedisagreepercent_mismatchs                 r-   test_dbscan_optics_parityr   $  sb    1vBx!R)GwCa  NA{ !*0!qA	E**A 
c&
 
 
	c!ff 
 
C[	1	1	1	5	5a	8	8B$RZ<<K
rvk***++RVBF;Q4O4O4O-P-P E wqzE!HxA ;Q?? t######r/   c                    ddgddgddgg}ddgddgddgg}ddgddgdd	gg}t          j        |||f                              | d
          }t           j        dgdz  dgdz  dgdz  f         }t	          dddd                              |          }t          |j        |           t           j        dgdz  dgdz  dgdz  f         }t	          dddd                              |          }t          |j        |           t           j        dgdz           }t          j	        t          d          5  t	          dddd                              |          }t          |j        |           d d d            d S # 1 swxY w Y   d S )Nr   r   rI   r   rJ   rK   r=   `   j   Fr>   r   r   r   r$   rC   rN   )rE   rG   rH   rC   r   zAll reachability valuesr   r   )r'   rR   rS   rT   r   rU   r   rV   r   r   r   )rX   r[   r\   r]   ra   rb   rc   s          r-   test_min_samples_edge_caser   I  s   a&1c(QI	&Br(RGb"X	&B*sBi#s	,B
	2r2,&&|%&@@AeQC!GaS1WqcAg56Oq!DTJJJNNqQQEu}o666eQC!GaS1WrdQh67Oq!DTJJJNNqQQEu}o666eRD1HoO	k)B	C	C	C ; ;1aNNNRRSTUU5=/:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   7<F  FFrF      c                    t           d d d                             |d          }t          d|                               |          }t	          j        |j        |j        dk                       }|j        rt          |          | k    sJ t          d| |j	        d         z            }|                    |           t          |j        |j                   d S )Nr   Fr>   rJ   )rE   rF   r   r   )ra   rS   r   rU   r'   bincountrV   r   r   rk   r   )rF   rX   redXrc   cluster_sizes
clust_fracs         r-   test_min_cluster_sizer   ^  s    SSqS6==E=22Dq3CDDDHHNNEKemr.A BCCM 6=!!%55555)DJqM9  J NN4u}j&899999r/   c                     t          t          t                    dz             } t          j        t
          d          5  |                     t                     d d d            n# 1 swxY w Y   t          t          t                    dz   d          } t          j        t
          d          5  |                     t          j        t                               d d d            d S # 1 swxY w Y   d S )Nr   )rF   zmust be no greater than the r   rq   )rF   rt   )	r   rm   ra   r   r   r   rU   r   rw   )rc   s    r-   test_min_cluster_size_invalid2r   n  sK   CFFQJ///E	z)G	H	H	H  		!               CFFQJ{CCCE	z)G	H	H	H ( (		&#A&&'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s$   A((A,/A,4-C..C25C2c                  0   dgdgdgdgg} t          dd                              |           }t          |j        t          j        dddg           t          |j        ddt          j        t          j        g           t          |j        g d           d S )	Nr   r   i   r      rE   rG   r8   )r   rU   r   r|   r'   rW   r}   r~   )Yrc   s     r-   test_processing_orderr   x  s     rdSEB4 Aq"---11!44Eu*RVRR,@AAAu,r2rvrv.FGGGu55555r/   c                  d   g t           j        dddddddddddd	d	d
d
d
d	d	dddddddddddddddddddddddddddd dd!d"d#d$d%d%d%d%d&d&d&d'} g d(}g d)}t          d*+                              t                    }t          |j        t          j        |                     t          |j        |j                 t          j        |                     t          |j
        |j                 t          j        |                      |j        d,d          D ]+}|j
        |         |j        |j        |                  k    sJ ,g t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        ddddddddddd-t           j        d.ddddd/dddt           j        d	d	d
d
d
d	d	dd0t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        }g d1}g d2}t          d*d34                              t                    }t          |j        t          j        |                     t          |j        |j                 t          j        |                     t          |j
        |j                 t          j        |                     t          j        |j        d3k              d5         }	t          |j        |	         |j        |	                    d S )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   rJ   r   r             "   !   &   '   #   %   $   ,      r         r               rB   (   -   .   r   r   rK                        /   1   +   0   *   )   5   9   3   4   8   ;   6   7   :   rf   )<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   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rE   r   g9'%?gΖF?gx?g*?)<r   r   r   r   r   r   r   r$   r0   rJ   r   r   rK   r   r   r   r   r   r   r   r   r   rB   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   rf   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   rK   r   r   r   r   r   rB   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'   rW   r   rU   ra   r   r~   r(   predecessor_r   r|   r}   where)
r1o1p1clust1ru   r2o2p2clust2indexs
             r-   test_compare_to_ELKIr
    sH   
=

=
=
 	=
 		=

 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
 	=
  	!=
" 	#=
$ 	%=
& 	'=
( 	)=
* 	+=
, 	-=
. 	/=
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66v*6+;<bhrllKKKF()9:BHRLLIII abb! Y Y#A&&*@ATUVAW*XX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66Fv'"666v*6+;<bhrllKKKF()9:BHRLLIIIHV+s233A6EF*5163I%3PQQQQQr/   c                 P   t           j                            d          }d}ddgd|                    |d          z  z   }ddgd|                    |d          z  z   }d	dgd|                    |d          z  z   }dd
gd|                    |d          z  z   }t          j        ||||f                              | d          }t          dd                              |          }t          t          j	        t          j
        |j                            g d           d S )Nr   rB   r   r   r   r   r   r   r   r   Fr>   r   r   )rH   r   r8   )r'   rO   rP   rQ   rR   rS   r   rU   r   sortuniquerV   )	rX   rY   rZ   r[   r\   r]   r^   ra   rc   s	            r-   test_extract_dbscanr    s"    )


"
"C
bC#))$8!<<<	<B
R3#7;;;	;B
Q#		"6:::	:B
a3#7;;;	;B
	2r2r"##**<e*DDA(44488;;Erwry7788,,,GGGGGr/   r   c                 (   t           d d d                             |d          }t          |d          }| rt          j        |          n|}t          j                    5  t          j        dt                     t          ddd	
          
                    |          }d d d            n# 1 swxY w Y   t          ddd
          
                    |          }t          |j        |j                   t          |j        |j                   d S )Nr   Fr>   rq   r   ignorer   bruteprecomputed)rE   	algorithmrt   )ra   rS   r
   r   rw   r   r   r   r   r   rU   r   r|   r   rV   )r   rX   r   distsr  r  s         r-   test_precomputed_distsr  $  s@   SSqS6==E=22DtK888E(1<Fe$$$uE		 	"	" 
 
h(9:::B'-PPPTT
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 gkJJJNNtTTFF(&*>???v~v~66666s   "A B..B25B2)Cnumpyr'   r   scipyr   r   sklearn.datasetsr   sklearn.clusterr   sklearn.cluster._opticsr   r   sklearn.exceptionsr   sklearn.metrics.clusterr	   sklearn.metrics.pairwiser
   r   sklearn.utilsr   sklearn.utils._testingr   r   r   sklearn.cluster.tests.commonr   rO   rP   rY   rZ   rQ   r[   r\   r]   r^   r_   r`   rR   ra   markparametrizerW   r.   r4   r;   rd   ro   r   r   r   r   r   r   r   r   r   r   r   rk   r   r   r   r
  r  r   r/   r-   <module>r$     s/               ' ' ' ' ' ' " " " " " " F F F F F F F F 4 4 4 4 4 4 6 6 6 6 6 6 7 7 7 7 7 7 " " " " " " ! ! ! ! ! ! 5 5 5 5 5 5 2 2 2 2 2 2 0 0 0 0 0 0 @ @ @ @ @ @ 	iA "Xcii 4a8888WsSYY3Q7777WsSYY3Q7777!WsSYY3Q7777WsSYY3Q7777Va#))0!4444BIr2r2r2&'' 	#	#	#Q'	(	(	(!,
c3Q26	*A.
c3Q26	*A.	    
QS!Q26	*A.
QS#q!Q	/3
QQ	#
QRV	a 	    (	AA'6	AA'7	AAA/?	AAA/?	 ) ) )67 67 67r     $ 5K./ 6 6	 68
 
 
  	 	 	. . .% % %2 2 2 # # # 00445K/+t1DE $ $	  54 10$>; ; ;* +UU1agajB6F-K-KLL: : ML:( ( (6 6 6OR OR ORdH H H udm447 7 547 7 7r/   