U
    ?hnZ  ã                &   @   s¸  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 d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d
d
d
d
d
d
d	d	d	d	d	gd	d	d	d
d
ddddddd
d
d	d	d	gd	d	d
ddddddddddd
d	d	gd	d	d
ddddddddddd
d	d	gd	d	d
ddddddddddd
d	d	gd	d	d
ddddddddddd
d	d	gd	d	d	d
ddddddddd
d	d	d	gd	d	d	d	d
ddddddd
d	d	d	d	gd	d	d	d	d	d
ddddd
d	d	d	d	d	gd	d	d	d	d
ddddddd
d	d	d	d	gd	d	d	d
ddddddddd
d	d	d	gd	d	d
ddddddddddd
d	d	gd	d	d
ddddddddddd
d	d	gd	d	d
ddddddddddd
d	d	gd	d	d
ddddddddddd
d	d	gd	d	d	d
d
ddddddd
d
d	d	d	gd	d	d	d	d	d
d
d
d
d
d
d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	gd	d	d	d	d	d	d	d	d	d	d	d	d	d	d	d	g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=éÿ   éÌ   é·   é™   é   éo   ég   é^   éH   é4   é'   é   c                 C   s   t | tjƒst | ¡} t |tjƒs,t |¡}d| jkrDd|jkrDdS d|| dk< | jtjtjfkst|jtjtjfk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ÚastypeZfloat64ÚmathÚsqrt)ÚaÚbÚt© r    ú[/var/www/html/venv/lib/python3.8/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   s0  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t||| jƒ}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
¡}t||ƒ}|tk s,t‚dS )zwatershed 1r   r   éÿÿÿÿN)	r   ÚarrayÚuint8Úint8r   Úeightr"   ÚepsÚAssertionError)ÚselfÚdataÚmarkersÚoutÚexpectedÚerrorr    r    r!   Útest_watershed01@   sP    ÷	÷
÷
ö÷

zTestWatershed.test_watershed01c                 C   sR  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt j¡}t||ƒ}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg|ƒ}|  |tk ¡ dS )zwatershed 2r   r   r%   N©r   r&   r'   r(   r   r"   Ú
assertTruer*   ©r,   r-   r.   r/   r1   r    r    r!   Útest_watershed02e   sX    ö
öö
ö
ö
özTestWatershed.test_watershed02c                 C   s"  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t||ƒ}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
|ƒ}|  |tk ¡ dS )zwatershed 3r   r   r   r$   r%   Nr3   r5   r    r    r!   Útest_watershed03‹   sR    ÷	÷
÷	÷

÷	÷
zTestWatershed.test_watershed03c                 C   s&  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t||| jƒ}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
|ƒ}|  |tk ¡ dS )zwatershed 4r   r   r   r$   r%   N©	r   r&   r'   r(   r   r)   r"   r4   r*   r5   r    r    r!   Útest_watershed04®   sR    ÷	÷
÷	÷
÷	÷
zTestWatershed.test_watershed04c                 C   s&  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
t j¡}t||| jƒ}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg
|ƒ}|  |tk ¡ dS )zwatershed 5r   r   r$   r   r%   Nr8   r5   r    r    r!   Útest_watershed05Ñ   sR    ÷	÷
÷	÷
÷	÷
zTestWatershed.test_watershed05c                 C   sö  t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg	t j¡}t  dddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg	t j¡}t||| jƒ}tdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgg	|ƒ}|  |tk ¡ dS )zwatershed 6r   r   r%   Nr8   r5   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   ©é   r>   ©Úmaskr=   N)
Úblobr   Úzerosr   Úintr   r)   r   r4   Úabs©r,   r-   rB   r.   r/   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   é
   r>   é	   r   r   r<   r   r?   rA   r=   N)rC   Úcopyr   rD   r   rE   r   r)   r   r4   rF   rG   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
        )éè  rM   r   rM   )éd   r   r   é   Zreflect)ÚmodeN)r   rD   ÚrandomÚuniformr   rE   r   r   r)   ÚndiZwatershed_iftÚuint16)r,   ÚimageZcoordsr.   ÚidxÚxÚyr    r    r!   Útest_watershed095  s    

zTestWatershed.test_watershed09c              	   C   s¾   t  ddddgddddgddddgddddggt j¡}t  ddddgddddgddddgddddggt j¡}t||| jƒ}tddddgddddgddddgddddgg|ƒ}|  |tk ¡ dS )zwatershed 10r   r   r   r$   rO   Nr8   r5   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  d
dd
gdddgd
dd
g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©é   r\   r   ©é   r^   r   ©r^   rI   r$   ©rI   r^   rO   ©rI   rI   FTr   r\   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>)r]   r_   r`   ra   N)
r   rD   rE   r&   r   ZmgridZdstackÚminr4   Úall)r,   rU   r.   Z	structurer/   ÚdZdminr    rd   r!   Útest_watershed11Y  s&    
þÿÿzTestWatershed.test_watershed11c              !   C   sˆ  t  ddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgddddddddddddddddgg¡}|dk}t|ƒ}t||dd	d
}ttdƒddddgƒD ]"\}}|  t  ||k¡|k¡ q`dS )zThe watershed lineéË   r   r
   éf   éM   r   é3   r   T)ÚconnectivityZwatershed_linerO   é"   éJ   N)r   r&   r   r   ÚzipÚranger4   r   )r,   r-   Z	markerbinÚmarkerÚwsÚlabÚarear    r    r!   Útest_watershed12s  s,    &"""""""""""""""ñzTestWatershed.test_watershed12c                 C   s~   t j ¡ jdd}t jdt jd}ddddg|ddd	d	gdd	dd	gf< t  |¡}t||ƒ}t j ||¡ t  	||k¡rzt
