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

X3%%db9

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

2ZZ

"((3%%5r	K

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

2

2XXdjj

X3**Bt5

2

2ZZ

"((3**r3

2

2XXdjj

X3ZZ

"((3%%BtR	A

2

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

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

2ZZ

4::RXX>?&&5r	K

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

2

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

2

2ZZ

4::RXX>?++r3

2

2XXdjjX1ZZ

4::RXX>?&&tr6:B	H

2

2 	/B%c2.	/ 	/B%c2.	/rC   z3XXX: does not raise unless indices is a numpy arrayc                 @   |j                  g dg dg dg dg dg dg dg dg dg	      }|j                  |j                  f|j                  z   |j                        }t        t              5  t        j                  |dd|       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   TFrT   )	r8   rY   ndimrZ   r^   rr   rs   r   r9   )r;   r<   r=   indices_outs       rA   test_distance_transform_cdt04z3TestNdimageMorphology.test_distance_transform_cdt04  s    
 zz6666666668 9 hh		|djj8hI<( 	))!%$#		 	 	s   1BBc                 v   t        ||      }t        |      rt        j                  d       n t	        |      rt        j                  d       |j                  g dg dg dg dg dg dg dg dg dg	|      }|j                  d      }t        j                  ||      }|j                  |      d	k(  sJ y )
Nrv   zint overflowr   r   r   r   r)   r)   metrici)
r7   r   rp   rq   r   r8   onesr   rz   sum)r;   r   r<   r=   
metric_argactuals         rA   test_distance_transform_cdt05z3TestNdimageMorphology.test_distance_transform_cdt05  s    E"2;LLEFb\LL( zz6666666668 @E  F WWV_
//ZHvvf~$$$rC   c                    t        ||      }t        |      rt        j                  d       |j	                  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
  }|j                  t        j                        }t        j                  |||       t        j                   j#                  |d
      }t        j$                  ||       |j	                  |      }t        ||       y )N(CuPy does not have distance_transform_bfr   r   r   r   Tr    r   r   r   axis)r7   r   rp   rq   r8   r   distance_transform_edtr9   r	   r]   rU   rZ   r   astyper[   multiplyaddreducesqrt)	r;   r   r<   r=   r>   r?   r|   np_ftrd   s	            rA   test_distance_transform_edt01z3TestNdimageMorphology.test_distance_transform_edt01  s!   E"2;LLCD zz6666666668 @E  F 00dKR**4=!"c* 

2RZZABu{{CCYYrzz"
BBVV]]2A]&
BZZ^!"b)rC   z%inplace distances= are numpy-specificc                    t        ||      }|j                  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
                  |j                        }t        j                  ||       |j                  |       t        j                  |dd	      }	|j                  |	       t        j                  |j
                  |j                        }	|j                  |	      }	t        j                  |d
d|	       |j                  |	       t        j                  |d      \  }}	|j                  |       |j                  |	       |j	                  |j
                  |j                        }t        j                  ||d      }	|j                  |       |j                  |	       t        j                  |j
                  |j                        }	|j                  |	      }	t        j                  |d|	      }|j                  |       |j                  |	       |j	                  |j
                  |j                        }t        j                  |j
                  |j                        }	|j                  |	      }	t        j                  ||d|	       |j                  |       |j                  |	       |D ]  }t        ||        |D ]  }	t        ||	        y )Nr   r   r   r   Tr    rP   r   rR   FrT   rV   rW   rX   )r7   r8   r   r   rY   rZ   r[   r\   r]   rU   r^   r	   r_   s
             rA   test_distance_transform_edt02z3TestNdimageMorphology.test_distance_transform_edt02,  ss   
 E"zz6666666668 @E  F 11$tLSXXdjj

X3&&tr:

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

2ZZ

"((3ZZ^&&5r	K

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

2

2XXdjj

X3++Bt5

2

2ZZ

"((3ZZ^++r3

2

2XXdjj

X3ZZ

"((3ZZ^&&BtR	A

2

2 	/B%c2.	/ 	/B%c2.	/rC   c                 6   t        ||      }t        |      rt        j                  d       |j	                  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        ||       y )	Nr   r   r   r   r   r   r"   rh   	r7   r   rp   rq   r8   r   r9   r   r	   r;   r   r<   r=   refr>   s         rA   test_distance_transform_edt03z3TestNdimageMorphology.test_distance_transform_edt03l      E"2;LLCDzz6666666668 @E  F ++D+AO,,TQFC!#s+rC   c                 6   t        ||      }t        |      rt        j                  d       |j	                  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        ||       y )
Nr   r   r   r   r   r   r"   r   r   r   r   s         rA   test_distance_transform_edt4z2TestNdimageMorphology.test_distance_transform_edt4  r   rC   c                 H    t        j                  d      }t        |dg       y )NF        )r   r   r	   )r;   r<   r>   s      rA   test_distance_transform_edt5z2TestNdimageMorphology.test_distance_transform_edt5  s    ,,U3!#t,rC   c                 $   |j                  g dg dg dg dg dg dg dg dg dg	      }|j                  |j                  |j                        }t	        t
              5  t        j                  |dd|       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   TF)r!   rS   rQ   )r8   rY   rZ   r[   rr   rs   r   r9   )r;   r<   r=   distances_outs       rA   test_distance_transform_edt6z2TestNdimageMorphology.test_distance_transform_edt6  s    
 zz6666666668 9 2::><( 	))#!&'		 	 	s   #BBc                 >    t        j                  dd      }|dk(  sJ y )Nr   r   )r   generate_binary_structurer;   r<   structs      rA   test_generate_structure01z/TestNdimageMorphology.test_generate_structure01  s     221a8{{rC   c                 L    t        j                  dd      }t        |g d       y )Nr   r   r   r   r   r   r	   r   s      rA   test_generate_structure02z/TestNdimageMorphology.test_generate_structure02  s    221a8!&)4rC   c                 Z    t        j                  dd      }t        |g dg dg dg       y )Nr"   r   r   r   r   r   r   r   s      rA   test_generate_structure03z/TestNdimageMorphology.test_generate_structure03  +    221a8!&9+4+4+6 	7rC   c                 Z    t        j                  dd      }t        |g dg dg dg       y )Nr"   r   r   r   s      rA   test_generate_structure04z/TestNdimageMorphology.test_generate_structure04  r   rC   c                     g dg dg dg}|j                  |      }t        j                  |d      }t        j                   g dg dg dg dg dgt              }|j                  |      }t        ||       y )Nr   r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   iterate_structurer]   boolr	   r;   r<   r   r>   r@   s        rA   test_iterate_structure01z.TestNdimageMorphology.test_iterate_structure01  st     F#''2::....	0 8<	=
 ::h'!#x0rC   c                     ddgddgddgg}|j                  |      }t        j                  |d      }t        j                   g dg dg dg dg dgt              }|j                  |      }t        ||       y )Nr   r   r"   )r   r   r   r   r   r   r   r   r   r   s        rA   test_iterate_structure02z.TestNdimageMorphology.test_iterate_structure02  s    a&a&a& F#''2::y((((	* 26	7
 ::h'!#x0rC   c                    g dg dg dg}|j                  |      }t        j                  |dd      }g dg dg dg dg dg}t        j                   |t              }|j                  |      }t        |d	   |       |d   ddgk(  sJ y )
