a
    
d"                     @   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   r/var/www/html/stable-diffusion-webui/venv/lib/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   sD   t d}tt t|dd W d    n1 s60    Y  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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   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g d
g dg dg dg dg d
gt jd}t ||ksJ d S )N)   rJ   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_fix^   s&    
zTestSkeletonize.test_lut_fixN)__name__
__module____qualname__r   r   r"   r$   r(   r-   r0   r4   rI   rM   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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   rK   )r   rA   r,   r   iir   r   r   input_imager   s    
zTestThin.input_imagec                 C   s    t tt ddksJ d S )Nr6   r6   F)r   rL   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)   rR   r   r   r)   r   r   r   r   )r   r)   r   r)   r)   r   r   )r   r   r)   r)   r)   r   r   rK   r
   rU   Zastyper   r,   rA   r   r   r   r3   r   r   r   test_iter_1   s    
zTestThin.test_iter_1c              	   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 )NrR   rY   )r   r)   r   r)   r   r   r   rK   rZ   r[   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
   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)
rN   rO   rP   propertyrU   rX   r\   r]   r^   r_   r   r   r   r   rQ   q   s   
rQ   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"J dS )z)Test skeletonize on an array of all zerosrV   FNr   r   r   boolrL   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 maskedrV   FNrb   rd   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)	   rg   r)   Nr/   r&   r'   FT)r   r   fullr@   r   r   )r   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rg      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   rK   )Zreturn_distancer'   N)r   r   rc   rA   r   rL   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 middlerk   Tr)   r.   Fr'   rm   rn   )r   r   r)   r)   r)   r)   r)   r)   r)   r)   r)   r)   r)   r   r   ro   rK   N)r   r   rc   rA   r   rL   )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   rc   r   rL   )r   rC   r   r   r   r   test_narrow_image   s    z TestMedialAxis.test_narrow_imagec                 C   sB   t dg$ ttdtdd W d   n1 s40    Y  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   rc   rW   r   r   r   test_deprecated_random_state   s    z+TestMedialAxis.test_deprecated_random_stateN)
rN   rO   rP   re   rf   rj   rq   rs   rt   ru   r   r   r   r   ra      s   ra   )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   rQ   ra   r   r   r   r   <module>   s   c2