
    0Ph/                        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z   ez   ez   ez             ej                            dddg          d                         Zd Zd Zd Zd Z d Z!ej                            dej"        ej#        f          d             Z$ej                            d
eez   ez   ez             d             Z%ej                            d
eez   ez   ez             d             Z&ej                            d
eez   ez             d             Z'd Z(d Z)d Z*d Z+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                 r   t          j                    }|j        |j        }}|  | |          }|dk    rt	          |j        d         dz            n|}t          |d          }t          ||d|d          }t          ||d|d          }|dk    sJ |dk    sJ |t          j	        |          k    sJ 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_euclideans           o/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pytest_silhouetter)      s      ""G<qA#Q)4)>)>#agaj1n%%%KK1[111A(	1]!   '	1[k  O q    Qo > >>>>>>>    c                      dgdgdgdgdgdgg} t          j        g d          }t          | |          }t          j        |          rJ t	          | |          }t          |g d           d S )N              ?g       @      @)r      r/   r/   r   r   )r         ?r0   r   r/   r/   )nparrayr
   isnanr	   r   )r#   labels
silhouettesss       r(   test_cluster_size_1r7   4   s     usecUSE2AX((())F "!V,,Jx
#####	Av	&	&Br11122222r*   c                     g d} t          j        d          }| |t          j        dd          <   ||j        z  }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             t	          j        t          |t          j        |	          d!"          d#$           t	          j        |
t          |t          j        |	          d!"          d#$           d S )%N)BRQ@      @      @gRQ@r:   gp=
ף@RQ@gRQ@gףp=
W @RQ@g\(\@      @Gz@Gz@Gz@Gz@      @r9         @gGz@rB   g\(\@g      @rB   rB   rC   g\(\@Gz@g      @rA   g      @gRQ@      @g      @gRQ@g      @RQ@r?   g      @g\(\@rD   rE   rE   r@   rE   g      @gRQ@rF   g      @r>   gGz@rG   r=   r?   g\(\@g      @r.   rG   r?   rC   r9   r<   rE   gGz@r;   r@   )   rH   rH   )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)rR   rJ   rO   rQ   rK   rN   rU   rM   rS   rL   rT   rP   gQ?)r/   r      rW   r/   r/   r   r/   r/   rW   rW   r   gGz?g)\(?gzG?gGz?g{Gz?g      ?g(\?gQ?gףp=
?)rR   rO   rJ   rQ   rN   rU   rK   rP   rM   rS   rT   rL   c                      g | ]
}|         S  rY   ).0nameexpecteds     r(   
<listcomp>z1test_silhouette_paper_example.<locals>.<listcomp>   s    555tHTN555r*   r   r   g{Gz?)abs)	r1   zerostril_indicesTr    r!   r	   r2   r
   )lowerr%   nameslabels1	expected1score1labels2	expected2score2r4   scorer\   s              @r(   test_silhouette_paper_examplerk   K   s   C C CEH 	A!&Abob"HA  E  322G I F 322G I F 
)V$	)V$$ 
 
% 6555u555q"(6"2"2=III	
 	
 	
 	

 	#Arx'7'7NNNTX	
 	
 	
 	
 	

 
r*   c                  T   t          j                    } | j        }t          j        |j        d                   }dt          t          j        |                    z  }t          j	        t          |          5  t          ||           d d d            n# 1 swxY w Y   t          j        |j        d                   }dt          t          j        |                    z  }t          j	        t          |          5  t          ||           d d d            d S # 1 swxY w Y   d S )Nr   zJNumber of labels is %d\. Valid values are 2 to n_samples - 1 \(inclusive\)match)r   r   r   r1   aranger   lenuniquer    raises
ValueErrorr
   r_   )r"   r#   r$   err_msgs       r(   test_correct_labelsizeru      s    ""GA 		!'!*A	*,/	!,=,=	>  
z	1	1	1  A               	A	*,/	!,=,=	>  
z	1	1	1  A                 s$   9BBB?DD!$D!c                      t          j                    } | j        }| j        }t	          ||dz  dz             t	          ||          k    sJ t          t          ||dz  dz             t          ||                     d S )Nr   
   )r   r   r   r   r
   r   r	   )r"   r#   r4   s      r(   test_non_encoded_labelsrx      s     ""GA^FAvzB//3CAv3N3NNNNN1fqj2o..0B1f0M0M    r*   c                      t          j                    } | j        }| j        }t	          t          |          t          |                    t	          ||          k    sJ d S )N)r   r   r   r   r
   list)r"   r#   r$   s      r(   test_non_numpy_labelsr{      sV     ""GAADGGT!WW--1A!Q1G1GGGGGGGr*   dtypec                    t          t          j        g dg|           j                  }g d}t          j        |j                  j        dz  |d         d<   t          ||d           t          j        |j                  j        dz  |d         d<   t          j	        t          d	
          5  t          ||d           d d d            d S # 1 swxY w Y   d S )N)rV   皙?gQ?gq=
