o
    Ö­jÐö ã                   @   s@  d dl Zd dlmZmZmZ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 d dlmZ e
jjZe
jjZee
j d¡e
j d	¡ed
ddgd�gZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze
j  dg d¢¡e
j  d dd!g¡e
j  d"d#d
g¡d$d%„ ƒƒƒZ!d&d'„ Z"d(d)„ Z#dS )*é    N)Úis_cupyÚis_numpyÚis_torchÚarray_namespaceÚxp_assert_closeÚxp_assert_equalÚassert_array_almost_equal)Úraises)Úndimageé   )Útypes)Úarray_api_compatibleÚskip_xp_backendsÚxfail_xp_backendsTÚcupyú	jax.numpy)Úcpu_onlyÚ
exceptionsc                   @   sR  e Zd Zeddd�ej de¡dd„ ƒƒZeddd�ej de¡dd„ ƒƒZ	eddd�ej de¡d	d
„ ƒƒZ
eddd�ej de¡dd„ ƒƒZeddd�ej de¡dd„ ƒƒZeddd�ej de¡dd„ ƒƒZdd„ Zej de¡dd„ ƒZej de¡dd„ ƒZeddd�ej de¡dd„ ƒƒZeddd�dd„ ƒZej de¡d d!„ ƒZej de¡d"d#„ ƒZedd$d�ej de¡d%d&„ ƒƒZej de¡d'd(„ ƒZej de¡d)d*„ ƒZd+d,„ Zeddd�d-d.„ ƒZd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z d;d<„ Z!ej de¡d=d>„ ƒZ"ej de¡d?d@„ ƒZ#ej de¡dAdB„ ƒZ$ej de¡dCdD„ ƒZ%ej de¡dEdF„ ƒZ&ej de¡dGdH„ ƒZ'ej de¡dIdJ„ ƒZ(ej de¡dKdL„ ƒZ)ej de¡dMdN„ ƒZ*ej de¡dOdP„ ƒZ+ej de¡dQdR„ ƒZ,ej de¡dSdT„ ƒZ-ej de¡dUdV„ ƒZ.ej de¡dWdX„ ƒZ/ej de¡dYdZ„ ƒZ0ej de¡d[d\„ ƒZ1ej de¡d]d^„ ƒZ2ej de¡d_d`„ ƒZ3ej de¡dadb„ ƒZ4ej de¡dcdd„ ƒZ5ej de¡dedf„ ƒZ6ej de¡dgdh„ ƒZ7ej de¡didj„ ƒZ8ej de¡dkdl„ ƒZ9ej de¡dmdn„ ƒZ:ej de¡dodp„ ƒZ;dqdr„ Z<eddsd�dtdu„ ƒZ=dvdw„ Z>eddsd�dxdy„ ƒZ?eddsd�dzd{„ ƒZ@d|d}„ ZAd~d„ ZBd€d�„ ZCeddsd�d‚dƒ„ ƒZDd„d…„ ZEeddsd�d†d‡„ ƒZFdˆd‰„ ZGeddsd�dŠd‹„ ƒZHeddsd�dŒd�„ ƒZIej de¡dŽd�„ ƒZJej de¡d�d‘„ ƒZKej de¡d’d“„ ƒZLej de¡d”d•„ ƒZMej de¡d–d—„ ƒZNej de¡d˜d™„ ƒZOej de¡dšd›„ ƒZPej de¡dœd�„ ƒZQej de¡dždŸ„ ƒZRej de¡d d¡„ ƒZSej de¡d¢d£„ ƒZTej de¡d¤d¥„ ƒZUej de¡d¦d§„ ƒZVej de¡d¨d©„ ƒZWej de¡dªd«„ ƒZXej de¡d¬d­„ ƒZYej de¡d®d¯„ ƒZZej de¡d°d±„ ƒZ[ej de¡d²d³„ ƒZ\ej de¡d´dµ„ ƒZ]ej de¡d¶d·„ ƒZ^ej de¡d¸d¹„ ƒZ_ej de¡dºd»„ ƒZ`ej de¡d¼d½„ ƒZaej de¡d¾d¿„ ƒZbej de¡dÀdÁ„ ƒZcej de¡dÂdÃ„ ƒZdej de¡dÄdÅ„ ƒZedÆdÇ„ ZfeddÈd�dÉdÊ„ ƒZgdËdÌ„ ZheddÈd�dÍdÎ„ ƒZidÏdÐ„ ZjeddÑd�dÒdÓ„ ƒZkej de¡dÔdÕ„ ƒZldÖd×„ ZmdØdÙ„ ZndÚdÛ„ ZodÜdÝ„ Zpej de¡dÞdß„ ƒZqej de¡dàdá„ ƒZrej de¡dâdã„ ƒZsej de¡dädå„ ƒZtdædç„ Zudèdé„ Zvdêdë„ Zweddì�eddíd�edîdïd�ej dðdñdòg¡ej dódôdõg¡ej dög d÷¢¡ej døg dù¢¡dúdû„ ƒƒƒƒƒƒƒZxdüdý„ Zyedîdþd�eddÿd��d �d„ ƒƒZz�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ddÈd��d�d„ ƒZ„�d�d„ Z…eddÈd��d�d„ ƒZ†�d�d„ Z‡edîdþd��d�d„ ƒZˆ�d�d„ Z‰ed�d d��d!�d"„ ƒZŠedîdþd��d#�d$„ ƒZ‹edîdþd��d%�d&„ ƒZŒ�d'�d(„ Z�ed�d)d��d*�d+„ ƒZŽedîdþd��d,�d-„ ƒZ�eddì�eddíd�edîdïd�ej dódôdõg¡ej dög d÷¢¡ej �d.g �d/¢¡ej �d0g �d1¢¡ej døg �d2¢¡�d3�d4„ ƒƒƒƒƒƒƒƒZ�ej de¡�d5�d6„ ƒZ‘ej de¡�d7�d8„ ƒZ’ej de¡�d9�d:„ ƒZ“�d;S (<  ÚTestNdimageMorphologyr   ú)CuPy does not have distance_transform_bf.)ÚreasonÚdtypec                 C   s@  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddd�\}}g d¢g d¢g d¢g d¢g d	¢g d¢g d¢g d¢g d¢g	}| |¡}t|| |ƒ g d¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )N©	r   r   r   r   r   r   r   r   r   ©	r   r   r   r   r   r   r   r   r   ©	r   r   r   r   r   r   r   r   r   ©r   Ú	euclideanT©Úreturn_indices)	r   r   r   é   é   r   r   r   r   ©	r   r   r   r    é   r    r   r   r   ©	r   r   r   r   r   r   r   r   r   ©	r   r   r   r   r   r   r   r   r   ©	é   r&   r&   r   r   r   r&   r&   r&   ©	r    r    r    r    é   r    r    r    r    ©	é   r*   r(   r(   é   r(   r(   r*   r*   ©	r(   r(   r(   r+   r+   r+   r(   r(   r(   ©	r+   r+   r+   r+   r+   r+   r+   r+   r+   ©	r"   r"   r"   r"   r"   r"   r"   r"   r"   ©	r   r   r   r&   r    r*   r(   r+   r"   ©	r   r   r   r   r    r(   r(   r+   r"   ©	r   r   r   r   r    r(   r+   r+   r"   ©	r   r   r   r   r(   r+   r+   r+   r"   ©ÚgetattrÚasarrayr
   Údistance_transform_bfr   ©Úselfr   ÚxpÚdataÚoutÚftÚexpected© r>   ú`/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/ndimage/tests/test_morphology.pyÚtest_distance_transform_bf01   sf   

øø	
ÿø
	ø	ø÷
z2TestNdimageMorphology.test_distance_transform_bf01c                 C   s<  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddd�\}}g d¢g d¢g d¢g d¢g d	¢g d¢g d¢g d¢g d¢g	}| |¡}t||ƒ g d¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )Nr   r   r   r   Ú	cityblockTr   ©	r   r   r   r   r   r   r   r   r   )	r   r   r   r   r&   r   r   r   r   r#   r$   )	r&   r&   r&   r&   r   r&   r&   r&   r&   )	r    r    r    r    r+   r    r    r    r    )	r*   r*   r(   r+   r+   r+   r(   r*   r*   r,   r-   r.   r/   r0   ©	r   r   r   r   r    r+   r+   r+   r"   r3   r7   r>   r>   r?   Útest_distance_transform_bf02I   óf   

øø	
ÿø
	
ø	ø÷
z2TestNdimageMorphology.test_distance_transform_bf02c                 C   s<  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddd�\}}g d¢g d¢g d¢g d¢g d	¢g d¢g d¢g d¢g d¢g	}| |¡}t||ƒ g d¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )Nr   r   r   r   Ú
chessboardTr   )	r   r   r   r   r   r   r   r   r   rB   r#   r$   )	r&   r&   r    r   r   r   r    r&   r&   )	r    r    r*   r(   r(   r(   r*   r    r    r)   r,   r-   r.   r/   ©	r   r   r   r   r*   r(   r(   r+   r"   ©	r   r   r   r   r(   r(   r+   r+   r"   )	r   r   r   r   r(   r+   r+   r+   r"   )	r   r   r   r   r(   r(   r+   r+   r"   )	r   r   r   r    r*   r(   r(   r+   r"   r3   r7   r>   r>   r?   Útest_distance_transform_bf03{   rE   z2TestNdimageMorphology.test_distance_transform_bf03Tz,inplace distances= arrays are numpy-specific)Únp_onlyr   c           
      C   sâ  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|dd�\}}g }g }|j|j|jd�}tj||d� | |¡ tj|ddd	�}	| |	¡ tj	|j|j
d�}	tj|dd
|	d� | |	¡ tj|dd�\}}	| |¡ | |	¡ |j|j|jd�}tj||d
d�}	| |¡ | |	¡ tj	|j|j
d�}	tj|d
|	d�}| |¡ | |	¡ |j|j|jd�}tj	|j|j
d�}	tj||d
|	d� | |¡ | |	¡ |D ]}t||ƒ qÝ|D ]}	t||	ƒ qçd S )Nr   r   r   r   r   r   ©Ú	distancesF©Úreturn_distancesr   T©rN   r   Úindices©rL   r   ©r   rP   ©rL   r   rP   )r4   r5   r
   r6   ÚzerosÚshapeÚfloat64ÚappendÚnprP   Úint32r   ©
r8   r   r9   r:   ÚtdtÚtftÚdtsÚftsÚdtr<   r>   r>   r?   Útest_distance_transform_bf04­   sr   

øø	
ÿ
ÿ

ÿ

ÿ

ÿ

ÿ

ÿz2TestNdimageMorphology.test_distance_transform_bf04c                 C   sF  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddddgd�\}}g d¢g d¢g d	¢g d
¢g d¢g d
¢g d	¢g d¢g d¢g	}| |¡}t|| |ƒ g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )Nr   r   r   r   r   Tr   ©r   Úsampling)	r   r   r   r    r    r    r   r   r   )	r   r   r    r"   é   r"   r    r   r   )	r   r   r    rc   é    rc   r    r   r   r#   r$   r%   r'   r)   r,   r-   r.   r/   r0   r1   r2   r3   r7   r>   r>   r?   Útest_distance_transform_bf05ã   óf   

øø	
ÿø
	ø	ø÷
z2TestNdimageMorphology.test_distance_transform_bf05c                 C   sF  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddddgd	�\}}g d¢g d¢g d
¢g d¢g d¢g d¢g d
¢g d¢g d¢g	}| |¡}t|| |ƒ g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )Nr   r   r   r   r   Tr   r   ra   )	r   r   r   r   r    r   r   r   r   r!   )	r   r   r   r    é	   r    r   r   r   r#   )	r   r   r   r   r   r   r   r   r   )	r&   r&   r&   r&   r   r&   r&   r&   r&   )	r    r    r    r    r    r    r    r    r    )	r*   r*   r*   r*   r(   r*   r*   r*   r*   )	r(   r(   r(   r(   r+   r(   r(   r(   r(   r-   r.   r/   )	r   r   r   r   r(   r(   r(   r+   r"   r2   )	r   r   r   r   r+   r+   r+   r+   r"   r0   r3   r7   r>   r>   r?   Útest_distance_transform_bf06  rf   z2TestNdimageMorphology.test_distance_transform_bf06c                 C   s�   t |ƒr	t d¡ | g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	¡}ttƒ� tj|ddd� W d   ƒ d S 1 sAw   Y  d S )Nr   r   r   r   FrM   )r   ÚpytestÚxfailr5   Úassert_raisesÚRuntimeErrorr
   r6   )r8   r9   r:   r>   r>   r?   Útest_distance_transform_bf07E  s"   

ø
	ÿ"ÿz2TestNdimageMorphology.test_distance_transform_bf07c                 C   s  t ||ƒ}t|ƒrt d¡ |jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddd�\}}t |d¡}t||ƒ g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )Nú*CuPy does not have distance_transform_cdt.r   r   r   r   rA   Tr   r#   ©	r   r   r   r   r   r   r   r   r   )	r&   r&   r   r   r   r   r   r&   r&   )	r    r    r    r    r   r    r    r    r    )	r*   r*   r*   r*   r+   r+   r(   r*   r*   ©	r(   r(   r(   r(   r+   r+   r(   r(   r(   r-   r.   r/   rC   )	r   r   r   r   r    r*   r(   r+   r"   )	r   r   r   r   r    r*   r(   r+   r"   ©	r4   r   ri   rj   r5   r
   Údistance_transform_cdtr6   r   ©r8   r   r9   r:   r;   r<   Úbfr=   r>   r>   r?   Útest_distance_transform_cdt01X  sV   


øø	
ÿ
ø	ø÷
z3TestNdimageMorphology.test_distance_transform_cdt01c                 C   s  t ||ƒ}t|ƒrt d¡ |jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|ddd�\}}t |d¡}t||ƒ g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g d¢g	g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	g}| |¡}t||ƒ d S )Nrn   r   r   r   r   rF   Tr   r#   ro   )	r&   r&   r   r   r   r   r   r&   r&   )	r    r    r&   r   r   r   r&   r    r    )	r*   r*   r    r(   r+   r(   r    r*   r*   rp   r-   r.   r/   )	r   r   r   r   r&   r    r(   r+   r"   )	r   r   r   r   r   r(   r(   r+   r"   )	r   r   r   r   r   r(   r+   r+   r"   rH   rG   rq   rs   r>   r>   r?   Útest_distance_transform_cdt02‚  sV   


øø	
ÿ
ø	ø÷
z3TestNdimageMorphology.test_distance_transform_cdt02z*inplace indices= arrays are numpy-specificc           
      C   sô  t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|dd�\}}g }g }|j|j|jd�}tj||d� | |¡ tj|ddd	�}	| |	¡ | tj	|jtjd�¡}	tj|dd|	d
� | |	¡ tj|dd�\}}	| |¡ | |	¡ |j|j|jd�}tj||dd�}	| |¡ | |	¡ | tj	|jtjd�¡}	tj|d|	d�}| |¡ | |	¡ |j|j|jd�}| tj	|jtjd�¡}	tj||d|	d� | |¡ | |	¡ |D ]}t
||ƒ qæ|D ]}	t
||	ƒ qðd S )Nr   r   r   r   Tr   rK   FrM   rO   rQ   rR   rS   )r4   r5   r
   rr   rT   rU   rY   rW   rX   rP   r   rZ   r>   r>   r?   Útest_distance_transform_cdt03«  sr   

øø	
ÿ
ÿ

ÿ

ÿ

ÿ

ÿ

ÿz3TestNdimageMorphology.test_distance_transform_cdt03z3XXX: does not raise unless indices is a numpy arrayc                 C   sš   |  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	¡}|j|jf|j |jd�}ttƒ� tj|dd|d� W d   ƒ d S 1 sFw   Y  d S )Nr   r   r   r   TFrO   )	r5   rT   ÚndimrU   rY   rk   rl   r
   r6   )r8   r9   r:   Úindices_outr>   r>   r?   Útest_distance_transform_cdt04à  s&   
ø	
ü"ÿz3TestNdimageMorphology.test_distance_transform_cdt04c                 C   s¢   t ||ƒ}t|ƒrt d¡ n	t|ƒrt d¡ |jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}| d¡}tj||d�}| 	|¡d	ksOJ ‚d S )
Nrn   zint overflowr   r   r   r   ©r&   r&   ©Úmetriciëÿÿÿ)
r4   r   ri   rj   r   r5   Úonesr
   rr   Úsum)r8   r   r9   r:   Ú
metric_argÚactualr>   r>   r?   Útest_distance_transform_cdt05÷  s(   


øø
	z3TestNdimageMorphology.test_distance_transform_cdt05c           	      C   sþ   t ||ƒ}t|ƒrt d¡ |jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|dd�\}}t |d¡}t||ƒ t	 |¡}|t	j
|jd	d … |jd� }| t	j¡}t	 |||¡ t	jj|d
d�}t	 ||¡ | |¡}t||ƒ d S )Nú(CuPy does not have distance_transform_bfr   r   r   r   Tr   r   r   r   ©Úaxis)r4   r   ri   rj   r5   r
   Údistance_transform_edtr6   r   rX   rP   rU   r   ÚastyperV   ÚmultiplyÚaddÚreduceÚsqrt)	r8   r   r9   r:   r;   r<   rt   Únp_ftr_   r>   r>   r?   Útest_distance_transform_edt01  s4   


øø	


z3TestNdimageMorphology.test_distance_transform_edt01z%inplace distances= are numpy-specificc           
      C   s   t ||ƒ}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|dd�\}}g }g }|j|j|jd�}tj||d� | |¡ tj|ddd	�}	| |	¡ tj	|j|j
d�}	| |	¡}	tj|d
d|	d� | |	¡ tj|dd�\}}	| |¡ | |	¡ |j|j|jd�}tj||dd�}	| |¡ | |	¡ tj	|j|j
d�}	| |	¡}	tj|d|	d�}| |¡ | |	¡ |j|j|jd�}tj	|j|j
d�}	| |	¡}	tj||d|	d� | |¡ | |	¡ |D ]}t||ƒ qì|D ]}	t||	ƒ qöd S )Nr   r   r   r   Tr   rK   r   rM   FrO   rQ   rR   rS   )r4   r5   r
   r†   rT   rU   rV   rW   rX   rP   rY   r   rZ   r>   r>   r?   Útest_distance_transform_edt02,  sx   

øø	
ÿ

ÿ

ÿ

ÿ


ÿ


ÿ

ÿz3TestNdimageMorphology.test_distance_transform_edt02c                 C   s”   t ||ƒ}t|ƒrt d¡ |jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|dddgd�}tj|ddgd�}t||ƒ d S )	Nrƒ   r   r   r   r   r   r   ©rb   ©	r4   r   ri   rj   r5   r
   r6   r†   r   ©r8   r   r9   r:   Úrefr;   r>   r>   r?   Útest_distance_transform_edt03l  ó$   


øø	z3TestNdimageMorphology.test_distance_transform_edt03c                 C   s”   t ||ƒ}t|ƒrt d¡ |jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	|d�}tj|dddgd	�}tj|ddgd	�}t||ƒ d S )
Nrƒ   r   r   r   r   r   r   r   r�   r�   r‘   r>   r>   r?   Útest_distance_transform_edt4  r”   z2TestNdimageMorphology.test_distance_transform_edt4c                 C   s   t  d¡}t|dgƒ d S )NFç        )r
   r†   r   )r8   r9   r;   r>   r>   r?   Útest_distance_transform_edt5’  s   
z2TestNdimageMorphology.test_distance_transform_edt5c                 C   s’   |  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	¡}|j|j|jd�}ttƒ� tj|dd|d� W d   ƒ d S 1 sBw   Y  d S )Nr   r   r   r   TF)r   rN   rL   )r5   rT   rU   rV   rk   rl   r
   r6   )r8   r9   r:   Údistances_outr>   r>   r?   Útest_distance_transform_edt6—  s&   
ø	
ü"ÿz2TestNdimageMorphology.test_distance_transform_edt6c                 C   s   t  dd¡}|dksJ ‚d S )Nr   r   )r
   Úgenerate_binary_structure©r8   r9   Ústructr>   r>   r?   Útest_generate_structure01®  s   z/TestNdimageMorphology.test_generate_structure01c                 C   s   t  dd¡}t|g d¢ƒ d S )Nr   ©r   r   r   ©r
   rš   r   r›   r>   r>   r?   Útest_generate_structure02²  s   z/TestNdimageMorphology.test_generate_structure02c                 C   s,   t  dd¡}t|g d¢g d¢g d¢gƒ d S )Nr   r   ©r   r   r   rž   rŸ   r›   r>   r>   r?   Útest_generate_structure03¶  ó
   

þz/TestNdimageMorphology.test_generate_structure03c                 C   s,   t  dd¡}t|g d¢g d¢g d¢gƒ d S )Nr   rž   rŸ   r›   r>   r>   r?   Útest_generate_structure04¼  r£   z/TestNdimageMorphology.test_generate_structure04c                 C   sp   g d¢g d¢g d¢g}|  |¡}t |d¡}tj g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}t||ƒ d S )Nr¡   rž   r   ©r   r   r   r   r   ©r   r   r   r   r   ©r   r   r   r   r   r   ©r5   r
   Úiterate_structurerX   Úboolr   ©r8   r9   rœ   r;   r=   r>   r>   r?   Útest_iterate_structure01Â  s    þ

üü
z.TestNdimageMorphology.test_iterate_structure01c                 C   sp   ddgddgddgg}|  |¡}t |d¡}tj g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}t||ƒ d S )Nr   r   r   )r   r   r   ©r   r   r   rž   r   r¨   r«   r>   r>   r?   Útest_iterate_structure02Ð  s    þ

üü
z.TestNdimageMorphology.test_iterate_structure02c                 C   sŽ   g d¢g d¢g d¢g}|  |¡}t |dd¡}g d¢g d¢g d¢g d¢g d¢g}tj |td�}|  |¡}t|d	 |ƒ |d ddgksEJ ‚d S )
Nr¡   rž   r   r   r¥   r¦   r§   r   r   r¨   r«   r>   r>   r?   Útest_iterate_structure03ß  s    þ
ü
z.TestNdimageMorphology.test_iterate_structure03c                 C   ó>   t ||ƒ}|jg |d�}t |¡}||jd|jd�ksJ ‚d S ©Nr   r   ©r4   r~   r
   Úbinary_erosionr5   r   ©r8   r   r9   r:   r;   r>   r>   r?   Útest_binary_erosion01ï  ó   

z+TestNdimageMorphology.test_binary_erosion01c                 C   sB   t ||ƒ}|jg |d�}tj|dd�}||jd|jd�ksJ ‚d S )Nr   r   ©Úborder_valuer²   r´   r>   r>   r?   Útest_binary_erosion02ö  s   
z+TestNdimageMorphology.test_binary_erosion02c                 C   ó:   t ||ƒ}|jdg|d�}t |¡}t|| dg¡ƒ d S ©Nr   r   r   ©r4   r~   r
   r³   r   r5   r´   r>   r>   r?   Útest_binary_erosion03ý  ó   

z+TestNdimageMorphology.test_binary_erosion03c                 C   s>   t ||ƒ}|jdg|d�}tj|dd�}t|| dg¡ƒ d S ©Nr   r   r·   r¼   r´   r>   r>   r?   Útest_binary_erosion04  s   
z+TestNdimageMorphology.test_binary_erosion04c                 C   ó<   t ||ƒ}|jdg|d�}t |¡}t|| g d¢¡ƒ d S )Nr&   r   r¡   r¼   r´   r>   r>   r?   Útest_binary_erosion05  ó   

z+TestNdimageMorphology.test_binary_erosion05c                 C   ó@   t ||ƒ}|jdg|d�}tj|dd�}t|| g d¢¡ƒ d S ©Nr&   r   r   r·   rž   r¼   r´   r>   r>   r?   Útest_binary_erosion06  ó   
z+TestNdimageMorphology.test_binary_erosion06c                 C   rÁ   )Nr*   r   r¦   r¼   r´   r>   r>   r?   Útest_binary_erosion07  rÃ   z+TestNdimageMorphology.test_binary_erosion07c                 C   rÄ   )Nr*   r   r   r·   r§   r¼   r´   r>   r>   r?   Útest_binary_erosion08   rÇ   z+TestNdimageMorphology.test_binary_erosion08c                 C   sD   t jdg|d�}d|d< | |¡}t |¡}t|| g d¢¡ƒ d S )Nr*   r   r   r   ©r   r   r   r   r   ©rX   r~   r5   r
   r³   r   r´   r>   r>   r?   Útest_binary_erosion09'  ó
   

z+TestNdimageMorphology.test_binary_erosion09c                 C   sH   t jdg|d�}d|d< | |¡}tj|dd�}t|| g d¢¡ƒ d S )Nr*   r   r   r   r   r·   )r   r   r   r   r   rË   r´   r>   r>   r?   Útest_binary_erosion10/  ó
   
z+TestNdimageMorphology.test_binary_erosion10c                 C   sX   t jdg|d�}d|d< | |¡}| g d¢¡}tj||dd�}t|| g d¢¡ƒ d S )	Nr*   r   r   r   ©r   r   r   r   r·   ©r   r   r   r   r   rË   ©r8   r   r9   r:   rœ   r;   r>   r>   r?   Útest_binary_erosion117  ó   
z+TestNdimageMorphology.test_binary_erosion11c                 C   sZ   t jdg|d�}d|d< | |¡}| g d¢¡}tj||ddd�}t|| g d	¢¡ƒ d S )
Nr*   r   r   r   rÐ   r   éÿÿÿÿ©r¸   Úorigin©r   r   r   r   r   rË   rÒ   r>   r>   r?   Útest_binary_erosion12@  ó   
z+TestNdimageMorphology.test_binary_erosion12c                 C   sZ   t jdg|d�}d|d< | |¡}| g d¢¡}tj||ddd�}t|| g d¢¡ƒ d S )	Nr*   r   r   r   rÐ   r   rÖ   ©r   r   r   r   r   rË   rÒ   r>   r>   r?   Útest_binary_erosion13I  rÚ   z+TestNdimageMorphology.test_binary_erosion13c                 C   sX   t jdg|d�}d|d< | |¡}| ddg¡}tj||dd�}t|| g d¢¡ƒ d S )Nr*   r   r   r   r   r·   )r   r   r   r   r   rË   rÒ   r>   r>   r?   Útest_binary_erosion14R  rÔ   z+TestNdimageMorphology.test_binary_erosion14c                 C   sZ   t jdg|d�}d|d< | |¡}| ddg¡}tj||ddd�}t|| g d¢¡ƒ d S )	Nr*   r   r   r   r   rÕ   rÖ   )r   r   r   r   r   rË   rÒ   r>   r>   r?   Útest_binary_erosion15[  rÚ   z+TestNdimageMorphology.test_binary_erosion15c                 C   sB   t ||ƒ}|jddg|d�}tj|dd�}t|| dgg¡ƒ d S r¿   r¼   r´   r>   r>   r?   Útest_binary_erosion16d  s   
z+TestNdimageMorphology.test_binary_erosion16c                 C   ó>   t ||ƒ}|jddg|d�}t |¡}t|| dgg¡ƒ d S r»   r¼   r´   r>   r>   r?   Útest_binary_erosion17k  ó   

z+TestNdimageMorphology.test_binary_erosion17c                 C   ó@   t ||ƒ}|jddg|d�}t |¡}t|| g d¢g¡ƒ d S )Nr   r&   r   ©r   r   r   r¼   r´   r>   r>   r?   Útest_binary_erosion18r  ó   

z+TestNdimageMorphology.test_binary_erosion18c                 C   sD   t ||ƒ}|jddg|d�}tj|dd�}t|| g d¢g¡ƒ d S )Nr   r&   r   r·   rž   r¼   r´   r>   r>   r?   Útest_binary_erosion19y  s   
z+TestNdimageMorphology.test_binary_erosion19c                 C   sL   t ||ƒ}|jddg|d�}t |¡}t|| g d¢g d¢g d¢g¡ƒ d S )Nr&   r   rä   r¡   r¼   r´   r>   r>   r?   Útest_binary_erosion20€  ó   

þz+TestNdimageMorphology.test_binary_erosion20c                 C   sP   t ||ƒ}|jddg|d�}tj|dd�}t|| g d¢g d¢g d¢g¡ƒ d S rÅ   r¼   r´   r>   r>   r?   Útest_binary_erosion21‰  s   
þz+TestNdimageMorphology.test_binary_erosion21c              
   C   s¢   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g|d�}tj|dd�}t||ƒ d S )N©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   r   r   r·   ©r4   r5   r
   r³   r   ©r8   r   r9   r=   r:   r;   r>   r>   r?   Útest_binary_erosion22’  ó0   
ù

ùùz+TestNdimageMorphology.test_binary_erosion22c              
   C   sº   t ||ƒ}t dd¡}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d¢g|d
�}tj||dd�}t||ƒ d S )Nr   rë   rí   rï   rð   rñ   rò   ró   rô   r   r   r·   )r4   r
   rš   r5   r³   r   ©r8   r   r9   rœ   r=   r:   r;   r>   r>   r?   Útest_binary_erosion23©  s4   

ù

ùùz+TestNdimageMorphology.test_binary_erosion23c              
   C   sº   t ||ƒ}| ddgddgg¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d	¢g d¢g d
¢g d¢g d¢g|d�}tj||dd�}t||ƒ d S )Nr   r   rë   rð   ©r   r   r   r   r   r   r   r   rò   )r   r   r   r   r   r   r   r   rï   rñ   ró   rô   r   r·   rõ   rù   r>   r>   r?   Útest_binary_erosion24Â  s6   

ÿù

ùùz+TestNdimageMorphology.test_binary_erosion24c              
   C   sÄ   t ||ƒ}g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}tj||dd�}t||ƒ d S )Nr¡   rÐ   rë   rì   )r   r   r   r   r   r   r   r   rî   rï   rð   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   rô   r   r   r·   rõ   rù   r>   r>   r?   Útest_binary_erosion25Û  s:   
þ
ù

ùùz+TestNdimageMorphology.test_binary_erosion25c              
   C   sÆ   t ||ƒ}g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g|d�}tj||ddd�}t||ƒ d S )Nr¡   rÐ   rë   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   rï   rð   rý   rþ   rÿ   rô   r   r   ©rÕ   rÕ   rÖ   rõ   rù   r>   r>   r?   Útest_binary_erosion26ö  s>   
þ
ù

ùù
ÿz+TestNdimageMorphology.test_binary_erosion26c              	   C   óÌ   t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}tjg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}tj||d	d
d�}t||ƒ d S ©Nú5CuPy: NotImplementedError: only brute_force iterationr¡   rž   ©r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   r   r   ©r¸   Ú
iterations©	r   ri   rj   r5   rX   rª   r
   r³   r   ©r8   r9   rœ   r=   r:   r;   r>   r>   r?   Útest_binary_erosion27  s>   
þ
ú

úú

ÿz+TestNdimageMorphology.test_binary_erosion27z)inplace out= arguments are numpy-specificc              	   C   sä   g d¢g d¢g d¢g}|  |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tj |td�}|  |¡}tj g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}tj|jtd�}|  |¡}tj||dd	|d
� t||ƒ d S )Nr¡   rž   r
  r  r   r  r  r   r   ©r¸   r  Úoutput©r5   rX   rª   rT   rU   r
   r³   r   r  r>   r>   r?   Útest_binary_erosion28.  s@   þ
ú

úú


ÿz+TestNdimageMorphology.test_binary_erosion28c              	   C   sÌ   t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}tjg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd	�}| |¡}tj||d
dd�}t||ƒ d S )Nr	  r¡   rž   r
  r  r  r  ©r   r   r   r   r   r   r   r   r   r&   r  r  r  r>   r>   r?   Útest_binary_erosion29M  ó>   
þ
ú

úú
ÿz+TestNdimageMorphology.test_binary_erosion29c              	   C   s  t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tj|td�}| |¡}tjg d¢g d¢g d¢g d	¢g d¢g d¢g d¢gtd�}| |¡}tj|jtd�}| |¡}tj	||d
d|d� t
||ƒ tj	||d
d|d� t
||ƒ d S )Nr	  r¡   rž   r
  r  r   r  r  r  r   r&   r  )r   ri   rj   r5   rX   rª   rT   rU   r
   r³   r   r  r>   r>   r?   Útest_binary_erosion30i  sL   
þ
ú

úú


ÿ

ÿz+TestNdimageMorphology.test_binary_erosion30c              	   C   sæ   g d¢g d¢g d¢g}|  |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tj |td�}|  |¡}tj g d	¢g d
¢g d¢g d¢g d¢g d
¢g d	¢gtd�}|  |¡}tj|jtd�}|  |¡}tj||dd|dd� t||ƒ d S )Nr¡   rž   ©r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r
  ©r   r   r   r   r   r   r   r   r  r  r  r  r   r  )r¸   r  r  r×   r  r  r>   r>   r?   Útest_binary_erosion31�  s@   þ
ú

úú


ÿz+TestNdimageMorphology.test_binary_erosion31c              	   C   r  r  r  r  r>   r>   r?   Útest_binary_erosion32¯  r  z+TestNdimageMorphology.test_binary_erosion32c              	   C   s  t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}g d¢g d¢g d	¢g d	¢g d	¢g d	¢g d	¢g}| |¡}tjg d¢g d
¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}tj||d|dd�}t||ƒ d S )Nr	  r¡   rž   )r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r
  )r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r  )r   r   r   r   r   r   r   r  r  r   r   rÕ   )r¸   Úmaskr  r  ©r8   r9   rœ   r=   r#  r:   r;   r>   r>   r?   Útest_binary_erosion33Ë  sP   
þ
ú
ú

úú
ÿz+TestNdimageMorphology.test_binary_erosion33c              	   C   sò   g d¢g d¢g d¢g}|  |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}|  |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}|  |¡}tj g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}tj||d	|d
�}t||ƒ d S )Nr¡   rž   r
  r  r  r  ©r   r   r   r   r   r   r   r   r   )r¸   r#  )r5   rX   rª   r
   r³   r   r$  r>   r>   r?   Útest_binary_erosion34ï  sL   þ
ú
ú

úú
ÿz+TestNdimageMorphology.test_binary_erosion34c              	   C   sX  g d¢g d¢g d¢g}|  |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tj |td�}|  |¡}tj g d¢g d¢g d¢g d	¢g d¢g d¢g d¢gtd�}|  |¡}g d
¢g d¢g d¢g d¢g d
¢g d¢g d¢g}tj |td�}|  |¡}| ||¡}| || |¡¡}| ||¡}tj|jtd�}|  |¡}tj	||dd|d|d� t
||ƒ d S )Nr¡   rž   r
  r  r&  r   r  r  r  r  r  r  r  r   r  )r¸   r  r  r×   r#  )r5   rX   rª   Úlogical_andÚlogical_notÚ
logical_orrT   rU   r
   r³   r   )r8   r9   rœ   r#  r:   Útmpr=   r;   r>   r>   r?   Útest_binary_erosion35  s\   þ
ú

úú
ú


þz+TestNdimageMorphology.test_binary_erosion35c              
   C   s^  t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tj|td�}| |¡}g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g}tj|td�}| |¡}tjg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}| ||¡}| || |¡¡}| ||¡}t	j
|||ddd�}t||ƒ d S )Nr	  r¡   rÐ   rë   ©r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r  r  r  r  rï   rð   rý   rþ   rÿ   rô   r   r  )r#  r¸   r×   )r   ri   rj   r5   rX   rª   r(  r)  r*  r
   r³   r   )r8   r9   rœ   r#  r+  r:   r=   r;   r>   r>   r?   Útest_binary_erosion36<  s`   
