a
    Re5                     @   s\  d dl Z d dlZd dlZd dlmZmZ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 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"G d!d" d"Z#dS )#    N)assert_array_equalassert_array_almost_equalassert_allcloseassert_equalassert_suppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)matrix(  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?r4   gRQ?Qg)\(?gQg)\(@gRQgQ@r   gQ@p=
ףgRQؿr/   gQ@
ףp=
g\(\?r6   g=
ףp=?q=
ףp      ?333333?r   Q@r   gHzG@g333333gףp=
@gGzg)\(@r.   g333333?r4   g\(\?gRQg(\ @r(   rA   gףp=
	rB   r1   g
ףp=
?gQg?Qg\(\@q=
ףpgq=
ףp@r   g\(\g(\r5   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=
rE   (\?g{Gzg@gRQgQ@gQr:   g
ףp=
Gz@gr   g(\gHzG@gGz gGzp=
ףrM   g
ףp=
gp=
ףg      gQ@rK   gq=
ףp?rF   gGz@rJ   {Gz?gQۿgp=
ף?g\(\gHzG@g      g(\r8   r   gq=
ףpg333333?gzG r-   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr   gq=
ףpg
ףp=
r!   gHzG?(\g
ףp=
?gQ	g333333?r>   r   g)\(gzG@gQg(\	@Qr?   r7   gQ	@rU   g{Gz?rD   r0   r.   gffffff@r   gGz@r(   rG   g(\g333333r;   gHzG?r@   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r2   g{Gz@ggGz?gHzGgQr#   r+   g333333r3   gq=
ףpgffffff?g
ףp=
rG   r"   gףp=
@g333333g\(\@gGzgףp=
?g\(\rQ   g)\(g
ףp=
@grT   gffffff=
ףp=@gg?r*   g      @g      gGz@p=
ףr3   gGzr   gHzGgGz?gףp=
r<   rS   g(\@gGz
rL   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?rR         ?QrX   gHzGgQ@rK   gGz?r   g)\(̿r\   g333333?gzGr-   gQg{Gz@RQg333333@rN   {Gz
@gzGg@g
ףp=
r%   g)\( gGz?rY   gQ?r,   g{Gz@rI   r]   rV   rQ   r2   g{GzĿg=
ףp=gQrC   gffffff?rP   r^   rK   g?gGzrH   r=   g(\?r   g\(\?rZ   r   r   rM   g(\gzG @      g      @      ra   	               g@      @g333333@r9   gUUUUUU@gUUUUUU@g      @g      @g      @r?   )r   rf   ra   ra   ra   ra   rf   ra   rf   rf   rf   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
TestWhitenc                 C   st   t ddgddgddgddgd	d
gg}t jtfD ]<}|ddgddgddgddgddgg}tt||dd q2d 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)nparrayr   r   r   )selfdesiredtpobs r|   O/var/www/sunrise/env/lib/python3.9/site-packages/scipy/cluster/tests/test_vq.pytest_whitenJ   s    
zTestWhiten.test_whitenc              	   C   s   t g dg dg dg}t jtfD ]}|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    q&1 s0    Y  q&d S )N)        r[   gJJ@)r   r[   g I 1?)r   r[   gKX@)r   r[   g/?)r   r[   g@?)r   r[   g?T)recordalwaysrt   ru   rf   )rv   rw   r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)rx   ry   rz   r{   wr|   r|   r}   test_whiten_zero_stdX   s    

zTestWhiten.test_whiten_zero_stdc              	   C   s^   t jtfD ]N}t jt jt j fD ]6}|d|gddgddgddgdd	gg}ttt| q q
d S )
Nrk   rl   rm   rn   ro   rp   rq   rr   rs   )rv   rw   r   naninfassert_raises
ValueErrorr   )rx   rz   Z	bad_valuer{   r|   r|   r}   test_whiten_not_finitef   s    z!TestWhiten.test_whiten_not_finiteN)__name__
__module____qualname__r~   r   r   r|   r|   r|   r}   rj   I   s   rj   c                   @   sD   e Z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 )TestVqc                 C   sV   t td gtd gtd gg}t jtfD ]$}t|t||d }t|t q,d S Nr   rf   ra   )rv   concatenateXrw   r   r   r   LABEL1)rx   initcrz   label1r|   r|   r}   
test_py_vqr   s    "zTestVq.test_py_vqc                 C   sn   t td gtd gtd gg}t jtfD ]<}t|t||\}}t|t t|t||\}}q,d S r   )	rv   r   r   rw   r   r   r   r   r   )rx   r   rz   r   distZtlabel1Ztdistr|   r|   r}   test_vqx   s
    "
zTestVq.test_vqc                 C   sn   t d d df }|d d }t||\}}t|d d tjf |d d tjf \}}t|| t|| d S )Nr   rb   )r   r   r   r   rv   Znewaxisr   )rx   datar   abtatbr|   r|   r}   
test_vq_1d   s    *
zTestVq.test_vq_1dc                 C   s4   t jddgt jd}|t j}tttj|| d S )Nr[   g       @Zdtype)	rv   rw   float64astypefloat32r   	TypeErrorr   r   )rx   r   r   r|   r|   r}   test__vq_sametype   s    zTestVq.test__vq_sametypec                 C   s&   t jddgtd}tttj|| d S )Nrf   ra   r   )rv   rw   intr   r   r   r   )rx   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 t|| |t j	}|t j	}t||\}}t||\}}t||d t|| d S )N   rb   rt   )
rv   randomrandr   r   r   r   r   r   r   rx   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 t|| d S )N
   re   i@B ra   rt   )rv   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   q   s   	r   c                   @   s   e Z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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   ra   )rv   r   Zrandnemptyshapedoubler	   )rx   dnm1m2xyr   r|   r|   r}   test_large_features   s    "zTestKMean.test_large_featuresc                 C   sf   t jd t td gtd gtd gg}t jtfD ](}t|t||ddd }t|t	 q8d S )Ni1  r   rf   ra   iter)
