U
    ?h"                     @   s   d dl Zd dlZd dlmZ d dlmZ d dlm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mZmZ G d	d
 d
ZG dd dZG dd dZdS )    N)assert_array_equal)	correlate)draw)expected_warningsfetch)imread)medial_axisskeletonizethin)G123_LUT	G123P_LUT_generate_thin_lutsc                   @   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 )TestSkeletonizec                 C   s&   t d}t|}t|t d d S )N   r   )npzerosr	   r   selfimresult r   [/var/www/html/venv/lib/python3.8/site-packages/skimage/morphology/tests/test_skeletonize.pytest_skeletonize_no_foreground   s    
z.TestSkeletonize.test_skeletonize_no_foregroundc              	   C   s,   t d}tt t| W 5 Q R X d S )Nr   r   r   pytestraises
ValueErrorr	   r   r   r   r   r   test_skeletonize_wrong_dim1   s    
z+TestSkeletonize.test_skeletonize_wrong_dim1c              	   C   s0   t d}tt t|dd W 5 Q R X d S )N)r   r   r   Zzhangmethodr   r   r   r   r   test_skeletonize_wrong_dim2   s    
z+TestSkeletonize.test_skeletonize_wrong_dim2c              	   C   s0   t d}tt t|dd W 5 Q R X d S )Nr   Zfoor    )r   onesr   r   r   r	   r   r   r   r   test_skeletonize_wrong_method   s    
z-TestSkeletonize.test_skeletonize_wrong_methodc                 C   s   t d}t| d S )N      )r   r#   r	   r   r   r   r   test_skeletonize_all_foreground#   s    
z/TestSkeletonize.test_skeletonize_all_foregroundc                 C   s,   t dt j}d|d< t|}t|| d S )Nr      r&   r&   r   r   uint8r	   r   r   r   r   r   test_skeletonize_single_point'   s    z-TestSkeletonize.test_skeletonize_single_pointc                 C   sD   t dt j}d|dddf< d|d< d|d< t|}t|| d S )Nr   r)   r&   )   r.   )r'   r   r+   r   r   r   r    test_skeletonize_already_thinned-   s    z0TestSkeletonize.test_skeletonize_already_thinnedc                 C   s<   t tddd}|dk}t|}ttd}t|| d S )Nzdata/bw_text.pngT)Zas_grayr   zdata/bw_text_skeleton.npy)r   r   r	   r   loadr   r   r   r   expectedr   r   r   test_skeletonize_output5   s
    z'TestSkeletonize.test_skeletonize_outputc                 C   sJ  t d}d|ddddf< d|ddddf< d|ddddf< tdddd	\}}tdD ]}d||| |f< qbtdddd	\}}td
D ]}d||| |f< qt |j\}}|d d |d d  dk }|d d |d d  dk }d||< d||< t|}	t ddgddggt j	}
t
|	|
dd}t |dkrFtd S )N),  r5   r)   
   id   i      i        r/   i  i  r   Zconstant)moder'   )r   r   r   linerangeindicesshaper	   arrayr,   r   anyAssertionError)r   imagerscsiZirZicZcircle1Zcircle2r   maskblocksr   r   r   test_skeletonize_num_neighbors?   s.    

z.TestSkeletonize.test_skeletonize_num_neighborsc                 C   s   t dt j}d|d< d|d< d|d< d|d< d|d< d|d< d|d	< t|}t jd
d
d
d
d
d
gd
d
dd
d
d
gd
d
d
dd
d
gd
d
d
d
dd
gd
d
d
d
d
dgd
d
d
d
d
d
ggt jd}t ||kstd S )N)   rK   r)   )r)   r/   )r/   r/   )r/   r&   r*   r%   )r'   r'   )r'   r   r   Zdtype)r   r   r,   r	   rA   allrC   r2   r   r   r   test_lut_fix^   s&    zTestSkeletonize.test_lut_fixN)__name__
__module____qualname__r   r   r"   r$   r(   r-   r0   r4   rJ   rN   r   r   r   r   r      s   
r   c                   @   s@   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dS )TestThinc                 C   s   t jdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggt jd}|S )zimage to test thinning withr   r)   rL   )r   rA   r,   r   iir   r   r   input_imager   s    zTestThin.input_imagec                 C   s    t tt ddkstd S )Nr6   r6   F)r   rM   r
   r   rC   r   r   r   r   