þ
ù
ù

ùù

ÿz+TestNdimageMorphology.test_binary_erosion36c                 C   sr   t jg d¢g d¢g d¢gtd�}| |¡}| |¡}tj|||dddd�}||u s+J ‚ttj||ddd�|ƒ d S )NrÐ   r¡   r   r   T)Ú	structurer  r  r¸   Úbrute_force)r/  r  r¸   )rX   r5   rª   Ú
zeros_liker
   r³   r   )r8   r9   ÚaÚbr;   r>   r>   r?   Útest_binary_erosion37h  s$   
þþ

ÿ
ÿýz+TestNdimageMorphology.test_binary_erosion37c                 C   sj   t jg d¢g d¢g d¢gtd�}| |¡}d}ttƒ� tj||d�}W d   ƒ d S 1 s.w   Y  d S )NrÐ   r¡   r   g       @©r  )rX   r5   rª   rk   Ú	TypeErrorr
   r³   )r8   r9   r:   r  Ú_r>   r>   r?   Útest_binary_erosion38y  s   
þþ

"ÿz+TestNdimageMorphology.test_binary_erosion38c              	   C   sî   t  d¡}g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}|j|td�}| |¡}t jg d¢g d¢g d¢g d	¢g d¢g d¢g d¢gtd�}| |¡}t j|jtd�}| |¡}tj||d
||d� t||ƒ d S ©Nr&   r¡   rž   r
  r  r   r  r  r  r   r  )	rX   rY   r5   rª   rT   rU   r
   r³   r   ©r8   r9   r  rœ   r=   r:   r;   r>   r>   r?   Útest_binary_erosion39‚  óB   
