a
    
d!,                     @   s  d dl Zd dlZd dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZmZ ee
 ZedkZdd	 Zd
d Zdd Zdd Zdd ZdAddZejdg dejddejdddgdd Zejdg dejddejddejdddgd d! Z ejdg dejd"d#ejd$d#ejddgd%d& Z!ejdg dejd'd(ejddgd)d* Z"ejdg dejdd+ejdddgd,d- Z#ejdg dejd'd.ejddgd/d0 Z$d1d2 Z%d3d4 Z&ej'ej(ej)ej*gZ+ejde+d5d6 Z,d7d8 Z-ej)ej*gZ.ejde.d9d: Z/d;d< Z0d=d> Z1d?d@ Z2dS )B    N)assert_array_equalassert_equal)ndimage)datacolor
morphology)img_as_bool)binary
footprintsgrayg?c                  C   sT   t d} ttd dd df | }tttd dd df | }t|| d S )N   d      	r   squarer	   binary_erosionbw_imgr   r   erosionr   	footprint
binary_resgray_res r   m/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/morphology/tests/test_binary.pytest_non_square_image   s    
 r   c                  C   s4   t d} tt| }ttt| }t|| d S Nr   r   r   r   r   r   test_binary_erosion   s    
r   c                  C   s4   t d} tt| }ttt| }t|| d S r   )	r   r   r	   binary_dilationr   r   r   Zdilationr   r   r   r   r   test_binary_dilation   s    
r   c                  C   s4   t d} tt| }ttt| }t|| d S r   )	r   r   r	   binary_closingr   r   r   closingr   r   r   r   r   test_binary_closing$   s    
r!   c                  C   s4   t d} tt| }ttt| }t|| d S r   )	r   r   r	   binary_openingr   r   r   Zopeningr   r   r   r   r   test_binary_opening+   s    
r#      c                 C   s`   | dkr&t jd| t jd}d|d< n6| dkrLt jd| t jd}d|d< ntjd|dd	}|S )
Nr   )   dtyper   )   r(   r          )Zn_dimrng)nponesuint8zerosr   Zbinary_blobs)functionndimimgr   r   r   _get_decomp_test_data2   s    

r3   r0   )r   r   r   r"   size)r         decompositionZ	separablesequencec           	      C   sT   t j|dd}t j||d}t| }tt| }|||d}|||d}t|| dS tValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    Nr7   r   )r
   r   r3   getattrr	   r   	r0   r4   r7   footprint_ndarrayr   r2   funcexpectedoutr   r   r   test_square_decomposition>   s    
rC   nrowsncolsc           
      C   sX   t j||dd}t j|||d}t| }tt| }|||d}|||d}	t||	 dS r9   )r
   Z	rectangler3   r=   r	   r   )
r0   rD   rE   r7   r?   r   r2   r@   rA   rB   r   r   r   test_rectangle_decompositionR   s    
rF   m)r   r)   r$   r   r5      nc           
      C   s   |dkrL|dkrLt t  tj|||d W d   q1 s@0    Y  nTtj||dd}tj|||d}t| }tt| }|||d}|||d}	t||	 dS )r:   r   r;   Nr<   )	pytestZraises
ValueErrorr
   Zoctagonr3   r=   r	   r   )
r0   rG   rI   r7   r?   r   r2   r@   rA   rB   r   r   r   test_octagon_decompositiong   s    0
rL   radius)r)   r$   rH   c           	      C   sT   t j|dd}t j||d}t| }tt| }|||d}|||d}t|| dS r9   )r
   diamondr3   r=   r	   r   	r0   rM   r7   r?   r   r2   r@   rA   rB   r   r   r   test_diamond_decomposition   s    
rP   )r   r5   rH   c           	      C   sX   t j|dd}t j||d}t| dd}tt| }|||d}|||d}t|| dS r:   Nr;   r   )r1   r<   )r
   cuber3   r=   r	   r   r>   r   r   r   test_cube_decomposition   s    
rS   )r)   r$   r   c           	      C   sX   t j|dd}t j||d}t| dd}tt| }|||d}|||d}t|| dS rQ   )r
   Z
octahedronr3   r=   r	   r   rO   r   r   r   test_octahedron_decomposition   s    
rT   c                  C   s\   t jdt jd} t jdtd}d|ddddf< t|| }tt	|| }t
|| d S )N)r%   r%   r&   )   rU   Tr$      )r,   r-   r.   r/   boolr	   r   r   r   r   r   )r   r2   r   r   r   r   r   test_footprint_overflow   s    rX   c                  C   sr   t jt jfD ]`} tjdtjd}td}t|}| }| |||d t||ks\J t	|| || qd S )N)r   r   r&   )
   rY   rB   )
r	   r   r   r,   r-   r.   Z
zeros_likecopyanyr   )r@   r   r2   rB   Z	out_savedr   r   r   test_out_argument   s    

r]   c                 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)   )rM   )
r   r   r   r   r   r   r   r   r   r   )
r   r   r)   r)   r)   r)   r)   r)   r   r   )
r   r   r)   r)   r)   r   r   r)   r   r   )r   rN   r,   arrayr.   r   )r0   r   imageZim_expectedZim_testr   r   r   test_default_footprint   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   rb   rb   r)   r$   r&   r   rH   )r,   r/   rW   r	   r"   ndigenerate_binary_structurer   )r_   ZopenedZimage_expectedr   r   r   "test_3d_fallback_default_footprint   s    
"rf   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )Nra   r)   r$   rc   )r   r   r   r&   )r,   r/   rW   r-   r.   r   )r0   r_   rR   Z	new_imager   r   r   test_3d_fallback_cube_footprint   s
    
rg   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	   ri    @  r$   rc      r     r5   r5   r)   )Z	structure)	r,   r/   uint16r	   r"   r   rd   re   r   )r_   
bin_opened
bin_closedr   Zndimage_openedZndimage_closedr   r   r   test_2d_ndimage_equivalence  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 j| t jd
}t j| t jd
}tj| |d tj| |d t|j	t
 t|j	t
 t|j	t j t|j	t j d S )Nrh   rj   r$   rc   rk   r   rl   rm   rn   r&   rZ   r,   r/   ro   r	   r"   r   Z
empty_liker.   r   r'   rW   r_   rp   rq   Z
int_openedZ
int_closedr   r   r   test_binary_output_2d  s    

ru   c                  C   s   t dt j} d| ddddddf< d| ddddddf< d| d	< t| }t| }t j| t jd
}t j| t jd
}tj| |d tj| |d t|j	t
 t|j	t
 t|j	t j t|j	t j d S )N)ri   ri   ri   rj   r$   rc   rk   r   rl   rm   )r5   r5   r5   r&   rZ   rs   rt   r   r   r   test_binary_output_3d+  s    

rv   )r$   )3numpyr,   rJ   Znumpy.testingr   r   Zscipyr   rd   Zskimager   r   r   Zskimage.utilr   Zskimage.morphologyr	   r
   r   Zrgb2grayZ	astronautr2   r   r   r   r   r!   r#   r3   markZparametrizerC   rF   rL   rP   rS   rT   rX   r]   r   r   r"   r   Zbinary_functionsr`   rf   Zbinary_3d_fallback_functionsrg   rr   ru   rv   r   r   r   r   <module>   s   
	

