
    |h:H                        d dl mZ 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 d dlmZ  e       d        Zd Zd	 Zd
 Zd&dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'ejP                  jS                  dg d       d!        Z*d" Z+d# Z,ejP                  jS                  d$ejZ                   ejZ                  g      d%        Z.y)'    )productN)assert_equal)datafiltersimg_as_float)run_in_parallelexpected_warnings)slicc                  v   t         j                  j                  d      } t        j                  d      }d|d dd ddf<   d|dd d ddf<   d|dd dd df<   |d| j	                  |j
                        z  z  }d||dkD  <   d||dk  <   t        |ddd	d
      }t        t        t        j                  |            d       t        |j
                  |j
                  d d        t        |d dd df   d       t        |dd d df   d       t        |d ddd f   d       t        |dd dd f   d       y )Nr               
      {Gz?size   F)
n_segmentssigmaenforce_connectivitystart_labelr   
nprandomdefault_rngzerosnormalshaper
   r   lenuniquerngimgsegs      c/var/www/html/test/engine/venv/lib/python3.12/site-packages/skimage/segmentation/tests/test_slic.pytest_color_2dr*      sB   
))


"C
((;
CCSbS!CSbS!CRS!4#**#))*,,,CCaLCaL
sqST
UC RYYs^$a(CIIcrN+SbS#2#X"RS#2#X"SbS"#X"RS"#X"    c                     t         j                  j                  d      } t        j                  d      }d|d dd dddf<   d|d ddd ddf<   d|dd d dddf<   d|dd dd ddf<   |d	| j	                  |j
                  
      z  z  }t        j                  |dd|      }t        |ddd      }t        t        t        j                  |            d       t        |j
                  |j
                  d d        t        |d dd df   d       t        |dd d df   d       t        |d ddd f   d       t        |dd dd f   d       y )Nr   r   r      r   r   r   r      r.   r   r   outF)r   r   r   r   r   r   r   r   r    r!   r"   clipr
   r   r#   r$   r%   s      r)   test_multichannel_2dr4   !   s_   
))


"C
((;
CCSbS!A#CRS!A#CSbS!A#CRS!A#4#**#))*,,,C
''#q!
%C
squ!
LC RYYs^$a(CIIcrN+SbS#2#X"RS#2#X"SbS"#X"RS"#X"r+   c            	      n   t         j                  j                  d      } t        j                  d      }d|d dd df<   d|dd d df<   d|dd dd f<   |d| j	                  |j
                        z  z  }d	||d	kD  <   d||dk  <   t        |dd
d	d dd      }t        t        t        j                  |            d
       t        |j
                  |j
                         t        |d dd df   d       t        |dd d df   d       t        |d ddd f   d	       t        |dd dd f   d       y )Nr   r   r   Q?r   q=
ףp?      ?F%uk?r   r   r   Fr   r   compactnesschannel_axisconvert2labr   r   r   r   r%   s      r)   test_gray_2dr?   5   s?   
))


"C
((8
CCSbSMCSbSMCRSM6CJJCIIJ...CCaLCaL
C RYYs^$a(CII&SbS#2#X"RS#2#X"SbS"#X"RS"#X"r+   c                      t        j                  d      } d| d dd df<   t        j                  t        d      5  t        |        d d d        t        | d        y # 1 sw Y   xY w)Nr6   r7   r   z&channel_axis=-1 indicates multichannel)matchr=   )r   r    pytestraises
ValueErrorr
   r'   s    r)    test_gray2d_default_channel_axisrG   P   sZ    
((8
CCSbSM	z)Q	R S	4  s   AA'c                 `    | j                   }t        j                  | |k7        }||z  |k  sJ y )N)r   r   sum)seg1seg2allowed_mismatch_ratior   ndiffs        r)   _check_segment_labelsrN   X   s0    99DFF44< EDL2222r+   c                  b   t        j                         d dd df   } d| j                  t        j                        z  }t        |       }||j                         z  }|dz   }t        |       }t        |      }t        |      }t        |      }t        |      }	t        j                  j                  ||       t        j                  j                  ||       t        j                  j                  ||	       |j                         }
|j                         }t        |
|z
        |
z  dk  sJ y )N      i  g      ?)r   catastyper   uint16r   maxr
   testingassert_array_equalabs)	img_uint8
