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.0.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.0-cp313-cp313-win_amd64.whl (262.6 kB view details)

Uploaded CPython 3.13Windows x86-64

isomesh-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (349.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

isomesh-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (330.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

isomesh-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (309.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

isomesh-0.1.0-cp312-cp312-win_amd64.whl (263.1 kB view details)

Uploaded CPython 3.12Windows x86-64

isomesh-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (350.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

isomesh-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (331.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

isomesh-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (309.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

isomesh-0.1.0-cp311-cp311-win_amd64.whl (262.6 kB view details)

Uploaded CPython 3.11Windows x86-64

isomesh-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (351.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

isomesh-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (332.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

isomesh-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (310.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: isomesh-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 266c7814d6345ca588d2623a6e78f18fd5a2c1e70001b4e407735df11da26213
MD5 618f2c2c0ac4e387cb3d5fe66bd6a76e
BLAKE2b-256 96626ea6373b9cd691f9cac65a0c38f0ab6a86f175c9c6c2b5fe0fdd9b1a6889

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0.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.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: isomesh-0.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 262.6 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f058dbff36a51d9052ff1638b929c0942c81a5d993d83980067a32efb083336f
MD5 33b4300a72787c692a4559306ad7044d
BLAKE2b-256 7f8ac0f35d136062b6a0db6a36c347d44243031ad9a237707fc9c6c327393f9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5ee14cfe4d3e6663e41259031e2c889c1d9525af16e3aefd08976de90a087537
MD5 d3980b3b4c9895f7142bb7228bc8a9c4
BLAKE2b-256 2ee415d251a2a3b78deb04c44bf991cfdf863a18f2642665b857a7ba9bbd9642

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a4ef7f3ff163964ee6dc5e49677146ea341e14cb954cd337799d6747cceb7257
MD5 664df934596c8af410b4fc5921b3e58e
BLAKE2b-256 1293e5e4c0705eaaa339c748e781f8adc3ba3a65a632e251702fb003341b52bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4f76441827c899b7396c6f7a5329eec23304a48dfa6f116b0309e5a10a752fcd
MD5 410cc423a29bdb60a6568c6aefd10aa8
BLAKE2b-256 4a8f131962e5e2bd6d25fadd5375f84b12077564dbcf07533f3c1c7c302b8a6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: isomesh-0.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 263.1 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 35a709ac509f9bd9c80a608000e2a9a3e4c12177d3e3f7b4049912c6f16267be
MD5 ce7f1db05553c608c83c009dfca3c40a
BLAKE2b-256 87ba9a73002132c9649a07f2ac05e9b58e426fc2fc59f47bdbeaba89b6b687e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 89f29c35ff939acec891f0d885710a19c2e298143a73dfd14ad1fd7804675629
MD5 9f1b573d6d58473932036fe76dfbc54f
BLAKE2b-256 c96276dd405726a27bb9a061e86f0451492929db4a82062cd3b57e97cef06dda

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 90254b4104b5d9f9de13a01cc277adcdf0f1ccfbb9ca30eebc2b954fd76ff233
MD5 90696d0c34d7ffa3aba090fa65203af5
BLAKE2b-256 b113617ea6243719f4f1220b872b89829372713f903ef06f978bc8269ef3baf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce5f391c9060fd1c5a9c703ed3c651f8bf25b0a442636bfc2c7ae99c4b52d2e1
MD5 a1d5ceace3be05aabf233c7a1d452be7
BLAKE2b-256 4be677cb6f0b336632d9bfe353b19e13b6c247ac97e0e0dbb3f339e12adef088

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: isomesh-0.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 262.6 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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1b825d593d500181f68761982a81965e2561cb2366d9c8554b2ac9554e895945
MD5 32783afb292d308739373360eaf213d6
BLAKE2b-256 59f5ee8469006e928b18da8ff1cf228b91a0eeb9d408e22aed2bf48ddaae70f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dda6851c8d031fde381277f416acd1eddf7bfc984361232367f94b0329cb8037
MD5 5833c45662b74163f1b06580c6223b9b
BLAKE2b-256 6964892f3491c5c8064da16cbd47994cdbbc72ecfc5a13d0919094759a2a6060

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f5658a2b4aede28d9a7e74b9fd4b875d4139aac8d20b742bb2756f54b339e8cc
MD5 2fd07e1c73c6a5c9600913147567ee31
BLAKE2b-256 780d84a2f22a9ca36009c78d08876c1b49f6e9f14bcf2066e9826d9c57330e74

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for isomesh-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3cf0371bc8f391e256bf5127f4a6ce66449210b8e9c35a2f8baa2674982b0fc7
MD5 71bf49b4d73c53b5dae67d3ed39dfb8e
BLAKE2b-256 c3946090a764cd4e9d196c34fd5cbd023076ac3af51bef03b2957c676e9fe627

See more details on using hashes here.

Provenance

The following attestation bundles were made for isomesh-0.1.0-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