
    _h.                        d dl Zd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZmZmZ  ej(                   e
j*                               ZedkD  Zd Zd	 Zd
 Zd Zd Zd Zd Zd5dZej@                  jC                  dg d      ej@                  jC                  dd      ej@                  jC                  dd      ej@                  jC                  dddg      d                             Z"ej@                  jC                  dg d      ej@                  jC                  dd      ej@                  jC                  dd      ej@                  jC                  ddg      ej@                  jG                  d      d                                    Z$ej@                  jC                  dg d      ej@                  jC                  dd      ej@                  jC                  ddg      d                       Z%ej@                  jC                  dg d      ej@                  jC                  d!d"d#g      ej@                  jC                  dddg      ej@                  jG                  d      d$                             Z&ej@                  jC                  dg d      ej@                  jC                  dd%      ej@                  jC                  ddg      d&                      Z'd' Z(d( Z)ejT                  ejV                  ejX                  ejZ                  gZ.ej@                  jC                  d)e.      ej@                  jC                  d*g d+      d,               Z/ej@                  jC                  d)e.      ej@                  jC                  d*g d-      d.               Z0ej@                  jC                  de.      d/        Z1d0 Z2ejX                  ejZ                  gZ3ej@                  jC                  de3      d1        Z4d2 Z5d3 Z6d4 Z7y)6    N)assert_array_equalassert_equal)ndimage)datacolor
morphology)img_as_bool)binary
footprintsgrayfootprint_rectangleg?c                      t        d      } t        j                  t        d dd df   |       }t	        t        j                  t        d dd df   |             }t        ||       y )N   r   d      r   r
   binary_erosionbw_imgr	   r   erosionr   	footprint
binary_resgray_ress      ^/var/www/html/engine/venv/lib/python3.12/site-packages/skimage/morphology/tests/test_binary.pytest_non_square_imager      s_    #F+I&&vdsdDSDj'99EJ4<<ttTcTz(:IFGHz8,    c                      t        d      } t        j                  t        |       }t	        t        j                  t        |             }t        ||       y Nr   r   r   s      r   test_binary_erosionr       =    #F+I&&vy9J4<<	:;Hz8,r   c                      t        d      } t        j                  t        |       }t	        t        j                  t        |             }t        ||       y r   )r   r
   binary_dilationr   r	   r   dilationr   r   s      r   test_binary_dilationr%      s=    #F+I''	:J4==;<Hz8,r   c                      t        d      } t        j                  t        |       }t	        t        j                  t        |             }t        ||       y r   )r   r
   binary_closingr   r	   r   closingr   r   s      r   test_binary_closingr)   $   r!   r   c                  &   t        j                  g dg dg dg      } t        j                  t        |       }t        j
                  |t        k\        sJ t        j                  t        | d      }t        j
                  |t        k\        rJ y )Nr   r      r   r,   r,   r,   r,   r,   r   minr   mode)nparrayr
   r'   r   allimg)r   result_default
result_mins      r   test_binary_closing_extensiver9   +   sp    )Y	:;I**6YGN66.F*+++ &&sieLJvvjF*++++r   c                      t        d      } t        j                  t        |       }t	        t        j                  t        |             }t        ||       y r   )r   r
   binary_openingr   r	   r   openingr   r   s      r   test_binary_openingr=   6   r!   r   c                  &   t        j                  g dg dg dg      } t        j                  t        |       }t        j
                  |t        k        sJ t        j                  t        | d      }t        j
                  |t        k        rJ y )Nr+   r-   r.   r/   maxr1   )r3   r4   r
   r;   r   r5   )r   r7   
result_maxs      r   "test_binary_opening_anti_extensiverA   =   sp    )Y	:;I**6YGN66.F*+++ &&vOJvvjF*++++r   c                    | dk(  r/t        j                  d|z  t         j                        }d|d<   |S | dk(  r/t        j                  d|z  t         j                        }d|d<   |S t	        j
                  d|d	      }|S )
Nr   )   dtyper   )   rF   r#   r,       )n_dimrng)r3   onesuint8zerosr   binary_blobs)functionndimr6   s      r   _get_decomp_test_datarP   H   s    ##ggedl"((3D	 J 
&	&hhut|2884D	 J $A6Jr   rN   )r   r#   r'   r;   nrows)r         ncolsdecomposition	separablesequencec                     t        ||fd      }t        ||f|      }t        |       }t        t        |       } |||      } |||      }	t	        ||	       ytValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    NrU   r/   r   rP   getattrr
   r   )
rN   rQ   rT   rU   footprint_ndarrayr   r6   funcexpectedouts
             r   test_rectangle_decompositionrb   T   s^     ,UEN$O#UEN-PI

)C68$DC#45H
si
(Cx%r   m)r   r,      r         nzFignore:.*falling back to decomposition='separable':UserWarning:skimagec                 |   |dk(  r@|dk(  r;t        j                  t              5  t        j                  |||       ddd       yt        j                  ||d      }t        j                  |||      }t        |       }t        t        |       } |||      } |||      }	t        ||	       y# 1 sw Y   yxY w)rZ   r   r[   Nr/   )	pytestraises
ValueErrorr   octagonrP   r]   r
   r   )
