
    _hp5                         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	      Z G d
 d      Z G d d      Zy)    N)assert_array_equal)iodraw)fetch)binary_blobs)medial_axisskeletonizethin)G123_LUT	G123P_LUT_generate_thin_lutsc                   L   e Zd Zej                  j                  dddg      d        Zej                  j                  dg d      d        Zd Zej                  j                  dddg      d	        Z	ej                  j                  dddg      d
        Z
ej                  j                  dddg      d        Zej                  j                  dddg      d        Zd Zej                  j                  dddg      ej                  j                  deeeg      d               Zd Zej                  j                  dg d      ej                  j                  deej(                  g      d               Zej                  j                  dddg      d        Zd Zd Zy)TestSkeletonizemethodzhangleec                     t        j                  d      }t        ||      }t        |t        j                  d             y )N   r   r   )npzerosr	   r   selfr   imageresults       c/var/www/html/engine/venv/lib/python3.12/site-packages/skimage/morphology/tests/test_skeletonize.pytest_no_foregroundz"TestSkeletonize.test_no_foreground   s/     U626288F#34    zndim,method))   r   )   r   )r    r   )   r   c                     t        j                  d|z  t              }t        j                  t
              5  t        ||       d d d        y # 1 sw Y   y xY w)N)r   dtyper   )r   r   boolpytestraises
ValueErrorr	   )r   ndimr   r   s       r   test_wrong_ndimzTestSkeletonize.test_wrong_ndim   sC     D1]]:& 	.f-	. 	. 	.s   AAc                     t        j                  dt              }t        j                  t
              5  t        |d       d d d        y # 1 sw Y   y xY w)Nr   r$   foor   )r   onesr&   r'   r(   r)   r	   r   r   s     r   test_wrong_methodz!TestSkeletonize.test_wrong_method   s=    d+]]:& 	-e,	- 	- 	-s   AAc                    t        j                  dt              }t        ||      }|dk(  r%t        j                  g dg dg dgt              }n$t        j                  g dg dg dgt              }t        ||       y )	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   expecteds        r   test_skeletonize_all_foregroundz/TestSkeletonize.test_skeletonize_all_foreground!   s`    d+U62Wxx|\ JRVWHxx|\ JRVWH68,r   c                 v    t        j                  dt              }d|d<   t        ||      }t	        ||       y )Nr   r$   r    )r!   r!   r   )r   r   r&   r	   r   r   s       r   test_single_pointz!TestSkeletonize.test_single_point+   s1    t,dU6265)r   c                 l    t        j                  dt              }t        ||      }t	        ||       y )N)r   r    r$   r   )r   r.   r&   r	   r   r   s       r   test_vec_1dzTestSkeletonize.test_vec_1d2   s*     d+U6265)r   c                     t        j                  g dg dg dg dg dgt              }t        ||      }t	        ||       y )N)r   r   r   r   r   )r   r   r   r   r    )r   r    r    r    r   )r    r   r   r   r   r$   r   r   r2   r&   r	   r   r   s       r   test_already_thinnedz$TestSkeletonize.test_already_thinned9   sA     	
 U6265)r   c                     t        j                  t        d      d      }|dk(  }t        |      }t	        j
                  t        d            }t        ||       y )Nzdata/bw_text.pngT)as_grayr   zdata/bw_text_skeleton.npy)r   imreadr   r	   r   loadr   r   r   r   r3   s       r   test_outputzTestSkeletonize.test_outputH   sK    		% 23TB 
U#775!<=>68,r   r%   c                    t        j                  d|      }d|ddddf<   d|ddddf<   d	|ddddf<   t        j                  d
ddd      \  }}t	        d      D ]  }d|||z   |f<    t        j                  ddd
d      \  }}t	        d      D ]  }d|||z   |f<    t        j
                  |j                        \  }}|dz
  dz  |dz
  dz  z   dk  }	|dz
  dz  |dz
  dz  z   dk  }
