
    a6d                     z    d dl Zd dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
 d Zd Zd Zd Zdd
Zd Zd Zd Zd ZdS )    N)assert_allclose)	ellipsoidellipsoid_stats)marching_cubesmesh_surface_areac                  H   t          dddd          } t          ddd          \  }}t          | dd          d d	         \  }}t          ||          }||k    r	||d
z  k    sJ t          | d          d d	         \  }}t          ||          }||k    r	||d
z  k    sJ d S )N   
      Tlevelset        lorensenmethod   gGz?)r   r   r   r   )ellipsoid_isotropic_surfvertsfaces	surf_calcs         Ilib/python3.11/site-packages/skimage/measure/tests/test_marching_cubes.pytest_marching_cubes_isotropicr   	   s    #Ar2===aR((GAt ""5r)35 5 557aR9LE5!%//I)	D4K 7 7 7 7 ""5r::2A2>LE5!%//I)	D4K 7 7 7 7 7 7    c            	      d   t          j        g d          } t          ddd| d          }t          ddd          \  }}t	          |d| d	          d d
         \  }}t          ||          }||k    r	||dz  k    sJ t	          |d|           d d
         \  }}t          ||          }||k    r	||dz  k    sJ t          j        t                    5  t	          |d| t          j        g                     d d
         \  }}d d d            n# 1 swxY w Y   t	          |d| d           d S )N)g      ?g?gUUUUUU@r	   r
   r   T)spacingr   r   r   r   r   r   gQ?r   )r   maskr   F)r   allow_degenerate)	nparrayr   r   r   r   pytestraises
