o
    ?HhJ                     @   s  d dl Z d dlZd dlm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  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Z0e+g d"Z1G d#d$ d$Z2G d%d& d&Z3e*d'd(G d)d* d*Z4dS )+    N)deepcopyLock)assert_array_equalassert_equalassert_suppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)array_api_compatible)matrix)array_api_extra)SCIPY_ARRAY_APIarray_namespacexp_copyxp_assert_closexp_assert_equalskip_xp_backends(  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ؿr8   gQ@
ףp=
g\(\?r?   g=
ףp=?q=
ףp      ?333333?r#   Q@r!   gHzG@g333333gףp=
@gGzg)\(@r7   g333333?r=   g\(\?gRQg(\ @r1   rJ   gףp=
	rK   r:   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=
r0   HzGgQ?Qg
ףp=
?r2   g(\?r   gףp=
rN   (\?g{Gzg@gRQgQ@gQrC   g
ףp=
Gz@gr'   g(\gHzG@gGz gGzp=
ףrV   g
ףp=
gp=
ףg      gQ@rT   gq=
ףp?rO   gGz@rS   g{Gz?gQۿgp=
ף?g\(\gHzG@g      g(\rA   r   gq=
ףpg333333?gzG r6   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr%   gq=
ףpg
ףp=
r*   gHzG?(\g
ףp=
?gQ	g333333?rG   r&   g)\(gzG@gQg(\	@QrH   r@   gQ	@r]   g{Gz?rM   r9   r7   gffffff@r   gGz@r1   rP   g(\g333333rD   gHzG?rI   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r;   g{Gz@ggGz?gHzGgQr,   r4   g333333r<   gq=
ףpgffffff?g
ףp=
rP   r+   gףp=
@g333333g\(\@gGzgףp=
?g\(\rY   g)\(g
ףp=
@gr\   gffffff=
ףp=@gg?r3   g      @g      gGz@p=
ףr<   gGzr"   gHzGgGz?gףp=
rE   r[   g(\@gGz
rU   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?rZ         ?Qr`   gHzGgQ@rT   gGz?r!   g)\(̿rd   g333333?gzGr6   gQg{Gz@RQg333333@rW   {Gz
@gzGg@g
ףp=
r.   g)\( gGz?ra   gQ?r5   g{Gz@rR   re   r^   rY   r;   g{GzĿg=
ףp=gQrL   gffffff?rX   rf   rT   g?gGzrQ   rF   g(\?r   g\(\?rb   r   r$   rV   g(\gzG @      g      @      ri   	               g@      @g333333@rB   gUUUUUU@gUUUUUU@g      @g      @g      @rH   )r   rn   ri   ri   ri   ri   rn   ri   rn   rn   rn   c                   @   sV   e Zd Zdd Zejdd Zeddd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   [/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/cluster/tests/test_vq.pytest_whitenU   s   

zTestWhiten.test_whitenc                 C      t  S Nr   r   r   r   r   whiten_lockc      zTestWhiten.whiten_lock	jax.numpy)jax arrays do not support item assignmentreasonc              	   C   s   | g dg dg dg}| g dg dg dg}|F tjdd'}td	 tt||d
d tt|d tt	|d j
t W d    n1 sOw   Y  W d    d S W d    d S 1 sgw   Y  d S )N)        rc   gJJ@)r   rc   g I 1?)r   rc   gKX@)r   rc   g/?)r   rc   g@?)r   rc   g?T)recordalwaysr|   r}   rn   )r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)r   r   r   r   r   wr   r   r   test_whiten_zero_stdg   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 
Nrs   rt   ru   rv   rw   rx   ry   rz   r{   )naninfr   assert_raises
ValueErrorr   r   r   	bad_valuer   r   r   r   test_whiten_not_finite{   s   
z!TestWhiten.test_whiten_not_finite)`np.matrix` unsupported in array API modec                 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_matrix   s   z(TestWhiten.test_whiten_not_finite_matrixN)__name__
__module____qualname__r   pytestfixturer   r   r   r   markskipifr   r   r   r   r   r   rr   S   s    

	rr   c                   @   s   e Zd Zedddd Zejjedddd Z	edd	d
dd Z
ejjedddd Zedddd Zedd	d
dd Zedd	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   rn   ri   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   rn   ri   )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_onlyr   c                 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   rj   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 )Nrc   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 )Nrn   ri   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   rj   r|   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
   rm   i@B ri   r|   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eddddd Zejdd Zejjejdkdddd Zdd  Zd!d" Zd#d$ Zedddd%d& Zejjedddd'd( Zd)d* Zeddd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d d S )	Ni,  d   i'  i N  r   ri   rn   seed)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   sb   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   rn   ri   iterrng)	r   r   default_rngr   r   r
   r   r   CODET2r   r   r   r   code1r   r   r   test_kmeans_simple  s   " zTestKMean.test_kmeans_simpler   r   c                 C   sX   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 NNa r   rn   ri   r   )r   r   r   r   r   r   r   r   r   r   CODET1r   )r   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   r   test_kmeans2_simple_matrix/  s   (
z$TestKMean.test_kmeans2_simple_matrixc                 C   s\   | t}|d d df }|d d }t||d}t||dddd  t||ddd  d S )Nr   rj   r   rn   )r   r   ri   r   )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   ri   rn   r	  )r   r   r   )r   r   r   r
  r   r   r   test_kmeans2_rank1_2E  s   
zTestKMean.test_kmeans2_rank1_2c                 C   s4   | t}||dd dd d f }t|d d S )Nr   r   r   ri   )r   r   reshaper   )r   r   r   r   r   r   test_kmeans2_high_dimJ  s   
zTestKMean.test_kmeans2_high_dimr   r   c                 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 sdw   Y  d S )
Nr  rj   pointsminitr   rn   ++z%One of the clusters is empty. Re-run.)messager   )r   r   r   r   r   r   r   r   )r   r   r   r   kr   r   r   r   test_kmeans2_initQ  s   
"zTestKMean.test_kmeans2_initc                 C   r   r   r   r   r   r   r   
krand_lockd  r   zTestKMean.krand_lockwin32zFails with MemoryError in Wine.c                 C   s   | t}||d||dd dd d f g}td}t|}|2 |D ]&}tjd}t||||}t	j
|j|d}	t	j
|j|d}
t|	|
dd q&W d    d S 1 sXw   Y  d S )	Nrg   r  r   g    .A  r  gI+?)atol)r   r   r  r   r   r   r   r   r   xpxcovTr   )r   r   r  r   datasr  xp_testr   initorig_covinit_covr   r   r   test_krandinith  s   

"zTestKMean.test_krandinitc                 C   s   t tt|g d d S )Nri   )r   r   r   r   r   r   r   r   r   test_kmeans2_emptyx  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_0k|  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)rn   ri   rj   rk   r   r   rn   g 7yAC)threshr   rq   g333333@r   r   r   r
   r   )r   r   r   resr   r   r   test_kmeans_large_thres  s   "z!TestKMean.test_kmeans_large_thresc                 C   sP   t jd}|jddgddgg|jd}t|tdd|d	\}}t|| d S )
Nl   C.t gC:g>g#~j?g'1:	g-'@r   ri   r  r  )r   r   r   r   r   r   r   r   )r   r   r   prev_resr*  r   r   r   r   test_kmeans2_kpp_low_dim  s   
z"TestKMean.test_kmeans2_kpp_low_dimc           	      C   s   t jd}d}d}t dt | dt | g}t |j|d t ||d|j|d t ||dg}||}t|d	d
|d\}}t	|
||
|| d S )Nl   <DM]4r   r   rm   r   )sizern   ri   r  r  )r   r   r   vstackonesmultivariate_normaleyer   r   r   sign)	r   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   rn   rn      r   r_   gGz?r   gٿg       @rn   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 ]D}t|}t|}|t}t|d|d\}}t|d|d\}	}t||	 dD ]}
t	|d|
|d\}}t	|d|
|d\}	}t||	 q7qd S )Nr  ri   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   r  r   r  sysplatformr$  r&  r'  r+  r-  thread_unsafer7  r:  rA  r   r   r   r   r      sV    

	



r   )5r   rB  copyr   	threadingr   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._libr   r  scipy._lib._array_apir   r   r   r   r   r   usefixtures
pytestmarkr   arrayr  r   r   r  r   r   rr   r   r   r   r   r   r   <module>   sH    $%)

=a