
    1-Ph?                     	   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j        d	             Zej        d
             Zej        ej        ej        ej         ej!        ej"        fZ# G d d          Z$ G d d          Z%ej        ej        ej        ej         ej!        ej"        gZ&ej'        (                    de&          d             Z)d Z*ej         ej        gZ+ej'        (                    de+          d             Z,d Z-d Z.d Z/ ej0        g dg dg dg dg dg          Z1 ej0        g dg dg dg dg dg          Z2 ej0        g d g d!g d"g d#g d$g          Z3 ej0        g d%g d&g d'g d(g d)g          Z4 ej0        g d*g d g d+g d,g d-g          Z5d. Z6d/ Z7d0 Z8d1 Z9ej'        (                    dg d2          ej'        (                    d3g d4          ej'        (                    d5g d4          ej'        (                    d6d7d8g          d9                                                 Z:ej'        (                    dg d2          ej'        (                    d:d;          ej'        (                    d6d8g          d<                                     Z;ej'        (                    dg d2          ej'        (                    d=d>          ej'        (                    d?d@          ej'        (                    d6d8g          ej'        <                    dA          dB                                                             Z=ej'        (                    dg d2          ej'        (                    dCdDdEg          ej'        (                    d6d7d8g          dF                                     Z>ej'        (                    dg d2          ej'        (                    d:dG          ej'        (                    d6d8g          dH                                     Z?ej'        (                    dIej        ej        g          ej'        (                    dJdKdLg          ej'        (                    dMg dN          dO                                     Z@dS )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    b/var/www/html/test/jupyter/venv/lib/python3.11/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%      sG    r"uaB2/E FGGGr   c                   H   e Zd Zd Zd Zd Zd Zej        	                    de
          ej        	                    dej                  d                         Zej        	                    de
          ej        	                    dg d          d	                         Zd
S )TestMorphologyc           	      ~   d }|t           j        t           j        t           j        f}t	          t          j        t          j        t          j
                              d                    }i }t          dd          D ]=}|D ]8}t          D ].}|j         d| d|j         } || ||                    ||<   /9>|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    	/ 	/ 	/ OO	
 *5>$+--+H+H(SS
 
 q! 	8 	8A& 8 81 8 8D"^AAaAA$-AAC"&$ueeAhh"7"7F3KK88
 r   c                     t          t          j        t          d                              }|                                 }t          ||           d S )Nzdata/gray_morph_output.npz)dictr   loadr   r@   r   )r9   expected
calculateds      r   test_gray_morphologyz#TestMorphology.test_gray_morphologyF   sI    &B C CDDEE002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 d S 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   s    jllHiiiIII>??	 cY???6.C/00000cYXFFFvf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 d S 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   s    jllHiiiIII>??	 cY???6.C/00000SIHMMMvms*+++++++r   r>   rL   c                 H    t          j        d          } |||           d S )N
   r[   rL   )r   onesr9   r>   rL   rQ   s       r   test_supported_modez"TestMorphology.test_supported_modea   s.     ghStr   ) 	symmetric   Nc                     t          j        d          }t          j        t          d          5   |||           d d d            d S # 1 swxY w Y   d S )NrZ   zunsupported modematchr\   )r   r]   pytestraises
ValueErrorr^   s       r   test_unsupported_modez$TestMorphology.test_unsupported_modeg   s     gh]:-?@@@ 	! 	!D4    	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   A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                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS ) TestEccentricStructuringElementsc                     dt          j        dt           j                  z  | _        d| j        d<   d| j        z
  | _        t          d          t          d          t          d          g| _        d S )N   )   rt   dtyper   )   rw   )rw   r-   )r   r]   uint8black_pixelwhite_pixelr   r   )r9   s    r   setup_classz,TestEccentricStructuringElements.setup_classp   sk    rx!@!@!@@!"!11''''''