þ
ú

úú


ÿz+TestNdimageMorphology.test_binary_erosion39c              	   C   sî   t  d¡}g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}t j|td�}| |¡}t jg d¢g d¢g d¢g d	¢g d¢g d¢g d¢gtd�}| |¡}t j|jtd�}| |¡}tj||d
||d� t||ƒ d S r9  )	rX   Úint64r5   rª   rT   rU   r
   r³   r   r:  r>   r>   r?   Útest_binary_erosion40¢  r<  z+TestNdimageMorphology.test_binary_erosion40c                 C   r°   r±   )r4   r~   r
   Úbinary_dilationr5   r   r´   r>   r>   r?   Útest_binary_dilation01Â  r¶   z,TestNdimageMorphology.test_binary_dilation01c                 C   s8   t ||ƒ}|jg |d�}t |¡}|| d¡ksJ ‚d S )Nr   F)r4   rT   r
   r?  r5   r´   r>   r>   r?   Útest_binary_dilation02É  s   

z,TestNdimageMorphology.test_binary_dilation02c                 C   s@   t ||ƒ}|jdg|d�}t |¡}t||jdg|jd�ƒ d S ©Nr   r   )r4   r~   r
   r?  r   r5   r   r´   r>   r>   r?   Útest_binary_dilation03Ð  s   

