
    ^Mh                    p   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          gZ G d d          Z G d d          Z G d d          Zd Zd Zd Zd Zd Ze
j                             dg d          e
j                             dddg          e
j                             ddd
g          d                                     Z!d  Z"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                      e Zd Z edd          ej                            de          d                         Z edd          ej                            de          d                         Z	 edd          ej                            de          d                         Z
 edd	
          ej                            de          d                         Z edd          ej                            de          d                         Z edd          ej                            de          d                         Zd Zej                            de          d             Zej                            de          d             Z edd
          ej                            de          d                         Z edd
          d             Zej                            de          d             Zej                            de          d             Z edd
          ej                            de          d                         Zej                            de          d             Zej                            de          d             Zd Z edd
          d             Zd Zd Zd Zd  Zd! Zd" Z d# Z!ej                            de          d$             Z"ej                            de          d%             Z#ej                            de          d&             Z$ej                            de          d'             Z%ej                            de          d(             Z&ej                            de          d)             Z'ej                            de          d*             Z(ej                            de          d+             Z)ej                            de          d,             Z*ej                            de          d-             Z+ej                            de          d.             Z,ej                            de          d/             Z-ej                            de          d0             Z.ej                            de          d1             Z/ej                            de          d2             Z0ej                            de          d3             Z1ej                            de          d4             Z2ej                            de          d5             Z3ej                            de          d6             Z4ej                            de          d7             Z5ej                            de          d8             Z6ej                            de          d9             Z7ej                            de          d:             Z8ej                            de          d;             Z9ej                            de          d<             Z:ej                            de          d=             Z;d> Z< edd?
          d@             Z=dA Z> edd?
          dB             Z? edd?
          dC             Z@dD ZAdE ZBdF ZC edd?
          dG             ZDdH ZE edd?
          dI             ZFdJ ZG edd?
          dK             ZH edd?
          dL             ZIej                            de          dM             ZJej                            de          dN             ZKej                            de          dO             ZLej                            de          dP             ZMej                            de          dQ             ZNej                            de          dR             ZOej                            de          dS             ZPej                            de          dT             ZQej                            de          dU             ZRej                            de          dV             ZSej                            de          dW             ZTej                            de          dX             ZUej                            de          dY             ZVej                            de          dZ             ZWej                            de          d[             ZXej                            de          d\             ZYej                            de          d]             ZZej                            de          d^             Z[ej                            de          d_             Z\ej                            de          d`             Z]ej                            de          da             Z^ej                            de          db             Z_ej                            de          dc             Z`ej                            de          dd             Zaej                            de          de             Zbej                            de          df             Zcej                            de          dg             Zdej                            de          dh             Zedi Zf eddj
          dk             Zgdl Zh eddj
          dm             Zidn Zj eddo
          dp             Zkej                            de          dq             Zldr Zmds Zndt Zodu Zpej                            de          dv             Zqej                            de          dw             Zrej                            de          dx             Zsej                            de          dy             Ztdz Zud{ Zvd| Zw ed}           edd~           edd          ej                            dddg          ej                            dddg          ej                            dg d          ej                            dg d          d                                                                                     Zxd Zy edd           edd          d                         Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Z eddj
          d             Zd Z eddj
          d             Zd Z edd          d             Zd Z edd          d             Z edd          d             Z edd          d             Zd Z edd          d             Z edd          d             Z ed}           edd~           edd          ej                            dddg          ej                            dg d          ej                            dg d          ej                            dg d          ej                            dg d          d                                                                                                 Zej                            de          d             Zej                            de          d             Zej                            de          d             ZdS )TestNdimageMorphologyr   )CuPy does not have distance_transform_bf.)reasondtypec                    t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |dd          \  }}g dg dg dg dg d	g dg dg dg dg	}|                    |          }t	          ||z  |           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expecteds          c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/ndimage/tests/test_morphology.pytest_distance_transform_bf01z2TestNdimageMorphology.test_distance_transform_bf01   s    E"" zz6666666666666666666666666668 @E  F F /k?CE E ER///////////////////////////1 ::h''!#)X6660000000000000000000000000002 10000000000000000000000000023$ ::h''!"h/////    c                     t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |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/   r0   r1   r2   r3   	r   r   r   r   r#   r.   r.   r.   r%   r6   r:   s          rA   test_distance_transform_bf02z2TestNdimageMorphology.test_distance_transform_bf02I   s    E""zz6666666666666666666666666668 @E  F F /k?CE E ER 0//////////////////////////1 ::h''!#x0000000000000000000000000000002 10000000000000000000000000023$ ::h''!(B/////rC   c                     t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |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   rF   r&   r'   )	r)   r)   r#   r"   r"   r"   r#   r)   r)   )	r#   r#   r-   r+   r+   r+   r-   r#   r#   r,   r/   r0   r1   r2   	r   r   r"   r"   r-   r+   r+   r.   r%   	r   r   r   r"   r+   r+   r.   r.   r%   )	r   r   r   r"   r+   r.   r.   r.   r%   )	r   r   r"   r"   r+   r+   r.   r.   r%   )	r   r   r"   r#   r-   r+   r+   r.   r%   r6   r:   s          rA   test_distance_transform_bf03z2TestNdimageMorphology.test_distance_transform_bf03{   s    E""zz6666666666666666666666666668 @E  F F /l?CE E ER 0//////////////////////////1 ::h''!#x0000000000000000000000000000002 10000000000000000000000000023$ ::h''!"h/////rC   Tz,inplace distances= arrays are numpy-specific)np_onlyr   c                    t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |d          \  }}g }g }|                    |j        |j                  }t          j        ||           |                    |           t          j        |dd	          }	|                    |	           t          j	        |j        |j
                  }	t          j        |dd
|	           |                    |	           t          j        |d          \  }}	|                    |           |                    |	           |                    |j        |j                  }t          j        ||d
          }	|                    |           |                    |	           t          j	        |j        |j
                  }	t          j        |d
|	          }|                    |           |                    |	           |                    |j        |j                  }t          j	        |j        |j
                  }	t          j        ||d
|	           |                    |           |                    |	           |D ]}t          ||           |D ]}	t          ||	           d S )Nr   r   r   r   r   r    	distancesFreturn_distancesr!   TrS   r!   indicesrQ   r!   r!   rU   rQ   r!   rU   )r7   r8   r   r9   zerosshapefloat64appendnprU   int32r	   
r;   r   r<   r=   tdttftdtsftsdtr?   s
             rA   test_distance_transform_bf04z2TestNdimageMorphology.test_distance_transform_bf04   s   
 E""zz6666666666666666666666666668 @E  F F 0aHHHSXXdj
X33%db9999

2*5< < <

2Z
"(333%5r	K 	K 	K 	K

2.$ $ $B

2

2XXdj
X33*Bt5 5 5

2

2Z
"(333*r3 3 3

2

2XXdj
X33Z
"(333%BtR	A 	A 	A 	A

2

2 	/ 	/B%c2.... 	/ 	/B%c2....	/ 	/rC   c                    t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |ddddg          \  }}g dg dg d	g d
g dg d
g d	g dg dg	}|                    |          }t	          ||z  |           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#   ri       ri   r#   r   r   r&   r'   r(   r*   r,   r/   r0   r1   r2   r3   r4   r5   r6   r:   s          rA   test_distance_transform_bf05z2TestNdimageMorphology.test_distance_transform_bf05   s    E""zz6666666666666666666666666668 @E  F F /+daVE E ER/////////000222000/////////1 ::h''!#)X6660000000000000000000000000002 10000000000000000000000000023$ ::h''!"h/////rC   c                    t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |ddddg	          \  }}g dg dg d
g dg dg dg d
g dg dg	}|                    |          }t	          ||z  |           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   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"   r"   r"   )	r)   r)   r)   r)   r"   r)   r)   r)   r)   )	r#   r#   r#   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   r1   r2   )	r   r   r"   r"   r+   r+   r+   r.   r%   r5   )	r   r   r   r   r.   r.   r.   r.   r%   r3   r6   r:   s          rA   test_distance_transform_bf06z2TestNdimageMorphology.test_distance_transform_bf06  s    E""zz6666666666666666666666666668 @E  F F /+daVE E ER///////////////////////////1 ::h''!#)X6660000000000000000000000000002 10000000000000000000000000023$ ::h''!"h/////rC   c                 4   t          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	          }t	          t
                    5  t          j        |dd           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   FrR   )r   pytestxfailr8   assert_raisesRuntimeErrorr   r9   )r;   r<   r=   s      rA   test_distance_transform_bf07z2TestNdimageMorphology.test_distance_transform_bf07E  s"   2;; 	FLDEEE zz6666666666666666666666666668 9 9 <(( 	 	)uU   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   (BBBc                    t          ||          }t          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |dd          \  }}t          j        |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   rE   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+   r0   r1   r2   rG   )	r   r   r   r   r#   r-   r+   r.   r%   )	r   r   r"   r"   r#   r-   r+   r.   r%   	r7   r   rp   rq   r8   r   distance_transform_cdtr9   r	   r;   r   r<   r=   r>   r?   bfr@   s           rA   test_distance_transform_cdt01z3TestNdimageMorphology.test_distance_transform_cdt01X  s   E""2;; 	GLEFFF zz6666666666666666666666666668 @E  F F 0+d4 4 4R*4==!"c***0000000000000000000000000002 10000000000000000000000000023$ ::h''!"h/////rC   c                    t          ||          }t          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |dd          \  }}t          j        |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 )Nrv   r   r   r   r   rJ   Tr    r&   rw   )	r)   r)   r"   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   r0   r1   r2   )	r   r   r"   r"   r)   r#   r+   r.   r%   )	r   r   r   r"   r"   r+   r+   r.   r%   )	r   r   r   r   r"   r+   r.   r.   r%   rL   rK   ry   r{   s           rA   test_distance_transform_cdt02z3TestNdimageMorphology.test_distance_transform_cdt02  s   E""2;; 	GLEFFFzz6666666666666666666666666668 @E  F F 0|@DF F FR*4>>!"c***0000000000000000000000000002 10000000000000000000000000023$ ::h''!"h/////rC   z*inplace indices= arrays are numpy-specificc                 D   t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |d          \  }}g }g }|                    |j        |j                  }t          j        ||           |                    |           t          j        |dd	          }	|                    |	           |                    t          j	        |j        t          j                            }	t          j        |dd|	
           |                    |	           t          j        |d          \  }}	|                    |           |                    |	           |                    |j        |j                  }t          j        ||d          }	|                    |           |                    |	           |                    t          j	        |j        t          j                            }	t          j        |d|	          }|                    |           |                    |	           |                    |j        |j                  }|                    t          j	        |j        t          j                            }	t          j        ||d|	           |                    |           |                    |	           |D ]}t          ||           |D ]}	t          ||	           d S )Nr   r   r   r   Tr    rP   FrR   rT   rV   rW   rX   )r7   r8   r   rz   rY   rZ   r^   r\   r]   rU   r	   r_   s
             rA   test_distance_transform_cdt03z3TestNdimageMorphology.test_distance_transform_cdt03  s7   
 E""zz6666666666666666666666666668 @E  F F 1$tLLLSXXdjX11&tr::::

