
    a6dnH                     X   d dl Zd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ dZd%dZd&d	Z ej        d
ej        ej        ej        g          d             Z ej        d
ej        ej        ej        g          d             Z ej        d
ej        ej        ej        g          d             Z ej        d
ej        ej        ej        g          d             Zd Zd Zd Zd Z ej        d
ej        ej        g          d             Zd Z ej        dg d           ej        d
ej        ej        g          d                         Z ej        d
ej        ej        g          d             Zd Z  eed          d             Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d$ Z)dS )'    N)testing)expected_warnings)xfailarch32)random_walker)resizez
pyamg|\A\Zc                    || }t           j                            d           t          j        | |f          dt           j                            | |          z  z   }t          | dz            }d|| dz  |z
  | dz  |z   |dz  |z
  |dz  |z   f<   dt           j                            d|z  dz
  d|z  dz
            z  || dz  |z
  dz   | dz  |z   dz
  |dz  |z
  dz   |dz  |z   dz
  f<   d|| dz  |z
  |dz  |dz  z
  |dz  |dz  z   f<   t          j        |          }d|| dz  |dz  f<   d|| dz  |dz  z   |dz  |dz  z
  f<   ||fS 	Ni  皙?         r         )nprandomseedzerosrandnint
zeros_like)lxlydatasmall_lseedss        Mlib/python3.11/site-packages/skimage/segmentation/tests/test_random_walker.pymake_2d_syntheticdatar      s   	zINN48RHbioob"&=&= ==D"'llG01 	q7	27W,	,	q7	27W,	,
- . ")//!g+/1w;?CCC 	q7	Q	rQw014	4	q7	Q	rQw014	4
5 6 NODq7	B!Ggl227W\3II	IJM$EE"'27
<=E"'GqL
 "'GqL"8
89;    c                    || }|| }t           j                            d           t          j        | ||f          dt           j                            | ||          z  z   }t          | dz            }d|| dz  |z
  | dz  |z   |dz  |z
  |dz  |z   |dz  |z
  |dz  |z   f<   d|| dz  |z
  dz   | dz  |z   dz
  |dz  |z
  dz   |dz  |z   dz
  |dz  |z
  dz   |dz  |z   dz
  f<   t          j        d|dz  g          }d|| dz  |z
  |dz  |z
  |dz  |z   |dz  |z
  |dz  |z   f<   t          j        |          }d|| dz  |dz  |dz  f<   d|| dz  |dz  z   |dz  |dz  z
  |dz  |dz  z
  f<   ||fS r
   )r   r   r   r   r   r   maxr   )r   r   lzr   r   	hole_sizer   s          r   make_3d_syntheticdatar$      s4   	z	zINN48RRL!!C")//"b"*E*E$EED"'llG 12 	q7	27W,	,	q7	27W,	,	q7	27W,	,
- .
 9: 	q7	Q	rQw014	4	q7	Q	rQw014	4	q7	Q	rQw014	4
5 6 7a<())I 56 	q7		q9	R1Wy0	0	q9	R1Wy0	0
1 2 M$E'(E"'27B!G
#$ %& 
"'GqL
 
'GqL
 
'GqL
 ! " ;r   dtypec                    d}d}| t           j        k    rdnd}t          ||          \  }}|                    | d          }t	          |||d          }|dd	d
