a
    �ù»j“#  ã                   @   s  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
d„ Zdd„ Zdd„ Zdd„ Zej de¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"d#d$„ Z#d%d&„ Z$d'd(„ Z%d)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                 C   s‚   t d| d�\}}|j|dd�}tƒ }| |¡ tdd„ |jjD ƒƒ}tdd„ | ¡ D ƒƒ}||jd kslJ ‚||jd ks~J ‚d S )	Né
   ©Ú	n_samplesÚrandom_stateF©Úcopyc                 S   s   g | ]
}|j ‘qS © )Ú
n_samples_)Ú.0Úscr   r   úFE:\soccer\ml_env\Lib\site-packages\sklearn/cluster/tests/test_birch.pyÚ
<listcomp>   ó    z/test_n_samples_leaves_roots.<locals>.<listcomp>c                 S   s   g | ]}|j D ]
}|j‘qqS r   )Úsubclusters_r   )r   Úleafr   r   r   r   r      r   r   )	r   Úastyper   ÚfitÚsumÚroot_r   Z_get_leavesÚshape)Úglobal_random_seedÚglobal_dtypeÚXÚyÚbrcZn_samples_rootZn_samples_leavesr   r   r   Útest_n_samples_leaves_roots   s    
ÿr%   c                 C   s–   t d| d�\}}|j|dd�}tdd�}| |¡ td d�}| |d d… ¡ | |dd … ¡ t|j|jƒ |jdd� | d ¡ t|j	|j	ƒ d S )Néd   r   Fr   é   ©Ú
n_clustersé2   )
r   r   r   r   Úpartial_fitr	   Úsubcluster_centers_Z
set_paramsr
   Úsubcluster_labels_)r    r!   r"   r#   r$   Zbrc_partialr   r   r   Útest_partial_fit   s    



r.   c           	      C   s°   t j | ¡}tdddd�}|j|dd�}t  d¡}| |¡ ||d d …f }tddd	�}| |¡ |j	j
|ksrJ ‚t|j| |¡ƒ |j	}|jt||ƒ }tt||jƒdƒ d S )
Nr'   r   )r)   Ú
n_featuresZn_samples_per_clusterFr   é   é   g      ð?©r)   Ú	threshold)ÚnpÚrandomZRandomStater   r   ZarangeÚshuffler   r   r,   Údtyper
   Úlabels_Zpredictr-   r   r	   r   )	r    r!   Úrngr"   Zshuffle_indicesZ	X_shuffler$   Z	centroidsZnearest_centroidr   r   r   Útest_birch_predict1   s    


ÿr:   c                 C   sÚ   t dd| d�\}}|j|dd�}tdd�}| |¡ t|jƒdksFJ ‚tt |j¡ƒdks^J ‚t	dd�}t|d�}| |¡ t
|j|jƒ t
|j|jƒ tdd�}t t¡� | |¡ W d   ƒ n1 sÌ0    Y  d S )	Nr&   r   ©r   Zcentersr   Fr   r(   g     ˆÃ@)r3   )r   r   r   r   Úlenr,   r4   Úuniquer8   r   r
   r-   ÚpytestÚwarnsr   )r    r!   r"   r#   Zbrc1ÚgcZbrc2Zbrc4r   r   r   Útest_n_clustersI   s    





rA   Úcsr_containerc                 C   s€   t dd| d�\}}|j|dd�}tdd�}| |¡ ||ƒ}tdd�}| |¡ |jj|ks`J ‚t|j|jƒ t|j|jƒ d S )Nr&   r   r;   Fr   r(   )	r   r   r   r   r,   r7   r
   r8   r	   )r    r!   rB   r"   r#   r$   ZcsrZ
brc_sparser   r   r   Útest_sparse_X`   s    



rC   c                  C   st   t dd�\} }tdd�}| | |¡ d}tjt|d��* | | d d …dgf |¡ W d   ƒ n1 sf0    Y  d S )Nr&   )r   r'   r(   z3X has 1 features, but Birch is expecting 2 features©Úmatchr   )r   r   r+   r>   ZraisesÚ
ValueError)r"   r#   r$   Úmsgr   r   r   Ú)test_partial_fit_second_call_error_checkss   s    
rH   c                 C   s6   | j }|t|ƒksJ ‚|D ]}|jrt|j|ƒ qd S )N)r   r<   Zchild_Úcheck_branching_factor)ÚnodeÚbranching_factorÚsubclustersZclusterr   r   r   rI      s
    rI   c                 C   sl   t | d�\}}|j|dd�}d}td |dd�}| |¡ t|j|ƒ td|dd�}| |¡ t|j|ƒ d S )N©r   Fr   é	   g{®Gáz„?)r)   rK   r3   r'   )r   r   r   r   rI   r   )r    r!   r"   r#   rK   r$   r   r   r   Útest_branching_factor‡   s    

