U
    -eK1                     @   sZ  d dl Z d dlZd dlZd dlmZ d dlmZ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 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#ej deee	efdd Z$ej deee	efdd Z%ej dee	efdd Z&d d! Z'd"d# Z(d$d% Z)d&d' Z*d(d) Z+dS )*    N)assert_allclose)
csc_matrix
csr_matrix
dok_matrixissparse
lil_matrix)datasets)pairwise_distances)calinski_harabasz_scoredavies_bouldin_scoresilhouette_samplessilhouette_score)_silhouette_reduce)assert_array_equalc                  C   s&  t  } | j}t|}t|}t|}t|}| j}|||||fD ]}t|dd}t	||dd}	|	dkslt
t	||dd}
t|	|
 ||kr|	}nt|
| t	||dt|jd d dd}	t	||dt|jd d dd}
|	dkst
|
dkst
t|
|	 ||kr|	}qBt|
| qBd S )NZ	euclideanmetricprecomputedr      )r   Zsample_sizeZrandom_state)r   	load_irisdatar   r   r   r   targetr	   r   AssertionErrorpytestapproxintshape)datasetZX_denseZX_csrZX_cscZX_dokZX_lilyXDZscore_precomputedZscore_euclideanZscore_dense_without_samplingZscore_dense_with_sampling r    p/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pytest_silhouette   sH            
r"   c                  C   sn   dgdgdgdgdgdgg} t ddddddg}t| |}t |rJtt| |}t|ddddddg d S )	N              ?g       @      @r      r         ?)nparrayr   isnanr   r   r   )r   labelsZ
silhouettessr    r    r!   test_cluster_size_1>   s    


r-   c               B      s  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ddddd(ddgB} t d)}| |t d*d+< ||j7 }d,d-d.d/d0d1d2d3d4d5d6d7g}d8d8d9d9d8d8d9d8d8d9d9d8g}d:d;d<d=d>d?d@dAdBdCdDdEdF}dG}d8d9dHdHd8d8d9d8d8dHdHd9g}dIdJdKdLdMdGdNdOdPdJdQdQdR}dC}|||f|||ffD ]^\}	 }
 fdSdT|D  tj t|t |	dUdVdWdX tj|
t|t |	dUdVdWdX qXd S )YNgRQ@g      @g      @gRQ@gp=
ף@gRQ@gRQ@gףp=
W @gRQ@g\(\@g      @gGz@gGz@gGz@gGz@g      @g      @gGz@g\(\@g      @g\(\@gGz@g      @g      @gRQ@g      @g      @gRQ@g      @gRQ@g      @g\(\@g      @gRQ@g      @gGz@g\(\@g      @r%   gGz@)   r.   r.   BELBRACHICUBEGYFRAINDISRUSAUSSYUGZAIr&   r   gQ?g(\?gffffff?g333333?g)\(?皙?gRQ?g?g(\?gQ?gp=
ף?g{Gz)r8   r0   r5   r7   r1   r4   r;   r3   r9   r2   r:   r6   gQ?   gGz?g)\(?gzG?gGz?g{Gz?g      ?g(\?gQ?gףp=
?)r8   r5   r0   r7   r4   r;   r1   r6   r3   r9   r:   r2   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(   zerosZtril_indicesTr   r   r   r)   r   )lowerr   namesZlabels1Z	expected1Zscore1Zlabels2Z	expected2Zscore2r+   Zscorer    r@   r!   test_silhouette_paper_exampleU   s    D

  rH   c               	   C   s   t  } | j}t|jd }dtt| }tj	t
|d t|| W 5 Q R X t|jd }dtt| }tj	t
|d t|| W 5 Q R X 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   rD   )r   r   r   err_msgr    r    r!   test_correct_labelsize   s     rQ   c                  C   sV   t  } | j}| j}t||d d t||ks4ttt||d d t|| d S )Nr   
   )r   r   r   r   r   r   r   r   )r   r   r+   r    r    r!   test_non_encoded_labels   s      rS   c                  C   s8   t  } | j}| j}tt|t|t||ks4td S )N)r   r   r   r   r   listr   )r   r   r   r    r    r!   test_non_numpy_labels  s    rU   dtypec              	   C   s   t tjddddddgg| dj}dddd	d	d	g}t|jjd
 |d d< t||dd t|jjd |d d< tj	t
