Skip to main content

Conley Morse Graph: cell maps, Morse graphs, and homological Conley indices for discrete-time dynamical systems.

Project description

cmgraph — Conley Morse Graph

High-performance C++20 + pybind11 package that computes cell maps, Morse graphs, and homological Conley indices for discrete-time dynamical systems, from either a continuous map (given as an outer-enclosure box map) or a sampled dataset.

The compiled core (cmgraph._core) carries the whole pipeline — outer-approximation cell map ⟶ strongly connected components ⟶ Morse decomposition + partial order ⟶ (on demand) cubical relative homology and the Leray-reduced index map. The Python surface is a thin, ergonomic layer over it. Cells are exposed as stable keys (Python ints) that survive refinement.

Install

pip install .            # core (no plotting dependencies)
pip install ".[viz]"     # + matplotlib and graphviz for cmgraph.plot
  • import cmgraph needs no third-party runtime dependency. numpy is used for numeric outputs when it is importable and is otherwise optional (outputs fall back to nested Python lists; cell keys are always Python ints).
  • Plotting backends (matplotlib, graphviz) are the optional viz extra: import cmgraph and import cmgraph.plot both succeed without them, and each plot function raises a clear pip install cmgraph[viz] hint only when called without its backend.
  • Build stack: scikit-build-core + CMake + pybind11, C++20 (GCC 11+, Clang 13+), Python 3.10+. The package version is single-sourced from pyproject.toml.

Quickstart — Leslie 2D end to end

import math
import cmgraph as cm

TH1 = TH2 = 20.0; PHI = 0.1; P = 0.7
_up = lambda v: math.nextafter(v, math.inf)
_dn = lambda v: math.nextafter(v, -math.inf)

def leslie_box(box):
    """Outward-rounded interval enclosure of the 2D Leslie map (a genuine outer bound)."""
    (xlo, xhi), (ylo, yhi) = box
    ulo = _dn(_dn(TH1 * xlo) + _dn(TH2 * ylo)); uhi = _up(_up(TH1 * xhi) + _up(TH2 * yhi))
    slo = _dn(xlo + ylo); shi = _up(xhi + yhi)
    elo = _dn(math.exp(_dn(-PHI * shi))); ehi = _up(math.exp(_up(-PHI * slo)))
    prods = [ulo * elo, ulo * ehi, uhi * elo, uhi * ehi]
    return [[_dn(min(prods)), _up(max(prods))], [_dn(P * xlo), _up(P * xhi)]]

model = cm.Model(
    bounds=[[-0.001, 90.0], [-0.001, 70.0]],
    map=cm.BoxMap(leslie_box, batched=False),
    grid=cm.Grid(size=[128, 128]),
)

mg = model.morse_graph()          # fast path: Morse graph, no homology
print(mg.summary())               # node count, per-node cell counts, partial order
mg.morse_sets()                   # per-node cell KEYS (stable across refinement)

Refine, inspect, retain state

Refinement mutates the engine in place and keeps the cached image box of every cell that already exists — only newly created cells trigger a map evaluation. The per-round report's f-evaluation count proves it:

report = mg.refine(subdivisions=1, region="morse_sets")   # subdivide + recompute in place
# For a box map (BoxMap), every new leaf is evaluated exactly once and no old cell is
# re-evaluated, so the per-round f-evaluation count equals the number of new leaves:
assert report["f_evaluations"] == report["new_leaves"]     # unchanged cells are not re-evaluated

For a dataset map (BoxMapData), children that fall in an empty region are classified NO_DATA and are not counted as evaluations, so the identity above becomes f_evaluations == new_leaves - (NO_DATA children); the retention guarantee (old cells are never re-evaluated) is unchanged.

Conley index on demand

A Morse set typically does not isolate at a coarse resolution, so conley_index raises a recoverable cm.IndexPairInvalid (refine the offending set and retry). Guard the call:

try:
    ci = mg.conley_index(node=0)                       # RCF of the Leray-reduced f* over Z/5
    ci = mg.conley_index(node=0, want_homology=True)   # + relative homology H_*(P1, P0)
    ci = mg.conley_index(node=0, coefficients="Z")     # arithmetic over Q, integer homology
except cm.IndexPairInvalid:
    ...   # node 0 does not isolate at this resolution — refine it first

The full refine-to-isolate loop that drives a Morse set to a valid index pair and computes a genuine degree-1 Conley index lives in examples/conley_index.py.

Rigor contract

