Skip to main content

Fast, robust isosurface extraction from arbitrary implicit functions using adaptive octree and Manifold Dual Contouring

Project description

isomesh

Fast, robust isosurface extraction from arbitrary implicit functions using adaptive octree and Dual Contouring.

isomesh benchmark overview

Features

  • Sharp feature preservation via QEF (Quadric Error Function) vertex placement -- corners and edges are captured exactly, not rounded like Marching Cubes
  • Manifold, watertight output guaranteed for closed surfaces
  • Adaptive refinement -- concentrates cells at feature boundaries, smooth regions stay coarse
  • Rust core with Python bindings (PyO3 + maturin) -- zero-copy numpy array exchange
  • Batch evaluation -- the user's implicit function is called with (N, 3) arrays, not point-by-point
  • Newton surface projection -- all vertices lie exactly on the isosurface (machine precision)

Quick Start

import isomesh
import numpy as np

def sdf_sphere(pos: np.ndarray):
    norms = np.linalg.norm(pos, axis=1)
    values = norms - 1.0
    gradients = pos / np.linalg.norm(pos, axis=1, keepdims=True)
    return values, gradients

vertices, faces = isomesh.extract(
    func=sdf_sphere,
    bbox_min=(-2, -2, -2),
    bbox_max=(2, 2, 2),
    min_depth=4,
    max_depth=7,
    angle_threshold=30.0,   # degrees -- sharp feature detection
    iso_value=0.0,
)

# vertices: (V, 3) float64 -- all on the isosurface
# faces: (F, 3) int64 -- consistently oriented triangles

Installation

Pre-built wheels are available for Linux (x86_64, aarch64), macOS (Apple Silicon), and Windows:

pip install isomesh

From source

Requires a Rust toolchain (for building the native extension):

git clone https://github.com/narnia-ai-mason/isomesh.git && cd isomesh
pip install maturin
maturin develop --release

How It Works

isomesh uses Dual Contouring on an adaptive octree:

  1. Adaptive octree construction -- uniform grid at min_depth, then feature-sensitive refinement to max_depth based on normal angle spread and gradient variation
  2. QEF vertex placement -- one vertex per cell via Jacobi SVD eigendecomposition with mass-point bias for rank-deficient cases
  3. Newton surface projection -- one Newton step projects each vertex exactly onto the zero-isosurface
  4. Quad generation -- canonical-edge iteration with flatness-based triangulation
  5. All surface leaves forced to max_depth -- eliminates T-junction holes, guarantees watertight output

Function Interface

The implicit function must be vectorized:

def f(positions: np.ndarray) -> tuple[np.ndarray, np.ndarray | None]:
    """
    Args:
        positions: (N, 3) float64 array of query points
    Returns:
        values: (N,) float64 -- implicit function values
        gradients: (N, 3) float64 or None -- if None, estimated via finite differences
    """

Dual Contouring vs Marching Cubes

Comprehensive comparison across 10 benchmark shapes using isomesh (Dual Contouring) and PyMCubes (Marching Cubes) at equivalent resolution (depth 6 = 64 cells/axis).

Summary

Metric MC (res=65) DC Uniform (d=6) DC Adaptive (4->6) DC Adaptive (4->7)
Manifold 10/10 10/10 10/10 10/10
Watertight 10/10 10/10 10/10 10/10
Total vertices 81,112 80,693 72,629 270,770
Total time 0.75s 7.69s 6.86s 15.25s
Avg SDF error 3.10e-04 5.74e-05 5.75e-05 2.17e-05
Avg min angle 34.7 39.8 39.6 40.0

Surface Accuracy

Newton projection places DC vertices nearly exactly on the isosurface:

Shape MC mean |SDF| DC mean |SDF| Improvement
sphere 9.63e-05 1.21e-18 ~10^13x
thin_shell_hemi 6.86e-05 1.17e-11 ~10^6x
chamfered_sphere 2.58e-04 5.12e-07 ~500x
mechanical_part 3.25e-04 4.05e-05 ~8x
bunny 4.38e-04 4.38e-04 ~1x
simjeb_148 1.35e-03 8.95e-05 ~15x

Triangle Quality

