Skip to main content

ANYmesher

Structured meshing for shell and beam finite-element models described by ANYgeometry: edge seeding and local refinement, a built-in mapped (transfinite Coons) mesher, mapped-face decomposition, optional Gmsh meshing, geometry-to-mesh associations, quality metrics, a tkinter mesher and a command-line interface.

Install the released package with python -m pip install ANYmesher. For local development, use the editable setup below.

The repository is ANYmesh, but anymesh was already taken on PyPI, so the distribution is ANYmesher and the import package is anymesher.

Quick start

A stiffened panel needs no geometry model:

import anymesher as am

panel = am.StiffenedPanel(
    length=4.0, width=3.0, plate_thickness=0.012,
    num_stiffeners=2, stiffener_spacing=1.0,
    stiffener_height=0.30, stiffener_web_thickness=0.010,
    stiffener_flange_width=0.150, stiffener_flange_thickness=0.015,
)
mesh = am.stiffened_panel_mesh(panel, am.PanelMeshConfig(
    shell_num_divisions_x=8, shell_num_divisions_y=6, beam_num_divisions=8,
))

mesh.num_nodes, len(mesh.quads), len(mesh.beams), len(mesh.couplings)
am.panel_edge_nodes(mesh)["x0"]          # the nodes on the x = 0 edge
am.verify_mesh_quality(mesh).max_aspect_ratio

Anything less regular goes through the shared geometry model:

import anygeometry as ag

model = ag.GeometryModel()
points = model.add_points([(0, 0, 0), (2, 0, 0), (2, 1, 0), (0, 1, 0)])
face = model.add_face(model.add_polyline(points, close=True))

am.punch_circular_hole(model, face, (1.0, 0.5, 0.0), 0.2)
mesh = am.generate_mesh(model, target_size=0.05, order="quadratic")
mesh.nodes_on(ag.EntityRef("edge", 3))   # still addressable after re-meshing

anymesher.geometry remains as a temporary compatibility import. Its classes are the exact ANYgeometry classes, not converted copies, but new code should import geometry directly from anygeometry.

Command line

anymesher panel --length 4 --width 3 --thickness 0.012 --height 0.3 --web-thickness 0.01 --divisions-x 8 --divisions-y 6

panel, plate, beam, quality and backends, each with --json. --output writes the mesh as JSON.

Provider-neutral automation

anymesher automation --geometry model.json starts a JSON Lines session for LLMs and agent frameworks. The core accepts strict structured tools only; it has no model SDK, prompt parser, credentials, network access, or arbitrary shell or filesystem command. Discover the exact schemas with mesh_capabilities, plan a revision-bound batch with plan_mesh, inspect the detached candidate, and publish it exactly once with apply_mesh.

Qualified commands configure meshing, select geometry scope, pin edge divisions, manage named refinements, generate, undo, and redo. Direct node/element mutation is intentionally unavailable because it would invalidate topology associations and deterministic numbering. Geometry edits remain in ANYgeometry's own automation protocol.

anymesher-gui opens the mesher: enter a panel, plate or beam, watch it re-mesh as you type, read the quality report, and save the result. It is deliberately not a geometry editor — building a BRep interactively is an application's job, and ANYfem already does it.

Applications can put that form behind their own mesh button. Passing a callback adds a Use mesh button and returns the neutral Mesh directly:

from anymesher.gui import open_mesher

window, mesher = open_mesher(root, on_apply=project.replace_mesh)

The host remains responsible for deciding whether a generic neutral mesh is appropriate for its structural model.

What a mesh is here

generate_mesh returns nodes, quadrilaterals, triangles, beams, coupling records, and the association back to the geometry: which node came from which vertex, which nodes lie along which edge, which elements belong to which face.

The association is the point. It is what lets a load or a restraint be named against geometry and survive a re-mesh, and what makes results addressable by the thing the user drew rather than by node number. Primitives fill the same fields against synthetic entity IDs, so a consumer needs one lookup path either way.

Backends