2+5? ? ?

2ZZ
4:RX>>>??&5r	K 	K 	K 	K

2/' ' 'B

2

2XXdjX11+Bt5 5 5

2

2ZZ
4:RX>>>??+r3 3 3

2

2XXdjX11ZZ
4:RX>>>??&tr6:B	H 	H 	H 	H

2

2 	/ 	/B%c2.... 	/ 	/B%c2....	/ 	/rC   z3XXX: does not raise unless indices is a numpy arrayc                 D   |                     g dg dg dg dg dg dg dg dg dg	          }|                    |j        f|j        z   |j                  }t          t                    5  t          j        |dd|           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   TFrT   )	r8   rY   ndimrZ   r^   rr   rs   r   r9   )r;   r<   r=   indices_outs       rA   test_distance_transform_cdt04z3TestNdimageMorphology.test_distance_transform_cdt04  s)   
 zz6666666666666666666666666668 9 9 hh	|dj8hII<(( 	 	)!%$#	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /BBBc                    t          ||          }t          |          rt          j        d           n#t	          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	|          }|                    d          }t          j        ||          }|	                    |          d	k    sJ d S )
Nrv   zint overflowr   r   r   r   r)   r)   metrici)
r7   r   rp   rq   r   r8   onesr   rz   sum)r;   r   r<   r=   
metric_argactuals         rA   test_distance_transform_cdt05z3TestNdimageMorphology.test_distance_transform_cdt05  s   E""2;; 	)LEFFFFb\\ 	)L((( zz6666666666666666666666666668 @E  F F WWV__
/ZHHHvvf~~$$$$$$rC   c                    t          ||          }t          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |d          \  }}t          j        |d          }t          ||           t          j        |          }|t          j
        |j        d	d          |j                  z
  }|                    t          j                  }t          j        |||           t          j                            |d
          }t          j        ||           |                    |          }t          ||           d S )N(CuPy does not have distance_transform_bfr   r   r   r   Tr    r   r   r   axis)r7   r   rp   rq   r8   r   distance_transform_edtr9   r	   r]   rU   rZ   r   astyper[   multiplyaddreducesqrt)	r;   r   r<   r=   r>   r?   r|   np_ftrd   s	            rA   test_distance_transform_edt01z3TestNdimageMorphology.test_distance_transform_edt01  s   E""2;; 	ELCDDD zz6666666666666666666666666668 @E  F F 0dKKKR*4==!"c*** 
2RZABBu{CCCCYYrz""
BBV]]2A]&&
BZZ^^!"b)))))rC   z%inplace distances= are numpy-specificc                 2   t          ||          }|                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |d          \  }}g }g }|                    |j        |j                  }t          j        ||           |                    |           t          j        |dd	          }	|                    |	           t          j	        |j        |j
                  }	|                    |	          }	t          j        |d
d|	           |                    |	           t          j        |d          \  }}	|                    |           |                    |	           |                    |j        |j                  }t          j        ||d          }	|                    |           |                    |	           t          j	        |j        |j
                  }	|                    |	          }	t          j        |d|	          }|                    |           |                    |	           |                    |j        |j                  }t          j	        |j        |j
                  }	|                    |	          }	t          j        ||d|	           |                    |           |                    |	           |D ]}t          ||           |D ]}	t          ||	           d S )Nr   r   r   r   Tr    rP   r   rR   FrT   rV   rW   rX   )r7   r8   r   r   rY   rZ   r[   r\   r]   rU   r^   r	   r_   s
             rA   test_distance_transform_edt02z3TestNdimageMorphology.test_distance_transform_edt02,  s@   
 E""zz6666666666666666666666666668 @E  F F 1$tLLLSXXdj
X33&tr::::

2+1T; ; ;

2Z
"(333ZZ^^&5r	K 	K 	K 	K

2/' ' 'B

2

2XXdj
X33+Bt5 5 5

2

2Z
"(333ZZ^^+r3 3 3

2

2XXdj
X33Z
"(333ZZ^^&BtR	A 	A 	A 	A

2

