o
    h                     @   s   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d Zdd Zd	d
 Zdd ZdddZdd Zdd Zdd Zdd ZdS )    N)assert_allclose)	ellipsoidellipsoid_stats)marching_cubesmesh_surface_areac                  C   s   t ddddd} tddd\}}t| dddd d	 \}}t||}||kr,||d
 ks.J t| dd d	 \}}t||}||krH||d
 ksJJ d S )N   
      Tlevelset        lorensenmethod   gGz?)r   r   r   r   )ellipsoid_isotropic_surfvertsfaces	surf_calc r   d/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/measure/tests/test_marching_cubes.pytest_marching_cubes_isotropic	   s   

r   c                  C   s
  t g d} tddd| dd}tddd\}}t|d| dd	d d
 \}}t||}||kr5||d ks7J t|d| dd d
 \}}t||}||krS||d ksUJ tt t|d| t g dd d
 \}}W d    n1 svw   Y  t|d| 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   r   r   r   test_marching_cubes_anisotropic   s<   




r%   c                  C   s6  t t ttdddd W d    n1 sw   Y  t t ttdddd W d    n1 s9w   Y  t t ttddddd W d    n1 sYw   Y  t t ttd	ddd W d    n1 sxw   Y  t t ttdd W d    n1 sw   Y  t t ttdd W d    n1 sw   Y  t t ttdddd
 W d    n1 sw   Y  t t ttd	d W d    n1 sw   Y  tddddd} t t t| ddd W d    d S 1 s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   r   r   r   test_invalid_input;   s<   $r,   c                  C   s\   t ddddd} t| dddd d \}}t| d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faces2r   r   r   "test_both_algs_same_result_ellipseW   s   r3   绽|=c           	      C   s   | t | }|t | }dd |D }dd |D }t tdd |D }t tdd |D }|j|jkoAt ||d|S )z` Compare two meshes, using a certain tolerance and invariant to
    the order of the faces.
    c                 S   "   g | ]}t t|d d dqS )c                 S      t | S Ntuplexr   r   r   <lambda>o       '_same_mesh.<locals>.<listcomp>.<lambda>keyr   concatenatesorted.0tr   r   r   
<listcomp>o       z_same_mesh.<locals>.<listcomp>c                 S   r5   )c                 S   r6   r7   r8   r:   r   r   r   r<   q   r=   r>   r?   rA   rD   r   r   r   rG   q   rH   c                 S      g | ]}t |qS r   r8   rE   r;   r   r   r   rG   t       c                 S   rI   r   r8   rJ   r   r   r   rG   u   rK   r   )r   r    rC   shapeallclose)	r/   r0   r1   r2   tol
triangles1
triangles2triang1triang2r   r   r   r-   g   s   r-   c               	   C   s  d} d|  d}}t | | | fd}t|jd D ]}t|jd D ]}t|jd D ]}t|| | t|| | t|| | }}}	d|	 d d| d d  d| d  d	 d
 d|	 d d| d d  d| d  d	 d
  dd|	 d d| d d    d|	 d d| d d d| d d   d| d  d	 d
 d|	 d d| d d d| d d   d| d  d	 d
  dd| d d d| d d  d| d     d ||||f< q+q"qt|d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rangerL   floatr   r-   )nabvoliziyixzyr;   r/   r0   r1   r2   r   r   r    test_both_algs_same_result_donutz   s@   48
>>.rd   c                  C   s   t ddddd} tj| td}d|d dd d d d f< d|d d d d dd f< t| d	|d
\}}}}t||}t|d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   arear   r   r   test_masked_marching_cubes   s   
ro   c                  C   sX   t ddddd} tg }tt t| d|d}W d    d S 1 s%w   Y  d S )Nr   r   r	   Tr
   r   rg   )r   r   r    r!   r"   r#   r   )rl   r   r   r   r   r    test_masked_marching_cubes_empty   s
   
"rp   c                  C   sj   t ddddd} tj| td}t| d|d\}}}}t| d|d\}}}}t||d	d
 t||d	d
 d S )Nr   r   r	   Tr
   re   r   rg   gh㈵>rh   )r   r   rj   rk   r   r   )rl   r   ver_mfaces_mr   rm   r   r   r   r   #test_masked_marching_cubes_all_true   s   rs   )r4   )numpyr   r!   numpy.testingr   skimage.drawr   r   skimage.measurer   r   r   r%   r,   r3   r-   rd   ro   rp   rs   r   r   r   r   <module>   s     