Nr   r   r"   r   r   r   r   r   r   r   r   s        rA   test_iterate_structure03z.TestNdimageMorphology.test_iterate_structure03  s     F#''15#####	%
 ::hd3::h'!#a&(31v!QrC   c                     t        ||      }|j                  g |      }t        j                  |      }||j	                  d|j
                        k(  sJ y Nr   r   r7   r   r   binary_erosionr8   r   r;   r   r<   r=   r>   s        rA   test_binary_erosion01z+TestNdimageMorphology.test_binary_erosion01  sO    E"wwrw'$$T*bjj#))j4444rC   c                     t        ||      }|j                  g |      }t        j                  |d      }||j	                  d|j
                        k(  sJ y )Nr   r   border_valuer   r   s        rA   test_binary_erosion02z+TestNdimageMorphology.test_binary_erosion02  sQ    E"wwrw'$$T:bjj#))j4444rC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  dg             y Nr   r   r   r7   r   r   r   r	   r8   r   s        rA   test_binary_erosion03z+TestNdimageMorphology.test_binary_erosion03  sF    E"wws%w($$T*!#rzz1#7rC   c                     t        ||      }|j                  dg|      }t        j                  |d      }t	        ||j                  dg             y Nr   r   r   r   r   s        rA   test_binary_erosion04z+TestNdimageMorphology.test_binary_erosion04  sH    E"wws%w($$T:!#rzz1#7rC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  g d             y )Nr)   r   r   r   r   s        rA   test_binary_erosion05z+TestNdimageMorphology.test_binary_erosion05  sE    E"wws%w($$T*!#rzz)'<=rC   c                     t        ||      }|j                  dg|      }t        j                  |d      }t	        ||j                  g d             y Nr)   r   r   r   r   r   r   s        rA   test_binary_erosion06z+TestNdimageMorphology.test_binary_erosion06  sG    E"wws%w($$T:!#rzz)'<=rC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  g d             y )Nr-   r   r   r   r   s        rA   test_binary_erosion07z+TestNdimageMorphology.test_binary_erosion07  sE    E"wws%w($$T*!#rzz/'BCrC   c                     t        ||      }|j                  dg|      }t        j                  |d      }t	        ||j                  g d             y )Nr-   r   r   r   r   r   r   s        rA   test_binary_erosion08z+TestNdimageMorphology.test_binary_erosion08   sG    E"wws%w($$T:!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }t        j                  |      }t        ||j                  g d             y )Nr-   r   r   r"   r   r   r   r   r   r]   r   r8   r   r   r	   r   s        rA   test_binary_erosion09z+TestNdimageMorphology.test_binary_erosion09'  sN    wws%(Qzz$$$T*!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }t        j                  |d      }t        ||j                  g d             y )Nr-   r   r   r"   r   r   )r   r   r   r   r   r   r   s        rA   test_binary_erosion10z+TestNdimageMorphology.test_binary_erosion10/  sP    wws%(Qzz$$$T:!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||d      }t        ||j                  g d             y )	Nr-   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r;   r   r<   r=   r   r>   s         rA   test_binary_erosion11z+TestNdimageMorphology.test_binary_erosion117  s`    wws%(Qzz$I&$$T6B!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||dd      }t        ||j                  g d	             y )
Nr-   r   r   r"   r   r   r   originr   r   r   r   r   r   r   s         rA   test_binary_erosion12z+TestNdimageMorphology.test_binary_erosion12@  sb    wws%(Qzz$I&$$T6"M!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||dd      }t        ||j                  g d             y )	Nr-   r   r   r"   r   r   r   r   r   r   r   r   r   r   s         rA   test_binary_erosion13z+TestNdimageMorphology.test_binary_erosion13I  sb    wws%(Qzz$I&$$T6!L!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  ddg      }t        j                  ||d      }t        ||j                  g d             y )Nr-   r   r   r"   r   r   )r   r   r   r   r   r   r   s         rA   test_binary_erosion14z+TestNdimageMorphology.test_binary_erosion14R  sd    wws%(Qzz$QF#$$T6B!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  ddg      }t        j                  ||dd      }t        ||j                  g d             y )	Nr-   r   r   r"   r   r   r   )r   r   r   r   r   r   r   s         rA   test_binary_erosion15z+TestNdimageMorphology.test_binary_erosion15[  sf    wws%(Qzz$QF#$$T6"M!#rzz/'BCrC   c                     t        ||      }|j                  ddg|      }t        j                  |d      }t	        ||j                  dgg             y r   r   r   s        rA   test_binary_erosion16z+TestNdimageMorphology.test_binary_erosion16d  sM    E"ww1vUw+$$T:!#rzzA3%'89rC   c                     t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  dgg             y r   r   r   s        rA   test_binary_erosion17z+TestNdimageMorphology.test_binary_erosion17k  sK    E"ww1vUw+$$T*!#rzzA3%'89rC   c                     t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  g dg             y )Nr   r)   r   r   r   r   r   r   s        rA   test_binary_erosion18z+TestNdimageMorphology.test_binary_erosion18r  sI    E"ww1vUw+$$T*!#rzz9+'>?rC   c                     t        ||      }|j                  ddg|      }t        j                  |d      }t	        ||j                  g dg             y )Nr   r)   r   r   r   r   r   s        rA   test_binary_erosion19z+TestNdimageMorphology.test_binary_erosion19y  sK    E"ww1vUw+$$T:!#rzz9+'>?rC   c           	          t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  g dg dg dg             y )Nr)   r   r   r   r   r   s        rA   test_binary_erosion20z+TestNdimageMorphology.test_binary_erosion20  sW    E"ww1vUw+$$T*!#rzz93<3<3> (? 	@rC   c           	          t        ||      }|j                  ddg|      }t        j                  |d      }t	        ||j                  g dg dg dg             y r   r   r   s        rA   test_binary_erosion21z+TestNdimageMorphology.test_binary_erosion21  sY    E"ww1vUw+$$T:!#rzz93<3<3> (? 	@rC   c                    t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg dg dg d	g d
g dg|      }t        j                  |d      }t	        ||       y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r8   r   r   r	   r;   r   r<   r@   r=   r>   s         rA   test_binary_erosion22z+TestNdimageMorphology.test_binary_erosion22  s    E",,,,,,,,. ::h'zz333333335 =B  C $$T:!#x0rC   c                 ^   t        ||      }t        j                  dd      }|j                  |      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg dg dg dg d	g dg|
      }t        j                  ||d      }t        ||       y )Nr"   r	  r  r  r  r  r  r  r  r   r   r   )r7   r   r   r8   r   r	   r;   r   r<   r   r@   r=   r>   s          rA   test_binary_erosion23z+TestNdimageMorphology.test_binary_erosion23  s    E"221a8F#,,,,,,,,. ::h'zz333333335 =B  C $$T6B!#x0rC   c                 >   t        ||      }|j                  ddgddgg      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg d	g dg d
