
    0Ph"                        d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZmZ dd	lmZ d
 Zd Zd Zd Zej                            de          d             Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&dS )z+
Tests for the birch clustering algorithm.
    N)AgglomerativeClusteringBirch)generate_clustered_data)
make_blobs)ConvergenceWarning)pairwise_distances_argminv_measure_score)assert_allcloseassert_array_equal)CSR_CONTAINERSc                    t          d|           \  }}|                    |d          }t                      }|                    |           t	          d |j        j        D                       }t	          d |                                D                       }||j        d         k    sJ ||j        d         k    sJ d S )N
   	n_samplesrandom_stateFcopyc                     g | ]	}|j         
S  )
n_samples_).0scs     `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/cluster/tests/test_birch.py
<listcomp>z/test_n_samples_leaves_roots.<locals>.<listcomp>   s    IIIB"-III    c                 0    g | ]}|j         D ]	}|j        
S r   )subclusters_r   )r   leafr   s      r   r   z/test_n_samples_leaves_roots.<locals>.<listcomp>   s*    QQQ4t?PQQQQQQr   r   )	r   astyper   fitsumroot_r   _get_leavesshape)global_random_seedglobal_dtypeXybrcn_samples_rootn_samples_leavess          r   test_n_samples_leaves_rootsr,      s    1CDDDDAq	E**A
''CGGAJJJII#)2HIIIJJNQQ3??#4#4QQQ  qwqz))))QWQZ''''''r   c                    t          d|           \  }}|                    |d          }t          d          }|                    |           t          d           }|                    |d d                    |                    |dd                     t          |j        |j                   |                    d           |                    d            t          |j	        |j	                   d S )Nd   r   Fr      
n_clusters2   )
r   r   r   r    partial_fitr
   subcluster_centers_
set_paramsr   subcluster_labels_)r%   r&   r'   r(   r)   brc_partials         r   test_partial_fitr8      s    2DEEEDAq	E**A
1


CGGAJJJ4(((KAcrcF###AbccF###K3S5LMMM a(((D!!!{5s7MNNNNNr   c                 J   t           j                            |           }t          ddd          }|                    |d          }t          j        d          }|                    |           ||d d f         }t          dd	          }|                    |           |j	        j
        |k    sJ t          |j        |                    |                     |j	        }|j        t          ||                   }t!          t#          ||j                  d           d S )
Nr/   r   )r1   
n_featuresn_samples_per_clusterFr         g      ?r1   	threshold)nprandomRandomStater   r   arangeshuffler   r    r4   dtyper   labels_predictr6   r   r
   r	   )	r%   r&   rngr'   shuffle_indices	X_shuffler)   	centroidsnearest_centroids	            r   test_birch_predictrM   1   s   
)

 2
3
3C1RTUUUA	E**A immOKK   /111$%I
1
,
,
,CGGI "(L8888s{CKK	$:$:;;;'I-!)Y77 O$4ckBBCHHHHHr   c                    t          dd|           \  }}|                    |d          }t          d          }|                    |           t	          |j                  dk    sJ t	          t          j        |j                            dk    sJ t          d          }t          |          }|                    |           t          |j        |j                   t          |j        |j                   t          d          }t          j        t                    5  |                    |           d d d            d S # 1 swxY w Y   d S )	Nr.   r   r   centersr   Fr   r0   g     @)r?   )r   r   r   r    lenr4   r@   uniquerF   r   r   r6   pytestwarnsr   )r%   r&   r'   r(   brc1gcbrc2brc4s           r   test_n_clustersrY   I   s   R>PQQQDAq	E**ABDHHQKKKt'((2----ry&&''2---- 
!B	/	/	/BBDHHQKKKt.0GHHHt|T\222 7###D	(	)	)                   s   *EEEcsr_containerc                    t          dd|           \  }}|                    |d          }t          d          }|                    |            ||          }t          d          }|                    |           |j        j        |k    sJ t          |j        |j                   t          |j        |j                   d S )Nr.   r   rO   Fr   r0   )	r   r   r   r    r4   rE   r   rF   r
   )r%   r&   rZ   r'   r(   r)   csr
brc_sparses           r   test_sparse_Xr^   `   s     R>PQQQDAq	E**A
2


CGGAJJJ
-

C"%%%JNN3 )/<????s{J$6777C+Z-KLLLLLr   c                  &   t          d          \  } }t          d          }|                    | |           d}t          j        t
          |          5  |                    | d d dgf         |           d d d            d S # 1 swxY w Y   d S )Nr.   )r   r/   r0   z3X has 1 features, but Birch is expecting 2 featuresmatchr   )r   r   r3   rS   raises
ValueError)r'   r(   r)   msgs       r   )test_partial_fit_second_call_error_checksre   s   s     $$$DAq
1