rv   r   seedr   r   rw   r   r	   r   CODET2)rx   r   rz   code1r|   r|   r}   test_kmeans_simple   s
    "zTestKMean.test_kmeans_simplec                 C   s   t }tddgddgddgg}t|| t *}|td t||dd	 W d    n1 s`0    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)
TESTDATA_2Drv   rw   r	   r   filterUserWarningr
   r   r   )rx   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 jtfD ]L}t|t||ddd }t|t||ddd }t|t	 t|t
 q8d S )NiNa r   rf   ra   r   )rv   r   r   r   r   rw   r   r
   r   CODET1r   )rx   r   rz   r   code2r|   r|   r}   test_kmeans2_simple   s    "
zTestKMean.test_kmeans2_simplec                 C   sP   t }|d d df }|d d }| }t||ddd  t||ddd  d S )Nr   rb   rf   r   ra   )r   copyr
   )rx   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   ra   rf   r   )r   r
   )rx   r   r   r|   r|   r}   test_kmeans2_rank1_2   s    zTestKMean.test_kmeans2_rank1_2c                 C   s$   t }|dd d }t|d d S )Nr   r   r   ra   )r   reshaper
   )rx   r   r|   r|   r}   test_kmeans2_high_dim   s    zTestKMean.test_kmeans2_high_dimc                 C   s   t jd t}t|ddd t|d d d df ddd t|ddd t|d d d df ddd t H}|jdd t|dd	d t|d d d df dd	d W d    n1 s0    Y  d S )
Ni90  rb   pointsminitrf   ++z%One of the clusters is empty. Re-run.)messager   )rv   r   r   r   r
   r   r   )rx   r   r   r|   r|   r}   test_kmeans2_init   s    zTestKMean.test_kmeans2_initwin32zFails with MemoryError in Wine.)reasonc                 C   s   t }|d|dd d g}td}|D ]`}ttjdrJtjd}ntjd}t|||}tj	|dd}tj	|dd}t
||d	d
 q,d S )Nr_   r   r   g    .Adefault_rng  r   )ZrowvarrO   )Zatol)r   r   r   hasattrrv   r   r   RandomStater   Zcovr   )rx   r   ZdataskrnginitZorig_covZinit_covr|   r|   r}   test_krandinit  s    zTestKMean.test_krandinitc                 C   s   t ttg d d S )Nra   )r   r   r
   rx   r|   r|   r}   test_kmeans2_empty  s    zTestKMean.test_kmeans2_emptyc                 C   s4   t tttd t tttd t ttttg  d S )Nr   )r   r   r	   r   r
   rv   rw   r   r|   r|   r}   test_kmeans_0k  s    zTestKMean.test_kmeans_0kc                 C   sH   t jg dtd}t|ddd}t|d t dg t|d d d S )	N)rf   ra   rb   rc   r   r   rf   g 7yAC)Zthreshr   ri   g333333@rv   rw   floatr	   r   )rx   r   resr|   r|   r}   test_kmeans_large_thres   s    z!TestKMean.test_kmeans_large_thresc                 C   sB   t ddgddgg}t jd ttddd\}}t|| d S )	NgC:g>g#~j?g'1:	g-'@*   ra   r   r   )rv   rw   r   r   r
   r   r   )rx   Zprev_resr   _r|   r|   r}   test_kmeans2_kpp_low_dim'  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d d S )Nr   r   re   r   r   )sizerf   ra   r   r   )decimal)	rv   ZvstackZonesr   r   Zmultivariate_normalZeyer
   r   )rx   Zn_dimr   Zcentersr   r   r   r|   r|   r}   test_kmeans2_kpp_high_dim/  s    z#TestKMean.test_kmeans2_kpp_high_dimc                 C   sN   t g dt}t|t ddg}t|d t ddg t|d d d S )	N)r   r   rf   rf      rW   gGz?r   gٿg       @rf   g?r   )rx   r{   r   r|   r|   r}   test_kmeans_diff_convergence=  s    z&TestKMean.test_kmeans_diff_convergencec                 C   s   dt jdg}tt jdr.|t jd |D ]n}ttd|d\}}ttd|d\}}t|| dD ]6}t	td||d\}}t	td||d\}}t|| qhq2d S )Nr   r   ra   )r   )r   r   r   )r   r   )
rv   r   r   r   appendr   r	   r   r   r
   )rx   Z	seed_listr   Zres1r   Zres2r   r|   r|   r}   #test_kmeans_and_kmeans2_random_seedD  s    
z-TestKMean.test_kmeans_and_kmeans2_random_seedN)r   r   r   r   r   r   r   r   r   r   r   pytestmarkZskipifsysplatformr   r   r   r   r   r   r   r   r|   r|   r|   r}   r      s&   
	
r   )$r   r   numpyrv   Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipy.cluster.vqr	   r
   r   r   r   r   r   Zscipy.clusterr   Zscipy.sparse._sputilsr   rw   r   r   r   r   r   r   rj   r   r   r|   r|   r|   r}   <module>   s6    $%)

(;