B
    0dy4                @   sz  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ddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d/d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdFdHdId&dJdKdLdMdNdOd-dPdQdRdSdTdUd;dVdWdXdYdZd[d\d]d^d_d`daddbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|dqd}d~dddddddddd`ddddudddddddddddddd^ddqddddJddddgddddddddddddsddddddddddFdddddGdddddNddddddddddd|dddd*dddddddddddddddddddddddyd
dddd]dddddddddd&ddd1ddddddd(dddddddwdddddbd^dd	ddJdddd~ddddddddddkdddddd8dYddpddd dd3ddddddd֐ddd	dڐd
ddddUdddddpdddddddِddddddddddddאdd dd!d"dd#dd$d d%d&d]d'd(d)d*dĐd+d,d-d.d?d/d0dd1d[d2dd)dddkd3d4d5dd6dՐd+dd7d8ddd9d	d:ddd#dd;d<gd=Zed>d?gd@d?gd@dAgdBdAgdCdDgdEdAgdBd@gdCdAgdCd@gdFd@gdEdCggZed>d>gdGdHgdIdzggZedJdKgdLdMgdNdggZed dDdAdAdAdAdDdAdDdDdDgZ G dOdP dPZ!G dQdR dRZ"G dSdT dTZ#dS (U      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)matrixggQ?gGzg
ףp=
?gRQ gQ@gQgffffff?g333333g)\(@gzGg(\?gGzgQ
@gRQgffffff@gQg
ףp=
gףp=
gQ@g      gq=
ףp@ggHzG@g
ףp=
g333333@gQgQ?g\(\gQ@gGzgzG@g=
ףp=g{Gz?g      g@gQg      ?g\(\g\(\	@gQgQ?g=
ףp=gHzGѿg(\ ggq=
ףp?g(\gp=
ף@gQgQ?g\(\gףp=
@gQg)\(@gp=
ף gQ@g=
ףp=g(\@gQ gp=
ף?gq=
ףpgQ?g      g)\(?g)\( @g=
ףp=g=
ףp= g\(\@gGzg333333?gףp=
g(\ҿgGz	@gffffffgGz?gQgGz?g(\g(\gGz@gffffffg(\?gQgQgzGg\(\@g\(\g(\@gg      @g(\?g)\(gQ@gp=
ףg=
ףp=?ggp=
ף @g(\g(\?gGzgQ@gQg\(\@gp=
ף
gQ@g{Gz ggp=
ףg
@gQgffffff@gzGg?g
ףp=
g?g=
ףp=gQ?gRQ?gQg)\(?gQg)\(@gRQgQ@gQ@gp=
ףgRQؿgQ@g
ףp=
g\(\?g=
ףp=?gq=
ףpg      ?g333333g?gQ@gHzG@g333333gףp=
@gGzg)\(@g333333?g\(\?gRQg(\ @gףp=
	g
ףp=
?gQg?gQg\(\@gq=
ףpgq=
ףp@g\(\g(\gg?g)\(gQ	@gGzg?g\(\gQ@gffffffg      @g\(\?g=
ףp=
g
ףp=
@gףp=
gHzGgQ?gQg
ףp=
?g(\?gףp=
g(\?g{Gzg@gRQgQ@gQg
ףp=
gGz@gg(\gHzG@gGz gGzgp=
ףg
ףp=
gp=
ףg      gQ@gq=
ףp?gGz@g{Gz?gQۿgp=
ף?g\(\gHzG@g      g(\gq=
ףpg333333?gzG g{GzgQ?g gQg{Gzg=
ףp=@g)\(gp=
ף
@gQgq=
ףpg
ףp=
gHzG?g(\g
ףp=
?gQ	g333333?g)\(gzG@gQg(\	@gQgQ	@g{Gz?gffffff@gGz@g(\g333333gHzG?gffffff?gffffffgRQ?gQgq=
ףp?g      g(\@g{Gz@ggGz?gHzGgQg333333gq=
ףpgffffff?g
ףp=
gףp=
@g333333g\(\@gGzgףp=
?g\(\g)\(g
ףp=
@ggffffffg=
ףp=@gg?g      @g      gGz@gp=
ףgGzgHzGgGz?gףp=
g(\@gGz
gQgGz@gGzgRQ@g
ףp=
?g(\g{Gz?g      ?gQgHzGgQ@gGz?g)\(̿g333333?gzGgQg{Gz@gRQg333333@g{Gz
@gzGg@g
ףp=
g)\( gGz?gQ?g{Gz@g{GzĿg=
ףp=gQgffffff?g?gGzg(\?g\(\?g(\gzG @)      g      @      r   	               g@g      @g333333@gUUUUUU@gUUUUUU@g      @g      @g      @c               @   s$   e Zd Zdd Zdd Zdd ZdS )
TestWhitenc             C   sx   t ddgddgddgddgd	d
gg}xJt jtfD ]<}|ddgddgddgddgddgg}tt||dd q4W d S )Ng&cJ^|Y@g`q@gս	@g}&?J?gUH~
@g?gK=E@gFMp?g|H@gH|?gcw&?gbA|?gD=?gk2?g'B?g);"~?g|d=?gz?g|?gRy?gh㈵>)rtol)nparrayr   r   r   )selfdesiredtpobs r#   M/var/www/html/venv/lib/python3.7/site-packages/scipy/cluster/tests/test_vq.pytest_whitenK   s    
zTestWhiten.test_whitenc          
   C   s   t dddgdddgdddgg}xt jtfD ]z}|dddgdddgdddgg}tjd	d
D}td tt||dd tt	|d t
t|d jt W d Q R X q.W d S )Ng        g      ?gJJ@g I 1?gKX@g/?g@?g?T)recordalwaysgh㈵>)r   r   )r   r   r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)r   r    r!   r"   wr#   r#   r$   test_whiten_zero_stdY   s    

zTestWhiten.test_whiten_zero_stdc          	   C   sf   x`t jtfD ]R}xLt 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$W qW d S )
Ngcw&?gD=?gk2?g'B?g);"~?g|d=?gz?g|?gRy?)r   r   r   naninfassert_raises
ValueErrorr   )r   r!   Z	bad_valuer"   r#   r#   r$   test_whiten_not_finiteg   s    z!TestWhiten.test_whiten_not_finiteN)__name__
__module____qualname__r%   r1   r6   r#   r#   r#   r$   r   J   s   r   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   sZ   t td gtd gtd gg}x2t jtfD ]$}t|t||d }t|t q.W d S )Nr   r   r   )r   concatenateXr   r   r   r   LABEL1)r   initcr!   label1r#   r#   r$   
test_py_vqs   s    "zTestVq.test_py_vqc             C   sr   t td gtd gtd gg}xJt jtfD ]<}t|t||\}}t|t t|t||\}}q.W d S )Nr   r   r   )	r   r;   r<   r   r   r   r   r   r=   )r   r>   r!   r?   distZtlabel1Ztdistr#   r#   r$   test_vqy   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   r   )r<   r   r   r   r   Znewaxisr   )r   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 )Ng      ?g       @)dtype)	r   r   Zfloat64astypefloat32r4   	TypeErrorr   r   )r   rD   rE   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 )Nr   r   )rI   )r   r   intr4   rL   r   r   )r   rD   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   r   gh㈵>)
r   randomrandr   r   r   r   r   rJ   rK   )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 t|| d S )N
   r   i@B r   gh㈵>)r   rQ   rR   r   r   r   r   r   )r   r<   rS   rT   rU   rV   rW   r#   r#   r$   test_vq_large_features   s    zTestVq.test_vq_large_featuresN)
r7   r8   r9   r@   rB   rH   rM   rO   rX   rZ   r#   r#   r#   r$   r:   r   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"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   r   )r   rQ   Zrandnemptyshapedoubler	   )r   dnm1m2xyrC   r#   r#   r$   test_large_features   s    "zTestKMean.test_large_featuresc             C   sj   t jd t td gtd gtd gg}x6t jtfD ](}t|t||ddd }t|t	 q:W d S )Ni1  r   r   r   )iter)
r   rQ   seedr;   r<   r   r   r	   r   CODET2)r   r>   r!   code1r#   r#   r$   test_kmeans_simple   s
    "zTestKMean.test_kmeans_simplec          	   C   sl   t }tddgddgddgg}t|| t  }|td t||dd	 W d Q R X 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_2Dr   r   r	   r   filterUserWarningr
   r4   r   )r   rC   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}xZt jtfD ]L}t|t||ddd }t|t||ddd }t|t	 t|t
 q:W d S )NiNa r   r   r   )rg   )r   rQ   rh   r;   r<   r   r   r
   r   CODET1ri   )r   r>   r!   rj   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   r   r   )rg   r   )ro   copyr
   )r   rC   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   r   r   )rg   )ro   r
   )r   rC   rx   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)rP   rP   rY   r   )ro   reshaper
   )r   rC   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 >}|jdd t|dd	d t|d d d df dd	d W d Q R X d S )
Ni90  r   points)minitr   z++z%One of the clusters is empty. Re-run.)messagerQ   )r   rQ   rh   ro   r
   r   rp   )r   rC   rr   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}xh|D ]`}ttjdrLtjd}ntjd}t|||}tj	|dd}tj	|dd}t
||d	d
 q.W d S )N)r   r   )rP   rP   rY   g    .Adefault_rngi  r   )Zrowvarg{Gz?)Zatol)ro   r|   rN   hasattrr   rQ   r   RandomStater   Zcovr   )r   rC   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 )Nr   )r4   r5   r
   )r   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   )r4   r5   r	   r<   r
   r   r   )r   r#   r#   r$   test_kmeans_0k  s    zTestKMean.test_kmeans_0kc             C   sN   t jdddddgtd}t|ddd}t|d	 t d
g t|d d d S )Nr   r   r   r   rY   )rI   g 7yAC)Zthreshr   g      @g333333@)r   r   floatr	   r   )r   rd   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-'@*   r   z++)r   )r   r   rQ   rh   r
   ro   r   )r   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\   rY   r   r   r   )sizer   r   z++)r   )decimal)	r   ZvstackZonesrQ   rh   Zmultivariate_normaleyer
   r   )r   Zn_dimr   ZcentersrC   r   r   r#   r#   r$   test_kmeans2_kpp_high_dim0  s     z#TestKMean.test_kmeans2_kpp_high_dimc             C   s   dt jdg}tt jdr.|t jd xz|D ]r}ttd|d\}}ttd|d\}}t|| x>dD ]6}t	td||d\}}t	td||d\}}t|| qlW q4W d S )Ni  r   r   )rh   )rQ   r~   z++)r   rh   )
r   rQ   r   r   appendr   r	   ro   r   r
   )r   Z	seed_listrh   Zres1r   Zres2r   r#   r#   r$   #test_kmeans_and_kmeans2_random_seed>  s    


z-TestKMean.test_kmeans_and_kmeans2_random_seedN)r7   r8   r9   rf   rk   rs   rv   rz   r{   r}   r   pytestmarkZskipifsysplatformr   r   r   r   r   r   r   r#   r#   r#   r$   r[      s    
	r[   )$r)   r   numpyr   Znumpy.testingr   r   r   r   r   r   r   r   r4   Zscipy.cluster.vqr	   r
   r   r   r   r   r   Zscipy.clusterr   Zscipy.sparse.sputilsr   r   r|   ro   r<   rt   ri   r=   r   r:   r[   r#   r#   r#   r$   <module>   sv    $$*$*(&"$"(.

4(;