d||	<   d||
<   t        ||      j                  t         j                        }t        j                  ddgddggt         j                        }t        j                  ||d      }t        j                  |dk(        rJ y )N),  rC   r$   r    
   id      ir!         i  r"      r      i  i  r   r   constant)mode)r   r   r   linerangeindicesshaper	   astypeuint8r2   ndi	correlateany)r   r   r%   r   rscsiiriccircle1circle2r   maskblockss                 r   test_num_neighborsz"TestSkeletonize.test_num_neighborsR   s    51 !"bfbfn"#d3h3"#bfd3h 3R-Br 	"A !E"q&"*	"2sC-Br 	"A !E"q&"*	" EKK(B8/R#X!O3e;8/R#X!O3e;ggU6299"((C xx!Q!Q("((3vt*=66&A+&&&&r   c           	         t        j                  g dg dg dg dg dg dgt              }t        |      }t        j                  g dg dg dg dg d	g dgt              }t        j                  ||k(        sJ y )
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   r2   r&   r	   allr@   s       r   test_lut_fixzTestSkeletonize.test_lut_fixr   s{    """""" 

 U#88"""""" 

 vvf()))r   ))rF   r   )rF   r   )r!   r   c                     t        j                  d|z  |      }t        j                  |d      }|j                         }t	        ||      }t         j
                  j                  ||       y )N)r!   r$   r    r   )r   r.   padcopyr	   testingr   )r   r   r*   r%   r   original_s          r   test_input_not_modifiedz'TestSkeletonize.test_input_not_modified   sS     t51ua ::<f-


%%eX6r   c                     t         j                  j                  d      d d dd d df   }d||dk  <   |j                         }t        ||      }|j                  t
        k(  sJ t        ||       y )N)   rk   rF   g        g      ?r   )r   randomre   r	   r%   r&   r   )r   r   r   rg   r   s        r   test_input_float_convz%TestSkeletonize.test_input_float_conv   sj     		  *3Q3!84 eck::<U62||t###5(+r   c                 J   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              }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              }t        |d      }t	        ||       y )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   r:   r   r   r3   r   s       r   test_two_hole_image_vs_fijiz+TestSkeletonize.test_two_hole_image_vs_fiji   s    @@@@@@@@@@@@@@  #
& 88@@@@@@@@@@@@@@  #
& U5168,r   c                     t        dddd      }|d ddf   }t        |      }t        j                  t	        d            j                  t              }t        ||       y )	N    g?r!   i  )n_dimrng.z data/_blobs_3d_fiji_skeleton.tif)r   r	   r   r>   r   rQ   r&   r   r@   s       r   test_3d_vs_fijizTestSkeletonize.test_3d_vs_fiji   sX     RQD9crc3hU#99U#EFGNNtT68,r   N)__name__
__module____qualname__r'   markparametrizer   r+   r0   r4   r6   r8   r;   rA   r&   floatintr_   rb   r   rR   ri   rm   rp   rv    r   r   r   r      s   [[X'785 95
 [[K..
-
 [[X'78- 9- [[X'78* 9* [[X'78* 9* [[X'78* 9*- [[X'78[[WtUC&89' : 9'<*4 [[],RS[[WtRXX&677 8 T7 [[X'78	, 9	,)-V-r   r   c                      e Zd Zed        Zd Zej                  j                  de	e
eg      d        Zej                  j                  de	e
eg      d        Zej                  j                  de	e
eg      d        Zd Zd Zy	)
TestThinc           
      f    t        j                  g dg dg dg dg dg dg dgt              }|S )Nr   r   r   r   r   r   r   )r   r    rF   r!   r"   r   r   )r   r    r   r    r    r    r   )r   r    r    r    r    r    r   )r      r    r    r    r    r   r$   )r   r2   r|   r   iis     r   input_imagezTestThin.input_image   s8     XX%%%%%%% 
 	r   c                     t        j                  dt              }t        j                  t	        |      dk(        sJ y N)rD   rD   r$   F)r   r   r&   ra   r
   r/   s     r   test_all_zeroszTestThin.test_all_zeros   s-    .vvd5kU*+++r   r%   c                     | j                   j                  |      }|j                         }t        |       t        j
                  j                  ||       y)z0Ensure thinning does not modify the input image.N)r   rQ   re   r
   r   rf   r   )r   r%   r   rg   s       r   test_thin_copies_inputzTestThin.test_thin_copies_input   s@       ''.::<U


