
    a6d{<                        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 d dlmZmZ d dlmZmZ ej        d	             Zej        d
             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j-        g dg dg dg dg dg          Z. ej-        g dg dg dg dg dg          Z/ ej-        g d g d!g d"g d#g d$g          Z0 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          Z2d. Z3d/ Z4d0 Z5d1 Z6ej$        %                    dg d2          ej$        %                    d3d4          ej$        %                    d5d6d7g          d8                                     Z7ej$        %                    dg d2          ej$        %                    d9d:          ej$        %                    d;d:          ej$        %                    d5d6d7g          d<                                                 Z8ej$        %                    dg d2          ej$        %                    d=d>          ej$        %                    d5d6d7g          d?                                     Z9ej$        %                    dg d2          ej$        %                    d@dA          ej$        %                    dBdC          ej$        %                    d5d7g          dD                                                 Z:ej$        %                    dg d2          ej$        %                    d3dE          ej$        %                    d5d6d7g          dF                                     Z;ej$        %                    dg d2          ej$        %                    d=dG          ej$        %                    d5d7g          dH                                     Z<dS )I    N)ndimage)assert_allcloseassert_array_equalassert_equal)colordata	transform)expected_warnings)fetch)gray
footprints)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    Blib/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                       e Zd Zd Zd ZdS )TestMorphologyc           	      
   t           j        t           j        t           j        t           j        t           j        t           j        f}t          j        t          j	        t          j
        t          j        f}t          t          j        t          j        t#          j                              d                    }i }t'          dd          D ]8}|D ]3}|D ].}|j         d| d|j         } || ||                    ||<   /49|S )N)r   r         _)r   erosiondilationopeningclosingwhite_tophatblack_tophatr   squarediamonddiskstarr   r	   downscale_local_meanr   rgb2grayr   coffeerange__name__)	selffuncsfootprints_2Dimageoutputnstrelfunckeys	            r   _build_expected_outputz%TestMorphology._build_expected_output#   s    t}dlDL"D$57#*J,>#*/; Y;N4;==))85 5 6 6 q! 	8 	8A& 8 8! 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   rB   r   )r9   expected
calculateds      r   test_gray_morphologyz#TestMorphology.test_gray_morphology5   sI    &B C CDDEE0022
Xz*****r   N)r8   
__module____qualname__rB   rH    r   r   r%   r%      s2          $+ + + + +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                 4   dt          j        dt           j                  z  | _        d| j        d<   d| j        z
  | _        t          j        d          t          j        dd          t          j        dd          t          j        dd          g| _        d S )N   r(   r(   dtyper   )r'   r'      r'   )r   onesuint8black_pixelwhite_pixelr   r0   	rectangle)r9   s    r   setup_classz,TestEccentricStructuringElements.setup_class<   s    rx!@!@!@@!"!11%,Q//1Ea1K1K%/155%/1557r   c                     | j         D ]S}t          j        | j        |          }t          j        | j        |          }t          j        |d|z
  k              sJ Td S NrO   )r   r   r*   rV   r+   rW   r   all)r9   scds       r   test_dilate_erode_symmetryz;TestEccentricStructuringElements.test_dilate_erode_symmetryD   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 N)r   r   r,   rV   r   r\   )r9   r]   	gray_opens      r   test_open_black_pixelz6TestEccentricStructuringElements.test_open_black_pixelJ   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 rb   )r   r   r-   rW   r   r\   )r9   r]   
