o
    Ö­j   ã                   @   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$   ú_/var/www/html/CropPilot/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   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 )Néÿÿÿÿiôÿÿÿr   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   NiÏE©é±   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   ÀZæAr
   )Ú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     +