U
    ?hp<                     @   sL  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 d dlmZmZ d dlmZmZ ejd	d
 Zejdd ZG dd dZG dd d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-ddd d!d"gd#d$d%d&d'gd(d)d*d+d,gd-d.d/d0d1gd2d3d4d0d5ggZ.e-dd$d!d"d'gd$d$d$d'd,gd-d.d)d,d,gd.d.d.d0d,gd-d.d4d5d5ggZ/e-ddd%d&d!gd(d%d&d&d&gd(d(d+d&d+gd2d/d/d+d1gd2d2d/d0d1ggZ0e-ddd!d!d"gdd$d!d$d'gd$d)d)d0d,gd-d.d0d0d0gd-d4d4d0d5ggZ1e-dddd!d!gddd%d&d!gd(d(d(d+d1gd(d(d/d0d1gd2d/d0d0d0ggZ2d6d7 Z3d8d9 Z4d:d; Z5d<d= Z6ej$%dd>d?d@dAdBdCgej$%dDdEej$%dFdGdHgdIdJ Z7ej$%dd>d?d@dAdBdCgej$%dKdLej$%dMdLej$%dFdGdHgdNdO Z8ej$%dd>d?d@dAdBdCgej$%dPdQej$%dFdHgdRdS Z9ej$%dd>d?d@dAdBdCgej$%dTdUej$%dVdWej$%dFdHgdXdY Z:ej$%dd>d?d@dAdBdCgej$%dDdZej$%dFdGdHgd[d\ Z;ej$%dd>d?d@dAdBdCgej$%dPd]ej$%dFdHgd^d_ Z<dS )`    N)ndimage)assert_allcloseassert_array_equalassert_equal)colordata	transform)expected_warnings)fetch)gray
footprints)img_as_uintimg_as_ubytec                  C   s*   ddl m}  t|  ddddf S )Nr   r   @   p   `   )skimager   npascontiguousarraycamerar    r   T/var/www/html/venv/lib/python3.8/site-packages/skimage/morphology/tests/test_gray.py	cam_image   s    r   c                  C   s2   ddl m}  t|  dddddddf S )Nr   r      0      $       )r   r   r   r   Zcells3dr   r   r   r   cell3d_image   s    r   c                   @   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         _)r   erosiondilationopeningclosingwhite_tophatblack_tophatr   squarediamondZdiskstarr   r   Zdownscale_local_meanr   Zrgb2grayr   coffeerange__name__)	selffuncsZfootprints_2Dimageoutputnstrelfunckeyr   r   r   _build_expected_output#   s&       z%TestMorphology._build_expected_outputc                 C   s(   t ttd}|  }t|| d S )Nzdata/gray_morph_output.npz)dictr   loadr
   r8   r   )r0   expectedZ
calculatedr   r   r   test_gray_morphology5   s    z#TestMorphology.test_gray_morphologyN)r/   
__module____qualname__r8   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*   	rectangle)r0   r   r   r   setup_class<   s    


z,TestEccentricStructuringElements.setup_classc                 C   sB   | j D ]6}t| j|}t| j|}t|d| kstqd S Nr@   )	r   r   r$   rF   r%   rG   r   allAssertionError)r0   scdr   r   r   test_dilate_erode_symmetryD   s    
z;TestEccentricStructuringElements.test_dilate_erode_symmetryc                 C   s2   | j D ]&}t| j|}t|| jkstqd S N)r   r   r&   rF   r   rK   rL   )r0   rM   Z	gray_openr   r   r   test_open_black_pixelJ   s    
z6TestEccentricStructuringElements.test_open_black_pixelc                 C   s2   | j D ]&}t| j|}t|| jkstqd S rQ   )r   r   r'   rG   r   rK   rL   )r0   rM   Z
gray_closer   r   r   test_close_white_pixelO   s    
z7TestEccentricStructuringElements.test_close_white_pixelc                 C   s,   | j D ] }tt| j|dkstqd S Nr   )r   r   rK   r   r&   rG   rL   r0   rM   r   r   r   test_open_white_pixelT   s    
z6TestEccentricStructuringElements.test_open_white_pixelc                 C   s,   | j D ] }tt| j|dkstqd S rJ   )r   r   rK   r   r'   rF   rL   rU   r   r   r   test_close_black_pixelX   s    
z7TestEccentricStructuringElements.test_close_black_pixelc                 C   s2   | j D ]&}t| j|}t|| jkstqd S rQ   )r   r   r(   rG   r   rK   rL   r0   rM   tophatr   r   r   test_white_tophat_white_pixel\   s    
z>TestEccentricStructuringElements.test_white_tophat_white_pixelc                 C   s6   | j D ]*}t| j|}t|d| j kstqd S rJ   )r   r   r)   rF   r   rK   rL   rX   r   r   r   test_black_tophat_black_pixela   s    
z>TestEccentricStructuringElements.test_black_tophat_black_pixelc                 C   s0   | j D ]$}t| j|}t|dkstqd S rT   )r   r   r(   rF   r   rK   rL   rX   r   r   r   test_white_tophat_black_pixelf   s    
z>TestEccentricStructuringElements.test_white_tophat_black_pixelc                 C   s0   | j D ]$}t| j|}t|dkstqd S rT   )r   r   r)   rG   r   rK   rL   rX   r   r   r   test_black_tophat_white_pixelk   s    
z>TestEccentricStructuringElements.test_black_tophat_white_pixelN)r/   r=   r>   rI   rP   rR   rS   rV   rW   rZ   r[   r\   r]   r   r   r   r   r?   ;   s   r?   functionc                 C   sX  t jdd}tddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
gtj}| ||}| |}t|| d S )Nr!   )radiusr   )r   r+   r   arrayrE   r   )r^   r5   r2   Zim_expectedZim_testr   r   r   test_default_footprintv   s(    
ra   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   rc   rc   r!   rC   rB         )r   zerosboolr   r&   ndigenerate_binary_structurer   )r2   openedimage_expectedr   r   r   "test_3d_fallback_default_footprint   s    
"rm   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )Nrb   r!   rC   rd   )re   re   re   rB   )r   rg   rh   rD   rE   r   )r^   r2   cube	new_imager   r   r   test_3d_fallback_cube_footprint   s
    
rp   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 5 Q R X tdd}tdg tj| jt j	d|d	}W 5 Q R X t
|| d S )
Nrb   rB   r!   rC   r"   re   rf   operator.*deprecated|\A\Z	footprint)r   rg   rh   r	   r   r(   ri   rj   viewrE   r   r2   ro   rs   rl   r   r   r   test_3d_fallback_white_tophat   s     rv   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 5 Q R X tdd	}tdg tj| jt j	d|d
}W 5 Q R X t
|| d S )Nrb   rB   r   rC   r"   re   rf   rq   r!   rr   )r   rD   rh   r	   r   r)   ri   rj   rt   rE   r   ru   r   r   r   test_3d_fallback_black_tophat   s     rw   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)	   rx      rC   rd      re   r@   rA   r!   rr   )r   rg   rE   r   r&   r'   ri   rj   Zgrey_openingZgrey_closingr   )r2   rk   closedrs   Zndimage_openedZndimage_closedr   r   r   test_2d_ndimage_equivalence   s    


r}   g?g
ףp=
?g333333?gHzG?gzG?g?g)\(?g{Gz?gQ?gRQ?gHzG?g(\?g=
ףp=?g(\?gQ?g
ףp=
?g{Gz?g(\?g(\?gףp=
?g\(\?g?gq=
ףp?gQ?c                   C   sD   t ttt t ttt t ttt t t	tt
 d S rQ   )r   r   r$   imerodedr%   dilatedr&   rk   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 rQ   )mapr   r~   r   r   rk   r|   r   r   r$   r%   r&   r'   )Zim16Zeroded16Z	dilated16Zopened16Zclosed16r   r   r   test_uint16   s    r   c                  C   s  t dddgdddgdddggt j} t dt j}|d d dd d df }t dddddgdddddgdddddgdddddgdddddggt j}t dddddgdddddgdddddgdddddgdddddggt j}tj| |d	 t|| tj| |d	 t|| d S )
Nrf      rC   rc   re   r!   )rf   rf   r   )out)r   r`   rE   rg   r   r%   r   r$   )r2   Zout_array_bigZ	out_arrayZexpected_dilationZexpected_erosionr   r   r   test_discontiguous_out_array  s8    
r   c                  C   s@   t dddddg} t dddddg}t| }t|| d S )Nr!   rC   re   )r   r`   r   r$   r   )r2   r;   r   r   r   r   test_1d_erosion  s    
r   r$   r%   r'   r&   r(   r)   size)rc   decompositionZ	separablesequencec           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS tValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    Nr   rr   )r   r*   getattrr   r   )	r   r^   r   r   footprint_ndarrayrs   r6   r;   r   r   r   r   test_square_decomposition#  s    
r   nrows)re      ncolsc           
      C   sP   t j||dd}t j|||d}tt|}|| |d}|| |d}	t||	 dS r   )r   rH   r   r   r   )
r   r^   r   r   r   r   rs   r6   r;   r   r   r   r   test_rectangle_decomposition6  s    
r   r_   )rC   re   c           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   r+   r   r   r   )	r   r^   r_   r   r   rs   r6   r;   r   r   r   r   test_diamond_decompositionK  s    
r   m)r   r!   re   rf   r4   )r   r!   rC   re   c           
   	   C   s   |dkr8|dkr8t t tj|||d W 5 Q R X nLtj||dd}tj|||d}tt|}|| |d}|| |d}	t||	 dS )r   r   r   Nrr   )pytestZraises
ValueErrorr   Zoctagonr   r   r   )
r   r^   r   r4   r   r   rs   r6   r;   r   r   r   r   test_octagon_decomposition^  s    
r   )rf   c           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   rn   r   r   r   )	r   r^   r   r   r   rs   r6   r;   r   r   r   r   test_cube_decompositionv  s    
r   )re   c           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   Z
octahedronr   r   r   )	r   r^   r_   r   r   rs   r6   r;   r   r   r   r   test_octahedron_decomposition  s    
r   )=numpyr   r   Zscipyr   ri   Znumpy.testingr   r   r   r   r   r   r   Zskimage._shared._warningsr	   Zskimage._shared.testingr
   Zskimage.morphologyr   r   Zskimage.utilr   r   Zfixturer   r   r    r?   r$   r%   r&   r'   r(   r)   Zgray_functionsmarkZparametrizera   rm   Zgray_3d_fallback_functionsrp   rv   rw   r}   r`   r~   r   r   rk   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

"6  

	 
 
 
 
 
 
