a
    =b*                     @   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 ]B}|D ]8}|D ].}|j d| d|j }||||||< qhq`qX|S )N)   r         _)r   erosiondilationopeningclosingwhite_tophatblack_tophatr   squarediamondZdiskZstarr   r   Zdownscale_local_meanr   Zrgb2grayr   Zcoffeerange__name__)	selfZfuncsZfootprints_2Dimageoutputnstrelfunckey r&   Alib/python3.9/site-packages/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   expectedZ
calculatedr&   r&   r'   test_gray_morphology)   s    z#TestMorphology.test_gray_morphologyN)r   
__module____qualname__r(   r-   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   Zdtyper   )r   r      r   )r*   onesuint8black_pixelwhite_pixelr   r   Z	rectangle)r   r&   r&   r'   setUp0   s    


z&TestEccentricStructuringElements.setUpc                 C   sB   | j D ]6}t| j|}t| j|}t|d| ksJ qd S Nr1   )r   r   r   r7   r   r8   r*   all)r   scdr&   r&   r'   test_dilate_erode_symmetry8   s    
z;TestEccentricStructuringElements.test_dilate_erode_symmetryc                 C   s2   | j D ]&}t| j|}t|| jksJ qd S N)r   r   r   r7   r*   r;   )r   r<   Z	gray_openr&   r&   r'   test_open_black_pixel>   s    
z6TestEccentricStructuringElements.test_open_black_pixelc                 C   s2   | j D ]&}t| j|}t|| jksJ qd S r@   )r   r   r   r8   r*   r;   )r   r<   Z
gray_closer&   r&   r'   test_close_white_pixelC   s    
z7TestEccentricStructuringElements.test_close_white_pixelc                 C   s,   | j D ] }tt| j|dksJ qd S Nr   )r   r*   r;   r   r   r8   r   r<   r&   r&   r'   test_open_white_pixelH   s    
z6TestEccentricStructuringElements.test_open_white_pixelc                 C   s,   | j D ] }tt| j|dksJ qd S r:   )r   r*   r;   r   r   r7   rD   r&   r&   r'   test_close_black_pixelL   s    
z7TestEccentricStructuringElements.test_close_black_pixelc                 C   s2   | j D ]&}t| j|}t|| jksJ qd S r@   )r   r   r   r8   r*   r;   r   r<   Ztophatr&   r&   r'   test_white_tophat_white_pixelP   s    
z>TestEccentricStructuringElements.test_white_tophat_white_pixelc                 C   s6   | j D ]*}t| j|}t|d| j ksJ qd S r:   )r   r   r   r7   r*   r;   rG   r&   r&   r'   test_black_tophat_black_pixelU   s    
z>TestEccentricStructuringElements.test_black_tophat_black_pixelc                 C   s0   | j D ]$}t| j|}t|dksJ qd S rC   )r   r   r   r7   r*   r;   rG   r&   r&   r'   test_white_tophat_black_pixelZ   s    
z>TestEccentricStructuringElements.test_white_tophat_black_pixelc                 C   s0   | j D ]$}t| j|}t|dksJ qd S rC   )r   r   r   r8   r*   r;   rG   r&   r&   r'   test_black_tophat_white_pixel_   s    
z>TestEccentricStructuringElements.test_black_tophat_white_pixelN)r   r.   r/   r9   r?   rA   rB   rE   rF   rH   rI   rJ   rK   r&   r&   r&   r'   r0   /   s   r0   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   )Z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   r*   arrayr6   r   )rL   r#   r    Zim_expectedZim_testr&   r&   r'   test_default_footprintj   s(    

rN   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   rP   rP   r   r4   r3         )r*   zerosboolr   r   ndigenerate_binary_structurer   )r    openedimage_expectedr&   r&   r'   "test_3d_fallback_default_footprint   s    
"rZ   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )NrO   r   r4   rQ   )rR   rR   rR   r3   )r*   rT   rU   r5   r6   r   )rL   r    Zcube	new_imager&   r&   r'   test_3d_fallback_cube_footprint   s
    
r\   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 sz0    Y  tdd}tdg( tj| jt j	d|d	}W d    n1 s0    Y  t
|| d S )
NrO   r3   r   r4   r   rR   rS   operator.*deprecated|\A\Z	footprint)r*   rT   rU   r	   r   r   rV   rW   viewr6   r   r    r[   r_   rY   r&   r&   r'   test_3d_fallback_white_tophat   s    ($rb   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 sz0    Y  tdd	}tdg( tj| jt j	d|d
}W d    n1 s0    Y  t
|| d S )NrO   r3   r   r4   r   rR   rS   r]   r   r^   )r*   r5   rU   r	   r   r   rV   rW   r`   r6   r   ra   r&   r&   r'   test_3d_fallback_black_tophat   s    ($rc   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)	   rd      r4   rQ      rR   r1   r2   r   r^   )r*   rT   r6   r   r   r   rV   rW   Zgrey_openingZgrey_closingr   )r    rX   closedr_   Zndimage_openedZndimage_closedr&   r&   r'   test_2d_ndimage_equivalence   s    