g dg dg|      }t        j                  ||d      }t	        ||       y )Nr   r   r	  r  r   r   r   r   r   r   r   r   r  )r   r   r   r   r   r   r   r   r  r  r  r  r   r   r  r  s          rA   test_binary_erosion24z+TestNdimageMorphology.test_binary_erosion24  s    E"aVV% &,,,,,,,,. ::h'zz333333335 =B  C $$T6B!#x0rC   c                 H   t        ||      }g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  ||d      }t	        ||       y )Nr   r   r	  r
  )r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r  r  s          rA   test_binary_erosion25z+TestNdimageMorphology.test_binary_erosion25  s    E" F#,,,,,,,,. ::h'zz333333335 =B  C $$T6B!#x0rC   c                 J   t        ||      }g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg d	g d
g dg dg dg dg|      }t        j                  ||dd      }t	        ||       y )Nr   r   r	  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r   r   r  r  s          rA   test_binary_erosion26z+TestNdimageMorphology.test_binary_erosion26  s    E" F#,,,,,,,,. ::h'zz333333335 =B  C $$T6,46!#x0rC   c           
         t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |      }t	        j                  g dg dg dg dg dg dg dgt
              }|j                  |      }t        j                  ||d	d
      }t        ||       y N5CuPy: NotImplementedError: only brute_force iterationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r   
iterations	r   rp   rq   r8   r]   r   r   r   r	   r;   r<   r   r@   r=   r>   s         rA   test_binary_erosion27z+TestNdimageMorphology.test_binary_erosion27  s    2;LLPQ F#)))))))+ ::h'zz00000002 :>? zz$$$T6013!#x0rC   z)inplace out= arguments are numpy-specificc           
         g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}t        j                   |t              }|j                  |      }t        j                   g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  |j                  t              }|j                  |      }t        j                  ||dd	|
       t        ||       y )Nr   r   r+  r,  r   r-  r.  r   r"   r   r0  outputr8   r]   r   rY   rZ   r   r   r	   r2  s         rA   test_binary_erosion28z+TestNdimageMorphology.test_binary_erosion28.  s      F#)))))))+ ::hd3::h'zz00000002 :>? zz$hhtzz.jjotV!*+C	9!#x0rC   c           
         t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |      }t	        j                  g dg dg dg dg dg dg dgt
        	      }|j                  |      }t        j                  ||d
d      }t        ||       y )Nr*  r   r   r+  r,  r-  r.  r   r   r   r   r   r   r   r   r   r)   r/  r1  r2  s         rA   test_binary_erosion29z+TestNdimageMorphology.test_binary_erosion29M      2;LLPQ F#)))))))+ ::h'zz00000002 :>? zz$$$T623C!#x0rC   c           
         t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}t	        j                  |t
              }|j                  |      }t	        j                  g dg dg dg d	g dg dg dgt
              }|j                  |      }t	        j                  |j                  t
              }|j                  |      }t        j                  ||d
d|       t        ||       t        j                  ||d
d|       t        ||       y )Nr*  r   r   r+  r,  r   r-  r.  r:  r   r)   r5  )r   rp   rq   r8   r]   r   rY   rZ   r   r   r	   r2  s         rA   test_binary_erosion30z+TestNdimageMorphology.test_binary_erosion30i  s    2;LLPQ F#)))))))+ ::hd3::h'zz00000002 :>? zz$hhtzz.jjotV!*+C	9!#x0 	tV!*+D	:!$1rC   c           
         g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}t        j                   |t              }|j                  |      }t        j                   g d	g d
g dg dg dg d
g d	gt              }|j                  |      }t        j                  |j                  t              }|j                  |      }t        j                  ||dd|d       t        ||       y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+  r   r   r   r   r   r   r   r   r,  r-  r.  r:  r   r&  )r   r0  r6  r   r7  r2  s         rA   test_binary_erosion31z+TestNdimageMorphology.test_binary_erosion31  s      F#)))))))+ ::hd3::h'zz00000002 :>? zz$hhtzz.jjotV!*+C	J!#x0rC   c           
         t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |      }t	        j                  g dg dg dg dg dg dg dgt
              }|j                  |      }t        j                  ||d	d
      }t        ||       y r)  r1  r2  s         rA   test_binary_erosion32z+TestNdimageMorphology.test_binary_erosion32  r<  rC   c           
         t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |      }g dg dg d	g d	g d	g d	g d	g}|j                  |      }t	        j                  g dg d
g dg dg dg dg dgt
              }|j                  |      }t        j                  ||d|d      }t        ||       y )Nr*  r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r:  )r   r   r   r   r   r   r   r-  r,  r   r   r   )r   maskr0  r1  r;   r<   r   r@   rJ  r=   r>   s          rA   test_binary_erosion33z+TestNdimageMorphology.test_binary_erosion33  s    2;LLPQ F#)))))))+ ::h'%%%%%%%' zz$zz00000002 :>? zz$$$T623$2O!#x0rC   c           
         g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |      }t        j                   g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  ||d	|
      }t        ||       y )Nr   r   r+  r,  r.  r-  r   r   r   r   r   r   r   r   r   )r   rJ  )r8   r]   r   r   r   r	   rK  s          rA   test_binary_erosion34z+TestNdimageMorphology.test_binary_erosion34  s     F#)))))))+ ::h'%%%%%%%' zz$zz00000002 :>? zz$$$T623$@!#x0rC   c           
         g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}t        j                   |t              }|j                  |      }t        j                   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        j                   |t              }|j                  |      }|j                  ||      }|j                  ||j	                  |            }|j                  ||      }t        j                  |j                  t              }|j                  |      }t        j                  ||dd|d|       t        ||       y )Nr   r   r+  r-  rN  r   r,  r.  r:  r@  rA  rB  rC  r   r&  )r   r0  r6  r   rJ  )r8   r]   r   logical_andlogical_not
logical_orrY   rZ   r   r   r	   )r;   r<   r   rJ  r=   tmpr@   r>   s           rA   test_binary_erosion35z+TestNdimageMorphology.test_binary_erosion35  s\     F#%%%%%%%' zz$d+zz$zz00000002 :>? zz$$$$$$$$& jjD)jjo>>#t,nnT2>>$#78==3/hhtzz.jjotV!*+C&.T	; 	"#x0rC   c                    t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg dg}t	        j                  |t
              }|j                  |      }g dg dg d	g d
