o
    i                      @   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ejdgdd Zdd Zejddgddgeddfdgddgd dfdgddgejddfdgddgejd dfd!dgg d"d#d$fd!dgg d"ej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   \/home/kim/smarthome/.venv/lib/python3.10/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 }||ksJ d S )Nr   )r   r   r   )r   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)   
   z1TestHausdorff.test_brute_force_comparison_forwardc                 C   >   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   r-   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   r.   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@   rA   r   r   r    test_random_state_None_inti   s   z(TestHausdorff.test_random_state_None_intc                 C   sb   t jd}|d}|d}d}tjt|d t|| W d    d S 1 s*w   Y  d S )Nl	   "{`R! r   r
   )r   r   z'need to have the same number of columns)match)r   r   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   )r1   r   r   r   r   )r   r   rO   *- )r1   r   r   )r1   r   r
   c                 C   s   t |||d}t|d |d  |}t|dr|jjj}|dks$|dkr2|dd  |dd  ks2J t|tjj	sKt |||d}t|d |d  d S d S )N)uvr   r   bit_generatorr   rQ   )rR   rS   rJ   )
r   r   hasattrrT   Z	_seed_seqZentropy
isinstancer   r   ZRandomState)r   rK   rL   r   r+   Znum_parallel_threadsr*   Zstarting_seedr   r   r    test_subsets   s   &

zTestHausdorff.test_subsets)__name__
__module____qualname__r!   r$   r,   r0   r2   r3   r4   r;   rB   rH   markZparametrizer   r   rG   rD   rN   Zint64rW   r   r   r   r    r      s\    


		





$r   c                  C   s   zdd l } W n ty   td Y nw |  jdk r!t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
   )shaperE   r   r   )rR   rS   g
 H@)psutilModuleNotFoundErrorrH   skipZvirtual_memory	availableintr   r   r   r   )r]   sizeZarr1Zarr2r*   r   r   r    test_massive_arr_overflow   s   
rc   )numpyr   Znumpy.testingr   r   r   rH   Zscipy.spatial.distancer   Zscipy.spatialr   Zscipy._lib._utilr   r   r[   Zxslowrc   r   r   r   r    <module>   s     +