a
    CCCfD                     @   s  d dl Z d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZmZmZmZmZ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mZmZm Z  eej!"d
gZ#ej!j$Z$e%g d&dZ'e%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Z(e%ddgddgddggZ)e%ddgddgddggZ*e%g d Z+G d!d" d"Z,G d#d$ d$Z-e$d%d&G d'd( d(Z.dS ))    N)deepcopy)assert_array_equalassert_equalassert_suppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)array_api_compatible)matrix)SCIPY_ARRAY_APIcopycovxp_assert_closexp_assert_equalskip_if_array_api(  ggQ?Gz
ףp=
?gRQ gQ@gQgffffff?333333g)\(@zG(\?gGzgQ
@RQgffffff@gQg
ףp=
ףp=
gQ@g      q=
ףp@皙gHzG@g
ףp=
g333333@gQgQ?\(\gQ@gGzzG@g=
ףp={Gz?g      皙@gQg      ?\(\g\(\	@QgQ?=
ףp=gHzGѿ(\ gr&   gq=
ףp?g(\gp=
ף@QgQ?g\(\ףp=
@gQg)\(@gp=
ף Q@g=
ףp=g(\@gQ gp=
ף?gq=
ףpgQ?      )\(?r,   g)\( @g=
ףp=r"   =
ףp= g\(\@gGzg333333?ףp=
g(\ҿr%   gGz	@gffffffgGz?gQgGz?(\r*   g(\gGz@gffffff(\?gQQgzG\(\@\(\g(\@皙g      @r    (\?g)\(gQ@gp=
ףg=
ףp=?gp=
ף @g(\g(\?GzgQ@gQg\(\@gp=
ף
Q@{Gz gp=
ףg
@Qgffffff@zGg?
ףp=
?g=
ףp=Q?r:   gRQ?Qg)\(?gQg)\(@gRQgQ@r   gQ@p=
ףgRQؿr5   gQ@
ףp=
g\(\?r<   g=
ףp=?q=
ףp      ?333333?r    Q@r   gHzG@g333333gףp=
@gGzg)\(@r4   g333333?r:   g\(\?gRQg(\ @r.   rG   gףp=
	rH   r7   g
ףp=
?gQg?Qg\(\@q=
ףpgq=
ףp@r    g\(\g(\r;   g?g)\(gQ	@gGzg?g\(\gQ@ffffff      @r,   \(\?g=
ףp=
g
ףp=
@ףp=
r-   HzGgQ?Qg
ףp=
?r/   g(\?r   gףp=
rK   (\?g{Gzg@gRQgQ@gQr@   g
ףp=
Gz@gr$   g(\gHzG@gGz gGzp=
ףrS   g
ףp=
gp=
ףg      gQ@rQ   gq=
ףp?rL   gGz@rP   {Gz?gQۿgp=
ף?g\(\gHzG@g      g(\r>   r   gq=
ףpg333333?gzG r3   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr"   gq=
ףpg
ףp=
r'   gHzG?(\g
ףp=
?gQ	g333333?rD   r#   g)\(gzG@gQg(\	@QrE   r=   gQ	@r[   g{Gz?rJ   r6   r4   gffffff@r   gGz@r.   rM   g(\g333333rA   gHzG?rF   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r8   g{Gz@ggGz?gHzGgQr)   r1   g333333r9   gq=
ףpgffffff?g
ףp=
rM   r(   gףp=
@g333333g\(\@gGzgףp=
?g\(\rW   g)\(g
ףp=
@grZ   gffffff=
ףp=@gg?r0   g      @g      gGz@p=
ףr9   gGzr   gHzGgGz?gףp=
rB   rY   g(\@gGz
rR   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?rX         ?Qr^   gHzGgQ@rQ   gGz?r   g)\(̿rb   g333333?gzGr3   gQg{Gz@RQg333333@rT   {Gz
@gzGg@g
ףp=
r+   g)\( gGz?r_   gQ?r2   g{Gz@rO   rc   r\   rW   r8   g{GzĿg=
ףp=gQrI   gffffff?rV   rd   rQ   g?gGzrN   rC   g(\?r   g\(\?r`   r   r!   rS   g(\gzG @      g      @      rg   	               g@      @g333333@r?   gUUUUUU@gUUUUUU@g      @g      @g      @rE   )r   rl   rg   rg   rg   rg   rl   rg   rl   rl   rl   c                   @   s<   e Zd Zdd Zdd Zdd Zejje	ddd	d
 Z
dS )
TestWhitenc                 C   sf   | ddgddgddgddgd	d
gg}| ddgddgddgddgddgg}tt||dd d S )Ng&cJ^|Y@g`q@gս	@g}&?J?gUH~
@g?gK=E@gFMp?g|H@gH|?cw&?gbA|?D=?k2?'B?);"~?|d=?z?|?Ry?h㈵>Zrtol)asarrayr   r   )selfxpdesiredobs r   W/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/cluster/tests/test_vq.pytest_whitenS   s    

zTestWhiten.test_whitenc                 C   s   | g dg dg dg}| g dg dg dg}tjddN}td	 tt||d
d tt|d tt	|d j
t W d    n1 s0    Y  d S )N)        ra   gJJ@)r   ra   g I 1?)r   ra   gKX@)r   ra   g/?)r   ra   g@?)r   ra   g?T)recordalwaysrz   r{   rl   )r|   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)r}   r~   r   r   wr   r   r   test_whiten_zero_stda   s    


zTestWhiten.test_whiten_zero_stdc              	   C   sP   |j |j|j fD ]8}|d|gddgddgddgdd	gg}ttt| qd S 
Nrq   rr   rs   rt   ru   rv   rw   rx   ry   )naninfr|   assert_raises
ValueErrorr   r}   r~   Z	bad_valuer   r   r   r   test_whiten_not_finiteq   s    
z!TestWhiten.test_whiten_not_finite)`np.matrix` unsupported in array API modereasonc                 C   sN   t jt jt j fD ]6}td|gddgddgddgdd	gg}ttt| qd S r   )npr   r   r   r   r   r   r   r   r   r   test_whiten_not_finite_matrixz   s    z(TestWhiten.test_whiten_not_finite_matrixN)__name__
__module____qualname__r   r   r   pytestmarkskipifr   r   r   r   r   r   rp   Q   s   	rp   c                   @   s   e Zd Zedddd Zejjedddd Z	edd	gd
dd Z
ejjedddd Zedddd Zedd	gd
dd Zedd	gd
dd Zedddd Zedddd ZdS )TestVqTZcpu_onlyc                 C   sZ   t td gtd gtd gg}t|t||d }t||jt|jddd d S )Nr   rl   rg   ZdtypeFZcheck_dtype)r   concatenateXr
   r|   r   LABEL1int64r}   r~   initclabel1r   r   r   
test_py_vq   s
    "zTestVq.test_py_vqr   r   c                 C   sF   t td gtd gtd gg}tttt|d }t|t d S Nr   rl   rg   )r   r   r   r
   r   r   r   r   r   r   r   test_py_vq_matrix   s    "zTestVq.test_py_vq_matrixz!`_vq` only supports NumPy backend)Znp_onlyreasonsc                 C   sf   t td gtd gtd gg}t|t||\}}t|t t|t||\}}d S r   )r   r   r   r   r   r|   r   r   r}   r~   r   r   _r   r   r   test_vq   s    "
zTestVq.test_vqc                 C   s^   t td gtd gtd gg}tttt|\}}t|t tttt|\}}d S r   )r   r   r   r   r   r   r   r   r   r   r   r   test_vq_matrix   s    "
zTestVq.test_vq_matrixc                 C   s   t d d df }|d d }t||\}}||}||}t|d d tjf |d d tjf \}}t||j||jddd t||| d S )Nr   rh   r   Fr   )	r   r   r   r|   r
   r   Znewaxisr   r   )r}   r~   datar   abtatbr   r   r   