g dg dg dg dg}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                  |      }|j                  ||      }|j                  ||j                  |            }|j                  ||      }t        j                  |||dd      }t        ||       y )Nr*  r   r   r	  r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r"  r#  r$  r%  r  r  r  r  r  r  r   r&  )rJ  r   r   )r   rp   rq   r8   r]   r   rQ  rR  rS  r   r   r	   )r;   r<   r   rJ  rT  r=   r@   r>   s           rA   test_binary_erosion36z+TestNdimageMorphology.test_binary_erosion36<  sT   2;LLPQ F#((((((((* zz$d+zz$'''''''') jjD)jjozz344444446 >BC zz$>>#t,nnT2>>$#78==3/$$T623HF!#x0rC   c                    t        j                  g dg dg dgt              }|j                  |      }|j                  |      }t	        j
                  |||ddd      }||u sJ t        t	        j
                  ||dd      |       y )Nr   r   r   r   T)	structurer6  r0  r   brute_force)rZ  r0  r   )r]   r8   r   
zeros_liker   r   r   )r;   r<   abr>   s        rA   test_binary_erosion37z+TestNdimageMorphology.test_binary_erosion37h  s     JJ	!!#*.0 JJqMMM!$$Q!A!26DJaxx""1a046	rC   c                     t        j                  g dg dg dgt              }|j                  |      }d}t        t              5  t        j                  ||      }d d d        y # 1 sw Y   y xY w)Nr   r   r   g       @r0  )r]   r8   r   rr   	TypeErrorr   r   )r;   r<   r=   r0  _s        rA   test_binary_erosion38z+TestNdimageMorphology.test_binary_erosion38y  sh    zz9$$&-13 zz$
9% 	D&&t
CA	D 	D 	Ds   A((A1c           
         t        j                  d      }g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}|j                  |t              }|j                  |      }t        j                  g dg dg dg d	g dg dg dgt              }|j                  |      }t        j                  |j
                  t              }|j                  |      }t        j                  ||d
||       t        ||       y Nr)   r   r   r+  r,  r   r-  r.  r:  r   r5  )	r]   r^   r8   r   rY   rZ   r   r   r	   r;   r<   r0  r   r@   r=   r>   s          rA   test_binary_erosion39z+TestNdimageMorphology.test_binary_erosion39  s     XXa[
 F#)))))))+ ::hd:3::h'zz00000002 :>? zz$hhtzz.jjotV!*4S	B!#x0rC   c           
      &   t        j                  d      }g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg}t        j                  |t              }|j                  |      }t        j                  g dg dg dg d	g dg dg dgt              }|j                  |      }t        j                  |j
                  t              }|j                  |      }t        j                  ||d
