
    jq                     h    d Z ddlmZ ddlZddlmZ ddlmZ  ej                  g d      Z
d Zd	 Zy)
z[
comparison.py
----------------

Provide methods for quickly hashing and comparing meshes.
    )sha256N   )util)tol)   
   r      r	      r   c                    | j                   j                          | j                   5  t        j                  dt        j                        }| j
                  }||d<   |t        j                  k  rd}| j                  |d<   | j                  r|dz  dz  | j                  dz  z  |d	<   n	 | j                  }|j
                  }|j                  }||z  |d
<   |dkD  r|dz  dz  |dz  z  |d<   | j                  | j                  z
  }t        j                  |d	z  g d      j!                         }||z  |d<   ddd       t#        | j$                        dkD  r| j&                  }|j)                         |j+                         z  }	|	dkD  r|| j,                     j/                  d      }
t        j0                  t        j2                  |
|
dddf   f      d      }t        j4                  |      j7                  d      }|j/                  d      |t        j8                  t#        |            d
z  z      }t        j:                  |j=                               d<   S # t        $ r d}d}Y w xY w# 1 sw Y   =xY w)ah  
    Return a basic identifier for a mesh consisting of
    properties that have been hand tuned to be somewhat
    robust to rigid transformations and different
    tessellations.

    Parameters
    ------------
    mesh : trimesh.Trimesh
      Source geometry

    Returns
    ----------
    identifier : (7,) float
      Identifying values of the mesh
       )dtyper   g      ?r   g      @g      ?gUUUUUU?r	   r
   g-q=   )r   r   r   r   N2   g      ?)r
   )axisr      )_cacheverifynpzerosfloat64arear   mergeeuler_number	is_volumevolumeconvex_hullBaseExceptionverticescentroiddotmaxlenfacesedges_unique_lengthstdmeanedges_unique_inversereshapediffcolumn_stackabsargminarangesignsum)mesh
identifier	mesh_areahull	hull_areahull_volumer   R2edges_lengthvariancenormsstackpick_idxpicks                 ?/DATA/.local/lib/python3.12/site-packages/trimesh/comparison.pyidentifier_simpler?      s@   $ 	KK
 
 XXarzz2
II	 "
1syy I ))
1 >> (#o9=	*JqM"'' II	"kk &	1JqMU""+c/y!AI.!
1 }}t}}4H1y1557BNJqM_ 
j 4:: //##%(9(9(;;d? !:!:;CCGLEGGBOOUE!Q$K,@AJEvve}+++3H==$X3x=1IA1M%NODGGDHHJ/JqMK ! "	!"A 
s1   BI2+$IA(I2I/+I2.I//I22I<c                 F   t        j                  | t              \  }}|dk  j                         r&|t	        j
                  |j                               z  }|d|z  z  j                  t        j                        }t        |j                               j                         S )a5  
    Hash an identifier array in a way that is hand-tuned to be
    somewhat robust to likely changes.

    Parameters
    ------------
    identifier : (n,) float
      Vector of properties

    Returns
    ----------
    hash : (64,) str
      A SHA256 of the identifier vector at hand-tuned precision.
    r   r   )r   
sigfig_int	id_sigfiganyr   r,   minastypeint64r   tobytes	hexdigest)r2   as_int
multiplierdatas       r>   identifier_hashrL   }   s|    " Y?FJ 	QbffZ^^-..
b*n%--bhh7D$,,.!++--    )__doc__hashlibr   numpyr    r   	constantsr   arrayrB   r?   rL    rM   r>   <module>rU      s;        BHH
	\~.rM   