r   c                     | j         D ]S}t          j        | j        |          }t          j        | j        |          }t          j        |d|z
  k              sJ Td S Nrs   )r   r   erosionry   dilationrz   r   rP   )r9   scds       r   test_dilate_erode_symmetryz;TestEccentricStructuringElements.test_dilate_erode_symmetryz   sf     	* 	*AT-q11Ad.22A6!a.))))))	* 	*r   c                     | j         D ];}t          j        | j        |          }t	          j        || j        k              sJ <d S r*   )r   r   rV   ry   r   rP   )r9   r   	gray_opens      r   test_open_black_pixelz6TestEccentricStructuringElements.test_open_black_pixel   sR     	9 	9AT%5q99I6)t'77888888	9 	9r   c                     | j         D ];}t          j        | j        |          }t	          j        || j        k              sJ <d S r*   )r   r   rO   rz   r   rP   )r9   r   
gray_closes      r   test_close_white_pixelz7TestEccentricStructuringElements.test_close_white_pixel   sR     	: 	:Ad&6::J6*(88999999	: 	:r   c                 ~    | j         D ]4}t          j        t          j        | j        |          dk              sJ 5d S Nr   )r   r   rP   r   rV   rz   r9   r   s     r   test_open_white_pixelz6TestEccentricStructuringElements.test_open_white_pixel   sN     	B 	BA6$,t'7;;q@AAAAAA	B 	Br   c                 ~    | j         D ]4}t          j        t          j        | j        |          dk              sJ 5d S r}   )r   r   rP   r   rO   ry   r   s     r   test_close_black_pixelz7TestEccentricStructuringElements.test_close_black_pixel   sN     	D 	DA6$,t'7;;sBCCCCCC	D 	Dr   c                     | j         D ];}t          j        | j        |          }t	          j        || j        k              sJ <d S r*   )r   r   white_tophatrz   r   rP   r9   r   tophats      r   test_white_tophat_white_pixelz>TestEccentricStructuringElements.test_white_tophat_white_pixel   S     	6 	6A&t'7;;F6&D$44555555	6 	6r   c                     | j         D ];}t          j        | j        |          }t	          j        || j        k              sJ <d S 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 ]6}t          j        | j        |          }t	          j        |dk              sJ 7d S r   )r   r   r   ry   r   rP   r   s      r   test_white_tophat_black_pixelz>TestEccentricStructuringElements.test_white_tophat_black_pixel   O     	' 	'A&t'7;;F6&A+&&&&&&	' 	'r   c                     | j         D ]6}t          j        | j        |          }t	          j        |dk              sJ 7d S 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   s        
 
 
* * *9 9 9
: : :
B B BD D D6 6 6
6 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          ||           d S )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      s    a(((EH***************************************	
 	! E$ (5%((KhuooG{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          ||           d S )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    HY%%EE!B$"ad
\%  F Xit444N$'$A!Q$G$GN1Q3!QqS=!v~.....r   c                     t          j        dt                    }d|ddddddf<   t          j        dt           j                  } | ||          }t          ||           d S )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      so     HY%%EE!B$"ad
79BH---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            n# 1 swxY w Y   t          j        dd          }t          dg          5  t          j        |                     t           j	                  |	          }d d d            n# 1 swxY w Y   t          ||           d S )
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   HYd+++EE!QqS!A#+E!QqS!A#+E!QqS!A#+	89	:	: - -%e,,	- - - - - - - - - - - - - - --a33I	89	:	: 
 
)JJRXJ&&)
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 y.11111$   A11A58A5!5C""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            n# 1 swxY w Y   t          j        dd	          }t          dg          5  t          j        |                     t           j	                  |
          }d d d            n# 1 swxY w Y   t          ||           d S )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   GIT***EE!QqS!A#+E!QqS!A#+E!QqS!A#+	89	:	: - -%e,,	- - - - - - - - - - - - - - --a33I	89	:	: 
 
)JJRXJ&&)
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 y.11111r   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          ||           d S )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    HVRX&&EE!B$"*E!B$"*E$K\%  F\%  F-a33I%eyAAAN%eyAA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                  f   t          t          j        t                    t                     t          t          j        t                    t                     t          t          j        t                    t                     t          t          j	        t                    t                     d S r*   )r   r   r~   imerodedr   dilatedrV   r   rO   r   ro   r   r   
test_floatr   L  sp    DL$$f---DM"%%w///DL$$f---DL$$f-----r   c                     t          t          t          t          t          t
          t          g          \  } }}}}t          t          j	        |           |           t          t          j
        |           |           t          t          j        |           |           t          t          j        |           |           d S r*   )mapr   r   r   r   r   r   r   r   r~   r   rV   rO   )im16eroded16	dilated16opened16closed16s        r   test_uint16r   S  s    47b&'66:5 51D(Ix DL&&111DM$''333DL&&111DL&&1111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          ||           d S )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-   HiiiIII6AAEHVRX..Mccc33Q3h'IOOOOOOOOOO	
 		 	 xOOOOOOOOOO	
 		 	 	M%Y''''}&7888LI&&&&}&677777r   c                      t          j        g d          } t          j        g d          }t          j        |           }t	          ||           d S )N)r-   rw   rb   rw   r-   )r-   r-   rw   r-   r-   )r   rN   r   r~   r   )r;   rD   r   s      r   test_1d_erosionr   {  sM    H___%%Ex((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          ||	           dS 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     s     ,UEN$OOO#UEN-PPPI4""DtI):;;;H
$yI
.
.
.Cx%%%%%r   r   )rw   rb   c                     t          j        |d          }t          j        ||          }t          t          |          } || |          } || |          }t	          ||           dS r   )r   r0   r   r   r   )	r   r   r   r   r   rJ   r>   rD   r   s	            r   test_diamond_decompositionr     s}     #*6FFF"6GGGI4""DtI):;;;H
$yI
.
.
.Cx%%%%%r   m)r   r-   rb   r   r+   )r   r-   rw   rb   zFignore:.*falling back to decomposition='separable':UserWarning:skimagec                    |dk    rQ|dk    rKt          j        t                    5  t          j        |||           ddd           dS # 1 swxY w Y   dS t          j        ||d          }t          j        |||          }t          t          |          } || |          } || |          }	t          ||	           dS )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    s4    	Avv!q&&]:&& 	B 	Bq!=AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B '.q!4HHH&q!=III	tX&&4	->???d9	2228S)))))s   AAAshape)r   r   r   )r   r   r   c                     t          |d          }t          ||          }t          t          |          } || |          } || |          }t          ||           dS r   r   )	r%   r   r  r   r   rJ   r>   rD   r   s	            r   test_cube_decompositionr    sw     ,EFFF#EGGGI4""DtL,=>>>H
$|y
1
1
1Cx%%%%%r   )rb   c                     t          j        |d          }t          j        ||          }t          t          |          } || |          } || |          }t	          ||           dS r   )r   
octahedronr   r   r   )	r%   r   r   r   r   rJ   r>   rD   r   s	            r   test_octahedron_decompositionr
    s}     #-fDIII%fMJJJI4""DtL,=>>>H
$|y
1
1
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            n# 1 swxY w Y   t          |           d S )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DIII4E	m5	1	1	1 #VS""T5M"""# # # # # # # # # # # # # # #fs   A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      sW                    K K K K K K K K K K * * * * * * * * * * 7 7 7 7 7 7 < < < < < < < < D D D D D D D D D D 2 2 2 2 2 2 2 2 > > > H H H 	LMLL G! G! G! G! G! G! G! G!T5' 5' 5' 5' 5' 5' 5' 5'r 	LMLL ^44- - 54-2
/ 
/ 
/ #lDL9  %?@@) ) A@)2 2 2 2 2 2 / / /$ RX%%%&&&&&&&&&%%%  
&&&&&&&&&&&&&&&
 
 "(&&&&&&&&&&&&&&&  
&&&&&&&&&&&&&&&
 
 
&&&&&&&&&&&&&&&
 
. . .2 2 28 8 8<) ) ) QQQ  ***--***--;
*CDD
& 
& ED .- .-	 
& QQQ  6**:,77
& 
& 87 +*	 
& QQQ  l++l++:,77L * *  87 ,+ ,+	 *" QQQ  9i"899;
*CDD
& 
& ED :9	 
& QQQ  4((:,77
& 
& 87 )(	 
& $,!>??)Y!788"5"5"566  76 98 @?  r   