||       t        ||       y rf  )	r]   int64r8   r   rY   rZ   r   r   r	   rg  s          rA   test_binary_erosion40z+TestNdimageMorphology.test_binary_erosion40  s     XXa[
 F#)))))))+ ::hd3::h'zz00000002 :>? zz$hhtzz.jjotV!*4S	B!#x0rC   c                     t        ||      }|j                  g |      }t        j                  |      }||j	                  d|j
                        k(  sJ y r   )r7   r   r   binary_dilationr8   r   r   s        rA   test_binary_dilation01z,TestNdimageMorphology.test_binary_dilation01  sO    E"wwrw'%%d+bjj#))j4444rC   c                     t        ||      }|j                  g |      }t        j                  |      }||j	                  d      k(  sJ y )Nr   F)r7   rY   r   rm  r8   r   s        rA   test_binary_dilation02z,TestNdimageMorphology.test_binary_dilation02  sG    E"xx%x(%%d+bjj''''rC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  dg|j                               y Nr   r   )r7   r   r   rm  r	   r8   r   r   s        rA   test_binary_dilation03z,TestNdimageMorphology.test_binary_dilation03  sO    E"wws%w(%%d+!#rzz1#SYYz'GHrC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  dg             y r   r7   rY   r   rm  r	   r8   r   s        rA   test_binary_dilation04z,TestNdimageMorphology.test_binary_dilation04  sF    E"xx5x)%%d+!#rzz1#7rC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  g d             y Nr)   r   r   r7   r   r   rm  r	   r8   r   s        rA   test_binary_dilation05z,TestNdimageMorphology.test_binary_dilation05  sE    E"wws%w(%%d+!#rzz)'<=rC   c                     t        ||      }|j                  dg|      }t        j                  |      }t	        ||j                  g d             y )Nr)   r   r   ru  r   s        rA   test_binary_dilation06z,TestNdimageMorphology.test_binary_dilation06  sE    E"xx5x)%%d+!#rzz)'<=rC   c                     t        j                  dg|      }d|d<   |j                  |      }t        j                  |      }t        ||j                  g d             y )Nr)   r   r   r   r]   rY   r8   r   rm  r	   r   s        rA   test_binary_dilation07z,TestNdimageMorphology.test_binary_dilation07  sN    xx5)Qzz$%%d+!#rzz)'<=rC   c                     t        j                  dg|      }d|d<   d|d<   |j                  |      }t        j                  |      }t        ||j                  g d             y )Nr-   r   r   r)   r   r~  r   s        rA   test_binary_dilation08z,TestNdimageMorphology.test_binary_dilation08  sW    xx5)QQzz$%%d+!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }t        j                  |      }t        ||j                  g d             y )Nr-   r   r   r   r   r   r   r   r~  r   s        rA   test_binary_dilation09z,TestNdimageMorphology.test_binary_dilation09  sN    xx5)Qzz$%%d+!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }t        j                  |d      }t        ||j                  g d             y )Nr-   r   r   r   r   r   r~  r   s        rA   test_binary_dilation10z,TestNdimageMorphology.test_binary_dilation10  sP    xx5)Qzz$%%d26!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }t        j                  |d      }t        ||j                  g d             y )Nr-   r   r   r  r   r   r   r   r   r~  r   s        rA   test_binary_dilation11z,TestNdimageMorphology.test_binary_dilation11  sP    xx5)Qzz$%%d15!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||      }t        ||j                  g d             y )Nr-   r   r   r   )r   r   r   r   r   r~  r   s         rA   test_binary_dilation12z,TestNdimageMorphology.test_binary_dilation12  s^    xx5)Qzz$I&%%dF3!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||d      }t        ||j                  g d             y )Nr-   r   r   r   r   r   r~  r   s         rA   test_binary_dilation13z,TestNdimageMorphology.test_binary_dilation13  s`    xx5)Qzz$I&%%dFC!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||d      }t        ||j                  g d             y )Nr-   r   r   r   r   r  )r   r   r   r   r   r~  r   s         rA   test_binary_dilation14z,TestNdimageMorphology.test_binary_dilation14'  s`    xx5)Qzz$I&%%dF2>!#rzz/'BCrC   c                     t        j                  dg|      }d|d<   |j                  |      }|j                  g d      }t        j                  ||dd      }t        ||j                  g d             y )Nr-   r   r   r   r   r   r   r   r~  r   s         rA   test_binary_dilation15z,TestNdimageMorphology.test_binary_dilation150  sf    xx5)Qzz$I&%%dF-/aA!#rzz/'BCrC   c                     t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  dgg             y rr  ry  r   s        rA   test_binary_dilation16z,TestNdimageMorphology.test_binary_dilation16:  sK    E"ww1vUw+%%d+!#rzzA3%'89rC   c                     t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  dgg             y r   ru  r   s        rA   test_binary_dilation17z,TestNdimageMorphology.test_binary_dilation17A  sK    E"xxAex,%%d+!#rzzA3%'89rC   c                     t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  g dg             y )Nr   r)   r   r   ry  r   s        rA   test_binary_dilation18z,TestNdimageMorphology.test_binary_dilation18H  sI    E"ww1vUw+%%d+!#rzz9+'>?rC   c           	          t        ||      }|j                  ddg|      }t        j                  |      }t	        ||j                  g dg dg dg             y rx  ry  r   s        rA   test_binary_dilation19z,TestNdimageMorphology.test_binary_dilation19O  sW    E"ww1vUw+%%d+!#rzz93<3<3> (? 	@rC   c           	          t        j                  ddg|      }d|d<   |j                  |      }t        j                  |      }t        ||j                  g dg dg dg             y )Nr)   r   r   r   r   r   r   r~  r   s        rA   test_binary_dilation20z,TestNdimageMorphology.test_binary_dilation20X  s`    xxAe,T
zz$%%d+!#rzz93<3<3> (? 	@rC   c           	      $   t        j                  dd      }|j                  |      }t        j                  ddg|      }d|d<   |j                  |      }t        j
                  ||      }t        ||j                  g dg dg dg             y )Nr"   r)   r   r   r  r   )r   r   r8   r]   rY   rm  r	   )r;   r   r<   r   r=   r>   s         rA   test_binary_dilation21z,TestNdimageMorphology.test_binary_dilation21b  s    221a8F#xxAe,T
zz$%%dF3!#rzz93<3<3> (? 	@rC   c                 
   t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  |      }t	        ||       y )Nr  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r
  r  r   r7   r8   r   rm  r	   r  s         rA   test_binary_dilation22z,TestNdimageMorphology.test_binary_dilation22n  s    E",,,,,,,,. ::h'zz333333335 =B  C %%d+!#x0rC   c                    t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  |d      }t	        ||       y )Nr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r	  r  r
  r  r  r   r   r   r  r  s         rA   test_binary_dilation23z,TestNdimageMorphology.test_binary_dilation23  s    E",,,,,,,,. ::h'zz333333335 =B  C %%d;!#x0rC   c                    t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  |d      }t	        ||       y )Nr   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r  )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r%  r	  r  r
  r  r  r   r  r  r  r  s         rA   test_binary_dilation24z,TestNdimageMorphology.test_binary_dilation24  s    E",,,,,,,,. ::h'zz333333335 =B  C %%d6:!#x0rC   c                    t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  |dd      }t	        ||       y )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r	  r  r
  r  r  r   r  r   r  r  r  s         rA   test_binary_dilation25z,TestNdimageMorphology.test_binary_dilation25  s    E",,,,,,,,. ::h'zz333333335 =B  C %%d6J!#x0rC   c                 Z   t        ||      }t        j                  dd      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  |      }|j                  g dg dg dg dg d	g d
g dg dg|      }t        j                  ||      }t        ||       y )Nr"   r  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r
  r  r  r   )r7   r   r   r8   rm  r	   r  s          rA   test_binary_dilation26z,TestNdimageMorphology.test_binary_dilation26  s    E"221a8,,,,,,,,. F#::h'zz333333335 =B  C %%dF3!#x0rC   c                 >   t        ||      }ddgddgg}g dg dg dg dg dg dg d	g d	g}|j                  |      }|j                  |      }|j                  g d	g dg d	g dg d
g dg d	g d	g|      }t        j                  ||      }t	        ||       y )Nr   r   r  r  r
  r  r  r   r   r   r   r   r   r   r   r	  r  r  r   r  r  s          rA   test_binary_dilation27z,TestNdimageMorphology.test_binary_dilation27  s    E"a&a&,,,,,,,,. F#::h'zz333333335 =B  C %%dF3!#x0rC   c                     t        ||      }g dg dg dg dg}|j                  |      }|j                  g dg dg dg dg|      }t        j                  |d      }t	        ||       y )N)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r  r  s         rA   test_binary_dilation28z,TestNdimageMorphology.test_binary_dilation28  sw    E"    " ::h'zz<''') 16  7 %%d;!#x0rC   c                 x   t        |      rt        j                  d       ddgddgg}g dg dg dg dg dg}|j                  |      }|j                  |      }t	        j                  g dg dg dg dg dgt
              }|j                  |      }t        j                  ||d	
      }t        ||       y )Nr*  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   ra  	r   rp   rq   r8   r]   r   r   rm  r	   r2  s         rA   test_binary_dilation29z,TestNdimageMorphology.test_binary_dilation29      2;LLPQa&a&#####	%
 F#::h'zz?****	, 48	9
 zz$%%dFqA!#x0rC   z!output= arrays are numpy-specificc                    t        |      rt        j                  d       ddgddgg}g dg dg dg dg dg}|j                  |      }|j                  |      }|j                  g dg dg dg dg dgt              }|j                  |      }t        j                  |j                  t              }|j                  |      }t        j                  ||d	|
       t        ||       y )Nr*  r   r   r   r  r  r   r   r"   r0  r6  )r   rp   rq   r8   r   r]   rY   rZ   r   rm  r	   r2  s         rA   test_binary_dilation30z,TestNdimageMorphology.test_binary_dilation30"  s    2;LLPQa&a&#####	%
 F#::h'zz?****	, 48	  9
 zz$hhtzz.jjof3G!#x0rC   c                 x   t        |      rt        j                  d       ddgddgg}g dg dg dg dg dg}|j                  |      }|j                  |      }t	        j                  g dg dg dg dg dgt
        	      }|j                  |      }t        j                  ||d
      }t        ||       y )Nr*  r   r   r  r  r   r   r   r   r   r   r   r   r)   ra  r  r2  s         rA   test_binary_dilation31z,TestNdimageMorphology.test_binary_dilation31:  r  rC   c                    t        |      rt        j                  d       ddgddgg}g dg dg dg dg dg}|j                  |      }|j                  |      }t	        j                  g dg dg dg dg dgt
        	      }|j                  |      }t	        j                  |j                  t
        	      }|j                  |      }t        j                  ||d
|       t        ||       y )Nr*  r   r   r  r  r   r  r   r   r)   r  r   rp   rq   r8   r]   r   rY   rZ   r   rm  r	   r2  s         rA   test_binary_dilation32z,TestNdimageMorphology.test_binary_dilation32P  s    2;LLPQa&a&#####	%
 F#::h'zz?****	, 48	9
 zz$hhtzz.jjof3G!#x0rC   c                 `   t        |      rt        j                  d       g dg dg dg}|j                  |      }t	        j                  g dg dg dg dg dg dg dg dgt
        	      }|j                  |      }t	        j                  g dg dg d
