
    Ui              	          d dl Zd dl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 ej        j        Zej        j        Z 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 edd          d             Z eddgd           edd          ej                            dg d          ej                            dddg          ej                            dd dg          d!                                                             Z eddgd          d"             Z edd#          d$             ZdS )%    N)is_cupyis_numpyxp_assert_closexp_assert_equalassert_array_almost_equal)raises)ndimage   )typesT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 edd          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
          d             Z edd           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          d              Z edd
          d!             Z edd"
          d#             Z edd"
          d$             Z edd"
          d%             Z edd"
          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           edd/          d0                         Z'ej                            de          d1             Z(ej                            de          d2             Z)ej                            de          d3             Z*ej                            de          d4             Z+ej                            de          d5             Z,ej                            de          d6             Z-ej                            de          d7             Z.ej                            de          d8             Z/ej                            de          d9             Z0ej                            de          d:             Z1ej                            de          d;             Z2ej                            de          d<             Z3ej                            de          d=             Z4ej                            de          d>             Z5ej                            de          d?             Z6ej                            de          d@             Z7ej                            de          dA             Z8ej                            de          dB             Z9ej                            de          dC             Z:ej                            de          dD             Z;ej                            de          dE             Z< eddF          dG             Z= eddgdHI           eddJ          dK                         Z> eddF          dL             Z? eddgdHI           eddJ          dM                         Z@ eddgdHI          dN             ZA eddJ          dO             ZB eddJ          dP             ZCdQ ZD eddgdHI          dR             ZE eddJ          dS             ZF eddgdHI           eddJ          dT                         ZGdU ZH eddgdHI           eddJ          dV                         ZI eddgdHI           eddJ          dW                         ZJej                            de          dX             ZKej                            de          dY             ZLej                            de          dZ             ZMej                            de          d[             ZNej                            de          d\             ZOej                            de          d]             ZPej                            de          d^             ZQej                            de          d_             ZRej                            de          d`             ZSej                            de          da             ZTej                            de          db             ZUej                            de          dc             ZVej                            de          dd             ZWej                            de          de             ZXej                            de          df             ZYej                            de          dg             ZZej                            de          dh             Z[ej                            de          di             Z\ej                            de          dj             Z]ej                            de          dk             Z^ej                            de          dl             Z_ej                            de          dm             Z`ej                            de          dn             Zaej                            de          do             Zbej                            de          dp             Zcej                            de          dq             Zdej                            de          dr             Zeej                            de          ds             Zfej                            de          dt             Zg eddJ          du             Zh eddgdvI           eddJ          dw                         Zi eddJ          dx             Zj eddgdvI           eddJ          dy                         Zk eddJ          dz             Zl eddgd{I           eddJ          d|                         Zmej                            de          d}             Znd~ Zod Zpd Zqd Zrej                            de          d             Zsej                            de          d             Ztej                            de          d             Zuej                            de          d             Zvd Zwd Zxd Zy ed           edd           edd          ej                            dddg          ej                            dddg          ej                            dg d          ej                            dg d          d                                                                                     Zzd Z{ edd           edd           edd          d                                     Z|d Z}d Z~d Zd Zd Zd Zd Zd Zd Z eddv
          d             Zd Z eddv
          d             Zd Z edd           edd          d                         Zd Z edd          d             Z edd           edd          d                         Z edd           edd          d                         Zd Z edd          d             Z edd           edd          d                         Z ed           edd           edd          ej                            dddg          ej                            dg d          ej                            dg d          ej                            dg d          ej                            dg d          d                                                                                                 Z eddgdI          ej                            de          d                         Zej                            de          d             Zej                            de          d             ZdS )TestNdimageMorphologyr   z)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          {/var/www/development/aibuddy-work/election-extract/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*   r+   r,   r-   r.   	r   r
   r
   r
   r   r)   r)   r)   r    r1   r5   s          r<   test_distance_transform_bf02z2TestNdimageMorphology.test_distance_transform_bf02F   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''!"h/////r>   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   rA   r!   r"   )	r$   r$   r   r   r   r   r   r$   r$   )	r   r   r(   r&   r&   r&   r(   r   r   r'   r*   r+   r,   r-   	r   r
   r   r   r(   r&   r&   r)   r    	r   r
   r
   r   r&   r&   r)   r)   r    )	r   r
   r
   r   r&   r)   r)   r)   r    )	r   r
   r   r   r&   r&   r)   r)   r    )	r   r
   r   r   r(   r&   r&   r)   r    r1   r5   s          r<   test_distance_transform_bf03z2TestNdimageMorphology.test_distance_transform_bf03x   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/////r>   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rN   r   indicesrL   r   r   rP   rL   r   rP   )r2   r3   r	   r4   zerosshapefloat64appendnprP   int32r   
