a
    Ù
þdnZ  ã                   @   sl  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 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d„ ZG dd„ dejƒZdd„ Zdd„ Zej dejejejejejejejej g¡dd„ ƒZ!dd„ Z"d d!„ Z#d"d#„ Z$d$d%„ Z%d&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                 C   s   t | tjƒst | ¡} t |tjƒs,t |¡}d| jv rDd|jv rDdS d|| dk< | jtjtjfv st|jtjtjfv rºt | tj¡} t |tj¡}| j|j d  	¡ | j
|j
 d  	¡  }n<t | ¡} |  tj¡} t |¡}| tj¡}| | d  	¡ }t |¡S )Nr   g        r   )Ú
isinstanceÚnpZndarrayZasarrayÚshapeÚdtypeZ	complex64Z
complex128ÚrealÚsumÚimagÚastypeÚfloat64ÚmathÚsqrt)ÚaÚbÚt© r!   úr/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/segmentation/tests/test_watershed.pyÚdiff'   s&    

ÿ*

r#   c                   @   s€   e Zd Ze de¡Zdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestWatershed)é   r%   c                 C   s  t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
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 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||ƒ}|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   ©r*   r*   r*   r*   r*   r*   r*   ©r*   r   r   r   r   r   r*   N)r   ÚarrayÚuint8Úint8r   Úeightr#   Úeps)ÚselfÚdataÚmarkersÚoutÚexpectedÚerrorr!   r!   r"   Útest_watershed01@   sP    
÷	÷

÷
ö
÷

zTestWatershed.test_watershed01c                 C   s  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 j¡}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 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'   r(   r)   r+   r,   )r*   r*   r   r   r   r*   r*   r-   N©r   r.   r/   r0   r   r#   Ú
assertTruer2   ©r3   r4   r5   r6   r8   r!   r!   r"   Útest_watershed02e   sX    
ö
ö
ö
ö
ö
özTestWatershed.test_watershed02c                 C   sö   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
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 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   r*   r,   )r*   r   r   r   r%   r   r*   ©r*   r   r   r   r%   r%   r*   Nr:   r<   r!   r!   r"   Útest_watershed03‹   sR    
÷	÷

÷	÷

÷	÷
zTestWatershed.test_watershed03c                 C   sú   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
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 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'   r>   r?   r@   r,   rA   N©	r   r.   r/   r0   r   r1   r#   r;   r2   r<   r!   r!   r"   Útest_watershed04®   sR    
÷	÷

÷	÷
÷	÷
zTestWatershed.test_watershed04c                 C   sú   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g
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 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'   r>   )r   r   r%   r   r   r   r   r@   r,   )r*   r%   r%   r   r   r   r*   NrC   r<   r!   r!   r"   Útest_watershed05Ñ   sR    
÷	÷

÷	÷
÷	÷
zTestWatershed.test_watershed05c                 C   sè   t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢g	t j¡}t  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 6r(   r'   r&   r+   r)   r-   r,   NrC   r<   r!   r!   r"   Útest_watershed06ô   sL    
øø	
øø	øø	zTestWatershed.test_watershed06c                 C   sr   t }|dk}t |jt¡}d|d< d|d< t||| j|d}t |dk¡}t |dk¡}|  t	|| ƒdk¡ dS )	z3A regression test of a competitive case that failedr   r   ©é   é   r   ©é   rI   ©ÚmaskrH   N)
Úblobr   Úzerosr   Úintr   r1   r   r;   Úabs©r3   r4   rM   r5   r6   Zsize1Zsize2r!   r!   r"   Útest_watershed07  s    zTestWatershed.test_watershed07c                 C   s†   t  ¡ }d|ddd…f< |dk}t |jt¡}d|d< d|d	< t||| j|d
}t |dk¡}t |dk¡}|  	t
|| ƒdk¡ dS )z2The border pixels + an edge are all the same valuer   é
   rI   é	   r   r   rG   r   rJ   rL   rH   N)rN   Úcopyr   rO   r   rP   r   r1   r   r;   rQ   rR   r!   r!   r"   Útest_watershed08$  s    zTestWatershed.test_watershed08c                 C   s–   t  d¡}t j ddd¡ t¡}t  dt¡}d}|D ](\}}d|||f< ||||f< |d7 }q4t|ddd}t||| jƒ t	 
| t j¡|| j¡ d	S )
z«Test 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
        )éè  rX   r   rX   )éd   r   r   é   Zreflect)ÚmodeN)r   rO   ÚrandomÚuniformr   rP   r   r   r1   ÚndiZwatershed_iftÚuint16)r3   ÚimageZcoordsr5   ÚidxÚxÚyr!   r!   r"   Útest_watershed095  s    

