o
    :ήc^                     @   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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\}}t||}||kr(||d	 ks*J t| dd d
 \}}t||}||krD||d	 ksFJ d S )N   
      Tlevelset        	_lorensenmethodgGz?   )r   r   r   r   )ellipsoid_isotropic_surfvertsfaces	surf_calc r   P/tmp/pip-target-vg8gfxp4/lib/python/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	\}}t||}||kr1||d
 ks3J t|d| dd d \}}t||}||krO||d
 ksQJ tt t|d| t g dd d \}}W d    n1 srw   Y  t|d| dd d S )N)g      ?g?gUUUUUU@r   r   r	   T)spacingr   r   r   r   r   gQ?r   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   s8   





r%   c                   C   s  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    d S 1 sw   Y  d S )N)r   r      r   r   r   r&   )   r'   r'   )r&   r   r   )   r(   r   )r!   r"   r#   r   r   zerosonesr   r   r   r   test_invalid_input:   s0   "r+   c                  C   s   t ddddd} t| dddd d \}}t| ddd	d d \}}t| ddd
dd d \}}t||||s9J t||||sBJ d S )Nr&   Tr
   r   r   r   r   F)r   lorensen)r   r   )r   r   
_same_mesh)sphere_small	vertices1faces1	vertices2faces2	vertices3faces3r   r   r   "test_both_algs_same_result_ellipseP   s   r5   绽|=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>j       '_same_mesh.<locals>.<listcomp>.<lambda>keyr   concatenatesorted.0tr   r   r   
<listcomp>j       z_same_mesh.<locals>.<listcomp>c                 S   r7   )c                 S   r8   r9   r:   r<   r   r   r   r>   l   r?   r@   rA   rC   rF   r   r   r   rI   l   rJ   c                 S      g | ]}t |qS r   r:   rG   r=   r   r   r   rI   o       c                 S   rK   r   r:   rL   r   r   r   rI   p   rM   r   )r   r    rE   shapeallclose)	r/   r0   r1   r2   tol
triangles1
triangles2triang1triang2r   r   r   r-   b   s   r-   c               	   C   sH  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|dddd d \}}t|
|||rJ t||||r"J d S )N0   g      @g      float32r   r&   r      r	   gzGa@@      i  r   r   r,   )r   emptyrangerN   floatr   r-   )nabvoliziyixzyr=   r/   r0   r1   r2   r3   r4   r   r   r    test_both_algs_same_result_donutu   sD   48
>>.rf   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   
rq   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   ri   )r   r   r    r!   r"   r#   r   rn   r   r   r   r   r    test_masked_marching_cubes_empty   s
   
"rs   c                  C   sZ   t ddddd} tg }tt t| d|dd}W d    d S 1 s&w   Y  d S )	Nr   r   r	   Tr
   r   r   )r   r   )r   r   r    r!   r"   NotImplementedErrorr   rr   r   r   r   &test_masked_marching_cubes_old_lewiner   s
   
"ru   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
   rg   r   ri   gh㈵>rj   )r   r   rl   rm   r   r   )rn   r   ver_mfaces_mr   ro   r   r   r   r   #test_masked_marching_cubes_all_true   s   rx   )r6   )numpyr   r!   numpy.testingr   skimage.drawr   r   skimage.measurer   r   r   r%   r+   r5   r-   rf   rq   rs   ru   rx   r   r   r   r   <module>   s     
