
     h8                     $   d Z ddl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
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Z ee          Zd Zd Zd Ze	j                            dddg          d             Zd Ze	j                            dddg          e	j                            dddg          d                         Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&e	j                            d"g d#          d$             Z'd% Z(d& Z)dS )'z'
Tests for DBSCAN clustering algorithm
    N)distance)sparse)assert_array_equal)NearestNeighbors)DBSCANdbscan)generate_clustered_data)pairwise_distances   )
n_clustersc                     d} d}t          j        t          j        t                              }|t	          j        |          z  }t          |d| |          \  }}t          t          |                    d|v rdndz
  }|t          k    sJ t          d| |          }|                    |          j        }t          t          |                    t          d|v           z
  }|t          k    sJ d S )Ng333333?
   precomputedmetricepsmin_samples   r   )r   
squareformpdistXnpmaxr	   lensetr   r   fitlabels_int)r   r   Dcore_sampleslabelsn_clusters_1dbn_clusters_2s           ]/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_dbscan.pytest_dbscan_similarityr(      s     CKHN1--..ANA!	-Sk  L& s6{{##B&LLqqa@L:%%%%	}#;	G	G	GBVVAYYFs6{{##c",&7&77L:%%%%%%    c                     d} d}d}t          t          || |          \  }}t          t          |                    t	          d|v           z
  }|t
          k    sJ t          || |          }|                    t                    j        }t          t          |                    t	          d|v           z
  }|t
          k    sJ d S )N皙?r   	euclideanr   r   )	r	   r   r   r   r    r   r   r   r   r   r   r   r"   r#   r$   r%   r&   s           r'   test_dbscan_featurer.   4   s     CKF "!FUUUL& s6{{##c",&7&77L:%%%%	v3K	@	@	@BVVAYYFs6{{##c",&7&77L:%%%%%%r)   c                      t          t          j        t                    dd          \  } }t          t          dd          \  }}t	          ||            t	          ||           d S )Nr+   r   r   r   )r	   r   
lil_matrixr   r   )core_sparselabels_sparse
core_denselabels_denses       r'   test_dbscan_sparser6   J   sf    !'(9!(<(<#SU!V!V!VK%aSbAAAJz;///|]33333r)   include_selfFTc                    t          t                    }t          d                              t                    }| rt          nd }|                    |d          }|j        |j        d         |j        d         dz
  z  k     sJ t          |ddd	
          \  }}t          |ddd	
          \  }}t          ||           t          ||           d S )Ng?radiusr   )r   moder   r   r+   r   r   )r   r   r   )	r   r   r   r   radius_neighbors_graphnnzshaper	   r   )	r7   r!   nnX_D_sparser2   r3   r4   r5   s	            r'   test_dbscan_sparse_precomputedrB   Q   s    1A		%	%	%	)	)!	,	,B	$B((2J(??H<!'!*
Q77777!'cr-" " "K  &aSbWWWJz;///|]33333r)   c                     d} t          |                               t                    }|                    t          d          }t	          || d          }| dz   }t          |                              t                    }|                    t          d          }t	          || d          }t          |d         |d                    t          |d	         |d	                    d S )
N皙?r9   r   )r;   r   r   r   gffffff?r   r   )r   r   r   r<   r	   r   )	lower_epsr?   rA   dbscan_lower
higher_epsdbscan_highers         r'   ,test_dbscan_sparse_precomputed_different_epsrJ   a   s     I		+	+	+	/	/	2	2B(((<<H(	-HHHLSJ		,	,	,	0	0	3	3B(((<<H8=IIIM|Aa(8999|Aa(899999r)   
use_sparser   r   	minkowskic                 v   t           j                            d                              dd          }| rt	          j        |          n|}|                                }t          ||           | r6t          |	                                |	                                           d S t          ||           d S )Nr   r   )r   )
r   randomRandomStaterandr   
csr_matrixcopyr	   r   toarray)rK   r   r   X_copys       r'   test_dbscan_input_not_modifiedrU   r   s     		a  %%b"--A *1!AVVXXF
1V &199;;(8(8999991f%%%%%r)   c            	         t           j                            d          } |                     dd          }d||dk     <   |t	          j        |          fD ]}t          d                              |          }t          |j	        t          j
        d|j        d         f                     t          |j        d           |j        j        d	k    sJ d S )
Nr   (   r   r+      )r   r   r   )r   )r   rN   rO   rP   r   rQ   r   r   r   components_emptyr>   r   core_sample_indices_)rngr   r@   r%   s       r'   test_dbscan_no_core_samplesr]      s    
)


