o
    4BiD                     @   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㈵>rtol)asarrayr   r   )selfxpdesiredobs r   [/var/www/html/Trade-python/venv/lib/python3.10/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(}td	 tt||d
d tt|d tt	|d j
t W d    d S 1 sMw   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 ]}|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   	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 ]}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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   dtypeF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)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   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   	code_bookcodes0dis0codes1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   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 s3w   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   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 ],}t|t||ddd }t|t||ddd }t	||t
 t	||t q'd S NiNa r   rl   rg   r   )r   r   r   r}   r   r   r   r   r	   r   CODET1r   )r~   r   r   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 #}|jdd t||d	d t|d d df |d	d W d    d S 1 s^w   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   )atol)r}   r   r  r   r   r   default_rngr   r   Tr   )	r~   r   r   datasr  rnginitorig_cov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)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   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   vstackonesr   r   multivariate_normaleyer}   r	   r   sign)r~   r   n_dimr   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 ]H}t|}t|}|t}t|d|d\}}t|d|d\}	}t||	|d dD ]}
t	|d|
|d\}}t	|d|
|d\}	}t||	|d q9qd S )Nr  rg   )r   r   )r   r  r  )r  r   )
r   r   RandomStater  r   r}   r   r   r   r	   )r~   r   	seed_listr   seed1seed2r   res1r   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+  r2  r   r   r   r   r      s8    

		
r   )/r   r3  r   r   numpyr   numpy.testingr   r   r   r   r   r   r   scipy.cluster.vqr   r	   r
   r   r   r   r   scipy.clusterr   scipy.conftestr   scipy.sparse._sputilsr   scipy._lib._array_apir   r   r   r   r   usefixtures
pytestmarkr   arrayr  r   r   r   r   r   rp   r   r   r   r   r   r   <module>   sD    $%)

5a