o
    ðË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 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   úh/var/www/html/scripts/venv/lib/python3.10/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?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    ÷ÿ÷ÿ÷ÿüÿüÿýýýýñÿýýýýñÿúþ
