Welcome to entente’s documentation!

entente package

Submodules

entente.cli module

entente.equality module

Utilities related to mesh equality.

entente.equality.attr_has_same_shape(first_obj, second_obj, attr)[source]

Given two objects, check if the given arraylike attributes of those objects have the same shape. If one object has an attribute value of None, the other must too.

Parameters:
  • first_obj (obj) – A object with an arraylike attr attribute.
  • second_obj (obj) – Another object with an arraylike attr attribute.
  • attr (str) – The name of the attribute to test.
Returns:

True if attributes are the same shape

Return type:

bool

entente.equality.attr_is_equal(first_obj, second_obj, attr)[source]

Given two objects, check if the given arraylike attributes of those objects are equal. If one object has an attribute value of None, the other must too.

Parameters:
  • first_obj (obj) – A object with an arraylike attr attribute.
  • second_obj (obj) – Another object with an arraylike attr attribute.
  • attr (str) – The name of the attribute to test.
Returns:

True if attributes are equal

Return type:

bool

entente.equality.have_same_topology(first_mesh, second_mesh)[source]

Given two meshes, check if they have the same vertex count and same faces. In other words, check if they have the same topology.

Parameters:
  • first_mesh (lace.mesh.Mesh) – A mesh.
  • second_mesh (lace.mesh.Mesh) – Another mesh.
Returns:

True if meshes have the same topology

Return type:

bool

entente.geometry module

Functions relating to mesh geometry.

entente.geometry.compute_barycentric_coordinates(vertices_of_tris, points)[source]

Compute barycentric coordinates for the projection of a set of points to a given set of triangles specfied by their vertices.

These barycentric coordinates can refer to points outside the triangle. This happens when one of the coordinates is negative. However they can’t specify points outside the triangle’s plane. (That requires tetrahedral coordinates.)

The returned coordinates supply a linear combination which, applied to the vertices, returns the projection of the original point the plane of the triangle.

Parameters:
  • vertices_of_tris (np.arraylike) – A set of triangle vertices as kx3x3.
  • points (np.arraylike) – Coordinates of points as kx3.
Returns:

Barycentric coordinates as kx3

Return type:

np.ndarray

Note

A function with this signature probably belongs in blmath.

entente.landmarks module

entente.restore_correspondence module

entente.restore_correspondence.find_permutation(a, b, progress=True)[source]

Given a kxn array a and its permutation b, order the indices of a such that a[find_permutation(a, b)] is equal to b.

The permutation must be along the first axis, such that a[0], a[1], … and b[0], b[1], … have the same elements.

Parameters:
  • a (np.arraylike) – kxn array
  • b (np.arraylike) – kxn array
  • progress (bool) – When True, show a progress bar.
Returns:

Indices of b as kx1

Return type:

np.ndarray

Note

This relies on a brute-force algorithm.

entente.restore_correspondence.restore_correspondence(mesh, reference_mesh, progress=True)[source]

Given mesh which has the same vertex set as a given reference_mesh, but which has lost its correspondence due to the vertices being shuffled, reorder the vertices in mesh so they match the order in reference_mesh.

Parameters:
  • mesh (lace.mesh.Mesh) – A mesh, which will be mutated
  • reference_mesh (lace.mesh.Mesh) – Another mesh with the same set of vertices in the desired order
  • progress (bool) – When True, show a progress bar.
Returns:

vx1 mapping of old face indices to new

Return type:

np.ndarray

Note

This was designed to assist in extracting face ordering and groups from a shuffled mesh that “work” with reference_mesh.

It relies on a brute-force algorithm.

entente.shuffle module

entente.shuffle.shuffle_faces(mesh)[source]

Shuffle the mesh’s face ordering. The mesh is mutated.

Parameters:mesh (lace.mesh.Mesh) – A mesh.
Returns:fx1 mapping of old face indices to new.
Return type:np.ndarray
entente.shuffle.shuffle_vertices(mesh)[source]

Shuffle the mesh’s vertex ordering, preserving the integrity of the faces. The mesh is mutated.

Parameters:mesh (lace.mesh.Mesh) – A mesh.
Returns:vx1 mapping of old vertex indices to new.
Return type:np.ndarray

entente.testing module

class entente.testing.ExtraAssertions[source]

Bases: object

assertSameFaceSet(a, b)[source]
assertSameVertexSet(a, b)[source]
entente.testing.coord_set(a)[source]
entente.testing.mesh_asset(*components)[source]
entente.testing.relative_to_project(*components)[source]
entente.testing.vitra_mesh()[source]

entente.validation module

entente.validation.validate_shape(a, *shape, **kwargs)[source]

Check that the given argument has the expected shape. Shape dimensions can be ints or -1 for a wildcard. The wildcard dimensions are returned, which allows them to be used for subsequent validation or elsewhere in the function.

Parameters:
  • a (np.arraylike) – An array-like input.
  • shape (list) – Shape to validate. To require 3 by 1, pass 3. To require n by 3, pass -1, 3.
  • name (str) – Variable name to embed in the error message.
Returns:

The wildcard dimension (if one) or a tuple of wildcard dimensions (if more than one).

Return type:

object

entente.validation.validate_shape_from_ns(namespace, name, *shape)[source]

Convenience function for invoking validate_shape() with a locals() dict.

Parameters:
  • namespace (dict) – A subscriptable object, typically locals().
  • name (str) – Key to pull from namespace.
  • shape (list) – Shape to validate. To require 3 by 1, pass 3. To require n by 3, pass -1, 3.
Returns:

The wildcard dimension (if one) or a tuple of wildcard dimensions (if more than one).

Return type:

object

Example

validate_shape_from_namespace(locals(), ‘points’, -1, 3)

Module contents

Indices and tables