zTestWatershed.test_watershed09c                 C   sŽ   t  g d¢g d¢g d¢g d¢gt j¡}t  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   rZ   )r   r   r   r   )r%   r%   rZ   rZ   NrC   r<   r!   r!   r"   Útest_watershed10H  s.    
ýý
ýýýýzTestWatershed.test_watershed10c              
      sÌ   t  d¡}t  dt¡}d|d< d|d< d|d< d|d	< t  g d
¢g d¢g d
¢g¡}t|||ƒ}t jdd…dd…f \‰ ‰t  ‡ ‡fdd„dD ƒ¡}t  |d¡}|  t  	|ˆ ˆ|ˆ ˆf d f |k¡¡ dS )zFMake sure that all points on this plateau are assigned to closest seed©é   rg   r   ©é   ri   r   ©ri   rT   r%   ©rT   ri   rZ   ©rT   rT   )FTF)TTTr   rg   c                    s8   g | ]0\}}t  ˆ  t¡| d  ˆ t¡| d  ¡‘qS )r   )r   r   r   Úfloat)Ú.0Zi0Zj0©ÚiÚjr!   r"   Ú
<listcomp>m  s   ÿz2TestWatershed.test_watershed11.<locals>.<listcomp>)rh   rj   rk   rl   N)
r   rO   rP   r.   r   ZmgridZdstackÚminr;   Úall)r3   r`   r5   Z	structurer6   ÚdZdminr!   ro   r"   Útest_watershed11Y  s&    

þÿÿzTestWatershed.test_watershed11c                 C   sÂ   t  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d}ttdƒg d¢ƒD ] \}}|  t  ||k¡|k¡ qœdS )zThe watershed line)éË   r   rw   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   r
   )rw   r   rw   r
   r
   r
   éf   rx   rx   rx   rx   rx   r
   r
   r
   r
   )rw   r   rw   rw   r
   r
   rx   rx   éM   r   rx   rx   r
   r
   rw   rw   )rw   r   r   rw   r
   r
   r
   rx   rx   rx   rx   r
   r
   rw   rw   r   )rw   rw   r   rw   rw   rw   r
   r
   r
   r
   r
   r
   rw   rw   r   r   )r
   rw   r   r   r   rw   rw   rw   rw   rw   rw   rw   rw   r   r   rw   )r
   rw   rw   rw   r   r   r   r   r   r   r   r   r   r   rw   rw   )r
   r
   r
   rw   rw   rw   rw   rw   r   rw   rw   rw   rw   rw   rw   r
   )rx   rx   r
   r
   r
   r
   rw   rw   r   rw   rw   r   rw   r
   r
   r
   )rx   rx   rx   rx   rx   r
   rw   r   r   rw   rw   rw   rw   r
   rx   r
   )rx   é3   rz   rx   rx   r
   rw   r   rw   rw   r
   r
   r
   r
   rx   r
   )ry   rz   rz   rx   r
   r
   rw   r   rw   rw   rw   r
   rx   rx   rx   r
   )ry   r   rz   rx   r
   rw   rw   r   rw   r   rw   r
   rx   rz   rx   r
   )ry   r   rz   rx   r
   rw   r   r   rw   rw   rw   r
   rx   r   rx   r
   )rx   r   rz   rx   r
   rw   r   rw   rw   r
   r
   r
   rx   rx   rx   r
   )rx   rx   rx   rx   r
   rw   r   rw   r
   r
   r
   r
   r
   r
   r
   r
   r   r   T)ÚconnectivityZwatershed_linerZ   )é"   éJ   r}   r}   N)r   r.   r   r   ÚzipÚranger;   r   )r3   r4   Z	markerbinÚmarkerÚwsÚlabÚarear!   r!   r"   Útest_watershed12s  s,    
ñzTestWatershed.test_watershed12c                 C   sr   t j ¡ jdd}t jdt jd}g d¢|g d¢g d¢f< t  |¡}t||ƒ}t j ||¡ t  	||k¡rnJ ‚dS )z.Test to ensure input markers are not modified.rf   )Úsize©r   )r   r   r%   rZ   )ri   ri   é   r‡   )ri   r‡   ri   r‡   N)
r   r\   Zdefault_rngrO   r/   rV   r   ÚtestingÚassert_equalrt   )r3   r`   r5   Zoriginal_markersÚresultr!   r!   r"   Ú!test_watershed_input_not_modified‹  s    

