U
    ½mœd„  ã                   @   s¸   d dl mZ d dlZd dlmZmZ d dlZd dlm	Z
 d dlmZ dd„ Zdd	„ Zd
d„ Zej ddddg¡dd„ ƒZdd„ Zej dddg¡dd„ ƒZej dddg¡dd„ ƒZdS )é    )ÚMockN)Úassert_array_almost_equalÚassert_allclose)Ú_mds)Úeuclidean_distancesc               	   C   s¢   t  ddddgddddgddddgddddgg¡} t  ddgd	d
gddgddgg¡}tj| |ddddd�\}}t  ddgddgddgddgg¡}t||dd� d S )Nr   é   é   é   é   é   ç /Ý$Ñ¿çsh‘í|?á¿gw¾Ÿ/ÝÜ?gTã¥›Ä Ð?çü©ñÒMb�?çX9´ÈvÎ¿çš™™™™™É¿çøSã¥›Äà?Úauto)ÚinitZn_componentsÚmax_iterÚn_initÚnormalized_stressg¤p=
×£ö¿gøSã¥›ÄÀgTã¥›Ä ú?gƒÀÊ¡E¶ñ?g¬Zd;ßÏ?gôýÔxé&±¿gÁÊ¡E¶óÝ¿gL7‰A`åö?)Údecimal)ÚnpÚarrayÚmdsÚsmacofr   )ÚsimÚZÚXÚ_ZX_true© r    úX/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/manifold/tests/test_mds.pyÚtest_smacof
   s    2"     ÿ
ÿr"   c               	   C   s  t  ddddgddddgddddgddddgg¡} t t¡� tj| dd	� W 5 Q R X t  ddddgddddgddddgg¡} t t¡� tj| dd	� W 5 Q R X t  ddddgddddgddddgddddgg¡} t  d
dgddgddgg¡}t t¡� tj| |ddd� W 5 Q R X d S )Nr   r   é	   r	   r
   r   r   r   )r   r   r   r   r   r   r   )r   r   r   ©r   r   ÚpytestZraisesÚ
ValueErrorr   r   )r   r   r    r    r!   Útest_smacof_error   s    2(2r'   c               	   C   sR   t  ddddgddddgddddgddddgg¡} tjdddd	d
�}| | ¡ d S )Nr   r   r   r	   r
   r   FZprecomputedr   )ÚmetricZn_jobsZdissimilarityr   )r   r   r   ÚMDSÚfit)r   Zmds_clfr    r    r!   Útest_MDS-   s    2   ÿr+   Úkg      à?g      ø?r
   c              	   C   s†   t  ddddgddddgddddgddddgg¡}tj|ddddd	�\}}tj| | ddddd	�\}}t||d
d� t||d
d� dS )z>Test that non-metric MDS normalized stress is scale-invariant.r   r   r   r	   r
   r   Fr   )r(   r   r   Úrandom_stategñhãˆµøä>)ZrtolN)r   r   r   r   r   )r,   r   ZX1Zstress1ZX2Zstress2r    r    r!   Útest_normed_stress5   s"    2    ÿ
    ÿ
r.   c               	   C   sd   d} t  ddddgddddgddddgddddgg¡}tjt| d�� tj|d	d	d
� W 5 Q R X dS )z^
    Test that a UserWarning is emitted when using normalized stress with
    metric-MDS.
    z"Normalized stress is not supportedr   r   r   r	   r
   r   ©ÚmatchT)r(   r   Nr$   )Úmsgr   r    r    r!   Útest_normalize_metric_warningE   s    2r2   r(   TFc              	   C   s’   d}t  ddddgddddgddddgddddgg¡}tj| d�}tjt|d	�� tj|| d� W 5 Q R X tjt|d	�� | |¡ W 5 Q R X d S )
Nz4The default value of `normalized_stress` will changer   r   r   r	   r
   r   )r(   r/   )	r   r   r   r)   r%   ZwarnsÚFutureWarningr   r*   )r(   r1   r   Úestr    r    r!   Ú%test_normalized_stress_default_changeP   s    2r5   c                 C   s”   t j d¡}| dd¡}t|ƒ}ttjd�}| d|¡ tj	| d|d�}| 
|¡ |jd d	 | ksht‚tj|| d|d� |jd d	 | ks�t‚d S )
Nr   r	   r   )Zside_effectz$sklearn.manifold._mds._smacof_singler   )r(   r   r-   r   r   )r   ÚrandomZRandomStateZrandnr   r   r   Z_smacof_singleÚsetattrr)   Zfit_transformZ	call_argsÚAssertionErrorr   )r(   ZmonkeypatchÚrngr   ÚdistZmockr4   r    r    r!   Útest_normalized_stress_auto[   s    
r;   )Zunittest.mockr   Únumpyr   Znumpy.testingr   r   r%   Zsklearn.manifoldr   r   Zsklearn.metricsr   r"   r'   r+   ÚmarkZparametrizer.   r2   r5   r;   r    r    r    r!   Ú<module>   s   


