U
    Hvfz4                    @   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@{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?      ?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@      @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   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 r1   ?/tmp/pip-unpacked-wheel-96ln3f52/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}t 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 5 Q R X q,d S )Ng        r   gJJ@g I 1?gKX@g/?g@?g?T)recordalwaysr)   r*   r   )r+   r,   r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)r-   r.   r/   r0   wr1   r1   r2   test_whiten_zero_stdY   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 )
Nr    r!   r"   r#   r$   r%   r&   r'   r(   )r+   r,   r   naninfassert_raises
ValueErrorr   )r-   r/   Z	bad_valuer0   r1   r1   r2   test_whiten_not_finiteg   s    z!TestWhiten.test_whiten_not_finiteN)__name__
__module____qualname__r3   r?   rD   r1   r1   r1   r2   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   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   r   r   )r+   concatenateXr,   r   r   r   LABEL1)r-   initcr/   label1r1   r1   r2   
test_py_vqs   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 rI   )	r+   rJ   rK   r,   r   r   r   r   rL   )r-   rM   r/   rN   distZtlabel1Ztdistr1   r1   r2   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   )rK   r   r   r   r+   Znewaxisr   )r-   datarM   abtatbr1   r1   r2   
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)	r+   r,   Zfloat64astypefloat32rB   	TypeErrorr   r   )r-   rS   rT   r1   r1   r2   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   rX   )r+   r,   intrB   r[   r   r   )r-   rS   r1   r1   r2   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   r)   )
r+   randomrandr   r   r   r   r   rY   rZ   r-   rK   Z	code_bookZcodes0Zdis0Zcodes1Zdis1r1   r1   r2   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   r)   )r+   r`   ra   r   r   r   r   r   rb   r1   r1   r2   test_vq_large_features   s    zTestVq.test_vq_large_featuresN)
rE   rF   rG   rO   rQ   rW   r\   r^   rc   re   r1   r1   r1   r2   rH   r   s   	rH   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+   r`   Zrandnemptyshapedoubler	   )r-   dnm1m2xyrR   r1   r1   r2   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   r   r   iter)
r+   r`   seedrJ   rK   r,   r   r	   r   CODET2)r-   rM   r/   code1r1   r1   r2   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 5 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
   rB   r   )r-   rR   Zinitksupr1   r1   r2   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   r   r   rr   )r+   r`   rt   rJ   rK   r,   r   r
   r   CODET1ru   )r-   rM   r/   rv   code2r1   r1   r2   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   rr   r   )r{   copyr
   )r-   rR   data1rM   coder1   r1   r2   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   rr   )r{   r
   )r-   rR   r   r1   r1   r2   test_kmeans2_rank1_2   s    zTestKMean.test_kmeans2_rank1_2c                 C   s$   t }|dd d }t|d d S )Nr_   r_   rd   r   )r{   reshaper
   )r-   rR   r1   r1   r2   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 5 Q R X d S )
Ni90  r   pointsminitr   ++z%One of the clusters is empty. Re-run.)messager`   )r+   r`   rt   r{   r
   r   r|   )r-   rR   r~   r1   r1   r2   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   rd   g    .Adefault_rng  r   )Zrowvarr   )Zatol)r{   r   r]   hasattrr+   r`   r   RandomStater   Zcovr   )r-   rR   ZdataskrnginitZorig_covZinit_covr1   r1   r2   test_krandinit  s    zTestKMean.test_krandinitc                 C   s   t ttg d d S )Nr   )rB   rC   r
   r-   r1   r1   r2   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   )rB   rC   r	   rK   r
   r+   r,   r   r1   r1   r2   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   rd   rX   g 7yAC)Zthreshr   r   g333333@)r+   r,   floatr	   r   )r-   ro   resr1   r1   r2   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   r   r   )r+   r,   r`   rt   r
   r{   r   )r-   Zprev_resr   _r1   r1   r2   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 )Nrg   rd   r   r   r   )sizer   r   r   r   )decimal)	r+   ZvstackZonesr`   rt   Zmultivariate_normalZeyer
   r   )r-   Zn_dimr   ZcentersrR   r   r   r1   r1   r2   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 |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   r   )rt   )r`   r   r   )r   rt   )
r+   r`   r   r   appendr   r	   r{   r   r
   )r-   Z	seed_listrt   Zres1r   Zres2r   r1   r1   r2   #test_kmeans_and_kmeans2_random_seed>  s    
z-TestKMean.test_kmeans_and_kmeans2_random_seedN)rE   rF   rG   rq   rw   r   r   r   r   r   r   pytestmarkZskipifsysplatformr   r   r   r   r   r   r   r1   r1   r1   r2   rf      s$   
	
rf   )$r7   r   Znumpyr+   Znumpy.testingr   r   r   r   r   r   r   r   rB   Zscipy.cluster.vqr	   r
   r   r   r   r   r   Zscipy.clusterr   Zscipy.sparse._sputilsr   r,   r   r{   rK   r   ru   rL   r   rH   rf   r1   r1   r1   r2   <module>   sd   $                                                                                                                                                                                                                                                                                                                                                                           %)"
 
 
 

 
 
 


4(;