DC consistently produces better-shaped triangles (higher minimum angle = less degenerate):

Shape MC min angle (avg) DC min angle (avg)
sphere 31.6 43.7
thin_shell_hemi 31.4 43.1
chamfered_sphere 35.5 43.4
box 44.1 44.5
mechanical_part 40.3 41.0
bunny 32.3 30.9
simjeb_148 34.6 33.2

Sharp Feature Comparison

DC (Dual Contouring) preserves sharp edges and corners via QEF vertex placement. MC (Marching Cubes) rounds them by linear interpolation.

Box comparison Rotated box comparison Chamfered sphere comparison Mechanical part comparison

Thin Feature & Complex Geometry

Thin shell comparison Bunny comparison SimJEB 148 comparison

Adaptive Refinement

Adaptive mode concentrates resolution where needed:

Shape Adaptive (4->6) V Uniform (d=6) V Ratio
sphere 536 8,600 16x fewer
chamfered_sphere 7,064 7,064 1x
cylinder 4,328 4,328 1x

For smooth shapes like sphere, adaptive refinement skips unnecessary subdivision, reducing vertex count by 16x with comparable accuracy.

Usage with Neural SDF Models

isomesh is designed for extracting meshes from SDF-based 3D generative models (e.g., DeepSDF, SDF-Diffusion) trained on mechanical parts like SimJEB.

Recommended Configuration

import isomesh
import numpy as np
import torch

def make_sdf_func(model, device='cuda'):
    """Wrap a neural SDF model for isomesh.

    Always provide autodiff gradients -- finite difference gradients
    are unreliable on neural SDFs.
    """
    @torch.no_grad()
    def func(points: np.ndarray):
        pts = torch.from_numpy(points).float().to(device)
        pts.requires_grad_(True)

        with torch.enable_grad():
            values = model(pts)            # (N,)
            grads = torch.autograd.grad(
                values.sum(), pts, create_graph=False
            )[0]                           # (N, 3)

        return values.cpu().numpy(), grads.cpu().numpy()
    return func

vertices, faces = isomesh.extract(
    make_sdf_func(model),
    bbox_min=(-1.0, -1.0, -1.0),
    bbox_max=(1.0, 1.0, 1.0),
    min_depth=4,            # 16³ base grid
    max_depth=7,            # 128³ effective resolution
    adaptive=True,          # essential for mechanical parts
    angle_threshold=30.0,   # detects 90° edges reliably
    iso_value=0.0,
)

Why These Settings

Parameter Value Rationale
adaptive True Mechanical parts have large flat surfaces + sharp edges/holes. Adaptive refinement concentrates resolution at feature boundaries, keeping flat regions coarse.
min_depth 4 16³ = 4,096 initial corners -- a good first GPU batch. Lower risks missing thin features at the base grid; higher diminishes the benefit of adaptive refinement.
max_depth 7 128³ effective resolution captures fillets, hole edges, and fine details.
angle_threshold 30.0 Mechanical edges are typically 90°, well above this threshold. Lowering it risks false-positive refinement from noisy neural gradients on flat surfaces.

Quality Presets

# Batch generation (speed-oriented, hundreds of shapes)
min_depth=4, max_depth=7, adaptive=True

# Single shape, final output (quality-oriented)
min_depth=5, max_depth=8, adaptive=True

Tips

  • Always provide autodiff gradients. Neural SDF + finite differences = poor accuracy. The wrapper above uses torch.autograd.grad to get exact gradients while keeping the outer scope in no_grad mode.
  • Don't lower angle_threshold below 25°. Neural gradients are noisier than analytic ones. A lower threshold causes over-refinement on surfaces that are actually flat.
  • Thin features are handled automatically. The Lipschitz guard detects thin walls even in cells without sign changes.
  • Output is manifold and watertight. Manifold Dual Contouring guarantees this -- no post-processing needed for downstream simulation or 3D printing.
  • QEF preserves sharp edges exactly. Unlike Marching Cubes, which places vertices on grid edges (chamfering corners), QEF vertex placement captures true edge and corner geometry.

API Reference

