o
    h                      @   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         axis   )nprandomseedpicolumn_stackzeroscossinpath_1path_2insert	path_1_4d	path_2_4d)selfrandom_anglesrandom_columnsrandom_columns_2 r$   V/var/www/vscode/kcb/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   r2   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   r3   r4   )	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    path_simple_1path_simple_2r/   r0   r$   r$   r%   test_indicesV   s
   ("zTestHausdorff.test_indicesc                 C   s<   t d }| }t| j| j t d }| }t|| d S Nr   	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 rC   rD   )r    r   rF   rG   rH   rI   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pytestraises
ValueErrorr   )r    rngABmsgr$   r$   r%   test_invalid_dimensionst   s   

"z%TestHausdorff.test_invalid_dimensionszA, B, seed, expectedr   r   r   )r6   r   r   r   r   )r   r   rX   *- )r6   r   r   )r6   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   rZ   )r[   r\   rS   )
r   r   hasattrr]   	_seed_seqentropy
isinstancer   r   RandomState)r    rT   rU   r   r0   num_parallel_threadsr/   starting_seedr$   r$   r%   test_subsets   s   &

zTestHausdorff.test_subsets)__name__
__module____qualname__r&   r)   r1   r5   r7   r8   r9   rB   rJ   rP   markparametrizer   r   rO   rL   rW   int64re   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
   )shaperM   r   r   )r[   r\   g
 H@)psutilModuleNotFoundErrorrP   skipvirtual_memory	availableintr   r   r   r   )rm   sizearr1arr2r/   r$   r$   r%   test_massive_arr_overflow   s   
rv   )numpyr   numpy.testingr   r   r   rP   scipy.spatial.distancer   scipy.spatialr   scipy._lib._utilr   r   ri   xslowrv   r$   r$   r$   r%   <module>   s     +