Skip to main content

Volume remeshing

This code implements a variation of the volume meshing algorithm described in "Convex Polyhedral Meshing for Robust Solid Modeling" by Lorenzo Diazzi and Marco Attene (ACM Trans Graphics Vol 40, N. 6, Procs of SIGGRAPH Asia 2021). You may download a copy of the paper preprint here: http://arxiv.org/abs/2109.14434 The original code is available here: https://github.com/MarcoAttene/VolumeMesher

This fork adds, on top of the original algorithm:

  • Optional, combinable inputs. A run takes any non-empty combination of an input surface (triangles), a set of edges, and a set of points — see Inserting edges and points.
  • Exact surface tracking. For each output element you can recover which input primitive it came from: output faces → input triangles, output edges → input edges, output vertices → input points — see Tracking output back to the input.
  • Embedding a surface (and edges/points) in an existing tetrahedral mesh, programmatically via embed.h.
  • A 2D mode (-2d): the arrangement of a soup of 2D segments, output as a triangulation with the same kind of exact provenance — see 2D mode.
  • Python bindings (pip install volume-remesher): every option of the command line tool as a function, with numpy arrays in and out and files that are byte-identical to the tool's — see Python.

Building

Clone this repository and configure with CMake:

git clone https://github.com/MarcoAttene/VolumeRemesher
cd VolumeRemesher
mkdir build
cd build
cmake ..

This produces a build configuration for your system (a mesh_generator.sln on Windows/MSVC, a Makefile on Linux/macOS). Build the mesh_generator target as usual. The integration tests are built by default (VOLUMEREMESHER_BUILD_TESTS=ON) — run them with ctest, or configure with -DVOLUMEREMESHER_BUILD_TESTS=OFF to skip them. (Some heavy tracking tests only run in a Release build.)

The legacy graph-cut cell classifier (-c graphcut, see Inside/outside classification) is not built by default because its third-party code is not LGPL compatible; -DVOLUMEREMESHER_WITH_GRAPHCUT=ON compiles it in, and ctest then also runs the suite against it.

Python

Installation

Wheels for Linux (x86-64, aarch64), macOS (Apple Silicon) and Windows (x64), for CPython 3.9 and later:

pip install volume-remesher

The x86-64 wheels are compiled with AVX2/FMA, like the command line tool: they need a CPU from 2013 or later (Intel Haswell, AMD Excavator). On an older CPU, or on another platform, build from source instead; this needs a C++20 compiler and CMake 3.25 (both are what the tool itself needs), and compiles the same code with the same flags:

pip install git+https://github.com/wildmeshing/VolumeRemesher   # or, from a checkout: pip install .

To work on the package in-tree, configure CMake with -DVOLUMEREMESHER_BUILD_PYTHON=ON (after pip install nanobind numpy): the module is placed in python/volume_remesher/, and PYTHONPATH=python python -m pytest tests/python runs the Python test suite against the mesh_generator of the same build.

Usage

Every input is a path or numpy arrays; every result is a frozen dataclass of numpy arrays with a save() that writes exactly the bytes mesh_generator writes (the test suite checks this on every model and option):

import volume_remesher as vr

# 1) Volume mesh (polyhedral) of a closed surface      mesh_generator models/bunny.off
mesh = vr.remesh("models/bunny.off")
mesh.vertices            # (n, 3) float64
mesh.cells               # the polyhedral cells, each a list of vertex indices
mesh.save("volume.msh")

# 2) Tetrahedral mesh of the enclosed solid            mesh_generator models/bunny.off -t
mesh = vr.remesh("models/bunny.off", tetrahedralize=True)
mesh.tets                # (m, 4) uint32
mesh.save("volume.tet")  # + volume.tet.triangleprov, volume.tet.groups

# 3) Boolean union of two overlapping surfaces         mesh_generator cube_subdiv.off U sphere.off
mesh = vr.boolean("models/cube_subdiv.off", "models/sphere.off", "union")   # or "intersection", "difference"