2 	/ 	/B%c2.... 	/ 	/B%c2....	/ 	/rC   c                 R   t          ||          }t          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |dddg          }t          j        |ddg          }t          ||           d S )	Nr   r   r   r   r   r   r"   rh   	r7   r   rp   rq   r8   r   r9   r   r	   r;   r   r<   r=   refr>   s         rA   test_distance_transform_edt03z3TestNdimageMorphology.test_distance_transform_edt03l      E""2;; 	ELCDDDzz6666666666666666666666666668 @E  F F +D+AOOO,TQFCCC!#s+++++rC   c                 R   t          ||          }t          |          rt          j        d           |                    g dg dg dg dg dg dg dg dg dg	|          }t          j        |dddg	          }t          j        |ddg	          }t          ||           d S )
Nr   r   r   r   r   r   r"   r   r   r   r   s         rA   test_distance_transform_edt4z2TestNdimageMorphology.test_distance_transform_edt4  r   rC   c                 P    t          j        d          }t          |dg           d S )NF        )r   r   r	   )r;   r<   r>   s      rA   test_distance_transform_edt5z2TestNdimageMorphology.test_distance_transform_edt5  s*    ,U33!#t,,,,,rC   c                 2   |                     g dg dg dg dg dg dg dg dg dg	          }|                    |j        |j                  }t	          t
                    5  t          j        |dd|           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   TF)r!   rS   rQ   )r8   rY   rZ   r[   rr   rs   r   r9   )r;   r<   r=   distances_outs       rA   test_distance_transform_edt6z2TestNdimageMorphology.test_distance_transform_edt6  s    
 zz6666666666666666666666666668 9 9 2:>><(( 	 	)#!&'	   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   &BBBc                 @    t          j        dd          }|dk    sJ d S )Nr   r   )r   generate_binary_structurer;   r<   structs      rA   test_generate_structure01z/TestNdimageMorphology.test_generate_structure01  s%    21a88{{{{{{rC   c                 T    t          j        dd          }t          |g d           d S )Nr   r   r   r   r   r   r	   r   s      rA   test_generate_structure02z/TestNdimageMorphology.test_generate_structure02  s.    21a88!&)))44444rC   c                 b    t          j        dd          }t          |g dg dg dg           d S )Nr"   r   r   r   r   r   r   r   s      rA   test_generate_structure03z/TestNdimageMorphology.test_generate_structure03  K    21a88!&999+499+499+6 	7 	7 	7 	7 	7rC   c                 b    t          j        dd          }t          |g dg dg dg           d S )Nr"   r   r   r   s      rA   test_generate_structure04z/TestNdimageMorphology.test_generate_structure04  r   rC   c                    g dg dg dg}|                     |          }t          j        |d          }t          j         g dg dg dg dg dgt                    }|                     |          }t          ||           d S )Nr   r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   iterate_structurer]   boolr	   r;   r<   r   r>   r@   s        rA   test_iterate_structure01z.TestNdimageMorphology.test_iterate_structure01  s    )))))) F##'22:....	0 8<	= = =
 ::h''!#x00000rC   c                    ddgddgddgg}|                     |          }t          j        |d          }t          j         g dg dg dg dg dgt                    }|                     |          }t          ||           d S )Nr   r   r"   )r   r   r   r   r   r   r   r   r   r   s        rA   test_iterate_structure02z.TestNdimageMorphology.test_iterate_structure02  s    a&a&a& F##'22:yyy(yy(yy(yy(yy	* 26	7 7 7
 ::h''!#x00000rC   c                 @   g dg dg dg}|                     |          }t          j        |dd          }g dg dg dg dg dg}t          j         |t                    }|                     |          }t          |d	         |           |d         ddgk    sJ d S )
Nr   r   r"   r   r   r   r   r   r   r   r   s        rA   test_iterate_structure03z.TestNdimageMorphology.test_iterate_structure03  s    )))))) F##'155#OO#OO#OO#OO#OO	%
 :hd333::h''!#a&(3331v!QrC   c                     t          ||          }|                    g |          }t          j        |          }||                    d|j                  k    sJ d S Nr   r   r7   r   r   binary_erosionr8   r   r;   r   r<   r=   r>   s        rA   test_binary_erosion01z+TestNdimageMorphology.test_binary_erosion01  s_    E""wwrw''$T**bjj#)j44444444rC   c                     t          ||          }|                    g |          }t          j        |d          }||                    d|j                  k    sJ d S )Nr   r   border_valuer   r   s        rA   test_binary_erosion02z+TestNdimageMorphology.test_binary_erosion02  sd    E""wwrw''$T:::bjj#)j44444444rC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    dg                     d S Nr   r   r   r7   r   r   r   r	   r8   r   s        rA   test_binary_erosion03z+TestNdimageMorphology.test_binary_erosion03  sZ    E""wws%w(($T**!#rzz1#77777rC   c                     t          ||          }|                    dg|          }t          j        |d          }t	          ||                    dg                     d S Nr   r   r   r   r   s        rA   test_binary_erosion04z+TestNdimageMorphology.test_binary_erosion04  s_    E""wws%w(($T:::!#rzz1#77777rC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S )Nr)   r   r   r   r   s        rA   test_binary_erosion05z+TestNdimageMorphology.test_binary_erosion05  s^    E""wws%w(($T**!#rzz)))'<'<=====rC   c                     t          ||          }|                    dg|          }t          j        |d          }t	          ||                    g d                     d S Nr)   r   r   r   r   r   r   s        rA   test_binary_erosion06z+TestNdimageMorphology.test_binary_erosion06  sc    E""wws%w(($T:::!#rzz)))'<'<=====rC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S )Nr-   r   r   r   r   s        rA   test_binary_erosion07z+TestNdimageMorphology.test_binary_erosion07  s^    E""wws%w(($T**!#rzz///'B'BCCCCCrC   c                     t          ||          }|                    dg|          }t          j        |d          }t	          ||                    g d                     d S )Nr-   r   r   r   r   r   r   s        rA   test_binary_erosion08z+TestNdimageMorphology.test_binary_erosion08   sc    E""wws%w(($T:::!#rzz///'B'BCCCCCrC   c                     t          j        dg|          }d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr-   r   r   r"   r   r   r   r   r   r]   r   r8   r   r   r	   r   s        rA   test_binary_erosion09z+TestNdimageMorphology.test_binary_erosion09'  sh    ws%(((Qzz$$T**!#rzz///'B'BCCCCCrC   c                     t          j        dg|          }d|d<   |                    |          }t          j        |d          }t          ||                    g d                     d S )Nr-   r   r   r"   r   r   )r   r   r   r   r   r   r   s        rA   test_binary_erosion10z+TestNdimageMorphology.test_binary_erosion10/  sm    ws%(((Qzz$$T:::!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }d|d<   |                    |          }|                    g d          }t          j        ||d          }t          ||                    g d                     d S )	Nr-   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r;   r   r<   r=   r   r>   s         rA   test_binary_erosion11z+TestNdimageMorphology.test_binary_erosion117  s    ws%(((Qzz$III&&$T6BBB!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }d|d<   |                    |          }|                    g d          }t          j        ||dd          }t          ||                    g d	                     d S )
Nr-   r   r   r"   r   r   r   originr   r   r   r   r   r   r   s         rA   test_binary_erosion12z+TestNdimageMorphology.test_binary_erosion12@  s    ws%(((Qzz$III&&$T6"MMM!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }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   s         rA   test_binary_erosion13z+TestNdimageMorphology.test_binary_erosion13I  s    ws%(((Qzz$III&&$T6!LLL!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }d|d<   |                    |          }|                    ddg          }t          j        ||d          }t          ||                    g d                     d S )Nr-   r   r   r"   r   r   )r   r   r   r   r   r   r   s         rA   test_binary_erosion14z+TestNdimageMorphology.test_binary_erosion14R  s    ws%(((Qzz$QF##$T6BBB!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }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   s         rA   test_binary_erosion15z+TestNdimageMorphology.test_binary_erosion15[  s    ws%(((Qzz$QF##$T6"MMM!#rzz///'B'BCCCCCrC   c                     t          ||          }|                    ddg|          }t          j        |d          }t	          ||                    dgg                     d S r   r   r   s        rA   test_binary_erosion16z+TestNdimageMorphology.test_binary_erosion16d  se    E""ww1vUw++$T:::!#rzzA3%'8'899999rC   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    dgg                     d S r   r   r   s        rA   test_binary_erosion17z+TestNdimageMorphology.test_binary_erosion17k  s`    E""ww1vUw++$T**!#rzzA3%'8'899999rC   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg                     d S )Nr   r)   r   r   r   r   r   r   s        rA   test_binary_erosion18z+TestNdimageMorphology.test_binary_erosion18r  sb    E""ww1vUw++$T**!#rzz999+'>'>?????rC   c                     t          ||          }|                    ddg|          }t          j        |d          }t	          ||                    g dg                     d S )Nr   r)   r   r   r   r   r   s        rA   test_binary_erosion19z+TestNdimageMorphology.test_binary_erosion19y  sg    E""ww1vUw++$T:::!#rzz999+'>'>?????rC   c           	          t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg dg dg                     d S )Nr)   r   r   r   r   r   s        rA   test_binary_erosion20z+TestNdimageMorphology.test_binary_erosion20  s    E""ww1vUw++$T**!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@rC   c           	          t          ||          }|                    ddg|          }t          j        |d          }t	          ||                    g dg dg dg                     d S r   r   r   s        rA   test_binary_erosion21z+TestNdimageMorphology.test_binary_erosion21  s    E""ww1vUw++$T:::!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@rC   c                 .   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        |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   r7   r8   r   r   r	   r;   r   r<   r@   r=   r>   s         rA   test_binary_erosion22z+TestNdimageMorphology.test_binary_erosion22  s   E"",,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C $T:::!#x00000rC   c                    t          ||          }t          j        d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|
          }t          j        ||d          }t          ||           d S )Nr"   r	  r  r  r  r  r  r  r  r   r   r   )r7   r   r   r8   r   r	   r;   r   r<   r   r@   r=   r>   s          rA   test_binary_erosion23z+TestNdimageMorphology.test_binary_erosion23  s2   E""21a88F##,,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C $T6BBB!#x00000rC   c                 f   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}|                    |          }|                    g dg dg dg d	g dg d
g dg dg|          }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  s          rA   test_binary_erosion24z+TestNdimageMorphology.test_binary_erosion24  s4   E""aVV% & &,,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C $T6BBB!#x00000rC   c                 p   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}|                    |          }|                    g dg dg dg d	g d
g dg dg dg|          }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   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r  r  s          rA   test_binary_erosion25z+TestNdimageMorphology.test_binary_erosion25  s>   E"")))))) F##,,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C $T6BBB!#x00000rC   c                 r   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}|                    |          }|                    g dg dg d	g d
g dg dg dg dg|          }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  s          rA   test_binary_erosion26z+TestNdimageMorphology.test_binary_erosion26  sG   E"")))))) F##,,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C $T6,46 6 6!#x00000rC   c           
         t          |          rt          j        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
                    }|                    |          }t          j        ||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   rp   rq   r8   r]   r   r   r   r	   r;   r<   r   r@   r=   r>   s         rA   test_binary_erosion27z+TestNdimageMorphology.test_binary_erosion27  sR   2;; 	RLPQQQ)))))) F##)))))))))))))))))))))+ ::h''z0000000000000000000002 :>? ? ? zz$$T6013 3 3!#x00000rC   z)inplace out= arguments are numpy-specificc           
         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                    }|                     |          }t          j         g dg dg dg dg dg dg dgt                    }|                     |          }t          j        |j        t                    }|                     |          }t          j        ||dd	|
           t          ||           d S )Nr   r   r+  r,  r   r-  r.  r   r"   r   r0  outputr8   r]   r   rY   rZ   r   r   r	   r2  s         rA   test_binary_erosion28z+TestNdimageMorphology.test_binary_erosion28.  sr    )))))) F##)))))))))))))))))))))+ :hd333::h''z0000000000000000000002 :>? ? ? zz$htz...jjootV!*+C	9 	9 	9 	9!#x00000rC   c           
         t          |          rt          j        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
          	          }|                    |          }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/  r1  r2  s         rA   test_binary_erosion29z+TestNdimageMorphology.test_binary_erosion29M  U   2;; 	RLPQQQ)))))) F##)))))))))))))))))))))+ ::h''z0000000000000000000002 :>? ? ? zz$$T623C C C!#x00000rC   c           
         t          |          rt          j        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
                    }|                    |          }t	          j        g dg dg dg d	g dg dg dgt
                    }|                    |          }t	          j        |j        t
                    }|                    |          }t          j	        ||d
