U
    Gvf                     @   sj   d dl Zd dlmZmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ G dd dZejjdd	 ZdS )
    N)assert_allcloseassert_array_equalassert_equal)directed_hausdorff)distance)check_random_statec                	   @   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
dd Zejdddgdd Zdd Zejddgddgddfdgddgddfd dgddd gd!d"fgd#d$ ZdS )%TestHausdorffc                 C   s&  t jd t jdt j d }t ||t df}t |d |d< t |d |d< t ||t df}t |dd df d |dd df< t |dd df d |dd df< t |d	 d
 |d	< t |d d
 |d< || _|| _	t j
| jdddd| _t j
| j	dddd| _d S )Ni  d      ).r   ).   r   r   g       @r   r   gffffff
@r   r         Zaxis   )nprandomseedpiZcolumn_stackzeroscossinpath_1path_2insert	path_1_4d	path_2_4d)selfZrandom_anglesZrandom_columnsZrandom_columns_2 r   F/tmp/pip-unpacked-wheel-96ln3f52/scipy/spatial/tests/test_hausdorff.pysetup_method   s$    &&zTestHausdorff.setup_methodc                 C   s4   t | j| jd }t | j| jd }||ks0td S )Nr   )r   r   r   AssertionError)r   Zforwardreverser   r   r    test_symmetry!   s    zTestHausdorff.test_symmetryc                 C   s>   t | j| jd }ttjt| j| jdd}t|| d S )Nr   r   r   	r   r   r   maxr   aminr   cdistr   r   actualexpectedr   r   r    #test_brute_force_comparison_forward)   s
    z1TestHausdorff.test_brute_force_comparison_forwardc                 C   s>   t | j| jd }ttjt| j| jdd}t|| d S Nr   r   )	r   r   r   r&   r   r'   r   r(   r   r)   r   r   r    #test_brute_force_comparison_reverse3   s
    z1TestHausdorff.test_brute_force_comparison_reversec                 C   s    t | j| jd }t|d d S )Nr           )r   r   r   )r   r*   r   r   r    test_degenerate_case=   s    z"TestHausdorff.test_degenerate_casec              	   C   sn   t | jdd df | jdd df d }ttjt| jdd df | jdd df dd}t|| d S )N.r
   r   r   r   r%   r)   r   r   r    test_2d_data_forwardC   s    z"TestHausdorff.test_2d_data_forwardc                 C   s>   t | j| jd }ttjt| j| jdd}t|| d S r-   )	r   r   r   r&   r   r'   r   r(   r   r)   r   r   r    test_4d_data_reverseM   s
    z"TestHausdorff.test_4d_data_reversec                 C   sn   t ddgddgddgddgddgg}t ddgddgdd	gd
dgg}t||dd  }d}t|| d S )Nir   r   r      r
      r	   
   	   )r
   r   )r   arrayr   r   )r   Zpath_simple_1Zpath_simple_2r*   r+   r   r   r    test_indicesV   s
    ("zTestHausdorff.test_indicesc                 C   s<   t d }| }t| j| j t d }| }t|| d S Nr   Z	get_stater   r   r   r   )r   rsold_global_staters2new_global_stater   r   r    test_random_state_   s    zTestHausdorff.test_random_stater   NiEc                 C   s>   t d }| }t| j| j| t d }| }t|| d S r:   r;   )r   r   r<   r=   r>   r?   r   r   r    test_random_state_None_inti   s    z(TestHausdorff.test_random_state_None_intc              	   C   sL   t jd}|d}|d}d}tjt|d t|| W 5 Q R X d S )Nl	   "{`R! r   r
   )r   r   z'need to have the same number of columns)match)r   r   Zdefault_rngpytestZraises
ValueErrorr   )r   rngABmsgr   r   r    test_invalid_dimensionst   s    

z%TestHausdorff.test_invalid_dimensionszA, B, seed, expectedr   r   r   )r/   r   r   r   )r   i*- )r/   r   r   c                 C   s@   t |||d}t|d |d  |dd  |dd  ks<td S )N)uvr   r   r   )r   r   r"   )r   rG   rH   r   r+   r*   r   r   r    test_subsets~   s    zTestHausdorff.test_subsets)__name__
__module____qualname__r!   r$   r,   r.   r0   r1   r2   r9   r@   rD   markZparametrizerA   rJ   rN   r   r   r   r    r      s<   


		



r   c                  C   s   zdd l } W n tk
r*   td Y nX |  jdk rDtd td}tj|dfd}tjdd}d	d	g||d
 < t	||d}t
|d d t
|d
 |d
  d S )Nr   z)psutil required to check available memoryl       P z.insufficient memory available to run this testg   ZAr
   )shaperB   r   r   )rL   rM   g
 H@)psutilModuleNotFoundErrorrD   skipZvirtual_memory	availableintr   r   r   r   )rT   sizeZarr1Zarr2r*   r   r   r    test_massive_arr_overflow   s    
rZ   )Znumpyr   Znumpy.testingr   r   r   rD   Zscipy.spatial.distancer   Zscipy.spatialr   Zscipy._lib._utilr   r   rR   ZxslowrZ   r   r   r   r    <module>   s    