# 4) Exact surface tracking of a tetrahedralization    mesh_generator cube_subdiv.off -t -r -a
mesh = vr.remesh("models/cube_subdiv.off", tetrahedralize=True, exact=True, keep_all_cells=True)
mesh.exact_vertices      # list of (Fraction, Fraction, Fraction): the exact positions
mesh.triangle_provenance # per coplanar group of input triangles, the {tet, v0, v1, v2} faces tiling it
mesh.constraint_groups   # (c, 2): input triangle -> coplanar group
# Cheaper variants, Python only: face_provenance="faces" gives just which tet faces lie on the
# input (mesh.surface_faces, a per-tet bitmask) without the coplanar grouping, "none" nothing;
# round_vertices=True makes mesh.vertices the nearest doubles of the exact positions.

# 5) Insert edges and points, with tracking            mesh_generator sphere.off -t -r -a -e ... -p ...
mesh = vr.remesh("models/sphere.off", edges="models/sphere_edges.off", points="models/sphere_points.off",
                 tetrahedralize=True, exact=True, keep_all_cells=True)
mesh.edge_provenance[i]  # the {tet, v0, v1} output edges tiling input edge mesh.edge_ids[i]
mesh.point_provenance    # (p, 3): {point_id, tet, output vertex}, -1 where the point did not survive

# 6) Embed a surface into an existing tetrahedral mesh  mesh_generator surface.off U mesh.tet
mesh = vr.embed("models/Octocat.off", "models/Octocat.bg.tet", tetrahedralize=True)

# 7) 2D: arrangement of a segment soup                 mesh_generator models/2d/england.obj -2d
arr = vr.arrange_2d("models/2d/england.obj")
arr.vertices, arr.triangles, arr.segment_provenance
arr.save("triangulation.off")   # + .segmentprov, .pointprov

Working with arrays

Arrays work wherever a path does: vr.remesh((vertices, triangles), ...), edges=(edge_vertices, edge_pairs), points=point_array, vr.embed(surface, (tet_vertices, tets)), vr.arrange_2d((points_2d, segment_pairs)). Coordinates are float64 (n, 3) (or (n, 2) in 2D) and indices any integer array, (m, 3) for triangles, (m, 4) for tets, (m, 2) for edges and segments. The readers are available on their own (vr.read_off, vr.read_edges_off, vr.read_points_off, vr.read_tet_mesh, vr.read_obj_segments) and parse exactly as the tool does.

The arrangement of two crossing segments, the diagonals of the square [0,2]², from arrays:

import numpy as np
import volume_remesher as vr

points = np.array([[0.0, 0.0], [2.0, 2.0], [0.0, 2.0], [2.0, 0.0]])
segments = np.array([[0, 1], [2, 3]])          # (0,0)-(2,2) and (0,2)-(2,0)

arr = vr.arrange_2d((points, segments), exact=True)
arr                       # Arrangement(9 vertices, 12 triangles)
arr.vertices              # (9, 2): the 4 input points, the crossing at (1, 1), and the
                          #         4 corners of the bounding box expanded by 10%
arr.triangles             # (12, 3) uint32, counterclockwise
arr.exact_vertices[1]     # (Fraction(1, 1), Fraction(1, 1)): the crossing, exactly

# Each input segment is exactly the union of output edges, in order from its first endpoint:
arr.segment_provenance[0] # [[2 4 1]      triangle 2 has edge (4, 1): (0,0) -> (1,1)
                          #  [0 1 2]]     triangle 0 has edge (1, 2): (1,1) -> (2,2)
arr.point_provenance      # (4, 2): for each input point, a triangle containing it and its
                          #         output vertex index
arr.save("x.off")         # the same OFF (+ .segmentprov, .pointprov, .rational) as the tool

And a 3D example, the tetrahedral mesh of a unit cube given as arrays, then its union with a shifted copy:

V = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0],
              [0, 0, 1], [1, 0, 1], [1, 1, 1], [0, 1, 1]], dtype=float)
F = np.array([[0, 2, 1], [0, 3, 2], [4, 5, 6], [4, 6, 7], [0, 1, 5], [0, 5, 4],
              [2, 3, 7], [2, 7, 6], [1, 2, 6], [1, 6, 5], [0, 4, 7], [0, 7, 3]])