z,TestNdimageMorphology.test_binary_dilation03c                 C   rº   r»   ©r4   rT   r
   r?  r   r5   r´   r>   r>   r?   Útest_binary_dilation04×  r¾   z,TestNdimageMorphology.test_binary_dilation04c                 C   rÁ   ©Nr&   r   rž   ©r4   r~   r
   r?  r   r5   r´   r>   r>   r?   Útest_binary_dilation05Þ  rÃ   z,TestNdimageMorphology.test_binary_dilation05c                 C   rÁ   )Nr&   r   rä   rD  r´   r>   r>   r?   Útest_binary_dilation06å  rÃ   z,TestNdimageMorphology.test_binary_dilation06c                 C   óD   t jdg|d�}d|d< | |¡}t |¡}t|| g d¢¡ƒ d S )Nr&   r   r   rž   ©rX   rT   r5   r
   r?  r   r´   r>   r>   r?   Útest_binary_dilation07ì  rÍ   z,TestNdimageMorphology.test_binary_dilation07c                 C   sL   t jdg|d�}d|d< d|d< | |¡}t |¡}t|| g d¢¡ƒ d S )Nr*   r   r   r&   r§   rK  r´   r>   r>   r?   Útest_binary_dilation08ô  s   

z,TestNdimageMorphology.test_binary_dilation08c                 C   rJ  )Nr*   r   r   ©r   r   r   r   r   rK  r´   r>   r>   r?   Útest_binary_dilation09ý  rÍ   z,TestNdimageMorphology.test_binary_dilation09c                 C   sH   t jdg|d�}d|d< | |¡}tj|dd�}t|| g d¢¡ƒ d S )Nr*   r   r   rÕ   ©r×   r¦   rK  r´   r>   r>   r?   Útest_binary_dilation10  rÏ   z,TestNdimageMorphology.test_binary_dilation10c                 C   sH   t jdg|d�}d|d< | |¡}tj|dd�}t|| g d¢¡ƒ d S )Nr*   r   r   rP  ©r   r   r   r   r   rK  r´   r>   r>   r?   Útest_binary_dilation11  rÏ   z,TestNdimageMorphology.test_binary_dilation11c                 C   sT   t jdg|d�}d|d< | |¡}| g d¢¡}t ||¡}t|| g d¢¡ƒ d S )Nr*   r   r   rÐ   )r   r   r   r   r   rK  rÒ   r>   r>   r?   Útest_binary_dilation12  s   
z,TestNdimageMorphology.test_binary_dilation12c                 C   sX   t jdg|d�}d|d< | |¡}| g d¢¡}tj||dd�}t|| g d¢¡ƒ d S )Nr*   r   r   rÐ   r·   rÑ   rK  rÒ   r>   r>   r?   Útest_binary_dilation13  rÔ   z,TestNdimageMorphology.test_binary_dilation13c                 C   sX   t jdg|d�}d|d< | |¡}| g d¢¡}tj||dd�}t|| g d¢¡ƒ d S )Nr*   r   r   rÐ   rÕ   rP  )r   r   r   r   r   rK  rÒ   r>   r>   r?   Útest_binary_dilation14'  rÔ   z,TestNdimageMorphology.test_binary_dilation14c                 C   sZ   t jdg|d�}d|d< | |¡}| g d¢¡}tj||ddd�}t|| g d¢¡ƒ d S )Nr*   r   r   rÐ   rÕ   ©r×   r¸   rÛ   rK  rÒ   r>   r>   r?   Útest_binary_dilation150  s   
ÿz,TestNdimageMorphology.test_binary_dilation15c                 C   s>   t ||ƒ}|jddg|d�}t |¡}t|| dgg¡ƒ d S rB  rG  r´   r>   r>   r?   Útest_binary_dilation16:  râ   z,TestNdimageMorphology.test_binary_dilation16c                 C   rà   r»   rD  r´   r>   r>   r?   Útest_binary_dilation17A  râ   z,TestNdimageMorphology.test_binary_dilation17c                 C   rã   )Nr   r&   r   rž   rG  r´   r>   r>   r?   Útest_binary_dilation18H  ræ   z,TestNdimageMorphology.test_binary_dilation18c                 C   sL   t ||ƒ}|jddg|d�}t |¡}t|| g d¢g d¢g d¢g¡ƒ d S rF  rG  r´   r>   r>   r?   Útest_binary_dilation19O  ré   z,TestNdimageMorphology.test_binary_dilation19c                 C   sT   t jddg|d�}d|d< | |¡}t |¡}t|| g d¢g d¢g d¢g¡ƒ d S )Nr&   r   r   ©r   r   r¡   rž   rK  r´   r>   r>   r?   Útest_binary_dilation20X  s   