g dg dg dg dg dgt
        	      }|j                  |      }t	        j                  g dg dg dg dg dg dg dg dgt
        	      }|j                  |      }t        j                  ||d|d      }t        ||       y )Nr*  r   r   r  r	  r   r   r   r   r   r   r   r   rW  r  r   r   r   r   r   r   r   r   r   r   r   r0  rJ  r   r  rK  s          rA   test_binary_dilation33z,TestNdimageMorphology.test_binary_dilation33i  s#   2;LLPQ F#::777777779 AEF ::h'zz333333335 =AB zz$zz333333335 =AB zz$%%dFr+/aA!#x0rC   z)inplace output= arrays are numpy-specificc                    t        |      rt        j                  d       g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg dg}t	        j                  g dg dg dg dg d	g d
g dg dgt
              }|j                  |      }t	        j                  |j                  t
              }|j                  |      }t        j                  ||d|d      }t        ||       y )Nr*  r   r   r  r   r   r   r   r   r   r   r   r$  r	  r
  r  r  r   r   r   r  r  rK  s          rA   test_binary_dilation34z,TestNdimageMorphology.test_binary_dilation34  s     2;LLPQ F#,,,,,,,,. zz333333335 =AB zz$xx

$/zz$%%dFr+/aA!#x0rC   c                    t        ||      }g dg dg dg dg dg dg dg dg}t        j                  g dg dg dg d	g d
g dg dg dg      }g dg dg dg dg dg dg dg dg}t        j                  |t              }t        j                  ||      }t        j                  |t        j
                  |            }t        j                  ||      }|j                  |      }|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  ||dd      }t        ||       y )Nr  r  r  r  r  r  r	  r  r
  r  r  r  r   r  r   )rJ  r   r   )
