o
    h                    @   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 ZBdd ZCeddsddd ZDdd ZEeddsddd ZFdd ZGeddsddd ZHeddsddd ZIejdedd ZJejdedd ZKejdedd ZLejdedd ZMejdedd ZNejdedd ZOejdedd ZPejdedd ZQejdedd ZRejdedd ZSejdedd ZTejdedd ZUejdedd ZVejdedd ZWejdedd ZXejdedd ZYejdedd ZZejdedd Z[ejdedd Z\ejdedd Z]ejdedd Z^ejdedd Z_ejdedd Z`ejdedd Zaejdedd Zbejdedd ZcejdeddÄ Zdejdeddń ZeddǄ Zfedddddʄ Zgdd̄ Zheddddd΄ ZiddЄ Zjedddddӄ ZkejdeddՄ Zlddׄ Zmddل Znddۄ Zodd݄ Zpejdedd߄ Zqejdedd Zrejdedd Zsejdedd Ztdd Zudd Zvdd Zweddedddedddejdddgejdddgejdg dejdg ddd Zxdd Zyedddeddd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 Zeddddd Zdd Zeddddd Zdd Zeddddd Zdd Zedd dd!d" Zedddd#d$ Zedddd%d& Zd'd( Zedd)dd*d+ Zedddd,d- Zeddedddedddejdddgejdg dejd.g d/ejd0g d1ejdg d2d3d4 Zejded5d6 Zejded7d8 Ze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>   W/var/www/vscode/kcb/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||	 qd 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
||	 qd 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||	 qd 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 N5CuPy: 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
|st|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"