COOAq
?C	z	-	-	- & &!!!aS&	1%%%& & & & & & & & & & & & & & & & & &s   "BB
B
c                     | j         }|t          |          k    sJ |D ]}|j        rt          |j        |           d S )N)r   rQ   child_check_branching_factor)nodebranching_factorsubclustersclusters       r   rh   rh      s_    #Ks;////// E E> 	E"7>3CDDDE Er   c                 N   t          |           \  }}|                    |d          }d}t          d |d          }|                    |           t	          |j        |           t          d|d          }|                    |           t	          |j        |           d S )Nr   Fr   	   g{Gz?)r1   rj   r?   r/   )r   r   r   r    rh   r"   )r%   r&   r'   r(   rj   r)   s         r   test_branching_factorrp      s    #5666DAq	E**A 42Bd
S
S
SCGGAJJJ39&6777
1/?4
P
P
PCGGAJJJ39&677777r   c                 j    | j         j        }|r$|j        }|D ]}||j        k    sJ |j        }|"dS dS )z&Use the leaf linked list for traversalN)dummy_leaf_
next_leaf_r   radius)birch_instancer?   current_leafrk   r   s        r   check_thresholdrw      sh    !-8L
 /"/ 	* 	*B	)))))#.	  / / / / /r   c                 6   t          dd|           \  }}|                    |d          }t          dd           }|                    |           t	          |d           t          dd           }|                    |           t	          |d           d S )	NP   r=   rO   Fr   g      ?)r?   r1   g      @)r   r   r   r    rw   )r%   r&   r'   r(   r)   s        r   test_thresholdrz      s    A<NOOODAq	E**A
#$
/
/
/CGGAJJJC
#$
/
/
/CGGAJJJCr   c                      t          d          \  } }t          j        d          }t          |                              |            d S )Nr   rn      r0   )r   r@   int64r   r    )r'   _r1   s      r   test_birch_n_clusters_long_intr      sJ     1%%%DAq!J	Z   $$Q'''''r   c                     t          ddd          \  } }t          d          }|                    |            |j        j        d         }|                                }t          d t          |          D             |           dS )z*Check `get_feature_names_out` for `Birch`.ry   r=   r   r   r:   r   r0   c                     g | ]}d | S )birchr   )r   is     r   r   z*test_feature_names_out.<locals>.<listcomp>   s    ??????r   N)r   r   r    r4   r$   get_feature_names_outr   range)r'   r~   r)   r1   	names_outs        r   test_feature_names_outr      s    qqAAADAq
1


CGGAJJJ(.q1J))++I??U:->->???KKKKKr   c                    t          dd|           \  }}t          dd          }|                    |          }|                    |                    t          j                            }t          ||d           d S )Nry   r=   r   g?r>   gư>)atol)r   r   fit_transformr   r@   float32r
   )r%   r'   r~   r)   Y_64Y_32s         r   "test_transform_match_across_dtypesr      s|    q?QRRRDAq
1
,
,
,CQDQXXbj1122DD$T******r   c                     t          ddd          d                             | d          }t          d          }|                    |          j        j        | k    sJ d S )Nry   r=   r   r   Fr   r0   )r   r   r   r    r4   rE   )r&   r'   r)   s      r   test_subcluster_dtyper      so    RAA>>>qAHH5 	I 	 	A 1


C771::)/<??????r   c                     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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ddgddgddggt           j                  } t          ddd                              |            dS )zCheck that both subclusters are updated when a node a split, even when there are
    duplicated data points. Non-regression test for #23269.
    g@̙Hg\sGg%g44Tg}Thg\Fgzog/IwgY+ctEgBlCg}
gr'g_ guXgaeR^g	AX7g.^g|SAgkg^#g@cgi8K)rE   r|   gh㈵>N)rj   r?   r1   )r@   arrayr   r   r    )r'   s    r   test_both_subclusters_updatedr      s    
 	$$$
#$$
#$
#$$$z"$$$$$$
#$+	
. j1	 	 	A8 
1>>>BB1EEEEEr   c                      t          ddd          \  } }t          dd          }t          j        t          d          5  |                    |            d d d            d S # 1 swxY w Y   d S )	Nry   r=   r   r   T)r1   r   z`copy` was deprecatedr`   )r   r   rS   rT   FutureWarningr    )r'   r~   r)   s      r   test_birch_copy_deprecatedr      s    qqAAADAq
14
(
(
(C	m+B	C	C	C  


                 s   A%%A),A))'__doc__numpyr@   rS   sklearn.clusterr   r   sklearn.cluster.tests.commonr   sklearn.datasetsr   sklearn.exceptionsr   sklearn.metricsr   r	   sklearn.utils._testingr
   r   sklearn.utils.fixesr   r,   r8   rM   rY   markparametrizer^   re   rh   rp   rw   rz   r   r   r   r   r   r   r   r   r   <module>r      s         : : : : : : : : @ @ @ @ @ @ ' ' ' ' ' ' 1 1 1 1 1 1 F F F F F F F F F F F F F F F F . . . . . .( ( (O O O$I I I0  . .99M M :9M$	& 	& 	&E E E8 8 8/ / /
 
 
( ( (L L L+ + +@ @ @!F !F !FJ    r   