r7   r]   r8   r   rQ  rR  rS  r   rm  r	   )r;   r   r<   rT  r=   rJ  r@   r>   s           rA   test_binary_dilation35z,TestNdimageMorphology.test_binary_dilation35  s?   E"'''''''') zz333333335 6 )(((((((* zz$d+>>#t,nnT2>>$#78==3/zz$::h'zz333333335 =B  C %%d-3!E!#x0rC   c                     t        j                  g t              }|j                  |      }t	        j
                  |d      }||j                  d      k(  sJ y )Nr   r   ra  F)r]   rY   r   r8   r   rm  )r;   r<   r=   r>   s       rA   test_binary_dilation36z,TestNdimageMorphology.test_binary_dilation36  sI    xx$'zz$%%dr:bjj''''rC   c                    g dg dg dg}|j                  |      }t        j                   g dg dg dg dg dg dg dg dgt              }|j                  |      }t        j                   g dg dg d	g dg dg dg dg dgt              }|j                  |      }t        j                   g dg dg dg dg dg dg dg dgt              }|j                  |      }t        j                  |||d
      }t        ||       y )Nr   r   r  r	  r  rW  r  r   r  r   rJ  r   )r8   r]   r   r   binary_propagationr	   rK  s          rA   test_binary_propagation01z/TestNdimageMorphology.test_binary_propagation01  s    F#::777777779 AEF ::h'zz333333335 =AB zz$zz333333335 =AB zz$((v.2D!#x0rC   c                    g dg dg dg}g dg dg dg dg dg dg dg dg}|j                  |      }|j                  |      }t        j                   g dg dg dg dg dg d	g dg dgt        
      }|j                  |      }t        j                  |j                  t        
      }|j                  |      }t        j                  |||d      }t        ||       y )Nr   r   r  r  r$  r	  r
  r  r  r   r   r  )r8   r]   r   rY   rZ   r   r  r	   rK  s          rA   test_binary_propagation02z/TestNdimageMorphology.test_binary_propagation02  s     -,,,,,,,. ::h'F#zz333333335 =AB zz$xx

$/zz$((v.2D!#x0rC   c                     |j                  t        j                  g t                    }|j                  t        j                  g t                    }t	        j
                  |      }||k(  sJ y )Nr   )r8   r]   rY   r   r   r  )r;   r<   r=   r@   r>   s        rA   test_binary_propagation03z/TestNdimageMorphology.test_binary_propagation03+  sP    zz"((2T23::bhhr67((.hrC   c                 
   t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg dg d	g dg dg dg|
      }t        j                  |      }t	        ||       y )Nr  r  r  r   r   r   r   r   r   r   r   r  r  r	  r  r   r   r   r   r   r   r   r   r   )r7   r8   r   binary_openingr	   r  s         rA   test_binary_opening01z+TestNdimageMorphology.test_binary_opening012      E",,,,,,,,. ::h'zz333333335 =B  C $$T*!#x0rC   c                 Z   t        ||      }t        j                  dd      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  |      }|j                  g dg dg dg dg dg dg dg dg|	      }t        j                  ||      }t        ||       y )
Nr"   r  r	  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r  r   )r7   r   r   r8   r  r	   r  s          rA   test_binary_opening02z+TestNdimageMorphology.test_binary_opening02I      E"221a8,,,,,,,,. ::h'F#zz333333335 =B  C $$T62!#x0rC   c                 
   t        ||      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg d	g d
g dg dg dg dg dg|      }t        j                  |      }t	        ||       y )Nr	  r  )r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r   )r7   r8   r   binary_closingr	   r  s         rA   test_binary_closing01z+TestNdimageMorphology.test_binary_closing01b  r  rC   c                 Z   t        ||      }t        j                  dd      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  |      }|j                  g dg dg dg dg dg dg dg dg|	      }t        j                  ||      }t        ||       y )
Nr"   r	  r  r  r  r  r  r  r   )r7   r   r   r8   r  r	   r  s          rA   test_binary_closing02z+TestNdimageMorphology.test_binary_closing02y  r  rC   c           
      J   t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  |      }t        ||       y )Nr	  r  r   r  r]   r8   r   r   binary_fill_holesr	   r;   r<   r@   r=   r>   s        rA   test_binary_fill_holes01z.TestNdimageMorphology.test_binary_fill_holes01  s    ::77777779 AEF ::h'zz33333335 =AB zz$''-!#x0rC   c           
      J   t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  |      }t        ||       y )Nr	  r  r  r   r  r  r  s        rA   test_binary_fill_holes02z.TestNdimageMorphology.test_binary_fill_holes02      ::77777779 AEF ::h'zz33333335 =AB zz$''-!#x0rC   c           
      J   t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }t        j                  |      }t        ||       y )Nr	  r$  )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r  r  s        rA   test_binary_fill_holes03z.TestNdimageMorphology.test_binary_fill_holes03  r  rC   )r   z2these filters do not yet have axes support in CuPyr   z.these filters are not implemented in JAX.numpyr   r   r   r   )r   r   )r   r   expand_axisr   r   r"   	func_name)r   rm  r  r  binary_hit_or_missr  r  c           
         t        j                  g dg dg dgt              }|j                  |      }t        j                  g dg dg dg dg dg dg dgt              }|j                  |      }|dk(  rt        ||	      }nt        |
      }|dv}	|	r||d<   n|dk7  rt	        j
                  d       t        t        |      }
 |
||fi |}d}|j                  |g|z  |      }|j                  |g|z  |      }g d}|j                  |       t        |      st        |      rA|j                  t        j                  |j                  t                    } |
||f||d| n |
||fd|i|}t        ||       y )Nr   r   r,  )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r.  )r   r   r   r   r   r   r   r  )origin1origin2r  )r  r  r   r   z-border_value !=0 unsupported by this functionr-   r   r  r6  axesr   )r]   r8   r   dictrp   skipr7   r   stackremover   r   rY   rZ   r   )r;   r<   r  r  r   r   r   r=   kwargsborder_supportedfuncr@   n_repsr   r>   s                  rA   test_binary_axesz&TestNdimageMorphology.test_binary_axes  s     Y&&()-/ F#zz00000002 489 zz$,,&&9F(F$ -B B%1F>"QKKGHw	*f// 88XJ/k8Bxxkx: K B<72;**RXXdjj$78Cv?c?? tV9$9&9CX&rC   c           	          |j                  g dg dg dg      }|j                  g dg dg      }t        j                  ||      }t        ||j                  g dg dg d	g             y )
Nr)   r"   r-   r   r#   r.   r+   rm   r)   r-   r-   r%   r)   r.   r   r   r   r   r   	footprintr"   r"   r   r   r   r"   r)   r   r)   r   r-   r-   r)   r)   r   r8   r   grey_erosionr	   r;   r<   arrayr  r6  s        rA   test_grey_erosion01z)TestNdimageMorphology.test_grey_erosion01
	  si    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

11111113 ;?@ 

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

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

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

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

266!401JJrwwvT:;	 uBJJ7UiGrC   mode)reflectconstantnearestmirrorwrapfootprint_mode)sizer  rZ  )r  r'  r1  r:  rI  rA  rN  r`  c           
      j   |j                  g dg dg dg dg dg dg dg      }t        ||      }|d	k(  rd
|d	<   n|j                  g dg dg      |d<   |dk(  r|j                  |d         |d<   t        t        |      }	 |	|fi |}
d}|j                  |
g|z  |      }
|j                  |g|z  |      }g d}|j                  |       t        |      st        |      r4|j                  |
j                  |
j                        } |	|f||d| n |	|fd|i|}t        ||
       y )Nr,  )r   r   r   r#   r   r   r   )r   r   r"   r   r   r"   r   )r   r)   r   r+   r-   r   r   )r   r#   r-   r)   r)   r#   r   )r   r   rm   r)   r   r   r   )r   r   r   r"   r   r   r   )r   rh  ro  )r"   r)   r   r  r  rZ  r-   r   r  r   r  r   )r8   r  	ones_liker7   r   r  r  r   r   rY   rZ   r   r   )r;   r<   r  r  r   rn  rh  r=   r  r  r@   r  r   r>   s                 rA   test_grey_axesz$TestNdimageMorphology.test_grey_axesW
  sD   , zz00000002 3 V$/V##F6N"$**i-C"DF;[("$,,vk/B"CF;w	*'' 88XJ/k8Bxxkx: K B<72;((8>>(@C7c77 t1$1&1CX&rC   c                    t        |      s t        |      st        j                  d       t	        ||      }g dg dg dg}|j                  |      }g dg dg dg dg dg dg dg dg}|j                  |      }|j                  g dg dg dg dg d	g d
g d
g dg|      }|j                  t        j                  |j                  t                    }t        j                  |||       t        ||       y )N!inplace output= is numpy-specificr   r   r   )r   r   r   r   r   r  r   )r   r   r   r   r   r   )r   r   r   r   r   r   r6  )r   r   rp   rq   r7   r8   r]   rY   rZ   r   r   r  r	   r  s          rA   test_hit_or_miss01z(TestNdimageMorphology.test_hit_or_miss01
  s    LL<=E" F#########% ::h'zz?*******, 49  : jj$**D9:""4<!(C0rC   c                    t        ||      }g dg dg dg}g dg dg dg dg}|j                  |      }|j                  |      }|j                  g dg dg dg dg|      }t        j                  ||      }t	        ||       y )	Nr   r   r	  r  r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r  r   r7   r8   r   r  r	   r  s          rA   test_hit_or_miss02z(TestNdimageMorphology.test_hit_or_miss02
  s    E" -,,,. F#::h'zz33335 =B  C ((v6!(C0rC   c                 ~   t        ||      }g dg dg dg}g dg dg dg}g dg dg dg dg dg dg dg dg}|j                  |      }|j                  |      }|j                  |      }|j                  g dg dg dg d	g d
g dg dg dg|      }t        j                  |||      }t	        ||       y )Nr   r   r
  r	  r$  rx  r  r  r  r  r  r  r   ry  )r;   r   r<   struct1struct2r@   r=   r>   s           rA   test_hit_or_miss03z(TestNdimageMorphology.test_hit_or_miss03
  s    E"  -,,,,,,,. **W%**W%::h'zz333333335 =B  C ((w@!(C0rC   N)__name__
__module____qualname__r   rp   markparametrizer   rB   rH   rM   r   re   rk   rn   rt   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r   r'  r3  r8  r;  r>  rD  rF  rL  rO  rU  rX  r_  rd  rh  rk  rn  rp  rs  rv  rz  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r!  r(  r*  r-  r3  r7  r;  r=  rE  rG  rJ  rL  rO  rQ  rW  r^  ra  rc  re  rg  rr  rv  rz  r~   rC   rA   r   r      s   v&QR[[We,.0 - S.0` v&QR[[We,.0 - S.0` v&QR[[We,.0 - S.0` K [[We,0/ -0/d v&QR[[We,-0 - S-0^ v&QR[[We,-0 - S-0^& [[We,'0 -'0R [[We,&0 -&0P I [[We,// -//b R( [[We,% -%* [[We,* -*< D [[We,:/ -:/x [[We,, -,$ [[We,, -,$-
 R(57711   [[We,5 -5 [[We,5 -5 [[We,8 -8 [[We,8 -8 [[We,> -> [[We,> -> [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,: -: [[We,: -: [[We,@ -@ [[We,@ -@ [[We,@ -@ [[We,@ -@ [[We,1 -1, [[We,1 -10 [[We,1 -10 [[We,1 -14 [[We,1 -1618 H11818 H"2"2H H11818"1H1B H'1'1R*1X HD H11: H11: [[We,5 -5 [[We,( -( [[We,I -I [[We,8 -8 [[We,> -> [[We,> -> [[We,> -> [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,D -D [[We,: -: [[We,: -: [[We,@ -@ [[We,@ -@ [[We,@ -@ [[We,	@ -	@ [[We,1 -1, [[We,1 -1, [[We,1 -1, [[We,1 -1, [[We,1 -10 [[We,1 -12 [[We,1 -11, d+NO1 P1.1, d+NO1 P10%1N H11> [[We,.1 -.1`("1H1: [[We,1 -1, [[We,1 -10 [[We,1 -1, [[We,1 -101,1(1( t$KMLN[[^QF3[[X'89[[]I6[[[ +@ A)'A 7 : 4NM %)'V	A k*FGv&PQ
 R H






4444 d+NO4 P4 4 d+NO4 P4 4 k*FG4 H44 vk2* 3*0 k*FG	H H	H k*FG4 H44 v&67* 8*0 k*FGH HH t$KMLN[[X'89[[]I6[[V &8 9[[- 0= >[[[ +; <#'<>9 7 :NM %&#'J [[We,1 -1< [[We,1 -1$ [[We,1 -1rC   r   c                       e Zd Zd Zd Zd Zy)TestDilateFixc                    |j                  g dg dg dg dg dg|j                        | _        |j                  d      | _        t        j                  | j                  | j                        }t        |      r!|j                  |j                        | _	        y t        |      j                  } |||j                        | _	        y )Nr   r  r  r   r   rU  )r8   uint8r  r   sq3x3r   rm  r   view
dilated3x3r   r   )r;   r<   r  r   s       rA   _setupzTestDilateFix._setup
  s    ZZ!0!0!0!0	!2 :<	   C
 WWV_
,,TZZ4::N
B<(oobhh7DO$Z077F$Z:DOrC   c                     | j                  |       t        j                  | j                  | j                        }t        || j                  dz          y )NrU  r   )r  r   r'  r  r  r	   r  r;   r<   results      rA   test_dilation_square_structurez,TestDilateFix.test_dilation_square_structure
  s:    B&&tzzTZZH!&$//A*=>rC   c                     | j                  |       t        j                  | j                  d      }t	        || j
                         y )Nr)   )ro  )r  r   r'  r  r	   r  r  s      rA   test_dilation_scalar_sizez'TestDilateFix.test_dilation_scalar_size
  s1    B&&tzz:!&$//:rC   N)r  r  r  r  r  r  r  rC   rA   r  r  
  s    ;$?;rC   r  c                       e Zd Zd Zd Zd Zy)TestBinaryOpeningClosingc                 z   t        j                  dt              }d|ddddf<   d|d<   |j                  |      | _        |j                  d      | _        t        j                  | j                  | j                  dd d      | _	        t        j                  | j                  | j                  dd d      | _        y )	Nr-   r-   r   Tr   r#   )r#   r#   r   r   )r]   rY   r   r8   r  r   r  r   r  
opened_oldr  
closed_old)r;   r<   r]  s      rA   r  zTestBinaryOpeningClosing._setup  s    HHV4(!A#qs($ZZ]
WWV_
!00TZZ12D!=!00TZZ12D!=rC   c           
          | j                  |       t        j                  | j                  | j                  dd dd dd      }t        || j                         y Nr   r   F)r  r   r  r  r  r   r  )r;   r<   
opened_news      rA   test_opening_new_argumentsz3TestBinaryOpeningClosing.test_opening_new_arguments  D    B++DJJ

At,-tQ?

DOO4rC   c           
          | j                  |       t        j                  | j                  | j                  dd dd dd      }t        || j                         y r  )r  r   r  r  r  r   r  )r;   r<   
closed_news      rA   test_closing_new_argumentsz3TestBinaryOpeningClosing.test_closing_new_arguments  r  rC   N)r  r  r  r  r  r  r  rC   rA   r  r    s    	=55rC   r  c                     | j                  dg      }t        t        t        j                  |d       t        t        t        j                  |d       y Nr   g      ?ra        ?)r   rr   rb  r   r   r<   r=   s     rA   )test_binary_erosion_noninteger_iterationsr    ;     77A3<D)W33TcJ)W33TcJrC   c                     | j                  dg      }t        t        t        j                  |d       t        t        t        j                  |d       y r  )r   rr   rb  r   rm  r  s     rA   *test_binary_dilation_noninteger_iterationsr  %  s;     77A3<D)W44dsK)W44dsKrC   c                     | j                  dg      }t        t        t        j                  |d       t        t        t        j                  |d       y r  )r   rr   rb  r   r  r  s     rA   )test_binary_opening_noninteger_iterationsr  -  r  rC   c                     | j                  dg      }t        t        t        j                  |d       t        t        t        j                  |d       y r  )r   rr   rb  r   r  r  s     rA   )test_binary_closing_noninteger_iterationsr  5  r  rC   c           
      l   t        |       rt        j                  d       | j                  dg      }t	        t        j                  |dd      t        j                  |dt        d                   t	        t        j                  |dd      t        j                  |dt        d                   y )Nr*  r   r"   r  )r0  r[  r   )r   rp   rq   r   r   r   r   r   r  s     rA   ;test_binary_closing_noninteger_brute_force_passes_when_truer  =  s     r{LM77A3<DG**4A3O**4A4PS9U G**4A3O**4A4PS9UrC   function)r   rm  r  r  r0  r-   r[  Fc                 .   t         j                  j                  d      }|j                  ddd      j	                  t
              }t        t        |       }|j                         } ||||      }t        ||        |||||       t        ||       y )N{   r   r"   d   lowhighro  )r[  r0  )r[  r0  r6  )
r]   randomRandomStaterandintr   r   r7   r   copyr   )	r  r0  r[  r<   rstater=   ndi_func	data_origr@   s	            rA   test_binary_input_as_outputr  M  s     YY""3'F>>aac>299$?Dw)H 		I+*MHD)$ T{z$OHd#rC   c                    t        |       s t        |       st        j                  d       t        j
                  j                  d      }|j                  ddd      j                  t              }|j                         }t        j                  |      }t        ||       t        j                  ||       t        ||       y )Nrt  r  r   r"   r  r  ru  )r   r   rp   rq   r]   r  r  r  r   r   r  r   r  r   )r<   r  r=   r  r@   s        rA   'test_binary_hit_or_miss_input_as_outputr  b  s    RLGBK89YY""3'F>>aac>299$?D 		I))$/HD)$ tD1Hd#rC   c                     t        |       rt        j                  d       d}t        j                  t        |      5  t        j                  | j                  d      d       d d d        y # 1 sw Y   y xY w)Nz)CuPy does not have distance_transform_cdtzinvalid metric provided)matchr  garbager   )r   rp   rq   r
   
ValueErrorr   rz   r   )r<   msgs     rA   *test_distance_transform_cdt_invalid_metricr  s  sY    r{@A
#C	z	- 9&&rwwv.7	99 9 9s   'A..A7)$numpyr]   scipy._lib._array_apir   r   r   r   r   r   r	   rp   r
   rr   scipyr    r   scipy.conftestr   r  r   r   usefixtures
pytestmarkr   r  r  r  r  r  r  r  r  r  r  r  r  rC   rA   <module>r     s6       *   /;;// KK11 "FKK$;$;<N$Okk%%&9:&+9NPR

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