%%eX6r   c           
          | j                   j                  |      }t        |d      j                  t              }t	        j
                  g dg dg dg dg dg dg dgt              }t        ||       y )Nr    r   r   r   r    r   r   r   r   )r   r    r   r    r    r   r   )r   r   r    r    r    r   r   r$   r   rQ   r
   r&   r   r2   r   r   r%   r   r   r3   s        r   test_iter_1zTestThin.test_iter_1   sg      ''.eQ&&t,88%%%%%%% 
 	68,r   c           
          | j                   j                  |      }t        |      j                  t              }t	        j
                  g dg dg dg dg dg dg dgt              }t        ||       y )Nr   r   )r   r    r   r    r   r   r   r$   r   r   s        r   test_noiterzTestThin.test_noiter  se      ''.e##D)88%%%%%%% 
 	68,r   c                     t        j                  dt              t        j                  dt              fD ]/  }t        j                  t
              5  t        |       d d d        1 y # 1 sw Y   <xY w)Nr!   r$   )r!   r!   r!   )r   r   r&   r'   r(   r)   r
   r   s     r   test_baddimzTestThin.test_baddim  sY    88AT*BHHYd,KL 	Bz* R 	 s   A**A3	c                 ^    t               \  }}t        |t               t        |t               y )N)r   r   r   r   )r   g123g123ps      r   test_lut_generationzTestThin.test_lut_generation  s"    )+e4*5),r   N)rw   rx   ry   propertyr   r   r'   rz   r{   r&   r|   r}   r   r   r   r   r   r~   r   r   r   r      s      , [[WtUC&897 :7 [[WtUC&89- :-" [[WtUC&89- :-"
-r   r   c                   t    e Zd Zd Zd Zej                  j                  dee	e
g      d        Zd Zd Zd Zy)	TestMedialAxisc                     t        t        j                  dt                    }t        j                  |dk(        sJ y r   r   r   r   r&   ra   r   r   s     r   r   zTestMedialAxis.test_all_zeros'  s-    RXXhd;<vvfo&&&r   c                     t        t        j                  dt              t        j                  dt                    }t        j                  |dk(        sJ y r   r   r   s     r   test_all_zeros_maskedz$TestMedialAxis.test_all_zeros_masked+  s?    HHXT*BHHXT,J
 vvfo&&&r   r%   c                     t        j                  d|      }d|d d df<   d|d d df<   d|d d df<   t        j                  |j                  d      }d|d d df<   t	        |      }t        ||       y )	N)	   r   r$   r    rF   r!   r"   FT)r   r   fullrP   r   r   )r   r%   r   r3   r   s        r   test_vertical_linez!TestMedialAxis.test_vertical_line1  sp     u-adadad775;;.AU#68,r   c                 P   t        j                  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              }t	        |      }t        j
                  ||k(        sJ t	        |d      \  }}|j                         dk(  sJ y )Nr      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   )return_distancer"   )r   r   r&   r2   r   ra   max)r   r   r3   r   distances        r   test_rectanglezTestMedialAxis.test_rectangle?  s    - adAbDj88=========
 
 U#vvf()))&udC||~"""r   c                    t        j                  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              }t	        |      }t        j
                  ||k(        sJ y )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&   r2   r   ra   ro   s       r   test_rectange_with_holez&TestMedialAxis.test_rectange_with_holeV  s    - adAbDja2g88=========
 
 U#vvf()))r   c                     t        j                  dt              }d|d d ddf<   t        |      }t        j                  ||k(        sJ y )N)r    r   r$   Tr    r   )r   r   r&   r   ra   )r   r   r   s      r   test_narrow_imagez TestMedialAxis.test_narrow_imagek  sC    t,a2gU#vvfo&&&r   N)rw   rx   ry   r   r   r'   rz   r{   r&   r|   r}   r   r   r   r   r~   r   r   r   r   &  sG    '' [[WtUC&89- :-#.**'r   r   )numpyr   r'   numpy.testingr   scipy.ndimagendimagerS   skimager   r   skimage._shared.testingr   skimage.datar   skimage.morphologyr   r	   r
   skimage.morphology._skeletonizer   r   r   r   r   r   r~   r   r   <module>r      sL      ,   ) % = = T TH- H-VK- K-\J' J'r   