o
    jp5                     @   s   d dl Zd dl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 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)iodraw)fetch)binary_blobs)medial_axisskeletonizethin)G123_LUT	G123P_LUT_generate_thin_lutsc                   @   sF  e Zd Zejdddgdd Zejdg ddd	 Zd
d Zejdddgdd Z	ejdddgdd Z
ejdddgdd Zejdddgdd Zdd Zejdddgejdeeegdd Zdd Zejdg dejdeejgdd Zejdddgdd Zd d! Zd"d# Zd$S )%TestSkeletonizemethodzhangleec                 C   s*   t d}t||d}t|t d d S )N   r   r   )npzerosr   r   selfr   imageresult r   j/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_skeletonize.pytest_no_foreground   s   
z"TestSkeletonize.test_no_foregroundzndim,method))   r   )   r   )r   r   )   r   c                 C   sN   t jd| td}tt t||d W d    d S 1 s w   Y  d S )N)r   dtyper   )r   r   boolpytestraises
ValueErrorr   )r   ndimr   r   r   r   r   test_wrong_ndim   s   "zTestSkeletonize.test_wrong_ndimc                 C   sJ   t jdtd}tt t|dd W d    d S 1 sw   Y  d S )Nr   r    Zfoor   )r   onesr"   r#   r$   r%   r   r   r   r   r   r   test_wrong_method   s   "z!TestSkeletonize.test_wrong_methodc                 C   sr   t jdtd}t||d}|dkr"t jg dg dg dgtd}nt jg dg dg dgtd}t|| d S )	N)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   arrayr   )r   r   r   r   expectedr   r   r   test_skeletonize_all_foreground!   s   " z/TestSkeletonize.test_skeletonize_all_foregroundc                 C   s0   t jdtd}d|d< t||d}t|| d S )Nr   r    r   )r   r   r   )r   r   r"   r   r   r   r   r   r   test_single_point+   s   z!TestSkeletonize.test_single_pointc                 C   s(   t jdtd}t||d}t|| d S )N)r   r   r    r   )r   r(   r"   r   r   r   r   r   r   test_vec_1d2   s   zTestSkeletonize.test_vec_1dc                 C   sF   t jg dg dg dg dg dgtd}t||d}t|| d S )N)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   test_already_thinned9   s   
z$TestSkeletonize.test_already_thinnedc                 C   s>   t j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   imreadr   r   r   loadr   r   r   r   r,   r   r   r   test_outputH   s
   zTestSkeletonize.test_outputr!   c                 C   sZ  t jd|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< q3tddd
d\}}tdD ]
}d||| |f< qLt |j\}}|d d |d d  dk }	|d d |d d  dk }
d||	< d||
< t||dt j	}t 
ddgddggt j	}tj||dd}t |dkrJ d S )N),  r6   r    r   
   id      ir         i  r      r      i  i  r   r   Zconstant)mode)r   r   r   linerangeindicesshaper   astypeuint8r+   ndiZ	correlateany)r   r   r!   r   rscsiZirZicZcircle1Zcircle2r   maskblocksr   r   r   test_num_neighborsR   s&   z"TestSkeletonize.test_num_neighborsc                 C   s   t jg dg dg dg dg dg dgtd}t|}t jg dg dg dg dg d	g dgtd}t ||ks?J d S )
N)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   allr4   r   r   r   test_lut_fixr   s,   zTestSkeletonize.test_lut_fix))r9   r   )r9   r   )r   r   c                 C   sD   t jd| |d}t |d}| }t||d}t j|| d S )N)r   r    r   r   )r   r(   padcopyr   testingr   )r   r   r&   r!   r   original_r   r   r   test_input_not_modified   s
   z'TestSkeletonize.test_input_not_modifiedc                 C   s\   t jdd d dd d df }d||dk < | }t||d}|jtks'J t|| d S )N)   rU   r9   g        g      ?r   )r   randomrP   r   r!   r"   r   )r   r   r   rR   r   r   r   r   test_input_float_conv   s    z%TestSkeletonize.test_input_float_convc                 C   s   t jg dg dg dg dg dg dg dg dg d	g d
