a
    =b#                     @   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
 d dl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)_generate_thin_lutsG123_LUT	G123P_LUTc                   @   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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   Hlib/python3.9/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 d    n1 s20    Y  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   sD   t d}tt t|dd W d    n1 s60    Y  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   sP   t d}d|d< d|d< tt t| W d    n1 sB0    Y  d S )Nr      r   r      )r   r"   r   r   r   r   r   test_skeletonize_not_binary   s
    
z+TestSkeletonize.test_skeletonize_not_binaryc                 C   sH   t d}d|d< tt t| W d    n1 s:0    Y  d S )Nr   r$   r#   r   r   r   r   r   !test_skeletonize_unexpected_value&   s    
z1TestSkeletonize.test_skeletonize_unexpected_valuec                 C   s   t d}t| d S )N      )r   Zonesr	   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   r   uint8r	   r   r   r   r   r   test_skeletonize_single_point0   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   r    test_skeletonize_already_thinned6   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_output>   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rFJ 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)r   imageZrsZcsiZirZicZcircle1Zcircle2r   maskZblocksr   r   r   test_skeletonize_num_neighboursH   s.    

z/TestSkeletonize.test_skeletonize_num_neighboursc                 C   s   t dt j}d|d< d|d< d|d< d|d< d|d< d|d< d|d	< t|}t jg d
g dg dg dg dg d
gt jd}t ||ksJ d S )N)   rG   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   r   r   r"   r   )r   r   r   r   r   r"   Zdtype)r   r   r-   r	   rA   allr2   r   r   r   test_lut_fixg   s&    
zTestSkeletonize.test_lut_fixN)__name__
__module____qualname__r   r   r!   r%   r&   r*   r.   r0   r4   rF   rJ   r   r   r   r   r      s   
r   c                   @   sH   e Zd Zedd Z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g dg dg dg dg dg dg dgt jd}|S )zimage to test thinning withr   r   r   r   r   r   r   )r   r"   r"   r"   r"   r"   r   )r   r"   r   r"   r"   r"   r   rH   )r   rA   r-   r   Ziir   r   r   input_image{   s    
zTestThin.input_imagec                 C   s    t tt ddksJ d S )Nr6   r6   F)r   rI   r
   r   )r   r   r   r   
test_zeros   s    zTestThin.test_zerosc              	   C   s\   t | jdtj}tjg dg dg dg dg dg dg dgtjd}t|| d S )Nr"   rO   r   r   r"   r   r   r   r   )r   r"   r   r"   r"   r   r   )r   r   r"   r"   r"   r   r   rH   r
   rQ   astyper   r-   rA   r   r   r   r3   r   r   r   test_iter_1   s    
zTestThin.test_iter_1c                 C   sd   t | jddtj}tdg& t | jddtj}W d    n1 sL0    Y  t|| d S )Nr"   )Zmax_num_iterz(`max_iter` is a deprecated argument name)Zmax_iter)r
   rQ   rV   r   r-   r   r   )r   Zresult1Zresult2r   r   r   test_max_iter_kwarg_deprecation   s    4z(TestThin.test_max_iter_kwarg_deprecationc              	   C   sZ   t | jtj}tjg dg dg dg dg dg dg dgtjd}t|| d S )NrO   rT   )r   r"   r   r"   r   r   r   rH   rU   rW   r   r   r   test_noiter   s    
zTestThin.test_noiterc              	   C   sP   t dt dfD ]6}tt t| W d    q1 s@0    Y  qd S )Nr(   )r(   r(   r(   )r   r   r   r   r   r
   rP   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)rK   rL   rM   propertyrQ   rS   rX   rY   rZ   r[   r\   r   r   r   r   rN   z   s   
rN   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S )TestMedialAxisc                 C   s&   t tdt}t|dks"J dS )z)Test skeletonize on an array of all zerosrR   FNr   r   r   boolrI   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,J dS )z6Test skeletonize on an array that is completely maskedrR   FNr_   ra   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)	   rd   r"   Nr$   r(   r)   FT)r   r   Z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g dg dg dg dg d	g dg dg dg dg	td
}t|}t ||ks~J t|dd\}}| dksJ dS )zTest skeletonize on a rectanglerd      Tr"   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   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"   r"   r"   r"   r"   r"   r"   r   r   r   r   rH   )Zreturn_distancer)   N)r   r   r`   rA   r   rI   max)r   rC   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g dg d	g d
g dg dg dg d
g d	g dg	td}t|}t ||ksJ dS )z9Test skeletonize on a rectangle with a hole in the middlerf   Tr"   r/   Fr)   rh   ri   )r   r   r"   r"   r"   r"   r"   r"   r"   r"   r"   r"   r"   r   r   rj   rH   N)r   r   r`   rA   r   rI   )r   rC   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:J dS )z(Test skeletonize on a 1-pixel thin strip)r"   r   TNr"   r/   )r   r   r`   r   rI   )r   rC   r   r   r   r   test_narrow_image   s    z TestMedialAxis.test_narrow_imageN)	rK   rL   rM   rb   rc   re   rl   rn   ro   r   r   r   r   r^      s   r^   )Znumpyr   r   Znumpy.testingr   Zscipy.ndimager   Zskimager   Zskimage._shared._warningsr   Zskimage._shared.testingr   Z
skimage.ior   Zskimage.morphologyr   r	   r
   Zskimage.morphology._skeletonizer   r   r   r   rN   r^   r   r   r   r   <module>   s   k8