mesh = vr.remesh((V, F), tetrahedralize=True)          # VolumeMesh(8 vertices, 6 tets)
both = vr.boolean((V, F), (V + 0.5, F), "union", tetrahedralize=True)   # VolumeMesh(22 vertices, 42 tets)
both.vertices, both.tets                                # numpy arrays, ready for your own pipeline
Function Command line Returns
remesh(surface, *, edges, points, tetrahedralize, keep_all_cells, fill_holes, exact, face_provenance, round_vertices, output, classifier, verbose, log) mesh_generator A.off [-e] [-p] [-t] [-a] [-f] [-r] [-s|-b] [-c] [-v] [-l] VolumeMesh, or SurfaceMesh for output="skin" (-s) / "black_faces" (-b)
boolean(a, b, op, ...) mesh_generator A.off {U|I|D} B.off ... same
embed(surface, tet_mesh, *, edges, points, tetrahedralize, exact, face_provenance, round_vertices, output, classifier, verbose) mesh_generator A.off U B.tet ... same
arrange_2d(segments, *, exact, verbose) mesh_generator soup.obj -2d [-r] Arrangement
embed_exact(surface, tet_mesh, *, edges, points) C++ embed_tri_in_poly_mesh PolyhedralEmbedding: exact vertices, polyhedral facets and cells, tets, full provenance
arrange_2d_exact(segments) C++ embed_seg_in_tri_mesh SegmentEmbedding: exact vertices, triangles, provenance

Errors — a missing or malformed file, a vertex outside the tet mesh, an input that cannot be meshed — raise vr.VolumeRemesherError with the tool's message; the interpreter is never terminated. The pipeline runs on its own thread with the GIL released, and its floating point rounding mode never leaks into the calling thread. Its parallel passes use vr.get_num_threads() threads: vr.set_num_threads(n), else the VOLUMEREMESHER_NUM_THREADS environment variable, else the CPUs the process may run on (its affinity mask on Linux, e.g. under taskset or a batch scheduler; every CPU of the machine on macOS and Windows). Progress output (verbose=True) goes to the C standard output, as in the tool; log=True appends to mesh_generator.log in the working directory.

The command line, in Python

python -m volume_remesher (also installed as volume-remesher) takes mesh_generator's exact arguments and writes its exact files, with the same exit status and messages:

python -m volume_remesher models/bunny.off -t -r      # == mesh_generator models/bunny.off -t -r

