
    sg                        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                  j                  dddg      ej                  j                  d	d
dg      d               Zej                  j                  de      d        Zej                  j                  dddg      d        Zd Zej                  j                  dedgz         d        Zej                  j                  dedgz         d        Zej                  j                  dedgz         d        Zej                  j                  dd      d        Zd Zy)    N)BisectingKMeans)v_measure_score)assert_allcloseassert_array_equal)CSR_CONTAINERSbisecting_strategybiggest_inertialargest_clusterinitz	k-means++randomc                 n   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| |      }|j                  |       ddgddgddgg}g d	}t	        t        |      t        |j                  j                                      t	        t        ||j                        d
       y)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         \/var/www/html/venv/lib/python3.12/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1O &)F)F)M)M)O"P OO\5I5IJCP    csr_containerc                 0   t         j                  j                  d      }|j                  dd      }d||dk  <    | |      }t	        dd      }|j                  |       |j                  }|j                  |       |j                  }t        ||d       y	)
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!E"aa@LU!22NQ!22N NN>r#   r         c                    t         j                  j                  d      }|j                  dd      }t	        | d      }|j                  |       t        t        j                  |j                        t        j                  |              y)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   =   sc     ))


"CQA"jqILQryy!5!56		*8MNr#   c                  V   t        j                  ddgddgddgg      } t        dd      j                  |       }t	        |j
                  dk(        sJ t	        |j                  |       dk(        sJ t        |j                  | j                  d      j                  dd             y	)
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GL |##q()))|##A&!+,,,L11166q6>3I3I!R3PQr#   c                    t         j                  j                  d      }|j                  dd      }| d||dk  <    | |      }t	        dd      }|j                  |       t        |j                  |j                  |             y)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   sy     ))


"CQA !c'
!"aa@LQ|++\-A-A!-DEr#   c                    t         j                  j                  d      }|j                  dd      j	                  |d      }| d||dk  <    | |      }t        dd	      }|j                  |       |j                  j                  |k(  sJ y)
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|%8A !c'
!	AA	6BFF1I$$444r#   c                    t         j                  j                  d      }|j                  dd      }| d||dk  <    | |      }t	        dd      j                  |      }t	        dd      j                  |j                  t         j                              }t        |j                  |j                         t        |j                  |j                         y)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'
!aa8<<Q?Daa8<<QXXbjj=QRDD))4+@+@At||T\\2r#   	algorithm)lloydelkanc                    t         j                  j                  d      }|j                  dd      }t	        d|       j                  |      }d|j                  dd      z  }|j                  |      }t        j                  t        j                  |      t        j                  d            j                         sJ y )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'
JC #((3##F[[ F77299V$biim488:::r#   c                  |    t         j                  j                  d      } t        dd      j	                  |        y )N)   r   )sizer	   r   )r   r   )r   r   normalr   r   )r   s    r!   test_one_featurer]      s1     			h'A'8qIMMa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      sp     + + F . -0ACT/UV+x!89Q : WQ0 .9? :?0 1v.	O /	OR .D6*ABF CF  .D6*AB5 C5 .D6*AB3 C3  &89; :;Qr#   