
    =[g/                        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j4                  j7                  d
dgez   ez   ez   ez         ej4                  j7                  dddg      d               Zd Zd Zd Zd Z d Z!ej4                  j7                  dejD                  ejF                  f      d        Z$ej4                  j7                  d
eez   ez   ez         d        Z%ej4                  j7                  d
eez   ez   ez         d        Z&ej4                  j7                  d
eez   ez         d        Z'd Z(d Z)d Z*d Z+d Z,y)    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                 ^   t        j                         }|j                  |j                  }}|  | |      }|dk(  rt	        |j
                  d   dz        n|}t        |d      }t        ||d|d      }t        ||d|d      }|dkD  sJ |dkD  sJ |t        j                  |      k(  sJ y )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           j/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/metrics/cluster/tests/test_unsupervised.pytest_silhouetter)      s       "G<<qA#Q)4)>#aggaj1n%KK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       y )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   sh     usecUSE2AXX()F "!V,Jxx
###	Av	&Br1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 ]  \  }	}
}|D cg c]  }|
|   	 }
}t	        j
                  |
t        |t        j                  |	      d !      d"#       t	        j
                  |t        |t        j                  |	      d !      d"#        y c c}w )$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   r   r   g{Gz?)abs)	r1   zerostril_indicesTr    r!   r	   r2   r
   )lowerr%   nameslabels1	expected1score1labels2	expected2score2r4   expectedscorenames                r(   test_silhouette_paper_examplerg   K   sN   CEH 	A!&Aboob"HAE  3GI F 3GI F 
)V$	)V$$% 055utHTNu5q"((6"2=I	

 	#Arxx'7NTX	
$ 6s   Dc                  @   t        j                         } | j                  }t        j                  |j
                  d         }dt        t        j                  |            z  }t        j                  t        |      5  t        ||       d d d        t        j                  |j
                  d         }dt        t        j                  |            z  }t        j                  t        |      5  t        ||       d d d        y # 1 sw Y   }xY w# 1 sw Y   y xY w)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
   rY   )r"   r#   r$   err_msgs       r(   test_correct_labelsizerq      s      "GA 			!''!*A	*,/		!,=	>  
z	1A 
2 	A	*,/		!,=	>  
z	1A 
2	1 
2	1 
2	1s   ?D2DDDc                      t        j                         } | j                  }| j                  }t	        ||dz  dz         t	        ||      k(  sJ t        t        ||dz  dz         t        ||             y )Nr   
   )r   r   r   r   r
   r   r	   )r"   r#   r4   s      r(   test_non_encoded_labelsrt      sk      "GA^^FAvzB/3CAv3NNNN1fqj2o.0B1f0Mr*   c                      t        j                         } | j                  }| j                  }t	        t        |      t        |            t	        ||      k(  sJ y )N)r   r   r   r   r
   list)r"   r#   r$   s      r(   test_non_numpy_labelsrw      sG      "GAADGT!W-1A!Q1G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        y # 1 sw Y   y xY w)N)rV   皙?gQ?gq=
ףp?g(\?皙?rx   )r   r   r   r/   r/   r/   rs   r   r   r   i  contains non-zerori   )r   r1   r2   r[   finforx   epsr	   r    rn   ro   )rx   distsr4   s      r(   test_silhouette_nonzero_diagr     s     
34EBDDE  F ((5;;'++b0E!HQKuf]; ((5;;'++d2E!HQK	z)<	=5&? 
>	=	=s   ?CC c                     t        j                  g dgt         j                        j                  }g d}t	        |      } | |      }t        |      sJ t        ||d      }t        ||d      }t        ||       y)BCheck that silhouette_samples works for sparse matrices correctly.rV   rz   rz   rV   rz   r{   rV   rz   r|   r   r   r   r   r/   r/   r/   r/   r   r   Nr1   r2   float32r[   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     ss     	:;2::NPPA A$Q'K#K0LL!!!1,-X0aV,.EFr*   c                     t        j                  g dgt         j                        j                  }g d}t	        |      } | |      }t        |      sJ t        ||      }t        ||      }t        ||       y)r   r   r|   r   Nr   r   s          r(   (test_silhouette_samples_euclidean_sparser   '  so     	:;2::NPPA A$Q'K#K0LL!!!1,B0a@,.EFr*   c                 >   t        j                  g dgt         j                        j                  }t	        |      } | |      }g d}t        j
                  |      }t        j                  t        d      5  t        |d||       ddd       y# 1 sw Y   yxY w)	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.ri   r   )startr4   label_freqsN)
r1   r2   r   r[   r   bincountr    rn   	TypeErrorr   )r   r#   r   r   r$   r   s         r(   test_silhouette_reducer   7  sz    
 	:;2::NPPA$Q'K#K0L A++a.K	M
 	<qT	
 
 
s   :BBc                     t         j                  j                  d      }t        j                  t
        d      5   | |j                  dd      t        j                  d             ddd       y# 1 sw Y   yxY w)z+Assert message when there is only one labelr   seedNumber of labels isri   rs   r   N)r1   randomRandomStater    rn   ro   randrY   funcrngs     r(   assert_raises_on_only_one_labelr   H  sQ    
))

Q

'C	z)>	?SXXb!_bhhrl+ 
@	?	?   -A22A;c                     t         j                  j                  d      }t        j                  t
        d      5   | |j                  dd      t        j                  d             ddd       y# 1 sw Y   yxY w)z7Assert message when all point are in different clustersr   r   r   ri   rs   r   N)r1   r   r   r    rn   ro   r   rk   r   s     r(   (assert_raises_on_all_points_same_clusterr   O  sQ    
))

Q

'C	z)>	?SXXb!_biim, 
@	?	?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       y )Nr-   rs   r   r      r/   r,   rI   rs   rW      r   g      [@)r   r   r   r1   onesr    r!   r#   r4   s     r(   test_calinski_harabasz_scorer   V  s3   #$;<,-DE )"'''*:QC!GqcAg<MNNNN )B8aV*<r*AA38qcTVhCVWWWW Q!Q1q6Aq6
Q
	q6Aq6
Q
	 q6Aq6
Q
	  S2Xb A38+qcBh6F
MM)!V46STr*   c                  <   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        ddgd
d
gddgddgg} g d}t        j                  t        | |      d       y # 1 sw Y   <xY w)Nr   r   r   r/   r,   rI   rs   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  s   #$89,-AB   01#'QC!G2CDI   
  
bAq6R!rQC"H!4	s	   Q!Q1q6Aq6
Q
	q6Aq6
Q
	 q6Aq6
Q
	  S2Xb A38+qcBh6F
MM&q&11rwws|3Ca3GH 
	 	 	"g~6Q' 
#
 Q!Q!Q!Q(AF
MM&q&1=A 
#	"s   0'FF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       y# 1 sw Y   yxY w)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}   ri   )r/   r/   r   N)r
   r    r!   rn   ro   )results    r(   )test_silhouette_score_integer_precomputedr     sh    
 	Iy)9]F V]]5)))) 
z)<	=	9-y	
 
>	=	=s   A22A;)-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   rg   rq   rt   rw   r   float64r   r   r   r   r   r   r   r   r    r*   r(   <module>r      s      ) !  .  E 5  	F^n,~=N v7? 8	
?*3.K
\0H 2::rzz":;@ <@( ^#n4~E	G		G ^#n4~E	G		G 7.HUU,-U, BF
r*   