þz,TestNdimageMorphology.test_binary_dilation20c                 C   sl   t  dd¡}| |¡}tjddg|d�}d|d< | |¡}t  ||¡}t|| g d¢g d¢g d¢g¡ƒ d S )Nr   r&   r   r   r]  rž   )r
   rš   r5   rX   rT   r?  r   )r8   r   r9   rœ   r:   r;   r>   r>   r?   Útest_binary_dilation21b  s   

þz,TestNdimageMorphology.test_binary_dilation21c              
   C   sž   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}t |¡}t||ƒ d S )Nrï   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   rò   ró   rî   rë   rì   rí   r   ©r4   r5   r
   r?  r   rö   r>   r>   r?   Útest_binary_dilation22n  ó0   
ù

ùù
z,TestNdimageMorphology.test_binary_dilation22c              
   C   s¢   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}tj|dd�}t||ƒ d S )N©r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   rë   rï   rì   rí   rî   r   r   r·   rc  rö   r>   r>   r?   Útest_binary_dilation23…  rø   z,TestNdimageMorphology.test_binary_dilation23c              
   C   s¢   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}tj|dd�}t||ƒ d S )N©r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   rò   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r  rë   rï   rì   rí   rî   r   r]  rP  rc  rö   r>   r>   r?   Útest_binary_dilation24œ  rø   z,TestNdimageMorphology.test_binary_dilation24c              
   C   s¤   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}tj|ddd�}t||ƒ d S )N©r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   rñ   ©r   r   r   r   r   r   r   r   rf  ©r   r   r   r   r   r   r   r   rë   rï   rì   rí   rî   r   r]  r   rW  rc  rö   r>   r>   r?   Útest_binary_dilation25³  s0   
ù