d|           t          ||           t          j	        ||d
d|           t          ||           d S )Nr*  r   r   r+  r,  r   r-  r.  r:  r   r)   r5  )r   rp   rq   r8   r]   r   rY   rZ   r   r   r	   r2  s         rA   test_binary_erosion30z+TestNdimageMorphology.test_binary_erosion30i  s    2;; 	RLPQQQ)))))) F##)))))))))))))))))))))+ :hd333::h''z0000000000000000000002 :>? ? ? zz$htz...jjootV!*+C	9 	9 	9 	9!#x000 	tV!*+D	: 	: 	: 	:!$11111rC   c           
         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                    }|                     |          }t          j         g d	g d
g dg dg dg d
g d	gt                    }|                     |          }t          j        |j        t                    }|                     |          }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   r0  r6  r   r7  r2  s         rA   test_binary_erosion31z+TestNdimageMorphology.test_binary_erosion31  sx    )))))) F##)))))))))))))))))))))+ :hd333::h''z0000000000000000000002 :>? ? ? zz$htz...jjootV!*+C	J 	J 	J 	J!#x00000rC   c           
         t          |          rt          j        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
                    }|                    |          }t          j        ||d	d
          }t          ||           d S r)  r1  r2  s         rA   test_binary_erosion32z+TestNdimageMorphology.test_binary_erosion32  r<  rC   c           
         t          |          rt          j        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
                    }|                    |          }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   maskr0  r1  r;   r<   r   r@   rJ  r=   r>   s          rA   test_binary_erosion33z+TestNdimageMorphology.test_binary_erosion33  s   2;; 	RLPQQQ)))))) F##)))))))))))))))))))))+ ::h''%%%%%%%%%%%%%%%%%%%%%' zz$z0000000000000000000002 :>? ? ? zz$$T623$2O O O!#x00000rC   c           
         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                    }|                     |          }t          j        ||d	|
          }t          ||           d S )Nr   r   r+  r,  r.  r-  r   r   r   r   r   r   r   r   r   )r   rJ  )r8   r]   r   r   r   r	   rK  s          rA   test_binary_erosion34z+TestNdimageMorphology.test_binary_erosion34  s   )))))) F##)))))))))))))))))))))+ ::h''%%%%%%%%%%%%%%%%%%%%%' zz$z0000000000000000000002 :>? ? ? zz$$T623$@ @ @!#x00000rC   c           
      V   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                    }|                     |          }t          j         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}t          j         |t                    }|                     |          }|                    ||          }|                    ||                    |                    }|                    ||          }t          j        |j        t                    }|                     |          }t          j	        ||dd|d|           t          ||           d S )Nr   r   r+  r-  rN  r   r,  r.  r:  r@  rA  rB  rC  r   r&  )r   r0  r6  r   rJ  )r8   r]   r   logical_andlogical_not
logical_orrY   rZ   r   r   r	   )r;   r<   r   rJ  r=   tmpr@   r>   s           rA   test_binary_erosion35z+TestNdimageMorphology.test_binary_erosion35  s)    )))))) F##%%%%%%%%%%%%%%%%%%%%%' z$d+++zz$z0000000000000000000002 :>? ? ? zz$$$$$$$$$$$$$$$$$$$$$$& jD)))jjoo>>#t,,nnT2>>$#7#788==3//htz...jjootV!*+C&.T	; 	; 	; 	; 	"#x00000rC   c                 @   t          |          rt          j        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
                    }|                    |          }g dg dg d	g d
g dg dg dg dg}t	          j        |t
                    }|                    |          }t	          j        g dg dg dg dg dg dg dg dgt
                    }|                    |          }|                    ||          }|                    ||                    |                    }|                    ||          }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&  )rJ  r   r   )r   rp   rq   r8   r]   r   rQ  rR  rS  r   r   r	   )r;   r<   r   rJ  rT  r=   r@   r>   s           rA   test_binary_erosion36z+TestNdimageMorphology.test_binary_erosion36<  s:   2;; 	RLPQQQ)))))) F##((((((((((((((((((((((((* z$d+++zz$'''''''''''''''''''''''') jD)))jjooz3334444444444444444444446 >BC C C zz$>>#t,,nnT2>>$#7#788==3//$T623HF F F!#x00000rC   c                 .   t          j        g dg dg dgt                    }|                    |          }|                    |          }t	          j        |||ddd          }||u sJ t          t	          j        ||dd          |           d S )Nr   r   r   r   T)	structurer6  r0  r   brute_force)rZ  r0  r   )r]   r8   r   
zeros_liker   r   r   )r;   r<   abr>   s        rA   test_binary_erosion37z+TestNdimageMorphology.test_binary_erosion37h  s     J			!		!		#*.0 0 0 JJqMMMM!$Q!A!26DJ J Jaxxxx"1a046 6 6	 	 	 	 	rC   c                    t          j        g dg dg dgt                    }|                    |          }d}t          t                    5  t          j        ||          }d d d            d S # 1 swxY w Y   d S )Nr   r   r   g       @r0  )r]   r8   r   rr   	TypeErrorr   r   )r;   r<   r=   r0  _s        rA   test_binary_erosion38z+TestNdimageMorphology.test_binary_erosion38y  s    z999$99$99&-13 3 3 zz$
9%% 	D 	D&t
CCCA	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Ds   A44A8;A8c           
      D   t          j        d          }g dg dg dg}|                    |          }g dg dg dg dg dg dg dg}|                    |t                    }|                    |          }t          j        g dg dg dg d	g dg dg dgt                    }|                    |          }t          j        |j        t                    }|                    |          }t          j        ||d
||           t          ||           d S Nr)   r   r   r+  r,  r   r-  r.  r:  r   r5  )	r]   r^   r8   r   rY   rZ   r   r   r	   r;   r<   r0  r   r@   r=   r>   s          rA   test_binary_erosion39z+TestNdimageMorphology.test_binary_erosion39  s    Xa[[
)))))) F##)))))))))))))))))))))+ ::hd:33::h''z0000000000000000000002 :>? ? ? zz$htz...jjootV!*4S	B 	B 	B 	B!#x00000rC   c           
      B   t          j        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                    }|                    |          }t          j        g dg dg dg d	g dg dg dgt                    }|                    |          }t          j        |j        t                    }|                    |          }t          j        ||d
||           t          ||           d S rf  )	r]   int64r8   r   rY   rZ   r   r   r	   rg  s          rA   test_binary_erosion40z+TestNdimageMorphology.test_binary_erosion40  s    Xa[[
)))))) F##)))))))))))))))))))))+ :hd333::h''z0000000000000000000002 :>? ? ? zz$htz...jjootV!*4S	B 	B 	B 	B!#x00000rC   c                     t          ||          }|                    g |          }t          j        |          }||                    d|j                  k    sJ d S r   )r7   r   r   binary_dilationr8   r   r   s        rA   test_binary_dilation01z,TestNdimageMorphology.test_binary_dilation01  s_    E""wwrw''%d++bjj#)j44444444rC   c                     t          ||          }|                    g |          }t          j        |          }||                    d          k    sJ d S )Nr   F)r7   rY   r   rm  r8   r   s        rA   test_binary_dilation02z,TestNdimageMorphology.test_binary_dilation02  sY    E""xx%x((%d++bjj''''''''rC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    dg|j                             d S Nr   r   )r7   r   r   rm  r	   r8   r   r   s        rA   test_binary_dilation03z,TestNdimageMorphology.test_binary_dilation03  sb    E""wws%w((%d++!#rzz1#SYz'G'GHHHHHrC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    dg                     d S r   r7   rY   r   rm  r	   r8   r   s        rA   test_binary_dilation04z,TestNdimageMorphology.test_binary_dilation04  sZ    E""xx5x))%d++!#rzz1#77777rC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S Nr)   r   r   r7   r   r   rm  r	   r8   r   s        rA   test_binary_dilation05z,TestNdimageMorphology.test_binary_dilation05  s^    E""wws%w((%d++!#rzz)))'<'<=====rC   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S )Nr)   r   r   ru  r   s        rA   test_binary_dilation06z,TestNdimageMorphology.test_binary_dilation06  s^    E""xx5x))%d++!#rzz)))'<'<=====rC   c                     t          j        dg|          }d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr)   r   r   r   r]   rY   r8   r   rm  r	   r   s        rA   test_binary_dilation07z,TestNdimageMorphology.test_binary_dilation07  sh    x5)))Qzz$%d++!#rzz)))'<'<=====rC   c                     t          j        dg|          }d|d<   d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr-   r   r   r)   r   r~  r   s        rA   test_binary_dilation08z,TestNdimageMorphology.test_binary_dilation08  sq    x5)))QQzz$%d++!#rzz///'B'BCCCCCrC   c                     t          j        dg|          }d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr-   r   r   r   r   r   r   r   r~  r   s        rA   test_binary_dilation09z,TestNdimageMorphology.test_binary_dilation09  sh    x5)))Qzz$%d++!#rzz///'B'BCCCCCrC   c                     t          j        dg|          }d|d<   |                    |          }t          j        |d          }t          ||                    g d                     d S )Nr-   r   r   r   r   r   r~  r   s        rA   test_binary_dilation10z,TestNdimageMorphology.test_binary_dilation10  sm    x5)))Qzz$%d2666!#rzz///'B'BCCCCCrC   c                     t          j        dg|          }d|d<   |                    |          }t          j        |d          }t          ||                    g d                     d S )Nr-   r   r   r  r   r   r   r   r   r~  r   s        rA   test_binary_dilation11z,TestNdimageMorphology.test_binary_dilation11  sm    x5)))Qzz$%d1555!#rzz///'B'BCCCCCrC   c                 
   t          j        dg|          }d|d<   |                    |          }|                    g d          }t          j        ||          }t          ||                    g d                     d S )Nr-   r   r   r   )r   r   r   r   r   r~  r   s         rA   test_binary_dilation12z,TestNdimageMorphology.test_binary_dilation12  s    x5)))Qzz$III&&%dF33!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }d|d<   |                    |          }|                    g d          }t          j        ||d          }t          ||                    g d                     d S )Nr-   r   r   r   r   r   r~  r   s         rA   test_binary_dilation13z,TestNdimageMorphology.test_binary_dilation13  s    x5)))Qzz$III&&%dFCCC!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }d|d<   |                    |          }|                    g d          }t          j        ||d          }t          ||                    g d                     d S )Nr-   r   r   r   r   r  )r   r   r   r   r   r~  r   s         rA   test_binary_dilation14z,TestNdimageMorphology.test_binary_dilation14'  s    x5)))Qzz$III&&%dF2>>>!#rzz///'B'BCCCCCrC   c                    t          j        dg|          }d|d<   |                    |          }|                    g d          }t          j        ||dd          }t          ||                    g d                     d S )Nr-   r   r   r   r   r   r   r   r~  r   s         rA   test_binary_dilation15z,TestNdimageMorphology.test_binary_dilation150  s    x5)))Qzz$III&&%dF-/aA A A!#rzz///'B'BCCCCCrC   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    dgg                     d S rr  ry  r   s        rA   test_binary_dilation16z,TestNdimageMorphology.test_binary_dilation16:  s`    E""ww1vUw++%d++!#rzzA3%'8'899999rC   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    dgg                     d S r   ru  r   s        rA   test_binary_dilation17z,TestNdimageMorphology.test_binary_dilation17A  s`    E""xxAex,,%d++!#rzzA3%'8'899999rC   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg                     d S )Nr   r)   r   r   ry  r   s        rA   test_binary_dilation18z,TestNdimageMorphology.test_binary_dilation18H  sb    E""ww1vUw++%d++!#rzz999+'>'>?????rC   c           	          t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg dg dg                     d S rx  ry  r   s        rA   test_binary_dilation19z,TestNdimageMorphology.test_binary_dilation19O  s    E""ww1vUw++%d++!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@rC   c           	          t          j        ddg|          }d|d<   |                    |          }t          j        |          }t          ||                    g dg dg dg                     d S )Nr)   r   r   r   r   r   r   r~  r   s        rA   test_binary_dilation20z,TestNdimageMorphology.test_binary_dilation20X  s    xAe,,,T
