a
    �ù»j:  ã                   @   sœ   d dl mZ d dlZd dlZd dlmZmZ d dlm	Z
 d dlmZ dd„ Zdd	„ Zd
d„ Zej dg d¢¡dd„ ƒZdd„ Zej dddg¡dd„ ƒZdS )é    )ÚMockN)Úassert_allcloseÚassert_array_almost_equal)Ú_mds)Úeuclidean_distancesc                  C   s�   t  g d¢g d¢g d¢g d¢g¡} t  ddgddgd	d
gddgg¡}tj| |dddd�\}}t  ddgddgddgddgg¡}t||dd� d S )N©r   é   é   é   ©r   r   é   r   ©r	   r   r   é   ©r
   r   r   r   ç /Ý$Ñ¿çsh‘í|?á¿gw¾Ÿ/ÝÜ?gTã¥›Ä Ð?çü©ñÒMb�?çX9´ÈvÎ¿çš™™™™™É¿çøSã¥›Äà?r   r   )ÚinitZn_componentsÚmax_iterÚn_initg¤p=
×£ö¿gøSã¥›ÄÀgTã¥›Ä ú?gƒÀÊ¡E¶ñ?g¬Zd;ßÏ?gôýÔxé&±¿gÁÊ¡E¶óÝ¿gL7‰A`åö?r	   )Údecimal)ÚnpÚarrayÚmdsÚsmacofr   )ÚsimÚZÚXÚ_ZX_true© r"   úEE:\soccer\ml_env\Lib\site-packages\sklearn/manifold/tests/test_mds.pyÚtest_smacof   s    ""ÿr$   c                  C   s$  t  g d¢g d¢g d¢g d¢g¡} t t¡� t | ¡ W d   ƒ n1 sL0    Y  t  g d¢g d¢g d¢g¡} t t¡� t | ¡ W d   ƒ n1 sœ0    Y  t  g d¢g d¢g d¢g d¢g¡} t  ddgdd	gd
dgg¡}t t¡�  tj| |dd� W d   ƒ n1 �s0    Y  d S )N)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    "(("r)   c                  C   s@   t  g d¢g d¢g d¢g d¢g¡} tjdddd�}| | ¡ d S )	Nr   r   r   r   Fr	   Zprecomputed)ÚmetricZn_jobsZdissimilarity)r   r   r   ÚMDSÚfit)r   Zmds_clfr"   r"   r#   Útest_MDS,   s    "r-   Úk)g      à?g      ø?r   c                 C   sr   t  g d¢g d¢g d¢g d¢g¡}tj|dddd�\}}tj| | 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   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_stress2   s
    "r0   c                  C   sh   d} t  g d¢g d¢g d¢g d¢g¡}tjt| d��  tj|ddd� W d	  ƒ n1 sZ0    Y  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   )ÚmatchT)r*   Únormalized_stressNr&   )Úmsgr   r"   r"   r#   Útest_normalize_metric_warning>   s    "r4   r*   TFc                 C   s”   t j d¡}| dd¡}t|ƒ}ttjd�}| d|¡ tj	| d|d�}| 
|¡ |jd d	 | kshJ ‚tj|| d|d� |jd d	 | ks�J ‚d S )
Nr   r
   r	   )Zside_effectz$sklearn.manifold._mds._smacof_singleÚauto)r*   r2   r/   r   r2   )r   ÚrandomZRandomStateZrandnr   r   r   Z_smacof_singleÚsetattrr+   Zfit_transformZ	call_argsr   )r*   ZmonkeypatchÚrngr    ÚdistZmockZestr"   r"   r#   Útest_normalized_stress_autoI   s    
r:   )Zunittest.mockr   Únumpyr   r'   Znumpy.testingr   r   Zsklearn.manifoldr   r   Zsklearn.metricsr   r$   r)   r-   ÚmarkZparametrizer0   r4   r:   r"   r"   r"   r#   Ú<module>   s   