df         dk                                    sJ |j        |j        k    sJ t	          |||dd          }|ddd	d
df         |ddd	d
df         k                                    sJ |j        |j        k    sJ d|d<   t	          |||dd          }|ddd	d
df         |ddd	d
df         k                                    sJ t          |          dk    sJ |j        |j        k    sJ d S )NF   d   Z      Fcopybfbetamode-   (   <   r   Tr/   r0   return_full_probr   r      )7   P   )r   float64r   astyper   allshapelen)r%   r   r   r/   r   labels	labels_bffull_prob_bfs           r   
test_2d_bfrA   9   s   	B	B "*$$22"D(R00LD&;;u5;))DdFDAAAIbeRUl#q(--/////:%%%% vDtVZ[[[LBrE2b5)BrE2b5)*+.3551 1 1:%%%%F6N vDtVZ[[[LBrE2b5)BrE2b5)*+.3551 1 1|!!!!:%%%%%%r   c                 L   d}d}t          ||          \  }}|                    | d          }t          dg          5  t          ||dd          }d d d            n# 1 swxY w Y   |d	d
ddf         dk                                    sJ |j        |j        k    sJ t          dg          5  t          ||ddd          }d d d            n# 1 swxY w Y   |dd	d
ddf         |dd	d
ddf         k                                    sJ |j        |j        k    sJ d S )Nr'   r(   Fr+   	"cg" moder)   cgr.   r*   r1   r2   r3   r   Tr4   r   r   )r   r:   r   r   r;   r<   r%   r   r   r   r>   	labels_cg	full_probs          r   
test_2d_cgrH   S   s   	B	B(R00LD&;;u5;))D	K=	)	) D D!$RdCCC	D D D D D D D D D D D D D D DbeRUl#q(--/////:%%%%	K=	)	) 9 9!$Rd379 9 9	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 aB2o&aB2o&'(+. . .:%%%%%%s#   AA#&A#2CCCc                 ^   d}d}t          ||          \  }}|                    | d          }dt           g}t          |          5  t	          ||dd          }d d d            n# 1 swxY w Y   |d	d
ddf         dk                                    sJ |j        |j        k    sJ t          |          5  t	          ||ddd          }d d d            n# 1 swxY w Y   |dd	d
ddf         |dd	d
ddf         k                                    sJ |j        |j        k    sJ d S )Nr'   r(   Fr+   zscipy.sparse.sparsetools|r)   cg_mgr.   r*   r1   r2   r3   r   Tr4   r   r   )r   r:   PYAMG_MISSING_WARNINGr   r   r;   r<   )r%   r   r   r   r>   anticipated_warningslabels_cg_mgrG   s           r   test_2d_cg_mgrN   e   s   	B	B(R00LD&;;u5;))DO8MOOP	/	0	0 J J$T6IIIJ J J J J J J J J J J J J J JB2&!+0022222:%%%%	/	0	0 9 9!$Rg379 9 9	9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 aB2o&aB2o&'(+. . .:%%%%%%s$   	A))A-0A-;CC #C c                    d}d}t          ||          \  }}|                    | d          }t          ||dd          }|dd	d
df         dk                                    sJ |j        |j        k    sJ t          ||ddd          }|ddd	d
df         |ddd	d
df         k                                    sJ |j        |j        k    sJ d S )Nr'   r(   Fr+   r)   cg_jr.   r*   r1   r2   r3   r   Tr4   r   r   )r   r:   r   r;   r<   rE   s          r   test_2d_cg_jrQ   x   s   	B	B(R00LD&;;u5;))DdF&AAAIbeRUl#q(--/////:%%%%dF&SWXXXIaB2o&)Ar"ubeO*DDIIKKKKK:%%%%%%r   c                     d} d}t          | |          \  }}d||                                z
  z  |                                |                                z
  z  }|                    t          j                  }t          t          g          5  t          ||dd          }d d d            n# 1 swxY w Y   |ddd	d
f         dk    	                                sJ |j
        |j
        k    sJ d S )Nr'   r(      r)   rJ   r.   r*   r1   r2   r3   r   )r   minr!   r:   r   uint8r   rK   r   r;   r<   )r   r   r   r>   rM   s        r   