Performance is that of the tool: the same compiled code runs, and the Python side only copies the result into its arrays (on the bundled models, tests/python/bench.py measures the Python call at 0.95-1.0x the tool's wall time, slightly less without the file write).

Command-line usage

mesh_generator [options] [inputfile_A.off] [bool_opcode inputfile_B.off] [-e edges.off] [-p points.off]

The three inputs — the surface inputfile_A.off, the -e edges and the -p points — are all optional; provide any non-empty combination (only a surface, only edges, only points, or any mix). Run mesh_generator with no arguments to print the built-in help.

Options

Option Meaning
-v Verbose mode (prints progress and timings).
-l Logging mode (appends a line of timings to mesh_generator.log).
-s Save the mesh bounding surface ("skin") to skin.off.
-b Save the subdivided input constraints ("black faces") to black_faces.off.
-t Tetrahedralize the output: write a tet mesh to volume.tet (instead of the default polyhedral volume.msh).
-r With -t, also write exact rational vertex coordinates to volume.tet.rational.
-a Keep all cells: skip the inside/outside classification and tetrahedralize the whole domain. This makes the -t tracking exact (no cell is deleted, so every input primitive is realized in the output). Recommended whenever you use the tracking output.
-f Fill holes: cap open boundaries with ear-clipped triangles before meshing (off by default; only affects the solid-output path — -a needs no capping). With the caps the input is closed, so the classification uses the exact winding number.
-c winding|graphcut How cells are classified inside/outside, see below. Default winding; graphcut only in builds configured with VOLUMEREMESHER_WITH_GRAPHCUT.
-2d 2D mode: read an OBJ line soup and write the arrangement of its segments as a triangulation. See 2D mode.
-e edges.off Also insert these edges into the output (implies -a). See input formats.
-p points.off Also insert these points into the output (implies -a). See input formats.
bool_opcode With two surfaces, combine them with a boolean op: U union (A∪B), I intersection (A∩B), D difference (A\B).

Inside/outside classification

Unless -a is given, the cells of the arrangement are classified as inside or outside the input surface and only the inside ones are kept (per surface for a boolean, then combined by the opcode). The default classifier, -c winding, is the winding number of the surface:

  • For a closed, consistently oriented input the winding number is computed exactly on the arrangement itself: it is constant on every cell, equal across a face that no input triangle covers and changing by the signed number of covering triangles across one that some do, so a walk from the outside assigns it to every cell with exact orientation predicates only. A cell is inside iff its winding number is nonzero (so a self-intersecting input is the union of what its shells enclose). Before the walk the orientation of the triangles is made consistent across manifold edges and each closed component is oriented outward, which changes nothing for a well-formed input and makes the result meaningful for one with flipped faces.
  • For an input that is open or that cannot be oriented consistently (the walk detects this) every cell takes the generalized winding number of the surface at a point inside it (Jacobson et al. 2013, evaluated with the hierarchical expansion of Barill et al. 2018), and is inside iff that exceeds 1/2 in magnitude, as fTetWild filters its tetrahedra. The evaluation uses only IEEE arithmetic (with a deterministic atan2), so the output stays byte-identical across platforms. Capping the input first (-f) keeps it on the exact path.

-c graphcut is the classifier the tool used before: an area-weighted min-cut over the dual graph of the cells. It gives the same result as the winding number on closed, consistently oriented inputs (the test suite checks this cell by cell) and a different, heuristic closure on open or inconsistently oriented ones. It depends on the GCO and maxflow libraries in third_party/graph_cut, whose licenses (research use only; GPL) are not compatible with this library's LGPL, so it is compiled only on request (-DVOLUMEREMESHER_WITH_GRAPHCUT=ON) and never shipped in the Python wheels.

Input formats

  • Surface (inputfile_A.off, and inputfile_B.off for booleans): a standard triangle OFF file.
  • Edges (-e): an OFF-style file whose header is nv ne 0, followed by nv vertex lines x y z, then ne edge records 2 i j (the 2 is the number of endpoints, mirroring how OFF faces start with 3). See models/cube_subdiv_edges.off.
  • Points (-p): an OFF-style file whose header is np 0 0, followed by np vertex lines x y z. See models/cube_subdiv_points.off.
  • Existing tetrahedral mesh (for embedding a surface in it): a .tet or .msh (MEDIT) file passed as inputfile_B (ASCII). It is recognized by its extension, and a bool_opcode must still be given as a separator (it is ignored for embedding): mesh_generator surface.off U mesh.tet.

Output files

File Written when Contents
volume.msh default Polyhedral volume mesh.
volume.tet -t Tetrahedral mesh: <nv> vertices / <nt> tets, then nv coordinate lines, then nt lines 4 a b c d (0-based vertex indices).
skin.off -s Bounding surface.
black_faces.off -b Subdivided input constraints.
volume.tet.rational -t -r Exact rational coordinates, same order/indexing as the volume.tet vertex block.
volume.tet.groups -t Coplanar grouping of the input triangles.
volume.tet.triangleprov -t Triangle (face) provenance: per input coplanar group, the output faces tiling it.
volume.tet.edgeprov -t -e Edge provenance: per input edge, the output tet edges tiling it.
volume.tet.pointprov -t -p Point provenance: per input point, the equal output vertex.

Inserting edges and points

Edges and points are forced into the tetrahedralization so they appear as genuine tet edges and vertices of the output. Internally, each input edge AB is pinned by two small triangles sharing AB, and each input point P by three small triangles meeting at P; these helper triangles are excluded from the surface tracking. Insertion implies -a (keep all cells), because the pinned edges/points do not bound a solid and would otherwise be discarded by the inside/outside classification.

# a surface plus extra edges and points, with exact tracking
mesh_generator models/sphere.off -t -r -a -e models/sphere_edges.off -p models/sphere_points.off

# only edges (no surface); the domain is the bounding box of the edges
mesh_generator -t -r -a -e models/cube_subdiv_edges.off

# only points
mesh_generator -t -r -a -p models/cube_subdiv_points.off

Tracking output back to the input

With -t the mesher writes sidecar files that map each input primitive to the output primitives it becomes. Use -a so the tracking is exact (every input primitive is realized). The three provenance sidecars share the same shape — keyed by the input primitive (coplanar triangle group / edge / point), each output primitive is given as an output tet index plus that tet's vertex indices (a face is tet v0 v1 v2, an edge is tet v0 v1, a point is tet vertex). All indices are 0-based into volume.tet's tet and vertex blocks; volume.tet.rational gives the exact coordinates of each output vertex in the same order.

volume.tet.groups — coplanar groups of the input triangles

The input triangles are partitioned into maximal edge-connected, exactly-coplanar groups (a flat region is one group; a triangle with no coplanar neighbour is a singleton group). Format:

# input_triangle_id coplanar_group_id
<num_input_triangles> <num_groups>
<input_triangle_id> <coplanar_group_id>
...

input_triangle_id is the triangle's index in the input OFF file (degenerate/collinear input triangles are dropped by the mesher, so this is not simply 0..n-1). A group is a 1-to-1 map to a single input triangle iff it has exactly one triangle.

volume.tet.triangleprov — triangle (face) provenance

One line per coplanar group, listing the output tet faces that tile it:

# group_id num_faces tet v0 v1 v2 ...
<num_groups>
<group_id> <num_faces> <tet v0 v1 v2> <tet v0 v1 v2> ...

Each face is given as an output tet index tet and the three output vertex indices v0 v1 v2 of that tet's face (v0 v1 v2 are three of tet tet's four vertices). A face on two exactly-coplanar surfaces that overlap on the same plane is listed under both groups. Summing the (distinct) face areas of a group reconstructs the group's area.

