
    1-Php5                         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dS )    N)assert_array_equal)iodraw)fetch)binary_blobs)medial_axisskeletonizethin)G123_LUT	G123P_LUT_generate_thin_lutsc                   p   e Zd Zej                            dddg          d             Zej                            dg d          d             Zd Zej                            dddg          d	             Z	ej                            dddg          d
             Z
ej                            dddg          d             Zej                            dddg          d             Zd Zej                            dddg          ej                            deeeg          d                         Zd Zej                            dg d          ej                            deej        g          d                         Zej                            dddg          d             Zd Zd ZdS )TestSkeletonizemethodzhangleec                     t          j        d          }t          ||          }t          |t          j        d                     d S )N   r   r   )npzerosr	   r   selfr   imageresults       i/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/morphology/tests/test_skeletonize.pytest_no_foregroundz"TestSkeletonize.test_no_foreground   sC      U6222628F#3#344444    zndim,method))   r   )   r   )r    r   )   r   c                     t          j        d|z  t                    }t          j        t
                    5  t          ||           d d d            d S # 1 swxY w Y   d S )N)r   dtyper   )r   r   boolpytestraises
ValueErrorr	   )r   ndimr   r   s       r   test_wrong_ndimzTestSkeletonize.test_wrong_ndim   s     D111]:&& 	. 	.f----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAc                     t          j        dt                    }t          j        t
                    5  t          |d           d d d            d S # 1 swxY w Y   d S )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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          ||           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   expecteds        r   test_skeletonize_all_foregroundz/TestSkeletonize.test_skeletonize_all_foreground!   s    d+++U6222Wx|||\\\ JRVWWWHHx|||\\\ JRVWWWH68,,,,,r   c                     t          j        dt                    }d|d<   t          ||          }t	          ||           d S )Nr   r$   r    )r!   r!   r   )r   r   r&   r	   r   r   s       r   test_single_pointz!TestSkeletonize.test_single_point+   sG    t,,,dU622265)))))r   c                 ~    t          j        dt                    }t          ||          }t	          ||           d S )N)r   r    r$   r   )r   r.   r&   r	   r   r   s       r   test_vec_1dzTestSkeletonize.test_vec_1d2   s@     d+++U622265)))))r   c                     t          j        g dg dg dg dg dgt                    }t          ||          }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   r2   r&   r	   r   r   s       r   test_already_thinnedz$TestSkeletonize.test_already_thinned9   so     	
 	
 	
 U622265)))))r   c                     t          j        t          d          d          }|dk    }t          |          }t	          j        t          d                    }t          ||           d S )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   se    	% 233TBBB 
U##75!<==>>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          ||                              t           j	                  }t          j
        ddgddggt           j	                  }t          j        ||d          }t          j        |dk              rJ d S )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11 !"bfbfn"#d3h3"#bfd3h 3R--Br 	" 	"A !E"q&"*2sC--Br 	" 	"A !E"q&"* EK((B8/R#X!O3e;8/R#X!O3e;ggU622299"(CC x!Q!Q("(33vt*===6&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 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   r2   r&   r	   allr@   s       r   test_lut_fixzTestSkeletonize.test_lut_fixr   s    """""""""""""""""" 

 

 

 U##8"""""""""""""""""" 

 

 

 vf()))))))r   ))rF   r   )rF   r   )r!   r   c                     t          j        d|z  |          }t          j        |d          }|                                }t	          ||          }t           j                            ||           d S )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   sj     t5111ua  ::<<f---

%%eX66666r   c                     t           j                            d          d d dd d df         }d||dk     <   |                                }t          ||          }|j        t
          k    sJ t          ||           d S )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   s     	  **33Q3!84 eck::<<U6222|t####5(+++++r   c                 \   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	          ||           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   r:   r   r   r3   r   s       r   test_two_hole_image_vs_fijiz+TestSkeletonize.test_two_hole_image_vs_fiji   sj   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  #
 
 
