
    >[g]                        d dl Z d dlZd dlZd dl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 d dlmZ d d	lmZ d d
lmZmZ d dlmZ ej8                  j;                  d       ZdZddgdejA                  ed      z  z   Z!ddgdejA                  ed      z  z   Z"ddgdejA                  ed      z  z   Z#ddgdejA                  ed      z  z   Z$ddgdejA                  ed      z  z   Z%ddgdejA                  ed      z  z   Z& ejN                  e!e"e#e$e%e&f      Z(ejR                  jU                  dg ddgg dd gdddd d!dejV                  gdgdddd d!dejV                  gdgg      d"        Z,ejR                  jU                  dddd#d$dd%d%ejV                  gdgddd#d$d&dd%d%ejV                  g	d gddd#dejV                  gd gddd#ejV                  gdgg      d'        Z-ejR                  jU                  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 d-gg      d.        Z.d/ Z/d0 Z0ejR                  jU                  d1d2geD  cg c]  } | d3f c} z         d4        Z1d5 Z2d6 Z3d7 Z4d8 Z5d9 Z6d: Z7d; Z8ejR                  jU                  d<g d=      ejR                  jU                  d>g d?      ejR                  jU                  d1d2d@geD  cg c]  } | d3f c} z         dA                      Z9dB Z:ejR                  jU                  dC e;de(jx                  d    dz  dD            dE        Z=ejR                  jU                  dFe      dG        Z>dH Z?dI Z@dJ ZAejR                  jU                  dFdgez         dK        ZBejR                  jU                  dFe      dL        ZCdM ZDyc c} w c c} w )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                     t        j                  |       } | d d | dd  z  }|dk\  }|dk  }t        ||dd      }||k(  sJ y )Nr   r   grq?r   r   nparrayr   )r   r    ratiosteep_downwardupwardes         \/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/cluster/tests/test_optics.pytest_extend_downwardr.      sV     XXfF3BK&*$Eg%NQYF~vq!4A8O8    g @g@   gffffff@c                     t        j                  |       } | d d | dd  z  }|dk  }|dkD  }t        ||dd      }||k(  sJ y )Nr   r   g?r   r   r&   )r   r    r)   steep_upwarddownwardr,   s         r-   test_extend_upwardr4   2   sU     XXfF3BK&*$EC<LqyH|Xq!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                 4    t        | |      }t        ||       y N)r   r   )r5   r6   r7   labelss       r-   test_the_extract_xi_labelsr<   E   s      (3Fvx(r/   c                 n   t         j                  j                  d      }d}ddgd|j                  |d      z  z   }ddgd	|j                  |d      z  z   }d
dgd|j                  |d      z  z   }ddgd|j                  |d      z  z   }ddgd|j                  |d      z  z   }ddgd|j                  |d      z  z   }t        j                  |||||t        j
                  ddgg      |f      j                  | 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      j                  |	      }t        |j                  |
       t        d	dddd      j                  |	      }t        |j                  |
       t        j                  |||||t        j
                  ddggdz        |f      j                  | 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      j                  |	      }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      j                  | d      }	t         j                  dgdz  d
gdz  dgdz  f   }
t        |	|
|      \  }	}
t        ddt         j                  dd      j                  |	      }t        |j                  |
       y ) 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
		2r2r2rxx#s'=rBCJJ5 	K 	A eeQC!GaS1WqcAgsQwaaSSTWTUO O#FA2ds	c!f 
 u}}o6 $4TW	c!f 
 u}}o6
		2r2r2rxx#sq0@'A2FGNN5 	O 	A ee	
a!q1#'A37QC!GRaS1WDO !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
		2r2,&&|%&@AeeQC!GaS1WqcAg56O O#FA266$SW	c!f 
 u}}o6r/   c                 0   t         j                  j                  d      }d}ddgd|j                  |d      j	                  | d      z  z   }ddgd|j                  |d      j	                  | d      z  z   }t        j
                  ||f      }t        |d      }t        dd	
      j                  |      j                  }|j                  dk(  sJ t        j                  |t        j                  ddgddgg      z
        }|t        |      z  dk  sJ y )Nr   r>   r   Fr?   2   rA   rC   r   )rF   rD   )r   r   c      皙?)r'   rP   rQ   rR   rT   rS   r   r   rV   cluster_hierarchy_shapesumr(   len)rY   rZ   r[   r\   r]   rb   r6   diffs           r-   test_cluster_hierarchy_rp      s   
))