volume.tet.edgeprov — edge provenance

One line per input edge, listing the output tet edges that tile it (their union is exactly the input segment):

# edge_id num_out_edges tet v0 v1 ...
<num_input_edges>
<edge_id> <num_out_edges> <tet v0 v1> <tet v0 v1> ...

edge_id is the input edge's index in the -e file; each output edge is a tet index tet and the two output vertex indices v0 v1 of that tet's edge.

volume.tet.pointprov — point provenance

One line per input point:

# point_id tet out_vertex(-1 -1 if absent)
<num_input_points>
<point_id> <tet> <out_vertex>

out_vertex is the output vertex equal to the input point and tet an output tet containing it (both -1 if the point did not survive into the output — should not happen with -a).

Independent verifier

tests/verify_tracking.cpp re-derives all of the above in exact rational arithmetic and checks it (surface groups tile exactly, each edge is tiled by its output edges, each point equals its output vertex). It is a good reference for how to consume the sidecars:

mesh_generator models/cube_subdiv.off -t -r -a -e models/cube_subdiv_edges.off -p models/cube_subdiv_points.off
verify_tracking models/cube_subdiv.off volume.tet --strict \
    --edges models/cube_subdiv_edges.off --points models/cube_subdiv_points.off
# for an edges/points-only run (no surface), pass "none" as the surface:
verify_tracking none volume.tet --strict --edges models/cube_subdiv_edges.off

Examples on the bundled meshes

# 1) Volume mesh (polyhedral) of a closed surface
mesh_generator models/bunny.off                       # -> volume.msh

# 2) Tetrahedral mesh of the enclosed solid
mesh_generator models/bunny.off -t                    # -> volume.tet

# 3) Boolean union of two overlapping surfaces
mesh_generator models/cube_subdiv.off U models/sphere.off   # -> volume.msh

# 4) Exact surface tracking of a tetrahedralization
mesh_generator models/cube_subdiv.off -t -r -a        # -> volume.tet(.prov/.groups/.rational)

# 5) Insert edges and points, with tracking
mesh_generator models/sphere.off -t -r -a \
    -e models/sphere_edges.off -p models/sphere_points.off

# 6) Embed a surface into an existing tetrahedral mesh (.tet/.msh as inputfile_B).
#    The bool_opcode (here U) is a required separator and is ignored for embedding;
#    the surface must lie inside the tet mesh's domain.
mesh_generator models/Octocat.off U models/Octocat.bg.tet  # -> volume.msh (MEDIT: models/Octocat_medit.msh)

# 7) 2D: arrangement of a segment soup (see "2D mode" below)
mesh_generator models/2d/england.obj -2d              # -> triangulation.off
mesh_generator models/2d/siggraph_logo.obj -2d -r -v  # + exact rationals, verbose

2D mode