mapped (built in) gmsh ([gmsh] extra)
Structure structured grid per face unstructured
grid_of_face filled empty
Conformity by construction by gmsh
Elements quads only quads, with triangles where recombination cannot pair them
Curved faces meshed exactly refused — planar faces only
Eccentric beams supported not supported
am.generate_mesh(model, backend="gmsh", target_size=0.1)

The two are not interchangeable in what they guarantee, and the differences are recorded rather than smoothed over: an unstructured mesh has no (i, j) index, so that field is left empty instead of filled with something plausible. Planar boundaries may contain ANYgeometry straight lines, circular arcs or Bezier splines; Gmsh receives each as its corresponding exact curve primitive.

Hybrid strategy: Automatic, Mapped, or Native

generate_hybrid_mesh_result is the production shell/beam route. The strategy argument is explicit and is independent of the lower-level triangulator selector:

strategy Behaviour
"auto" Use mapped blocks where qualified; use native faces for the remainder. With structured_options, try the global structured plan first and use the recorded native fallback only when its actual mesh fails quality_v2.
"mapped" Require every selected face to become a qualified mapped block. Any unsupported partition or quality violation blocks the mesh.
"native" Require the unstructured face route. It cannot be combined with structured_options.
result = am.generate_hybrid_mesh_result(
    model,
    target_size=0.1,
    strategy="auto",                 # Automatic
    structured_options={},           # enable global structured planning
)

mapped = am.generate_hybrid_mesh(
    model,
    target_size=0.1,
    strategy="mapped",               # fail closed unless all faces map
    structured_options={},
)

native = am.generate_hybrid_mesh(
    model,
    target_size=0.1,
    strategy="native",
    native_backend="auto",           # compiled triangulator, else Python
)

Every call creates a detached structural closure. On that working copy, ANYmesher uses ANYgeometry's exact public intersection query/plan/apply workflow to connect crossing plates, beam ends and crossings, and beam/shell intersections. The editable source model is unchanged; published mesh associations are remapped to its original entity handles. Passing structural_preparation=False disables automatic relationship creation but still uses a detached clone.

Positive-area coplanar plate overlaps are never assigned to one plate implicitly. Meshing blocks with a diagnostic directing the user to the previewable, undoable Fragment Overlaps geometry command.

plan_structured_layout and apply_structured_layout are public detached preview/application APIs. commit_structured_layout is feature-gated: it is available only when the installed ANYgeometry exposes the exact FeatureHistory.adopt_frozen contract. The qualified base dependency remains ANYgeometry 0.2.2, so ordinary mesh generation never depends on that optional feature-history operation.

Native triangulation

Mapped/native face selection is separate from the triangulator used after a face has selected the native strategy. In 0.2.1, omitted native_backend and planar backend arguments default to "auto": an explicitly registered boundary is preferred, then the built-in compiled boundary, with the deterministic Python reference used only when native capability is absent.

Use "python" to require the compatibility/reference implementation and "native" to require compiled capability without fallback. Import or execution failure from a present but corrupt extension is reported; it is never treated as ordinary absence. ANYfem format 6 persists this selector explicitly, while its format 1-5 migration writes "python" so old projects retain their behavior.

Design notes

One shared geometry authority. ANYmesher never converts a geometry model. It consumes the same GeometryModel and EntityRef objects that applications use for selections and attributes, then records associations to their stable IDs.

Conformity by construction. Node generation order is fixed: one node per used vertex, then n - 1 interior nodes per edge in the edge's own direction, then face interior nodes from the Coons blend. Neighbouring faces look their boundary nodes up from the same registries, so they share the very same nodes. The alternative — meshing faces independently and merging coincident nodes within a tolerance — fails quietly on nearly-coincident geometry and produces a mesh that looks connected and is not.

Coupling records, not constraints. When a stiffener stands off the plating, the mesher records per beam node: the shell element it projects into, the shape weights at that point, and the eccentricity vector. That is a statement about geometry. Deciding it becomes six multi-point constraints is the consuming solver's business. Interpolating through the shape functions is what removes the older requirement that a beam node lie on a shell node row, so the mesh no longer has to be aligned to the stiffeners for the coupling to be exact.