& 8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  #
 
 
& U511168,,,,,r   c                     t          dddd          }|d ddf         }t          |          }t          j        t	          d                                        t                    }t          ||           d S )	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   st     RQD999crc3hU##9U#EFFGGNNtT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85 5 985
 [KKK . . .
- - -
 [X'788- - 98- [X'788* * 98* [X'788* * 98* [X'788* * 98*- - - [X'788[WtUC&899' ' :9 98'<* * *4 [],R,R,RSS[WtRX&6777 7 87 TS7 [X'788	, 	, 98	,)- )- )-V- - - - -r   r   c                       e Zd Zed             Zd Zej                            de	e
eg          d             Zej                            de	e
eg          d             Zej                            de	e
eg          d             Zd Zd Zd	S )
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   sj     X%%%%%%%%%%%%%%%%%%%%% 
 
 
 	r   c                     t          j        dt                    }t          j        t	          |          dk              sJ d S N)rD   rD   r$   F)r   r   r&   ra   r
   r/   s     r   test_all_zeroszTestThin.test_all_zeros   s=    ...vd5kkU*+++++++r   r%   c                     | j                             |          }|                                }t          |           t          j                            ||           dS )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   sP      ''..::<<U

%%eX66666r   c           
      
   | j                             |          }t          |d                              t                    }t	          j        g dg dg dg dg dg dg dgt                    }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   r$   r   rQ   r
   r&   r   r2   r   r   r%   r   r   r3   s        r   test_iter_1zTestThin.test_iter_1   s     ''..eQ&&t,,8%%%%%%%%%%%%%%%%%%%%% 
 
 
 	68,,,,,r   c           
         | j                             |          }t          |                              t                    }t	          j        g dg dg dg dg dg dg dgt                    }t          ||           d S )Nr   r   )r   r    r   r    r   r   r   r$   r   r   s        r   test_noiterzTestThin.test_noiter  s     ''..e##D))8%%%%%%%%%%%%%%%%%%%%% 
 
 
 	68,,,,,r   c                     t          j        dt                    t          j        dt                    fD ]B}t          j        t
                    5  t          |           d d d            n# 1 swxY w Y   Cd S )Nr!   r$   )r!   r!   r!   )r   r   r&   r'   r(   r)   r
   r   s     r   test_baddimzTestThin.test_baddim  s    8AT***BHYd,K,K,KL 	 	Bz**  R              	 	s   A..A2	5A2	c                 |    t                      \  }}t          |t                     t          |t                     d S )N)r   r   r   r   )r   g123g123ps      r   test_lut_generationzTestThin.test_lut_generation  s7    )++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          X , , , [WtUC&8997 7 :97 [WtUC&899- - :9-" [WtUC&899- - :9-"  
- - - - -r   r   c                   z    e Zd Zd Zd Zej                            dee	e
g          d             Zd Zd Zd ZdS )	TestMedialAxisc                     t          t          j        dt                              }t          j        |dk              sJ d S r   r   r   r   r&   ra   r   r   s     r   r   zTestMedialAxis.test_all_zeros'  s>    RXhd;;;<<vfo&&&&&&&r   c                     t          t          j        dt                    t          j        dt                              }t          j        |dk              sJ d S r   r   r   s     r   test_all_zeros_maskedz$TestMedialAxis.test_all_zeros_masked+  sV    HXT***BHXT,J,J,J
 
 vf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          ||           d S )	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  s     u---aaadaaadaaad75;..AU##68,,,,,r   c                 l   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          \  }}|                                dk    sJ d S )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8===========================
 
 
 
 U##vf()))))&udCC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 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&   r2   r   ra   ro   s       r   test_rectange_with_holez&TestMedialAxis.test_rectange_with_holeV  s    --- adAbDja2g8===========================
 
 
 
 U##vf()))))))r   c                     t          j        dt                    }d|d d ddf<   t          |          }t          j        ||k              sJ d S )N)r    r   r$   Tr    r   )r   r   r&   r   ra   )r   r   r   s      r   test_narrow_imagez TestMedialAxis.test_narrow_imagek  sX    t,,,aaa2gU##vfo&&&&&&&r   N)rw   rx   ry   r   r   r'   rz   r{   r&   r|   r}   r   r   r   r   r~   r   r   r   r   &  s        ' ' '' ' ' [WtUC&899- - :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      sT        , , , , , ,               ) ) ) ) ) ) % % % % % % = = = = = = = = = = T T T T T T T T T TH- H- H- H- H- H- H- H-VK- K- K- K- K- K- K- K-\J' J' J' J' J' J' J' J' J' J'r   