-2d runs a separate 2D pipeline: given a soup of segments in the plane — which may intersect, overlap, be duplicated or be degenerate — it computes their arrangement and outputs it as a triangulation in which every input segment is exactly a union of output triangle edges, plus the provenance mapping each input segment to the edges that tile it.

Internally: the input points are deduplicated and embedded in a Delaunay triangulation (a port of geogram's Delaunay2d onto this repository's exact predicate kernel), together with the four corners of the bounding box expanded by 10%. Each segment is then traced through the mesh; where it crosses an already-inserted segment, the intersection is created as an exact implicit point (segment-segment intersection) rather than a rounded coordinate. All geometric decisions go through the same exact predicates as the 3D path, so the output is likewise deterministic and byte-identical across platforms.

mesh_generator input.obj -2d [-r] [-v]

Input format

An OBJ line soup: v x y z vertex records and l i j line records (1-based indices; l may also carry a longer polyline, which is read as consecutive pairs). The z coordinate is ignored, so a planar curve exported from a 3D tool works directly. Two examples are bundled in models/2d/.

Duplicate points are merged, zero-length segments are dropped, and duplicate segments are processed once — all of them still appear in the provenance output.

Output files

File Written when Contents
triangulation.off -2d The output triangulation, as an OFF with z = 0. Covers the 10%-expanded bounding box of the input.
triangulation.off.rational -2d -r Exact rational coordinates, one x y line per vertex, in the same order as the OFF.
triangulation.off.segmentprov -2d Segment provenance: <count>, then one line per input segment: <segment_id> <n> <tri v0 v1> ..., listing the output edges that tile it in order from the segment's first endpoint. A segment dropped as zero-length has n = 0.
triangulation.off.pointprov -2d Point provenance: <count>, then one line per input point: <point_id> <tri> <out_vertex>, or -1 -1 if it did not survive.

Independent verifier

verify_tracking_2d re-derives the provenance from the geometry in exact rational arithmetic, sharing no code with the generator. For each input segment it checks that every output edge is exactly collinear with it and that the edges partition it with no gap and no overlap; it also checks that every input point maps to an output vertex with exactly equal coordinates, and that the triangulation is orientable and free of overlapping triangles.

mesh_generator models/2d/england.obj -2d -r
verify_tracking_2d models/2d/england.obj triangulation.off     # -> "TRACKING OK"

Viewing the result

tests/arrangement_to_vtu.py exports a run for ParaView as three files meant to be overlaid: the input segments, the output triangulation, and the output edges tagged with the id of the input segment they came from. Colouring the input and the output edges by the shared input_segment_id makes the provenance directly visible.

mesh_generator models/2d/siggraph_logo.obj -2d
python3 tests/arrangement_to_vtu.py models/2d/siggraph_logo.obj triangulation.off -o siggraph
# open siggraph_input.vtu, siggraph_output_tris.vtu, siggraph_output_edges.vtu in ParaView

Programmatic use

src/VolumeRemesher/2d/embed2d.h exposes embed_seg_in_tri_mesh, the 2D counterpart of embed_tri_in_poly_mesh: it takes flat arrays of segment coordinates and indices and returns the output triangles, exact rational vertex coordinates, and the segment and point provenance.

Programmatic API

From Python, see Python. From C++, the whole command line pipeline is driver.h (make_mesh, embed_mesh, arrange_2d, with the readers in io.h and the output snapshots and writers in mesh_output.h); main.cpp is a thin parser over it.

To embed a set of triangles (and, optionally, edges and points) into an existing tetrahedral mesh from C++, see embed.h (embed_tri_in_poly_mesh). It returns the polyhedral/tetrahedral output plus the same provenance information described above (faces on input, and per-edge / per-point provenance). Note: in the embedding path the edges/points — and the small helper-triangle apexes they generate — must lie inside the input tet mesh's domain (a debug assertion flags violations).

License

LGPL-3.0-or-later; see LICENSE. The default build, the Python wheels and the source distribution contain only LGPL-compatible components. The one exception is opt-in: third_party/graph_cut (the legacy -c graphcut classifier, see Inside/outside classification) is research-use-only and GPL code that is compiled only with -DVOLUMEREMESHER_WITH_GRAPHCUT=ON; a binary built that way must not be distributed under the LGPL.