test_typesrV      s:   	B	B(R00LD&$#$dhhjj)@AD;;rx  D	12	3	3 J J$T6IIIJ J J J J J J J J J J J J J JB2&!+0022222:%%%%%%s   B00B47B4c                      d} d}t          | |          \  }}d||dk    <   t          ||dd          }|dd	d
df         dk                                    sJ |j        |j        k    sJ d S )Nr'   r(   r   r   r)   r-   r.   r*   r1   r2   r3   )r   r   r;   r<   )r   r   r   r>   r?   s        r   test_reorder_labelsrX      s    	B	B(R00LD&F6Q;dF$???IbeRUl#q(--/////:%%%%%%r   c                     d} d}t          | |          \  }}d|ddddf<   d|ddd	d
f<   t          ||d          }|                    | |f          ddddf         dk                                    sJ |j        |j        k    sJ d S )Nr'   r(   
      .   2   !   &   r)   r/   r*   r1   r2   r3   r   )r   r   reshaper;   r<   )r   r   r   r>   s       r   test_2d_inactiverd      s    	B	B(R00LD&F2b5"R%<F2b5"R%<4b111FNNB8$$RUBrE\2a7<<>>>>>:%%%%%%r   c                     t          j        g dg dg dg          } t          j        g dg dg dg          }t          j        g dg dg dg          }t          | |d	
          }t           j                            ||           d S )N)i2  i1  i1  )iS2  iq4  i#/  )i.  i.  i0  )r   rZ   r   )r   rZ   r   )r   r   rZ   )r   rZ   r   )r   r   rZ   r[   rb   )r   asarrayr   r   assert_array_equal)r   markersexpected_labelsr>   s       r   test_2d_laplacian_sizerj      s     :,,,,,,,,,. / /D j***$**$**& ' 'G j***",**",**". / /O 4r222FJ!!&/:::::r   c                    d}|||}}}t          |||          \  }}|                    | d          }t          dg          5  t          ||d          }d d d            n# 1 swxY w Y   |                    |j                  ddddddf         d	k                                    sJ |j        |j        k    sJ d S )
N   Fr+   rC   rD   r0         r   )r$   r:   r   r   rc   r<   r;   )r%   nr   r   r"   r   r>   s          r   test_3drq      s   
AAqBB(R44LD&;;u5;))D	K=	)	) 8 8tV$7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8NN4:&&r"ubeRU':;q@EEGGGGG:%%%%%%s   A##A'*A'c                  t   d} | | | }}}t          |||          \  }}d|ddddddf<   t          dg          5  t          ||d	          }d d d            n# 1 swxY w Y   |                    |j                  d
dd
dd
df         dk                                    sJ |j        |j        k    sJ d S )Nrl   rZ   r   r*         z"cg" mode|CObject typerD   rm   rn   ro   r   )r$   r   r   rc   r<   r;   )rp   r   r   r"   r   r>   s         r   test_3d_inactiveru      s   
AAqBB(R44LD&!#F1R4B2	45	6	6 8 8tV$7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8NN4:&&r"ubeRU':;q@EEGGGGG:%%%%%%s   AA!Achannel_axis)r   r   rZ   c                    d\  }}t          ||          \  }}|                    | d          }|dt          j        f                             dd          }t          j        |d|          }t          dd	g          5  t          ||d
|          }d d d            n# 1 swxY w Y   t          j        ||d          }|d         j        |j        k    sJ t          dg          5  t          |d         |d
           d d d            n# 1 swxY w Y   |	                    |j                  ddddf         dk    
                                sJ |d         j        |j        k    sJ d S )N)r'   r(   Fr+   .r   rZ   axisrC    The probability range is outsiderD   r0   rv   .r   rm   r*   r1   r2   r3   )r   r:   r   newaxisrepeatmoveaxisr   r   r<   rc   r;   )r%   rv   r   r   r   r>   multi_labelss          r   test_multispectral_2dr      s    FB(R00LD&;;u5;))DRZ '''33D;tR..D	K>@ 
A 
A @ @$T62>@ @ @@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ;t\2..D<----	K=	)	) 7 7d6lF66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7  ..r"ube|<AFFHHHHH<------s$    B  B$'B$)DDDc                    d}|||}}}t          |||          \  }}|                    | d          }|dt          j        f                             dd          }t          dg          5  t          ||d	d
          }d d d            n# 1 swxY w Y   |d         j        |j        k    sJ t          dg          5  t          |d         |d	          }d d d            n# 1 swxY w Y   |                    |j                  ddddddf         dk    	                                sJ |                    |j                  ddddddf         dk    	                                sJ |d         j        |j        k    sJ d S )Nrl   Fr+   .r   rZ   rx   rC   rD   r{   r|   rm   rn   ro   )
