o
    :ήc*                     @   s   d dl Zd dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZ G d	d
 d
ZG dd deZejejejejejej gZ!ej"#de!dd Z$dd Z%ejejgZ&ej"#de&dd Z'dd Z(dd Z)dd 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 d(gZ.e+g d)g d*g d+g d,g d-gZ/e+g d.g d$g d/g d0g d1gZ0d2d3 Z1d4d5 Z2d6d7 Z3d8d9 Z4d:d; Z5ej"#dg d<d=d> Z6dS )?    N)ndimage)assert_allcloseassert_array_equalassert_equal)colordata	transform)expected_warnings)TestCasefetch)gray
footprints)img_as_uintimg_as_ubytec                   @   s   e Zd Zdd Zdd ZdS )TestMorphologyc           	      C   s   t jt jt jt jt jt jf}tjtj	tj
tjf}tttt d}i }tddD ]!}|D ]}|D ]}|j d| d|j }||||||< q4q0q,|S )N)   r         _)r   erosiondilationopeningclosingwhite_tophatblack_tophatr   squarediamonddiskstarr   r   downscale_local_meanr   rgb2grayr   coffeerange__name__)	selffuncsfootprints_2Dimageoutputnstrelfunckey r-   I/tmp/pip-target-vg8gfxp4/lib/python/skimage/morphology/tests/test_gray.py_build_expected_output   s$   z%TestMorphology._build_expected_outputc                 C   s(   t ttd}|  }t|| d S )Nzdata/gray_morph_output.npz)dictnploadr   r/   r   )r$   expected
calculatedr-   r-   r.   test_gray_morphology)   s   z#TestMorphology.test_gray_morphologyN)r#   
__module____qualname__r/   r5   r-   r-   r-   r.   r      s    
r   c                   @   s\   e Z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 ) TestEccentricStructuringElementsc                 C   s\   dt jdt jd | _d| jd< d| j | _tdtddtddtddg| _d S )N   r   r   dtyper   )r   r      r   )r1   onesuint8black_pixelwhite_pixelr   r   	rectangle)r$   r-   r-   r.   setUp0   s   



z&TestEccentricStructuringElements.setUpc                 C   sB   | j D ]}t| j|}t| j|}t|d| ksJ qd S Nr9   )r   r   r   r@   r   rA   r1   all)r$   scdr-   r-   r.   test_dilate_erode_symmetry8   s
   
z;TestEccentricStructuringElements.test_dilate_erode_symmetryc                 C   2   | j D ]}t| j|}t|| jksJ qd S N)r   r   r   r@   r1   rE   )r$   rF   	gray_openr-   r-   r.   test_open_black_pixel>      
z6TestEccentricStructuringElements.test_open_black_pixelc                 C   rJ   rK   )r   r   r   rA   r1   rE   )r$   rF   
gray_closer-   r-   r.   test_close_white_pixelC   rN   z7TestEccentricStructuringElements.test_close_white_pixelc                 C   ,   | j D ]}tt| j|dksJ qd S Nr   )r   r1   rE   r   r   rA   r$   rF   r-   r-   r.   test_open_white_pixelH      
z6TestEccentricStructuringElements.test_open_white_pixelc                 C   rQ   rD   )r   r1   rE   r   r   r@   rS   r-   r-   r.   test_close_black_pixelL   rU   z7TestEccentricStructuringElements.test_close_black_pixelc                 C   rJ   rK   )r   r   r   rA   r1   rE   r$   rF   tophatr-   r-   r.   test_white_tophat_white_pixelP   rN   z>TestEccentricStructuringElements.test_white_tophat_white_pixelc                 C   s6   | j D ]}t| j|}t|d| j ksJ qd S rD   )r   r   r   r@   r1   rE   rW   r-   r-   r.   test_black_tophat_black_pixelU   s   
z>TestEccentricStructuringElements.test_black_tophat_black_pixelc                 C   0   | j D ]}t| j|}t|dksJ qd S rR   )r   r   r   r@   r1   rE   rW   r-   r-   r.   test_white_tophat_black_pixelZ      
z>TestEccentricStructuringElements.test_white_tophat_black_pixelc                 C   r[   rR   )r   r   r   rA   r1   rE   rW   r-   r-   r.   test_black_tophat_white_pixel_   r]   z>TestEccentricStructuringElements.test_black_tophat_white_pixelN)r#   r6   r7   rC   rI   rM   rP   rT   rV   rY   rZ   r\   r^   r-   r-   r-   r.   r8   /   s    r8   functionc                 C   s   t jdd}tg dg dg dg dg dg dg dg dg dg dg dg dg dgtj}| ||}| |}t|| d S )Nr   )radius)
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r1   arrayr?   r   )r_   r*   r'   im_expectedim_testr-   r-   r.   test_default_footprintj   s(   

