o
    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   d/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_skeletonize.pytest_skeletonize_no_foreground   s   
z.TestSkeletonize.test_skeletonize_no_foregroundc                 C   sB   t d}tt t| W d    d S 1 sw   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   F   t d}tt t|dd W d    d S 1 sw   Y  d S )N)r   r   r   zhangmethodr   r   r   r   r   test_skeletonize_wrong_dim2      
"z+TestSkeletonize.test_skeletonize_wrong_dim2c                 C   r    )Nr   foor"   )r   onesr   r   r   r	   r   r   r   r   test_skeletonize_wrong_method   r%   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*   )   r2   )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)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   sH  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< q1tdddd	\}}td
D ]
}d||| |f< qJt |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rJ d S )N),  r:   r-   
   id   i      i        r3   i  i  r   constant)moder+   )r   r   r   linerangeindicesshaper	   arrayr0   r   any)r   imagerscsiiriccircle1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sJJ d S )N)   rT   r-   )r-   r3   )r3   r3   )r3   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-   dtype)r   r   r0   r	   rG   allr7   r   r   r   test_lut_fix^   s&   
zTestSkeletonize.test_lut_fixN)__name__
__module____qualname__r   r   r$   r(   r,   r1   r4   r9   rS   rX   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   rU   )r   rG   r0   r   iir   r   r   input_imager   s   
zTestThin.input_imagec                 C   s    t tt ddksJ d S )Nr;   r;   F)r   rW   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-   r]   r   r   r-   r   r   r   r   )r   r-   r   r-   r-   r   r   )r   r   r-   r-   r-   r   r   rU   r
   r`   astyper   r0   rG   r   r   r   r8   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 )Nr]   rd   )r   r-   r   r-   r   r   r   rU   re   rg   r   r   r   test_noiter   s   
zTestThin.test_noiterc              	   C   sP   t dt dfD ]}tt t| W d    n1 s w   Y  q
d S )Nr*   )r*   r*   r*   )r   r   r   r   r   r
   r^   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   g123g123pr   r   r   test_lut_generation   s   

zTestThin.test_lut_generationN)
rY   rZ   r[   propertyr`   rc   rh   ri   rj   rm   r   r   r   r   r\   q   s    
r\   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 zerosra   FNr   r   r   boolrW   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 maskedra   FNrp   rr   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)	   ru   r-   Nr3   r*   r+   FT)r   r   fullrF   r   r   )r   imgr8   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sOJ dS )zTest skeletonize on a rectangleru      Tr-   r2   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   rU   )return_distancer+   N)r   r   rq   rG   r   rW   max)r   rI   r8   r   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sGJ dS )z9Test skeletonize on a rectangle with a hole in the middlery   Tr-   r2   Fr+   r{   r|   )r   r   r-   r-   r-   r-   r-   r-   r-   r-   r-   r-   r-   r   r   r}   rU   N)r   r   rq   rG   r   rW   )r   rI   r8   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-   r2   )r   r   rq   r   rW   )r   rI   r   r   r   r   test_narrow_image   s   z TestMedialAxis.test_narrow_imagec                 C   sD   t dg ttdtdd W d   dS 1 sw   Y  dS )z*Test medial_axis on an array of all zeros.z'`random_state` is a deprecated argumentra   N)random_state)r   r   r   r   rq   rb   r   r   r   test_deprecated_random_state   s   "z+TestMedialAxis.test_deprecated_random_stateN)
rY   rZ   r[   rs   rt   rx   r   r   r   r   r   r   r   r   ro      s    ro   )numpyr   r   numpy.testingr   scipy.ndimager   skimager   skimage._shared.testingr   r   
skimage.ior   skimage.morphologyr   r	   r
   skimage.morphology._skeletonizer   r   r   r   r\   ro   r   r   r   r   <module>   s    c2