ri   )皙?
ףp=
?g333333?HzG?zG?)g?)\(?{Gz?Q?RQ?)HzG?(\?g=
ףp=?(\?Q?)
ףp=
?{Gz?(\?(\?ףp=
?)\(\?g?q=
ףp?ry   Q?)rj   rn   rl   rm   rq   )rn   rn   rn   rq   ru   )rv   rw   rs   ru   ru   )rw   rw   rw   ry   ru   )rv   rw   r|   r}   r}   )rk   rk   ro   rp   rl   )rr   ro   rp   rp   rp   )rr   rr   rt   rp   rt   )r{   rx   rx   rt   rz   )r{   r{   rx   ry   rz   )rj   rj   rl   rl   rm   )rj   rn   rl   rn   rq   )rn   rs   rs   ry   ru   )rv   rw   ry   ry   ry   )rv   r|   r|   ry   r}   )rk   rk   rk   rl   rl   )rr   rr   rr   rt   rz   )rr   rr   rx   ry   rz   )r{   rx   ry   ry   ry   c                   C   sD   t ttt t ttt t ttt t t	tt
 d S r@   )r   r   r   imerodedr   dilatedr   rX   r   rh   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 r@   )mapr   r~   r   r   rX   rh   r   r   r   r   r   r   )Zim16Zeroded16Z	dilated16Zopened16Z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)rS      r4   )rP   r4   r4   )rR   rS   r   )rS   rS   r4   )rP   r   r   r   r   )r   r   r   r   r   )rP   r   rP   r   r4   )rP   r   rS   r   rS   )rS   r   r4   r   r4   )r4   r   r4   r   r   )rR   r   r   r   r   )out)r*   rM   r6   rT   r   r   r   r   )r    Zout_array_bigZ	out_arrayZexpected_dilationZ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   r4   rR   r4   r   )r   r   r4   r   r   )r*   rM   r   r   r   )r    r,   r   r&   r&   r'   test_1d_erosion  s    
r   c                  C   sB   d} t | d g ddlm} W d    n1 s40    Y  d S )Nz5Importing from skimage.morphology.grey is deprecated.z|\A\Zr   )r   )r	   Zskimage.morphology.greyr   )msgr   r&   r&   r'   test_deprecated_import  s    r   )r   r   r   r   r   r   c                 C   sL   t dg. tt| tdtdd W d    n1 s>0    Y  d S )Nz%`selem` is a deprecated argument namer2   )rR   rR   )Zselem)r	   getattrr   r*   rT   r5   )rL   r&   r&   r'   test_selem_kwarg_deprecation  s    r   )7Znumpyr*   ZpytestZscipyr   rV   Znumpy.testingr   r   r   Zskimager   r   r   Zskimage._shared._warningsr	   Zskimage._shared.testingr
   r   Zskimage.morphologyr   r   Zskimage.utilr   r   r   r0   r   r   r   r   r   r   Zgray_functionsZmarkZparametrizerN   rZ   Zgray_3d_fallback_functionsr\   rb   rc   ri   rM   r~   r   r   rX   rh   r   r   r   r   r   r   r&   r&   r&   r'   <module>   s|   "6






	