rd   c                  C   sn   t dt} d| ddddddf< t| }t jdtd}tdd|ddddddf< t|| d S )N   rf   rf   r   r=   r;         )r1   zerosboolr   r   ndigenerate_binary_structurer   )r'   openedimage_expectedr-   r-   r.   "test_3d_fallback_default_footprint   s   
"rp   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )Nre   r   r=   rg   )rh   rh   rh   r;   )r1   rj   rk   r>   r?   r   )r_   r'   cube	new_imager-   r-   r.   test_3d_fallback_cube_footprint   s
   
rs   c                  C   s   t jdtd} d| dddddf< d| dddddf< d| dddddf< tdg t| }W d    n1 s=w   Y  tdd}tdg tj| jt j	d|d	}W d    n1 sdw   Y  t
|| d S )
Nre   r;   r   r=   r   rh   ri   operator.*deprecated|\A\Z	footprint)r1   rj   rk   r	   r   r   rl   rm   viewr?   r   r'   rr   rv   ro   r-   r-   r.   test_3d_fallback_white_tophat      ry   c                  C   s   t jdtd} d| dddddf< d| dddddf< d| dddddf< tdg t| }W d    n1 s=w   Y  tdd	}tdg tj| jt j	d|d
}W d    n1 sdw   Y  t
|| d S )Nre   r;   r   r=   r   rh   ri   rt   r   ru   )r1   r>   rk   r	   r   r   rl   rm   rw   r?   r   rx   r-   r-   r.   test_3d_fallback_black_tophat   rz   r{   c                  C   s   t dt j} d| ddddf< d| ddddf< d| d	< t| }t| }tdd
}tj| |d}tj	| |d}t
|| t
|| d S )N)	   r|      r=   rg      rh   r9   r:   r   ru   )r1   rj   r?   r   r   r   rl   rm   grey_openinggrey_closingr   )r'   rn   closedrv   ndimage_openedndimage_closedr-   r-   r.   test_2d_ndimage_equivalence   s   


r   )皙?
ףp=
?g333333?HzG?zG?)g?)\(?{Gz?Q?RQ?)HzG?(\?g=
ףp=?(\?Q?)
ףp=
?{Gz?(\?(\?ףp=
?)\(\?g?q=
ףp?r   Q?)r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   c                   C   sD   t ttt t ttt t ttt t t	tt
 d S rK   )r   r   r   imerodedr   dilatedr   rn   r   r   r-   r-   r-   r.   
test_float   s   r   c                  C   sb   t ttttttg\} }}}}tt	| | tt
| | tt| | tt| | d S rK   )mapr   r   r   r   rn   r   r   r   r   r   r   r   )im16eroded16	dilated16opened16closed16r-   r-   r.   test_uint16   s   r   c                  C   s   t g dg dg dgt j} t dt j}|d d dd d df }t g dg dg dg dg d	gt j}t g d
g dg dg dg dgt j}tj| |d t|| tj| |d t|| d S )N)ri      r=   )rf   r=   r=   )rh   ri   r   )ri   ri   r=   )rf   r   r   r   r   )r   r   r   r   r   )rf   r   rf   r   r=   )rf   r   ri   r   ri   )ri   r   r=   r   r=   )r=   r   r=   r   r   )rh   r   r   r   r   )out)r1   ra   r?   rj   r   r   r   r   )r'   out_array_big	out_arrayexpected_dilationexpected_erosionr-   r-   r.   test_discontiguous_out_array   s8   



r   c                  C   s4   t g d} t g d}t| }t|| d S )N)r   r=   rh   r=   r   )r   r   r=   r   r   )r1   ra   r   r   r   )r'   r3   r   r-   r-   r.   test_1d_erosion  s   
r   c                  C   sD   d} t | d g ddlm} W d    d S 1 sw   Y  d S )Nz5Importing from skimage.morphology.grey is deprecated.z|\A\Zr   )r   )r	   skimage.morphology.greyr   )msgr   r-   r-   r.   test_deprecated_import  s   "r   )r   r   r   r   r   r   c                 C   sN   t dg tt| tdtdd W d    d S 1 s w   Y  d S )Nz%`selem` is a deprecated argument namer:   )rh   rh   )selem)r	   getattrr   r1   rj   r>   )r_   r-   r-   r.   test_selem_kwarg_deprecation  s    "r   )7numpyr1   pytestscipyr   rl   numpy.testingr   r   r   skimager   r   r   skimage._shared._warningsr	   skimage._shared.testingr
   r   skimage.morphologyr   r   skimage.utilr   r   r   r8   r   r   r   r   r   r   gray_functionsmarkparametrizerd   rp   gray_3d_fallback_functionsrs   ry   r{   r   ra   r   r   r   rn   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   s~    "6






	