
    l0jq                     f    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dS )
z[
comparison.py
----------------

Provide methods for quickly hashing and comparing meshes.
    )sha256N   )util)tol)   
   r      r	      r   c                    | 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
        }n# t          $ r d}d}Y nw xY w||z  |d
<   |dk    r|dz  dz  |dz  z  |d<   | j        | j        z
  }t          j        |d	z  g d                                          }||z  |d<   ddd           n# 1 swxY w Y   t#          | j                  dk    r| j        }|                                |                                z  }	|	dk    r|| j                                     d          }
t          j        t          j        |
|
dddf         f          d          }t          j        |                              d          }|                    d          |t          j        t#          |                    d
z  z            }t          j        |                                          |d<   |S )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                 U/home/wildlama/miniconda3/envs/lam/lib/python3.11/site-packages/trimesh/comparison.pyidentifier_simpler?      s   $ 	K
 
 /+ /+ Xarz222
I	 "
1sy  I )
1 > 	+ (#o9=	*JqMM"' I	"k  " " "	!"
 &	1JqMU"""+c/y!AI.!
1 }t}4H1yyy115577BNJqM_/+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+ /+j 4: /##%%(9(9(;(;;d?? !:;CCGLLEGBOUE!!!Q$K,@AAJJJEve}}+++33H==$$X3x==1I1IA1M%NODGDHHJJ//JqMs7   A'D!	BD!B0-D!/B00A%D!!D%(D%c                 n   t          j        | t                    \  }}|dk                                     r)|t	          j        |                                          z  }|d|z  z                      t          j                  }t          |
                                                                          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 /bfZ^^--...
b*n%--bh77D$,,..!!++---    )__doc__hashlibr   numpyr    r   	constantsr   arrayrB   r?   rL    rM   r>   <module>rU      s                           BH  
 
	\ \ \~. . . . .rM   