a
    h/                     @   s  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m	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ ejd
dge e e e ejdddg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$ejd
ee e e dd Z%ejd
ee e e dd Z&ejd
ee e d d! Z'd"d# Z(d$d% Z)d&d' Z*d(d) Z+d*d+ Z,dS ),    N)assert_allclose)issparse)datasets)pairwise_distances)calinski_harabasz_scoredavies_bouldin_scoresilhouette_samplessilhouette_score)_silhouette_reduce)assert_array_equal)CSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERSsparse_containersample_sizehalfc                 C   s   t  }|j|j }}| d ur&| |}|dkr@t|jd d n|}t|dd}t||d|dd}t||d|dd}|dksJ |dksJ |t	|ksJ d S )Nr   r      Z	euclideanmetricprecomputed)r   r   Zrandom_state)
r   	load_irisdatatargetintshaper   r	   pytestapprox)r   r   datasetXyDZscore_precomputedZscore_euclidean r"   k/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pytest_silhouette   s    

r$   c                  C   s^   dgdgdgdgdgdgg} t g d}t| |}t |rBJ t| |}t|g d d S )N              ?g       @      @)r      r(   r(   r   r   )r         ?r)   r   r(   r(   )nparrayr	   isnanr   r   )r   labelsZ
silhouettessr"   r"   r#   test_cluster_size_14   s    


r/   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% qd S )&N)BRQ@      @      @gRQ@r1   gp=
ף@RQ@gRQ@gףp=
W @RQ@g\(\@      @Gz@Gz@Gz@Gz@      @r0         @gGz@r9   g\(\@g      @r9   r9   r:   g\(\@Gz@g      @r8   g      @gRQ@      @g      @gRQ@g      @RQ@r6   g      @g\(\@r;   r<   r<   r7   r<   g      @gRQ@r=   g      @r5   gGz@r>   r4   r6   g\(\@g      @r'   r>   r6   r:   r0   r3   r<   gGz@r2   r7   )   r?   r?   )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)rI   rA   rF   rH   rB   rE   rL   rD   rJ   rC   rK   rG   gQ?)r(   r      rN   r(   r(   r   r(   r(   rN   rN   r   gGz?g)\(?gzG?gGz?g{Gz?g      ?g(\?gQ?gףp=
?)rI   rF   rA   rH   rE   rL   rB   rG   rD   rJ   rK   rC   c                    s   g | ]} | qS r"   r"   ).0nameexpectedr"   r#   
<listcomp>       z1test_silhouette_paper_example.<locals>.<listcomp>r   r   g{Gz?)abs)	r*   zerosZtril_indicesTr   r   r   r+   r	   )lowerr!   namesZlabels1Z	expected1Zscore1Zlabels2Z	expected2Zscore2r-   Zscorer"   rQ   r#   test_silhouette_paper_exampleK   s^    D

rZ   c                  C   s   t  } | j}t|jd }dtt| }tj	t
|d t|| W d    n1 s^0    Y  t|jd }dtt| }tj	t
|d t|| W d    n1 s0    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	   rV   )r   r   r    err_msgr"   r"   r#   test_correct_labelsize   s     (rc   c                  C   sV   t  } | j}| j}t||d d t||ks4J tt||d d t|| d S )Nr   
   )r   r   r   r   r	   r   r   )r   r   r-   r"   r"   r#   test_non_encoded_labels   s     re   c                  C   s8   t  } | j}| j}tt|t|t||ks4J d S )N)r   r   r   r   r	   list)r   r   r    r"   r"   r#   test_non_numpy_labels   s    rg   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    n1 s0    Y  d S )N)rM   皙?gQ?gq=
ףp?g(\?皙?rh   )r   r   r   r(   r(   r(   rd   r   r   r   i  contains non-zeror[   )r   r*   r+   rW   Zfinforh   epsr   r   r`   ra   )rh   distsr-   r"   r"   r#   test_silhouette_nonzero_diag  s    ro   c                 C   sf   t jg dgt jdj}g d}t|}| |}t|s<J t||dd}t||dd}t|| dS )BCheck that silhouette_samples works for sparse matrices correctly.rM   ri   ri   rM   ri   rj   rM   ri   rk   r   r   r   r   r(   r(   r(   r(   r   r   Nr*   r+   float32rW   r   r   r   r   r   r   r    pdist_densepdist_sparseZoutput_with_sparse_inputZoutput_with_dense_inputr"   r"   r#   *test_silhouette_samples_precomputed_sparse  s    rx   c                 C   s^   t jg dgt jdj}g d}t|}| |}t|s<J t||}t||}t|| dS )rp   rq   rk   rr   Nrs   ru   r"   r"   r#   (test_silhouette_samples_euclidean_sparse'  s    

ry   c                 C   s|   t jg dgt jdj}t|}| |}g d}t |}tjtdd  t	|d||d W d   n1 sn0    Y  dS )	z?Check for non-CSR input to private method `_silhouette_reduce`.rq   rk   rr   z=Expected CSR matrix. Please pass sparse matrix in CSR format.r[   r   )startr-   label_freqsN)
r*   r+   rt   rW   r   Zbincountr   r`   	TypeErrorr
   )r   r   rv   rw   r    r{   r"   r"   r#   test_silhouette_reduce7  s    
r}   c                 C   sX   t jjdd}tjtdd( | |ddt d W d   n1 sJ0    Y  dS )z+Assert message when there is only one labelr   seedNumber of labels isr[   rd   r   N)r*   randomRandomStater   r`   ra   randrV   funcrngr"   r"   r#   assert_raises_on_only_one_labelH  s    r   c                 C   sX   t jjdd}tjtdd( | |ddt d W d   n1 sJ0    Y  dS )z7Assert message when all point are in different clustersr   r~   r   r[   rd   r   N)r*   r   r   r   r`   ra   r   r]   r   r"   r"   r#   (assert_raises_on_all_points_same_clusterO  s    r   c                  C   s   t t tt dttddgd dgd  ks8J dtddgddggd dgd dgd  ksjJ 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&   rd   r   r      r(   r%   r@   rd   rN      r   g      [@)r   r   r   r*   onesr   r   r   r-   r"   r"   r#   test_calinski_harabasz_scoreV  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svJ 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 sD0    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%   r@   rd   rN   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_scorel  s4    "
$( 
*r   c                  C   s   t g dg dg dgg ddd} | tdks6J tjtdd	4 t g d
g dg dgg ddd W d   n1 s~0    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?rl   r[   )r(   r(   r   N)r	   r   r   r`   ra   )resultr"   r"   r#   )test_silhouette_score_integer_precomputed  s    r   )-r   numpyr*   r   Znumpy.testingr   Zscipy.sparser   Zsklearnr   Zsklearn.metricsr   Zsklearn.metrics.clusterr   r   r   r	   Z%sklearn.metrics.cluster._unsupervisedr
   Zsklearn.utils._testingr   Zsklearn.utils.fixesr   r   r   r   markZparametrizer$   r/   rZ   rc   re   rg   rt   Zfloat64ro   rx   ry   r}   r   r   r   r   r   r"   r"   r"   r#   <module>   sV    




#