rO   c                 C   s6   | j j}|r2|j}|D ]}||jksJ ‚q|j}qdS )z&Use the leaf linked list for traversalN)Zdummy_leaf_Z
next_leaf_r   Zradius)Zbirch_instancer3   Zcurrent_leafrL   r   r   r   r   Úcheck_threshold–   s    rP   c                 C   sd   t dd| d�\}}|j|dd�}tdd d�}| |¡ t|dƒ tdd d�}| |¡ t|dƒ d S )	NéP   r1   r;   Fr   g      à?)r3   r)   g      @)r   r   r   r   rP   )r    r!   r"   r#   r$   r   r   r   Útest_threshold    s    


rR   c                  C   s,   t dd�\} }t d¡}t|d� | ¡ d S )Nr   rM   é   r(   )r   r4   Zint64r   r   )r"   Ú_r)   r   r   r   Útest_birch_n_clusters_long_int­   s    
rU   c                  C   sV   t dddd�\} }tdd�}| | ¡ |jjd }| ¡ }tdd„ t|ƒD ƒ|ƒ dS )	z*Check `get_feature_names_out` for `Birch`.rQ   r1   r   ©r   r/   r   r(   c                 S   s   g | ]}d |› �‘qS )Zbirchr   )r   Úir   r   r   r   ½   r   z*test_feature_names_out.<locals>.<listcomp>N)r   r   r   r,   r   Zget_feature_names_outr
   Úrange)r"   rT   r$   r)   Z	names_outr   r   r   Útest_feature_names_outµ   s    

rY   c                 C   sL   t dd| d�\}}tddd�}| |¡}| | tj¡¡}t||dd� d S )NrQ   r1   rV   gš™™™™™ñ?r2   g�íµ ÷Æ°>)Zatol)r   r   Zfit_transformr   r4   Úfloat32r	   )r    r"   rT   r$   ZY_64ZY_32r   r   r   Ú"test_transform_match_across_dtypesÀ   s
    
r[   c                 C   s@   t dddd�d j| dd�}tdd�}| |¡jj| ks<J ‚d S )NrQ   r1   r   rV   Fr   r(   )r   r   r   r   r,   r7   )r!   r"   r$   r   r   r   Útest_subcluster_dtypeÉ   s
    ÿ
r\   c                  C   s¦   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d�} tdddd� | ¡ dS )z‘Check 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ð%žý’þÀgóº44Tûú¿g}ThÅÜúÀg•ã\F€õ¿gzoÀ±Àg/ÊÇI¼wõ¿gY+ctEÀgBlúý¬Cõ¿gé˜óŒ}é
Àg´®Ñr 'þ¿g_î“£ ñÀg—uXø¿gšaþeR^Àg‹µ	AX7õ¿g²Ú.^Àg|ùS™A÷¿gkŸŽÇÀg^ñÔ#Îô¿g@€±cÈÆÀgãižÈ8Kû¿)r7   rS   gñhãˆµøä>N)rK   r3   r)   )r4   ÚarrayrZ   r   r   )r"   r   r   r   Útest_both_subclusters_updatedÑ   s4    ëèr^   c                  C   sZ   t dddd�\} }tddd�}tjtdd�� | | ¡ W d   ƒ n1 sL0    Y  d S )	NrQ   r1   r   rV   T)r)   r   z`copy` was deprecatedrD   )r   r   r>   r?   ÚFutureWarningr   )r"   rT   r$   r   r   r   Útest_birch_copy_deprecatedö   s    r`   )'Ú__doc__Únumpyr4   r>   Zsklearn.clusterr   r   Zsklearn.cluster.tests.commonr   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.metricsr   r   Zsklearn.utils._testingr	   r
   Zsklearn.utils.fixesr   r%   r.   r:   rA   ÚmarkZparametrizerC   rH   rI   rO   rP   rR   rU   rY   r[   r\   r^   r`   r   r   r   r   Ú<module>   s4   

	%