zz$%d++!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@rC   c           	      @   t          j        dd          }|                    |          }t          j        ddg|          }d|d<   |                    |          }t          j        ||          }t          ||                    g dg dg dg                     d S )Nr"   r)   r   r   r  r   )r   r   r8   r]   rY   rm  r	   )r;   r   r<   r   r=   r>   s         rA   test_binary_dilation21z,TestNdimageMorphology.test_binary_dilation21b  s    21a88F##xAe,,,T
zz$%dF33!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@rC   c                 *   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 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   r7   r8   r   rm  r	   r  s         rA   test_binary_dilation22z,TestNdimageMorphology.test_binary_dilation22n  s   E"",,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C %d++!#x00000rC   c                 .   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        |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  s         rA   test_binary_dilation23z,TestNdimageMorphology.test_binary_dilation23  s   E"",,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C %d;;;!#x00000rC   c                 .   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        |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  s         rA   test_binary_dilation24z,TestNdimageMorphology.test_binary_dilation24  s   E"",,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C %d6:::!#x00000rC   c                 0   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        |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  s         rA   test_binary_dilation25z,TestNdimageMorphology.test_binary_dilation25  s   E"",,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C %d6JJJ!#x00000rC   c                    t          ||          }t          j        d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|          }t          j        ||          }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   )r7   r   r   r8   rm  r	   r  s          rA   test_binary_dilation26z,TestNdimageMorphology.test_binary_dilation26  s-   E""21a88,,,,,,,,,,,,,,,,,,,,,,,,. F##::h''zz3333333333333333333333335 =B  C C %dF33!#x00000rC   c                 f   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}|                    |          }|                    |          }|                    g d	g dg d	g dg d
g dg d	g d	g|          }t          j        ||          }t	          ||           d S )Nr   r   r  r  r
  r  r  r   r   r   r   r   r   r   r   r	  r  r  r   r  r  s          rA   test_binary_dilation27z,TestNdimageMorphology.test_binary_dilation27  s0   E""a&a&,,,,,,,,,,,,,,,,,,,,,,,,. F##::h''zz3333333333333333333333335 =B  C C %dF33!#x00000rC   c                     t          ||          }g dg dg dg dg}|                    |          }|                    g dg dg dg dg|          }t          j        |d          }t	          ||           d S )N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r  r  s         rA   test_binary_dilation28z,TestNdimageMorphology.test_binary_dilation28  s    E"" LL LL LL LL" ::h''zz<<<'<<'<<'<<) 16  7 7 %d;;;!#x00000rC   c                    t          |          rt          j        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
                    }|                    |          }t          j        ||d	
          }t          ||           d S )Nr*  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   ra  	r   rp   rq   r8   r]   r   r   rm  r	   r2  s         rA   test_binary_dilation29z,TestNdimageMorphology.test_binary_dilation29     2;; 	RLPQQQa&a&#OO#OO#OO#OO#OO	%
 F##::h''z???*??*??*??*??	, 48	9 9 9
 zz$%dFqAAA!#x00000rC   z!output= arrays are numpy-specificc                    t          |          rt          j        d           ddgddgg}g dg dg dg dg dg}|                    |          }|                    |          }|                    g dg dg dg dg dgt                    }|                    |          }t          j        |j        t                    }|                    |          }t          j	        ||d	|
           t          ||           d S )Nr*  r   r   r   r  r  r   r   r"   r0  r6  )r   rp   rq   r8   r   r]   rY   rZ   r   rm  r	   r2  s         rA   test_binary_dilation30z,TestNdimageMorphology.test_binary_dilation30"  s1   2;; 	RLPQQQa&a&#OO#OO#OO#OO#OO	%
 F##::h''zz???*??*??*??*??	, 48	  9 9
 zz$htz...jjoof3GGGG!#x00000rC   c                    t          |          rt          j        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
          	          }|                    |          }t          j        ||d
          }t          ||           d S )Nr*  r   r   r  r  r   r   r   r   r   r   r   r   r)   ra  r  r2  s         rA   test_binary_dilation31z,TestNdimageMorphology.test_binary_dilation31:  r  rC   c                 
   t          |          rt          j        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
          	          }|                    |          }t	          j        |j        t
          	          }|                    |          }t          j	        ||d
|           t          ||           d S )Nr*  r   r   r  r  r   r  r   r   r)   r  r   rp   rq   r8   r]   r   rY   rZ   r   rm  r	   r2  s         rA   test_binary_dilation32z,TestNdimageMorphology.test_binary_dilation32P  s/   2;; 	RLPQQQa&a&#OO#OO#OO#OO#OO	%
 F##::h''z???*??*??*??*??	, 48	9 9 9
 zz$htz...jjoof3GGGG!#x00000rC   c                    t          |          rt          j        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
          	          }|                    |          }t	          j        g dg dg d
g dg dg dg dg dgt
          	          }|                    |          }t	          j        g dg dg dg dg dg dg dg dgt
          	          }|                    |          }t          j        ||d|d          }t          ||           d S )Nr*  r   r   r  r	  r   r   r   r   r   r   r   r   rW  r  r   r   r   r   r   r   r   r   r   r   r   r0  rJ  r   r  rK  s          rA   test_binary_dilation33z,TestNdimageMorphology.test_binary_dilation33i  s
   2;; 	RLPQQQ)))))) F##:7777777777777777777777779 AEF F F ::h''z3333333333333333333333335 =AB B B zz$z3333333333333333333333335 =AB B B zz$%dFr+/aA A A!#x00000rC   z)inplace output= arrays are numpy-specificc                    t          |          rt          j        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
                    }|                    |          }t	          j        |j        t
                    }|                    |          }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  rK  s          rA   test_binary_dilation34z,TestNdimageMorphology.test_binary_dilation34  s    2;; 	RLPQQQ)))))) F##,,,,,,,,,,,,,,,,,,,,,,,,. z3333333333333333333333335 =AB B B zz$x
$///zz$%dFr+/aA A A!#x00000rC   c                    t          ||          }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          }g dg dg dg dg dg dg dg dg}t          j        |t                    }t          j        ||          }t          j        |t          j        |                    }t          j        ||          }|                    |          }|                    |          }|                    g dg dg dg d	g d
g dg dg dg|          }t          j        ||dd          }t          ||           d S )Nr  r  r  r  r  r  r	  r  r
  r  r  r  r   r  r   )rJ  r   r   )