The library's own arithmetic is rigorous: every conversion from a floating-point image box to integer cells rounds outward, so the computed cell map is a genuine outer approximation of the true dynamics.

  • B1 — the box handed to your map is the cell's real box widened outward (directed rounding + k-ulp margin), so f(box_true(c)) ⊆ f(box_given(c)).
  • B2 — your enclosure box is converted to the union of every cell it meets under outward, closed-cube rounding, so enclosure ⊆ |F(c)|.

What the library cannot verify is your map itself. The rigor of the result therefore rests on the path you choose:

  • cm.BoxMap(f) — rigorous iff f is a true outer enclosure. f must map a box to a box that contains the image of every point in it: f(box) ⊇ image(box). The examples build these by interval arithmetic with outward rounding and each documents why the bound holds. (A libm caveat: bounding a transcendental like exp by a fixed outward ulp widening assumes the platform libm is accurate to ≤ 1 ulp — true on glibc ≥ 2.28 and the macOS system libm; a looser libm needs more ulps.)
  • cm.BoxMap(point_map, padding=[...]) — non-rigorous. A convenience that samples a point map at cell corners and inflates by a fixed padding. It is an outer approximation only if the padding dominates the map's sub-cell variation (this is not checked).
  • cm.BoxMapData(X, Y, padding=...) — non-rigorous unless dominated. Builds a cell map from sampled transitions x_i → y_i: the image of a cell is the convex hull of the images of the samples in it, inflated by padding. It is an outer approximation only if the padding (or a supplied lipschitz=... bound, which makes each image a ball around every sample) dominates the sub-cell variation.

Rigor propagates: given a valid box map, the cell map, Morse decomposition, and Conley indices all carry the outer-approximation guarantees of the combinatorial-dynamics literature.

API tour

Object / call Role
cm.Model(bounds, map, grid, threads=0) Binds a bounding box, a map spec, and a grid spec into the compute–inspect–refine engine. .size, .dimension, .bounds, .cells_under(key). threads: cell-map-build worker count (0 = all cores, default; 1 = serial) — results are bit-identical for any value; env CMGRAPH_NUM_THREADS overrides the auto default.
cm.BoxMap(f, batched=True) A box→box outer enclosure (or BoxMap(point_map, padding=[...]) for the non-rigorous point-map path).
cm.BoxMapData(X, Y, padding=..., lipschitz=..., borrow_rings=0) A dataset cell map from sampled transitions; empty-cell policy is NO_DATA by default (borrow_rings=0) or ring-budgeted collar borrowing (borrow_rings ≥ 1, requires a Lipschitz bound).
cm.Grid(size=[...]) / cm.Grid(subdivisions=k) Grid shape spec — anisotropic per-dimension sizes, or k uniform binary subdivisions.
model.morse_graph(conley_index=False) Compute the Morse graph (GIL released). Returns a MorseGraph handle.
mg.summary() / mg.morse_sets() / mg.cells(n) / mg.node_boxes(n) / mg.node_stats(n) Inspection: node/cell counts, per-node cell keys, per-node cell boxes, stats.
mg.order_pairs() / mg.reaches(p, q) The Morse-graph partial order (reachability on the condensation).
mg.refine(subdivisions= / to_level= / size=, region=, eval=, collar=, recompute=) Refine + recompute in place. region: None (whole grid), "morse_sets", "invariant_set", mg.morse_set(i) / mg.connections(i, j) handles, or an iterable of cell keys. to_level is idempotent. recompute=False batches rounds; settle with mg.recompute().
mg.conley_index(node, coefficients=None, want_homology=False, want_full_index_map=False) The homological Conley index of a node, on demand (see below). Raises cm.IndexPairInvalid when the node does not isolate.
mg.spurious(node, budget=, certify=) The spurious-set protocol: refine a node until its recurrence vanishes (spurious) or a budget is spent.
plot.morse_graph(mg, path=...) / plot.morse_sets(mg, dims=(0,1), path=...) Optional viz: Graphviz DOT and matplotlib (headless Agg) with shared node colours.

Conley-index output form

conley_index returns, per homology degree, the rational canonical form of the Leray reduction of the induced index map f*, computed over a field. The default field is 𝔽₅ (coefficients=None); pass coefficients="Z/p", ("Z/p", p), or an int prime p for another prime, or coefficients="Z" for arithmetic over ℚ with integer relative homology (torsion reported). want_homology=True adds H_*(P1, P0); want_full_index_map adds the full (unreduced) f* matrices. The RCF over any prime presents the shift- equivalence class of f* (Franks–Richeson 2000) canonically and index-pair-independently.