ùùz,TestNdimageMorphology.test_binary_dilation25c              
   C   s¶   t ||ƒ}t dd¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}|jg d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g|d�}t ||¡}t||ƒ d S )Nr   r`  )r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ró   rë   rï   rì   rí   rî   r   )r4   r
   rš   r5   r?  r   rù   r>   r>   r?   Útest_binary_dilation26Ê  ó4   
ù


ùùz,TestNdimageMorphology.test_binary_dilation26c              
   C   sº   t ||ƒ}ddgddgg}g d¢g d¢g d¢g d¢g d¢g d¢g d	¢g d	¢g}| |¡}| |¡}|jg d	¢g d¢g d	¢g d¢g d
¢g d¢g d	¢g d	¢g|d�}t ||¡}t||ƒ d S )Nr   r   rï   rh  rì   rû   rò   ©r   r   r   r   r   r   r   r   rë   rí   rî   r   rc  rù   r>   r>   r?   Útest_binary_dilation27ã  s8   
ÿù


ùùz,TestNdimageMorphology.test_binary_dilation27c                 C   sr   t ||ƒ}g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d¢g|d�}tj|dd�}t||ƒ d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r·   rc  rö   r>   r>   r?   Útest_binary_dilation28ý  s    
ý

ýýz,TestNdimageMorphology.test_binary_dilation28c                 C   s¬   t |ƒr	t d¡ ddgddgg}g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}tjg d¢g d¢g d¢g d¢g d¢gtd�}| |¡}tj||d	d
�}t||ƒ d S )Nr	  r   r   rÊ   ©r   r   r   r   r   ©r   r   r   r   r   r¦   r   r   r5  ©	r   ri   rj   r5   rX   rª   r
   r?  r   r  r>   r>   r?   Útest_binary_dilation29  ó0   
ÿü


üü
z,TestNdimageMorphology.test_binary_dilation29z!output= arrays are numpy-specificc                 C   sÈ   t |ƒr	t d¡ ddgddgg}g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}|jg d¢g d¢g d¢g d¢g d¢gtd�}| |¡}tj|jtd�}| |¡}tj	||d	|d
� t
||ƒ d S )Nr	  r   r   rÊ   ru  rv  r¦   r   r   ©r  r  )r   ri   rj   r5   rª   rX   rT   rU   r
   r?  r   r  r>   r>   r?   Útest_binary_dilation30"  s4   
ÿü


üü

z,TestNdimageMorphology.test_binary_dilation30c                 C   s¬   t |ƒr	t d¡ ddgddgg}g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}tjg d¢g d¢g d¢g d¢g d¢gtd	�}| |¡}tj||d
d�}t||ƒ d S )Nr	  r   r   ru  rv  r¦   ©r   r   r   r   r   rÊ   r   r&   r5  rw  r  r>   r>   r?   Útest_binary_dilation31:  ry  z,TestNdimageMorphology.test_binary_dilation31c                 C   sÈ   t |ƒr	t d¡ ddgddgg}g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}tjg d¢g d¢g d¢g d¢g d¢gtd	�}| |¡}tj|jtd	�}| |¡}tj	||d
|d� t
||ƒ d S )Nr	  r   r   ru  rv  r¦   r|  rÊ   r   r&   rz  ©r   ri   rj   r5   rX   rª   rT   rU   r
   r?  r   r  r>   r>   r?   Útest_binary_dilation32P  s4   
ÿü


üü

z,TestNdimageMorphology.test_binary_dilation32c              
   C   s,  t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}tjg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd	�}| |¡}tjg d¢g d¢g d
¢g d¢g d¢g d¢g d¢g d¢gtd	�}| |¡}tjg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd	�}| |¡}tj||d|dd�}t||ƒ d S )Nr	  r¡   rž   rï   rë   ©r   r   r   r   r   r   r   r   r-  rr  r   ©r   r   r   r   r   r   r   r   rÕ   r   ©r  r#  r¸   rw  r$  r>   r>   r?   Útest_binary_dilation33i  s^   
þ

ùù

ùù

ùù

ÿz,TestNdimageMorphology.test_binary_dilation33z)inplace output= arrays are numpy-specificc              
   C   sê   t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tjg d¢g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢gtd�}| |¡}tj|jtd�}| |¡}tj	||d|dd�}t
||ƒ d S )Nr	  r¡   rž   rï   ©r   r   r   r   r   r   r   r   r  rë   rì   rí   rî   r   rÕ   r   r‚  r~  r$  r>   r>   r?   Útest_binary_dilation34�  sD   
þ
ù
ùù


ÿz,TestNdimageMorphology.test_binary_dilation34c                 C   sV  t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}t g d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}tj|td�}t ||¡}t |t |¡¡}t ||¡}| |¡}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}tj||ddd�}t	||ƒ d S )Nrj  rk  rñ   rl  rf  rm  rë   rï   rì   rí   rî   rò   r   r]  r   )r#  r×   r¸   )
r4   rX   r5   rª   r(  r)  r*  r
   r?  r   )r8   r   r9   r+  r:   r#  r=   r;   r>   r>   r?   Útest_binary_dilation35²  sb   
ù
	ùù


ùùÿz,TestNdimageMorphology.test_binary_dilation35c                 C   s<   t jg td�}| |¡}tj|dd�}|| d¡ksJ ‚d S )Nr   rÕ   r5  F)rX   rT   rª   r5   r
   r?  )r8   r9   r:   r;   r>   r>   r?   Útest_binary_dilation36ã  s   
z,TestNdimageMorphology.test_binary_dilation36c              
   C   s  g d¢g d¢g d¢g}|  |¡}tj g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}tj g d¢g d¢g d	¢g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}tj g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}|  |¡}tj|||d
d�}t||ƒ d S )Nr¡   rž   rï   rë   r€  r-  rr  r   r�  r   ©r#  r¸   )r5   rX   rª   r
   Úbinary_propagationr   r$  r>   r>   r?   Útest_binary_propagation01ê  sZ   þ

ùù

ùù

ùù
ÿz/TestNdimageMorphology.test_binary_propagation01c              
   C   sà   g d¢g d¢g d¢g}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}|  |¡}|  |¡}tj g d¢g d¢g d¢g d¢g d¢g d	¢g d¢g d¢gtd
�}|  |¡}tj|jtd
�}|  |¡}tj|||dd�}t||ƒ d S )Nr¡   rž   rï   r„  r  rë   rì   rí   rî   r   r   rˆ  )r5   rX   rª   rT   rU   r
   r‰  r   r$  r>   r>   r?   Útest_binary_propagation02  sB   þù


ùù

ÿz/TestNdimageMorphology.test_binary_propagation02c                 C   sB   |  tjg td�¡}|  tjg td�¡}t |¡}||ksJ ‚d S )Nr   )r5   rX   rT   rª   r
   r‰  )r8   r9   r:   r=   r;   r>   r>   r?   Útest_binary_propagation03+  s   
z/TestNdimageMorphology.test_binary_propagation03c              
   C   sž   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d¢g d	¢g d¢g d¢g d¢g|d
�}t |¡}t||ƒ d S )Nrï   r`  ra  ©r   r   r   r   r   r   r   r   rî   ró   rë   rb  ©r   r   r   r   r   r   r   r   r   )r4   r5   r
   Úbinary_openingr   rö   r>   r>   r?   Útest_binary_opening012  re  z+TestNdimageMorphology.test_binary_opening01c              
   C   s¶   t ||ƒ}t dd¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g|d	�}t ||¡}t||ƒ d S )
Nr   r`  rë   )r   r   r   r   r   r   r   r   ©r   r   r   r   r   r   r   r   ro  ©r   r   r   r   r   r   r   r   ró   r   )r4   r
   rš   r5   r�  r   rù   r>   r>   r?   Útest_binary_opening02I  rq  z+TestNdimageMorphology.test_binary_opening02c              
   C   sž   t ||ƒ}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d	¢g d
¢g d¢g d¢g d¢g d¢g d¢g|d�}t |¡}t||ƒ d S )Nrë   r„  )r   r   r   r   r   r   r   r   ro  rò   ró   rî   rï   r`  ra  rb  rŽ  r   )r4   r5   r
   Úbinary_closingr   rö   r>   r>   r?   Útest_binary_closing01b  re  z+TestNdimageMorphology.test_binary_closing01c              
   C   s¶   t ||ƒ}t dd¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}|jg d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g|d	�}t ||¡}t||ƒ d S )