z/TestWatershed.test_watershed_input_not_modifiedN)Ú__name__Ú
__module__Ú__qualname__r   ÚonesÚboolr1   r9   r=   rB   rD   rE   rF   rS   rW   rd   re   rv   r„   r‹   r!   r!   r!   r"   r$   =   s   %&### r$   c                  C   sÀ   t  d¡} d| d d …dd …f< t jdtd}d|d< d|d< t| |dd	}t jg d
¢g d
¢g d
¢g d
¢g d
¢gtd}t j ||¡ t| |ƒ}t j| jtd}d|ddd …f< t j ||¡ d S )N©ri   rH   r   r%   r†   )r   r   r   )r   r%   ç{®Gáz„?©Úcompactness)r   r   r   r   r   r   )	r   rO   rP   r   r.   rˆ   r‰   r   r   )r`   ZseedsÚcompactr7   Únormalr!   r!   r"   Útest_compact_watershed–  s&    

üü
r—   c                  C   sl   t  d¡} d| dd…dd…f< t| ddd}t jg d¢g d¢g d¢g d¢g d¢gt jd	}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   rO   r   r.   Úint32rˆ   r‰   )r`   r•   r7   r!   r!   r"   Útest_numeric_seed_watershed©  s    

üür™   r   c                 C   s4   t  d¡}t  d| ¡}t||ƒ}|j|jks0J ‚d S )N)rY   rY   )r   rO   r   r   )r   r`   r5   r6   r!   r!   r"   Útest_watershed_output_dtype¶  s    

rš   c                  C   sL   t  d¡} t  d¡}t t¡ t| |ƒ W d   ƒ n1 s>0    Y  d S )Nr‘   ©ri   rI   ©r   r   ÚpytestZraisesÚ
ValueErrorr   )r`   r5   r!   r!   r"   Útest_incorrect_markers_shapeÁ  s    

rŸ   c                  C   sP   t  d¡} t  d¡}t t¡ t| d|d W d   ƒ n1 sB0    Y  d S )Nr‘   r›   rZ   )r5   rM   rœ   )r`   rM   r!   r!   r"   Útest_incorrect_mask_shapeÈ  s    

r    c                  C   s8   t } | dk}t| dd|d}t ||  dk¡s4J ‚d S )Nr   é   r   )r{   rM   r   )rN   r   r   rt   ©r4   rM   r6   r!   r!   r"   Útest_markers_in_maskÏ  s    r£   c                  C   s.   t } | dk}t| |d}t |¡dks*J ‚d S )Nr   rL   r   )rN   r   r   Úmaxr¢   r!   r!   r"   Útest_no_markers×  s    r¥   c                  C   sÐ  t  d¡\} }d\}}}}}}}}	d\}
}}}| | d || d  |
d k }| | d || d  |d k }| | d || d  |d k }| | d ||	 d  |d k }t  ||¡}t  ||¡}t  ||¡}t |¡}t j|d ddd }t  |dkdd¡}td	| |dd
d}td	| |dd
d}t  |¡j	d dksFJ ‚t  |¡j	d dks`J ‚t
tdƒg d¢ƒD ]"\}}t  ||k¡|ksrJ ‚qrt
tdƒg d¢ƒD ]"\}}t  ||k¡|ks¨J ‚q¨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   rY   rY   iT  r§   )rY   é2   é(   éP   r   é   r   )Zdecimalsr   r¦   r’   )rM   r{   r”   rH   ri   )é€ñ  éE  ióO  iY+  i  i,  )r­   r®   iòO  ib0  i,  N)r   ÚindicesÚ
logical_orr^   Zdistance_transform_edtZaroundÚwherer   Úuniquer   r~   r   r   )rb   rc   Úx1Úy1Zx2Úy2Zx3Zy3Zx4Zy4Zr1Zr2Zr3Zr4Zmask_circle1Zmask_circle2Zmask_circle3Zmask_circle4r`   ZDummyBTZDummyBT_disZImg_maskZ	labels_c1Z	labels_c2r‚   rƒ   r!   r!   r"   Útest_connectivityÞ  s2        
ÿÿr¶   )'Ú__doc__r   ZunittestÚnumpyr   r   Zscipyr   r^   Zskimage._shared.filtersr   Zskimage.measurer   Z
_watershedr   r2   r.   rN   r#   ZTestCaser$   r—   r™   ÚmarkZparametrizer/   r0   r_   Úint16Zuint32r˜   Zuint64Úint64rš   rŸ   r    r£   r¥   r¶   r!   r!   r!   r"   Ú<module>   s`   
ì  [ÿÿ
