
    a6dFW                     R   d Z ddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ dZ e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 dg dg dg dg dg d
g d	g d	g          Zd Z G d dej                  Zd Zd Zd Zd Zd Zd Zd ZdS )z1test_watershed.py - tests the watershed function
    N)ndimage)gaussian)label   )	watershedg-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      o   g   r   r   r   r   r
   r	   r   r   )r   r   r	   r   r   ^   H   4   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                    t          | t          j                  st          j        |           } t          |t          j                  st          j        |          }d| j        v rd|j        v rdS d|| dk    <   | j        t          j        t          j        fv s|j        t          j        t          j        fv rt          j        | t          j                  } t          j        |t          j                  }| j        |j        z
  dz  	                                | j
        |j
        z
  dz  	                                z   }nt          j        |           } |                     t          j                  } t          j        |          }|                    t          j                  }| |z
  dz  	                                }t          j        |          S )Nr   g        r   )
isinstancenpndarrayasarrayshapedtype	complex64
complex128realsumimagastypefloat64mathsqrt)abts      Ilib/python3.11/site-packages/skimage/segmentation/tests/test_watershed.pydiffr(   '   sb   a$$ JqMMa$$ JqMM	QW1<<sAa1fI	BL"-000	BL"-000Jq"-((Jq"-((fqvo!&&((QVaf_q,@+E+E+G+GGJqMMHHRZ  JqMMHHRZ  !eaZ9Q<<    c                   x    e Zd Z ej        d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 ZdS )TestWatershed)   r,   c                    t          j        g dg dg dg dg d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 dg dg dg dg dg
t           j                  }t	          ||| j                  }t          j        g dg dg dg dg dg dg dg dg dg dg
          }t          ||          }|t          k     sJ dS )	zwatershed 1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   r2   r2   r2   r2   r2   r2   r2   r2   r   r   r   r   r   r2   N)r   arrayuint8int8r   eightr(   eps)selfdatamarkersoutexpectederrors         r'   test_watershed01zTestWatershed.test_watershed01@   s   x...111111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 (333444444"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9"9	; "$
* 
* gtz228999222222222222222222222222222	4 	5 	5 Xs##s{{{{{{r)   c                    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t           j                  }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t           j                  }t	          ||          }t          g dg dg dg dg dg dg dg dg dg dg dg|          }|                     |t          k                d	S )
zwatershed 2r.   r/   r0   r1   r3   r4   )r2   r2   r   r   r   r2   r2   r5   Nr   r6   r7   r8   r   r(   
assertTruer:   r;   r<   r=   r>   r@   s        r'   test_watershed02zTestWatershed.test_watershed02e   s   x.................................
0 24
; 
; (222111111111111111111111111111111
3 57G
= 
= g&&222222222222222222222222222222222
4 69
: 
: 	$$$$$r)   c                    t          j        g dg dg dg dg d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 dg dg dg dg dg
t           j                  }t	          ||          }t          g dg dg dg dg dg dg dg dg dg dg
|          }|                     |t          k                d	S )
zwatershed 3r.   r/   r   r   r   r   r   r   r   r   r   r   r   r,   r   r   r   r   r   r   r   r   r2   r4   )r2   r   r   r   r,   r   r2   r2   r   r   r   r,   r,   r2   NrC   rE   s        r'   test_watershed03zTestWatershed.test_watershed03   s   x..............................	0 24	; 	; (111111111111111111111111111222	4 68W	> 	> g&&222222222222222222222222222222	4 69	: 	: 	$$$$$r)   c                    t          j        g dg dg dg dg d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 dg dg dg dg dg
t           j                  }t	          ||| j                  }t          g dg dg dg dg dg dg dg dg dg dg
|          }|                     |t          k                dS )	zwatershed 4r.   r/   rH   rI   rJ   r4   rK   N	r   r6   r7   r8   r   r9   r(   rD   r:   rE   s        r'   test_watershed04zTestWatershed.test_watershed04   s   x...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 (111111111111111111111111111222	4 68W	> 	> gtz22222222222222222222222222222222	4 69	: 	: 	$$$$$r)   c                    t          j        g dg dg dg dg d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 dg dg dg dg dg
t           j                  }t	          ||| j                  }t          g dg dg dg dg dg dg dg dg dg dg
|          }|                     |t          k                dS )	zwatershed 5r.   r/   rH   )r   r   r,   r   r   r   r   rJ   r4   )r2   r,   r,   r   r   r   r2   NrN   rE   s        r'   test_watershed05zTestWatershed.test_watershed05   s   x..............................	0 24	; 	; (111111111111111111111111111222	4 68W	> 	> gtz22222222222222222222222222222222	4 69	: 	: 	$$$$$r)   c                    t          j        g dg dg dg d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 dg dg dg dg	t           j                  }t	          ||| j                  }t          g dg dg dg dg dg dg dg dg dg	|          }|                     |t          k                dS )	zwatershed 6r0   r/   r.   r3   r1   r5   r4   NrN   rE   s        r'   test_watershed06zTestWatershed.test_watershed06   s}   x...........................0 24; ; (1111111111111111111111112224 68W> > gtz222222222222222222222222222224 69: : 	$$$$$r)   c                 T   t           }|dk    }t          j        |j        t                    }d|d<   d|d<   t          ||| j        |          }t          j        |dk              }t          j        |dk              }|                     t          ||z
            dk               dS )	z3A regression test of a competitive case that failedr   r         r      rW   maskrV   N)
