
    Pi                        d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ ej                            dddg          ej                            d	d
dg          d                         Zej                            de          d             Zej                            dddg          d             Zd Zej                            dedgz             d             Zej                            dedgz             d             Zej                            dedgz             d             Zej                            dd          d             Zd ZdS )    N)BisectingKMeans)v_measure_score)assert_allcloseassert_array_equal)CSR_CONTAINERSbisecting_strategybiggest_inertialargest_clusterinitz	k-means++randomc                    t          j        ddgddgddgddgddgddgddgddgddgg	          }t          dd| |          }|                    |           ddgddgddgg}g d	}t	          t          |          t          |j                                                             t	          t          ||j	                  d
           dS )znTries to perform bisect k-means for three clusters to check
    if splitting data is performed correctly.
       
      r         	   )
n_clustersrandom_stater   r   )	r   r   r   r   r   r   r   r   r   g      ?N)
nparrayr   fitr   sortedcluster_centers_tolistr   labels_)r   r   Xbisect_meansexpected_centersexpected_labelss         }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/cluster/tests/test_bisect_k_means.pytest_three_clustersr"   
   s    	
Q"a1a&2q'Aq6B7RGb!WrSUhW	 	A #-	  L QAQ"a1111O  &)F)M)M)O)O"P"P   OO\5IJJCPPPPP    csr_containerc                 N   t           j                            d          }|                    dd          }d||dk     <    | |          }t	          dd          }|                    |           |j        }|                    |           |j        }t          ||d           d	S )
zvTest Bisecting K-Means with sparse data.

    Checks if labels and centers are the same between dense and sparse.
    r      r   皙?r   r   r   g:0yE>)atolN)r   r   RandomStaterandr   r   r   r   )r$   rngr   X_csrr   sparse_centersnormal_centerss          r!   test_sparser0   $   s     )


"
"CQAAa#gJM!E"aa@@@LU!2NQ!2N NN>>>>>>r#   r         c                 .   t           j                            d          }|                    dd          }t	          | d          }|                    |           t          t          j        |j                  t          j	        |                      dS )z:Test if resulting labels are in range [0, n_clusters - 1].r   r   r   r(   N)
r   r   r*   r+   r   r   r   uniquer   arange)r   r,   r   r   s       r!   test_n_clustersr6   =   s}     )


"
"CQA"jqIIILQry!566	*8M8MNNNNNr#   c                     t          j        ddgddgddgg          } t          dd                              |           }t	          |j        dk              sJ t	          |                    |           dk              sJ t          |j        | 	                    d          
                    dd                     d	S )
zTest single cluster.r   r   r   r   r   r(   )axisN)r   r   r   r   allr   predictr   r   meanreshape)r   r   s     r!   test_one_clusterr>   J   s     	1a&2q'B7+,,A"aa@@@DDQGGL |#q()))))|##A&&!+,,,,,L1166q6>>3I3I!R3P3PQQQQQr#   c                 8   t           j                            d          }|                    dd          }| d||dk     <    | |          }t	          dd          }|                    |           t          |j        |                    |                     dS )zFCheck if labels from fit(X) method are same as from fit(X).predict(X).r   r   r   Nr'   r   r(   )	r   r   r*   r+   r   r   r   r   r;   )r$   r,   r   r   s       r!   test_fit_predictr@   X   s     )


"
"CQA !c'
M!"aa@@@LQ|+\-A-A!-D-DEEEEEr#   c                 6   t           j                            d          }|                    dd                              |d          }| d||dk     <    | |          }t          dd	          }|                    |           |j        j        |k    sJ dS )
z9Check that centers dtype is the same as input data dtype.r   r   r   F)copyNr'   r   r(   )	r   r   r*   r+   astyper   r   r   dtype)r$   global_dtyper,   r   kms        r!   test_dtype_preservedrG   i   s     )


"
"CQ|%88A !c'
M!	AA	6	6	6BFF1III$444444r#   c                    t           j                            d          }|                    dd          }| d||dk     <    | |          }t	          dd                              |          }t	          dd                              |                    t           j                            }t          |j	        |j	                   t          |j        |j                   dS )z@Check that the results are the same between float32 and float64.r   r   r   Nr'   r   r(   )r   r   r*   r+   r   r   rC   float32r   r   r   r   )r$   r,   r   km64km32s        r!    test_float32_float64_equivalencerL   y   s     )


"
"CQA !c'
M!aa888<<Q??Daa888<<QXXbj=Q=QRRDD)4+@AAAt|T\22222r#   	algorithm)lloydelkanc                    t           j                            d          }|                    dd          }t	          d|                               |          }d|                    dd          z  }|                    |          }t          j        t          j        |          t          j	        d                    
                                sJ d S )Nr   i  r   )r   rM   2   d   )r   r   r*   r+   r   r   r;   isinr4   r5   r:   )rM   r,   X_trainbkmX_testlabelss         r!   !test_no_crash_on_empty_bisectionsrX      s     )


"
"ChhtR  G
R9
=
=
=
A
A'
J
JC #((3###F[[  F729V$$bimm4488:::::::r#   c                      t           j                            d          } t          dd                              |            d S )N)   r   )sizer	   r   )r   r   )r   r   normalr   r   )r   s    r!   test_one_featurer]      sD     		h''A'8qIIIMMaPPPPPr#   )numpyr   pytestsklearn.clusterr   sklearn.metricsr   sklearn.utils._testingr   r   sklearn.utils.fixesr   markparametrizer"   r0   r6   r>   r@   rG   rL   rX   r]    r#   r!   <module>rg      s+        + + + + + + + + + + + + F F F F F F F F . . . . . . -0ACT/UVV+x!899Q Q :9 WVQ0 .99? ? :9?0 1v..	O 	O /.	OR R R .D6*ABBF F CBF  .D6*ABB5 5 CB5 .D6*ABB3 3 CB3  &899; ; :9;Q Q Q Q Qr#   