isomesh.extract(
    func,                    # vectorized SDF: (N,3) -> ((N,), (N,3)|None)
    *,
    bbox_min=(-1, -1, -1),   # bounding box (expanded to cube if non-cubic)
    bbox_max=(1, 1, 1),
    min_depth=3,             # uniform base resolution (2^min_depth cells/axis)
    max_depth=7,             # max adaptive refinement depth
    angle_threshold=30.0,    # degrees -- feature detection sensitivity
    iso_value=0.0,           # isosurface level
    fd_step=1e-5,            # finite difference step (if gradients not provided)
    adaptive=False,          # enable adaptive refinement
) -> (vertices, faces)

Architecture

src/                        # Rust core
  lib.rs                    # PyO3 module entry
  bbox.rs                   # Bounding box, expand-to-cubic
  octree/                   # Adaptive octree
    build.rs                # Construction + feature-sensitive refinement
    cell.rs, types.rs       # Data structures
    morton.rs               # Morton code spatial indexing
  eval/                     # Function evaluation bridge
    bridge.rs               # Batch Python<->Rust with GIL management
    cache.rs                # Corner value/gradient cache
  dc/extract.rs             # Dual Contouring mesh extraction
  qef/quadric.rs            # QEF solver (Jacobi SVD, mass-point bias)
  util/math.rs              # 3x3 eigendecomposition

python/isomesh/             # Python API
  _core.py                  # extract() wrapper + validation
  _validation.py            # Input checking with clear error messages

Testing

maturin develop --release
pytest tests/ -v

Benchmarks

The benchmark suite compares isomesh against PyMCubes across 10 shapes in 4 categories:

Category Shapes What it tests
Basic Sphere, Torus Smooth surfaces, analytic ground truth
Sharp features Box, Rotated box, Chamfered sphere, Cylinder, Mechanical part Sharp edges, corners, non-axis-aligned edges, CSG operations
Thin features Hemisphere shell (wall=0.08) Thin walls, open boundaries
Complex geometry Bunny, SimJEB 148 (mesh-based SDF) Real CAD parts, complex topology
# Full benchmark (all shapes, all methods, with rendering)
uv run python benchmarks/run_benchmark.py

# Selective
uv run python benchmarks/run_benchmark.py --shapes sphere box chamfered_sphere
uv run python benchmarks/run_benchmark.py --methods uniform adaptive
uv run python benchmarks/run_benchmark.py --no-render --no-stl

References

  • Ju, Losasso, Schaefer, Warren. "Dual Contouring of Hermite Data." SIGGRAPH 2002.
  • Schaefer, Ju, Warren. "Manifold Dual Contouring." IEEE TVCG 13(3), 2007.
  • Garland, Heckbert. "Surface Simplification Using Quadric Error Metrics." SIGGRAPH 1997.
  • Lindstrom. "Out-of-Core Simplification of Large Polygonal Models." SIGGRAPH 2000.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

