
    _h?                     	   d dl Zd dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZmZ ej4                  d	        Zej4                  d
        Zej:                  ej<                  ej>                  ej@                  ejB                  ejD                  fZ# G d d      Z$ G d d      Z%ej:                  ej<                  ej>                  ej@                  ejB                  ejD                  gZ&ejN                  jQ                  de&      d        Z)d Z*ej@                  ej>                  gZ+ejN                  jQ                  de+      d        Z,d Z-d Z.d Z/ ej`                  g dg dg dg dg dg      Z1 ej`                  g dg dg dg dg dg      Z2 ej`                  g d g d!g d"g d#g d$g      Z3 ej`                  g d%g d&g d'g d(g d)g      Z4 ej`                  g d*g d g d+g d,g d-g      Z5d. Z6d/ Z7d0 Z8d1 Z9ejN                  jQ                  dg d2      ejN                  jQ                  d3g d4      ejN                  jQ                  d5g d4      ejN                  jQ                  d6d7d8g      d9                             Z:ejN                  jQ                  dg d2      ejN                  jQ                  d:d;      ejN                  jQ                  d6d8g      d<                      Z;ejN                  jQ                  dg d2      ejN                  jQ                  d=d>      ejN                  jQ                  d?d@      ejN                  jQ                  d6d8g      ejN                  jy                  dA      dB                                    Z=ejN                  jQ                  dg d2      ejN                  jQ                  dCdDdEg      ejN                  jQ                  d6d7d8g      dF                      Z>ejN                  jQ                  dg d2      ejN                  jQ                  d:dG      ejN                  jQ                  d6d8g      dH                      Z?ejN                  jQ                  dIej:                  ej<                  g      ejN                  jQ                  dJdKdLg      ejN                  jQ                  dMg dN      dO                      Z@y)P    N)ndimage)assert_allcloseassert_array_equalassert_equal)colordata	transform)expected_warnings)fetchassert_stacklevel)gray