Notes

  • The pipeline uses exact indirect predicates, so the output is deterministic and byte-identical across platforms/compilers (this is checked in the integration tests), and identical between the command line tool and the Python package (checked by tests/python).

  • We tested this code on macOS and Windows; it should also work on Linux.

⚠️ WARNING: Apparently, CLANG does not support a fully IEEE compliant floating point environment which is necessary to guarantee that indirect predicates work as expected. The only way we found to guarantee correctness on this compiler was to disable all optimizations. Please be aware of this fact should you notice a performance degradation in your experiments.

Metadata

Release files for volume-remesher 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for volume-remesher 1.1.0
File Size Uploaded Provenance Actions
volume_remesher-1.1.0.tar.gz 196.9 kB With provenance Details for volume_remesher-1.1.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for volume-remesher 1.1.0
File Actions
volume_remesher-1.1.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details for volume_remesher-1.1.0-cp312-abi3-win_amd64.whl
volume_remesher-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for volume_remesher-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
volume_remesher-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for volume_remesher-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
volume_remesher-1.1.0-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details for volume_remesher-1.1.0-cp312-abi3-macosx_11_0_arm64.whl
volume_remesher-1.1.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for volume_remesher-1.1.0-cp311-cp311-win_amd64.whl
volume_remesher-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for volume_remesher-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
volume_remesher-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details for volume_remesher-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
volume_remesher-1.1.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for volume_remesher-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
volume_remesher-1.1.0-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for volume_remesher-1.1.0-cp310-cp310-win_amd64.whl
volume_remesher-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details for volume_remesher-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
volume_remesher-1.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for volume_remesher-1.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
volume_remesher-1.1.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for volume_remesher-1.1.0-cp310-cp310-macosx_11_0_arm64.whl
volume_remesher-1.1.0-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details for volume_remesher-1.1.0-cp39-cp39-win_amd64.whl
volume_remesher-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details for volume_remesher-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
volume_remesher-1.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details for volume_remesher-1.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
volume_remesher-1.1.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details for volume_remesher-1.1.0-cp39-cp39-macosx_11_0_arm64.whl

Total release size: 8.5 MB

Release files / volume_remesher-1.1.0.tar.gz

Download URL volume_remesher-1.1.0.tar.gz
Size 196.9 kB
Tags Source
SHA-256 checksum
How to use checksums
70a4966ccbdb4107d86bbdfee7b816964c5126123b8428b1ee4fe951c9724bd6
BLAKE2b-256 checksum
How to use checksums
b015c941a85712db3d85ad5a180febe31b5004987c8e2baeb3cd4f8f6213f2d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp312-abi3-win_amd64.whl

Download URL volume_remesher-1.1.0-cp312-abi3-win_amd64.whl
Size 620.9 kB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b12a2587403a60d62787b5c2408402a293ab45c4048de62ff5454dc578ab16d0
BLAKE2b-256 checksum
How to use checksums
93391e8454b44fc08d0744ae923b33c1c0d9eaca080324c93e6eb2d2042a0d4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL volume_remesher-1.1.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 544.4 kB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
daf95310fa881b7dc21fb7245340b33e6a80ddd4f51ab0c8b06b9dbee07698e4
BLAKE2b-256 checksum
How to use checksums
92b5d739112995b3dae523291810620212c1cba461ae57bb6a2ffe4d61565903
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL volume_remesher-1.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 487.9 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
c25b410e8a44186ec6db579f989aab6d31ab74cd54a71a6e916e1cebc24e36f9
BLAKE2b-256 checksum
How to use checksums
30e52a98d3fa049951c6d02dc61a81e135b510e434449a6acd4b63f791f999a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp312-abi3-macosx_11_0_arm64.whl

Download URL volume_remesher-1.1.0-cp312-abi3-macosx_11_0_arm64.whl
Size 416.0 kB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
af02891fde257b0bd2bf85d304b5c20a98311934f01886a632a366ef50375bf2
BLAKE2b-256 checksum
How to use checksums
e4d8c6aa31103176daddf2a4caef3cb578c71dd4b3273db53e70eea10c1c4708
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp311-cp311-win_amd64.whl