Numbering is a contract. A consumer stores results per node and element ID, so a renumbering that is mathematically irrelevant still invalidates its baselines. The primitives number shell nodes from 1, beam nodes from 10000, beam elements from 20000 and couplings from 30000; the mapped mesher numbers by registry order. Both are documented where they are implemented and asserted by test.

See docs/ARCHITECTURE.md for the layering, and MIGRATION.md for what was extracted from where.

Scope

Out of scope: geometry ownership, elements, materials, assembly and solution. General splitting, trimming, projection, transforms and intersections belong to ANYgeometry. check_mappable, triangle_to_quads and the four-patch butterfly hole decomposition stay here because they exist specifically for mapped quads. The production generate_hybrid_mesh workflow uses ANYgeometry's qualified intersection operations on an immutable working closure; it does not introduce a second geometry kernel or weld nodes by proximity. The older generate_mesh_with_intersections name remains only as a deprecated migration seam for historical models and is never selected automatically. The legacy anymesher.split_face_at, split_face_between and strip_face imports likewise retain their mapped-partition semantics; new neutral geometry code should import the general edit operations from anygeometry. Writing a mesh to a .fem or .inp file belongs to ANYfileio, which depends on this package — so the arrow cannot point back. The JSON in anymesher.serialize is the mesh container written out as itself, not an interchange format.

License

Starting with version 0.4.0, ANYmesher source code is licensed under the Mozilla Public License 2.0. See LICENSE for the full terms and NOTICE for the prospective relicensing statement. Earlier published versions remain available under the license terms that applied to those versions.

Original project documentation under docs/ is licensed under Creative Commons Attribution 4.0 as described in docs/LICENSE.md. Dependency and optional-tool licenses are recorded in THIRD_PARTY_NOTICES.md.

Units

SI throughout, lengths in m. There is no conversion layer. The mesher window accepts mm because that is how plate and profile dimensions are quoted, and converts at the widget.

Development

python -m pip install --no-deps -e C:\Github\ANYgeometry
python -m pip install -e "C:\Github\ANYmesh[dev,gmsh]"
python -m pytest

To open the mesher straight from a checkout — including an IDE's Run button, with nothing installed — run run_gui.py at the repository root.

python run_gui.py

Download files

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

Source Distribution

anymesher-0.4.0.tar.gz (323.8 kB view details)

Uploaded Source

Built Distributions

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

anymesher-0.4.0-cp314-cp314-win_amd64.whl (543.7 kB view details)

Uploaded CPython 3.14Windows x86-64