r7   r]   r8   r   rQ  rR  rS  r   rm  r	   )r;   r   r<   rT  r=   rJ  r@   r>   s           rA   test_binary_dilation35z,TestNdimageMorphology.test_binary_dilation35  s.   E""'''''''''''''''''''''''') z3333333333333333333333335 6 6 )(((((((((((((((((((((((* z$d+++>#t,,nT2>$#7#788=3//zz$::h''zz3333333333333333333333335 =B  C C %d-3!E E E!#x00000rC   c                     t          j        g t                    }|                    |          }t	          j        |d          }||                    d          k    sJ d S )Nr   r   ra  F)r]   rY   r   r8   r   rm  )r;   r<   r=   r>   s       rA   test_binary_dilation36z,TestNdimageMorphology.test_binary_dilation36  s_    x$'''zz$%dr:::bjj''''''''rC   c                 F   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                    }|                     |          }t          j         g dg dg d	g dg dg dg dg dgt                    }|                     |          }t          j         g dg dg dg dg dg dg dg dgt                    }|                     |          }t          j        |||d
          }t          ||           d S )Nr   r   r  r	  r  rW  r  r   r  r   rJ  r   )r8   r]   r   r   binary_propagationr	   rK  s          rA   test_binary_propagation01z/TestNdimageMorphology.test_binary_propagation01  s   )))))) F##:7777777777777777777777779 AEF F F ::h''z3333333333333333333333335 =AB B B zz$z3333333333333333333333335 =AB B B zz$(v.2D D D!#x00000rC   c                    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          
          }|                     |          }t          j        |j        t          
          }|                     |          }t          j        |||d          }t          ||           d S )Nr   r   r  r  r$  r	  r
  r  r  r   r   r  )r8   r]   r   rY   rZ   r   r  r	   rK  s          rA   test_binary_propagation02z/TestNdimageMorphology.test_binary_propagation02  sr   )))))) -,,,,,,,,,,,,,,,,,,,,,,,. ::h''F##z3333333333333333333333335 =AB B B zz$x
$///zz$(v.2D D D!#x00000rC   c                     |                     t          j        g t                              }|                     t          j        g t                              }t	          j        |          }||k    sJ d S )Nr   )r8   r]   rY   r   r   r  )r;   r<   r=   r@   r>   s        rA   test_binary_propagation03z/TestNdimageMorphology.test_binary_propagation03+  sc    zz"(2T22233::bhr66677(..hrC   c                 *   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 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   )r7   r8   r   binary_openingr	   r  s         rA   test_binary_opening01z+TestNdimageMorphology.test_binary_opening012     E"",,,,,,,,,,,,,,,,,,,,,,,,. ::h''zz3333333333333333333333335 =B  C C $T**!#x00000rC   c                    t          ||          }t          j        d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|	          }t          j        ||          }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   )r7   r   r   r8   r  r	   r  s          rA   test_binary_opening02z+TestNdimageMorphology.test_binary_opening02I  -   E""21a88,,,,,,,,,,,,,,,,,,,,,,,,. ::h''F##zz3333333333333333333333335 =B  C C $T622!#x00000rC   c                 *   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 S )Nr	  r  )r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r   )r7   r8   r   binary_closingr	   r  s         rA   test_binary_closing01z+TestNdimageMorphology.test_binary_closing01b  r  rC   c                    t          ||          }t          j        d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|	          }t          j        ||          }t          ||           d S )
Nr"   r	  r  r  r  r  r  r  r   )r7   r   r   r8   r  r	   r  s          rA   test_binary_closing02z+TestNdimageMorphology.test_binary_closing02y  r  rC   c           
      b   t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        |          }t          ||           d S )Nr	  r  r   r  r]   r8   r   r   binary_fill_holesr	   r;   r<   r@   r=   r>   s        rA   test_binary_fill_holes01z.TestNdimageMorphology.test_binary_fill_holes01  s   :7777777777777777777779 AEF F F ::h''z3333333333333333333335 =AB B B zz$'--!#x00000rC   c           
      b   t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        |          }t          ||           d S )Nr	  r  r  r   r  r  r  s        rA   test_binary_fill_holes02z.TestNdimageMorphology.test_binary_fill_holes02     :7777777777777777777779 AEF F F ::h''z3333333333333333333335 =AB B B zz$'--!#x00000rC   c           
      b   t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        |          }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  s        rA   test_binary_fill_holes03z.TestNdimageMorphology.test_binary_fill_holes03  r  rC   )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   rm  r  r  binary_hit_or_missr  r  c           
      n   t          j        g dg dg dgt                    }|                    |          }t          j        g dg dg dg dg dg dg dgt                    }|                    |          }|dk    rt          ||	          }nt          |
          }|dv}	|	r||d<   n|dk    rt	          j        d           t          t          |          }
 |
||fi |}d}|                    |g|z  |          }|                    |g|z  |          }g d}|	                    |           t          |          st          |          r@|                    t          j        |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origin2r  )r  r  r   r   z-border_value !=0 unsupported by this functionr-   r   r  r6  axesr   )r]   r8   r   dictrp   skipr7   r   stackremover   r   rY   rZ   r   )r;   r<   r  r  r   r   r   r=   kwargsborder_supportedfuncr@   n_repsr   r>   s                  rA   test_binary_axesz&TestNdimageMorphology.test_binary_axes  s<     YYY&YY&YY()-/ / F##z0000000000000000000002 489 9 zz$,,,&&999FF(((F$ -B B 	I%1F>""QKGHHHw	**4f//// 88XJ/k8BBxxkx:: yyK   B<< 	:72;; 	:**RXdj$7788CDv?c?????? $tV99$9&99CX&&&&&rC   c           	          |                     g dg dg dg          }|                     g dg dg          }t          j        ||          }t          ||                     g dg dg d	g                     d S )
Nr)   r"   r-   r   r#   r.   r+   rm   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   r8   r   grey_erosionr	   r;   r<   arrayr  r6  s        rA   test_grey_erosion01z)TestNdimageMorphology.test_grey_erosion01
	  s    

OOO+OO+OO- . . JJ			999566	%eyAAA!&"$**ooo.=oo.=oo.? #@ #@	A 	A 	A 	A 	ArC   zoutput array is read-only.z(https://github.com/cupy/cupy/issues/8398c           	          |                     g dg dg dg          }|                     g dg dg          }t          j        |||           t          ||                     g dg dg d	g                     d S )
Nr  r  r  r   r  )r  r6  r  r  r  r  )r;   r<   r  r  s       rA   test_grey_erosion01_overlapz1TestNdimageMorphology.test_grey_erosion01_overlap	  s     

OOO+OO+OO- . . JJ			999566	UiFFFF!%"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
rC   c           	      4   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          ||                     g dg d	g d
g                     d S )Nr  r  r  r   r  r   r  rZ  r  r  r  r  r;   r<   r  r  rZ  r6  s         rA   test_grey_erosion02z)TestNdimageMorphology.test_grey_erosion02$	      

OOO+OO+OO- . . JJ			999566	JJ			999566	%ey09; ; ;!&"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
rC   c           	      4   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          ||                     g dg d	g d
g                     d S )Nr  r  r  r   r  r   r  r  )r   r"   r   r"   r   )r#   r#   r"   r"   r   r  r  s         rA   test_grey_erosion03z)TestNdimageMorphology.test_grey_erosion032	  r  rC   c           	          |                     g dg dg dg          }|                     g dg dg          }t          j        ||          }t          ||                     g dg dg d	g                     d S )
Nr  r  r  r   r   r  r.   r.   rm   rm   r-   r.   rm   r%   rm   r.   r%   r%   r%   r.   r.   r8   r   grey_dilationr	   r  s        rA   test_grey_dilation01z*TestNdimageMorphology.test_grey_dilation01@	  s    

OOO+OO+OO- . . JJ			999566	&u	BBB!&"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
rC   c           	      4   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          ||                     g dg d	g d
g                     d S )Nr  r  r  r   r   r   r  r#  r$  r%  r&  r  s         rA   test_grey_dilation02z*TestNdimageMorphology.test_grey_dilation02L	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	&u	1:< < <!&"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
rC   c           	      4   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          ||                     g dg d	g d
g                     d S )Nr  r  r  r   r   r   r  )r%   r%   
   r,  r+   )r%   r,  rm   r,  r%   )rm   rm   rm   r%   r%   r&  r  s         rA   test_grey_dilation03z*TestNdimageMorphology.test_grey_dilation03Z	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	&u	1:< < <!&"$**.?.?.?.?.?.?.=oo.? #@ #@	
 	
 	
 	
 	
rC   c                    |                     g dg dg dg          }|                     g dg dg          }t          j        ||          }t          j        ||          }t          j        ||          }t          ||           d S Nr  r  r  r   r  r  r8   r   r  r'  grey_openingr	   r;   r<   r  r  rT  r@   r6  s          rA   test_grey_opening01z)TestNdimageMorphology.test_grey_opening01h	  s    

OOO+OO+OO- . . JJ			999566	"5I>>>(	BBB%eyAAA!&(33333rC   c                 X   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          j        |||          }t          j        |||          }t          ||           d S Nr  r  r  r   r  r   r  r0  r;   r<   r  r  rZ  rT  r@   r6  s           rA   test_grey_opening02z)TestNdimageMorphology.test_grey_opening02r	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	"5I-68 8 8(	3<> > >%ey09; ; ;!&(33333rC   c                    |                     g dg dg dg          }|                     g dg dg          }t          j        ||          }t          j        ||          }t          j        ||          }t          ||           d S r/  r8   r   r'  r  grey_closingr	   r2  s          rA   test_grey_closing01z)TestNdimageMorphology.test_grey_closing01	  s    