test_zeros~   s    zTestThin.test_zerosc                 C   s   t | jdtj}tjdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggtjd}t|| d S )Nr)   r   rL   r
   rU   Zastyper   r,   rA   r   r   r   r3   r   r   r   test_iter_1   s    zTestThin.test_iter_1c                 C   s   t | jtj}tjdddddddgdddddddgdddddddgdddddddgdddddddgdddddddgdddddddggtjd}t|| d S )Nr   r)   rL   rY   rZ   r   r   r   test_noiter   s    zTestThin.test_noiterc              
   C   s<   t dt dfD ]"}tt t| W 5 Q R X qd S )Nr&   )r&   r&   r&   )r   r   r   r   r   r
   rS   r   r   r   test_baddim   s    zTestThin.test_baddimc                 C   s"   t  \}}t|t t|t d S )N)r   r   r   r   )r   Zg123Zg123pr   r   r   test_lut_generation   s    

zTestThin.test_lut_generationN)
rO   rP   rQ   propertyrU   rX   r[   r\   r]   r^   r   r   r   r   rR   q   s   
rR   c                   @   sD   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S )TestMedialAxisc                 C   s&   t tdt}t|dks"tdS )z)Test skeletonize on an array of all zerosrV   FNr   r   r   boolrM   rC   r   r   r   r   r   test_00_00_zeros   s    zTestMedialAxis.test_00_00_zerosc                 C   s0   t tdttdt}t|dks,tdS )z6Test skeletonize on an array that is completely maskedrV   FNra   rc   r   r   r   test_00_01_zeros_masked   s    
z&TestMedialAxis.test_00_01_zeros_maskedc                 C   sn   t d}d|dddf< d|dddf< d|dddf< t |jd}d|dddf< t|}t|| dS )	z'Test a thick vertical line, issue #3861)	   rf   r)   Nr/   r&   r'   FT)r   r   fullr@   r   r   )r   Zimgr3   r   r   r   r   test_vertical_line   s    
z!TestMedialAxis.test_vertical_linec                 C   s  t dt}d|ddddf< t jdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgg	td}t|}t ||ksjtt|dd\}}| dkstd	S )
zTest skeletonize on a rectanglerf      Tr)   r.   r   rL   )Zreturn_distancer'   N)r   r   rb   rA   r   rM   rC   max)r   rD   r3   r   Zdistancer   r   r   test_01_01_rectangle   s$    $        	
z#TestMedialAxis.test_01_01_rectanglec                 C   s~  t dt}d|ddddf< d|dddf< t jdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgdddddddddddddddgg	td	}t|}t ||ksztd
S )z9Test skeletonize on a rectangle with a hole in the middleri   Tr)   r.   Fr'   r   rL   N)r   r   rb   rA   r   rM   rC   )r   rD   r3   r   r   r   r   test_01_02_hole   s"    $        	
zTestMedialAxis.test_01_02_holec                 C   s>   t dt}d|ddddf< t|}t ||ks:tdS )z(Test skeletonize on a 1-pixel thin strip)r)   r   TNr)   r.   )r   r   rb   r   rM   rC   )r   rD   r   r   r   r   test_narrow_image   s    z TestMedialAxis.test_narrow_imagec              	   C   s.   t dg ttdtdd W 5 Q R X dS )z*Test medial_axis on an array of all zeros.z'`random_state` is a deprecated argumentrV   N)Zrandom_state)r   r   r   r   rb   rW   r   r   r   test_deprecated_random_state   s    z+TestMedialAxis.test_deprecated_random_stateN)
rO   rP   rQ   rd   re   rh   rl   rn   ro   rp   r   r   r   r   r`      s   r`   )numpyr   r   Znumpy.testingr   Zscipy.ndimager   Zskimager   Zskimage._shared.testingr   r   Z
skimage.ior   Zskimage.morphologyr   r	   r
   Zskimage.morphology._skeletonizer   r   r   r   rR   r`   r   r   r   r   <module>   s   c2