U
    ?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rX||d
 ks\tt| dd d	 \}}t||}||kr||d
 kstd S )N   
      Tlevelset        lorensenmethod   gGz?)r   r   r   r   AssertionError)ellipsoid_isotropic_surfvertsfaces	surf_calc r   [/var/www/html/venv/lib/python3.8/site-packages/skimage/measure/tests/test_marching_cubes.pytest_marching_cubes_isotropic	   s    


r   c               	   C   s   t dddg} tddd| dd}tddd\}}t|d	| d
dd d \}}t||}||krl||d ksptt|d	| dd d \}}t||}||kr||d ksttt	( t|d	| t g dd d \}}W 5 Q R X t|d| dd d S )Ng      ?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   r   pytestraises
ValueError)r   Zellipsoid_anisotropicr   r   r   r   r   r   r   r   test_marching_cubes_anisotropic   s@    
 



  r%   c               	   C   s~  t t ttdddd W 5 Q R X t t ttdddd W 5 Q R X t t ttddddd W 5 Q R X t t ttd	ddd W 5 Q R X t t ttdd W 5 Q R X t t ttdd W 5 Q R X t t ttdddd
 W 5 Q R X t t ttd	d W 5 Q R X tddddd} t t t| ddd W 5 Q R X 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    ZzerosZ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||||sXtd S )
Nr&   Tr
   r   F)r   r   r   )r   r   )r   r   
_same_meshr   )Zsphere_small	vertices1faces1	vertices2faces2r   r   r   "test_both_algs_same_result_ellipseW   s    

r0   绽|=c           	      C   s   | t | }|t | }dd |D }dd |D }t tdd |D }t tdd |D }|j|jkot ||d|S )z` Compare two meshes, using a certain tolerance and invariant to
    the order of the faces.
    c                 S   s"   g | ]}t t|d d dqS )c                 S   s   t | S Ntuplexr   r   r   <lambda>o       '_same_mesh.<locals>.<listcomp>.<lambda>keyr    Zconcatenatesorted.0tr   r   r   
<listcomp>o   s   z_same_mesh.<locals>.<listcomp>c                 S   s"   g | ]}t t|d d dqS )c                 S   s   t | S r2   r3   r5   r   r   r   r7   q   r8   r9   r:   r<   r>   r   r   r   rA   q   s   c                 S   s   g | ]}t |qS r   r3   r?   r6   r   r   r   rA   t   s     c                 S   s   g | ]}t |qS r   r3   rB   r   r   r   rA   u   s     r   )r    r!   r=   shapeZallclose)	r,   r-   r.   r/   ZtolZ
triangles1Z
triangles2Ztriang1Z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 ]v}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< qZqFq2t|dddd d \}
}t|dd d \}}t|
|||rtd S )N0   g      @g      Zfloat32r   r&   r      r	   gzGa@@      i  r   r   )r    emptyrangerC   floatr   r+   r   )nabZvolZizZiyZixzyr6   r,   r-   r.   r/   r   r   r    test_both_algs_same_result_donutz   s>    4. 

>>.rP   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
   ZdtypeFr(   r   r   g   r@g{Gz?Zrtol)r   r    	ones_likeboolr   r   r   )ellipsoid_scalarr   verr   r   Zarear   r   r   test_masked_marching_cubes   s    
rX   c               	   C   sB   t ddddd} tg }tt t| d|d}W 5 Q R X d S )Nr   r   r	   Tr
   r   rR   )r   r    r!   r"   r#   r$   r   )rV   r   r   r   r   r    test_masked_marching_cubes_empty   s    
rY   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
   rQ   r   rR   gh㈵>rS   )r   r    rT   rU   r   r   )rV   r   Zver_mZfaces_mr   rW   r   r   r   r   #test_masked_marching_cubes_all_true   s    rZ   )r1   )numpyr    r"   Znumpy.testingr   Zskimage.drawr   r   Zskimage.measurer   r   r   r%   r*   r0   r+   rP   rX   rY   rZ   r   r   r   r   <module>   s    
