o
    tBh)                     @   s   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 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 Zdd Zdd Zdd Zdd Zdd Zejdejejfdd Zdd Zdd Zdd Z dd  Z!d!d" Z"dS )#    N)
csr_matrix)datasets)assert_array_equal)silhouette_score)silhouette_samples)pairwise_distances)calinski_harabasz_score)davies_bouldin_scorec                  C   s  t  } | j}t|}t|}t|}| j}||||fD ]n}t|dd}t	||dd}|dks3J t	||dd}	t
||	 ||u rG|}
nt
|	|
 t	||dt|jd d dd}t	||dt|jd d dd}	|dkssJ |	dksyJ t
|	| ||u r|}qt
|	| qd S )N	euclideanmetricprecomputedr      )r   sample_sizerandom_state)r   	load_irisdatar   sp
dok_matrix
lil_matrixtargetr   r   pytestapproxintshape)datasetX_denseX_csrX_dokX_lilyXDscore_precomputedscore_euclideanscore_dense_without_samplingscore_dense_with_sampling r'   /var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pytest_silhouette   s8   

r)   c                  C   s^   dgdgdgdgdgdgg} t g d}t| |}t |r!J t| |}t|g d d S )N              ?g       @      @)r      r-   r-   r   r   )r         ?r.   r   r-   r-   )nparrayr   isnanr   r   )r!   labels
silhouettessr'   r'   r(   test_cluster_size_1:   s   


r5   c                     s   g d} t d}| |t dd< ||j7 }g d}g d}ddd	d
ddddddddd}d}g d}ddddddddddddd}d}|||f|||ffD ].\}	 }
 fd d!|D  tj t|t |	d"d#d$d% tj|
t|t |	d"d#d$d% qNd S )&N)BRQ@      @      @gRQ@r7   gp=
ף@RQ@gRQ@gףp=
W @RQ@g\(\@      @Gz@Gz@Gz@Gz@      @r6         @gGz@r?   g\(\@g      @r?   r?   r@   g\(\@Gz@g      @r>   g      @gRQ@      @g      @gRQ@g      @RQ@r<   g      @g\(\@rA   rB   rB   r=   rB   g      @gRQ@rC   g      @r;   gGz@rD   r:   r<   g\(\@g      @r,   rD   r<   r@   r6   r9   rB   gGz@r8   r=   )   rE   rE   )BELBRACHICUBEGYFRAINDISRUSAUSSYUGZAI)r-   r-   r   r   r-   r-   r   r-   r-   r   r   r-   gQ?g(\?gffffff?g333333?g)\(?皙?gRQ?g?g(\?gQ?gp=
ף?g{Gz)rO   rG   rL   rN   rH   rK   rR   rJ   rP   rI   rQ   rM   gQ?)r-   r      rT   r-   r-   r   r-   r-   rT   rT   r   gGz?g)\(?gzG?gGz?g{Gz?g      ?g(\?gQ?gףp=
?)rO   rL   rG   rN   rK   rR   rH   rM   rJ   rP   rQ   rI   c                    s   g | ]} | qS r'   r'   ).0nameexpectedr'   r(   
<listcomp>   s    z1test_silhouette_paper_example.<locals>.<listcomp>r   r   g{Gz?)abs)	r/   zerostril_indicesTr   r   r   r0   r   )lowerr"   nameslabels1	expected1score1labels2	expected2score2r2   scorer'   rW   r(   test_silhouette_paper_exampleQ   s`   
D
rg   c                  C   s   t  } | j}t|jd }dtt| }tj	t
|d t|| W d    n1 s/w   Y  t|jd }dtt| }tj	t
|d t|| W d    d S 1 s]w   Y  d S )Nr   zJNumber of labels is %d\. Valid values are 2 to n_samples - 1 \(inclusive\)match)r   r   r   r/   aranger   lenuniquer   raises
ValueErrorr   r[   )r   r!   r    err_msgr'   r'   r(   test_correct_labelsize   s$   "rp   c                  C   sV   t  } | j}| j}t||d d t||ksJ tt||d d t|| d S )Nr   
   )r   r   r   r   r   r   r   )r   r!   r2   r'   r'   r(   test_non_encoded_labels   s    rr   c                  C   s8   t  } | j}| j}tt|t|t||ksJ d S )N)r   r   r   r   r   list)r   r!   r    r'   r'   r(   test_non_numpy_labels  s   $rt   dtypec                 C   s   t tjg dg| dj}g d}t|jjd |d d< t||dd t|jjd |d d< tj	t
d	d
 t||dd W d    d S 1 sLw   Y  d S )N)rS   g?gQ?gq=
ףp?g(\?g?)ru   )r   r   r   r-   r-   r-   rq   r   r   r   i  contains non-zerorh   )r   r/   r0   r]   finforu   epsr   r   rm   rn   )ru   distsr2   r'   r'   r(   test_silhouette_nonzero_diag  s   "rz   c                 C   Z   t jjdd}tjtdd | |ddt d W d   dS 1 s&w   Y  dS )z+Assert message when there is only one labelr   seedNumber of labels isrh   rq   r   N)r/   randomRandomStater   rm   rn   randr[   funcrngr'   r'   r(   assert_raises_on_only_one_label     "r   c                 C   r{   )z7Assert message when all point are in different clustersr   r|   r~   rh   rq   r   N)r/   r   r   r   rm   rn   r   rj   r   r'   r'   r(   (assert_raises_on_all_points_same_cluster$  r   r   c                  C   s   t t tt dttddgd dgd  ksJ dtddgddggd dgd dgd  ks5J ddgddggd d	d	gd
d
ggd  dd
gdd	ggd  d	dgd
dggd  } dgd dgd  dgd  d	gd  }tt| |d d S )Nr+   rq   r   r      r-   r*   rF   rq   rT      r   g      [@)r   r   r   r/   onesr   r   r!   r2   r'   r'   r(   test_calinski_harabasz_score+  s   (2(r   c                  C   s  t t tt ttddgd dgd  tdksJ tddgddggd dgd dgd  tdks;J ddgddggd ddgd	d	ggd  dd	gddggd  ddgd	dggd  } dgd dgd  d
gd  dgd  }tt| |d
td d  t	  t
dt t| | W d    n1 sw   Y  ddgd
d
gddgddgg} g d}tt| |d d S )Nr   r   r   r-   r*   rF   rq   rT   r   r   r.   error)r   r   r-   r   g?)r   r	   r   r/   r   r   r   sqrtwarningscatch_warningssimplefilterRuntimeWarningr   r'   r'   r(   test_davies_bouldin_scoreA  s6   "
$( 
r   c                  C   s   t g dg dg dgg ddd} | tdksJ tjtdd	 t g d
g dg dgg ddd W d   dS 1 s@w   Y  dS )zvCheck that silhouette_score works for precomputed metrics that are integers.

    Non-regression test for #22107.
    )r   r-   r   )r-   r   r-   )r   r-   r   )r   r   r-   r   r   gUUUUUU?rv   rh   )r-   r-   r   N)r   r   r   rm   rn   )resultr'   r'   r(   )test_silhouette_score_integer_precomputedd  s   "r   )#r   numpyr/   scipy.sparsesparser   r   r   sklearnr   sklearn.utils._testingr   sklearn.metrics.clusterr   r   sklearn.metricsr   r   r	   r)   r5   rg   rp   rr   rt   markparametrizefloat32float64rz   r   r   r   r   r   r'   r'   r'   r(   <module>   s4    ) 

#