U
    ½mœd�!  ã                   @   s   d Z ddlm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 dd	lmZmZ dd
lmZ ddlm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"d#„ Z d$d%„ Z!d&d'„ Z"d(d)„ Z#dS )*z+
Tests for the birch clustering algorithm.
é    )ÚsparseN)Úgenerate_clustered_data)ÚBirch)ÚAgglomerativeClustering)Ú
make_blobs)ÚConvergenceWarning)Úpairwise_distances_argminÚv_measure_score)Úassert_array_equal)Úassert_allclosec                 C   s‚   t d| d�\}}|j|dd�}tƒ }| |¡ tdd„ |jjD ƒƒ}tdd„ | ¡ D ƒƒ}||jd kslt	‚||jd ks~t	‚d S )	Né
   ©Ú	n_samplesÚrandom_stateF©Úcopyc                 S   s   g | ]
}|j ‘qS © )Ú
n_samples_)Ú.0Úscr   r   úY/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/cluster/tests/test_birch.pyÚ
<listcomp>   s     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      s       r   )
r   Úastyper   ÚfitÚsumÚroot_r   Z_get_leavesÚshapeÚAssertionError)Ú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srt‚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   r
   Úlabels_Zpredictr-   r   r   r	   )	r    r!   Úrngr"   Zshuffle_indicesZ	X_shuffler$   Z	centroidsZnearest_centroidr   r   r   Útest_birch_predict4   s    


ÿr:   c              	   C   sÆ   t dd| d�\}}|j|dd�}tdd�}| |¡ t|jƒdksFt‚tt |j	¡ƒdks^t‚t
dd�}t|d�}| |¡ t|j|jƒ t|j	|j	ƒ tdd�}t t¡� | |¡ W 5 Q R X d S )	Nr&   r   ©r   Zcentersr   Fr   r(   g     ˆÃ@)r3   )r   r   r   r   Úlenr,   r   r4   Úuniquer8   r   r
   r-   ÚpytestZwarnsr   )r    r!   r"   r#   Zbrc1ÚgcZbrc2Zbrc4r   r   r   Útest_n_clustersL   s    





r@   c                 C   s‚   t dd| d�\}}|j|dd�}tdd�}| |¡ t |¡}tdd�}| |¡ |jj|ksbt‚t	|j
|j
ƒ t|j|jƒ d S )Nr&   r   r;   Fr   r(   )r   r   r   r   r   Z
csr_matrixr,   r7   r   r
   r8   r   )r    r!   r"   r#   r$   ZcsrZ
brc_sparser   r   r   Útest_sparse_Xc   s    




rA   c               	   C   s`   t dd�\} }tdd�}| | |¡ d}tjt|d��  | | d d …dgf |¡ W 5 Q R X 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_checksu   s    
rE   c                 C   s6   | j }|t|ƒkst‚|D ]}|jrt|j|ƒ qd S )N)r   r<   r   Zchild_Úcheck_branching_factor)ÚnodeÚbranching_factorÚsubclustersZclusterr   r   r   rF   �   s
    rF   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)   rH   r3   r'   )r   r   r   r   rF   r   )r    r!   r"   r#   rH   r$   r   r   r   Útest_branching_factor‰   s    

rL   c                 C   s6   | j j}|r2|j}|D ]}||jkst‚q|j}qdS )z&Use the leaf linked list for traversalN)Zdummy_leaf_Z
next_leaf_r   Zradiusr   )Zbirch_instancer3   Zcurrent_leafrI   r   r   r   r   Úcheck_threshold˜   s    rM   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   rM   )r    r!   r"   r#   r$   r   r   r   Útest_threshold¢   s    


rO   c                  C   s,   t dd�\} }t d¡}t|d� | ¡ d S )Nr   rJ   é   r(   )r   r4   Zint64r   r   )r"   Ú_r)   r   r   r   Útest_birch_n_clusters_long_int¯   s    
rR   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`.rN   r1   r   ©r   r/   r   r(   c                 S   s   g | ]}d |› �‘qS )Zbirchr   )r   Úir   r   r   r   ¿   s     z*test_feature_names_out.<locals>.<listcomp>N)r   r   r   r,   r   Zget_feature_names_outr
   Úrange)r"   rQ   r$   r)   Z	names_outr   r   r   Útest_feature_names_out·   s    

rV   c                 C   sL   t dd| d�\}}tddd�}| |¡}| | tj¡¡}t||dd� d S )NrN   r1   rS   gš™™™™™ñ?r2   g�íµ ÷Æ°>)Zatol)r   r   Zfit_transformr   r4   Úfloat32r   )r    r"   rQ   r$   ZY_64ZY_32r   r   r   Ú"test_transform_match_across_dtypesÂ   s
    
rX   c                 C   s@   t dddd�d j| dd�}tdd�}| |¡jj| ks<t‚d S )NrN   r1   r   rS   Fr   r(   )r   r   r   r   r,   r7   r   )r!   r"   r$   r   r   r   Útest_subcluster_dtypeË   s     ÿ
rY   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   rP   gñhãˆµøä>N)rH   r3   r)   )r4   ÚarrayrW   r   r   )r"   r   r   r   Útest_both_subclusters_updatedÓ   s4    ëèr[   )$Ú__doc__Zscipyr   Únumpyr4   r>   Zsklearn.cluster.tests.commonr   Zsklearn.clusterr   r   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.metricsr   r	   Zsklearn.utils._testingr
   r   r%   r.   r:   r@   rA   rE   rF   rL   rM   rO   rR   rV   rX   rY   r[   r   r   r   r   Ú<module>   s4   
	