gray_closes      r   test_close_white_pixelz7TestEccentricStructuringElements.test_close_white_pixelO   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   r\   r   r,   rW   r9   r]   s     r   test_open_white_pixelz6TestEccentricStructuringElements.test_open_white_pixelT   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   r\   r   r-   rV   rj   s     r   test_close_black_pixelz7TestEccentricStructuringElements.test_close_black_pixelX   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 rb   )r   r   r.   rW   r   r\   r9   r]   tophats      r   test_white_tophat_white_pixelz>TestEccentricStructuringElements.test_white_tophat_white_pixel\   sS     	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        |d| j        z
  k              sJ ?d S r[   )r   r   r/   rV   r   r\   ro   s      r   test_black_tophat_black_pixelz>TestEccentricStructuringElements.test_black_tophat_black_pixela   sX     	> 	>A&t'7;;F6&S4+;%;<======	> 	>r   c                     | j         D ]6}t          j        | j        |          }t	          j        |dk              sJ 7d S ri   )r   r   r.   rV   r   r\   ro   s      r   test_white_tophat_black_pixelz>TestEccentricStructuringElements.test_white_tophat_black_pixelf   O     	' 	'A&t'7;;F6&A+&&&&&&	' 	'r   c                     | j         D ]6}t          j        | j        |          }t	          j        |dk              sJ 7d S ri   )r   r   r/   rW   r   r\   ro   s      r   test_black_tophat_white_pixelz>TestEccentricStructuringElements.test_black_tophat_white_pixelk   rv   r   N)r8   rI   rJ   rY   r`   rd   rg   rk   rm   rq   rs   ru   rx   rK   r   r   rM   rM   ;   s        7 7 7* * *9 9 9
: : :
B B BD D D6 6 6
> > >
' ' '
' ' ' ' 'r   rM   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   r1   r   arrayrU   r   )ry   r?   r<   im_expectedim_tests        r   test_default_footprintr   v   s    a(((EH4444444444444444444444444444444444444446 8:xA A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'   rS   rQ         )r   zerosboolr   r,   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'   rS   r   )r   r   r   rQ   )r   r   r   rT   rU   r   )ry   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   rQ   r'   rS   r(   r   r   operator.*deprecated|\A\Z	footprint)r   r   r   r
   r   r.   r   r   viewrU   r   r<   r   r   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   rQ   r   rS   r(   r   r   r   r'   r   )r   rT   r   r
   r   r/   r   r   r   rU   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      rS   r      r   rO   rP   r'   r   )r   r   rU   r   r,   r-   r   r   grey_openinggrey_closingr   )r<   r   closedr   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 rb   )r   r   r*   imerodedr+   dilatedr,   r   r-   r   rK   r   r   
test_floatr      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 rb   )mapr   r   r   r   r   r   r   r   r*   r+   r,   r-   )im16eroded16	dilated16opened16closed16s        r   test_uint16r      s    K"fgvv>?? 2D(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      rS   )r   rS   rS   )r   r   r'   )r   r   rS   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   rS   )r   r   r   r   r   )r   r   rS   r   rS   )rS   r   rS   r   r'   )r   r   r'   r   r'   )out)r   r|   rU   r   r   r+   r   r*   )r<   out_array_big	out_arrayexpected_dilationexpected_erosions        r   test_discontiguous_out_arrayr     s6   Hiiiiiii!"$(, ,E HVRX..Mccc33Q3h'I///"1//"1//"1//"1//	"3 57H	> >
 x!0!0!0!0	!2 468	= =
 	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'   rS   r   rS   r'   )r'   r'   rS   r'   r'   )r   r|   r   r*   r   )r<   rF   r   s      r   test_1d_erosionr     sM    H___%%Ex((H\%  Fvx(((((r   )r*   r+   r-   r,   r.   r/   size)r   decomposition	separablesequencec                     t          j        |d          }t          j        ||          }t          t          |          } || |          } || |          }t	          ||           dS tValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    Nr   r   r   r0   getattrr   r   )	r   ry   r   r   footprint_ndarrayr   r@   rF   r   s	            r   test_square_decompositionr   #  s}     #)$dCCC!$mDDDI4""DtI):;;;H
$yI
.
.
.Cx%%%%%r   nrows)r      ncolsc                     t          j        ||d          }t          j        |||          }t          t          |          } || |          } || |          }	t	          ||	           dS r   )r   rX   r   r   r   )
r   ry   r   r   r   r   r   r@   rF   r   s
             r   test_rectangle_decompositionr   6  s     #,UENNN$UEOOOI4""DtI):;;;H
$yI
.
.
.Cx%%%%%r   r{   )rS   r   c                     t          j        |d          }t          j        ||          }t          t          |          } || |          } || |          }t	          ||           dS r   r   )	r   ry   r{   r   r   r   r@   rF   r   s	            r   test_diamond_decompositionr   K  s}     #)&EEE!&FFFI4""DtI):;;;H
$yI
.
.
.Cx%%%%%r   m)r   r'   r   r   r>   )r   r'   rS   r   c                    |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   Nr   )pytestraises
ValueErrorr   octagonr   r   r   )
r   ry   r   r>   r   r   r   r@   rF   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)r   c                     t          j        |d          }t          j        ||          }t          t          |          } || |          } || |          }t	          ||           dS r   )r   r   r   r   r   )	r#   ry   r   r   r   r   r@   rF   r   s	            r   test_cube_decompositionr   v  s{     #DAAAMBBBI4""DtL,=>>>H
$|y
1
1
1Cx%%%%%r   )r   c                     t          j        |d          }t          j        ||          }t          t          |          } || |          } || |          }t	          ||           dS r   )r   
octahedronr   r   r   )	r#   ry   r{   r   r   r   r@   rF   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   )=numpyr   r   scipyr   r   numpy.testingr   r   r   r   r   r   r	   skimage._shared._warningsr
   skimage._shared.testingr   skimage.morphologyr   r   skimage.utilr   r   fixturer   r#   r%   rM   r*   r+   r,   r-   r.   r/   gray_functionsmarkparametrizer   r   gray_3d_fallback_functionsr   r   r   r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rK   r   r   <module>r      s                    K K K K K K K K K K * * * * * * * * * * 7 7 7 7 7 7 ) ) ) ) ) ) / / / / / / / / 2 2 2 2 2 2 2 2 > > >
 H H H
+ + + + + + + +D3' 3' 3' 3' 3' 3' 3' 3'l ,,#T%68
 ^44- - 54-(
/ 
/ 
/ #lDL9  %?@@) ) A@)2 2 22 2 2/ / /$ RX222222222222222	4 5 5 
666666666666666	8 
9 
9 "(777777777777777	9 : : 
666666666666666	8 
9 
9 
666666666666666	8 
9 
9. . .2 2 28 8 8,) ) )  ! ! !  &&;
*CDD
& 
& ED '&	 
&  ! ! !  '**'**;
*CDD& & ED +* +*	 &  ! ! !  6**;
*CDD
& 
& ED +*	 
&  ! ! !  l++l++:,77* * 87 ,+ ,+	 *"  ! ! !  &&;
*CDD
& 
& ED '&	 
&  ! ! !  4((:,77& & 87 )(	 & & &r   