U
    9%eC!                     @   s   d Z ddlZddl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lmZ ddlmZmZ dd	lmZ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.
    N)sparse)AgglomerativeClusteringBirch)generate_clustered_data)
make_blobs)ConvergenceWarning)pairwise_distances_argminv_measure_score)assert_allcloseassert_array_equalc                 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   _/var/www/html/Darija-Ai-API/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 )Nd   r   Fr      
n_clusters2   )
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_predict1   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_clustersI   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_X`   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_checksr   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{Gz?)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 )	NP   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 )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)r7   rP   gh㈵>N)rH   r3   r)   )r4   arrayrW   r   r   )r"   r   r   r   test_both_subclusters_updated   s4    r[   )$__doc__numpyr4   r>   Zscipyr   Zsklearn.clusterr   r   Zsklearn.cluster.tests.commonr   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>   s0   
	