o
    Ebz4                     @   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      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rW   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?rX   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\(\?rY   r   r   rM   g(\gzG @      g      @      r`   	               g@      @g333333@r9   gUUUUUU@gUUUUUU@g      @g      @g      @r?   )r   re   r`   r`   r`   r`   re   r`   re   re   re   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 q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㈵>Zrtol)nparrayr   r   r   )selfdesiredtpobs r{   =/usr/lib/python3/dist-packages/scipy/cluster/tests/test_vq.pytest_whitenK   s   
zTestWhiten.test_whitenc              	   C   s   t g dg dg dg}t jtfD ]D}|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    n1 sRw   Y  qd S )N)        rZ   gJJ@)r~   rZ   g I 1?)r~   rZ   gKX@)r~   rZ   g/?)r~   rZ   g@?)r~   rZ   g?T)recordalwaysrs   rt   re   )ru   rv   r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)rw   rx   ry   rz   wr{   r{   r|   test_whiten_zero_stdY   s"   

zTestWhiten.test_whiten_zero_stdc              	   C   s^   t jtfD ]'}t jt jt j fD ]}|d|gddgddgddgdd	gg}ttt| qqd S )
Nrj   rk   rl   rm   rn   ro   rp   rq   rr   )ru   rv   r   naninfassert_raises
ValueErrorr   )rw   ry   Z	bad_valuerz   r{   r{   r|   test_whiten_not_finiteg   s   z!TestWhiten.test_whiten_not_finiteN)__name__
__module____qualname__r}   r   r   r{   r{   r{   r|   ri   J   s    ri   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   re   r`   )ru   concatenateXrv   r   r   r   LABEL1)rw   initcry   label1r{   r{   r|   
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 r   )	ru   r   r   rv   r   r   r   r   r   )rw   r   ry   r   Z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   ra   )r   r   r   r   ru   Znewaxisr   )rw   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 )NrZ   g       @Zdtype)	ru   rv   Zfloat64astypefloat32r   	TypeErrorr   r   )rw   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 )Nre   r`   r   )ru   rv   intr   r   r   r   )rw   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   ra   rs   )
ru   randomrandr   r   r   r   r   r   r   rw   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
   rd   i@B r`   rs   )ru   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   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`   )ru   r   ZrandnemptyshapeZdoubler	   )rw   dnZm1Z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	 qd S )Ni1  r   re   r`   iter)
ru   r   seedr   r   rv   r   r	   r   CODET2)rw   r   ry   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 s0w   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_2Dru   rv   r	   r   filterUserWarningr
   r   r   )rw   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 ]&}t|t||ddd }t|t||ddd }t|t	 t|t
 qd S )NiNa r   re   r`   r   )ru   r   r   r   r   rv   r   r
   r   CODET1r   )rw   r   ry   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   ra   re   r   r`   )r   copyr
   )rw   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   r`   re   r   )r   r
   )rw   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   r`   )r   reshaper
   )rw   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 %}|jdd t|dd	d t|d d d df dd	d W d    d S 1 s_w   Y  d S )
Ni90  ra   pointsminitre   ++z%One of the clusters is empty. Re-run.)messager   )ru   r   r   r   r
   r   r   )rw   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 ]0}ttjdr%t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   hasattrru   r   r   RandomStater   Zcovr   )rw   r   ZdataskrngZinitZorig_covZinit_covr{   r{   r|   test_krandinit  s   zTestKMean.test_krandinitc                 C   s   t ttg d d S )Nr`   )r   r   r
   rw   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
   ru   rv   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)re   r`   ra   rb   r   r   re   g 7yAC)Zthreshr   rh   g333333@)ru   rv   floatr	   r   )rw   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-'@*   r`   r   r   )ru   rv   r   r   r
   r   r   )rw   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   rd   r   r   )sizere   r`   r   r   )Zdecimal)	ru   ZvstackZonesr   r   Zmultivariate_normalZeyer
   r   )rw   Zn_dimr   Zcentersr   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 |D ]7}ttd|d\}}ttd|d\}}t|| dD ]}t	td||d\}}t	td||d\}}t|| q4qd S )Nr   r   r`   )r   )r   r   r   )r   r   )
ru   r   r   r   appendr   r	   r   r   r
   )rw   Z	seed_listr   Zres1r   Z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   pytestZmarkZskipifsysplatformr   r   r   r   r   r   r   r{   r{   r{   r|   r      s&    
	
r   )$r   r   Znumpyru   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   rv   r   r   r   r   r   r   ri   r   r   r{   r{   r{   r|   <module>   s8    $%)

(;