footprintsfootprint_rectangle)img_as_uintimg_as_ubytec                  h    ddl m}  t        j                   | j                         ddddf         S )Nr   r   @   p   `   )skimager   npascontiguousarraycamerar   s    \/var/www/html/engine/venv/lib/python3.12/site-packages/skimage/morphology/tests/test_gray.py	cam_imager      s/    bfbem <==    c                  p    ddl m}  t        j                   | j                         dddddddf         S )Nr   r      0      $       )r   r   r   r   cells3dr   s    r   cell3d_imager%      s8    r"uaB2/E FGGr   c                   @   e Zd Zd Zd Zd Zd Zej                  j                  de
      ej                  j                  dej                        d               Zej                  j                  de
      ej                  j                  dg d      d	               Zy
)TestMorphologyc           	         d }|t         j                  t         j                  t         j                  f}t	        t        j                  t        j                  t        j                               d            }i }t        dd      D ]D  }|D ]=  }t        D ]2  }|j                   d| d|j                   } || ||            ||<   4 ? F |S )Nc                     t        | | f      S N)r   )ns    r   squarez5TestMorphology._build_expected_output.<locals>.square/   s    &1v..r   )r!   r!         _)r   diamonddiskstarr   r	   downscale_local_meanr   rgb2grayr   coffeerangegray_morphology_funcs__name__)	selfr,   footprints_2Dimageoutputr+   strelfunckeys	            r   _build_expected_outputz%TestMorphology._build_expected_output.   s    	/ OOOO	
 **5>>$++-+H(S
 q! 	8A& 81 8D"^^,AaS$--AC"&ueAh"7F3K88	8 r   c                     t        t        j                  t        d                  }| j	                         }t        ||       y )Nzdata/gray_morph_output.npz)dictr   loadr   r@   r   )r9   expected
calculateds      r   test_gray_morphologyz#TestMorphology.test_gray_morphologyF   s3    &B CDE002
Xz*r   c                 .   t        j                         }t        j                  g dg dg dg      }t	        j
                  ||      }t        j                  ||k\        rJ t	        j
                  ||d      }t        j                  ||k\        sJ y N)r   r   r-   )r   r-   r-   )r-   r-   r-   	footprintignore)rJ   mode)r   coinsr   arrayr   closingall)r9   imgrJ   result_defaultresults        r   test_gray_closing_extensivez*TestMorphology.test_gray_closing_extensiveK   ss    jjlHHiI>?	 cY?66.C/000cYXFvvfm$$$r   c                 .   t        j                         }t        j                  g dg dg dg      }t	        j
                  ||      }t        j                  ||k        rJ t	        j
                  ||d      }t        j                  ||k        sJ y rH   )r   rM   r   rN   r   openingrP   )r9   rQ   rJ   rR   result_ignores        r    test_gray_opening_anti_extensivez/TestMorphology.test_gray_opening_anti_extensiveV   st    jjlHHiI>?	 cY?66.C/000SIHMvvms*+++r   r>   rL   c                 B    t        j                  d      } |||       y )N
   r[   rL   )r   onesr9   r>   rL   rQ   s       r   test_supported_modez"TestMorphology.test_supported_modea   s     gghStr   ) 	symmetric   Nc                     t        j                  d      }t        j                  t        d      5   |||       d d d        y # 1 sw Y   y xY w)NrZ   zunsupported modematchr\   )r   r]   pytestraises
ValueErrorr^   s       r   test_unsupported_modez$TestMorphology.test_unsupported_modeg   s@     ggh]]:-?@ 	!4 	! 	! 	!s   AAN)r8   
__module____qualname__r@   rF   rT   rX   rf   markparametrizer7   r   _SUPPORTED_MODESr_   ri    r   r   r'   r'   %   s    0+
	%	, [[V%:;[[VT%:%:; < < [[V%:;[[V%?@! A <!r   r'   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy) TestEccentricStructuringElementsc                     dt        j                  dt         j                        z  | _        d| j                  d<   d| j                  z
  | _        t        d      t        d      t        d      g| _        y )N   )   rt   dtyper   )   rw   )rw   r-   )r   r]   uint8black_pixelwhite_pixelr   r   )r9   s    r   setup_classz,TestEccentricStructuringElements.setup_classp   sb    rxx!@@!"!1!11'''
r   c                     | j                   D ]_  }t        j                  | j                  |      }t        j                  | j
                  |      }t        j                  |d|z
  k(        r_J  y Nrs   )r   r   erosionry   dilationrz   r   rP   )r9   scds       r   test_dilate_erode_symmetryz;TestEccentricStructuringElements.test_dilate_erode_symmetryz   s[     	*AT--q1Ad..2A66!a.)))	*r   c                     | j                   D ]F  }t        j                  | j                  |      }t	        j
                  || j                  k(        rFJ  y r*   )r   r   rV   ry   r   rP   )r9   r   	gray_opens      r   test_open_black_pixelz6TestEccentricStructuringElements.test_open_black_pixel   sH     	9AT%5%5q9I66)t'7'77888	9r   c                     | j                   D ]F  }t        j                  | j                  |      }t	        j
                  || j                  k(        rFJ  y r*   )r   r   rO   rz   r   rP   )r9   r   
gray_closes      r   test_close_white_pixelz7TestEccentricStructuringElements.test_close_white_pixel   sH     	:Ad&6&6:J66*(8(88999	:r   c                     | j                   D ]:  }t        j                  t        j                  | j
                  |      dk(        r:J  y Nr   )r   r   rP   r   rV   rz   r9   r   s     r   test_open_white_pixelz6TestEccentricStructuringElements.test_open_white_pixel   s?     	BA66$,,t'7'7;q@AAA	Br   c                     | j                   D ]:  }t        j                  t        j                  | j
                  |      dk(        r:J  y r}   )r   r   rP   r   rO   ry   r   s     r   test_close_black_pixelz7TestEccentricStructuringElements.test_close_black_pixel   s?     	DA66$,,t'7'7;sBCCC	Dr   c                     | j                   D ]F  }t        j                  | j                  |      }t	        j
                  || j                  k(        rFJ  y r*   )r   r   white_tophatrz   r   rP   r9   r   tophats      r   test_white_tophat_white_pixelz>TestEccentricStructuringElements.test_white_tophat_white_pixel   J     	6A&&t'7'7;F66&D$4$44555	6r   c                     | j                   D ]F  }t        j                  | j                  |      }t	        j
                  || j                  k(        rFJ  y r*   )r   r   black_tophatry   r   rP   rz   r   s      r   test_black_tophat_black_pixelz>TestEccentricStructuringElements.test_black_tophat_black_pixel   r   r   c                     | j                   D ]<  }t        j                  | j                  |      }t	        j
                  |dk(        r<J  y r   )r   r   r   ry   r   rP   r   s      r   test_white_tophat_black_pixelz>TestEccentricStructuringElements.test_white_tophat_black_pixel   C     	'A&&t'7'7;F66&A+&&&	'r   c                     | j                   D ]<  }t        j                  | j                  |      }t	        j
                  |dk(        r<J  y r   )r   r   r   rz   r   rP   r   s      r   test_black_tophat_white_pixelz>TestEccentricStructuringElements.test_black_tophat_white_pixel   r   r   N)r8   rj   rk   r{   r   r   r   r   r   r   r   r   r   ro   r   r   rq   rq   o   s6    
*9
:
BD6
6
'
'r   rq   functionc                     t        j                  d      }t        j                  g dg dg dg dg dg dg dg dg dg dg dg dg dgt        j                        } | ||      } | |      }t        ||       y )Nr-   )radius)
r   r   r   r   r   r   r   r   r   r   )
r   r   r-   r-   r-   r-   r-   r-   r   r   )
r   r   r-   r-   r-   r   r   r-   r   r   )r   r0   r   rN   rx   r   )r   r=   r;   im_expectedim_tests        r   test_default_footprintr      sv    a(EHH*************	
 	!E$ 5%(KuoG{G,r   c                     t        j                  dt              } d| ddddddf<   t        j                  |       }t        j                  dt              }t        j                  dd      |ddddddf<   t        ||       y )N   r   r   r-   rw   ru   rb      )r   zerosboolr   rV   ndigenerate_binary_structurer   )r;   openedimage_expecteds      r   "test_3d_fallback_default_footprintr      s    HHY%EE!B$"ad
\\% F XXit4N$'$A$A!Q$GN1Q3!QqS=!v~.r   c                     t        j                  dt              }d|ddddddf<   t        j                  dt         j                        } | ||      }t        ||       y )Nr   r-   rw   r   )rb   rb   rb   ru   )r   r   r   r]   rx   r   )r   r;   cube	new_images       r   test_3d_fallback_cube_footprintr      s[     HHY%EE!B$"ad
779BHH-D%Iy%(r   c                     t        j                  dt              } d| dddddf<   d| dddddf<   d| dddddf<   t        dg      5  t	        j
                  |       }d d d        t        j                  dd      }t        dg      5  t        j
                  | j                  t         j                        |	      }d d d        t               y # 1 sw Y   vxY w# 1 sw Y   "xY w)
Nr   ru   r-   rw   r.   rb   r   operator.*deprecated|\A\ZrI   )r   r   r   r
   r   r   r   r   viewrx   r   r;   r   rJ   r   s       r   test_3d_fallback_white_tophatr      s    HHYd+EE!QqS!A#+E!QqS!A#+E!QqS!A#+	89	: -%%e,	---a3I	89	: 
))JJRXXJ&)

 y.1- -
 
   C6C#C #C,c                     t        j                  dt              } d| dddddf<   d| dddddf<   d| dddddf<   t        dg      5  t	        j
                  |       }d d d        t        j                  dd	      }t        dg      5  t        j
                  | j                  t         j                        |
      }d d d        t               y # 1 sw Y   vxY w# 1 sw Y   "xY w)Nr   ru   r   rw   r.   rb   r   r   r-   rI   )r   r]   r   r
   r   r   r   r   r   rx   r   r   s       r   test_3d_fallback_black_tophatr      s    GGIT*EE!QqS!A#+E!QqS!A#+E!QqS!A#+	89	: -%%e,	---a3I	89	: 
))JJRXXJ&)

 y.1- -
 
r   c                     t        j                  dt         j                        } d| ddddf<   d| ddddf<   d| d	<   t        j                  |       }t        j
                  |       }t        j                  dd
      }t        j                  | |      }t        j                  | |      }t        ||       t        ||       y )N)	   r      rw   r      rb   rs   )r.   r.   r-   rI   )r   r   rx   r   rV   rO   r   r   grey_openinggrey_closingr   )r;   r   closedrJ   ndimage_openedndimage_closeds         r   test_2d_ndimage_equivalencer     s    HHVRXX&EE!B$"*E!B$"*E$K\\% F\\% F--a3I%%eyAN%%eyANv~.v~.r   )皙?
ףp=
?g333333?HzG?zG?)g?)\(?{Gz?Q?RQ?)HzG?(\?g=
ףp=?(\?Q?)
ףp=
?{Gz?(\?(\?ףp=
?)\(\?g?q=
ףp?r   Q?)r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   c                  <   t        t        j                  t              t               t        t        j
                  t              t               t        t        j                  t              t               t        t        j                  t              t               y r*   )r   r   r~   imerodedr   dilatedrV   r   rO   r   ro   r   r   
test_floatr   L  sN    DLL$f-DMM"%w/DLL$f-DLL$f-r   c                  Z   t        t        t        t        t        t
        t        g      \  } }}}}t        t        j                  |       |       t        t        j                  |       |       t        t        j                  |       |       t        t        j                  |       |       y r*   )mapr   r   r   r   r   r   r   r   r~   r   rV   rO   )im16eroded16	dilated16opened16closed16s        r   test_uint16r   S  su    47b&'66:51D(Ix DLL&1DMM$'3DLL&1DLL&1r   c                     t        j                  g dg dg dgt         j                        } t        j                  dt         j                        }|d d dd d df   }t        j                  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t         j                        }t	        j
                  | |       t        ||       t	        j                  | |       t        ||       y )N)r   rt   rw   )r   rw   rw   )rb   r   r-   )r   r   rw   )r   r   rt   r   rt   )r   r   r   r   r   )r   r   r   r   rw   )r   r   r   r   r   )r   r   rw   r   rw   )rw   r   rw   r   r-   )rb   r   r-   r   r-   )out)r   rN   rx   r   r   r   r   r~   )r;   out_array_big	out_arrayexpected_dilationexpected_erosions        r   test_discontiguous_out_arrayr   ]  s    HHiI6AEHHVRXX.Mcc3Q3h'I	
 		 xx	
 		 	MM%Y'}&78LLI&}&67r   c                      t        j                  g d      } t        j                  g d      }t        j                  |       }t	        ||       y )N)r-   rw   rb   rw   r-   )r-   r-   rw   r-   r-   )r   rN   r   r~   r   )r;   rD   r   s      r   test_1d_erosionr   {  s6    HH_%Exx(H\\% Fvx(r   )r~   r   rO   rV   r   r   nrows)rb   r      ncolsdecomposition	separablesequencec                     t        ||fd      }t        ||f|      }t        t        |      } || |      } || |      }	t        ||	       ytValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    Nr   rI   r   getattrr   r   )
r   r   r   r   r   footprint_ndarrayrJ   r>   rD   r   s
             r   test_rectangle_decompositionr     sT     ,UEN$O#UEN-PI4"DI):;H
yI
.Cx%r   r   )rw   rb   c                     t        j                  |d      }t        j                  ||      }t        t        |      } || |      } || |      }t	        ||       yr   )r   r0   r   r   r   )	r   r   r   r   r   rJ   r>   rD   r   s	            r   test_diamond_decompositionr     sX     #**6F""6GI4"DI):;H
yI
.Cx%r   m)r   r-   rb   r   r+   )r   r-   rw   rb   zFignore:.*falling back to decomposition='separable':UserWarning:skimagec                 f   |dk(  r@|dk(  r;t        j                  t              5  t        j                  |||       ddd       yt        j                  ||d      }t        j                  |||      }t        t        |      } || |      } || |      }	t        ||	       y# 1 sw Y   yxY w)r   r   r   NrI   )rf   rg   rh   r   octagonr   r   r   )
r   r   r  r+   r   r   rJ   r>   rD   r   s
             r   test_octagon_decompositionr    s     	Av!q&]]:& 	Bq!=A	B 	B '..q!4H&&q!=I	tX&	->?9	28S)	B 	Bs   B''B0shape)r   r   r   )r   r   r   c                     t        |d      }t        ||      }t        t        |      } || |      } || |      }t        ||       yr   r   )	r%   r   r  r   r   rJ   r>   rD   r   s	            r   test_cube_decompositionr    sL     ,EF#EGI4"DL,=>H
|y
1Cx%r   )rb   c                     t        j                  |d      }t        j                  ||      }t        t        |      } || |      } || |      }t	        ||       yr   )r   
octahedronr   r   r   )	r%   r   r   r   r   rJ   r>   rD   r   s	            r   test_octahedron_decompositionr
    sX     #--fDI%%fMJI4"DL,=>H
|y
1Cx%r   r>   nameshift_xshift_yvalue)TFNc                     t        j                  d      } | |       d}t        j                  t        |      5 } | |fi ||i d d d        t               y # 1 sw Y   xY w)Nr[   z&`shift_x` and `shift_y` are deprecatedrd   )r   r]   rf   warnsFutureWarningr   )r>   r  r  rQ   regexrecords         r   test_deprecated_shiftr    s[     ''"+CI4E	m5	1 #VS"T5M"#f# #s   AA$)Anumpyr   rf   scipyr   r   numpy.testingr   r   r   r   r   r   r	   skimage._shared._warningsr
   skimage._shared.testingr   r   skimage.morphologyr   r   r   skimage.utilr   r   fixturer   r%   r~   r   rV   rO   r   r   r7   r'   rq   gray_functionsrl   rm   r   r   gray_3d_fallback_functionsr   r   r   r   rN   r   r   r   r   r   r   r   r   r   r   r   filterwarningsr  r  r
  r  ro   r   r   <module>r      s       K K * * 7 < D D 2 > > H H 	LLMMLLLL G! G!T5' 5'r 	LLMMLLLL ^4- 5-2
/ #llDLL9  %?@) A)2 2 /$ RXX%&&&% 
&&&&&
 "((&&&&& 
&&&&&
 
&&&&&
.28<) Q *-*-;
*CD
& E . .	
& Q 6*:,7
& 8 +	
& Q l+l+:,7L* 8 , ,	*" Q 9i"89;
*CD
& E :	
& Q 4(:,7
& 8 )	
& $,,!>?)Y!78"56 7 9 @r   