img_uint16img_float32img_float32_normimg_float32_offsetrJ   rK   seg3seg4seg5n_seg1n_seg4s               r)   ,test_slic_consistency_across_image_magnituderc   ^   s    
4C4#:&Iy''		22Jy)K"[__%66$t+	?D
DD !D"#DJJ!!$-JJ!!$-JJ!!$-
 XXZFXXZFv&(3...r+   c                     t         j                  j                  d      } t        j                  d      }g }|j                  d d D ].  }|dz  }|j                  t        d |      t        |d       f       0 t        t        |       }t        t        ddgfdz         }t        ||      D ]
  \  }}|||<    |d| j                  |j                        z  z  }d||dkD  <   d||dk  <   t        |dd	d
      }t        t        t        j                  |            d	       t        |t        d	            D ]  \  }}t        ||   |        y )Nr   r   r      r   r   r   r   r   r   r   r.   )r   r   r   )r   r   r   r    r"   appendslicelistr   zipr!   r
   r   r#   r$   range)	r&   r'   slicesdim_sizemidpointcolorsscr(   s	            r)   test_color_3drr   z   sD   
))


"C
((?
#CFIIcrN Fq=uT8,eHd.CDEF '6"#F'aVIM+,FFF# 1A4#**#))*,,,CCaLCaL
s!q
9CRYYs^$a(FE!H%  1SVQ r+   c            	         t         j                  j                  d      } t        j                  d      }g }|j                  D ].  }|dz  }|j                  t        d |      t        |d       f       0 t        t        |       }t        j                  ddd      }t        ||      D ]
  \  }}|||<    |d| j                  |j                        z  z  }d||dkD  <   d||dk  <   t        |dd	dd d
d      }t        t        t        j                  |            d	       t        |t!        d	            D ]  \  }}	t        ||   |	        y )Nr   r   r   rf   r   gzo ?g$I$I?MbP?r   r   r.   Fr;   )r   r   r   r    r"   rg   rh   ri   r   arangerj   r!   r
   r   r#   r$   rk   )
r&   r'   rl   rm   rn   shadesrp   shr(   rq   s
             r)   test_gray_3dry      sH   
))


"C
((<
 CFII Fq=uT8,eHd.CDEF '6"#FYYq(G,FVV$ 2A53::399:---CCaLCaL
C RYYs^$a(FE!H%  1SVQ r+   c                     t         j                  j                  d      } t        j                  g dg dgt              }|d| j                  |j                        z  z  }t        j                  g dg dgt              }t        dg      5  t        |dg dd d	      }d d d        t        |       y # 1 sw Y   xY w)
Nr   r   r   r   r   r   r   r   r   r   r   r   r   皙?r   z5Input image is 2D: sigma number of elements must be 2r   )r   2   r   )r   r   r=   r   )r   r   r   arrayfloatr!   r"   intr	   r
   r   )r&   r'   result_sigma	seg_sigmas       r)   test_list_sigmar      s    
))


"C
((&(:;U
CC3+++C88/1CDcJL		CD
 
 AZdPQ
	
 L)
 
s   B66B?c            	         t         j                  j                  d      } t        j                  g dg dgt              }t        j                  g dg dgt
              }t        j                  g dg dgt
              }|d| j                  |j                  	      z  z  }t        |d
dd dd      }t        |d
dddgdd d      }t        ||       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   r9   )r   r   r=   r<   r     r   )r   r   spacingr<   r=   r   )
r   r   r   r   r   r   r!   r"   r
   r   )r&   r'   result_non_spacedresult_spacedseg_non_spaced
seg_spaceds         r)   test_spacingr      s    
))


"C
((O_5u
=C/?!CSIHHo?EM3+++C3TUN aJ !23]+r+   c                      t        j                  g dg dgt              dz   } t        j                  t
              5  t        | ddd       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   Tr   )r=   r>   r   )r   r   r   rC   rD   rE   r
   rF   s    r)   test_invalid_lab_conversionr      sO    
((O_5u
=
AC	z	" DSrtCD D Ds   AAc            
         t        j                  g dg dg dgt              } t        | dddddd 	      }t        | dddddd 	      }t        | ddddd
