o
    :ήcO                     @   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g dZeg d	Zeg d
Zeg dZeg dg dg dg dg dg dg dg dg dg dg
Zeg dg dg dg dg dg dg dg dg dg dg
Zeg dg dg dg dg dg dg dg dg dg dg
Zeg dg d g d!g d"g d#gZeg d$g d%g d&g d'g d'gZeg d(g d)g d(g d(gg d(g d*g d(g d(gg d(g d)g d(g d+gg d(g d(g d(g d+ggZeg d,g d,g d,g d-gg d,g d,g d,g d.gg d,g d,g d/g d0gg d1g d1g d/g d0ggZeg d2g d3g d)gZed4eed5feed5feed6feed5feed7feed8fgd9d: Zed;d8d5ged<ed=d>d? Zd@dA ZdS )B    )ndimage)dataN)measure)expand_labels)testing)assert_array_equal)r   r      r   r   r   r   r   r      r	   r   r   r   r   r   r   )r   r   r   r   r   r   r	   r	   r	   r	   r	   r	   r	   r	   r   r   r   )r   r   r   r   r   r   r   r   r	   r	   r   r   r   r   r   r   )r   r   r   r   r   r   r	   r	   r	   r	   r	   r	   r	   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r	   r	   r   r   r   r   r   r   r   )r   r	   r	   r	   r   r   r   r   r   r   r   )r   r	   r	   r   r   r   r   r   r   r   r   )r   r   r	   r   r   r   r   r   r      r   )r   r   r   r   r   r   r   r   r   r
   r   )r	   r	   r	   r	   r	   r	   r   r   r   r   r   )r	   r	   r	   r	   r	   r	   r	   r   r   r
   r   )r	   r	   r	   r	   r	   r	   r	   r
   r
   r
   r
   )r	   r	   r	   r	   r	   r	   r   r
   r
   r
   r
   )r	   r	   r	   r	   r	   r	   r
   r
   r
   r
   r
   )r	   r	   r	   r	   r	   r   r
   r
   r
   r
   r
   )r	   r	   r	   r	   r	   r   r   r
   r
   r
   r
   )r   r   r	   r   r   r   r   r
   r
   r
   r
   )r   r	   r	   r	   r	   r   r   r   r   r   r   )r	   r	   r	   r	   r	   r   r   r   r   r   r   )r	   r	   r	   r	   r	   r   r   r   r
   r
   r
   )r	   r	   r	   r	   r   r   r   r   r
   r
   r
   )r   r	   r	   r	   r   r   r   r   r
   r
   r
   )r   r   r   r   r   r   r   r   r
   r
   r
   )r   r   r   r   r   r
   r
   r   r   r   r   )r   r   r	   r	   r   r
   r
   r   r   r   r   )r   r	   r	   r	   r   r
   r   r   r   r   r   )r   r   r	   r   r   r   r   r   r   r   r   )r	   r	   r	   r	   r
   r
   r
   r
   r
   r
   r   )r	   r	   r	   r	   r
   r
   r
   r
   r
   r
   r
   )r	   r	   r	   r	   r	   r
   r
   r
   r
   r
   r
   )r	   r	   r	   r	   r	   r
   r
   r
   r
   r
   r   )r   r   r   r   )r      r   r   )r   r   r   r   )r   r      r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r	   r   r   )r
   r   r   r   z-input_array, expected_output, expand_distancer   g      ?r   r
   c                 C   s   t | |}t|| d S )N)r   r   )input_arrayexpected_outputexpand_distanceexpanded r   T/tmp/pip-target-vg8gfxp4/lib/python/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?J ||t  }	|	j
dkrUt|	|ksWJ dS 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?)lengthblob_size_fractionn_dim)r   r   N)r   binary_blobsr   labelr   r   astypeboolndidistance_transform_edtsizenpall)
r   r   imglabelsr   original_maskexpanded_only_maskdistance_mapexpanded_distancesbeyond_expanded_distancesr   r   r   test_binary_blobs   s   


r+   c                  C   s.   t td} t tjd}t| |jkrJ 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   expanded_transposer   r   r   test_edge_case_behaviour   s   
r/   ) scipyr   r   skimager   numpyr"   r   #skimage.segmentation._expand_labelsr   skimage._sharedr   skimage._shared.testingr   arraySAMPLE1DSAMPLE1D_EXPANDED_3
EDGECASE1DEDGECASE1D_EXPANDED_3SAMPLE2DSAMPLE2D_EXPANDED_3SAMPLE2D_EXPANDED_1_5
EDGECASE2DEDGECASE2D_EXPANDED_4SAMPLE3DSAMPLE3D_EXPANDED_2r,   parametrizer   ranger+   r/   r   r   r   r   <module>   s    