"
"CRAAa#gJ&#A&&' 5 5"""&&r**2>28Q4D+E+EFFF2:r***&,44444	5 5r)   c                     d} d}t           j        }t          t          || |d          \  }}t	          t          |                    t          d|v           z
  }|t          k    sJ t          || |d          }|	                    t                    j
        }t	          t          |                    t          d|v           z
  }|t          k    sJ d S )Nr+   r   	ball_treer   r   r   	algorithmr   )r   r,   r	   r   r   r   r    r   r   r   r   r-   s           r'   test_dbscan_callablerb      s     CKF "	&c{k  L&
 s6{{##c",&7&77L:%%%%	v3K;	W	W	WBVVAYYFs6{{##c",&7&77L:%%%%%%r)   c            	         d} d}d}t          j        d          5 }t          dd|i| d |d	                              t                    }d d d            n# 1 swxY w Y   |rJ |d
         j                    |j        |j        }}t          d| |d|                              t                    }|j        |j        }}t          ||           t          ||           t          d| |d                              t                    }|j        |j        }
}	t          ||	           t          ||
           t          j
        t          d          5  t          dd|i| |dz   |d	                              t                    }|j        |j        }}d d d            n# 1 swxY w Y   t          ||           t          ||           d S )Nr+   r   r   T)recordrL   pr_   )r   metric_paramsr   re   r   ra   r   )r   r   r   ra   re   	manhattanr`   z\Parameter p is found in metric_params. The corresponding parameter from __init__ is ignored.)match)warningscatch_warningsr   r   r   messager[   r   r   pytestwarnsSyntaxWarning)r   r   re   rm   r%   core_sample_1labels_1core_sample_2labels_2core_sample_3labels_3core_sample_4labels_4s                r'   test_dbscan_metric_paramsrw      s   
CK	A 
	 	-	-	- (#!
 
 
 #a&& 	               &&eAh&&&9 5rz8M 
WX
 
 
	c!ff  !5rz8M}m444x*** 

 
 
	c!ff  !5rz8M}m444x***	
 
 
 F F (!e#!
 
 
 #a&& 	 #%"92:x#F F F F F F F F F F F F F F F& }m444x*****s$   0AAAAF##F'*F'c                  @   d} d}t          t                    }t          |d| |          \  }}t          t	          |                    t          d|v           z
  }|t          k    sJ t          d| |d          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }|t          k    sJ t          d| |d	          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }|t          k    sJ t          d
| |d          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }	|	t          k    sJ t          d| |d          }|                    t                    j	        }t          t	          |                    t          d|v           z
  }
|
t          k    sJ d S )Nr+   r   r   r   r          @r_   )re   r   r   ra   kd_tree      ?   )	leaf_sizer   r   ra   )
r   r   r	   r   r   r    r   r   r   r   )r   r   r!   r"   r#   r$   r%   r&   n_clusters_3n_clusters_4n_clusters_5s              r'   test_dbscan_balltreer      s   
CK1A!	-Sk  L&
 s6{{##c",&7&77L:%%%%	#3K;	O	O	OBVVAYYFs6{{##c",&7&77L:%%%%	#3K9	M	M	MBVVAYYFs6{{##c",&7&77L:%%%%	#3K;	O	O	OBVVAYYFs6{{##c",&7&77L:%%%%	"#;+	V	V	VBVVAYYFs6{{##c",&7&77L:%%%%%%r)   c                  X    ddgddgg} t                                          |            d S )Nr{   ry   g      @g      @)r   r   )r   s    r'   test_input_validationr   
  s+    
sc3Z A
HHLLOOOOOr)   c                      t                      } t          j        |           }t          t          j        |                    | j        k    sJ d S )N)r   pickledumpstypeloads	__class__)objss     r'   test_pickler     sC    
((CSAQ  CM111111r)   c                      t          dgdggdd          \  } }d| v sJ t          dgdgdggdd          \  } }d| v sJ t          dgdgdggdd          \  } }d| vsJ d S )Nr   r      r0   gGz?r   )core_s     r'   test_boundariesr     s    qcA3ZQA666GD!9999qcA3_!;;;GD!9999qcA3_$A>>>GD!D======r)   c           	         t          j        t                    5  t          dgdggdg           d d d            n# 1 swxY w Y   t          j        t                    5  t          dgdggg d           d d d            n# 1 swxY w Y   t	          g t          dgdggd d          d                    t	          g t          dgdggddgd          d                    t	          dgt          dgdggddgd          d                    t	          ddgt          dgdggddgd          d                    t	          ddgt          dgdggd	ddgd
          d                    t	          g t          dgdggddgd	d          d                    t	          ddgt          dgdggddgd	d          d                    t	          ddgt          dgdggddgd	d          d                    t	          g t          dgdggddgd	d          d                    t
          j                            |           }|                    ddt          j
        d                   }t          t          |          \  }}t          |          t          t                    k    sJ t          j        t          |d          }t          |          \  }}t          j        |j
        d         t                    }d||<   t          j        t          j
        d         t                    }	d|	|<   t	          t          j        |	|          |           t          t                    }