dd       }t        j                  g dg dg dgt              }t        j                  g dg dg dgt              }t	        ||       t	        ||       t	        ||       y )Nr|   r   r   r   r   r   r   r   r   r   r   r   r   r   -C6?TFr   )r<   r   r>   r   r=   皙?)r<   r   r>   max_size_factorr   r=   )r   r   r   r
   r   )r'   segments_connectedsegments_disconnectedsegments_connected_low_maxresult_connectedresult_disconnecteds         r)   test_enforce_connectivityr      s    
((&(:<NOQV
WC	! !	" "&	!	" xx	/1CDe ((	/1CDe #%56&(;<+-=>r+   c                  v   t         j                  j                  d      } t        j                  d      }d|d dd ddf<   d|dd d ddf<   d|dd dd df<   |d| j	                  |j
                        z  z  }d||dkD  <   d||dk  <   t        |ddd	d
      }t        t        t        j                  |            d       t        |j
                  |j
                  d d        t        |d dd df   d       t        |dd d df   d       t        |d ddd f   d       t        |dd dd f   d       y )Nr   r   r   r   r   r   r   r   T)r   r   	slic_zeror   r   r   r   r%   s      r)   test_slic_zeror     sA   
))


"C
((;
CCSbS!CSbS!CRS!4#**#))*,,,CCaLCaL
sqTq
IC RYYs^$a(CIIcrN+SbS#2#X"RS#2#X"SbS"#X"RS"#X"r+   c            	         t         j                  j                  d      } t        j                  d      }d|d dd df<   d|dd d df<   d|dd dd f<   |d| j	                  |j
                        z  z  }d	||d	kD  <   d||dk  <   t        |dd
d	d dd      }t        j                  |j                         t        j                  |j                        k(        sJ y )Nr   r6   r7   r   r8   r9   r:   r   r   r   Fr;   )r   r   r   r    r!   r"   r
   allravelrv   r   r%   s      r)   test_more_segments_than_pixelsr     s    
))


"C
((8
CCSbSMCSbSMCRSM6CJJCIIJ...CCaLCaL
C 66#))+388!44555r+   c                  p   t         j                  j                  d      } t        j                  d      }d|ddddf<   t        j                  d      }d|d dd ddf<   d|dd d ddf<   d|dd dd df<   |d| j	                  |j
                  	      z  z  }t        j                  |dd|
       t        |ddd|      }t        t        t        j                  |            d       t        |j
                  |j
                  d d        t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |d dd d f   d       t        |dd d d f   d       t        |d d d df   d       t        |d d dd f   d       y )Nr   r6   r   r   r   r   r   r   r0   r   F)r   r   r   mask   r   r   r2   r&   mskr'   r(   s       r)   test_color_2d_maskr   0  s   
))


"C
((8
CC"ad
O
((;
CCSbS!CSbS!CRS!4#**#))*,,,CGGCA3
sqC
PC RYYs^$a(CIIcrN+QrT1R4Z!$RUAbD[!1%QrT2b5[!1%RUBrE\"A&RaRUQRS!Va QUQQVa r+   c                     t         j                  j                  d      } t        j                  d      }d|ddddf<   t        j                  d      }d|d dd dddf<   d|d ddd ddf<   d|dd d ddd	f<   d|dd dd d	d
f<   |d| j	                  |j
                        z  z  }t        j                  |dd|       t        |dd|      }t        t        t        j                  |            d       t        |j
                  |j
                  d d        t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |d dd d f   d       t        |dd d d f   d       t        |d d d df   d       t        |d d dd f   d       y )Nr   )r   r   r   r   r   r-   r   r   r/   r.   r   r   r0   F)r   r   r   r   r   r   r2   r   s       r)   test_multichannel_2d_maskr   K  s   
))