anymesher-0.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.4.0-cp314-cp314-macosx_11_0_arm64.whl (354.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

anymesher-0.4.0-cp313-cp313-win_amd64.whl (535.2 kB view details)

Uploaded CPython 3.13Windows x86-64

anymesher-0.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.4.0-cp313-cp313-macosx_11_0_arm64.whl (354.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

anymesher-0.4.0-cp312-cp312-win_amd64.whl (535.2 kB view details)

Uploaded CPython 3.12Windows x86-64

anymesher-0.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.4.0-cp312-cp312-macosx_11_0_arm64.whl (354.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

anymesher-0.4.0-cp311-cp311-win_amd64.whl (535.2 kB view details)

Uploaded CPython 3.11Windows x86-64

anymesher-0.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.4.0-cp311-cp311-macosx_11_0_arm64.whl (354.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file anymesher-0.4.0.tar.gz.

File metadata

  • Download URL: anymesher-0.4.0.tar.gz
  • Upload date:
  • Size: 323.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.4.0.tar.gz
Algorithm Hash digest
SHA256 6939bd548621a636c1e2696d60482b8aec2cb9c75caa7a068e0190f430ae3624
MD5 f078d5b150161435612dcb042eca91f3
BLAKE2b-256 a61d81ee4dc9c1d1361f6735cb58bba59389bbfbb98fc6c715bdcf442d320bff

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0.tar.gz:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.4.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 543.7 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.4.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1812161c8f04ac7c5584cb2226c8605fed875004f2a561ae4261032503bf44e5
MD5 c612673b64ecb37dd0bfa04e64ff5b0b
BLAKE2b-256 89450f0abaa736937a1faa86e5312356cb483df501522415e07abc50057c885e

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 74370ee0e147dbfba498e616310662d238fb5bb1a90dcace7c2d86e11929e42e
MD5 80fa0a680f67b79a378dcf3bab0f6a1d
BLAKE2b-256 76517a87e8360a576a4659f18c78e9659aa09123c278ef85ba571a87f9819fc7

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7c68e0d0bf2919adebd15de101db1e6783bbc30599e061a488f8c587be73ef8
MD5 bcac241292659659d4723bd336071fdf
BLAKE2b-256 10ef7abdc1ae567724b8c8a8c50af45b4044e492d5a0e0dfd190196b8b69ae0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.4.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 535.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.4.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a1642cbece724cdecc781c31496fa11b2d31546b7ebaea95fc0cb2faa3c1fb5c
MD5 c31c7d426ed5abca2ce86e9300e1a47e
BLAKE2b-256 55adbf7023cd60078161f35c867a394de00d6c5ab1ab8deec71a1dd882ca5e4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9ca282d1890eb536cb4ee0de40fdb78b90878d4b29a2b4debabc9eeb259d7d49
MD5 6a7a02fedb533b0a494a00d10eec4b76
BLAKE2b-256 d3e75afead16494bf8f33d56ac0e2928b04812f82d3529f6d7d4696e6f61f2ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1f684217e15181de11f2be82f675e6b0c0a3d34fb4ca5dbd860e48efb6f60ca0
MD5 cd4fad653d4ca19028ef6bdeff6e9d47
BLAKE2b-256 e21cd65207920f7a983db24a723a637c3b6d8c7fc3ca0b7695356db23f7e6648

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 535.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8105421a7e85a9804731df7046b32ea2f9bf652d33e9fcb46c84403e934a8e60
MD5 ddfea277af02c7112e4edee613992b94
BLAKE2b-256 bf9290e31062035262a421190cb08d21bfabfa81723bbb44247b987356e3c7ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 86eb98fc14272058dc791066e9bcf929ddcbf62c9a486ab211aa4aafec7f0295
MD5 6e1d8b5988d0fade6fe3fd7eb1236744
BLAKE2b-256 a1f8577711c705a81b8b2d4613940414b2fdfc5aa13eb803490289e00e688622

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b5e74c420bd96118bbb4b9a2cc0753c80e0d45c0e2f37eff75554227d885315
MD5 2bf0d851c42dbb0a038f9d040c945abb
BLAKE2b-256 601c3b58ae080d6ef63b292f46ed3e994fefe8d7d46c6b2de948c1e4e6ba9d56

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 535.2 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2bd8fbb76145d0f0a964d64ea081c2cbb7b86af5329b6a39058ed976c11720f4
MD5 e36ceb72f2eb59fd8b7d83427bc656fc
BLAKE2b-256 5cf006583ad7ba67f4a15ffa668fd834f26d6797c69686592eda4a36af632e91

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 40057f89746c79141234022dfe79e469aabe99594e62f5761d6c87c7ef18fad4
MD5 02072d4c779032b2e7bffe27a494d0f7
BLAKE2b-256 c8d5a1facfeedfaca35bb50f8733a2b23b81648e25c48f0c0c2358cde3b41fe5

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.4.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c2778f55fa4ec15723fa5e56c6227ea63b59afcaef85eae5d82880aba2b1db6a
MD5 1e077ffeeb8f0caf12b3c3aaa82faf1f
BLAKE2b-256 f28ec6e182f2b55bd61477e81f4dfd90196d188136a9dc5084aa39ce6e1aa00f

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.4.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

Release history Release notifications | RSS feed

This release

0.4.0 This release

13 files

0.3.1

13 files

0.3.0

13 files

0.2.5

13 files

0.2.3

13 files

0.2.1

2 files

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