dd t||dd W 5 Q R X d S )Nr<   皙?gQ?gq=
ףp?g(\?皙?rV   r   r&   rR   r   r   r   i  contains non-zerorI   )r	   r(   r)   rE   ZfinforV   Zepsr   r   rN   rO   )rV   distsr+   r    r    r!   test_silhouette_nonzero_diag  s    r\   	to_sparsec              	   C   s~   t jddddddddggt jdj}ddddddddg}t|}| |}t|sTtt||dd}t||dd}t|| d	S )
BCheck that silhouette_samples works for sparse matrices correctly.r<   rW   rX   rY   r   r&   r   r   N	r(   r)   float32rE   r	   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    $rd   c              	   C   sv   t jddddddddggt jdj}ddddddddg}t|}| |}t|sTtt||}t||}t|| dS )r^   r<   rW   rX   rY   r   r&   Nr_   ra   r    r    r!   (test_silhouette_samples_euclidean_sparse.  s    $

re   to_non_csr_sparsec              	   C   s   t jddddddddggt jdj}t|}| |}ddddddddg}t |}tjtdd t	|d||d	 W 5 Q R X d
S )z?Check for non-CSR input to private method `_silhouette_reduce`.r<   rW   rX   rY   r   r&   z=Expected CSR matrix. Please pass sparse matrix in CSR format.rI   )startr+   label_freqsN)
r(   r)   r`   rE   r	   Zbincountr   rN   	TypeErrorr   )rf   r   rb   rc   r   rh   r    r    r!   test_silhouette_reduce;  s    $
rj   c              	   C   sD   t jjdd}tjtdd | |ddt d W 5 Q R X dS )z+Assert message when there is only one labelr   seedNumber of labels isrI   rR   r   N)r(   randomRandomStater   rN   rO   randrD   funcrngr    r    r!   assert_raises_on_only_one_labelJ  s    rt   c              	   C   sD   t jjdd}tjtdd | |ddt d W 5 Q R X dS )z7Assert message when all point are in different clustersr   rk   rm   rI   rR   r   N)r(   rn   ro   r   rN   rO   rp   rK   rq   r    r    r!   (assert_raises_on_all_points_same_clusterQ  s    ru   c                  C   s   t t tt dttddgd dgd  ks8tdtddgddggd dgd dgd  ksjt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$   rR   r   r      r&   r#   r/   rR   r=      r   g      [@)rt   r
   ru   r(   onesr   r   r   r   r+   r    r    r!   test_calinski_harabasz_scoreX  s    (2(r{   c               	   C   sv  t t tt ttddgd dgd  tdks>ttddgddggd dgd dgd  tdksvt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 5 Q R X ddgd
d
gddgddgg} dddd
g}tt| |d d S )Nrv   r   rw   r&   r#   r/   rR   r=   rx   r   r'   errorg?)rt   r   ru   r(   ry   r   r   r   sqrtwarningscatch_warningssimplefilterRuntimeWarningrz   r    r    r!   test_davies_bouldin_scoren  s6    "
 ( 
r   c               	   C   s   t dddgdddgdddggdddgdd} | tdks>ttjtdd2 t dddgdddgdddggdddgdd W 5 Q R X d	S )
zvCheck that silhouette_score works for precomputed metrics that are integers.

    Non-regression test for #22107.
    r   r&   r   r   r   gUUUUUU?rZ   rI   N)r   r   r   r   rN   rO   )resultr    r    r!   )test_silhouette_score_integer_precomputed  s        r   ),r~   numpyr(   r   Znumpy.testingr   Zscipy.sparser   r   r   r   r   Zsklearnr   Zsklearn.metricsr	   Zsklearn.metrics.clusterr
   r   r   r   Z%sklearn.metrics.cluster._unsupervisedr   Zsklearn.utils._testingr   r"   r-   rH   rQ   rS   rU   markZparametrizer`   Zfloat64r\   rd   re   rj   rt   ru   r{   r   r   r    r    r    r!   <module>   s:   * 




#