"C
((8
CC"ad
O
((;
CCSbS!A#CRS!A#CSbS!A#CRS!A#4#**#))*,,,CGGCA3
squ3
GC RYYs^$a(CIIcrN+QrT1R4Z!$QrT2b5[!1%RUAbD[!1%RUBrE\"A&RaRUQRS!Va QUQQVa r+   c            	      h   t         j                  j                  d      } t        j                  d      }d|ddddf<   t        j                  d      }d|d dd df<   d|dd d df<   d	|dd dd f<   |d
| j	                  |j
                        z  z  }t        j                  |dd|       t        |dddd d|      }t        t        t        j                  |            d       t        |j
                  |j
                         t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |d dd d f   d       t        |dd d d f   d       t        |d d d df   d       t        |d d dd f   d       y )Nr   r6   r   r   r   r7   r   r8   r9   r:   r   r0   r   Fr   r   r<   r=   r>   r   r   r   r2   r   s       r)   test_gray_2d_maskr   g  s   
))


"C
((8
CC"ad
O
((8
CCSbSMCSbSMCRSM6CJJCIIJ...CGGCA3
C RYYs^$a(CII&QrT1R4Z!$QrT2b5[!1%RUAbD[!1%RUBrE\"A&RaRUQRS!Va QUQQVa r+   c                     t         j                  j                  d      } t        j                  d      }d|d d ddf<   t        j                  g dg dgt
              }|d| j                  |j                        z  z  }t        j                  g d	g d	gt              }t        |d
ddg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   s        r)   test_list_sigma_maskr     s    
))


"C
((6
CC1R4L
((&(:;U
CC3+++C88/1CDcJLSQr1gDsSIL)r+   c            	          t         j                  j                  d      } t        j                  d      }d|d d ddf<   t        j                  g dg dgt
              }t        j                  g dg dgt              }t        j                  g d	g d
gt              }|d| j                  |j                        z  z  }t        |ddd d|      }t        |ddddgdd |      }t        ||       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   r9   )r   r   r=   r<   r   r~   )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          r)   test_spacing_maskr     s    
))


"C
((6
CC1R4L
((O_5u
=C/?!CSIHHo?EM3+++C3SN QJ !23]+r+   c            
         t        j                  d      } d| d d ddf<   t        j                  g dg dg dgt              }t	        |ddd	d
| d       }t	        |ddd
d
| d       }t	        |ddd	d
d| d       }t        j                  g dg dg dgt              }t        j                  g dg dg dgt              }t        ||       t        ||       t        ||       y )N)r   r/   r   r   r|   r   r   r   r   TF)r<   r   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          r)   test_enforce_connectivity_maskr     s   
((6
CC1R4L
((&(:<NOQV
WC	! !	" "&	!	" xx	/1CDe ((	/1CDe #%56&(;<+-=>r+   c                  p   t         j                  j                  d      } t        j                  d      }d|ddddf<   t        j                  d      }d|d dd ddf<   d|dd d ddf<   d|dd dd df<   |d| j	                  |j
                  	      z  z  }t        j                  |dd|
       t        |ddd|      }t        t        t        j                  |            d       t        |j
                  |j
                  d d        t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |ddddf   d       t        |d dd d f   d       t        |dd d d f   d       t        |d d d df   d       t        |d d dd f   d       y )Nr   r6   r   r   r   r   r   r   r   r0   r   T)r   r   r   r   r   r   r   r2   r   s       r)   test_slic_zero_maskr     s   
))


"C
((8
CC"ad
O
((;
CCSbS!CSbS!CRS!4#**#))*,,,CGGCA3
sqT
DC RYYs^$a(CIIcrN+QrT1R4Z!$QrT2b5[!1%RUAbD[!1%RUBrE\"A&RaRUQRS!Va QUQQVa r+   c            	      @   t         j                  j                  d      } t        j                  d      }d|ddddf<   t        j                  d      }d|d dd df<   d|dd d df<   d	|dd dd f<   |d
| j	                  |j
                        z  z  }t        j                  |dd|       t        |dddd d|      }t        j                  |ddddf   j                        dz   }t        j                  |ddddf   j                         |k(        sJ y )Nr   r6   r   r   r   r7   r   r8   r9   r:   r   r0   r   Fr   )r   r   r   r    r!   r"   r3   r
   rv   r   r   r   )r&   r   r'   r(   expecteds        r)   #test_more_segments_than_pixels_maskr     s*   
))


"C
((8
CC"ad
O
((8
CCSbSMCSbSMCRSM6CJJCIIJ...CGGCA3
C yyQrT1R4Z--.2H66#adAbDj/'')X5666r+   c                     t        j                  d      } d| ddddddf<   t         j                  j                  d      }t        j                  d      }g }| j                  D ].  }|dz  }|j                  t        d |      t        |d       f       0 t        t        |       }t        t        ddgfdz         }t        ||      D ]
  \  }}|||<    |d|j                  |j                  	      z  z  }t        j                  |dd|
       t        |dd|       }	t        t        t        j                  |	            d       t        |t!        dd            D ]   \  }}t        |	|   ddddddf   |       " y )Nrt   r   r   r   r   re   r   r   r   r0   r.   )r   r   r   	   )r   r    r   r   r"   rg   rh   ri   r   rj   r!   r3   r
   r   r#   r$   rk   )