OOO+OO+OO- . . JJ			999566	#EY???'yAAA%eyAAA!(F33333rC   c                 X   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          j        |||          }t          j        |||          }t          ||           d S r5  r9  r6  s           rA   test_grey_closing02z)TestNdimageMorphology.test_grey_closing02	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	#EY.79 9 9'y2;= = =%ey09; ; ;!(F33333rC   c                    |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          j        |||          }||z
  }|                    |j        |j                  }t          j        ||||	           t          ||           d S 
Nr  r  r  r   r  r   r  r   r  rZ  r6  )	r8   r   r'  r  rY   rZ   r   morphological_gradientr	   	r;   r<   r  r  rZ  tmp1tmp2r@   r6  s	            rA   test_morphological_gradient01z3TestNdimageMorphology.test_morphological_gradient01	  s   

OOO+OO+OO- . . JJ			999566	JJ			999566	$Ui/8: : :#EY.79 9 9$;%+U[99&u	1:6	K 	K 	K 	K!(F33333rC   c                 b   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          j        |||          }||z
  }t          j        |||          }t          ||           d S r5  )r8   r   r'  r  rA  r	   rB  s	            rA   test_morphological_gradient02z3TestNdimageMorphology.test_morphological_gradient02	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	$Ui/8: : :#EY.79 9 9$;/:CE E E!(F33333rC   c                    |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          j        |||          }||z   d|z  z
  }|                    |j        |j        	          }t          j        ||||
           t          ||           d S )Nr  r  r  r   r  r   r  r"   r   r@  )	r8   r   r'  r  rY   rZ   r   morphological_laplacer	   rB  s	            rA   test_morphological_laplace01z2TestNdimageMorphology.test_morphological_laplace01	  s   

OOO+OO+OO- . . JJ			999566	JJ			999566	$Ui/8: : :#EY.79 9 9$;U*%+U[99%ey09&	J 	J 	J 	J!(F33333rC   c                 n   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }t          j        |||          }||z   d|z  z
  }t          j        |||          }t          ||           d S )	Nr  r  r  r   r  r   r  r"   )r8   r   r'  r  rI  r	   rB  s	            rA   test_morphological_laplace02z2TestNdimageMorphology.test_morphological_laplace02	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	$Ui/8: : :#EY.79 9 9$;U*.u	9BD D D!(F33333rC   c                 x   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }||z
  }|                    |j        |j                  }t          j        ||||	           t          ||           d S r?  )r8   r   r1  rY   rZ   r   white_tophatr	   r6  s           rA   test_white_tophat01z)TestNdimageMorphology.test_white_tophat01	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	"5I-68 8 83;%+U[99Ui'0	A 	A 	A 	A!(F33333rC   c                 4   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }||z
  }t          j        |||          }t	          ||           d S r5  )r8   r   r1  rN  r	   r6  s           rA   test_white_tophat02z)TestNdimageMorphology.test_white_tophat02	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	"5I-68 8 83;%ey09; ; ;!(F33333rC   z	cupy#8399c           
         t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        dt                    }|                    |          }t          j        g dg dg dg d	g d
g d	g dgt                    }|                    |          }t	          j        ||          }t          ||           d S )Nr   r   r   r   r   r   r   r.  r   r   r   r   r   r   r   rH  r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rZ  )r]   r8   r   r   r   rN  r   r;   r<   r  rZ  r@   r6  s         rA   test_white_tophat03z)TestNdimageMorphology.test_white_tophat03	  ?    
1111111111111111111113 ;?@ @ @ 

5!!GF$///	JJy))	:4444444444444444444446 >BC C C ::h''%eyAAA&)))))rC   c                 ,   t          j        dt                    }t          j        dt                    }|                    |          }|                    |          }|                    ||j                  }t          j        |||           d S Nr-   r   r   )rZ  r6  )	r]   eyer   r   r8   
empty_liker[   r   rN  r;   r<   r  rZ  r6  s        rA   test_white_tophat04z)TestNdimageMorphology.test_white_tophat04
  s    q%%%GF$///	

5!!JJy))	 uBJ77UiGGGGGGrC   c                 x   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }||z
  }|                    |j        |j                  }t          j        ||||	           t          ||           d S r?  )r8   r   r:  rY   rZ   r   black_tophatr	   r6  s           rA   test_black_tophat01z)TestNdimageMorphology.test_black_tophat01
  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	"5I-68 8 8;%+U[99Ui'0	A 	A 	A 	A!(F33333rC   c                 4   |                     g dg dg dg          }|                     g dg dg          }|                     g dg dg          }t          j        |||          }||z
  }t          j        |||          }t	          ||           d S r5  )r8   r   r:  r`  r	   r6  s           rA   test_black_tophat02z)TestNdimageMorphology.test_black_tophat02(
  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	"5I-68 8 8;%ey09; ; ;!(F33333rC   zcupy/cupy#8399c           
         t          j        g dg dg dg dg dg dg dgt                    }|                    |          }t          j        dt                    }|                    |          }t          j        g dg dg dg dg d	g dg d
gt                    }|                    |          }t	          j        ||          }t          ||           d S )NrS  r.  rT  rH  r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   rI  rU  )r]   r8   r   r   r   r`  r   rV  s         rA   test_black_tophat03z)TestNdimageMorphology.test_black_tophat035
  rX  rC   c                 $   |                     t          j        dt                              }|                     t          j        dt                              }|                    ||j                  }t          j        |||           d S rZ  )	r8   r]   r[  r   r   r\  r[   r   r`  r]  s        rA   test_black_tophat04z)TestNdimageMorphology.test_black_tophat04N
  sy    

26!400011JJrwvT:::;;	 uBJ77UiGGGGGGrC   mode)reflectconstantnearestmirrorwrapfootprint_mode)sizer  rZ  )r  r'  r1  r:  rI  rA  rN  r`  c           
         |                     g dg dg dg dg dg dg dg          }t          ||          }|d	k    rd
|d	<   n|                     g dg dg          |d<   |dk    r|                    |d                   |d<   t          t          |          }	 |	|fi |}
d}|                    |
g|z  |          }
|                    |g|z  |          }g d}|                    |           t          |          st          |          r.|	                    |
j
        |
j                  } |	|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   rm   r)   r   r   r   )r   r   r   r"   r   r   r   )r   rh  ro  )r"   r)   r   r  r  rZ  r-   r   r  r   r  r   )r8   r  	ones_liker7   r   r  r  r   r   rY   rZ   r   r   )r;   r<   r  r  r   rn  rh  r=   r  r  r@   r  r   r>   s                 rA   test_grey_axesz$TestNdimageMorphology.test_grey_axesW
  s   , zz0000000000000000000002 3 3 V$///V###F6NN"$**iii-C"D"DF;[(("$,,vk/B"C"CF;w	**4'''' 88XJ/k8BBxxkx:: yyK   B<< 	272;; 	2((8>(@@CD7c777777 $t11$1&11CX&&&&&rC   c                 :   t          |          s#t          |          st          j        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}|                    |          }|                    g dg dg dg dg d	g d
g d
g dg|          }|                    t          j        |j        t                              }t          j        |||           t          ||           d S )N!inplace output= is numpy-specificr   r   r   )r   r   r   r   r   r  r   )r   r   r   r   r   r   )r   r   r   r   r   r   r6  )r   r   rp   rq   r7   r8   r]   rY   rZ   r   r   r  r	   r  s          rA   test_hit_or_miss01z(TestNdimageMorphology.test_hit_or_miss01
  si    	> 	>L<===E"")))))) F###OO#OO#OO#OO#OO#OO#OO#OO% ::h''zz???*??*??*??*??*??*??*??, 49  : : jj$*D999::"4<<<<!(C00000rC   c                 <   t          ||          }g dg dg dg}g dg dg dg dg}|                    |          }|                    |          }|                    g dg dg dg dg|          }t          j        ||          }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   r7   r8   r   r  r	   r  s          rA   test_hit_or_miss02z(TestNdimageMorphology.test_hit_or_miss02
  s    E"")))))) -,,,,,,,,,,,. F##::h''zz3333333333335 =B  C C (v66!(C00000rC   c                    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}|                    |          }|                    |          }|                    |          }|                    g dg dg dg d	g d
