a
    
dp<                     @   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 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-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Z0e-g d-g d.g d/g d0g d1gZ1e-g d2g d(g d3g d4g d5gZ2d6d7 Z3d8d9 Z4d:d; Z5d<d= Z6ej$%dg d>ej$%d?d@ej$%dAdBdCgdDdE Z7ej$%dg d>ej$%dFdGej$%dHdGej$%dAdBdCgdIdJ Z8ej$%dg d>ej$%dKdLej$%dAdCgdMdN Z9ej$%dg d>ej$%dOdPej$%dQdRej$%dAdCgdSdT Z:ej$%dg d>ej$%d?dUej$%dAdBdCgdVdW Z;ej$%dg d>ej$%dKdXej$%dAdCgdYdZ 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ascontiguousarrayZcamerar    r   k/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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diskZstarr   r   Zdownscale_local_meanr   Zrgb2grayr   Z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
   r5   r   )r-   expectedZ
calculatedr   r   r   test_gray_morphology5   s    z#TestMorphology.test_gray_morphologyN)r,   
__module____qualname__r5   r9   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)r-   r   r   r   setup_class<   s    


z,TestEccentricStructuringElements.setup_classc                 C   sB   | j D ]6}t| j|}t| j|}t|d| ksJ qd S Nr=   )r   r   r#   rC   r$   rD   r   all)r-   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J qd S N)r   r   r%   rC   r   rH   )r-   rI   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J qd S rM   )r   r   r&   rD   r   rH   )r-   rI   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J qd S Nr   )r   r   rH   r   r%   rD   r-   rI   r   r   r   test_open_white_pixelT   s    
z6TestEccentricStructuringElements.test_open_white_pixelc                 C   s,   | j D ] }tt| j|dksJ qd S rG   )r   r   rH   r   r&   rC   rQ   r   r   r   test_close_black_pixelX   s    
z7TestEccentricStructuringElements.test_close_black_pixelc                 C   s2   | j D ]&}t| j|}t|| jksJ qd S rM   )r   r   r'   rD   r   rH   r-   rI   Z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J qd S rG   )r   r   r(   rC   r   rH   rT   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J qd S rP   )r   r   r'   rC   r   rH   rT   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J qd S rP   )r   r   r(   rD   r   rH   rT   r   r   r   test_black_tophat_white_pixelk   s    
z>TestEccentricStructuringElements.test_black_tophat_white_pixelN)r,   r:   r;   rF   rL   rN   rO   rR   rS   rU   rV   rW   rX   r   r   r   r   r<   ;   s   r<   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*   r   arrayrB   r   )rY   r2   r/   Zim_expectedZim_testr   r   r   test_default_footprintv   s(    

r\   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   r^   r^   r    r@   r?         )r   zerosboolr   r%   ndigenerate_binary_structurer   )r/   openedimage_expectedr   r   r   "test_3d_fallback_default_footprint   s    
"rh   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )Nr]   r    r@   r_   )r`   r`   r`   r?   )r   rb   rc   rA   rB   r   )rY   r/   cube	new_imager   r   r   test_3d_fallback_cube_footprint   s
    
rk   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 )
Nr]   r?   r    r@   r!   r`   ra   operator.*deprecated|\A\Z	footprint)r   rb   rc   r	   r   r'   rd   re   viewrB   r   r/   rj   rn   rg   r   r   r   test_3d_fallback_white_tophat   s    ($rq   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 )Nr]   r?   r   r@   r!   r`   ra   rl   r    rm   )r   rA   rc   r	   r   r(   rd   re   ro   rB   r   rp   r   r   r   test_3d_fallback_black_tophat   s    ($rr   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)	   rs      r@   r_      r`   r=   r>   r    rm   )r   rb   rB   r   r%   r&   rd   re   Zgrey_openingZgrey_closingr   )r/   rf   closedrn   Zndimage_openedZndimage_closedr   r   r   test_2d_ndimage_equivalence   s    


rx   )皙?
ףp=
?g333333?HzG?zG?)g?)\(?{Gz?Q?RQ?)HzG?(\?g=
ףp=?(\?Q?)
ףp=
?{Gz?(\?(\?ףp=
?)\(\?g?q=
ףp?r   Q?)ry   r}   r{   r|   r   )r}   r}   r}   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )rz   rz   r~   r   r{   )r   r~   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )ry   ry   r{   r{   r|   )ry   r}   r{   r}   r   )r}   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )rz   rz   rz   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 rM   )r   r   r#   imerodedr$   dilatedr%   rf   r&   rw   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 rM   )mapr   r   r   r   rf   rw   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)ra      r@   )r^   r@   r@   )r`   ra   r    )ra   ra   r@   )r^   r   r   r   r   )r   r   r   r   r   )r^   r   r^   r   r@   )r^   r   ra   r   ra   )ra   r   r@   r   r@   )r@   r   r@   r   r    )r`   r   r    r   r    )out)r   r[   rB   rb   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    r@   r`   r@   r    )r    r    r@   r    r    )r   r[   r   r#   r   )r/   r8   r   r   r   r   test_1d_erosion  s    
r   )r#   r$   r&   r%   r'   r(   size)r^   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   rm   )r   r)   getattrr   r   )	r   rY   r   r   footprint_ndarrayrn   r3   r8   r   r   r   r   test_square_decomposition#  s    
r   nrows)r`      ncolsc           
      C   sP   t j||dd}t j|||d}tt|}|| |d}|| |d}	t||	 dS r   )r   rE   r   r   r   )
r   rY   r   r   r   r   rn   r3   r8   r   r   r   r   test_rectangle_decomposition6  s    
r   rZ   )r@   r`   c           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   r*   r   r   r   )	r   rY   rZ   r   r   rn   r3   r8   r   r   r   r   test_diamond_decompositionK  s    
r   m)r   r    r`   ra   r1   )r   r    r@   r`   c           
      C   s   |dkrL|dkrLt t  tj|||d W d   q1 s@0    Y  nLtj||dd}tj|||d}tt|}|| |d}|| |d}	t||	 dS )r   r   r   Nrm   )pytestZraises
ValueErrorr   Zoctagonr   r   r   )
r   rY   r   r1   r   r   rn   r3   r8   r   r   r   r   test_octagon_decomposition^  s    0
r   )ra   c           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   ri   r   r   r   )	r   rY   r   r   r   rn   r3   r8   r   r   r   r   test_cube_decompositionv  s    
r   )r`   c           	      C   sL   t j|dd}t j||d}tt|}|| |d}|| |d}t|| dS r   )r   Z
octahedronr   r   r   )	r   rY   rZ   r   r   rn   r3   r8   r   r   r   r   test_octahedron_decomposition  s    
r   )=numpyr   r   Zscipyr   rd   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parametrizer\   rh   Zgray_3d_fallback_functionsrk   rq   rr   rx   r[   r   r   r   rf   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

"6






	