r   r&   r'   rl   rm   rn   ro   rp   rq   r(   s
             r)   test_color_3d_maskr     s}   
((<
 CC"adAbD
))


"C
((?
#CFII Fq=uT8,eHd.CDEF '6"#F'aVIM+,FFF# 1A4#**#))*,,,CGGCA3
s!
4C RYYs^$a(FE!QK( 21SVAbD!B$",-q12r+   c                     t        j                  d      } d| ddddddf<   t         j                  j                  d      }t        j                  d      }g }|j                  D ].  }|dz  }|j                  t        d |      t        |d       f       0 t        t        |       }t        j                  ddd      }t        ||      D ]
  \  }}|||<    |d|j                  |j                        z  z  }t        j                  |dd|	       t        |ddd d
|       }	t        t        t        j                   |	            d       t        |t#        dd            D ]   \  }}
t        |	|   ddddddf   |
       " y )Nrt   r   r   r   r   r.   ru   r   r0   F)r   r   r=   r>   r   r   )r   r    r   r   r"   rg   rh   ri   r   linspacerj   r!   r3   r
   r   r#   r$   rk   )r   r&   r'   rl   rm   rn   rw   rp   rx   r(   rq   s              r)   test_gray_3d_maskr   *  s}   
((<
 CC"adAbD
))


"C
((<
 CFII Fq=uT8,eHd.CDEF '6"#F[[Aq!FVV$ 2A53::399:---CGGCA3
15sC
 RYYs^$a(FE!QK( 21SVAbD!B$",-q12r+   dtype)float16float32float64uint8r   c                 ~    t         j                  j                  dd      j                  |       }t	        |dd        y )N   r   )r   r=   )r   r   randrS   r
   )r   r'   s     r)   test_dtype_supportr   D  s/    
))..R
 
'
'
.C 	!$/r+   c            	          t         j                  j                  d      } | j                  d      dkD  }t	        j
                  |d      }d}t        ||dddd	d
      }|j                         |k(  sJ y)a  Tests the fix for a bug producing a label < start_label (gh-6240).

    For the v0.19.1 release, the `img` and `slic` call as below result in two
    non-contiguous regions with value 0 despite `start_label=1`. We verify that
    the minimum label is now `start_label` as expected.
    r   )r.      r   r   )r   Nr/   r   Tr   )r   r=   r   r<   r   max_num_iter)r   r   r   standard_normalr   gaussianr
   min)r&   r'   r   superps       r)   test_start_label_fixr   L  sy     ))


"C


g
&
*C


3a
(CK!F ::<;&&&r+   c                     t        j                  dt              } t         j                  | d<   t	        j
                  t              5  t        | d        d d d        t        j                  |        }t        | |d        y # 1 sw Y   .xY wN)r   r   )r   )r   r   rB   )r   r=   )	r   r    r   nanrC   rD   rE   r
   isnan)r'   r   s     r)   'test_raises_ValueError_if_input_has_NaNr   f  sg    
((6
'CCI	z	" %St$% HHSM>D4d+	% %s   BBinfc                     t        j                  dt              }| |d<   t        j                  t
              5  t        |d        d d d        t        j                  |      }t        ||d        y # 1 sw Y   -xY wr   )r   r    r   rC   rD   rE   r
   isfinite)r   r'   r   s      r)   'test_raises_ValueError_if_input_has_infr   p  sb    
((6
'CCI	z	" %St$% ;;sD4d+	% %s   A44A=)r}   )/	itertoolsr   numpyr   rC   numpy.testingr   skimager   r   r   skimage._shared.testingr   r	   skimage.segmentationr
   r*   r4   r?   rG   rN   rc   rr   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r   r   r    r+   r)   <module>r      s      & / / F % # #(#(#6!3/8 * :*,,D-?`#*6*!6!8!D*,0/?d!6702224 "ST0 U0'4, "&&"&& 12, 3,r+   