t          |
|d          \  }}t	          ||           t	          ||           t!                                          t          |          }|j        }|j        }t	          ||           t	          ||           t!                      }|                    t          |          }|j        }t	          ||           t	          ||           t	          ||j                   d S )Nr   r   r   )sample_weight)r   r      rX   )r   r      g      ?)r   r   r   )r   r   r   g@皙?r   )axis)dtypeTr   )r   r   )rl   raises
ValueErrorr	   r   r   rN   rO   randintr   r>   r   repeatzerosboolr   r   r   r[   r   fit_predict)global_random_seedr\   r   core1label1
X_repeatedcore_repeatedlabel_repeatedcore_repeated_mask	core_maskr!   core3label3estcore4label4label5core5s                     r'   test_weighted_dbscanr   !  s   	z	"	" . .aSz!----. . . . . . . . . . . . . . .	z	"	" 4 4aSz33334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 r6A3*DaPPPQRSTTTr6A3*QFPQRRRSTUVVVsFQC!:aVQRSSSTUVWWW	
AaSz!QQGGGJ  
 	
AaSzs1a&aPPPQRS   
FQC!:aV!LLLQO   	
AaSz#sRSTTTUVW   	
AaSz!QSaPPPQRS   
FQC!:aW#1MMMaP  
 )

 2
3
3CKK1agaj11M1M:::ME6v;;#a&&    1m!444J$*:$6$6!M>*"21"5TBBB(,}%4000IIeryM::<NOOO 	1A1M-PPPME6ue$$$vv&&& ((,,q,
6
6C$E[Fue$$$vv&&&
((C__Qm_<<F$Eue$$$vv&&&vs{+++++s!   =AA!BB	B	ra   )bruterz   r_   c                 P   dgdgdgdgdgdgdgg}t          |          }t          || dd	          \  }}t          |t          j        |                     t          |g d
           t          || dd	          \  }}t          |g d           t          |g d           t          || dd	          \  }}t          |dg           t          |g d           t          || dd	          \  }}t          |g            t          |t          j        |d                     d S )Nr   r   r   r   rX      r   r   )ra   r   r   )r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   r   g      )r   r	   r   r   arangefull)ra   r   	n_samplesr"   r#   s        r'   test_dbscan_core_samples_toyr   e  sZ   
qcA3aS1#t,AAI "!yaQOOOL&|RYy%9%9:::v444555 "!yaQOOOL&|YYY///v888999 "!yaQOOOL&|aS)))v888999 "!yaQOOOL&|R(((vrwy$7788888r)   c                     t          j        d          } t          dd                              |           j        }t          t          |                    dk    sJ t          j        d          } t          dd                              |           j        }t          t          |                    dk    sJ d S )Nr   g      ?r   rE   r   )r   r   )r   eyer   r   r   r   r   r   )r   r#   s     r'   ;test_dbscan_precomputed_metric_with_degenerate_input_arraysr     s     	r

AM22266q99AFs6{{q    
AM22266q99AFs6{{q      r)   c            
          t          j        g dg dg dg dg dg dg dg          } t          j        |           }t	          ddd	                              |          j        }t          |g d
           d S )N)        r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   333333?)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rD   r   r   )r   r   r   )r   r   r   r   r   r   r   )r   arrayr   rQ   r   r   r   r   )armatrixr#   s      r'   5test_dbscan_precomputed_metric_with_initial_rows_zeror     s    	/////////////////////	


 

B r""FMqAAAEEfMMUFv66677777r)   )*__doc__r   numpyr   ri   scipy.spatialr   scipyr   rl   sklearn.utils._testingr   sklearn.neighborsr   sklearn.clusterr   r	   sklearn.cluster.tests.commonr
   sklearn.metrics.pairwiser   r   r   r(   r.   r6   markparametrizerB   rJ   rU   r]   rb   rw   r   r   r   r   r   r   r   r    r)   r'   <module>r      s          " " " " " "        5 5 5 5 5 5 . . . . . . " " " " " " " " " " " " @ @ @ @ @ @ 7 7 7 7 7 7 
z222& & &0& & &,4 4 4 %774 4 874: : :" e}55M;#?@@
& 
& A@ 65
&	5 	5 	5& & &2:+ :+ :+z$& $& $&N  2 2 2  A, A, A,H &G&G&GHH9 9 IH9:	! 	! 	!8 8 8 8 8r)   