U
    »mœdz4  ã                ’  @   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d€d�d‚dƒdd„d…d†d`d‡dˆd‰dudŠd‹dŒd�dŽdd�dd�d‘d’d“d”d^d•dqd–d—d˜dJdŽd™d�dgdšd›dœd�dždŸd dd¡d¢d£dsd¤d¥d¦d§d¨d©dªd«d¬dFd­d®d¯d°dGd±d²d³d´dNdµ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Ñdyd
dÒdÓdÔd]dÕdÖd×dØdÙdÚdÛdÜdÝd&dÞdßd1dàdádâdãdäd‹d(dådædçdèdédŒdwdêdádëdŸdbd^dìd	dídJd¬dîdïd~dðd�dñdòdódôdõdöd÷dkdødùdúdûdüd8dYdýdpdþdÿ�d d¬d3�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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/�d0�d�d1d[�d2d°�d)dédÖdk�d3�d4�d5d��d6dÕ�d+d³�d7�d8d­dˆ�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�dNdŒg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®Gázú¿g
×£p=
û?gR¸…ëQ Àg…ëQ¸…@g¸…ëQ¸Àgffffffî?g333333û¿g)\�Âõ(@gáz®Gáú¿gÃõ(\�Âå?g®GázÀg¸…ëQ¸
@gR¸…ëQÀgffffff@g…ëQ¸…û¿g
×£p=
ç¿g×£p=
×ÿ¿g¸…ëQ¸@g      Àgq=
×£p@gš™™™™™ÀgHáz®G@g
×£p=
Àg333333@g…ëQ¸ù¿gìQ¸…ëý?g\�Âõ(\ÿ¿g…ëQ¸@g®GázÀgáz®Gá@g=
×£p=Àg{®Gázô?g      Àgš™™™™™@gìQ¸…ëù¿g      ô?g\�Âõ(\Àg\�Âõ(\	@g¸…ëQ¸ò¿g¸…ëQ¸¾?g=
×£p=ÀgHáz®GÑ¿g�Âõ(\� Àgš™™™™™á¿gq=
×£põ?g�Âõ(\�Àg¤p=
×£@g…ëQ¸…Àg¸…ëQ¸Î?g\�Âõ(\û¿g×£p=
×@gìQ¸…ëÀg)\�Âõ(@g¤p=
×£ Àg…ëQ¸…@g=
×£p=þ¿gö(\�Âõ@g¸…ëQ¸ Àg¤p=
×£Ð?gq=
×£pí¿g…ëQ¸ñ?g      Àg)\�Âõ(ì?g)\�Âõ( @g=
×£p=Àg=
×£p= Àg\�Âõ(\@g®GázÀg333333Ó?g×£p=
×Àg�Âõ(\�Ò¿g®Gáz®	@gffffffÀg®Gáz®û?g¸…ëQ¸Àg®Gázæ?gö(\�Âõü¿gö(\�ÂõÀg®Gáz@gffffffÀgö(\�Âõô?g¸…ëQ¸ú¿g¸…ëQ¸Àgáz®Gáò¿g\�Âõ(\@g\�Âõ(\Àg�Âõ(\�@gš™™™™™ý¿g      @gÃõ(\�Âý?g)\�Âõ(Àg…ëQ¸…@g¤p=
×£Àg=
×£p=þ?gÍÌÌÌÌÌø¿g¤p=
×£ @gÃõ(\�Âõ¿gÃõ(\�Âí?g®GázÀgìQ¸…ë@g…ëQ¸Àg\�Âõ(\@g¤p=
×£
ÀgìQ¸…ë@g{®Gáz ÀgÍÌÌÌÌÌì¿g¤p=
×£ÀgÍÌÌÌÌÌ
@g¸…ëQ¸Àgffffff@gáz®GáÀgš™™™™™ý?g
×£p=
û¿gÍÌÌÌÌÌü?g=
×£p=ö¿g…ëQ¸å?gR¸…ëQØ?g…ëQ¸…÷¿g)\�Âõ(Ü?g¸…ëQ¸Àg)\�Âõ(@gR¸…ëQÀg…ëQ¸…@gìQ¸…ë@g¤p=
×£ð¿gR¸…ëQØ¿gìQ¸…ë@g
×£p=
Àg\�Âõ(\ç?g=
×£p=ö?gq=
×£põ¿g      ü?g333333ÿ¿gÍÌÌÌÌÌô?g¸…ëQ¸@gHáz®G@g333333Àg×£p=
×@g®Gáz®û¿g)\�Âõ(@g333333ë?g\�Âõ(\ß?gR¸…ëQÀg�Âõ(\� @g×£p=
×	Àg
×£p=
÷?gìQ¸…ëé¿gš™™™™™ñ?gìQ¸…ëÀg\�Âõ(\@gq=
×£pù¿gq=
×£p@g\�Âõ(\ç¿gö(\�ÂõÀgÍÌÌÌÌÌô¿gš™™™™™É?g)\�Âõ(ÀgìQ¸…ë	@g®Gáz®ÿ¿gš™™™™™ù?g\�Âõ(\Àg…ëQ¸@gffffffÀg      @g\�Âõ(\û?g=
×£p=
Àg
×£p=
@g×£p=
×û¿gHáz®GÀg¸…ëQ¸þ?gìQ¸…ëÀg
×£p=
ó?gö(\�Âõð?g×£p=
×ã¿gö(\�ÂõØ?g{®Gázü¿gÍÌÌÌÌÌ@gR¸…ëQÀg…ëQ¸…@g…ëQ¸õ¿g
×£p=
Àg®Gáz@gÍÌÌÌÌÌÀgÃõ(\�Âý¿gHáz®G@g®Gáz Àg®Gáz®ó¿g¤p=
×£ü¿g
×£p=
Àg¤p=
×£À¿g      Àg¸…ëQ¸@gq=
×£pù?g®Gáz®@ç{®Gáz„?g…ëQ¸…Û¿g¤p=
×£À?g\�Âõ(\ÀgHáz®G@g      ü¿gö(\�Âõà¿gq=
×£pñ¿g333333Ã?gáz®Gá Àg{®Gázø¿g…ëQ¸…ó?gÍÌÌÌÌÌ Àg…ëQ¸…ë¿g{®GázÀg=
×£p=@g)\�Âõ(Àg¤p=
×£
@gìQ¸…ëñ¿gq=
×£pÀg
×£p=
ó¿gHáz®Gé?g�Âõ(\�ê¿g
×£p=
ï?g…ëQ¸…	Àg333333÷?g)\�Âõ(Àgáz®Gá@g…ëQ¸ÀgÃõ(\�Â	@g…ëQ¸…ÿ¿g…ëQ¸…	@g{®Gázø?gffffff@g®Gáz®@g�Âõ(\�Àg333333ã¿gHáz®Gõ?gffffffæ?gffffffú¿gR¸…ëQô?g¸…ëQ¸ö¿gq=
×£pñ?g      Àgö(\�Âõ@g{®Gáz@gÍÌÌÌÌÌÀg®Gáz®ç?gHáz®Gñ¿g¸…ëQ¸ž¿g333333Àgq=
×£pý¿gffffffú?g
×£p=
Àg×£p=
×@g333333Àg\�Âõ(\@g®Gáz®Àg×£p=
×÷?g\�Âõ(\ó¿g)\�Âõ(Àg
×£p=
@gÍÌÌÌÌÌÀgffffffÀg=
×£p=@gš™™™™™Àgš™™™™™é?g      @g      Àg®Gáz®@g¤p=
×£ô¿g®Gáz®ÀgHáz®Gý¿g®Gáz®ó?g×£p=
×ó¿gö(\�Âõ@g®Gáz
Àg…ëQ¸…Àg®Gáz@g®GázÀgR¸…ëQ@g
×£p=
×?g�Âõ(\�ö¿g{®Gáz¤?ç      ð?gìQ¸…ëý¿gHáz®GÀg¸…ëQ¸@g®Gázö?g)\�Âõ(Ì¿g333333ÿ?gáz®Gáê¿g…ëQ¸…Àg{®Gáz@gR¸…ëQô¿g333333@g{®Gáz
@gáz®GáÀgÍÌÌÌÌÌ@g
×£p=
÷¿g)\�Âõ( Àg®Gáz®×?g…ëQ¸Õ?g{®Gáz@g{®GázÄ¿g=
×£p=ú¿g¸…ëQ¸î¿gffffffö?gÍÌÌÌÌÌÜ?g®Gáz®Àgö(\�Âõø?g\�Âõ(\÷?gÃõ(\�Âù¿gáz®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æ?gU…H~«
@g¨›?gæK=EíŠ@gÞÜF Mpî?g|ÉH“@gH¦à|ú?çìcw&™ï?gb†ÆA|ê?çúÙD=¯Þã?çýâk2×È?ç'µB¿ì?çÅ)Æ;¸"~?çß|¸d=ë?çºÉûz¶õÐ?ç|æºß×Ü?çRêyÔëÝ?çñhãˆµøä>©Zrtol)ÚnpÚarrayr   r   r   )ÚselfÚdesiredÚtpÚobs© r1   úT/home/sam/Atlas/atlas_env/lib/python3.8/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¡}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   gÓüJJîî@g° I �1õ?gÁ¢KÍXó@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ò²?g€8Ýìî}Àg?�½îkª¿zKOne 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 €à7yÃAC)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_normalÚ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­   Ú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(;