blobr   zerosr   intr   r9   r   rD   absr;   r<   r[   r=   r>   size1size2s          r'   test_watershed07zTestWatershed.test_watershed07  s    (4:s++gtz===
 sax  sax  EEM**a/00000r)   c                    t                                           }d|dddf<   |dk    }t          j        |j        t
                    }d|d<   d|d	<   t          ||| j        |
          }t          j        |dk              }t          j        |dk              }| 	                    t          ||z
            dk               dS )z2The border pixels + an edge are all the same valuer   
   rW   	   r   r   rU   r   rX   rZ   rV   N)r\   copyr   r]   r   r^   r   r9   r   rD   r_   r`   s          r'   test_watershed08zTestWatershed.test_watershed08$  s    yy{{R1W(4:s++gtz===
 sax  sax  EEM**a/00000r)   c                    t          j        d          }t           j                            ddd                              t
                    }t          j        dt
                    }d}|D ]\  }}d|||f<   ||||f<   |dz  }t          |dd          }t          ||| j                   t          j
        |                    t           j                  || j                   d	S )
zTest on an image of reasonable size

        This is here both for timing (does it take forever?) and to
        ensure that the memory constraints are reasonable
        )  rj   r   rj   )d   r   r      reflect)modeN)r   r]   randomuniformr    r^   r   r   r9   ndiwatershed_iftuint16)r;   imagecoordsr=   idxxys          r'   test_watershed09zTestWatershed.test_watershed095  s     &&""1dH55<<SAA(<-- 	 	DAqE!Q$KGAqDM1HCC	222%$*---%,,ry117DJGGGGGr)   c                 R   t          j        g dg dg dg dgt           j                  }t          j        g dg dg dg dgt           j                  }t	          ||| j                  }t          g dg dg dg dg|          }|                     |t          k                dS )zwatershed 10)r   r   r   r   )r   r   r   r   )r   r   r   r   )r,   r   r   rl   )r   r   r   r   )r,   r,   rl   rl   NrN   rE   s        r'   test_watershed10zTestWatershed.test_watershed10H  s    x%%%' )+2 2 (LLL(LL(LL(LL* ,.74 4 gtz22lll"ll"ll"ll$ &)* * 	$$$$$r)   c           
      
   t          j        d          }t          j        dt                    }d|d<   d|d<   d|d<   d|d	<   t          j        g d
g dg d
g          }t	          |||          }t           j        ddddf         \  t          j        fddD                       }t          j        |d          }|                     t          j	        ||f         dz
  f         |k                         dS )zFMake sure that all points on this plateau are assigned to closest seed)   r}   r      r   r   r   re   r,   re   r   rl   re   re   )FTF)TTTr   r}   c                     g | ]V\  }}t          j                            t                    |z
  d z                      t                    |z
  d z            WS )r   )r   r#   r    float).0i0j0ijs      r'   
<listcomp>z2TestWatershed.test_watershed11.<locals>.<listcomp>m  sg     A A AR Wahhuoob(1,qxxr/AA.EFF A A Ar)   )r~   r   r   r   N)
r   r]   r^   r6   r   mgriddstackminrD   all)	r;   rt   r=   	structurer>   ddminr   r   s	          @@r'   test_watershed11zTestWatershed.test_watershed11Y  s@    ""(8S))H2220002224 5 5	 w	22x"ad
#1IA A A A A?A A AB B va||qAs1a4y{!23t;<<=====r)   c                    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 dg dg dg          }|dk    }t          |          }t          ||dd          }t	          t          d          g d          D ]4\  }}|                     t          j        ||k              |k               5dS )zThe watershed line)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   f   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   M   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   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   3   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   r   T)connectivitywatershed_linerl   )"   J   r   r   N)r   r6   r   r   ziprangerD   r   )r;   r<   	markerbinmarkerwslabareas          r'   test_watershed12zTestWatershed.test_watershed12s  s2   xiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiik l l  1W	y!!tV!DIIIU1XX}}}55 	7 	7ICOOBF29--56666	7 	7r)   N)__name__
__module____qualname__r   onesboolr9   rA   rF   rL   rO   rQ   rS   rc   rh   ry   r{   r   r    r)   r'   r+   r+   =   s        BGFD!!E# # #J$% $% $%L!% !% !%F!% !% !%F!% !% !%F% % %@1 1 1 1 1 1"H H H&% % %"> > >47 7 7 7 7r)   r+   c                     t          j        d          } d| d d dd f<   t          j        dt                    }d|d<   d|d<   t          | |d	          }t          j        g d
g d
g d
g d
g d
gt                    }t           j                            ||           t          | |          }t          j        | j        t                    }d|ddd f<   t           j                            ||           d S )Nr   rV   r   r,   r   )r   r   r   )r   r,   {Gz?compactness)r   r   r   r   r   r   )	r   r]   r^   r   r6   testingassert_equalr   r   )rt   seedscompactr?   normals        r'   test_compact_watershedr     s   HVEE!!!QRR%LHV3'''EE$KE$Ku$777Gx+++++++++++++++	- 58	9 9 9H
 JGX...ue$$Fwu{#...HHQUOJFH-----r)   c                     t          j        d          } d| ddddf<   t          | dd          }t          j        g dg dg dg dg dgt           j        	          }t           j                            ||           dS )
z>Test that passing just the number of seeds to watershed works.r   r   Nr,   r   r   r   )r   r   r   r   r   r   r   )r   r]   r   r6   int32r   r   )rt   r   r?   s      r'   test_numeric_seed_watershedr     s    HVEE!!!QRR%Lqd333Gx+++++++++++++++	- 57H	> > >H
 JGX.....r)   c                      t          j        d          } t          j        d          }t          j        t                    5  t          | |           d d d            d S # 1 swxY w Y   d S )Nr   r   rW   r   r   pytestraises
ValueErrorr   )rt   r=   s     r'   test_incorrect_markers_shaper     s    GFOOEgfooG	z	"	" " "%!!!" " " " " " " " " " " " " " " " " "s   A  A$'A$c                      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   r   rl   )r=   r[   r   )rt   r[   s     r'   test_incorrect_mask_shaper     s    GFOOE76??D	z	"	" / /%..../ / / / / / / / / / / / / / / / / /s   A""A&)A&c                      t           } | dk    }t          | dd|          }t          j        ||          dk              sJ d S )Nr      r   )r   r[   r   )r\   r   r   r   r<   r[   r>   s      r'   test_markers_in_maskr     sL    DCKD
D"14
8
8
8C6#te*/"""""""r)   c                  v    t           } | dk    }t          | |          }t          j        |          dk    sJ d S )Nr   rZ   r   )r\   r   r   maxr   s      r'   test_no_markersr     sA    DCKD
Dt
$
$
$C6#;;!r)   c                  "   t          j        d          \  } }d\  }}}}}}}}	d\  }
}}}| |z
  dz  ||z
  dz  z   |
dz  k     }| |z
  dz  ||z
  dz  z   |dz  k     }| |z
  dz  ||z
  dz  z   |dz  k     }| |z
  dz  ||	z
  dz  z   |dz  k     }t          j        ||          }t          j        ||          }t          j        ||          }t          j        |          }t          j        |dz  d          dz  }t          j        |dk    dd          }t          d	|z
  |dd
          }t          d	|z
  |dd
          }t          j        |          j	        d         dk    sJ t          j        |          j	        d         dk    sJ t          t          d          g d          D ]#\  }}t          j        ||k              |k    sJ $t          t          d          g d          D ]#\  }}t          j        ||k              |k    sJ $dS )z
    Watershed segmentation should output different result for
    different connectivity
    when markers are calculated where None is supplied.
    Issue = 5084
    )i  i  )      i,  x   rk   rk   iT  r   )rk   2   (   P   r      r   )decimalsr   r   r   )r[   r   r   rV   r   )  E  iO  iY+  i  i,  )r   r   iO  ib0  i,  N)r   indices
logical_orrq   distance_transform_edtaroundwherer   uniquer   r   r   r   )rw   rx   x1y1x2y2x3y3x4y4r1r2r3r4mask_circle1mask_circle2mask_circle3mask_circle4rt   DummyBTDummyBT_disImg_mask	labels_c1	labels_c2r   r   s                             r'   test_connectivityr     st    :j!!DAq%K"BBBB$NBBFQ;!b&1,r1u4LFQ;!b&1,r1u4LFQ;!b&1,r1u4LFQ;!b&1,r1u4LM,55EM%..EM%..E (//G)GbLQ777:Kxq(!Q//H #+(&*, , ,I#+(&*, , ,I 9Y%a(A----9Y%a(A---- q#K#K#KLL 0 0	Tvi3&''4/////q#E#E#EFF 0 0	Tvi3&''4/////0 0r)   )__doc__r"   unittestnumpyr   r   scipyr   rq   skimage._shared.filtersr   skimage.measurer   
_watershedr   r:   r6   r\   r(   TestCaser+   r   r   r   r   r   r   r   r   r)   r'   <module>r      s                       , , , , , , ! ! ! ! ! ! " " " " " "rxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)c d d.  ,L7 L7 L7 L7 L7H% L7 L7 L7`
. . .&
/ 
/ 
/" " "/ / /# # #  (0 (0 (0 (0 (0r)   