g dg dg dg|          }t          j        |||          }t	          ||           d S )Nr   r   r
  r	  r$  rx  r  r  r  r  r  r  r   ry  )r;   r   r<   struct1struct2r@   r=   r>   s           rA   test_hit_or_miss03z(TestNdimageMorphology.test_hit_or_miss03
  sj   E""999999 999999 -,,,,,,,,,,,,,,,,,,,,,,,. **W%%**W%%::h''zz3333333333333333333333335 =B  C C (w@@!(C00000rC   N)__name__
__module____qualname__r   rp   markparametrizer   rB   rH   rM   r   re   rk   rn   rt   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   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  r8  r;  r>  rD  rF  rL  rO  rU  rX  r_  rd  rh  rk  rn  rp  rs  rv  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-  r3  r7  r;  r=  rE  rG  rJ  rL  rO  rQ  rW  r^  ra  rc  re  rg  rr  rv  rz  r~   rC   rA   r   r      s!       v&QRRR[We,,.0 .0 -, SR.0` v&QRRR[We,,.0 .0 -, SR.0` v&QRRR[We,,.0 .0 -, SR.0` K   [We,,0/ 0/ -, 0/d v&QRRR[We,,-0 -0 -, SR-0^ v&QRRR[We,,-0 -0 -, SR-0^  & [We,,'0 '0 -,'0R [We,,&0 &0 -,&0P I   [We,,// // -, //b R    ( [We,,% % -,%* [We,,* * -,*< D   [We,,:/ :/ -, :/x [We,,, , -,,$ [We,,, , -,,$- - -
 R    (  5 5 57 7 77 7 71 1 11 1 1       [We,,5 5 -,5 [We,,5 5 -,5 [We,,8 8 -,8 [We,,8 8 -,8 [We,,> > -,> [We,,> > -,> [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,: : -,: [We,,: : -,: [We,,@ @ -,@ [We,,@ @ -,@ [We,,@ @ -,@ [We,,@ @ -,@ [We,,1 1 -,1, [We,,1 1 -,10 [We,,1 1 -,10 [We,,1 1 -,14 [We,,1 1 -,161 1 18 H  1 1 181 1 18 H  "2 "2 "2H H  1 1 181 1 18"1 "1 "1H1 1 1B H  '1 '1 '1R*1 *1 *1X H    D D D H  1 1 1: H  1 1 1: [We,,5 5 -,5 [We,,( ( -,( [We,,I I -,I [We,,8 8 -,8 [We,,> > -,> [We,,> > -,> [We,,> > -,> [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,D D -,D [We,,: : -,: [We,,: : -,: [We,,@ @ -,@ [We,,@ @ -,@ [We,,@ @ -,@ [We,,	@ 	@ -,	@ [We,,1 1 -,1, [We,,1 1 -,1, [We,,1 1 -,1, [We,,1 1 -,1, [We,,1 1 -,10 [We,,1 1 -,12 [We,,1 1 -,11 1 1, d+NOOO1 1 PO1.1 1 1, d+NOOO1 1 PO10%1 %1 %1N H  1 1 1> [We,,.1 .1 -,.1`( ( ("1 "1 "1H1 1 1:   [We,,1 1 -,1, [We,,1 1 -,10 [We,,1 1 -,1, [We,,1 1 -,101 1 1,1 1 1(1 1 1( t$$$KM M MLN N N[^QF33[X'899[]III66[[ +@ +@ +@ A A)' )'A A 76 :9 43N NM M %$)'V	A 	A 	A k*FGGGv&PQQQ
 
 RQ HG

 
 

 
 


 

 


 
 

 
 
4 4 44 4 44 4 44 4 4 d+NOOO4 4 PO4 4 4 4 d+NOOO4 4 PO4 4 4 4 k*FGGG4 4 HG44 4 4 vk222* * 32*0 k*FGGG	H 	H HG	H k*FGGG4 4 HG44 4 4 v&6777* * 87*0 k*FGGGH H HGH t$$$KM M MLN N N[X'899[]III66[V &8 &8 &8 9 9[- 0= 0= 0= > >[[ +; +; +; < <#' #'< <> >9 9 76 :9N NM M %$&#'J [We,,1 1 -,1< [We,,1 1 -,1$ [We,,1 1 -,1 1 1rC   r   c                        e Zd Zd Zd Zd ZdS )TestDilateFixc                    |                     g dg dg dg dg dg|j                  | _        |                    d          | _        t          j        | j        | j                  }t          |          r!|                    |j                  | _	        d S t          |          j        } |||j                  | _	        d S )Nr   r  r  r   r   rU  )r8   uint8r  r   sq3x3r   rm  r   view
dilated3x3r   r   )r;   r<   r  r   s       rA   _setupzTestDilateFix._setup
  s    ZZ!0!0!0!0	!2 :<	   C C
 WWV__
,TZ4:NNN
B<< 	;(oobh77DOOO$Z007F$fZ::DOOOrC   c                     |                      |           t          j        | j        | j                  }t          || j        dz              d S )NrU  r   )r  r   r'  r  r  r	   r  r;   r<   results      rA   test_dilation_square_structurez,TestDilateFix.test_dilation_square_structure
  sG    B&tzTZHHH!&$/A*=>>>>>rC   c                     |                      |           t          j        | j        d          }t	          || j                   d S )Nr)   )ro  )r  r   r'  r  r	   r  r  s      rA   test_dilation_scalar_sizez'TestDilateFix.test_dilation_scalar_size
  s@    B&tz:::!&$/:::::rC   N)r  r  r  r  r  r  r  rC   rA   r  r  
  sA        ; ; ;$? ? ?; ; ; ; ;rC   r  c                        e Zd Zd Zd Zd ZdS )TestBinaryOpeningClosingc                 `   t          j        dt                    }d|ddddf<   d|d<   |                    |          | _        |                    d          | _        t          j        | j        | j        dd d          | _	        t          j
        | j        | j        dd d          | _        d S )	Nr-   r-   r   Tr   r#   )r#   r#   r   r   )r]   rY   r   r8   r  r   r  r   r  
opened_oldr  
closed_old)r;   r<   r]  s      rA   r  zTestBinaryOpeningClosing._setup  s    HV4(((!A#qs($ZZ]]
WWV__
!0TZ12D!= =!0TZ12D!= =rC   c           
          |                      |           t          j        | j        | j        dd dd dd          }t          || j                   d S Nr   r   F)r  r   r  r  r  r   r  )r;   r<   
opened_news      rA   test_opening_new_argumentsz3TestBinaryOpeningClosing.test_opening_new_arguments  P    B+DJ
At,-tQ? ?

DO44444rC   c           
          |                      |           t          j        | j        | j        dd dd dd          }t          || j                   d S r  )r  r   r  r  r  r   r  )r;   r<   
closed_news      rA   test_closing_new_argumentsz3TestBinaryOpeningClosing.test_closing_new_arguments  r  rC   N)r  r  r  r  r  r  r  rC   rA   r  r    sA        	= 	= 	=5 5 55 5 5 5 5rC   r  c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S Nr   g      ?ra        ?)r   rr   rb  r   r   r<   r=   s     rA   )test_binary_erosion_noninteger_iterationsr    O     77A3<<D)W3TcJJJJ)W3TcJJJJJJrC   c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S r  )r   rr   rb  r   rm  r  s     rA   *test_binary_dilation_noninteger_iterationsr  %  sO     77A3<<D)W4dsKKKK)W4dsKKKKKKrC   c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S r  )r   rr   rb  r   r  r  s     rA   )test_binary_opening_noninteger_iterationsr  -  r  rC   c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S r  )r   rr   rb  r   r  r  s     rA   )test_binary_closing_noninteger_iterationsr  5  r  rC   c           
         t          |           rt          j        d           |                     dg          }t	          t          j        |dd          t          j        |dt          d                               t	          t          j        |dd          t          j        |dt          d                               d S )Nr*  r   r"   r  )r0  r[  r   )r   rp   rq   r   r   r   r   r   r  s     rA   ;test_binary_closing_noninteger_brute_force_passes_when_truer  =  s     r{{ NLMMM77A3<<DG*4A3OOO*4A4PS99UUU   G*4A3OOO*4A4PS99UUU    rC   function)r   rm  r  r  r0  r-   r[  Fc                 p   t           j                            d          }|                    ddd                              t
                    }t          t          |           }|                                } ||||          }t          ||            |||||           t          ||           d S )N{   r   r"   d   lowhighro  )r[  r0  )r[  r0  r6  )
r]   randomRandomStaterandintr   r   r7   r   copyr   )	r  r0  r[  r<   rstater=   ndi_func	data_origr@   s	            rA   test_binary_input_as_outputr  M  s     Y""3''F>>aac>2299$??Dw))H 		Ix+*MMMHD)$$$ HT{z$OOOOHd#####rC   c                    t          |           s#t          |           st          j        d           t          j                            d          }|                    ddd                              t                    }|
                                }t          j        |          }t          ||           t          j        ||           t          ||           d S )Nrt  r  r   r"   r  r  ru  )r   r   rp   rq   r]   r  r  r  r   r   r  r   r  r   )r<   r  r=   r  r@   s        rA   'test_binary_hit_or_miss_input_as_outputr  b  s    RLL :GBKK :8999Y""3''F>>aac>2299$??D 		I)$//HD)$$$ tD1111Hd#####rC   c                 
   t          |           rt          j        d           d}t          j        t          |          5  t          j        |                     d          d           d d d            d S # 1 swxY w Y   d S )Nz)CuPy does not have distance_transform_cdtzinvalid metric provided)matchr  garbager   )r   rp   rq   r
   
ValueErrorr   rz   r   )r<   msgs     rA   *test_distance_transform_cdt_invalid_metricr  s  s    r{{ B@AAA
#C	z	-	-	- 9 9&rwwv.7	9 	9 	9 	99 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   *A88A<?A<)$numpyr]   scipy._lib._array_apir   r   r   r   r   r   r	   rp   r
   rr   scipyr    r   scipy.conftestr   r  r   r   usefixtures
pytestmarkr   r  r  r  r  r  r  r  r  r  r  r  r  rC   rA   <module>r     s                         * * * * * *             / / / / / /;/ K1 "FK$;$;<N$O$Ok%%&9::&+9NPPPR

I+1 I+1 I+1 I+1 I+1 I+1 I+1 I+1XV; ; ; ; ; ; ; ;D5 5 5 5 5 5 5 54K K KL L LK K KK K K    MMM  1v..66$ $ 76 /.	 $$ $ $"9 9 9 9 9rC   