U
    ?hF                     @   s  d dl mZ d dlm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 ed d dd d d d d d d	d	d d d d d d gZeddddddd	d	d	d	d	d	d	d	d d d gZed d dd d d d d d	d	d d d d d d gZeddddddd	d	d	d	d	d	d	d d d gZed d d d d d d d d d d gd d d d d d d d d d d gd d d	d	d d d d d d d gd d	d	d	d d d d d d d gd d	d	d d d d d d d d gd d d	d d d d d d d
d gd d d d d d d d d d
d gd d d d d d d d d d d gd d d d d d d d d d d gd d d d d d d d d d d gg
Zed	d	d	d	d	d	d d d d d gd	d	d	d	d	d	d d d d d gd	d	d	d	d	d	d	d d d
d gd	d	d	d	d	d	d	d
d
d
d
gd	d	d	d	d	d	d d
d
d
d
gd	d	d	d	d	d	d
d
d
d
d
gd	d	d	d	d	d d
d
d
d
d
gd	d	d	d	d	d d d
d
d
d
gd d d	d d d d d
d
d
d
gd d d d d d d d d d
d gg
Zed d d d d d d d d d d gd d	d	d	d	d d d d d d gd	d	d	d	d	d d d d d d gd	d	d	d	d	d d d d d d gd	d	d	d	d	d d d d
d
d
gd	d	d	d	d d d d d
d
d
gd d	d	d	d d d d d
d
d
gd d d d d d d d d
d
d
gd d d d d d d d d d d gd d d d d d d d d d d gg
Zed d d d d d d d d d d gd d d d d d
d
d d d d gd d d	d	d d
d
d d d d gd d	d	d	d d
d d d d d gd d d	d d d d d d d d ggZed	d	d	d	d
d
d
d
d
d
d gd	d	d	d	d
d
d
d
d
d
d
gd	d	d	d	d	d
d
d
d
d
d
gd	d	d	d	d	d
d
d
d
d
d gd	d	d	d	d	d
d
d
d
d
d ggZed d d d gd dd d gd d d d gd d d d ggd d d d gd ddd gd d d d gd d d d ggd d d d gd dd d gd d d d gd d dd ggd d d d gd d d d gd d d d gd d dd gggZeddddgddddgddddgd ddd ggddddgddddgddddgd dddggddddgddddgddddgddddggdddd gdddd gddddgddddgggZed d	d d gd
d d d gd dd d ggZedeedfeedfeedfeedfeedfeed
fgdd Zedd
dgededdd Zdd ZdS )    )ndimage)dataN)measure)expand_labels)testing)assert_array_equal               z-input_array, expected_output, expand_distanceg      ?c                 C   s   t | |}t|| d S )N)r   r   )Zinput_arrayZexpected_outputZexpand_distanceexpanded r   _/var/www/html/venv/lib/python3.8/site-packages/skimage/segmentation/tests/test_expand_labels.pytest_expand_labels   s    
r   ndimdistance   c           
      C   s   t jdd| d}t|}t||d}|dk}t|| ||  || t}t	| }|| }|j
dkr~t||ks~t||t  }	|	j
dkrt|	|kstdS )a2  Check some invariants with label expansion.

    - New labels array should exactly contain the original labels array.
    - Distance to old labels array within new labels should never exceed input
      distance.
    - Distance beyond the expanded labels should always exceed the input
      distance.
    @   g?)lengthZblob_size_fractionZn_dim)r   r   N)r   Zbinary_blobsr   labelr   r   ZastypeboolndiZdistance_transform_edtsizenpallAssertionError)
r   r   Zimglabelsr   Zoriginal_maskZexpanded_only_maskZdistance_mapZexpanded_distancesZbeyond_expanded_distancesr   r   r   test_binary_blobs   s    


r   c                  C   s.   t td} t tjd}t| |jkr*tdS )a   Check edge case behavior to detect upstream changes

    For edge cases where a pixel has the same distance to several regions,
    lexicographical order seems to determine which region gets to expand
    into this pixel given the current upstream behaviour in
    scipy.ndimage.distance_map_edt.

    As a result, we expect different results when transposing the array.
    If this test fails, something has changed upstream.
    r	   N)r   SAMPLE_EDGECASE_BEHAVIOURTr   r   r   )r   Zexpanded_transposer   r   r   test_edge_case_behaviour   s    
r!   ) Zscipyr   r   Zskimager   numpyr   r   Z#skimage.segmentation._expand_labelsr   Zskimage._sharedr   Zskimage._shared.testingr   arrayZSAMPLE1DZSAMPLE1D_EXPANDED_3Z
EDGECASE1DZEDGECASE1D_EXPANDED_3ZSAMPLE2DZSAMPLE2D_EXPANDED_3ZSAMPLE2D_EXPANDED_1_5Z
EDGECASE2DZEDGECASE2D_EXPANDED_4ZSAMPLE3DZSAMPLE3D_EXPANDED_2r   Zparametrizer   ranger   r!   r   r   r   r   <module>   s   ,,**































(