Nr   rë   r„  ró   r`  r‘  ro  r’  r   )r4   r
   rš   r5   r”  r   rù   r>   r>   r?   Útest_binary_closing02y  rq  z+TestNdimageMorphology.test_binary_closing02c              	   C   sœ   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t |¡}t||ƒ d S )Nrë   rò   r   rî   ©rX   r5   rª   r
   Úbinary_fill_holesr   ©r8   r9   r=   r:   r;   r>   r>   r?   Útest_binary_fill_holes01’  s0   
úú

úú

z.TestNdimageMorphology.test_binary_fill_holes01c              	   C   sœ   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t |¡}t||ƒ d S )Nrë   rí   rò   r   rî   r—  r™  r>   r>   r?   Útest_binary_fill_holes02¨  ó0   
úú

úú

z.TestNdimageMorphology.test_binary_fill_holes02c              	   C   sœ   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t |¡}t||ƒ d S )Nrë   r  )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r—  r™  r>   r>   r?   Útest_binary_fill_holes03¼  rœ  z.TestNdimageMorphology.test_binary_fill_holes03)r   z2these filters do not yet have axes support in CuPyr   z.these filters are not implemented in JAX.numpyr¸   r   r   r×   )r   r   )rÕ   r   Úexpand_axis©r   r   r   Ú	func_name)r³   r?  r�  r”  Úbinary_hit_or_missr‰  r˜  c              
   C   sl  t  g d¢g d¢g d¢gt¡}| |¡}t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢gt¡}| |¡}|dkr?t||d	�}nt|d
�}|dv}	|	rO||d< n	|dkrXt d¡ tt|ƒ}
|
||fi |¤Ž}d}|j|g| |d�}|j|g| |d�}g d¢}| 	|¡ t
|ƒs�t|ƒr¤| t  |jt¡¡}|
||f||dœ|¤Ž n|
||fd|i|¤Ž}t||ƒ d S )Nr¡   rž   r  )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r  )r   r   r   r   r   r   r   r¡  )Úorigin1Úorigin2rP  )r¡  r˜  r¸   r   z-border_value !=0 unsupported by this functionr*   r„   rŸ  ©r  Úaxesr¥  )rX   r5   rª   Údictri   Úskipr4   r
   ÚstackÚremover   r   rT   rU   r   )r8   r9   r   rž  r×   r¸   rœ   r:   ÚkwargsÚborder_supportedÚfuncr=   Ún_repsr¥  r;   r>   r>   r?   Útest_binary_axesÐ  sL   
þþ

úú





z&TestNdimageMorphology.test_binary_axesc                 C   óf   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}tj||d�}t||  g d¢g d¢g d	¢g¡ƒ d S )
N©r&   r   r*   r   r    ©r+   r(   rg   r&   r*   ©r*   r"   r&   r+   r   rÐ   ©r   r   r   ©Ú	footprint©r   r   r   r   r   ©r   r&   r   r&   r   ©r*   r*   r&   r&   r   ©r5   r
   Úgrey_erosionr   ©r8   r9   Úarrayrµ  r  r>   r>   r?   Útest_grey_erosion01
	  ó   
þ
þÿz)TestNdimageMorphology.test_grey_erosion01zoutput array is read-only.z(https://github.com/cupy/cupy/issues/8398c                 C   sh   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d� t||  g d¢g d¢g d	¢g¡ƒ d S )
Nr°  r±  r²  rÐ   r³  )rµ  r  r¶  r·  r¸  r¹  )r8   r9   r¼  rµ  r>   r>   r?   Útest_grey_erosion01_overlap	  s   
þ
þÿz1TestNdimageMorphology.test_grey_erosion01_overlapc                 C   ó~   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}t||  g d¢g d	¢g d
¢g¡ƒ d S )Nr°  r±  r²  rÐ   r³  rä   ©rµ  r/  r¶  r·  r¸  r¹  ©r8   r9   r¼  rµ  r/  r  r>   r>   r?   Útest_grey_erosion02$	  ó   
þÿ
þÿz)TestNdimageMorphology.test_grey_erosion02c                 C   rÀ  )Nr°  r±  r²  rÐ   r³  rž   rÁ  rR  )r   r   r   r   r   )r    r    r   r   r   r¹  rÂ  r>   r>   r?   Útest_grey_erosion032	  rÄ  z)TestNdimageMorphology.test_grey_erosion03c                 C   r¯  )
Nr°  r±  r²  r­   rÐ   r´  ©r+   r+   rg   rg   r*   ©r+   rg   r"   rg   r+   ©r"   r"   r"   r+   r+   ©r5   r
   Úgrey_dilationr   r»  r>   r>   r?   Útest_grey_dilation01@	  r¾  z*TestNdimageMorphology.test_grey_dilation01c                 C   rÀ  )Nr°  r±  r²  r­   rÐ   rä   rÁ  rÆ  rÇ  rÈ  rÉ  rÂ  r>   r>   r?   Útest_grey_dilation02L	  rÄ  z*TestNdimageMorphology.test_grey_dilation02c                 C   rÀ  )Nr°  r±  r²  r­   rÐ   rž   rÁ  )r"   r"   é
   rÍ  r(   )r"   rÍ  rg   rÍ  r"   )rg   rg   rg   r"   r"   rÉ  rÂ  r>   r>   r?   Útest_grey_dilation03Z	  rÄ  z*TestNdimageMorphology.test_grey_dilation03c                 C   sj   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}tj||d�}tj||d�}tj||d�}t||ƒ d S ©Nr°  r±  r²  rÐ   r³  r´  ©r5   r
   rº  rÊ  Úgrey_openingr   ©r8   r9   r¼  rµ  r+  r=   r  r>   r>   r?   Útest_grey_opening01h	  ó   
þz)TestNdimageMorphology.test_grey_opening01c                 C   s†   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}tj|||d�}tj|||d�}t||ƒ d S ©Nr°  r±  r²  rÐ   r³  rä   rÁ  rÐ  ©r8   r9   r¼  rµ  r/  r+  r=   r  r>   r>   r?   Útest_grey_opening02r	  ó    
þÿÿÿz)TestNdimageMorphology.test_grey_opening02c                 C   sj   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}tj||d�}tj||d�}tj||d�}t||ƒ d S rÏ  ©r5   r
   rÊ  rº  Úgrey_closingr   rÒ  r>   r>   r?   Útest_grey_closing01€	  rÔ  z)TestNdimageMorphology.test_grey_closing01c                 C   s†   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}tj|||d�}tj|||d�}t||ƒ d S rÕ  rÙ  rÖ  r>   r>   r?   Útest_grey_closing02Š	  rØ  z)TestNdimageMorphology.test_grey_closing02c           	      C   s¢   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}tj|||d�}|| }|j|j|jd�}tj||||d	� t||ƒ d S ©
Nr°  r±  r²  rÐ   r³  rä   rÁ  r   ©rµ  r/  r  )	r5   r
   rÊ  rº  rT   rU   r   Úmorphological_gradientr   ©	r8   r9   r¼  rµ  r/  Útmp1Útmp2r=   r  r>   r>   r?   Útest_morphological_gradient01˜	  s$   
þÿÿÿz3TestNdimageMorphology.test_morphological_gradient01c           	      C   sŽ   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}tj|||d�}|| }tj|||d�}t||ƒ d S rÕ  )r5   r
   rÊ  rº  rß  r   rà  r>   r>   r?   Útest_morphological_gradient02©	  s"   
þÿÿÿz3TestNdimageMorphology.test_morphological_gradient02c           	      C   sª   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}tj|||d�}|| d|  }|j|j|jd	�}tj||||d
� t||ƒ d S )Nr°  r±  r²  rÐ   r³  rä   rÁ  r   r   rÞ  )	r5   r
   rÊ  rº  rT   rU   r   Úmorphological_laplacer   rà  r>   r>   r?   Útest_morphological_laplace01¸	  s$   
þÿÿÿz2TestNdimageMorphology.test_morphological_laplace01c           	      C   s–   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}tj|||d�}|| d|  }tj|||d�}t||ƒ d S )	Nr°  r±  r²  rÐ   r³  rä   rÁ  r   )r5   r
   rÊ  rº  rå  r   rà  r>   r>   r?   Útest_morphological_laplace02É	  s"   
þÿÿÿz2TestNdimageMorphology.test_morphological_laplace02c                 C   s’   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}|| }|j|j|jd�}tj||||d	� t||ƒ d S rÝ  )r5   r
   rÑ  rT   rU   r   Úwhite_tophatr   rÖ  r>   r>   r?   Útest_white_tophat01Ø	  ó   
þÿÿz)TestNdimageMorphology.test_white_tophat01c                 C   s~   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}|| }tj|||d�}t||ƒ d S rÕ  )r5   r
   rÑ  rè  r   rÖ  r>   r>   r?   Útest_white_tophat02ç	  ó   
þÿÿz)TestNdimageMorphology.test_white_tophat02z	cupy#8399c              	   C   s¸   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t jdtd�}| |¡}t jg d¢g d¢g d¢g d	¢g d
¢g d	¢g d¢gtd�}| |¡}tj||d�}t||ƒ d S )N©r   r   r   r   r   r   r   r  ©r   r   r   r   r   r   r   r!  r   r{   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   ©r/  )rX   r5   rª   r~   r
   rè  r   ©r8   r9   r¼  r/  r=   r  r>   r>   r?   Útest_white_tophat03ô	  ó4   
úú


úú
z)TestNdimageMorphology.test_white_tophat03c                 C   sT   t jdtd�}t jdtd�}| |¡}| |¡}|j||jd�}tj|||d� d S ©Nr*   r   r{   )r/  r  )	rX   Úeyerª   r~   r5   Ú
empty_likerV   r
   rè  ©r8   r9   r¼  r/  r  r>   r>   r?   Útest_white_tophat04
  s   

z)TestNdimageMorphology.test_white_tophat04c                 C   s’   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}|| }|j|j|jd�}tj||||d	� t||ƒ d S rÝ  )r5   r
   rÚ  rT   rU   r   Úblack_tophatr   rÖ  r>   r>   r?   Útest_black_tophat01
  rê  z)TestNdimageMorphology.test_black_tophat01c                 C   s~   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g¡}|  g d¢g d¢g¡}tj|||d�}|| }tj|||d�}t||ƒ d S rÕ  )r5   r
   rÚ  rø  r   rÖ  r>   r>   r?   Útest_black_tophat02(
  rì  z)TestNdimageMorphology.test_black_tophat02zcupy/cupy#8399c              	   C   s¸   t jg d¢g d¢g d¢g d¢g d¢g d¢g d¢gtd�}| |¡}t jdtd�}| |¡}t jg d¢g d¢g d¢g d¢g d	¢g d¢g d
¢gtd�}| |¡}tj||d�}t||ƒ d S )Nrí  r  rî  r!  r   r{   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r"  rï  )rX   r5   rª   r~   r
   rø  r   rð  r>   r>   r?   Útest_black_tophat035
  rò  z)TestNdimageMorphology.test_black_tophat03c                 C   sL   |  tjdtd�¡}|  tjdtd�¡}|j||jd�}tj|||d� d S ró  )	r5   rX   rô  rª   r~   rõ  rV   r
   rø  rö  r>   r>   r?   Útest_black_tophat04N
  s   z)TestNdimageMorphology.test_black_tophat04Úmode)ÚreflectÚconstantÚnearestÚmirrorÚwrapÚfootprint_mode)Úsizerµ  r/  )rº  rÊ  rÑ  rÚ  rå  rß  rè  rø  c              
   C   s:  |  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g¡}t||d�}|d	kr)d
|d	< n|  g d¢g d¢g¡|d< |dkrC| |d ¡|d< tt|ƒ}	|	|fi |¤Ž}
d}|j|
g| |d�}
|j|g| |d�}g d¢}| |¡ t|ƒswt|ƒrŒ|j	|
j
|
jd�}|	|f||dœ|¤Ž n
|	|fd|i|¤Ž}t||
ƒ d S )Nr  )r   r   r   r    r   r   r   )r   r   r   r   r   r   r   )r   r&   r   r(   r*   r   r   )r   r    r*   r&   r&   r    r   )r   r   rg   r&   r   r   r   )r   r   r   r   r   r   r   )r×   rý  r  )r   r&   rÐ   r³  rµ  r/  r*   r„   rŸ  r   r¤  r¥  )r5   r¦  Ú	ones_liker4   r
   r¨  r©  r   r   rT   rU   r   r   )r8   r9   r   rž  r×   r  rý  r:   rª  r¬  r=   r­  r¥  r;   r>   r>   r?   Útest_grey_axesW
  s4   
ú


z$TestNdimageMorphology.test_grey_axesc              
   C   sô   t |ƒst|ƒst d¡ t||ƒ}g d¢g d¢g d¢g}| |¡}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}|jg d¢g d¢g d¢g d¢g d	¢g d
¢g d
¢g d¢g|d�}| tj|jt	d�¡}t
j|||d� t||ƒ d S )Nú!inplace output= is numpy-specificr¡   rž   rÊ   )r   r   r   r   r   rN  rØ   )r   r   r   r   r   r¦   )r   r   r   r   r   r   ©r  )r   r   ri   rj   r4   r5   rX   rT   rU   rª   r
   r¡  r   rù   r>   r>   r?   Útest_hit_or_miss01�
  s@   

þ
ù

ùùz(TestNdimageMorphology.test_hit_or_miss01c                 C   s�   t ||ƒ}g d¢g d¢g d¢g}g d¢g d¢g d¢g d¢g}| |¡}| |¡}|jg d¢g d¢g d¢g d¢g|d�}t ||¡}t||ƒ d S )	Nr¡   rž   rë   rï   ©r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   rÿ   r   ©r4   r5   r
   r¡  r   rù   r>   r>   r?   Útest_hit_or_miss02®
  s*   
þý


ýýz(TestNdimageMorphology.test_hit_or_miss02c              
   C   sâ   t ||ƒ}g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g}| |¡}| |¡}| |¡}|jg d¢g d¢g d¢g d	¢g d
¢g d¢g d¢g d¢g|d�}t |||¡}t||ƒ d S )Nrä   rž   rì   rë   r  r
  r`  rÿ   ro  r’  r�  ró   r   r  )r8   r   r9   Ústruct1Ústruct2r=   r:   r;   r>   r>   r?   Útest_hit_or_miss03Á
  sD   