g dg dg dg dgtd}t jg dg dg dg dg dg dg dg dg dg dg dg dg dg dgtd}t|dd}t|| d S )N)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   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   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   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   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   r0   r   r   r,   r   r   r   r   test_two_hole_image_vs_fiji   sL   z+TestSkeletonize.test_two_hole_image_vs_fijic                 C   sJ   t ddddd}|d ddf }t|}ttdt}t|| d S )	N    g?r   i  )Zn_dimrng.z data/_blobs_3d_fiji_skeleton.tif)r   r   r   r2   r   rC   r"   r   r4   r   r   r   test_3d_vs_fiji   s
   zTestSkeletonize.test_3d_vs_fijiN)__name__
__module____qualname__r#   markparametrizer   r'   r*   r-   r.   r/   r1   r5   r"   floatintrL   rN   r   rD   rT   rW   rY   r]   r   r   r   r   r      s8    


	




+r   c                   @   s   e Zd Zedd Zdd Zejde	e
egdd Zejde	e
egdd	 Zejde	e
eg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d}|S )Nr   r   r   r   r   r   r   )r   r   r9   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+   rc   r   iir   r   r   input_image   s   	zTestThin.input_imagec                 C   s(   t jdtd}t t|dksJ d S N)r7   r7   r    F)r   r   r"   rM   r	   r)   r   r   r   test_all_zeros   s   zTestThin.test_all_zerosr!   c                 C   s.   | j |}| }t| tj|| dS )z0Ensure thinning does not modify the input image.N)rj   rC   rP   r	   r   rQ   r   )r   r!   r   rR   r   r   r   test_thin_copies_input   s   zTestThin.test_thin_copies_inputc              	   C   sb   | j |}t|dt}tjg dg dg dg dg dg dg dgtd}t|| d S )Nr   rf   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r    rj   rC   r	   r"   r   r+   r   r   r!   r   r   r,   r   r   r   test_iter_1   s   	zTestThin.test_iter_1c              	   C   s`   | j |}t|t}tjg dg dg dg dg dg dg dgtd}t|| d S )Nrf   rn   )r   r   r   r   r   r   r   r    ro   rp   r   r   r   test_noiter  s   	zTestThin.test_noiterc              	   C   sX   t jdtdt j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	   rh   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)r^   r_   r`   propertyrj   rl   r#   ra   rb   r"   rc   rd   rm   rq   rr   rs   rt   r   r   r   r   re      s    



re   c                   @   sP   e Zd Zdd Zdd Zejdee	e
gdd Zdd	 Zd
d Zdd ZdS )TestMedialAxisc                 C   s(   t tjdtd}t|dksJ d S rk   r   r   r   r"   rM   r   r   r   r   r   rl   '  s   zTestMedialAxis.test_all_zerosc                 C   s4   t tjdtdtjdtd}t|dksJ d S rk   rw   rx   r   r   r   test_all_zeros_masked+  s   z$TestMedialAxis.test_all_zeros_maskedr!   c                 C   sr   t jd|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 )	N)	   rz   r    r   r9   r   r   FT)r   r   fullrB   r   r   )r   r!   r   r,   r   r   r   r   test_vertical_line1  s   z!TestMedialAxis.test_vertical_linec                 C   s   t jdtd}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sPJ d S )Nrz      r    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   )Zreturn_distancer   )r   r   r"   r+   r   rM   max)r   r   r,   r   Zdistancer   r   r   test_rectangle?  s&   zTestMedialAxis.test_rectanglec                 C   s   t jdtd}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sHJ d S )Nr}   r    Tr   r   Fr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r"   r+   r   rM   rX   r   r   r   test_rectange_with_holeV  s$   z&TestMedialAxis.test_rectange_with_holec                 C   s@   t jdtd}d|d d ddf< t|}t ||ksJ d S )N)r   r   r    Tr   r   )r   r   r"   r   rM   )r   r   r   r   r   r   test_narrow_imagek  s   z TestMedialAxis.test_narrow_imageN)r^   r_   r`   rl   ry   r#   ra   rb   r"   rc   rd   r|   r   r   r   r   r   r   r   rv   &  s    
rv   )numpyr   r#   Znumpy.testingr   Zscipy.ndimageZndimagerE   Zskimager   r   Zskimage._shared.testingr   Zskimage.datar   Zskimage.morphologyr   r   r	   Zskimage.morphology._skeletonizer
   r   r   r   re   rv   r   r   r   r   <module>   s     LN