o
    c«ÏiÜ  ã                   @   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 d)¢g d1¢g d)¢g d(¢gg d*¢g d,¢g d*¢g d(¢gg d)¢g d1¢g d-¢g d.¢gg d(¢g d(¢g d+¢g d.¢gg¡Ze g d2¢g d3¢g d)¢g¡Ze d4eed5d6feed5d6feed7d6feed5d6feed8d6feed9d6feed6g d:¢fg¡d;d<„ ƒZe d=d9d5g¡e d>ed?ƒ¡d@dA„ ƒƒZdBdC„ Z dS )Dé    )Ú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   z6input_array, expected_output, expand_distance, spacingr   r	   g      ø?r   r
   )r
   r	   r	   c                 C   s   t | ||ƒ}t||ƒ d S )N)r   r   )Úinput_arrayÚexpected_outputÚexpand_distanceÚspacingÚexpanded© r   úw/var/www/addictedbytheproject.nl/epg/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   
r0   )!Ú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_2ÚSAMPLE3D_EXPAND_SPACINGr-   Úparametrizer   Úranger,   r0   r   r   r   r   Ú<module>   sÐ    öÿöÿöÿûÿ
ûÿ
üÿ	üÿüÿ	





ùþ