r6   r   r7   r8   tdttftdtsftsdtr:   s
             r<   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....	/ 	/r>   z(CuPy does not have distance_transform_bfc                    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   rd       rd   r   r   r   r!   r"   r#   r%   r'   r*   r+   r,   r-   r.   r/   r0   r1   r5   s          r<   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/////r>   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
   rb   )	r   r   r   r
   r   r
   r   r   r   r   )	r   r   r
   r   	   r   r
   r   r   r!   )	r   r   r   r   r   r   r   r   r   )	r$   r$   r$   r$   r   r$   r$   r$   r$   )	r   r   r   r   r   r   r   r   r   )	r(   r(   r(   r(   r&   r(   r(   r(   r(   )	r&   r&   r&   r&   r)   r&   r&   r&   r&   r+   r,   r-   )	r   r
   r   r   r&   r&   r&   r)   r    r0   )	r   r
   r
   r
   r)   r)   r)   r)   r    r.   r1   r5   s          r<   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/////r>   c                     |                     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   FrM   )r3   assert_raisesRuntimeErrorr	   r4   )r6   r7   r8   s      r<   test_distance_transform_bf07z2TestNdimageMorphology.test_distance_transform_bf07B  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 <(( 	 	)uU   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A**A.1A.)CuPy does not have distance_transform_cdtc                    t          ||          }|                    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 )Nr   r   r   r   r@   Tr   r!   	r   r   r   r
   r
   r
   r   r   r   )	r$   r$   r   r
   r
   r
   r   r$   r$   )	r   r   r   r   r
   r   r   r   r   )	r(   r(   r(   r(   r)   r)   r&   r(   r(   	r&   r&   r&   r&   r)   r)   r&   r&   r&   r+   r,   r-   rB   )	r   r
   r
   r
   r   r(   r&   r)   r    )	r   r
   r   r   r   r(   r&   r)   r    r2   r3   r	   distance_transform_cdtr4   r   r6   r   r7   r8   r9   r:   bfr;   s           r<   test_distance_transform_cdt01z3TestNdimageMorphology.test_distance_transform_cdt01S  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+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/////r>   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          \  }}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 )Nr   r   r   r   rE   Tr   r!   rp   )	r$   r$   r   r   r
   r   r   r$   r$   )	r   r   r$   r   r   r   r$   r   r   )	r(   r(   r   r&   r)   r&   r   r(   r(   rq   r+   r,   r-   )	r   r
   r   r   r$   r   r&   r)   r    )	r   r
   r
   r   r   r&   r&   r)   r    )	r   r
   r
   r
   r   r&   r)   r)   r    rG   rF   rr   rt   s           r<   test_distance_transform_cdt02z3TestNdimageMorphology.test_distance_transform_cdt02|  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|@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/////r>   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   rK   FrM   rO   rQ   rR   rS   )r2   r3   r	   rs   rT   rU   rY   rW   rX   rP   r   rZ   s
             r<   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....	/ 	/r>   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   TFrO   )	r3   rT   ndimrU   rY   rk   rl   r	   r4   )r6   r7   r8   indices_outs       r<   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torchzint overflowc                    t          ||          }|                    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 )Nr   r   r   r   r$   r$   metrici)r2   r3   onesr	   rs   sum)r6   r   r7   r8   
metric_argactuals         r<   test_distance_transform_cdt05z3TestNdimageMorphology.test_distance_transform_cdt05  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 WWV__
/ZHHHvvf~~$$$$$$r>   c                    t          ||          }|                    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 )Nr   r   r   r   Tr   r   r
   r   axis)r2   r3   r	   distance_transform_edtr4   r   rX   rP   rU   r   astyperV   multiplyaddreducesqrt)	r6   r   r7   r8   r9   r:   ru   np_ftr_   s	            r<   test_distance_transform_edt01z3TestNdimageMorphology.test_distance_transform_edt01  so    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dKKKR*4==!"c*** 
