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 cmgraphneeds no third-party runtime dependency.numpyis 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 optionalvizextra:import cmgraphandimport cmgraph.plotboth succeed without them, and each plot function raises a clearpip 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 frompyproject.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 ifffis a true outer enclosure.fmust 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 likeexpby 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 transitionsx_i → y_i: the image of a cell is the convex hull of the images of the samples in it, inflated bypadding. It is an outer approximation only if the padding (or a suppliedlipschitz=...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 tod = 8, hard capd = 16. The Morse-graph pipeline is viable to the cap; collar-based index pairs and cubical homology are practically confined tod ≲ 8–10by the3^dclosure 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 useuint64.
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
docs/index.md— documentation entry point.- Design records (the theory reference):
docs/design/01-data-structures.md,02-engine.md,03-index-pair-isolation.md,04-conley-index-map.md. docs/annotations.md— the A1–A10 structural-annotation audit map.docs/performance.md— measured parallel speedup, latencies, and the memory/scale envelope (reproduce withscripts/benchmark.py).
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64fcbb38ca81355de7cf86fc179a86f93cac5af8b609b0a4e43b9c2336b4020f
|
|
| MD5 |
e2443bcab89bf862322003fd7df1b52d
|
|
| BLAKE2b-256 |
99d58e061aa60965ec6bb750fddcb6848693be3185691c11002e693b1edec9d5
|
Provenance
The following attestation bundles were made for cmgraph-0.0.1.tar.gz:
Publisher:
publish.yml on marciogameiro/cmgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1.tar.gz -
Subject digest:
64fcbb38ca81355de7cf86fc179a86f93cac5af8b609b0a4e43b9c2336b4020f - Sigstore transparency entry: 2169625141
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16266ca32747b3143557f9408dc69eb2c980795d4ab43508082b6b823ca7bdb7
|
|
| MD5 |
cdc3c152c66b2de242b414853780f5ed
|
|
| BLAKE2b-256 |
6368f196017f97edc025e7a83073082b0c6faea119c4d4c08e245dab74ded3ac
|
Provenance
The following attestation bundles were made for cmgraph-0.0.1-cp313-cp313-win_amd64.whl:
Publisher:
publish.yml on marciogameiro/cmgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp313-cp313-win_amd64.whl -
Subject digest:
16266ca32747b3143557f9408dc69eb2c980795d4ab43508082b6b823ca7bdb7 - Sigstore transparency entry: 2169625652
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
- Download URL: cmgraph-0.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 449.2 kB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f1e76a4c16fdda7ec6daec3f5cbc72cde1fb8aaf38ecb3a2374046eebcaeb9b
|
|
| MD5 |
74072785ac535bd20acf4c70f9fc9e36
|
|
| BLAKE2b-256 |
aa3b5c098ea5729408db763daa1b8cda66c52868ea7fe93d6035a6a3e98fead9
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
6f1e76a4c16fdda7ec6daec3f5cbc72cde1fb8aaf38ecb3a2374046eebcaeb9b - Sigstore transparency entry: 2169625549
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 394.6 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b00b99a2b9a688f836d361b618a514e1110364b35b7728169cceae6998e288d4
|
|
| MD5 |
ea6a78b0ffbbd6817f4f6261284dd078
|
|
| BLAKE2b-256 |
a8ed48932b360b08b54e299dc93e92fdedfc00f21747a9937677a340000528ef
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
b00b99a2b9a688f836d361b618a514e1110364b35b7728169cceae6998e288d4 - Sigstore transparency entry: 2169625241
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 435.0 kB
- Tags: CPython 3.13, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83cf2b2d594cf247b6011fc23c2dd1229ddeac5b786e4b3ef2d9346f419c3cb9
|
|
| MD5 |
a91e4a9a040ad6ad03273c5caabbff47
|
|
| BLAKE2b-256 |
62239f70a72e850d9768d49af215fe3e70f5a9a8e452ade9ac39ad97d3fdb2d1
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp313-cp313-macosx_10_13_x86_64.whl -
Subject digest:
83cf2b2d594cf247b6011fc23c2dd1229ddeac5b786e4b3ef2d9346f419c3cb9 - Sigstore transparency entry: 2169625815
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2595266921011be3ffd0ae0ed6c23e9b3b5be58ea3d82fb984c2c426f177592a
|
|
| MD5 |
a3da3a4519f374cf003ed4116de607af
|
|
| BLAKE2b-256 |
988ba250c3252b009b0564ca8dad55b9b11021fc57b5eacc5941d08bd535ce94
|
Provenance
The following attestation bundles were made for cmgraph-0.0.1-cp312-cp312-win_amd64.whl:
Publisher:
publish.yml on marciogameiro/cmgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp312-cp312-win_amd64.whl -
Subject digest:
2595266921011be3ffd0ae0ed6c23e9b3b5be58ea3d82fb984c2c426f177592a - Sigstore transparency entry: 2169625333
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
- Download URL: cmgraph-0.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 449.1 kB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4dc377e37422edbc14bacdda4b08a2eb2bb29eb7cc46ecf35cab4ee48b26c7e
|
|
| MD5 |
4e693f0666f3d5635e9647cf56c2ee33
|
|
| BLAKE2b-256 |
10861c950f76a8ecae03360ddc368cdb29da9fccfb036ed2b0dc7976b33f0be1
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
e4dc377e37422edbc14bacdda4b08a2eb2bb29eb7cc46ecf35cab4ee48b26c7e - Sigstore transparency entry: 2169625682
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 394.6 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d0ea15a29513336f5fcc0d471999a30e6fd4fad0190b6a637209a04be174a52
|
|
| MD5 |
8ae8f69d8e28aa705882a0533da42352
|
|
| BLAKE2b-256 |
79f281f8e16f7d041aad515dd26ad2a075aa25a5d40b240b272b79fa9cbf4bfb
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
9d0ea15a29513336f5fcc0d471999a30e6fd4fad0190b6a637209a04be174a52 - Sigstore transparency entry: 2169625598
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 435.0 kB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c9dca6114b7a103a1c180c3e7ba529b8b454ac1e77f901c3832568a847963de2
|
|
| MD5 |
3c72001a45d150125e678fd57024a94f
|
|
| BLAKE2b-256 |
133930c6f37e0a1c0785a6449601b462ac91e432bf7dba59768291ca0bdf37b6
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp312-cp312-macosx_10_13_x86_64.whl -
Subject digest:
c9dca6114b7a103a1c180c3e7ba529b8b454ac1e77f901c3832568a847963de2 - Sigstore transparency entry: 2169625712
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2612dcc9285c9e004a9656d46f34bd49ae1f9c8093fcc860abeb4d4fbd8b4631
|
|
| MD5 |
b0963ae7caa46ef2147a6ec8ef1bf3b1
|
|
| BLAKE2b-256 |
bd70d54510576a65d741ef1d9be82422c1ed728abe0ccd250e45e9229babe3f3
|
Provenance
The following attestation bundles were made for cmgraph-0.0.1-cp311-cp311-win_amd64.whl:
Publisher:
publish.yml on marciogameiro/cmgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp311-cp311-win_amd64.whl -
Subject digest:
2612dcc9285c9e004a9656d46f34bd49ae1f9c8093fcc860abeb4d4fbd8b4631 - Sigstore transparency entry: 2169625373
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
- Download URL: cmgraph-0.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 450.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87ee03e35e99e41ade23d10ce19b23f3429309bec9fdd8370a8cbfee4774bb39
|
|
| MD5 |
778943c1f32b6e4dfe5c0ba16448a995
|
|
| BLAKE2b-256 |
f207c0e7e2cf216c4f7e68dc306574a9ae1de95e03d9bb3e7521b9f3400fc3ce
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
87ee03e35e99e41ade23d10ce19b23f3429309bec9fdd8370a8cbfee4774bb39 - Sigstore transparency entry: 2169625765
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 392.5 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
adf4e3a45c0c8ff1341265b277aaaad0c708f6f7fa67b547f9fad88f1d315d8d
|
|
| MD5 |
6fd7a4ad08778f80ebf2249e7c31fa5e
|
|
| BLAKE2b-256 |
f60e431e75be255efd0d1f45cddc74fdb2fbe6ce51e790eb29d2d195f4d94015
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
adf4e3a45c0c8ff1341265b277aaaad0c708f6f7fa67b547f9fad88f1d315d8d - Sigstore transparency entry: 2169625491
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 431.8 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7dc173e11d8056c23bf6980c1d266b4bd77f1728ee73a1bfc93cdcef060ae92c
|
|
| MD5 |
94eb289815c2a3672208be915fb53319
|
|
| BLAKE2b-256 |
b31a3a70d1b645182ab22fbf361d57abcedcf9b3c71927954145e227b1276bbb
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp311-cp311-macosx_10_9_x86_64.whl -
Subject digest:
7dc173e11d8056c23bf6980c1d266b4bd77f1728ee73a1bfc93cdcef060ae92c - Sigstore transparency entry: 2169625872
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f69b08457d7ae0388491c10d7c1e5c13a84d47dd81f01c8053c06e41871a94c2
|
|
| MD5 |
122e2e20968931cc0b1fa1e918ceb7e7
|
|
| BLAKE2b-256 |
9da233e4c698c4a48fe2ce2b858d9d9a955ce8c25768950ace4c741db49b45b5
|
Provenance
The following attestation bundles were made for cmgraph-0.0.1-cp310-cp310-win_amd64.whl:
Publisher:
publish.yml on marciogameiro/cmgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp310-cp310-win_amd64.whl -
Subject digest:
f69b08457d7ae0388491c10d7c1e5c13a84d47dd81f01c8053c06e41871a94c2 - Sigstore transparency entry: 2169625934
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
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
- Download URL: cmgraph-0.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 449.8 kB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d36bb09600ee7b547983843007ee3f90b69ae25869968fa3ff8cd995b9f862eb
|
|
| MD5 |
0212cc669a568da51047c591e4979315
|
|
| BLAKE2b-256 |
0944318dda700c7fb8ad7c273bf0aa470baaa1751ccafe32c72b3252d761adae
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
d36bb09600ee7b547983843007ee3f90b69ae25869968fa3ff8cd995b9f862eb - Sigstore transparency entry: 2169625430
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 390.5 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f00e62d6cbbedaaa273d8316e0704c8818e94fcde651029ab2299abd5a2356a
|
|
| MD5 |
769d471ffcd032a0904fbe4e530718f2
|
|
| BLAKE2b-256 |
b33bcf44285a60f01dfdd6373baaa28bf20270f31d85ea568a4725ab5db30480
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp310-cp310-macosx_11_0_arm64.whl -
Subject digest:
6f00e62d6cbbedaaa273d8316e0704c8818e94fcde651029ab2299abd5a2356a - Sigstore transparency entry: 2169625190
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type:
File details
Details for the file cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 430.6 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5bc4b6168c0d29e06a94f930f2abba684db1eb29273c3afafefe1fe8f4880a8f
|
|
| MD5 |
102262523078dbd712bb7918aa19a35d
|
|
| BLAKE2b-256 |
a9a244313ecf479c4d063544496dccc7397c6a902e9d060f1c95e45dc63c4254
|
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
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cmgraph-0.0.1-cp310-cp310-macosx_10_9_x86_64.whl -
Subject digest:
5bc4b6168c0d29e06a94f930f2abba684db1eb29273c3afafefe1fe8f4880a8f - Sigstore transparency entry: 2169625272
- Sigstore integration time:
-
Permalink:
marciogameiro/cmgraph@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/marciogameiro
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b42605a3efc41eafc3acffca564ccde4bf88fa2b -
Trigger Event:
push
-
Statement type: