o
    h!,                     @   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   _/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_binary.pytest_non_square_image   s   
 r   c                  C   4   t d} tt| }ttt| }t|| d S Nr   r   r   r   r   r   test_binary_erosion      
r   c                  C   r   r   )	r   r   r	   binary_dilationr   r   r   dilationr   r   r   r   r   test_binary_dilation   r   r!   c                  C   r   r   )	r   r   r	   binary_closingr   r   r   closingr   r   r   r   r   test_binary_closing$   r   r$   c                  C   r   r   )	r   r   r	   binary_openingr   r   r   openingr   r   r   r   r   test_binary_opening+   r   r'      c                 C   sd   | dkrt jd| t jd}d|d< |S | dkr(t jd| t jd}d|d< |S tjd|dd	}|S )
Nr   )   dtyper   )   r,   r          )n_dimrng)nponesuint8zerosr   binary_blobs)functionndimimgr   r   r   _get_decomp_test_data2   s   r9   r6   )r   r   r"   r%   size)r         decomposition	separablesequencec           	      C   T   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r=   r   )r
   r   r9   getattrr	   r   	r6   r:   r=   footprint_ndarrayr   r8   funcexpectedoutr   r   r   test_square_decomposition>      
rK   nrowsncolsc           
      C   sX   t j||dd}t j|||d}t| }tt| }|||d}|||d}	t||	 dS rA   )r
   	rectangler9   rE   r	   r   )
r6   rM   rN   r=   rG   r   r8   rH   rI   rJ   r   r   r   test_rectangle_decompositionR   s   
rP   m)r   r-   r(   r   r;      nc           
      C   s   |dkr(|dkr(t t tj|||d W d   dS 1 s!w   Y  dS tj||dd}tj|||d}t| }tt| }|||d}|||d}	t||	 dS )rB   r   rC   NrD   )	pytestraises
ValueErrorr
   octagonr9   rE   r	   r   )
r6   rQ   rS   r=   rG   r   r8   rH   rI   rJ   r   r   r   test_octagon_decompositiong   s   "
rX   radius)r-   r(   rR   c           	      C   r@   rA   )r
   diamondr9   rE   r	   r   	r6   rY   r=   rG   r   r8   rH   rI   rJ   r   r   r   test_diamond_decomposition   rL   r\   )r   r;   rR   c           	      C   X   t j|dd}t j||d}t| dd}tt| }|||d}|||d}t|| dS rB   NrC   r   )r7   rD   )r
   cuber9   rE   r	   r   rF   r   r   r   test_cube_decomposition      
r`   )r-   r(   r   c           	      C   r]   r^   )r
   
octahedronr9   rE   r	   r   r[   r   r   r   test_octahedron_decomposition   ra   rc   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*   )   rd   Tr(      )r1   r2   r3   r4   boolr	   r   r   r   r   r   )r   r8   r   r   r   r   r   test_footprint_overflow   s   rg   c                  C   sr   t jt jfD ]0} tjdtjd}td}t|}| }| |||d t||ks.J t	|| || qd S )N)r   r   r*   )
   rh   rJ   )
r	   r   r   r1   r2   r3   
zeros_likecopyanyr   )rH   r   r8   rJ   	out_savedr   r   r   test_out_argument   s   

rn   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-   )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-   r-   r   r   r-   r   r   )r   rZ   r1   arrayr3   r   )r6   r   imageim_expectedim_testr   r   r   test_default_footprint   s(   

rs   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   ru   ru   r-   r(   r*   r   rR   )r1   r4   rf   r	   r%   ndigenerate_binary_structurer   )rp   openedimage_expectedr   r   r   "test_3d_fallback_default_footprint   s   
"r{   c                 C   sN   t dt}d|ddddddf< t jdt jd}| ||}t|| d S )Nrt   r-   r(   rv   )r   r   r   r*   )r1   r4   rf   r2   r3   r   )r6   rp   r_   	new_imager   r   r   test_3d_fallback_cube_footprint   s
   
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(   rv      r     r;   r;   r-   )	structure)	r1   r4   uint16r	   r%   r"   rw   rx   r   )rp   
bin_opened
bin_closedr   ndimage_openedndimage_closedr   r   r   test_2d_ndimage_equivalence  s   


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 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 )Nr~   r   r(   rv   r   r   r   r   r   r*   ri   r1   r4   r   r	   r%   r"   
empty_liker3   r   r+   rf   rp   r   r   
int_opened
int_closedr   r   r   test_binary_output_2d  s   

r   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)r   r   r   r   r(   rv   r   r   r   r   )r;   r;   r;   r*   ri   r   r   r   r   r   test_binary_output_3d+  s   

r   )r(   )3numpyr1   rT   numpy.testingr   r   scipyr   rw   skimager   r   r   skimage.utilr   skimage.morphologyr	   r
   r   rgb2gray	astronautr8   r   r   r   r!   r$   r'   r9   markparametrizerK   rP   rX   r\   r`   rc   rg   rn   r   r   r%   r"   binary_functionsrs   r{   binary_3d_fallback_functionsr}   r   r   r   r   r   r   r   <module>   s    
	