2RZABBu{CCCCYYrz""
BBV]]2A]&&
BZZ^^!"b)))))r>   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   rK   r   rM   FrO   rQ   rR   rS   )r2   r3   r	   r   rT   rU   rV   rW   rX   rP   rY   r   rZ   s
             r<   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....	/ 	/r>   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g          }t          j        |ddg          }t          ||           d S )Nr   r   r   r   r   r   rc   r2   r3   r	   r4   r   r   r6   r   r7   r8   refr9   s         r<   test_distance_transform_edt03z3TestNdimageMorphology.test_distance_transform_edt03a       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 +D+AOOO,TQFCCC!#s+++++r>   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g          }t          j        |ddg          }t          ||           d S )	Nr   r   r   r   r   r   r
   r   r   r   s         r<   test_distance_transform_edt4z2TestNdimageMorphology.test_distance_transform_edt4s  r   r>   z8Only 2D and 3D distance transforms are supported in CuPyc                     t          j        |                    d                    }t          ||                    dg                     d S )NF        )r	   r   r3   r   )r6   r7   r9   s      r<   test_distance_transform_edt5z2TestNdimageMorphology.test_distance_transform_edt5  sD    
 ,RZZ->->??!#rzz2$'7'788888r>   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   rN   rL   )r3   rT   rU   rV   rk   rl   r	   r4   )r6   r7   r8   distances_outs       r<   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z8generate_binary_structure always generates numpy objectsc                 @    t          j        dd          }|dk    sJ d S )Nr   r
   )r	   generate_binary_structurer6   r7   structs      r<   test_generate_structure01z/TestNdimageMorphology.test_generate_structure01  s'     21a88{{{{{{r>   c                 T    t          j        dd          }t          |g d           d S )Nr
   r
   r
   r
   r	   r   r   r   s      r<   test_generate_structure02z/TestNdimageMorphology.test_generate_structure02  s0     21a88!&)))44444r>   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      r<   test_generate_structure03z/TestNdimageMorphology.test_generate_structure03  M     21a88!&999+499+499+6 	7 	7 	7 	7 	7r>   c                 b    t          j        dd          }t          |g dg dg dg           d S )Nr   r   r   r   s      r<   test_generate_structure04z/TestNdimageMorphology.test_generate_structure04  r   r>   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   r3   r	   iterate_structurerX   boolr   r6   r7   r   r9   r;   s        r<   test_iterate_structure01z.TestNdimageMorphology.test_iterate_structure01  s    )))))) F##'22:....	0 8<	= = =
 ::h''!#x00000r>   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        r<   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0r>   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        r<   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r>   c                     t          ||          }|                    g |          }t          j        |          }||                    d|j                  k    sJ d S Nr   r
   r2   r   r	   binary_erosionr3   r   r6   r   r7   r8   r9   s        r<   test_binary_erosion01z+TestNdimageMorphology.test_binary_erosion01  s_    E""wwrw''$T**bjj#)j44444444r>   c                     t          ||          }|                    g |          }t          j        |d          }||                    d|j                  k    sJ d S )Nr   r
   border_valuer   r   s        r<   test_binary_erosion02z+TestNdimageMorphology.test_binary_erosion02  sd    E""wwrw''$T:::bjj#)j44444444r>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    dg                     d S Nr
   r   r   r2   r   r	   r   r   r3   r   s        r<   test_binary_erosion03z+TestNdimageMorphology.test_binary_erosion03  sZ    E""wws%w(($T**!#rzz1#77777r>   c                     t          ||          }|                    dg|          }t          j        |d          }t	          ||                    dg                     d S Nr
   r   r   r   r   s        r<   test_binary_erosion04z+TestNdimageMorphology.test_binary_erosion04  s_    E""wws%w(($T:::!#rzz1#77777r>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S )Nr$   r   r   r   r   s        r<   test_binary_erosion05z+TestNdimageMorphology.test_binary_erosion05	  s^    E""wws%w(($T**!#rzz)))'<'<=====r>   z(https://github.com/cupy/cupy/issues/8912c                     t          ||          }|                    d|          }|                    |d          }t          j        |          }t          ||                    g d                     d S )Nr
   r   r$   r   )r2   r   broadcast_tor	   r   r   r3   r   s        r<   !test_binary_erosion05_broadcastedz7TestNdimageMorphology.test_binary_erosion05_broadcasted  sq     E""wwuEw**tU++$T**!#rzz)))'<'<=====r>   c                     t          ||          }|                    dg|          }t          j        |d          }t	          ||                    g d                     d S Nr$   r   r
   r   r   r   r   s        r<   test_binary_erosion06z+TestNdimageMorphology.test_binary_erosion06  sc    E""wws%w(($T:::!#rzz)))'<'<=====r>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S )Nr(   r   r   r   r   s        r<   test_binary_erosion07z+TestNdimageMorphology.test_binary_erosion07   s^    E""wws%w(($T**!#rzz///'B'BCCCCCr>   c                     t          ||          }|                    dg|          }t          j        |d          }t	          ||                    g d                     d S )Nr(   r   r
   r   r   r   r   s        r<   test_binary_erosion08z+TestNdimageMorphology.test_binary_erosion08'  sc    E""wws%w(($T:::!#rzz///'B'BCCCCCr>   c                     t          j        dg|          }d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr(   r   r   r   r   r   r   r   r   rX   r   r3   r	   r   r   r   s        r<   test_binary_erosion09z+TestNdimageMorphology.test_binary_erosion09.  sh    ws%(((Qzz$$T**!#rzz///'B'BCCCCCr>   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        r<   test_binary_erosion10z+TestNdimageMorphology.test_binary_erosion106  sm    ws%(((Qzz$$T:::!#rzz///'B'BCCCCCr>   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   r6   r   r7   r8   r   r9   s         r<   test_binary_erosion11z+TestNdimageMorphology.test_binary_erosion11>  s    ws%(((Qzz$III&&$T6BBB!#rzz///'B'BCCCCCr>   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         r<   test_binary_erosion12z+TestNdimageMorphology.test_binary_erosion12G  s    ws%(((Qzz$III&&$T6"MMM!#rzz///'B'BCCCCCr>   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         r<   test_binary_erosion13z+TestNdimageMorphology.test_binary_erosion13P  s    ws%(((Qzz$III&&$T6!LLL!#rzz///'B'BCCCCCr>   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         r<   test_binary_erosion14z+TestNdimageMorphology.test_binary_erosion14Y  s    ws%(((Qzz$QF##$T6BBB!#rzz///'B'BCCCCCr>   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         r<   test_binary_erosion15z+TestNdimageMorphology.test_binary_erosion15b  s    ws%(((Qzz$QF##$T6"MMM!#rzz///'B'BCCCCCr>   c                     t          ||          }|                    ddg|          }t          j        |d          }t	          ||                    dgg                     d S r   r   r   s        r<   test_binary_erosion16z+TestNdimageMorphology.test_binary_erosion16k  se    E""ww1vUw++$T:::!#rzzA3%'8'899999r>   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    dgg                     d S r   r   r   s        r<   test_binary_erosion17z+TestNdimageMorphology.test_binary_erosion17r  s`    E""ww1vUw++$T**!#rzzA3%'8'899999r>   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg                     d S )Nr
   r$   r   r   r   r   r   r   s        r<   test_binary_erosion18z+TestNdimageMorphology.test_binary_erosion18y  sb    E""ww1vUw++$T**!#rzz999+'>'>?????r>   c                     t          ||          }|                    ddg|          }t          j        |d          }t	          ||                    g dg                     d S )Nr
   r$   r   r   r   r   r   s        r<   test_binary_erosion19z+TestNdimageMorphology.test_binary_erosion19  sg    E""ww1vUw++$T:::!#rzz999+'>'>?????r>   c           	          t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg dg dg                     d S )Nr$   r   r   r   r   r   s        r<   test_binary_erosion20z+TestNdimageMorphology.test_binary_erosion20  s    E""ww1vUw++$T**!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@r>   c           	          t          ||          }|                    ddg|          }t          j        |d          }t	          ||                    g dg dg dg                     d S r   r   r   s        r<   test_binary_erosion21z+TestNdimageMorphology.test_binary_erosion21  s    E""ww1vUw++$T:::!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@r>   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   r2   r3   r	   r   r   r6   r   r7   r;   r8   r9   s         r<   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0r>   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   )r2   r	   r   r3   r   r   r6   r   r7   r   r;   r8   r9   s          r<   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0r>   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          r<   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0r>   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          r<   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0r>   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          r<   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0r>   5CuPy: NotImplementedError: only brute_force iterationc           
      x   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   
iterationsr3   rX   r   r	   r   r   r6   r7   r   r;   r8   r9   s         r<   test_binary_erosion27z+TestNdimageMorphology.test_binary_erosion27  s4    )))))) 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0r>   z)inplace out= arguments are numpy-specificrI   r   r   /NotImplementedError: only brute_force iterationc           
         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   r.  outputr3   rX   r   rT   rU   r	   r   r   r0  s         r<   test_binary_erosion28z+TestNdimageMorphology.test_binary_erosion285  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0r>   c           
      x   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/  r0  s         r<   test_binary_erosion29z+TestNdimageMorphology.test_binary_erosion29U  s7    )))))) 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0r>   c           
      l   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$   r5  r7  r0  s         r<   test_binary_erosion30z+TestNdimageMorphology.test_binary_erosion30q  s   
 )))))) 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1r>   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   r.  r6  r   r7  r0  s         r<   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0r>   c           
      x   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(  r/  r0  s         r<   test_binary_erosion32z+TestNdimageMorphology.test_binary_erosion32  s7    )))))) 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0r>   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|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   maskr.  r/  r6   r7   r   r;   rI  r8   r9   s          r<   test_binary_erosion33z+TestNdimageMorphology.test_binary_erosion33  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$2O O O!#x00000r>   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   rI  r/  rJ  s          r<   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0r>   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+  rM  r   r*  r,  r:  r?  r@  rA  rB  r
   r$  )r   r.  r6  r   rI  )r3   rX   r   logical_andlogical_not