Practical scale and dimension limits

  • Dimension: typical d = 2–4; supported to d = 8, hard cap d = 16. The Morse-graph pipeline is viable to the cap; collar-based index pairs and cubical homology are practically confined to d ≲ 8–10 by the 3^d closure factors.
  • Cells: up to ~10⁸ leaves; use the implicit edge mode at large scale (edges dominate memory). Keys pack into 128 bits at these depths (Key128), narrower grids use uint64.

Performance & parallelism

The cell-map build parallelizes deterministically (Model(threads=...), default all cores): map evaluation over cells for C++ analytic oracles, plus CSR coverage assembly for any map. Results are bit-identical to serial for any thread count. Measured cell-map- build speedup ≥ 3× at 8 threads on a 6-physical-core Intel Mac (Leslie 2D/3D, ~10⁶ cells); Python-callback maps evaluate serially under the GIL (batch them; a C++ oracle is the hot path). Reproduce with python scripts/benchmark.py. Full numbers, latencies, memory-per- cell vs design §4, and the honest (d, depth, N) envelope: docs/performance.md.

Examples

All scripts are standalone, headless, and deterministic (python examples/<name>.py; outputs go to $CMGRAPH_EXAMPLE_OUTDIR, default a temp dir):

Script Shows
leslie_2d.py 2D Leslie map: rigorous box map, Morse graph + plots
leslie_3d.py 3D Leslie map: Morse sets projected + a 3D view
henon.py Hénon map: coarse recurrent set merging attractor + exterior saddle
leslie_dataset.py dataset-driven (BoxMapData) vs the analytic map
interactive_refinement.py compute → inspect → refine, state retention via the f-counter
skip_conley.py the skip-homology fast path vs eager index
conley_index.py a genuine degree-1 Conley index of the Hénon saddle

Documentation

Test

pytest tests/            # Python + example integration tests

C++ unit tests run through CTest from a -DCMGRAPH_BUILD_TESTS=ON CMake build.

Persistence (planned)

Saving and loading the full computed state (grid keys, image caches, Morse graph) is a planned future feature, not shipped in this version. The design does not preclude it: the flat-array data structures (design 01 §2.2 / §6) are laid out so a versioned save/load can be added without changing the core. For now, re-run the pipeline from the model spec.

License

MIT — see LICENSE.

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

cmgraph-0.0.1.tar.gz (486.8 kB view details)

Uploaded Source

Built Distributions

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

cmgraph-0.0.1-cp313-cp313-win_amd64.whl (393.0 kB view details)

Uploaded CPython 3.13Windows x86-64

cmgraph-0.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (449.2 kB view details)

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

cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl (394.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl (435.0 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

cmgraph-0.0.1-cp312-cp312-win_amd64.whl (392.9 kB view details)

Uploaded CPython 3.12Windows x86-64

cmgraph-0.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (449.1 kB view details)

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

cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl (394.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl (435.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

cmgraph-0.0.1-cp311-cp311-win_amd64.whl (389.9 kB view details)

Uploaded CPython 3.11Windows x86-64

cmgraph-0.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (450.0 kB view details)

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

cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl (392.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl (431.8 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

cmgraph-0.0.1-cp310-cp310-win_amd64.whl (388.6 kB view details)

Uploaded CPython 3.10Windows x86-64

cmgraph-0.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (449.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl (390.5 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl (430.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file cmgraph-0.0.1.tar.gz.

File metadata

  • Download URL: cmgraph-0.0.1.tar.gz
  • Upload date:
  • Size: 486.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cmgraph-0.0.1.tar.gz
Algorithm Hash digest
SHA256 64fcbb38ca81355de7cf86fc179a86f93cac5af8b609b0a4e43b9c2336b4020f
MD5 e2443bcab89bf862322003fd7df1b52d
BLAKE2b-256 99d58e061aa60965ec6bb750fddcb6848693be3185691c11002e693b1edec9d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1.tar.gz:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: cmgraph-0.0.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 393.0 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 cmgraph-0.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 16266ca32747b3143557f9408dc69eb2c980795d4ab43508082b6b823ca7bdb7
MD5 cdc3c152c66b2de242b414853780f5ed
BLAKE2b-256 6368f196017f97edc025e7a83073082b0c6faea119c4d4c08e245dab74ded3ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6f1e76a4c16fdda7ec6daec3f5cbc72cde1fb8aaf38ecb3a2374046eebcaeb9b
MD5 74072785ac535bd20acf4c70f9fc9e36
BLAKE2b-256 aa3b5c098ea5729408db763daa1b8cda66c52868ea7fe93d6035a6a3e98fead9

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b00b99a2b9a688f836d361b618a514e1110364b35b7728169cceae6998e288d4
MD5 ea6a78b0ffbbd6817f4f6261284dd078
BLAKE2b-256 a8ed48932b360b08b54e299dc93e92fdedfc00f21747a9937677a340000528ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 83cf2b2d594cf247b6011fc23c2dd1229ddeac5b786e4b3ef2d9346f419c3cb9
MD5 a91e4a9a040ad6ad03273c5caabbff47
BLAKE2b-256 62239f70a72e850d9768d49af215fe3e70f5a9a8e452ade9ac39ad97d3fdb2d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: cmgraph-0.0.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 392.9 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 cmgraph-0.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2595266921011be3ffd0ae0ed6c23e9b3b5be58ea3d82fb984c2c426f177592a
MD5 a3da3a4519f374cf003ed4116de607af
BLAKE2b-256 988ba250c3252b009b0564ca8dad55b9b11021fc57b5eacc5941d08bd535ce94

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e4dc377e37422edbc14bacdda4b08a2eb2bb29eb7cc46ecf35cab4ee48b26c7e
MD5 4e693f0666f3d5635e9647cf56c2ee33
BLAKE2b-256 10861c950f76a8ecae03360ddc368cdb29da9fccfb036ed2b0dc7976b33f0be1

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d0ea15a29513336f5fcc0d471999a30e6fd4fad0190b6a637209a04be174a52
MD5 8ae8f69d8e28aa705882a0533da42352
BLAKE2b-256 79f281f8e16f7d041aad515dd26ad2a075aa25a5d40b240b272b79fa9cbf4bfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c9dca6114b7a103a1c180c3e7ba529b8b454ac1e77f901c3832568a847963de2
MD5 3c72001a45d150125e678fd57024a94f
BLAKE2b-256 133930c6f37e0a1c0785a6449601b462ac91e432bf7dba59768291ca0bdf37b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: cmgraph-0.0.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 389.9 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 cmgraph-0.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2612dcc9285c9e004a9656d46f34bd49ae1f9c8093fcc860abeb4d4fbd8b4631
MD5 b0963ae7caa46ef2147a6ec8ef1bf3b1
BLAKE2b-256 bd70d54510576a65d741ef1d9be82422c1ed728abe0ccd250e45e9229babe3f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 87ee03e35e99e41ade23d10ce19b23f3429309bec9fdd8370a8cbfee4774bb39
MD5 778943c1f32b6e4dfe5c0ba16448a995
BLAKE2b-256 f207c0e7e2cf216c4f7e68dc306574a9ae1de95e03d9bb3e7521b9f3400fc3ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 adf4e3a45c0c8ff1341265b277aaaad0c708f6f7fa67b547f9fad88f1d315d8d
MD5 6fd7a4ad08778f80ebf2249e7c31fa5e
BLAKE2b-256 f60e431e75be255efd0d1f45cddc74fdb2fbe6ce51e790eb29d2d195f4d94015

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7dc173e11d8056c23bf6980c1d266b4bd77f1728ee73a1bfc93cdcef060ae92c
MD5 94eb289815c2a3672208be915fb53319
BLAKE2b-256 b31a3a70d1b645182ab22fbf361d57abcedcf9b3c71927954145e227b1276bbb

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: cmgraph-0.0.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 388.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cmgraph-0.0.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f69b08457d7ae0388491c10d7c1e5c13a84d47dd81f01c8053c06e41871a94c2
MD5 122e2e20968931cc0b1fa1e918ceb7e7
BLAKE2b-256 9da233e4c698c4a48fe2ce2b858d9d9a955ce8c25768950ace4c741db49b45b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d36bb09600ee7b547983843007ee3f90b69ae25869968fa3ff8cd995b9f862eb
MD5 0212cc669a568da51047c591e4979315
BLAKE2b-256 0944318dda700c7fb8ad7c273bf0aa470baaa1751ccafe32c72b3252d761adae

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f00e62d6cbbedaaa273d8316e0704c8818e94fcde651029ab2299abd5a2356a
MD5 769d471ffcd032a0904fbe4e530718f2
BLAKE2b-256 b33bcf44285a60f01dfdd6373baaa28bf20270f31d85ea568a4725ab5db30480

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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

File details

Details for the file cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5bc4b6168c0d29e06a94f930f2abba684db1eb29273c3afafefe1fe8f4880a8f
MD5 102262523078dbd712bb7918aa19a35d
BLAKE2b-256 a9a244313ecf479c4d063544496dccc7397c6a902e9d060f1c95e45dc63c4254

See more details on using hashes here.

Provenance

The following attestation bundles were made for cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl:

Publisher: publish.yml on marciogameiro/cmgraph

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