
    _nd)                     ,   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
 Zd Zd Zd Zd Zd Zej                            dej        ej        f          d             Zd Zd Zd Z d Z!d Z"dS )    N)
csr_matrix)datasets)assert_array_equal)silhouette_score)silhouette_samples)pairwise_distances)calinski_harabasz_score)davies_bouldin_scorec            
         t          j                    } | j        }t          |          }t	          j        |          }t	          j        |          }| j        }||||fD ]}t          |d          }t          ||d          }|dk    sJ t          ||d          }	t          j        ||	           ||u r|}
nt          j        |	|
           t          ||dt          |j        d         dz            d          }t          ||dt          |j        d         dz            d          }	|dk    sJ |	dk    sJ t          j        |	|           ||u r|}t          j        |	|           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_samplings               Olib/python3.11/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pytest_silhouetter*      s    ""GlGwEM'""EM'""EAueU+ F Fq555 -Q-HHH 1$$$$*1aDDD'999<<+<((M/+GHHH -qC
Q4G4GVW
 
 
 +q#agaj1n2E2ETU
 
 
 !1$$$$""""o'8999<<(9%%M/+DEEEE;F F    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      r0   r0   r   r   )r         ?r1   r   r0   r0   )nparrayr   isnanr   r   )r#   labels
silhouettesss       r)   test_cluster_size_1r8   :   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@      @r:         @gGz@rC   g\(\@g      @rC   rC   rD   g\(\@Gz@g      @rB   g      @gRQ@      @g      @gRQ@g      @RQ@r@   g      @g\(\@rE   rF   rF   rA   rF   g      @gRQ@rG   g      @r?   gGz@rH   r>   r@   g\(\@g      @r/   rH   r@   rD   r:   r=   rF   gGz@r<   rA   )   rI   rI   )BELBRACHICUBEGYFRAINDISRUSAUSSYUGZAI)r0   r0   r   r   r0   r0   r   r0   r0   r   r   r0   gQ?g(\?gffffff?g333333?g)\(?皙?gRQ?g?g(\?gQ?gp=
ף?g{Gz)rS   rK   rP   rR   rL   rO   rV   rN   rT   rM   rU   rQ   gQ?)r0   r      rX   r0   r0   r   r0   r0   rX   rX   r   gGz?g)\(?gzG?gGz?g{Gz?g      ?g(\?gQ?gףp=
?)rS   rP   rK   rR   rO   rV   rL   rQ   rN   rT   rU   rM   c                      g | ]
}|         S  rZ   ).0nameexpecteds     r)   
<listcomp>z1test_silhouette_paper_example.<locals>.<listcomp>   s    555tHTN555r+   r   r   g{Gz?)abs)	r2   zerostril_indicesTr   r   r   r3   r   )lowerr$   nameslabels1	expected1score1labels2	expected2score2r5   scorer]   s              @r)   test_silhouette_paper_examplerl   Q   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   r2   aranger   lenuniquer   raises
ValueErrorr   r`   )r   r#   r"   err_msgs       r)   test_correct_labelsizerv      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#   r5   s      r)   test_non_encoded_labelsry      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)rW   g?gQ?gq=
ףp?g(\?g?)r}   )r   r   r   r0   r0   r0   rx   r   r   r   i  contains non-zerorn   )r   r2   r3   rb   finfor}   epsr   r   rs   rt   )r}   distsr5   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                            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 isrn   rx   r   N)r2   randomRandomStater   rs   rt   randr`   funcrngs     r)   assert_raises_on_only_one_labelr     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   rn   rx   r   N)r2   r   r   r   rs   rt   r   rp   r   s     r)   (assert_raises_on_all_points_same_clusterr   $  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.   rx   r   r      r0   r-   rJ   rx   rX      r   g      [@)r   r	   r   r2   onesr   r   r#   r5   s     r)   test_calinski_harabasz_scorer   +  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   r0   r-   rJ   rx   rX   r   r   r1   error)r   r   r0   r   g?)r   r
   r   r2   r   r   r   sqrtwarningscatch_warningssimplefilterRuntimeWarningr   s     r)   test_davies_bouldin_scorer   A  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   r0   r   )r0   r   r0   )r   r0   r   )r   r   r0   r   r   gUUUUUU?r   rn   )r0   r0   r   N)r   r   r   rs   rt   )results    r)   )test_silhouette_score_integer_precomputedr   d  s   
 	IIIyyy)999]  F V]5)))))) 
z)<	=	=	= 
 
YY			999-yyy	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A>>BB)#r   numpyr2   scipy.sparsesparser   r   r   sklearnr   sklearn.utils._testingr   sklearn.metrics.clusterr   r   sklearn.metricsr   r	   r
   r*   r8   rl   rv   ry   r|   markparametrizefloat32float64r   r   r   r   r   r   rZ   r+   r)   <module>r      s               # # # # # #       5 5 5 5 5 5 4 4 4 4 4 4 6 6 6 6 6 6 . . . . . . ; ; ; ; ; ; 8 8 8 8 8 8&F &F &FR3 3 3.K
 K
 K
\  0  H H H 2:rz":;;@ @ <;@(, , ,- - -U U U, B  B  BF
 
 
 
 
r+   