logical_orrT   rU   r	   r   r   )r6   r7   r   rI  r8   tmpr;   r9   s           r<   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0r>   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         |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$  )rI  r   r   )	r3   rX   r   rP  rQ  rR  r	   r   r   )r6   r7   r   rI  rS  r8   r;   r9   s           r<   test_binary_erosion36z+TestNdimageMorphology.test_binary_erosion36>  s    )))))) 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0r>   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  r.  r   brute_force)rY  r.  r   )rX   r3   r   
zeros_liker	   r   r   )r6   r7   abr9   s        r<   test_binary_erosion37z+TestNdimageMorphology.test_binary_erosion37i  s    
 J			!		!		#*.0 0 0 JJqMMMM!$Q!A!26DJ J Jaxxxx"1a046 6 6	 	 	 	 	r>   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       @r.  )rX   r3   r   rk   	TypeErrorr	   r   )r6   r7   r8   r.  _s        r<   test_binary_erosion38z+TestNdimageMorphology.test_binary_erosion38{  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  )	rX   rY   r3   r   rT   rU   r	   r   r   r6   r7   r.  r   r;   r8   r9   s          r<   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0r>   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 re  )	rX   int64r3   r   rT   rU   r	   r   r   rf  s          r<   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0r>   c                     t          ||          }|                    g |          }t          j        |          }||                    d|j                  k    sJ d S r   )r2   r   r	   binary_dilationr3   r   r   s        r<   test_binary_dilation01z,TestNdimageMorphology.test_binary_dilation01  s_    E""wwrw''%d++bjj#)j44444444r>   c                     t          ||          }|                    g |          }t          j        |          }||                    d          k    sJ d S )Nr   F)r2   rT   r	   rl  r3   r   s        r<   test_binary_dilation02z,TestNdimageMorphology.test_binary_dilation02  sY    E""xx%x((%d++bjj''''''''r>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    dg|j                             d S Nr
   r   )r2   r   r	   rl  r   r3   r   r   s        r<   test_binary_dilation03z,TestNdimageMorphology.test_binary_dilation03  sb    E""wws%w((%d++!#rzz1#SYz'G'GHHHHHr>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    dg                     d S r   r2   rT   r	   rl  r   r3   r   s        r<   test_binary_dilation04z,TestNdimageMorphology.test_binary_dilation04  sZ    E""xx5x))%d++!#rzz1#77777r>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S Nr$   r   r   r2   r   r	   rl  r   r3   r   s        r<   test_binary_dilation05z,TestNdimageMorphology.test_binary_dilation05  s^    E""wws%w((%d++!#rzz)))'<'<=====r>   c                     t          ||          }|                    d|          }|                    |d          }t          j        |          }t          ||                    g d                     d S )Nr   r   r   r   )r2   r   r   r	   rl  r   r3   r   s        r<   "test_binary_dilation05_broadcastedz8TestNdimageMorphology.test_binary_dilation05_broadcasted  so    E""wwuEw**tT**%d++!#rzz)))'<'<=====r>   c                     t          ||          }|                    dg|          }t          j        |          }t	          ||                    g d                     d S )Nr$   r   r   rt  r   s        r<   test_binary_dilation06z,TestNdimageMorphology.test_binary_dilation06  s^    E""xx5x))%d++!#rzz)))'<'<=====r>   c                     t          j        dg|          }d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr$   r   r
   r   rX   rT   r3   r	   rl  r   r   s        r<   test_binary_dilation07z,TestNdimageMorphology.test_binary_dilation07  sh    x5)))Qzz$%d++!#rzz)))'<'<=====r>   c                     t          j        dg|          }d|d<   d|d<   |                    |          }t          j        |          }t          ||                    g d                     d S )Nr(   r   r
   r$   r   r  r   s        r<   test_binary_dilation08z,TestNdimageMorphology.test_binary_dilation08   sq    x5)))QQzz$%d++!#rzz///'B'BCCCCCr>   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        r<   test_binary_dilation09z,TestNdimageMorphology.test_binary_dilation09	  sh    x5)))Qzz$%d++!#rzz///'B'BCCCCCr>   c                     t          j        dg|          }d|d<   |                    |          }t          j        |d          }t          ||                    g d                     d S )Nr(   r   r
   r   r   r   r  r   s        r<   test_binary_dilation10z,TestNdimageMorphology.test_binary_dilation10  sm    x5)))Qzz$%d2666!#rzz///'B'BCCCCCr>   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        r<   test_binary_dilation11z,TestNdimageMorphology.test_binary_dilation11  sm    x5)))Qzz$%d1555!#rzz///'B'BCCCCCr>   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         r<   test_binary_dilation12z,TestNdimageMorphology.test_binary_dilation12!  s    x5)))Qzz$III&&%dF33!#rzz///'B'BCCCCCr>   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         r<   test_binary_dilation13z,TestNdimageMorphology.test_binary_dilation13*  s    x5)))Qzz$III&&%dFCCC!#rzz///'B'BCCCCCr>   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         r<   test_binary_dilation14z,TestNdimageMorphology.test_binary_dilation143  s    x5)))Qzz$III&&%dF2>>>!#rzz///'B'BCCCCCr>   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         r<   test_binary_dilation15z,TestNdimageMorphology.test_binary_dilation15<  s    x5)))Qzz$III&&%dF-/aA A A!#rzz///'B'BCCCCCr>   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    dgg                     d S rq  rx  r   s        r<   test_binary_dilation16z,TestNdimageMorphology.test_binary_dilation16F  s`    E""ww1vUw++%d++!#rzzA3%'8'899999r>   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    dgg                     d S r   rt  r   s        r<   test_binary_dilation17z,TestNdimageMorphology.test_binary_dilation17M  s`    E""xxAex,,%d++!#rzzA3%'8'899999r>   c                     t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg                     d S )Nr
   r$   r   r   rx  r   s        r<   test_binary_dilation18z,TestNdimageMorphology.test_binary_dilation18T  sb    E""ww1vUw++%d++!#rzz999+'>'>?????r>   c           	          t          ||          }|                    ddg|          }t          j        |          }t	          ||                    g dg dg dg                     d S rw  rx  r   s        r<   test_binary_dilation19z,TestNdimageMorphology.test_binary_dilation19[  s    E""ww1vUw++%d++!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@r>   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        r<   test_binary_dilation20z,TestNdimageMorphology.test_binary_dilation20d  s    xAe,,,T
zz$%d++!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@r>   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   r3   rX   rT   rl  r   )r6   r   r7   r   r8   r9   s         r<   test_binary_dilation21z,TestNdimageMorphology.test_binary_dilation21n  s    21a88F##xAe,,,T
zz$%dF33!#rzz9993<993<993> (? (? 	@ 	@ 	@ 	@ 	@r>   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   r2   r3   r	   rl  r   r  s         r<   test_binary_dilation22z,TestNdimageMorphology.test_binary_dilation22z  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0r>   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         r<   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0r>   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         r<   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0r>   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         r<   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0r>   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   )r2   r	   r   r3   rl  r   r  s          r<   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0r>   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          r<   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0r>   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         r<   test_binary_dilation28z,TestNdimageMorphology.test_binary_dilation28	  s    E"" LL LL LL LL" ::h''zz<<<'<<'<<'<<) 16  7 7 %d;;;!#x00000r>   c                 X   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`  r3   rX   r   r	   rl  r   r0  s         r<   test_binary_dilation29z,TestNdimageMorphology.test_binary_dilation29       a&a&#OO#OO#OO#OO#OO	%
 F##::h''z???*??*??*??*??	, 48	9 9 9
 zz$%dFqAAA!#x00000r>   z!output= arrays are numpy-specificc                    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.  r6  )r3   r   rX   rT   rU   r	   rl  r   r0  s         r<   test_binary_dilation30z,TestNdimageMorphology.test_binary_dilation30-  s   
 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0r>   c                 X   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  r0  s         r<   test_binary_dilation31z,TestNdimageMorphology.test_binary_dilation31F  r  r>   c                    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  r3   rX   r   rT   rU   r	   rl  r   r0  s         r<   test_binary_dilation32z,TestNdimageMorphology.test_binary_dilation32[  s   
 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0r>   c                 H   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   rV  r  r   r   r   r   r   r   r   r
   r   r   r   r.  rI  r   r  rJ  s          r<   test_binary_dilation33z,TestNdimageMorphology.test_binary_dilation33t  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$%dFr+/aA A A!#x00000r>   z)inplace output= arrays 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 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  rJ  s          r<   test_binary_dilation34z,TestNdimageMorphology.test_binary_dilation34  se   
 )))))) 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0r>   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
   )rI  r   r   )