isomesh-0.1.1.tar.gz (4.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

isomesh-0.1.1-cp313-cp313-win_amd64.whl (262.2 kB view details)

Uploaded CPython 3.13Windows x86-64

isomesh-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

isomesh-0.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (330.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

isomesh-0.1.1-cp313-cp313-macosx_11_0_arm64.whl (310.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

isomesh-0.1.1-cp312-cp312-win_amd64.whl (262.6 kB view details)

Uploaded CPython 3.12Windows x86-64

isomesh-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

isomesh-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (330.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

isomesh-0.1.1-cp312-cp312-macosx_11_0_arm64.whl (311.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

isomesh-0.1.1-cp311-cp311-win_amd64.whl (262.2 kB view details)

Uploaded CPython 3.11Windows x86-64

isomesh-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (350.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

isomesh-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (332.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

isomesh-0.1.1-cp311-cp311-macosx_11_0_arm64.whl (311.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file isomesh-0.1.1.tar.gz.

File metadata

  • Download URL: isomesh-0.1.1.tar.gz
  • Upload date:
  • Size: 4.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for isomesh-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4d5a6aff6c954e7120747b8d7d08ddced3c9b65d61cc7511e9f4cd98c8742862
MD5 9d3cb158951e6b655e7554c7c158b2af
BLAKE2b-256 46c14fb1e7f86f9e3b85e13803d620495d23ce00ff31a735f8f2a613b5e4c3ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1.tar.gz:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: isomesh-0.1.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 262.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for isomesh-0.1.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4ab0689554b8c149aecfcf67331b1aaa916838f4bf95a7c76db8330f4f629dd3
MD5 50d996e086e7d3d04d7d8b2e66bb2ad3
BLAKE2b-256 ed90faccf0acf2a6fedae6dd9dd7d4df95f217daccae411eefbc947c149cbb60

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd7efec8725ebb16619e95c16261f7ca9e7f53bd5c1fdfc8cd674764d792b078
MD5 fe67fa9dc558f981341aab56b62876b8
BLAKE2b-256 e33546df19793a95fd6b44c789529d17109be9cd6965b090c97cef3797860078

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 81e89ab12f028c547aca5b172f7b1648774b45198ff651b235d7ec2bdc2ca1f8
MD5 a0d219cac4d4c4c34b66af1759f1db0b
BLAKE2b-256 eaa89acb840ffbd491c31d0a29c4b184ac879b29e227dbe6c8eccca8d461358b

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62fc4df7a06df2dd2c1230b65cca348ec8e66448eb05626736322b2853893c17
MD5 01744c17e518d94504a501bf0837524f
BLAKE2b-256 70776031ccbc10dc7456f2373aa057f6346380a2b6ffdd975f6aa87b2e025274

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: isomesh-0.1.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 262.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for isomesh-0.1.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c770cf8e642f4738c79a1df380534a991ce25a77ff4de02f0fa298d95af0bc3b
MD5 fdf708f3c6ae97da73ad780e98c3e052
BLAKE2b-256 9b4acdf5a2eb4fd0bf9dd24c417827816fbb61f561086da608f8619c22ccb612

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 aa3bcef560c69201a6aba03cb82670162f3d1d649101a943dbc2a2ff31becc34
MD5 b85f549a92f946b78c319c22acc8e26d
BLAKE2b-256 ba5adc1e9fdbf5363e73629e52941824576c136181a5ed2eb65370084ccf6e78

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ee34ab568aeee43d557c6c99764ff59aec3d5aeeb2e831aa0adb8b5f5488a20
MD5 106e293fc3dd2fa52980a8d306dbd9e2
BLAKE2b-256 fa0cc3d57ebeea4c96b2d8c32035970aedc66eb20bde0cdc207cc71bf0609265

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 69f669db70c859c66efad034e7401fe8da4eae8a715c9ae8c5a6089ce0f2d67a
MD5 070e537d86015f0ae1350c789e71f280
BLAKE2b-256 2d2e82b654df83f62031ac83f01c9e07ee23782dfdc53c4def18e2250b3a7750

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: isomesh-0.1.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 262.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for isomesh-0.1.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 97d54fdfc0febe4cd850a0c0b1e8d3bc85e6df15d5104dc494153c04f9f8f176
MD5 ea1e22aedbf3f795cb2b0893eb8092a3
BLAKE2b-256 a006fede8ef439ebb807e541494b0102f5dee2c0f57c8a8be7b35385d48b6205

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e47078cc817c50fc500c74f4cdf32247e9123aa5e575621bdc995849b5509014
MD5 b9bf1344b98bfb767e085bf2fc78a3fd
BLAKE2b-256 fb8c944d70a08154311136a8ad9df068d43cc073715fa0aad25eb6eb6d387482

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f65981d54aa69443e74730a508f2b80efa3b72c40deacce7d1c37589e5107c22
MD5 9ff39d122099f91d27c5a5f7123acf3d
BLAKE2b-256 ff1d37626f72b5cefd30f18af714230bee685ed174b71b5c54422fdd6df839b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file isomesh-0.1.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fb04758532b19777feab0cc30bc8edf9b184e5a354cc517067c10fa971fdd1d1
MD5 06ef7faa2466bf60e6ce046fd83c63ae
BLAKE2b-256 3184317989fe3f956f932e4ba8a74599e6ab4e1284384e994337c0a7dec7ecfd

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on narnia-ai-mason/isomesh

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page