r$   r:   r   r}   r~   r   r   r<   rc   r;   )	r%   rp   r   r   r"   r   r>   r   single_labelss	            r   test_multispectral_3dr      s?   
AAqBB(R44LD&;;u5;))DRZ '''33D	K=	)	) O O$T62NNNO O O O O O O O O O O O O O O<----	K=	)	) G G%d6lFFFFG G G G G G G G G G G G G G G  ..r"ubeRU/BCqHMMOOOOO!!&,//2r"ube0CDINNPPPPP<------s$   -BBB C%%C),C)c                  \   d} | | | }}}t          |||          \  }}t          j        | | | dz  f          }t          |          D ]'\  }}t	          || | dz  fdd          ||d d d d f<   (t          |dz            }	t          j        |          }
d|
|dz  |dz  |dz  f<   d|
|dz  |	dz  z   |dz  |	dz  z
  |dz  |	d	z  z
  f<   t          d
g          5  t          ||
dd          }
d d d            n# 1 swxY w Y   |
ddddddf         dk    	                                sJ d S )Nrl   r   constantFr0   anti_aliasingr   r   r   r   rC   rD   )      ?r   g      ?r0   spacingrn   ro      	   )
r$   r   r   	enumerater   r   r   r   r   r;   )rp   r   r   r"   r   _
data_anisoiyzr   labels_anisos              r   test_spacing_0r      s   
AAqBB#BB//GD! 1aa.))J4 : :2$R!Q!V*438: : :
1aaa7
 "'llG=,,L./Lq"'27*+ ,- q7a<'q7a<'q7a<'( )
 
K=	)	) < <$ZD-:< < << < < < < < < < < < < < < < < B2qs*+q0557777777s   C88C<?C<zKnown test failure on 32-bit platforms. See links for details: https://github.com/scikit-image/scikit-image/issues/3091 https://github.com/scikit-image/scikit-image/issues/3092)	conditionreasonc                     d} | | | }}}t          |||          \  }}t          j        | | dz  | f          }t          |          D ]'\  }}t	          || dz  | fdd          ||d d d d f<   (t          |dz            }	t          j        |          }
d|
|dz  |dz  |dz  f<   d|
|dz  |	dz  z   ||	dz  z
  |dz  |	dz  z
  f<   t          d	g          5  t          ||
d
d          }
d d d            n# 1 swxY w Y   |
ddddddf         dk    	                                sJ t          j        | | dz  | f          }t          |j        d                   D ]1}t	          |d d dd d f         | dz  | fdd          ||d d d d f<   2t          |dz            }	t          j        |          }d||dz  |dz  |dz  f<   d|||	dz  z
  |dz  |	dz  z   |dz  |	dz  z
  f<   t          d	g          5  t          ||d
d          }d d d            n# 1 swxY w Y   |ddddddf         dk    	                                sJ d S )Nrl   r   r   Fr   r   r   r   rC   rD   )r          @r   r   rn   ro   rs   "   )r   r   r   )r$   r   r   r   r   r   r   r   r   r;   ranger<   )rp   r   r   r"   r   r   r   r   r   r   r   labels_aniso2s               r   test_spacing_1r     s    	AAqBB#BB//GD! 1a!eQ-((J4 : :2$R!a%*438: : :
1aaa7
 "'llG=,,L./Lq"'27*+ ,- q7a<'gl"q7a<'( ) 
K=	)	) ; ;$ZD-9; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; B2r"u,-27799999 1a!eQ-((J4:a=!! : :$T!!!Q']QUAJ*438: : :
1aaa7
 "'llGM*--M/0M"'27B!G+, -. "w!|#'GqL('GqL() *
 
K=	)	) G G%j&3+/G G GG G G G G G G G G G G G G G G "R%B2-.!388:::::::s$   C55C9<C96HHHc                     t          j        d          } t          j        d          }t          dg          5  t          | |          }d d d            n# 1 swxY w Y   t           j                            ||           d|d d d df<   t          j        |dk    dt           j        f         |dk    dt           j        f         fd          }t          dg          5  t          | |d	
          }d d d            n# 1 swxY w Y   t           j                            ||           t          j        dd          } t          j	        g d          }t          j	        g d          }t          j
        ||f          D ]\  }}d	| |         |<   t          j        dt           j                  }	|D ]\  }}d|	|         |<   d|	| dk    <   t          dg          5  t          | |	          }
d d d            n# 1 swxY w Y   t          j        |
|	dk             dk              sJ t          j        |
|	dk             dk              sJ t          dg          5  t          | |	d	
          }d d d            d S # 1 swxY w Y   d S )Nr[   r[   zReturning provided labelsr6   r   r   .r   rx   Tr5   F))   r   r   r   r   r   )r   r   ))r6   r   )r   r   )r   r   )r6   r   )r   r   )r   r6   r6   r6   r%   rZ   r   z!All unlabeled pixels are isolated)r   onesr   r   r   rg   concatenater}   fullarrayvstackr   int8r;   )imgr>   pass_throughexpectedtestobject_Aobject_Bxyrh   output_labelss              r   test_trivial_casesr   K  s   
'(

CWXF	78	9	9 2 2$S&112 2 2 2 2 2 2 2 2 2 2 2 2 2 2J!!,777 F111bqb5M~!S"*_= &!S"*_=?EFH H HH	78	9	9 A AS&4@@@A A A A A A A A A A A A A A AJ!!$111 '(E
"
"Cx44455HxIIIJJH	8X.//  1CF1IIhxrw///G  1GAJqMMGC1H	?@	A	A 8 8)#w77M8 8 8 8 8 8 8 8 8 8 8 8 8 8 86-1-2333336-1-344444	?@	A	A B BS'DAAAB B B B B B B B B B B B B B B B B BsG   AAA C??DDG;;G?G?I>>JJc                  ,   t           j                            d           t          j        d          dt           j                            d          z  z   } t          j        dt           j                  }d|d<   d|d	<   t          | |d
           d S )N*   r   g?sizer   r   r   r   r   r   )r   r   r   )r   r   r   r   normalr   rU   r   r   r>   s     r   test_length2_spacingr   q  s     INN2
'(

cBI$4$4($4$C$CC
CCXhbh///FF4LF4L#vx000000r   c                  .   t          j        d          } t          j        d          }t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   t          j        t
                    5  t          | |d           d d d            n# 1 swxY w Y   t           j                            d           t           j        	                    d          } t          j        d          
                    | j                  }t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   t          j        t
                    5  t          | |d           d d d            n# 1 swxY w Y   t           j        	                    d          } t          j        d          }d	|d
<   d|d<   t          j        t
                    5  t          | |d           d d d            n# 1 swxY w Y   t           j        	                    d          } t          j        d          }t          j        t
                    5  t          | |d           d d d            d S # 1 swxY w Y   d S )Nr[   rZ   )rv   r   )r6   r6   r6   r6   r6   r      r   r   r   r   r   )r   r   badrm   )r   r   aranger   raises
ValueErrorr   r   r   r   rc   r<   r   r   s     r   test_bad_inputsr   |  s   
'"++CYr]]F	
	#	# # #c6"""# # # # # # # # # # # # # # #	
	#	# 4 4c633334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 INN2
)



0
0CYv&&sy11F	
	#	# # #c6"""# # # # # # # # # # # # # # #	
	#	# 4 4c633334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 )



)
)CXhFF4LF4L	
	#	# 1 1c6400001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 )



)
)CXhF	
	#	# / /c6..../ / / / / / / / / / / / / / / / / /sl   AA#&A#B""B&)B&1EEE2FFF3HHH*J

JJc                  "   t           j                            d           t           j                            d          } t          j        | j                   }d|d<   d|dd dd f<   d|d<   d|d<   t          d	g          5  t          | |          }d d d            n# 1 swxY w Y   |d         dk    sJ t          d	g          5  t          | |d
          }d d d            n# 1 swxY w Y   |d         dk    sJ |d         dk    sJ d S )Nr   r   r   r   r   r6   r   r   r   r   r   rz   Tr   r   r   r   r   r   r   r   r   r   r   r<   r   r   amaskress      r   test_isolated_seedsr        INN1
	  AWQWDDJDQRRLDJDJ 
>?	@	@ % %At$$% % % % % % % % % % % % % % %t9>>>>	>?	@	@ < <Atd;;;< < < < < < < < < < < < < < <w<1w<1$   B  B$'B$	C((C,/C,c                  "   t           j                            d           t           j                            d          } t          j        | j                   }d|d<   d|dd dd f<   d|d<   d|d<   t          d	g          5  t          | |          }d d d            n# 1 swxY w Y   |d         dk    sJ t          d	g          5  t          | |d
          }d d d            n# 1 swxY w Y   |d         dk    sJ |d         dk    sJ d S )Nr   r   r   r6   r   r   r   r   rz   Tr   r   r   r   r   s      r   test_isolated_arear     r   r   c                  x   t           j                            d           t           j                            d          } t          j        | j                   }d|d<   d|dd dd f<   d|d<   d|d<   t          d	g          5  t          | |d
          }d d d            n# 1 swxY w Y   t          | |d
d          }|d         dk    sJ |d         dk    sJ t          | |d
d          }|d         dk    sJ |d         dk    sJ t          | |d
d          }|d         dk    sJ |d         dk    sJ d S )Nr   r   r   r   r6   r   r   r   rz   Tr   r[   )r5   r/   r   r   r   )r5   prob_tolg&.>)r5   tolr   r   s      r   test_prob_tolr     s   INN1
	  AWQWDDJDQRRLDJDJ	>?	@	@ < <Atd;;;< < < < < < < < < < < < < < < 4$R
@
@
@Cw<1w<1 4$
F
F
FCw<1w<1 4$D
A
A
ACw<1w<1s   B""B&)B&c                  \    ddl m}  | j        }	 dd l}|J d S # t          $ r |J Y d S w xY w)Nr   )random_walker_segmentation)skimage.segmentationr   UmfpackContextscikits.umfpackImportError)r   r   scikitss      r   test_umfpack_importr     so    ??????/>N&))))) & & &%%%%%%&s    ++c                     t           j                            d          } t          j        dt                    }t	          j        t          d          5  t          | |           d d d            n# 1 swxY w Y   d|d<   t	          j        t          d          5  t          | |           d d d            n# 1 swxY w Y   d|d<   t          | |           d S )	N)r   r   r   zNo seeds provided)matchrZ   r   r   r   )r   r   r   r   r   r   r   r   )imager>   s     r   test_empty_labelsr     sM   IV$$EXfC(((F	
*=	>	>	> % %eV$$$% % % % % % % % % % % % % % % F4L	
*=	>	>	> % %eV$$$% % % % % % % % % % % % % % % F4L%     s$   A33A7:A7B;;B?B?)N)NN)*numpyr   skimage._sharedr   skimage._shared._warningsr   skimage._shared.testingr   r   r   r   skimage.transformr   rK   r   r$   parametrizefloat16float32r9   rA   rH   rN   rQ   rV   rX   rd   rj   rq   ru   r   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s[       # # # # # # 7 7 7 7 7 7 1 1 1 1 1 1 1 1 . . . . . . $ $ $ $ $ $%    $   6 Wrz2:rzBCC& & DC&2 Wrz2:rzBCC& & DC&" Wrz2:rzBCC& & DC&$ Wrz2:rzBCC
& 
& DC
&	& 	& 	&& & && & &; ; ;" Wrz2:677& & 87&& & & ^ZZZ00Wrz2:677. . 87 10.( Wrz2:677. . 87. 8 8 88 JL L L
1; 1;L L
1;h#B #B #BL1 1 1/ / /B  ,  ,  >& & &! ! ! ! !r   