o
    i                     @   s   d Z ddlZddlZddlZddlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZ dZeddgd	d	gdd	ggd
 Zeddedddd\ZZdd Zdd Zdd Zejdddg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"d,d- Z#dS ).z,
Testing for mean shift clustering methods

    N)	MeanShiftestimate_bandwidthget_bin_seeds
mean_shift)
make_blobs)v_measure_score)assert_allcloseassert_array_equal      
   i,     皙?T   	n_samples
n_featurescenterscluster_stdshufflerandom_statec                  C   s2   t  } | tdddj}|| jk sJ d S )Nr   r   r   )r   fitnpZonesreshapen_iter_max_iter)modelZn_iter r   _/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/cluster/tests/test_mean_shift.py$test_convergence_of_1d_constant_data   s   r    c                  C   s,   t tdd} d|   krdksJ  J d S )N   )r   g?g      ?)r   X	bandwidthr   r   r   test_estimate_bandwidth%   s    r%   c                 C   sB   t tj| ddddd}|jtjksJ |tjdddksJ d S )	NFcopyr   g333333?)r   Zquantile        gh㈵>)abs)r   r"   astypedtypepytestapprox)global_dtyper$   r   r   r   test_estimate_bandwidth_1sample+   s
   r/   z5bandwidth, cluster_all, expected, first_cluster_label)333333?Tr
   r   )r0   F   r   c                 C   s   t j| dd}t||d}||j}t|}t|}	|	|ks"J |d |ks*J |jj	| ks2J t
||d\}
}t|}t|}||ksIJ |d |ksQJ |
j	| ksXJ d S )NFr&   )r$   cluster_allr   )r2   )r"   r*   r   r   labels_r   uniquelencluster_centers_r+   r   )r.   r$   r2   expectedZfirst_cluster_labelX_with_global_dtypemslabelsZlabels_uniqueZn_clusters_Zcluster_centersZlabels_mean_shiftZlabels_mean_shift_uniqueZn_clusters_mean_shiftr   r   r   test_mean_shift6   s    


r;   c                 C   s   t ddgddgddggd }tdd|dd|d\}}|j| d	d
}tdd}|| t }|| t|j|j |jj|jjksFJ t	|j
|j
 d S )Nr   r   r   2   r   r   Tr   Fr&   )Zn_jobs)r   arrayr   r*   r   r   r   r6   r+   r	   r3   )r.   Zglobal_random_seedr   r"   _Zms1Zms2r   r   r   test_parallelQ   s"    
	


r?   c                 C   s:   t dd}tj| dd}||}||}t|| d S )Nr0   r#   Fr&   )r   r"   r*   Zfit_predictZpredictr	   )r.   r9   r8   r:   Zlabels2r   r   r   test_meanshift_predicti   s
   


r@   c                  C   sZ   t dddgddggd} d}tjt|d | t W d    d S 1 s&w   Y  d S )N皙?ii)r$   Zseedsz!No point was within bandwidth=0.1)match)r   r,   Zraises
ValueErrorr   r"   )r9   msgr   r   r   test_meanshift_all_orphansr   s   "rE   c                  C   s&   t  } t| dr
J t| drJ d S )Nr6   r3   )r   hasattr)r9   r   r   r   test_unfitted|   s   rG   c                 C   s   t jddgddgddgddgddgddgg| d	}tdd
|}t jddgddgddgddgddgddgg| d	}tdd
|}t|jg d t|jg d d S )Nr   r   r   r1      r
         r+   r#   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r=   r   r   r	   r3   )r.   r"   c1c2r   r   r   test_cluster_intensity_tie   s   22rN   c                 C   s@  t jddgddgddgddgddgddgg| d	}h d
}t|dd}tdd |D }t||dks7J ddh}t|dd}tdd |D }t||dksUJ tjdd t|dd}W d    n1 slw   Y  t|| t	ddddgddggddd\}}|j
| dd}t|d}t|ddgddgg d S )N      ?gffffff?g?r0          @g @g?r(   rK   >   rO   rO   rP   rO   )r(   r(   r   c                 s       | ]}t |V  qd S Ntuple.0pr   r   r   	<genexpr>       z!test_bin_seeds.<locals>.<genexpr>r   rQ   rR   r   c                 s   rS   rT   rU   rW   r   r   r   rZ      r[   T)recordg{Gz?d   rA   )r   r   r   r   r   Fr&   )r   r=   r   setr5   symmetric_differencewarningscatch_warningsr   r   r*   r	   )r.   r"   Zground_truthZ	test_binsZtest_resultr>   r   r   r   test_bin_seeds   s4   &


rb   r   r]   c                 C   sr   t t| d\}}t| dt}|j}|j|jksJ t|t|ks%J t||D ]\}}t	
||s6J q*d S )N)r   )r   r"   r   r   r6   r   r   r5   zipr   Zallclose)r   Z	clusters1r>   r9   Z	clusters2rL   rM   r   r   r   test_max_iter   s   rd   c                 C   s   t jg d| ddd}t|}|dksJ t||d|u s!J tdd d|}td	d
|}t g d}t|j|t	
dksFJ t|j|t	
dksSJ t|j|j d S )N)r   r   r   r   r   r   r
   r
   rK   r   r   r   )Zbin_sizeT)bin_seedingr$   F)re   )r   r   r   r   r   r   r   r   )r   r=   r   r   r   r   r   r   r3   r,   r-   r   r6   )r.   r"   r$   Z
ms_binningZms_nobinningZexpected_labelsr   r   r   test_mean_shift_zero_bandwidth   s   rf   )$__doc__r`   numpyr   r,   Zsklearn.clusterr   r   r   r   Zsklearn.datasetsr   Zsklearn.metricsr   Zsklearn.utils._testingr   r	   Z
n_clustersr=   r   r"   r>   r    r%   r/   markZparametrizer;   r?   r@   rE   rG   rN   rb   rd   rf   r   r   r   r   <module>   sF     

	
	

*