rN   rc   rg   rU   r^   r   r6   r_   r`   ra   s
             r   test_octagon_decompositionrm   i   s     	Av!q&]]:& 	Bq!=A	B 	B '..q!4H&&q!=I	#H-vx('893),8S)	B 	Bs   B22B;radius)r,   rd   rf   c                     t        j                  |d      }t        j                  ||      }t        |       }t        t        |       } |||      } |||      }t        ||       yrY   )r   diamondrP   r]   r
   r   	rN   rn   rU   r^   r   r6   r_   r`   ra   s	            r   test_diamond_decompositionrr      sb     #**6F""6GI

)C68$DC#45H
si
(Cx%r   shaper   r   r   )r   re   rf   c                     t        |d      }t        ||      }t        | d      }t        t        |       } |||      } |||      }t	        ||       yrZ   Nr[   r   )rO   r/   r\   )	rN   rs   rU   r^   r   r6   r_   r`   ra   s	            r   test_cube_decompositionrw      sX     ,EF#EGI
q
1C68$DC#45H
si
(Cx%r   )r,   rd   r   c                     t        j                  |d      }t        j                  ||      }t        | d      }t        t        |       } |||      } |||      }t        ||       yrv   )r   
octahedronrP   r]   r
   r   rq   s	            r   test_octahedron_decompositionrz      sd     #--fDI%%fMJI
q
1C68$DC#45H
si
(Cx%r   c                     t        j                  dt         j                        } t        j                  dt              }d|ddddf<   t        j                  ||       }t        t        j                  ||             }t        ||       y )N)rC   rC   rD   )   r|   Trd      )r3   rJ   rK   rL   boolr
   r   r	   r   r   r   )r   r6   r   r   s       r   test_footprint_overflowr      sl    1I
((84
(CC"ad
O&&sI6J4<<Y78Hz8,r   c                  |   t         j                  t         j                  fD ]  } t        j                  dt        j
                        }t        j                  d      }t        j                  |      }|j                         } | |||       t        j                  ||k7        sJ t        | | ||              y )Nr   rD   
   r   ra   )
r
   r   r#   r3   rJ   rK   
zeros_likecopyanyr   )r_   r   r6   ra   	out_saveds        r   test_out_argumentr      s    &&(>(>? 6GGF"((3	gghmmC HHJ	S)%vvcY&'''3S) 456r   r_   r2   )r?   r0   ignorec                 N    t        j                  dt              } | ||       y )Nr   rD   r2   )r3   rJ   r~   r_   r2   r6   s      r   test_supported_moder      s     ''($
'C4r   )reflectr   Nc                     t        j                  d      }t        j                  t        d      5   | ||       d d d        y # 1 sw Y   y xY w)Nr   zunsupported mode)matchr   )r3   rJ   ri   rj   rk   r   s      r   test_unsupported_moder      s@     ''(
C	z);	< St  s   AAc                     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,   )rn   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r,   r,   r,   r,   r,   r,   r   r   )
r   r   r,   r,   r,   r   r   r,   r   r   )r   rp   r3   r4   rK   r   )rN   r   imageim_expectedim_tests        r   test_default_footprintr      sv    ""!,I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rR   rR   rR   r,   rd   rD   r   rf   )r3   rL   r~   r
   r;   ndigenerate_binary_structurer   )r   openedimage_expecteds      r   "test_3d_fallback_default_footprintr   	  s    HHY%EE!B$"ad
""5)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,   rd   r   rt   rD   )r3   rL   r~   rJ   rK   r   )rN   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         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    @  rd   r      r     re   re   r,   )	structure)	r3   rL   uint16r
   r;   r'   r   r   r   )r   
bin_opened
bin_closedr   ndimage_openedndimage_closeds         r   test_2d_ndimage_equivalencer   %  s    HHVRYY'EE!B$"*E!B$"*E$K&&u-J&&u-J--a3I''CN''CNz>2z>2r   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                  | t         j                  
      }t        j                  | t         j                  
      }t        j                  | |       t        j
                  | |       t        |j                  t               t        |j                  t               t        |j                  t         j                         t        |j                  t         j                         y )Nr   r   rd   r   r   r   r   r   r   rD   r   r3   rL   r   r
   r;   r'   
empty_likerK   r   rE   r~   r   r   r   
int_opened
int_closeds        r   test_binary_output_2dr   6  s    HHVRYY'EE!B$"*E!B$"*E$K&&u-J&&u-JuBHH5JuBHH5J
%Z0
%Z0!!4(!!4(!!288,!!288,r   c                     t        j                  dt         j                        } d| ddddddf<   d| ddddddf<   d| d	<   t        j                  |       }t        j
                  |       }t        j                  | t         j                  
      }t        j                  | t         j                  
      }t        j                  | |       t        j
                  | |       t        |j                  t               t        |j                  t               t        |j                  t         j                         t        |j                  t         j                         y )N)r   r   r   r   rd   r   r   r   r   r   )re   re   re   rD   r   r   r   s        r   test_binary_output_3dr   K  s	   HHY		*E#E!B$"ad
#E!B$"ad
E'N&&u-J&&u-JuBHH5JuBHH5J
%Z0
%Z0!!4(!!4(!!288,!!288,r   )rd   )8numpyr3   ri   numpy.testingr   r   scipyr   r   skimager   r   r   skimage.utilr	   skimage.morphologyr
   r   r   r   rgb2gray	astronautr6   r   r   r    r%   r)   r9   r=   rA   rP   markparametrizerb   filterwarningsrm   rr   rw   rz   r   r   r   r#   r;   r'   binary_functionsr   r   r   r   binary_3d_fallback_functionsr   r   r   r    r   r   <module>r      s     :   + + $ L L enn^T^^%&	{	----,-,	 M *-*-;
*CD& E . .	& M 0101:,7L* 8 2 2	*$ M 9-:,7& 8 .	& M 9i"89;
*CDL& E :	& M 9-:,7& 8 .	&-6 


	  !12!9: ; 3
 !12!56 7 3 %56- 7-2
/ !' 5 5v7L7LM  %AB) C)3"-*-r   