a
    .'a                     @   s^   d dl Zd dlmZ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dS )    N)assert_almost_equalassert_array_equalassert_equalassert_)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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g d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 )N  d      ).r   ).   r   r   g       @r   r   gffffff
@r   r         Zaxis   )nprandomseedZpiZcolumn_stackZzerosZcosZsinpath_1path_2insert	path_1_4d	path_2_4d)selfZrandom_anglesZrandom_columnsZrandom_columns_2 r   Alib/python3.9/site-packages/scipy/spatial/tests/test_hausdorff.pysetup_method   s$    &&zTestHausdorff.setup_methodc                 C   s4   t | j| jd }t | j| jd }t||k d S )Nr   )r   r   r   r   )r   Zforwardreverser   r   r   test_symmetry!   s    zTestHausdorff.test_symmetryc                 C   sB   t | j| jd }ttjt| j| jdd}t||dd d S )Nr   r   r   	   Zdecimal	r   r   r   maxr   aminr   cdistr   r   actualexpectedr   r   r   #test_brute_force_comparison_forward)   s
    z1TestHausdorff.test_brute_force_comparison_forwardc                 C   sB   t | j| jd }ttjt| j| jdd}t||dd d S Nr   r   r"   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d d S )Nr           r"   r#   )r   r   r   )r   r)   r   r   r   test_degenerate_case=   s    z"TestHausdorff.test_degenerate_casec              	   C   sr   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d d S )N.r   r   r   r   r"   r#   r$   r(   r   r   r   test_2d_data_forwardC   s    z"TestHausdorff.test_2d_data_forwardc                 C   sB   t | j| jd }ttjt| j| jdd}t||dd 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   )r   Z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_statec                 C   sH   dD ]>}t d }| }t| j| j| t d }| }t|| qd S )N)NiEr7   )r   r   r8   r9   r:   r;   r   r   r   test_random_state_None_inti   s    z(TestHausdorff.test_random_state_None_intc                 C   s`   t jd t jdd}t jdd}tt t|| W d    n1 sR0    Y  d S )Nr
   r   r   r4   r   )r   r   r   ZrandpytestZraises
ValueErrorr   )r   ABr   r   r   test_invalid_dimensionst   s
    z%TestHausdorff.test_invalid_dimensionszA, B, seed, expectedr   r   r   )r.   r   r   r   r   )r   r   rC   i*- )r.   r   r   c                 C   sD   t |||d}t|d |d dd |dd  |dd  ks@J d S )N)uvr   r   r"   r#   r   )r   r   )r   r@   rA   r   r*   r)   r   r   r   test_subsets}   s    zTestHausdorff.test_subsetsN)__name__
__module____qualname__r   r!   r+   r-   r/   r0   r1   r6   r<   r=   rB   r>   ZmarkZparametrizerG   r   r   r   r   r	      s:   


		
	r	   )Znumpyr   Znumpy.testingr   r   r   r   r>   Zscipy.spatial.distancer   Zscipy.spatialr   Zscipy._lib._utilr   r	   r   r   r   r   <module>   s   