o
    tBh{                     @   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 dd
lmZmZ ddl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"ej#$d$d%d&gd'd( Z%ej#$d)d*d+ie&d,fd*d-ie&d.fd/die&d0fd/d1ie&d2fd/d3ie'd4fd/d5ie&d6fd7die&d8fd7d9ie'd:fd7d;ie'd<fd7d=ie&d>fg
d?d@ Z(dAdB Z)dS )Cz+
Tests for the birch clustering algorithm.
    )sparseN)generate_clustered_data)Birch)AgglomerativeClustering)
make_blobs)ConvergenceWarning)
ElasticNet)pairwise_distances_argminv_measure_score)assert_almost_equal)assert_array_equal)assert_array_almost_equalc                  C   sr   t dd\} }t }||  tdd |jjD }tdd | D }|| jd ks.J || jd ks7J d S )N
   	n_samplesc                 S   s   g | ]}|j qS  )
n_samples_).0scr   r   w/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/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   r   fitsumroot_r   _get_leavesshape)Xybrcn_samples_rootn_samples_leavesr   r   r   test_n_samples_leaves_roots   s   
r#   c                  C   s   t 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      
n_clusters2   )	r   r   r   partial_fitr   subcluster_centers_
set_paramsr   subcluster_labels_)r   r   r    brc_partialr   r   r   test_partial_fit#   s   



r.   c                  C   s   t jd} tdddd}t d}| | ||d d f }tddd}|| |j}t	|j
|| t||}tt||j
d d S )	Nr   r%   r   )r'   
n_featuresn_samples_per_cluster      g      ?)r'   	threshold)nprandomRandomStater   arangeshuffler   r   r*   r   labels_predictr	   r   r
   )rngr   shuffle_indices	X_shuffler    	centroidsnearest_centroidr   r   r   test_birch_predict4   s   



r@   c            	      C   s  t ddd\} }tdd}||  t|jdksJ tt|jdks'J tdd}t|d}||  t	|j
|j
 t	|j|j t }t|d}d}tjt|d ||  W d    n1 sew   Y  tdd}tt ||  W d    d S 1 sw   Y  d S )	Nr$   r   r   centersr&   :n_clusters should be an instance of ClusterMixin or an intmatchg     @)r3   )r   r   r   lenr*   r4   uniquer9   r   r   r,   r   pytestraises	TypeErrorwarnsr   )	r   r   brc1gcbrc2clfbrc3err_msgbrc4r   r   r   test_n_clustersE   s(   






"rS   c                  C   sb   t ddd\} }tdd}||  t| }tdd}|| t|j|j t|j|j d S )Nr$   r   rA   r&   )	r   r   r   r   
csr_matrixr   r9   r   r*   )r   r   r    csr
brc_sparser   r   r   test_sparse_Xb   s   




rW   c                  C   sv   t dd\} }tdd}|| | d}tjt|d || d d dgf | W d    d S 1 s4w   Y  d S )Nr$   r   r%   r&   z3X has 1 features, but Birch is expecting 2 featuresrD   r   )r   r   r)   rH   rI   
ValueError)r   r   r    msgr   r   r   )test_partial_fit_second_call_error_checksp   s   
"rZ   c                 C   s6   | j }|t|ksJ |D ]}|jrt|j| qd S )N)r   rF   child_check_branching_factor)nodebranching_factorsubclustersclusterr   r   r   r\   |   s   r\   c                  C   sZ   t  \} }d}td |dd}||  t|j| td|dd}||  t|j| d S )N	   g{Gz?)r'   r^   r3   r%   )r   r   r   r\   r   )r   r   r^   r    r   r   r   test_branching_factor   s   


rb   c                 C   s<   | j j}|r|j}|D ]	}||jksJ q|j}|sdS dS )z&Use the leaf linked list for traversalN)dummy_leaf_
next_leaf_r   radius)birch_instancer3   current_leafr_   r   r   r   r   check_threshold   s   rh   c                  C   sT   t ddd\} }tdd d}||  t|d tdd d}||  t|d d S )NP   r2   rA   g      ?)r3   r'   g      @)r   r   r   rh   )r   r   r    r   r   r   test_threshold   s   


rj   c                  C   s,   t dd\} }td}t|d|  d S )Nr   )random_state   r&   )r   r4   int64r   r   )r   _r'   r   r   r   test_birch_n_clusters_long_int   s   
ro   	attributefit_partial_fit_c                 C   sf   d|  d}t dd\}}t ||}tjt|d t||  W d   dS 1 s,w   Y  dS )z:Test that fit_ and partial_fit_ attributes are deprecated.`z1` is deprecated in 1.0 and will be removed in 1.2r   r   rD   N)r   r   r   rH   rK   FutureWarninggetattr)rp   rY   r   r   r    r   r   r   $test_birch_fit_attributes_deprecated   s   "rv   zparams, err_type, err_msgr3   g      z!threshold == -1.0, must be > 0.0.g        z threshold == 0.0, must be > 0.0.r^   z#branching_factor == 0, must be > 1.   z#branching_factor == 1, must be > 1.g      ?z7branching_factor must be an instance of int, not float.z$branching_factor == -2, must be > 1.r'   zn_clusters == 0, must be >= 1.g      @z1n_clusters must be an instance of int, not float.whateverrC   zn_clusters == -3, must be >= 1.c                 C   sX   t ddd\}}tj||d tdi | | W d   dS 1 s%w   Y  dS )z+Check the parameters validation in `Birch`.ri   r2   rA   rD   Nr   )r   rH   rI   r   r   )paramserr_typerQ   r   rn   r   r   r   test_birch_params_validation   s   "r}   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`.ri   r2   r   )r   r/   rk   r&   c                 S   s   g | ]}d | qS )birchr   )r   ir   r   r   r      s    z*test_feature_names_out.<locals>.<listcomp>N)r   r   r   r*   r   get_feature_names_outr   range)r   rn   r    r'   	names_outr   r   r   test_feature_names_out   s   

r   )*__doc__scipyr   numpyr4   rH   sklearn.cluster.tests.commonr   sklearn.clusterr   r   sklearn.datasetsr   sklearn.exceptionsr   sklearn.linear_modelr   sklearn.metricsr	   r
   sklearn.utils._testingr   r   r   r#   r.   r@   rS   rW   rZ   r\   rb   rh   rj   ro   markparametrizerv   rX   rJ   r}   r   r   r   r   r   <module>   sh    
	