Download URL volume_remesher-1.1.0-cp311-cp311-win_amd64.whl
Size 621.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
c9b4400b6601653d1faf5383a18b75e35f606f5903b6f8c6280e74613f77b850
BLAKE2b-256 checksum
How to use checksums
0759b61e65b9cc76d480f4676b81dfbdf0d45accc52fce551ea958fa6bc06177
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL volume_remesher-1.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 549.7 kB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cfc340d2416e393fdab2d0c661d28ad48254bcb3c6cf13ef98ccc46878b6a625
BLAKE2b-256 checksum
How to use checksums
9fae54e89c39ab1217b03f519c7d0efb9518797d5ecc871a377802723e97b618
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL volume_remesher-1.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 493.3 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
373db5f429ef4b7ceee7ad939fb46f949422330bcf16fbe987e8bee465c9e9a1
BLAKE2b-256 checksum
How to use checksums
d62102453b6a3981b5b3c0a01fda0591c937002f7b0478acb6d95fc23bea485f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL volume_remesher-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
Size 418.3 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bf262d84f5c8d799ae0e03df09c7558df610768ec199002c8281484704dd0bf8
BLAKE2b-256 checksum
How to use checksums
39db8566eca1a32b5a3556327677dac015e5ff3bcaac4987205a24f533bcbef8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp310-cp310-win_amd64.whl

Download URL volume_remesher-1.1.0-cp310-cp310-win_amd64.whl
Size 621.7 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
4006fb76661f2a9f9576b636aa450bacb59891bb3cc732fbadbbad12ac556e42
BLAKE2b-256 checksum
How to use checksums
185e0ad63faca09fb7eb5e0763c06b08d815cc127f0f72baf238feb407c774cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL volume_remesher-1.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 549.7 kB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
555b29237ef65928f2e832e9f08a8aaf74cfb504c442ab9d79229ee5b7ba1843
BLAKE2b-256 checksum
How to use checksums
f53805d5d8dea21d6657d393008093a86cf3993f733008f6f264d1f5dcc5190a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL volume_remesher-1.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 493.3 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
9d28461b20ba5d457054d382c9e6b66590822fdd41a3f4cd8dd1d019d0ccd15e
BLAKE2b-256 checksum
How to use checksums
9b52fd477ce70330aa8631cf0f70a222906806e4e5d0fd072533e66dae34193e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL volume_remesher-1.1.0-cp310-cp310-macosx_11_0_arm64.whl
Size 418.2 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
830727cbf31edc1ecf093af7850cd49abd00a756ffa59c190d2c70a346938076
BLAKE2b-256 checksum
How to use checksums
6835827f2bddccdcf48fb33be2817f5ec483a4a556431a6bfb80b015cbf81b33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp39-cp39-win_amd64.whl

Download URL volume_remesher-1.1.0-cp39-cp39-win_amd64.whl
Size 610.7 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
bc4b17f12cb5b73b6f770197f25e580e4cb762fbd62bd18915898c5c747a802f
BLAKE2b-256 checksum
How to use checksums
1a54b0e86720a4ba7fea8873222eeeaa6af354c040190e4d16a6d8dcd8ec1543
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL volume_remesher-1.1.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 541.7 kB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fb7104ffd266374504bddabc543013b90fdee59cd9f4f561785ed4493791beaa
BLAKE2b-256 checksum
How to use checksums
9ede966248feba34be6d8bac81cda3cfe090aefe4423f277efd38788f5f54130
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL volume_remesher-1.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 487.6 kB
Tags CPython 3.9 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
98b920320d7bd4e2fa3ca4d10bcb167efcc55d56a356f06dbbccad7e49c9bcc1
BLAKE2b-256 checksum
How to use checksums
a8b92d39695617be1fa6a127ed7939ae2135f1bb72b3a07eac126dc4cc942d8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Release files / volume_remesher-1.1.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL volume_remesher-1.1.0-cp39-cp39-macosx_11_0_arm64.whl
Size 412.8 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cdc7b46986312e4fc7a6d6d0fcda3da3ad4aa00b3c6a3e9c6c1aaa882b87ba78
BLAKE2b-256 checksum
How to use checksums
fb12138f8790760ca51caa1ebc88e9da412a2061510ced8273ea22bafa9d060b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

Security for volume-remesher 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 17 files in this release have been uploaded with provenance metadata.

Select from 17 files

Attestation for volume_remesher-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.0 This release

17 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page