test_vq_1d   s    

*zTestVq.test_vq_1dc                 C   s4   |j ddg|jd}||j}tttj|| d S )Nra   g       @r   )r|   float64astypefloat32r   	TypeErrorr   r   )r}   r~   r   r   r   r   r   test__vq_sametype   s    zTestVq.test__vq_sametypec                 C   s&   |j ddgtd}tttj|| d S )Nrl   rg   r   )r|   intr   r   r   r   )r}   r~   r   r   r   r   test__vq_invalid_type   s    zTestVq.test__vq_invalid_typec                 C   s   t jdd}t jdd}t||\}}t||||\}}t|||dd t||j||j	ddd |
t j}|
t j}t||\}}t||||\}}t||j||jddd t||j||j	ddd d S )N   rh   rz   r{   r   Fr   )r   randomrandr   r   r
   r|   r   r   r   r   r   r   r}   r~   r   Z	code_bookZcodes0Zdis0Zcodes1Zdis1r   r   r   test_vq_large_nfeat   s     zTestVq.test_vq_large_nfeatc                 C   s   t jddd }t jddd }t||\}}t||||\}}t|||dd t||j||j	ddd	 d S )
N
   rk   i@B rg   rz   r{   r   Fr   )
r   r   r   r   r   r
   r|   r   r   r   r   r   r   r   test_vq_large_features   s    zTestVq.test_vq_large_featuresN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s,   