"C
Q!cii 4a8??5 @   
B Q"syy!5q9@@5 A   
B 			2r(A"A"-11!4GGH>>V###66(RXX2wC&9::;D#a&=4r/   zcsr_container, metric)N	minkowski	euclideanc                    d}t        |      }t        ddd|       }|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 y )
Nr   )
n_clustersg      >@r   r   )rH   rF   rD   metricr   if)r   r   rV   rn   setrW   intrl   dtypekindreachability_core_distances_	ordering_range)ru   csr_containerrt   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                      d} ddgg}t        ddd      }t        j                  t        |       5  |j	                  |       d d d        y # 1 sw Y   y xY w)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                      d} ddgddgddgg}t        d|dd      \  }}t        dd	d
d      }t        j                  t        |       5  |j                  |       d d d        y # 1 sw Y   y xY w)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      sn    
:C1vBx!R)GwCaNA{
 :hCUWXE	z	-		! 
.	-	-s   
A%%A.c                      d} ddgddgddgg}t        d|dd      \  }}t        j                  t        |       5  t	        d	d
d	      }|j                  |       d d d        y # 1 sw Y   y xY w)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      sk    
BC1vBx!R)GwCaNA{ 
k	-{F		! 
.	-	-s    A$$A-c                     d} t         j                  j                  ddt              }t	        j
                         5  t	        j                  dt               t        |       j                  |       d d d        y # 1 sw Y   y xY w)Nrogerstanimotor   r   r   sizerz   errorru   )
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   6A<<Bc                  *   d} t         j                  j                  ddt         j                        }d|  }t	        j
                  t        |      5 }t        |       j                  |       t        |      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)	Nr   r   r   r   z-Data will be converted to boolean for metric r   r   r   )
r'   rP   r   int32r   r   r	   r   rV   rn   )r   rb   r   warn_records       r-   %test_warn_if_metric_bool_data_no_boolr      sx     'O
		!&9A9/9J