þþù



ùùz(TestNdimageMorphology.test_hit_or_miss03N)”Ú__name__Ú
__module__Ú__qualname__r   ri   ÚmarkÚparametrizer   r@   rD   rI   r   r`   re   rh   rm   ru   rv   rw   rz   r‚   r�   rŽ   r“   r•   r—   r™   r�   r    r¢   r¤   r¬   r®   r¯   rµ   r¹   r½   rÀ   rÂ   rÆ   rÈ   rÉ   rÌ   rÎ   rÓ   rÙ   rÜ   rÝ   rÞ   rß   rá   rå   rç   rè   rê   r÷   rú   rü   r   r  r  r  r  r  r  r   r%  r'  r,  r.  r4  r8  r;  r>  r@  rA  rC  rE  rH  rI  rL  rM  rO  rQ  rS  rT  rU  rV  rX  rY  rZ  r[  r\  r^  r_  rd  rg  ri  rn  rp  rs  rt  rx  r{  r}  r  rƒ  r…  r†  r‡  rŠ  r‹  rŒ  r�  r“  r•  r–  rš  r›  r�  r®  r½  r¿  rÃ  rÅ  rË  rÌ  rÎ  rÓ  r×  rÛ  rÜ  rã  rä  ræ  rç  ré  rë  rñ  r÷  rù  rú  rû  rü  r  r	  r  r  r>   r>   r>   r?   r      sN   

0
00ÿ
2
//
)
(ÿ1ÿ


ÿ<

ÿ


























ÿ
ÿ
$ÿ
$!ÿ
),ÿ
	ÿ
ÿ















	




	











'ÿ

0$



ÿÿ+









ÿÿ%r   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestDilateFixc                 C   s„   |j g d¢g d¢g d¢g d¢g d¢g|jd�| _| d¡| _tj| j| jd�}t|ƒr4| |j¡| _	d S t
|ƒj}|||jƒ| _	d S )NrÊ   ru  rv  r   r{   rï  )r5   Úuint8r¼  r~   Úsq3x3r
   r?  r   ÚviewÚ
dilated3x3r   r‡   )r8   r9   r  r‡   r>   r>   r?   Ú_setupå
  s   
üü
zTestDilateFix._setupc                 C   s0   |   |¡ tj| j| jd�}t|| jd ƒ d S )Nrï  r   )r  r
   rÊ  r¼  r  r   r  ©r8   r9   Úresultr>   r>   r?   Útest_dilation_square_structure÷
  s   
z,TestDilateFix.test_dilation_square_structurec                 C   s*   |   |¡ tj| jdd�}t|| jƒ d S )Nr&   )r  )r  r
   rÊ  r¼  r   r  r  r>   r>   r?   Útest_dilation_scalar_sizeý
  s   
z'TestDilateFix.test_dilation_scalar_sizeN)r  r  r  r  r  r  r>   r>   r>   r?   r  á
  s    r  c                   @   r  )ÚTestBinaryOpeningClosingc                 C   sv   t jdtd�}d|dd…dd…f< d|d< | |¡| _| d¡| _t | j| jdd d¡| _	t 
| j| jdd d¡| _d S )	N©r*   r*   r   Tr   r    )r    r    r{   r   )rX   rT   rª   r5   r¼  r~   r  r
   r�  Ú
opened_oldr”  Ú
closed_old)r8   r9   r2  r>   r>   r?   r    s   ÿ
ÿzTestBinaryOpeningClosing._setupc              
   C   ó6   |   |¡ t | j| jdd dd dd¡}t|| jƒ d S ©Nr   r   F)r  r
   r�  r¼  r  r   r"  )r8   r9   Ú
opened_newr>   r>   r?   Útest_opening_new_arguments  ó
   
ÿz3TestBinaryOpeningClosing.test_opening_new_argumentsc              
   C   r$  r%  )r  r
   r”  r¼  r  r   r#  )r8   r9   Ú
closed_newr>   r>   r?   Útest_closing_new_arguments  r(  z3TestBinaryOpeningClosing.test_closing_new_argumentsN)r  r  r  r  r'  r*  r>   r>   r>   r?   r     s    r   c                 C   ó4   |   dg¡}tttj|dd� tttj|dd� d S ©Nr   g      à?r5  ç      ø?)r~   rk   r6  r
   r³   ©r9   r:   r>   r>   r?   Ú)test_binary_erosion_noninteger_iterations  ó   r/  c                 C   r+  r,  )r~   rk   r6  r
   r?  r.  r>   r>   r?   Ú*test_binary_dilation_noninteger_iterations%  r0  r1  c                 C   r+  r,  )r~   rk   r6  r
   r�  r.  r>   r>   r?   Ú)test_binary_opening_noninteger_iterations-  r0  r2  c                 C   r+  r,  )r~   rk   r6  r
   r”  r.  r>   r>   r?   Ú)test_binary_closing_noninteger_iterations5  r0  r3  c                 C   sn   t | ƒr	t d¡ |  dg¡}ttj|ddd�tj|dtdƒd�ƒ ttj|ddd�tj|dtdƒd�ƒ d S )Nr	  r   r   r-  )r  r0  r–   )r   ri   rj   r~   r   r
   r³   rª   r.  r>   r>   r?   Ú;test_binary_closing_noninteger_brute_force_passes_when_true=  s   
ÿÿr4  Úfunction)r³   r?  r�  r”  r  r*   r0  Fc           	      C   sj   t j d¡}|jdddd� t¡}tt| ƒ}| ¡ }||||d�}t	||ƒ |||||d� t	||ƒ d S )Né{   r   r   éd   ©ÚlowÚhighr  )r0  r  )r0  r  r  )
rX   ÚrandomÚRandomStateÚrandintr‡   rª   r4   r
   Úcopyr   )	r5  r  r0  r9   Úrstater:   Úndi_funcÚ	data_origr=   r>   r>   r?   Útest_binary_input_as_outputM  s   

rB  c                 C   st   t | ƒst| ƒst d¡ tj d¡}|jdddd� t	¡}| 
¡ }t |¡}t||ƒ tj||d� t||ƒ d S )Nr  r6  r   r   r7  r8  r  )r   r   ri   rj   rX   r;  r<  r=  r‡   rª   r>  r
   r¡  r   )r9   r?  r:   rA  r=   r>   r>   r?   Ú'test_binary_hit_or_miss_input_as_outputb  s   


rC  c                 C   s^   t | ƒr	t d¡ d}tjt|d�� tj|  d¡dd� W d   ƒ d S 1 s(w   Y  d S )Nz)CuPy does not have distance_transform_cdtzinvalid metric provided)Úmatchr!  Úgarbager|   )r   ri   rj   r	   Ú
ValueErrorr
   rr   r~   )r9   Úmsgr>   r>   r?   Ú*test_distance_transform_cdt_invalid_metrics  s   
ÿ"ÿrH  )$ÚnumpyrX   Úscipy._lib._array_apir   r   r   r   r   r   r   ri   r	   rk   Úscipyr
   Ú r   Úscipy.conftestr   r  r   r   ÚusefixturesÚ
pytestmarkr   r  r   r/  r1  r2  r3  r4  r  rB  rC  rH  r>   r>   r>   r?   Ú<module>   sf    $
þ                     a"þ