r   Tr   c                   @   s   e Zd Zdd Zdd Zejjedddd Z	d	d
 Z
dd Zejjedddd Zdd Zdd Zdd Zdd Zejjejdkdd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 )*	TestKMeanc           	      C   s   d}d}t j|}t j|}dt j|| d|  }dt j|| d|  }t |jd |jd  |ft j}||d |jd < |||jd d < t||d d S )Ni,  d   i'  i N  r   rg   )r   r   Zrandnemptyshaper   r   r|   )	r}   r~   dnm1m2xyr   r   r   r   test_large_features   s    "zTestKMean.test_large_featuresc                 C   s`   t jd t td gtd gtd gg}t|t||ddd }t||t d S Ni1  r   rl   rg   iter)	r   r   seedr   r   r   r|   r   CODET2r}   r~   r   code1r   r   r   test_kmeans_simple   s    "zTestKMean.test_kmeans_simpler   r   c                 C   sV   t jd t td gtd gtd gg}tttt|ddd }t|t d S r   )	r   r   r   r   r   r   r   r   r   r   r   r   r   test_kmeans_simple_matrix  s    "z#TestKMean.test_kmeans_simple_matrixc                 C   s   | t}| ddgddgddgg}t|| t *}|td t||dd	 W d    n1 sf0    Y  ttt||d
d	 d S )Ng5 g!{gL^ @g͛`d?g8}g?kzKOne of the clusters is empty. Re-run kmeans with a different initializationwarn)missingraise)	r|   TESTDATA_2Dr   r   filterUserWarningr	   r   r   )r}   r~   r   Zinitksupr   r   r   test_kmeans_lost_cluster	  s    


,z"TestKMean.test_kmeans_lost_clusterc                 C   s   t jd |t td gtd gtd gg}tr@|jgnt jtg}|D ]X}t|t||ddd }t|t||ddd }t	||t
 t	||t qNd S NiNa r   rl   rg   r   )r   r   r   r|   r   r   r   r   r	   r   CODET1r   )r}   r~   r   Zarraystpr   code2r   r   r   test_kmeans2_simple  s    (zTestKMean.test_kmeans2_simplec                 C   s   t jd |t td gtd gtd gg}tttt|ddd }tttt|ddd }t|t	 t|t
 d S r   )r   r   r   r|   r   r   r	   r   r   r   r   )r}   r~   r   r   r   r   r   r   test_kmeans2_simple_matrix$  s    (
z$TestKMean.test_kmeans2_simple_matrixc                 C   sZ   | t}|d d df }|d d }t||d}t||ddd  t||ddd  d S )Nr   rh   r~   rl   r   rg   )r|   r   r   r	   )r}   r~   r   data1r   coder   r   r   test_kmeans2_rank1/  s    
zTestKMean.test_kmeans2_rank1c                 C   s,   | t}|d d df }t|ddd d S )Nr   rg   rl   r   )r|   r   r	   )r}   r~   r   r   r   r   r   test_kmeans2_rank1_28  s    
zTestKMean.test_kmeans2_rank1_2c                 C   s4   | t}||dd dd d f }t|d d S )Nr   r   r   rg   )r|   r   reshaper	   )r}   r~   r   r   r   r   test_kmeans2_high_dim=  s    
zTestKMean.test_kmeans2_high_dimc                 C   s   t jd |t}d}t||dd t|d d df |dd t||dd t|d d df |dd t D}|jdd t||d	d t|d d df |d	d W d    n1 s0    Y  d S )
Ni90  rh   pointsminitrl   ++z%One of the clusters is empty. Re-run.)messager   )r   r   r   r|   r   r	   r   r   )r}   r~   r   kr   r   r   r   test_kmeans2_initD  s    
zTestKMean.test_kmeans2_initwin32zFails with MemoryError in Wine.c           	      C   s   | t}||d||dd dd d f g}td}|D ]@}tjd}t||||}t|j	}t|j	}t
||dd q>d S )Nre   r   r   g    .A  rU   )Zatol)r|   r   r   r   r   r   default_rngr   r   Tr   )	r}   r~   r   Zdatasr   rnginitZorig_covZinit_covr   r   r   test_krandinitU  s    



zTestKMean.test_krandinitc                 C   s   t tt|g d d S )Nrg   )r   r   r	   r|   r}   r~   r   r   r   test_kmeans2_emptyc  s    zTestKMean.test_kmeans2_emptyc                 C   sF   t tt|td t tt|td t tt|t|g  d S )Nr   )r   r   r   r|   r   r	   r  r   r   r   test_kmeans_0kg  s    zTestKMean.test_kmeans_0kc                 C   s`   |j g d|jd}t|ddd}t|d |j dg|jd t|d |j d|jdd	  d S )
N)rl   rg   rh   ri   r   r   rl   g 7yAC)Zthreshr   ro   g333333@r   r|   r   r   r   )r}   r~   r   resr   r   r   test_kmeans_large_thresm  s    z!TestKMean.test_kmeans_large_thresc                 C   sN   |j ddgddgg|jd}tjd t| tddd	\}}t|| d S )
NgC:g>g#~j?g'1:	g-'@r   *   rg   r   r   )r|   r   r   r   r   r	   r   r   )r}   r~   Zprev_resr  r   r   r   r   test_kmeans2_kpp_low_dimt  s    
z"TestKMean.test_kmeans2_kpp_low_dimc                 C   s   d}d}t dt | dt | g}t jd t t jj|d t ||dt jj|d t ||dg}||}t|d	d
d\}}t	|
||
|| d S )Nr   r   rk   r  r   )sizerl   rg   r   r   )r   ZvstackZonesr   r   Zmultivariate_normaleyer|   r	   r   sign)r}   r~   Zn_dimr  Zcentersr   r  r   r   r   r   test_kmeans2_kpp_high_dim|  s    
z#TestKMean.test_kmeans2_kpp_high_dimc                 C   sh   |j g d|jd}t|| ddg}t|d |j ddg|jd t|d |j d	|jdd
  d S )N)r   r   rl   rl      r   r]   gGz?r   gٿg       @rl   g?r   r  )r}   r~   r   r  r   r   r   test_kmeans_diff_convergence  s    z&TestKMean.test_kmeans_diff_convergencec                 C   s   dt jdt jdg}|D ]}t|}t|}|t}t|d|d\}}t|d|d\}	}t||	|d dD ]:}
t	|d|
|d\}}t	|d|
|d\}	}t||	|d qrqd S )Nr   rg   )r   r   )r   r   r   )r   r   )
r   r   ZRandomStater   r   r|   r   r   r   r	   )r}   r~   Z	seed_listr   Zseed1Zseed2r   Zres1r   Zres2r   r   r   r   #test_kmeans_and_kmeans2_random_seed  s    
z-TestKMean.test_kmeans_and_kmeans2_random_seedN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   sysplatformr  r  r  r  r	  r  r  r  r   r   r   r   r      s6   

		
r   )/r   r  r   r   numpyr   Znumpy.testingr   r   r   r   r   r   r   Zscipy.cluster.vqr   r	   r
   r   r   r   r   Zscipy.clusterr   Zscipy.conftestr   Zscipy.sparse._sputilsr   Zscipy._lib._array_apir   r   r   r   r   ZusefixturesZ
pytestmarkr   arrayr   r   r   r   r   r   rp   r   r   r   r   r   r   <module>   sB   $%)

5a