U
    ?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dDddZejdddddgejddejdddgdd  Zejdddddgejd!dejd"dejdddgd#d$ Z ejdddddgejd%d&ejd'd&ejddgd(d) Z!ejdddddgejd*d+ejddgd,d- Z"ejdddddgejdd.ejdddgd/d0 Z#ejdddddgejd*d1ejddgd2d3 Z$d4d5 Z%d6d7 Z&ej'ej(ej)ej*gZ+ejde+d8d9 Z,d:d; Z-ej)ej*gZ.ejde.d<d= Z/d>d? Z0d@dA Z1dBdC Z2dS )E    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   V/var/www/html/venv/lib/python3.8/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r8|dkr8t t tj|||d W 5 Q R X 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    
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\t	t
|| || qd S )N)r   r   r&   )
   rY   rB   )r	   r   r   r,   r-   r.   Z
zeros_likecopyanyAssertionErrorr   )r@   r   r2   rB   Z	out_savedr   r   r   test_out_argument   s    

r^   c                 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)   )rM   r   )r   rN   r,   arrayr.   r   )r0   r   imageZim_expectedZim_testr   r   r   test_default_footprint   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)   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    
"rg   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)   r$   rd   )r   r   r   r&   )r,   r/   rW   r-   r.   r   )r0   r`   rR   Z	new_imager   r   r   test_3d_fallback_cube_footprint   s
    
rh   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	   rj    @  r$   rd      r     r5   r5   r)   )Z	structure)	r,   r/   uint16r	   r"   r   re   rf   r   )r`   
bin_opened
bin_closedr   Zndimage_openedZndimage_closedr   r   r   test_2d_ndimage_equivalence  s    


rs   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 )Nri   rk   r$   rd   rl   r   rm   rn   ro   r&   rZ   r,   r/   rp   r	   r"   r   Z
empty_liker.   r   r'   rW   r`   rq   rr   Z
int_openedZ
int_closedr   r   r   test_binary_output_2d  s    

rv   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)rj   rj   rj   rk   r$   rd   rl   r   rm   rn   )r5   r5   r5   r&   rZ   rt   ru   r   r   r   test_binary_output_3d+  s    

rw   )r$   )3numpyr,   rJ   Znumpy.testingr   r   Zscipyr   re   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_functionsra   rg   Zbinary_3d_fallback_functionsrh   rs   rv   rw   r   r   r   r   <module>   s   






	 