ValueError)r   ellipsoid_anisotropicr   r   r   r   r   s          r   test_marching_cubes_anisotropicr(      s   h---..G%aR/35 5 5aR((GAt ""7*1*F F FFHqbJLE5!%//I)	D5L 8 8 8 8 ""7*13 3 335A27LE5!%//I)	D5L 8 8 8 8 
z	"	" # #%!2w"  !r#u# # # # # # # # # # # # # # # (!W$)+ + + + + +s   1DDDc                     t          j        t                    5  t          t	          j        d          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          ddd           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d	          dd           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          d           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d          dd
           d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          j        d	          d           d d d            n# 1 swxY w Y   t          dddd          } t          j        t                    5  t          | dd           d d d            d S # 1 swxY w Y   d S )N)r   r      r   r   r   r*   )   r+   r+   )r*   r   r   )   r,   r   r	   r
   r   Tr   r   abcd)r$   r%   r&   r   r"   zerosonesr   )r   s    r   test_invalid_inputr0   ;   s   	z	"	" B Brx	**AjAAAAB B B B B B B B B B B B B B B	z	"	" B Brx	**AjAAAAB B B B B B B B B B B B B B B	z	"	" * *rwy))1f(	* 	* 	* 	** * * * * * * * * * * * * * * 
z	"	" A Arx))1Z@@@@A A A A A A A A A A A A A A A 
z	"	" / /rx	**A.../ / / / / / / / / / / / / / /	z	"	" / /rx	**A.../ / / / / / / / / / / / / / /	z	"	" > >rwy))1f====> > > > > > > > > > > > > > >	z	"	" . .rx))1---. . . . . . . . . . . . . . . $Ar2===	z	"	" ? ?*Bv>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   %AAA/%B  B$'B$&C66C:=C:%EEE/#FF"%F"#G11G58G5%II
I
*#JJ JK00K47K4c                      t          dddd          } t          | dd          d d         \  }}t          | ddd	          d d         \  }}t          ||||          sJ d S )
Nr*   Tr   r   F)r!   r   r   )r!   r   )r   r   
_same_mesh)sphere_small	vertices1faces1	vertices2faces2s        r   "test_both_algs_same_result_ellipser8   W   s     Q1t444L&|Q8=? ? ??ArCIv&|Q8=.8: : ::<1">Iv iF;;;;;;;r   绽|=c                    | t          j        |                   }|t          j        |                   }d |D             }d |D             }t          j        t          d |D                                 }t          j        t          d |D                                 }|j        |j        k    ot          j        ||d|          S )z` Compare two meshes, using a certain tolerance and invariant to
    the order of the faces.
    c                 V    g | ]&}t          j        t          |d                      'S )c                      t          |           S Ntuplexs    r   <lambda>z'_same_mesh.<locals>.<listcomp>.<lambda>o       U1XX r   keyr"   concatenatesorted.0ts     r   
<listcomp>z_same_mesh.<locals>.<listcomp>o   C     $ $ $ ~fQ,=,=>>>?? $ $ $r   c                 V    g | ]&}t          j        t          |d                      'S )c                      t          |           S r=   r>   r@   s    r   rB   z'_same_mesh.<locals>.<listcomp>.<lambda>q   rC   r   rD   rF   rI   s     r   rL   z_same_mesh.<locals>.<listcomp>q   rM   r   c                 ,    g | ]}t          |          S  r>   rJ   rA   s     r   rL   z_same_mesh.<locals>.<listcomp>t       999AuQxx999r   c                 ,    g | ]}t          |          S rQ   r>   rR   s     r   rL   z_same_mesh.<locals>.<listcomp>u   rS   r   r   )r"   r#   rH   shapeallclose)	r4   r5   r6   r7   tol
triangles1
triangles2triang1triang2s	            r   r2   r2   g   s    
 28F++,J28F++,J$ $"$ $ $G$ $"$ $ $G hv99999::;;Ghv99999::;;GMW]* 2K!S113r   c            	         d} d| z  d}}t          j        | | | fd          }t          |j        d                   D ]l}t          |j        d                   D ]M}t          |j        d                   D ].}t	          |          |z  |z   t	          |          |z  |z   t	          |          |z  |z   }	}}d|	z  dz  d|z  dz
  dz  z   d|z  dz  z   d	z   d
z
  d|	z  dz  d|z  dz
  dz  z   d|z  dz  z   d	z   d
z
  z  dd|	z  dz  d|z  dz
  dz  z   z  z
  d|	z  dz  d|z  dz
  dz   d|z  dz
  dz   z  z   d|z  dz  z   d	z   d
z
  d|	z  dz  d|z  dz
  dz   d|z  dz
  dz   z  z   d|z  dz  z   d	z   d
z
  z  dd|z  dz
  dz   d|z  dz
  dz   z  d|z  dz  z   z  z
  z  dz   ||||f<   0Ont          |dd          d d         \  }
}t          |d          d d         \  }}t          |
|||          rJ d S )N0   g      @g      float32r   r*   r      r   gzGa@@      i  r   r   )r"   emptyrangerU   floatr   r2   )nabvoliziyixzyrA   r4   r5   r6   r7   s                 r    test_both_algs_same_result_donutrn   z   s   
Aq5%qA
(Aq!9i
(
(CCIaL!!  	!%% 
	 
	BCIaL)) 	 	))A+a-r1Qb		!Aa1qS1H!Az)QqS1H4r9IEQqSSTHqSUQJM"#A#M*,.M/1:M;#=?AqsQhRSTURUVWRWZ[Q[F[?]#^ qS1H1Q	QqSUAI'>>!A#IBNQZZ1qQqSUAI1Q	#::acAXEJYVYQqSUAI1Q	2acAX= ! !Br"H	
	 'sAjAAA"1"EIv&sA..rr2Iv )VY???????r   c                     t          dddd          } t          j        | t                    }d|d dd d d d f<   d|d d d d dd f<   t	          | d	|
          \  }}}}t          ||          }t          |dd           d S )Nr	   r
   r   Tr   dtypeFr,   r   r    g   r@g{Gz?rtol)r   r"   	ones_likeboolr   r   r   )ellipsoid_scalarr    verr   r   areas         r   test_masked_marching_cubesrz      s     BT:::<(555DD"aaaODAAArssO%&6EEEC1S%((DD,3777777r   c                      t          dddd          } t          j        g           }t          j        t
                    5  t          | d|          }d d d            d S # 1 swxY w Y   d S )Nr	   r
   r   Tr   r   rr   )r   r"   r#   r$   r%   r&   r   )rw   r    r   s      r    test_masked_marching_cubes_emptyr|      s     BT:::8B<<D	z	"	" ; ;+QT:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   A!!A%(A%c                     t          dddd          } t          j        | t                    }t	          | d|          \  }}}}t	          | d|          \  }}}}t          ||d	
           t          ||d	
           d S )Nr	   r
   r   Tr   rp   r   rr   gh㈵>rs   )r   r"   ru   rv   r   r   )rw   r    ver_mfaces_mr   rx   r   s          r   #test_masked_marching_cubes_all_truer      s     BT:::<(555D)*:ADIIIE7Aq%&6EEEC1E3V,,,,GU000000r   )r9   )numpyr"   r$   numpy.testingr   skimage.drawr   r   skimage.measurer   r   r   r(   r0   r8   r2   rn   rz   r|   r   rQ   r   r   <module>r      s         ) ) ) ) ) ) 3 3 3 3 3 3 3 3 = = = = = = = =8 8 8$+ + +@? ? ?8< < < 3 3 3 3&@ @ @4	8 	8 	8; ; ;1 1 1 1 1r   