r2   rX   r3   r   rP  rQ  rR  r	   rl  r   )r6   r   r7   rS  r8   rI  r;   r9   s           r<   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0r>   c                     t          j        g t                    }|                    |          }t	          j        |d          }||                    d          k    sJ d S )Nr   r   r`  F)rX   rT   r   r3   r	   rl  )r6   r7   r8   r9   s       r<   test_binary_dilation36z,TestNdimageMorphology.test_binary_dilation36  s_    x$'''zz$%dr:::bjj''''''''r>   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  rV  r  r   r  r   rI  r   )r3   rX   r   r	   binary_propagationr   rJ  s          r<   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0r>   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  )r3   rX   r   rT   rU   r	   r  r   rJ  s          r<   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0r>   c                     |                     t          j        g t                              }|                     t          j        g t                              }t	          j        |          }||k    sJ d S )Nr   )r3   rX   rT   r   r	   r  )r6   r7   r8   r;   r9   s        r<   test_binary_propagation03z/TestNdimageMorphology.test_binary_propagation034  sc    zz"(2T22233::bhr66677(..hr>   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   )r2   r3   r	   binary_openingr   r  s         r<   test_binary_opening01z+TestNdimageMorphology.test_binary_opening01;     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0r>   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   )r2   r	   r   r3   r  r   r  s          r<   test_binary_opening02z+TestNdimageMorphology.test_binary_opening02R  -   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0r>   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   )r2   r3   r	   binary_closingr   r  s         r<   test_binary_closing01z+TestNdimageMorphology.test_binary_closing01k  r  r>   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   )r2   r	   r   r3   r  r   r  s          r<   test_binary_closing02z+TestNdimageMorphology.test_binary_closing02  r  r>   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
  rX   r3   r   r	   binary_fill_holesr   r6   r7   r;   r8   r9   s        r<   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0r>   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        r<   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0r>   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        r<   test_binary_fill_holes03z.TestNdimageMorphology.test_binary_fill_holes03  r  r>   )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   rl  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  )rX   r3   r   dictpytestskipr2   r	   stackremover   r   rT   rU   r   )r6   r7   r  r  r   r   r   r8   kwargsborder_supportedfuncr;   n_repsr  r9   s                  r<   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&&&&&r>   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&   rh   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
   r3   r	   grey_erosionr   r6   r7   arrayr  r6  s        r<   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r>   z!output=array requires buffer viewz
dask.arrayz(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  )r6   r7   r  r  s       r<   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.? #@ #@	
 	
 	
 	
 	
r>   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  rY  r  r  r  r  r6   r7   r  r  rY  r6  s         r<   test_grey_erosion02z)TestNdimageMorphology.test_grey_erosion02.	      

OOO+OO+OO- . . JJ			999566	JJ			999566	%ey09; ; ;!&"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
r>   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         r<   test_grey_erosion03z)TestNdimageMorphology.test_grey_erosion03<	  r!  r>   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)   rh   rh   r(   r)   rh   r    rh   r)   r    r    r    r)   r)   r3   r	   grey_dilationr   r  s        r<   test_grey_dilation01z*TestNdimageMorphology.test_grey_dilation01J	  s    

OOO+OO+OO- . . JJ			999566	&u	BBB!&"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
r>   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         r<   test_grey_dilation02z*TestNdimageMorphology.test_grey_dilation02V	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	&u	1:< < <!&"$**ooo.=oo.=oo.? #@ #@	
 	
 	
 	
 	
r>   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.  rh   r.  r    )rh   rh   rh   r    r    r(  r  s         r<   test_grey_dilation03z*TestNdimageMorphology.test_grey_dilation03d	  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	&u	1:< < <!&"$**.?.?.?.?.?.?.=oo.? #@ #@	
 	
 	
 	
 	
r>   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  r3   r	   r  r)  grey_openingr   r6   r7   r  r  rS  r;   r6  s          r<   test_grey_opening01z)TestNdimageMorphology.test_grey_opening01r	  s    

OOO+OO+OO- . . JJ			999566	"5I>>>(	BBB%eyAAA!&(33333r>   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  r2  r6   r7   r  r  rY  rS  r;   r6  s           r<   test_grey_opening02z)TestNdimageMorphology.test_grey_opening02|	  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3r>   c                    |                     g dg dg dg          }|                     g dg dg          }t          j        ||          }t          j        ||          }t          j        ||          }t          ||           d S r1  r3   r	   r)  r  grey_closingr   r4  s          r<   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!&(33333r>   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 r7  r;  r8  s           r<   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; ; ;!&(33333r>   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  rY  r6  )	r3   r	   r)  r  rT   rU   r   morphological_gradientr   	r6   r7   r  r  rY  tmp1tmp2r;   r6  s	            r<   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!&(33333r>   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 r7  )r3   r	   r)  r  rC  r   rD  s	            r<   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!&(33333r>   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   rB  )	r3   r	   r)  r  rT   rU   r   morphological_laplacer   rD  s	            r<   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!&(33333r>   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   )r3   r	   r)  r  rK  r   rD  s	            r<   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!&(33333r>   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 rA  )r3   r	   r3  rT   rU   r   white_tophatr   r8  s           r<   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!&(33333r>   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 r7  )r3   r	   r3  rP  r   r8  s           r<   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; ; ;!&(33333r>   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   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
   rY  )rX   r3   r   r   r	   rP  r   r6   r7   r  rY  r;   r6  s         r<   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)))))r>   c                 ,   t          j        dt                    }t          j        dt                    }|                    |          }|                    |          }|                    ||j                  }t          j        |||           d S Nr(   r   r   )rY  r6  )	rX   eyer   r   r3   
empty_likerV   r	   rP  r6   r7   r  rY  r6  s        r<   test_white_tophat04z)TestNdimageMorphology.test_white_tophat04
  s     q%%%GF$///	

5!!JJy))	 uBJ77UiGGGGGGr>   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 rA  )r3   r	   r<  rT   rU   r   black_tophatr   r8  s           r<   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!&(33333r>   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 r7  )r3   r	   r<  rb  r   r8  s           r<   test_black_tophat02z)TestNdimageMorphology.test_black_tophat025
  s    

OOO+OO+OO- . . JJ			999566	JJ			999566	"5I-68 8 8;%ey09; ; ;!&(33333r>   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 )NrU  r,  rV  rG  r   r   )r   r
   r
   r
   r
   r
   r
   )r
   r   r   r   r   r   r
   )r
   r   r   r   r
   r   r
   rH  rW  )rX   r3   r   r   r	   rb  r   rX  s         r<   test_black_tophat03z)TestNdimageMorphology.test_black_tophat03B
  rZ  r>   c                 $   |                     t          j        dt                              }|                     t          j        dt                              }|                    ||j                  }t          j        |||           d S r\  )	r3   rX   r]  r   r   r^  rV   r	   rb  r_  s        r<   test_black_tophat04z)TestNdimageMorphology.test_black_tophat04[
  s{     

26!400011JJrwvT:::;;	 uBJ77UiGGGGGGr>   mode)reflectconstantnearestmirrorwrapfootprint_mode)sizer  rY  )r  r)  r3  r<  rK  rC  rP  rb  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   rh   r$   r   r   r   )r   r   r   r   r   r   r   )r   rj  rq  )r   r$   r   r  r  rY  r(   r   r  r   r   r  )r3   r  	ones_liker2   r	   r  r  r   r   rT   rU   r   r   )r6   r7   r  r  r   rp  rj  r8   r  r	  r;   r
  r  r9   s                 r<   test_grey_axesz$TestNdimageMorphology.test_grey_axese
  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&&&&&r>   !inplace output= is numpy-specificc                    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 )Nr   r   r   )r   r
   r   r   r   r  r   )r   r   r
   r
   r
   r   )r   r
   r
   r
   r
   r   r6  )	r2   r3   rX   rT   rU   r   r	   r  r   r  s          r<   test_hit_or_miss01z(TestNdimageMorphology.test_hit_or_miss01
  s?    E"")))))) F###OO#OO#OO#OO#OO#OO#OO#OO% ::h''zz???*??*??*??*??*??*??*??, 49  : : jj$*D999::"4<<<<!#x00000r>   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   r2   r3   r	   r  r   r  s          r<   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!#x00000r>   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"  rz  r  r  r  r  r  r  r   r{  )r6   r   r7   struct1struct2r;   r8   r9   s           r<   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@@!#x00000r>   N)__name__
__module____qualname__xfail_xp_backendsr  markparametrizer   r=   rC   rH   skip_xp_backendsr`   rf   ri   rm   rv   rx   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%  r1  r8  r;  r=  rC  rE  rK  rN  rT  rW  r^  rc  rg  rj  rm  ro  rr  ru  ry  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r*  r,  r/  r5  r9  r=  r?  rG  rI  rL  rN  rQ  rS  rY  r`  rc  re  rg  ri  rt  rx  r|  r   r>   r<   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&PQQQ[We,,-0 -0 -, RQ-0^ v&PQQQ[We,,-0 -0 -, RQ-0^ v&PQQQ  RQ  v&QRRR[We,,%0 %0 -, SR%0N v&QRRR[We,,#0 #0 -, SR#0J I   [We,,// // -, //b R    ( v&QRRRw~666[We,,% % -, 76 SR%" v&PQQQ[We,,* * -, RQ*8 D   [We,,:/ :/ -, :/x v&PQQQ[We,,, , -, RQ,  v&PQQQ[We,,, , -, RQ,  Q  9 9 9
 R    ( dWY Y Y Y Y dWY Y Y5 5Y Y5 dWY Y Y7 7Y Y7 dWY Y Y7 7Y Y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,,v&PQQQ> > RQ -,> [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 N  1 1 12 dxHJ J JvOQ Q Q1 1Q QJ J18 N  1 1 12 dxHJ J JvOQ Q Q2 2Q QJ J2B dxHJ J J1 1J J18 vOQ Q Q1 1Q Q12 vOQ Q Q1 1Q Q1B1 1 1B dxHJ J J'1 '1J J'1R vOQ Q Q'1 '1Q Q'1R dxHJ J JvOQ Q Q Q QJ JD D D dxHJ J JvOQ Q Q1 1Q QJ J1: dxHJ J JvOQ Q Q1 1Q QJ J1: [We,,5 5 -,5 [We,,( ( -,( [We,,I I -,I [We,,8 8 -,8 [We,,> > -,> [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 vOQ Q Q1 1Q Q1& dx@B B BvOQ Q Q1 1Q QB B1* vOQ Q Q1 1Q Q1& dx@B B BvOQ Q Q1 1Q QB B1* vOQ Q Q#1 #1Q Q#1J dxHJ J JvOQ Q Q1 1Q QJ J18 [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*MNNNl+NOOOv&PQQQ
 
 RQ PO ON

 
 

 
 


 

 


 
 

 
 
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*MNNNl+NOOO4 4 PO ON44 4 4 vk222* * 32*0 k*MNNNl+NOOO	H 	H PO ON	H k*MNNNl+NOOO4 4 PO ON44 4 4 v&6777* * 87*0 k*MNNNl+NOOOH H PO ON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 dx@B B B[We,,1 1 -,B B16 [We,,1 1 -,1$ [We,,1 1 -,1 1 1r>   r   c                        e Zd Zd Zd Zd ZdS )TestDilateFixc                 z   |                     g dg dg dg dg dg|j                  | _        |                    d          | _        t          j        | j        | j                  }t          |          r!|                    |j                  | _	        d S |
                    ||j                  | _	        d S )Nr   r  r  r   r   rW  )r3   uint8r  r   sq3x3r	   rl  r   view
dilated3x3r   )r6   r7   r  s      r<   _setupzTestDilateFix._setup
  s    ZZ!0!0!0!0	!2 :<	   C C
 WWV__
,TZ4:NNN
B<< 	>(oobh77DOOO ii
BH==DOOOr>   c                     |                      |           t          j        | j        | j                  }t          || j        dz              d S )NrW  r
   )r  r	   r)  r  r  r   r  r6   r7   results      r<   test_dilation_square_structurez,TestDilateFix.test_dilation_square_structure  sG    B&tzTZHHH!&$/A*=>>>>>r>   c                     |                      |           t          j        | j        d          }t	          || j                   d S )Nr$   )rq  )r  r	   r)  r  r   r  r  s      r<   test_dilation_scalar_sizez'TestDilateFix.test_dilation_scalar_size  s@    B&tz:::!&$/:::::r>   N)r  r  r  r  r  r  r  r>   r<   r  r  
  sA        > > > ? ? ?; ; ; ; ;r>   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   )rX   rT   r   r3   r  r   r  r	   r  
opened_oldr  
closed_old)r6   r7   r\  s      r<   r  zTestBinaryOpeningClosing._setup  s    HV4(((!A#qs($ZZ]]
WWV__
!0TZ12D!= =!0TZ12D!= =r>   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  )r6   r7   
opened_news      r<   test_opening_new_argumentsz3TestBinaryOpeningClosing.test_opening_new_arguments  P    B+DJ
At,-tQ? ?

DO44444r>   c           
          |                      |           t          j        | j        | j        dd dd dd          }t          || j                   d S r  )r  r	   r  r  r  r   r  )r6   r7   
closed_news      r<   test_closing_new_argumentsz3TestBinaryOpeningClosing.test_closing_new_arguments!  r  r>   N)r  r  r  r  r  r  r  r>   r<   r  r    sA        	= 	= 	=5 5 55 5 5 5 5r>   r  c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S Nr
   g      ?r`        ?)r   rk   ra  r	   r   r7   r8   s     r<   )test_binary_erosion_noninteger_iterationsr  (  O     77A3<<D)W3TcJJJJ)W3TcJJJJJJr>   c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S r  )r   rk   ra  r	   rl  r  s     r<   *test_binary_dilation_noninteger_iterationsr  0  sO     77A3<<D)W4dsKKKK)W4dsKKKKKKr>   c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S r  )r   rk   ra  r	   r  r  s     r<   )test_binary_opening_noninteger_iterationsr  8  r  r>   c                     |                      dg          }t          t          t          j        |d           t          t          t          j        |d           d S r  )r   rk   ra  r	   r  r  s     r<   )test_binary_closing_noninteger_iterationsr  @  r  r>   r&  r   c           
      N   |                      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.  rZ  r   )r   r   r	   r   r   r  s     r<   ;test_binary_closing_noninteger_brute_force_passes_when_truer  H  s    
 77A3<<DG*4A3OOO*4A4PS99UUU   G*4A3OOO*4A4PS99UUU    r>   ru  r2  r3  function)r   rl  r  r  r.  r(   rZ  Fc                    t           j                            d          }|                    ddd                              t
                    }|                    |          }t          t          |           }|	                                } ||||          }t          ||            |||||           t          ||           d S )N{   r   r   d   lowhighrq  )rZ  r.  )rZ  r.  r6  )rX   randomRandomStaterandintr   r   r3   r2   r	   copyr   )	r  r.  rZ  r7   rstater8   ndi_func	data_origr;   s	            r<   test_binary_input_as_outputr  V  s     Y""3''F>>aac>2299$??D::dDw))H 		Ix+*MMMHD)$$$ HT{z$OOOOD(#####r>   c                    t           j                            d          }|                    ddd                              t
                    }|                     |          }|                                }t          j	        |          }t          ||           t          j	        ||           t          ||           d S )Nr  r   r   r  r  rw  )rX   r  r  r  r   r   r3   r  r	   r  r   )r7   r  r8   r  r;   s        r<   'test_binary_hit_or_miss_input_as_outputr  o  s     Y""3''F>>aac>2299$??D::dD 		I)$//HD)$$$ tD1111D(#####r>   rn   c                     d}t          j        t          |          5  t          j        |                     d          d           d d d            d S # 1 swxY w Y   d S )Nzinvalid metric provided)matchr  garbager   )r  r   
ValueErrorr	   rs   r   )r7   msgs     r<   *test_distance_transform_cdt_invalid_metricr    s     $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   *AAA)numpyrX   scipy._lib._array_apir   r   r   r   r   r  r   rk   scipyr	    r   r  r  r  
pytestmarkr   r  r  r  r  r  r  r  r  r  r  r  r  r>   r<   <module>r     s                     * * * * * *            ;/ K1 &+9NOOOP
Y+1 Y+1 Y+1 Y+1 Y+1 Y+1 Y+1 Y+1xV; ; ; ; ; ; ; ;@5 5 5 5 5 5 5 54K K KL L LK K KK K K 
J     $F8<> > >6"STTTMMM  1v..66$ $ 76 /.	  UT> >$  $F8<> > >$ $> >$ 6EG G G9 9G G9 9 9r>   