ףp?g(\?皙?r|   )r   r   r   r/   r/   r/   rw   r   r   r   i  contains non-zerorm   )r   r1   r2   ra   finfor|   epsr	   r    rr   rs   )r|   distsr4   s      r(   test_silhouette_nonzero_diagr     s=    
3334EBBBD E  F (5;''+b0E!HQKuf];;;; (5;''+d2E!HQK	z)<	=	=	= @ @5&????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   1CCCc                    t          j        g dgt           j                  j        }g d}t	          |          } | |          }t          |          sJ t          ||d          }t          ||d          }t          ||           dS )BCheck that silhouette_samples works for sparse matrices correctly.rV   r~   r~   rV   r~   r   rV   r~   r   r   r   r   r   r/   r/   r/   r/   r   r   Nr1   r2   float32ra   r   r   r	   r   r   r#   r$   pdist_densepdist_sparseoutput_with_sparse_inputoutput_with_dense_inputs          r(   *test_silhouette_samples_precomputed_sparser     s     	:::;2:NNNPA   A$Q''K##K00LL!!!!!1,-XXX0aVVV,.EFFFFFr*   c                    t          j        g dgt           j                  j        }g d}t	          |          } | |          }t          |          sJ t          ||          }t          ||          }t          ||           dS )r   r   r   r   Nr   r   s          r(   (test_silhouette_samples_euclidean_sparser   '  s     	:::;2:NNNPA   A$Q''K##K00LL!!!!!1,BB0a@@,.EFFFFFr*   c                 H   t          j        g dgt           j                  j        }t	          |          } | |          }g d}t          j        |          }t          j        t          d          5  t          |d||           ddd           dS # 1 swxY w Y   dS )	z?Check for non-CSR input to private method `_silhouette_reduce`.r   r   r   z=Expected CSR matrix. Please pass sparse matrix in CSR format.rm   r   )startr4   label_freqsN)
r1   r2   r   ra   r   bincountr    rr   	TypeErrorr   )r   r#   r   r   r$   r   s         r(   test_silhouette_reducer   7  s
   
 	:::;2:NNNPA$Q''K##K00L   A+a..K	M
 
 
 U U 	<qTTTT	U U U U U U U U U U U U U U U U U Us   6BBBc                    t           j                            d          }t          j        t
          d          5   | |                    dd          t          j        d                     ddd           dS # 1 swxY w Y   dS )z+Assert message when there is only one labelr   seedNumber of labels isrm   rw   r   N)r1   randomRandomStater    rr   rs   randr_   funcrngs     r(   assert_raises_on_only_one_labelr   H  s    
)

Q

'
'C	z)>	?	?	? , ,SXXb!__bhrll+++, , , , , , , , , , , , , , , , , ,   3A<<B B c                    t           j                            d          }t          j        t
          d          5   | |                    dd          t          j        d                     ddd           dS # 1 swxY w Y   dS )z7Assert message when all point are in different clustersr   r   r   rm   rw   r   N)r1   r   r   r    rr   rs   r   ro   r   s     r(   (assert_raises_on_all_points_same_clusterr   O  s    
)

Q

'
'C	z)>	?	?	? - -SXXb!__bimm,,,- - - - - - - - - - - - - - - - - -r   c                     t          t                     t          t                     dt          t          j        d          dgdz  dgdz  z             k    sJ dt          ddgddggdz  dgdz  dgdz  z             k    sJ ddgddggdz  d	d	gd
d
ggdz  z   dd
gdd	ggdz  z   d	dgd
dggdz  z   } dgdz  dgdz  z   dgdz  z   d	gdz  z   }t          j        t          | |          d           d S )Nr-   rw   r   r      r/   r,   rI   rw   rW      r   g      [@)r   r   r   r1   onesr    r!   r#   r4   s     r(   test_calinski_harabasz_scorer   V  sY   #$;<<<,-DEEE )"''*:*:QC!GqcAg<MNNNNNN )B8aV*<r*AA38qcTVhCVWWWWWW Q!Q1q6Aq6
Q
	q6Aq6
Q
	 q6Aq6
Q
	  S2Xb A38+qcBh6F
M)!V446STTTTTr*   c                  v   t          t                     t          t                     t          t          j        d          dgdz  dgdz  z             t          j        d          k    sJ t          ddgddggdz  dgdz  dgdz  z             t          j        d          k    sJ ddgddggdz  ddgd	d	ggdz  z   dd	gddggdz  z   ddgd	dggdz  z   } dgdz  dgdz  z   d
gdz  z   dgdz  z   }t          j        t          | |          d
t          j        d          z  dz             t          j	                    5  t          j
        dt                     t          | |           d d d            n# 1 swxY w Y   ddgd
d
gddgddgg} g d}t          j        t          | |          d           d S )Nr   r   r   r/   r,   rI   rw   rW   r   r   r0   error)r   r   r/   r   g?)r   r   r   r1   r   r    r!   sqrtwarningscatch_warningssimplefilterRuntimeWarningr   s     r(   test_davies_bouldin_scorer   l  sg   #$8999,-ABBB   0 01#'QC!G2CDDI I    
  
bAq6R!rQC"H!4 	s		    Q!Q1q6Aq6
Q
	q6Aq6
Q
	 q6Aq6
Q
	  S2Xb A38+qcBh6F
M&q&111rws||3Ca3GHHH 
	 	"	" ( (g~666Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 Q!Q!Q!Q(A\\F
M&q&11=AAAAAs   +E99E= E=c                     t          g dg dg dgg dd          } | t          j        d          k    sJ t          j        t          d	          5  t          g d
g dg dgg dd           ddd           dS # 1 swxY 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?r   rm   )r/   r/   r   N)r
   r    r!   rr   rs   )results    r(   )test_silhouette_score_integer_precomputedr     s   
 	IIIyyy)999]  F V]5)))))) 
z)<	=	=	= 
 
YY			999-yyy	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A>>BB)-r   numpyr1   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)   r7   rk   ru   rx   r{   r   float64r   r   r   r   r   r   r   r   r   rY   r*   r(   <module>r      s3         ) ) ) ) ) ) ! ! ! ! ! !       . . . . . .            E D D D D D 5 5 5 5 5 5            	F^n,~=N  v77? ? 87	 
?*3 3 3.K
 K
 K
\  0  H H H 2:rz":;;@ @ <;@( ^#n4~E 	G 	G	 	G ^#n4~E 	G 	G	 	G 7.H U U U, , ,- - -U U U, B  B  BF
 
 
 
 
r*   