o
    \i/                     @   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s@J |dksFJ |t	|ksOJ d S )Nr   r      	euclideanmetricprecomputed)r   r   random_state)
r   	load_irisdatatargetintshaper   r	   pytestapprox)r   r   datasetXyDscore_precomputedscore_euclidean r&   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/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 |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_14   s   


r4   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@r6   gp=
ף@RQ@gRQ@gףp=
W @RQ@g\(\@      @Gz@Gz@Gz@Gz@      @r5         @gGz@r>   g\(\@g      @r>   r>   r?   g\(\@Gz@g      @r=   g      @gRQ@      @g      @gRQ@g      @RQ@r;   g      @g\(\@r@   rA   rA   r<   rA   g      @gRQ@rB   g      @r:   gGz@rC   r9   r;   g\(\@g      @r+   rC   r;   r?   r5   r8   rA   gGz@r7   r<   )   rD   rD   )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)rN   rF   rK   rM   rG   rJ   rQ   rI   rO   rH   rP   rL   gQ?)r,   r      rS   r,   r,   r   r,   r,   rS   rS   r   gGz?g)\(?gzG?gGz?g{Gz?g      ?g(\?gQ?gףp=
?)rN   rK   rF   rM   rJ   rQ   rG   rL   rI   rO   rP   rH   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   r/   r	   )lowerr#   nameslabels1	expected1score1labels2	expected2score2r1   scorer&   rV   r'   test_silhouette_paper_exampleK   s`   
D
rf   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	   rZ   )r    r!   r"   err_msgr&   r&   r'   test_correct_labelsize   s$   "ro   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!   r1   r&   r&   r'   test_non_encoded_labels   s    rq   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   $rs   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)rR   皙?gQ?gq=
ףp?g(\?皙?rt   )r   r   r   r,   r,   r,   rp   r   r   r   i  contains non-zerorg   )r   r.   r/   r\   finfort   epsr   r   rl   rm   )rt   distsr1   r&   r&   r'   test_silhouette_nonzero_diag  s   "r|   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.rR   ru   ru   rR   ru   rv   rR   ru   rw   r   r   r   r   r,   r,   r,   r,   r   r   Nr.   r/   float32r\   r   r   r   r   r   r!   r"   pdist_densepdist_sparseoutput_with_sparse_inputoutput_with_dense_inputr&   r&   r'   *test_silhouette_samples_precomputed_sparse  s   r   c                 C   s^   t jg dgt jdj}g d}t|}| |}t|sJ t||}t||}t|| dS )r}   r~   rw   r   Nr   r   r&   r&   r'   (test_silhouette_samples_euclidean_sparse'  s   

r   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   dS 1 s8w   Y  dS )	z?Check for non-CSR input to private method `_silhouette_reduce`.r~   rw   r   z=Expected CSR matrix. Please pass sparse matrix in CSR format.rg   r   )startr1   label_freqsN)
r.   r/   r   r\   r   bincountr   rl   	TypeErrorr
   )r   r!   r   r   r"   r   r&   r&   r'   test_silhouette_reduce7  s   
"r   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 isrg   rp   r   N)r.   randomRandomStater   rl   rm   randrZ   funcrngr&   r&   r'   assert_raises_on_only_one_labelH     "r   c                 C   r   )z7Assert message when all point are in different clustersr   r   r   rg   rp   r   N)r.   r   r   r   rl   rm   r   ri   r   r&   r&   r'   (assert_raises_on_all_points_same_clusterO  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*   rp   r   r      r,   r)   rE   rp   rS      r   g      [@)r   r   r   r.   onesr   r   r!   r1   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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)   rE   rp   rS   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  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?rx   rg   )r,   r,   r   N)r	   r   r   rl   rm   )resultr&   r&   r'   )test_silhouette_score_integer_precomputed  s   "r   )-r   numpyr.   r   numpy.testingr   scipy.sparser   sklearnr   sklearn.metricsr   sklearn.metrics.clusterr   r   r   r	   %sklearn.metrics.cluster._unsupervisedr
   sklearn.utils._testingr   sklearn.utils.fixesr   r   r   r   markparametrizer(   r4   rf   ro   rq   rs   r   float64r|   r   r   r   r   r   r   r   r   r&   r&   r&   r'   <module>   sX     




#