‚d
S )z.Test to ensure input markers are not modified.r[   )Úsize©r   r   r   r$   rO   r^   é   N)r   rQ   Zdefault_rngrD   r'   rK   r   ÚtestingÚassert_equalri   r+   )r,   rU   r.   Zoriginal_markersÚresultr    r    r!   Ú!test_watershed_input_not_modified‹  s    $

z/TestWatershed.test_watershed_input_not_modifiedN)Ú__name__Ú
__module__Ú__qualname__r   ÚonesÚboolr)   r2   r6   r7   r9   r:   r;   rH   rL   rY   rZ   rk   ry   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ddddddgddddddgddddddgddddddgddddddggtd}t j ||¡ t| |ƒ}t j| jtd}d|ddd …f< t j ||¡ d S )
N©r^   r=   r   r$   r{   )r   r   r   )r   r$   ç{®Gáz„?©Úcompactness)	r   rD   rE   r   r&   r}   r~   r„   r   )rU   ZseedsÚcompactr0   Únormalr    r    r!   Útest_compact_watershed–  s&    
üü
rŒ   c                  C   s”   t  d¡} d| dd…dd…f< t| ddd}t jddddddgddddddgddddddgddddddgddddddg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   rD   r   r&   Úint32r}   r~   )rU   rŠ   r0   r    r    r!   Útest_numeric_seed_watershed©  s    
üürŽ   r   c                 C   s4   t  d¡}t  d| ¡}t||ƒ}|j|jks0t‚d S )N)rN   rN   )r   rD   r   r   r+   )r   rU   r.   r/   r    r    r!   Útest_watershed_output_dtype¶  s    

r   c               	   C   s8   t  d¡} t  d¡}t t¡ t| |ƒ W 5 Q R X d S )Nr†   ©r^   r>   ©r   r„   ÚpytestZraisesÚ
ValueErrorr   )rU   r.   r    r    r!   Útest_incorrect_markers_shapeÁ  s    

r”   c               	   C   s<   t  d¡} t  d¡}t t¡ t| d|d W 5 Q R X d S )Nr†   r   rO   )r.   rB   r‘   )rU   rB   r    r    r!   Útest_incorrect_mask_shapeÈ  s    

r•   c                  C   s8   t } | dk}t| dd|d}t ||  dk¡s4t‚d S )Nr   é   r   )rp   rB   r   )rC   r   r   ri   r+   ©r-   rB   r/   r    r    r!   Útest_markers_in_maskÏ  s    r˜   c                  C   s.   t } | dk}t| |d}t |¡dks*t‚d S )Nr   rA   r   )rC   r   r   Úmaxr+   r—   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sFt
‚t  |¡j	d dks`t
‚ttdƒddddddgƒD ]"\}}t  ||k¡|kszt
‚qzttdƒdddddgƒD ]"\}}t  ||k¡|ks¶t
‚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   rN   rN   iT  rœ   )rN   é2   é(   éP   r   é   r   )Zdecimalsr   r›   r‡   )rB   rp   r‰   r=   r^   i€ñ  iE  ióO  iY+  i  i,  iòO  ib0  i,  N)r   ÚindicesÚ
logical_orrS   Zdistance_transform_edtÚaroundÚwherer   Úuniquer   r+   rs   rt   r   )rW   rX   Úx1Úy1Zx2Úy2Zx3Zy3Zx4Zy4Úr1Úr2Zr3Zr4Zmask_circle1Zmask_circle2Zmask_circle3Zmask_circle4rU   ZDummyBTZDummyBT_disZImg_maskZ	labels_c1Z	labels_c2rw   rx   r    r    r!   Útest_connectivityÞ  s2        
ÿÿ" r¬   )'Ú__doc__r   ZunittestÚnumpyr   r’   Zscipyr   rS   Zskimage._shared.filtersr   Zskimage.measurer   Z
_watershedr   r*   r&   rC   r"   ZTestCaser#   rŒ   rŽ   ÚmarkZparametrizer'   r(   rT   Zint16Zuint32r   Zuint64Zint64r   r”   r•   r˜   rš   r¬   r    r    r    r!   Ú<module>   sh   &""""""""""""""""""""ì  [    ÿÿ