KC	+3	7;o&**1-;1$$$ 
8	7	7s   ,B		Bc                     d} t         j                  j                  ddt              }t         j                  j                  ddt         j                        }t        j                         5  t        j                  dt               t        |       j                  |       t        |       j                  |       d d d        y # 1 sw Y   y xY w)Nrq   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CCc                      ddgddgddgg} t        d| dd      \  }}t        ddd	d
      j                  |      }t        |j                        dk(  sJ y )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     sh     1vBx!R)GwCaNA{
 3xSbQUUVWXEu}}"""r/   r   )r   r         ?rF   )r   r   rC   )Nrr   c           	      l   ddgddgddgg}t        d|dd      \  }}| ||      n|}|j                  |d      }t        |d	| |
      j                  |      }t	        | |      j                  |      }	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 y )Nr   r      rE   r   r   Fr?   r   )rF   rI   r   ru   )r   rF   )axisr   rj   )r   rT   r   rV   r   r   rW   minr'   rm   r   rl   round)r   rF   ru   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                    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      j                  | d
      }t         j                  dgdz  dgdz  dgdz  f   }t	        dddd      j                  |      }t        |j                  |       t         j                  dgdz  dgdz  dgdz  f   }t	        dddd      j                  |      }t        |j                  |       t         j                  dgdz     }t        j                  t        d      5  t	        dddd      j                  |      }t        |j                  |       d d d        y # 1 sw Y   y xY w)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   G  sg   a&1c(QI	&Br(RGb"X	&B*sBi#s	,B
		2r2,&&|%&@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   )5E''E0rG      c                    t         d d d   j                  |d      }t        d|       j                  |      }t	        j
                  |j                  |j                  dk7           }|j                  rt        |      | k\  sJ t        d| |j                  d   z        }|j                  |       t        |j                  |j                         y )Nr   Fr?   rK   )rF   rG   r   r   )rb   rT   r   rV   r'   bincountrW   r   r   rl   r   )rG   rY   redXrd   cluster_sizes
clust_fracs         r-   test_min_cluster_sizer   \  s    SqS6==E=2Dq3CDHHNEKKemmr.A BCM=!%5555)DJJqM9J NN4u}}j&8&89r/   r   c                    t        t        t              dz         }t        j                  t
        d      5  |j                  t               d d d        t        t        t              dz   d      }t        j                  t
        d      5  |j                   | t                     d d d        y # 1 sw Y   fxY w# 1 sw Y   y xY w)Nr   )rG   zmust be no greater than the r   rr   )rG   ru   )r   rn   rb   r   r   r   rV   )r   rd   s     r-   test_min_cluster_size_invalid2r   l  s    CFQJ/E	z)G	H		! 
I CFQJ{CE	z)G	H		-"# 
I	H	 
I	H 
I	Hs   B3B?3B<?Cc                  <   dgdgdgdgg} t        dd      j                  |       }t        |j                  t        j
                  dddg       t        |j                  ddt        j
                  t        j
                  g       t        |j                  g d       y )	Nr   r   i   r      rF   rH   r8   )r   rV   r   r|   r'   rX   r}   r~   )Yrd   s     r-   test_processing_orderr   w  s}     rdSEB4 Aq"-11!4Eu**RVVRR,@Au,,r2rvvrvv.FGu5r/   c                  x	   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*+      j                  t              }t        |j                  t        j                  |             t        |j                  |j                     t        j                  |             t        |j                  |j                     t        j                  |              |j                  d,d  D ]0  }|j                  |   |j                  |j                  |      k\  r0J  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      j                  t              }t        |j                  t        j                  |             t        |j                  |j                     t        j                  |             t        |j                  |j                     t        j                  |             t        j                  |j                  d3k        d5   }	t        |j                  |	   |j                  |	          y )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clust1rv   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                    t         j                  j                  d      }d}ddgd|j                  |d      z  z   }ddgd|j                  |d      z  z   }d	dgd|j                  |d      z  z   }dd
gd|j                  |d      z  z   }t        j                  ||||f      j                  | d      }t        dd      j                  |      }t        t        j                  t        j                  |j                              g d       y )Nr   rC   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   rZ   r[   r\   r]   r^   r_   rb   rd   s	            r-   test_extract_dbscanr    s     ))


"C
bC#))$8!<<	<B
R3#7;;	;B
Q#		"6::	:B
a3#7;;	;B
		2r2r"#**<e*DA(488;Erwwryy78,Gr/   c                    t         d d d   j                  | d      }t        |d      }| ||      n|}t        j                         5  t        j
                  dt               t        ddd	
      j                  |      }d d d        t        ddd
      j                  |      }t        j                  |j                         t        |j                  |j                         y # 1 sw Y   gxY w)Nr   Fr?   rr   r   ignorer   bruteprecomputed)rF   	algorithmru   )rb   rT   r   r   r   r   r
   r   rV   r   r|   r   rW   )rY   r   r   distsr  r
  s         r-   test_precomputed_distsr  #  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   8C))C2c                    t         j                  j                  d      j                  dd      }t        j                  |d        | |      }t        d t        |j                          D              sJ |j                         }t        d      j                  |       |j                  |j                  k(  sJ t        |j                         |j                                y)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   ,   K   | ]  \  }}||k7    y wr:    ).0rowcols      r-   	<genexpr>zKtest_optics_input_not_modified_precomputed_sparse_nodiag.<locals>.<genexpr>?  s     <*;hc3scz*;s   r  r   N)r'   rP   rQ   randfill_diagonalallzipnonzeror@   r   rV   nnzr   toarray)r   rb   X_copys      r-   8test_optics_input_not_modified_precomputed_sparse_nodiagr'  3  s     			a %%a+A QaA<#qyy{*;<<<<VVXF
- $$Q' 55FJJqyy{FNN$45r/   c                     t        j                  g d      j                  dd      } g d}| |   }t        dd      j	                  |       }t        dd      j	                  |      }t        |j                  |   |j                         y)	a  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   rr   )rF   ru   N)r'   r(   reshaper   rV   r   rW   )X_1reorderX_2optics_1optics_2s        r-   +test_optics_predecessor_correction_orderingr/  H  sw     ((-
.
6
6r1
=C&G
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   rp   r   r   r   r   r   r   r   r   r   r   r   rl   r   r   r   r  r  r  r'  r/  )	containers   0r-   <module>r>     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BIIr2r2r2&' 	#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/?	))67r $ ~V~)i5~VV6	68
	.%2 # 04-.1?@I	;@A
$ 5 1$>;* +U1aggajB6F-KL: M: .9$ :$6ORdH 4&>*AB7 C7 .96 :6(DO WJ As   (O.O	