Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Hedonic

hedonic detects communities in igraph graphs as a hedonic game: wrap a graph in Game and call community_hedonic(), which returns a disjoint partition at a Nash equilibrium of the game.

The detector is a small C core compiled into the package (hedonic._core). The only dependencies are the standard igraph package and NumPy, so hedonic installs next to any igraph 1.x you already use. Python 3.12 or newer.

Overlapping communities (covers) are hedonic 2.

TL;DR

pip install hedonic              # the library
pip install "hedonic[cli]"       # plus the command line that reproduces the paper
from hedonic import Game

h = Game(g)  # g: an igraph graph (convert NetworkX, edge lists, ... through igraph)
partition = h.community_hedonic(seed=0)  # an igraph.VertexClustering
  • from hedonic import Game is the public API.
  • Each vertex ends in exactly one community; the result is an igraph.VertexClustering.
  • Every call runs until no vertex can certainly improve by moving: the result is an equilibrium of the game, with a certified bound on what any vertex could still gain (equilibrium_slack). There is nothing to tune: no iteration budget, no round cap, no tolerance.
  • Every call starts afresh: from singletons, unless you pass initial_membership (or ask for a random start with max_communities, or set a community-count limit). The result is also stored in h.memberships; pass initial_membership=h.memberships to continue from it (see Start states).

What this is

A hedonic game is a coalition-formation game: each vertex is a player, each community is a coalition, and a player prefers the coalition that improves its payoff. Here the payoff is the Constant Potts Model (CPM) score at a resolution γ (by default, the weighted density: the total edge weight over the number of vertex pairs): a vertex gains from its neighbours inside a community and pays γ for every member.

community_hedonic() visits the vertices in random order and lets each one take its best response: move to the community it prefers. After a move it revisits the vertex's neighbours, and it stops only when every vertex has been visited, without moving, since the last move. That is a Nash equilibrium: no vertex can improve its payoff alone. It is the equilibrium this process reaches from its start, not necessarily the partition of highest potential, and another seed can reach another one.

The computation is in floating point, so the core proves each step instead of trusting it: every payoff it compares carries a rigorous bound of its rounding error, and a vertex moves only when its computed gain exceeds that bound. Every move therefore raises the exact CPM potential, and the process always stops. The result reports equilibrium_slack in result._hedonic_provenance: no vertex can raise its exact payoff by more than the slack times the total edge weight (normalized like the quality). It is exactly 0 whenever no deviation's exact gain can be positive: always when the arithmetic is exact (for instance unit weights at resolution 0, 1/2 or 1), and often otherwise (with integer weights, for instance, when every vertex's best deviation is certainly worse). The result is then an exact Nash equilibrium. On complete DBLP and Amazon it is about 1e-21. native/README.md gives the bounds and the termination argument.

Game is an igraph.Graph subclass: after wrapping, the usual igraph API (h.vcount(), h.density(), shortest paths, and so on) is still available.

Installation

python -m pip install hedonic

That is the library alone (igraph and NumPy). Two extras add more:

  • python -m pip install "hedonic[metrics]" adds SciPy, which the scores built on a one-to-one matching need (see Scoring against a reference).
  • python -m pip install "hedonic[cli]" adds the command line (hedonic and hedonic-exp) and what its experiments need (SciPy, pandas, Matplotlib, PyArrow, DuckDB and tqdm). The command line runs on macOS and Linux; on Windows the package installs the library alone.

With uv:

uv add hedonic

Wheels are built for Linux (x86_64, aarch64), macOS (x86_64, arm64) and Windows (AMD64, ARM64). Elsewhere pip builds the C core from the source distribution, which needs a C11 compiler.

Tutorial

1. Wrap a graph as a Game

Game copies an existing igraph.Graph, or is constructed the same way as an igraph graph. Other libraries convert through igraph first.

import igraph as ig
from hedonic import Game

# Famous example graph (Zachary's karate club)
h = Game(ig.Graph.Famous("Zachary"))

# Equivalent shortcut: Graph class methods return a Game
h = Game.Famous("Zachary")

# Edge list
h = Game(n=4, edges=[(0, 1), (1, 2), (2, 3), (3, 0)])

# Adjacency matrix
h = Game(ig.Graph.Adjacency([[0, 1, 1], [1, 0, 1], [1, 1, 0]], mode="undirected"))

# NetworkX (networkx is not a dependency)
import networkx as nx

h = Game(ig.Graph.from_networkx(nx.karate_club_graph()))

Wrapping preserves the graph's directionality and its vertex, edge and graph attributes, and to_igraph() preserves them on the way back. The detector requires an undirected graph without self-loops, so a directed input or a loop is rejected explicitly rather than silently converted (h.simplify(multiple=False, loops=True) removes the loops). Parallel edges are accepted and count as one edge whose weight is their sum.

2. Detect communities

h = Game.Famous("Zachary")

partition = h.community_hedonic(seed=0)
print(partition.membership[:8])  # one community id per vertex
print(partition.sizes())         # community sizes

for community in partition:      # communities as lists of vertex ids
    print(list(community))

Start states

initial_membership Start state
None (default) singletons; a random start with max_communities; a feasible start under count limits
one label per vertex that partition
one list of labels per vertex each vertex keeps the label it prefers (below)

Labels are non-negative integers; a start whose labels have gaps ([5, 9, 5]) is renumbered in label order ([0, 1, 0]). An igraph VertexClustering (or VertexCover) of a graph with the same vertices is accepted too.

Every call stores its result in h.memberships, one list of labels per vertex, and never reads it back by itself. To continue from the last equilibrium, pass it:

h.community_hedonic(seed=0)
again = h.community_hedonic(initial_membership=h.memberships, seed=1)

When a start gives a vertex more than one label, the vertex keeps the one it prefers (ranked by the payoff of each community on the start, ties to the larger community, then the smaller label) and the game runs to an equilibrium from there. _hedonic_provenance["projected_vertices"] counts the vertices that had to choose.

3. Parameters

Parameter Default Role
initial_membership None The start; see Start states
max_memberships 1 Communities per vertex; 1 (a partition) is the only value hedonic 1 accepts
resolution weighted density CPM γ: total edge weight over the number of vertex pairs (the density of an unweighted graph). Smaller γ gives larger communities
allow_isolation False Allow a vertex to open a new, empty community
max_communities None Random start over [0, max_communities) when no start is given; without isolation the result then has at most that many communities
edge_weights unweighted Edge weights (sequence or edge-attribute name; an attribute called weight is used only when named)
node_weights unweighted Vertex weights (sequence or vertex-attribute name) in the crowding term γ w_u w_v
max_total_communities None At most K occupied communities, in the result and in every state visited
n_communities None Exactly K occupied communities
seed None Seed of the visiting order (see below)

Everything after initial_membership is keyword-only.

Reproducible runs. With seed=, the visiting order is drawn from random.Random(seed), so the same graph, parameters, start and seed give the same result:

a = h.community_hedonic(seed=7)
b = h.community_hedonic(seed=7)
assert a.membership == b.membership

Without a seed, the order is drawn from Python's random module, which is also python-igraph's default generator, so random.seed(...) before the call makes it repeatable too.

Community-count limits. max_total_communities=K keeps the number of occupied communities at most K, and n_communities=K keeps it exactly K:

two = h.community_hedonic(n_communities=2)
few = h.community_hedonic(max_total_communities=4)

Both must be positive integers, and n_communities must not exceed max_total_communities. Without a start state, a deterministic feasible start is built; a supplied start that violates a limit (after each vertex keeps one label) is rejected, never silently repaired. The result is then an equilibrium over the moves the limit allows.

What the result carries. Besides the communities, a result has _hedonic_provenance (versions, effective parameters, count mode, and equilibrium_slack) and _hedonic_native_quality, the quality of the returned state: (Φ − γ Σ_v n_v² / 2) / W for its exact potential Φ (a sum over pairs of vertices), the vertex weights n_v and the total edge weight W; the constant term is each vertex's own crowding, the same for every state.

4. Scoring against a reference

evaluate_against scores the stored result against a known partition or list of communities:

h = Game.Famous("Zachary")
h.community_hedonic(seed=0)
truth = [0] * 17 + [1] * 17          # a flat partition, a list of communities or a VertexClustering
print(h.evaluate_against(truth, method="f1"))

Methods: f1 (symmetric best match), one_to_one_f1, jaccard, omega, node_micro_f1 and size_weighted_community_f1; the two built on a one-to-one matching (one_to_one_f1, node_micro_f1) need SciPy (the metrics extra). omega is exact when the graph has at most 100,000 vertex pairs and otherwise estimated from that many sampled pairs (omega_sample_size, omega_seed). A flat reference may use any hashable labels, but every vertex needs one (None and NaN are refused); a list of lists is read as communities, each a list of vertices of the graph, and the communities may overlap. Communities with the same members count once, on both sides.

A reference that labels only part of the graph is scored against the whole result by default. restrict_to_reference=True first drops the vertices the reference does not contain from every detected community (hedonic.metrics.restrict_cover), the usual convention for partial ground truth:

h.evaluate_against([[0, 1, 2], [33, 32]], method="f1", restrict_to_reference=True)

The underlying functions are in hedonic.metrics (also reachable as hedonic.metrics after import hedonic).

5. Worked example

import igraph as ig
from hedonic import Game

h = Game(ig.Graph.Famous("Zachary"))

partition = h.community_hedonic(seed=0)
print(f"{h.vcount()} vertices, {h.ecount()} edges")
print(f"communities: {len(partition)}, sizes {partition.sizes()}")
print(f"equilibrium slack: {partition._hedonic_provenance['equilibrium_slack']}")

Command line: reproducing the disjoint paper

pip install "hedonic[cli]" installs two commands. hedonic is the front door for runs; hedonic-exp list names the analysis and utility commands.

hedonic guide                    # where you are, what to do next, and the topics
hedonic show disjoint            # the presets: grids, methods, time and disk estimates

The paper's experiment is the stochastic block model (SBM) benchmark: 5 community counts × 10 within-community edge probabilities × 10 difficulties × 100 network seeds = 50,000 graphs of 1,020 vertices, each started from noisy partitions at 5 noise levels × 10 seeds, with 10 seeded restarts of Leiden and Hedonic per start.

hedonic run disjoint --preset smoke             # the whole pipeline in seconds
hedonic run disjoint --preset paper --dry-run   # the paper's plan, time and disk
hedonic run disjoint --preset paper             # durable and resumable, about a day on 8 workers
hedonic run queue disjoint --dry-run            # the queue's plan and what is already done
hedonic run queue disjoint                      # the same as a queue: the smoke run, then the paper's grid

Every grid value is also a flag (--nodes, --communities, --p-in, --difficulty, --seeds, --noises, --partition-seeds, --methods, --restarts, --workers, --partitions); hedonic run disjoint --help lists them, and hedonic run disjoint alone opens a wizard in a terminal.

Its methods are Hedonic (this package's detector), stock igraph's CPM Leiden (community_leiden, the paper's full Leiden), and four references (ground truth, Mirror, One Pass, spectral). Graphs are regenerated from their seeds and never stored, so nothing is downloaded.

The store, the statistics and the figures. A run writes a Parquet result store (one shard per graph, one row per detector run), then the logical-cell table (plot_table.parquet), the paper's five figures (figures/: gt_robustness, noise, n_communities, acc_robustness, acc_efficiency) and every statistic of the paper's Empirical Analysis (stats/: summary.md, paper_stats.json, tables.tex and CSV tables). The same steps are available one at a time:

hedonic-exp disjoint-store STORE --progress      # shards, rate, ETA, disk
hedonic-exp disjoint-store STORE --sql "SELECT method, noise, avg(adjusted_rand) FROM cells GROUP BY ALL ORDER BY ALL"
hedonic-exp disjoint-store STORE --verify        # regenerate graphs and replay sampled rows from their seeds
hedonic-exp disjoint-stats --data STORE          # the paper's statistics
hedonic-exp plots --data STORE/plot_table.parquet --output_dir FIGURES

Each method's results carry their own identity (its call, parameters, restarts and the build that computes it), so a store that already holds some methods keeps them and runs only the missing or changed ones; a store made by another build is refused before anything is written, and --rerun METHOD or --reuse-from STORE (which first replays a sample with this build) says what to do with it.

Runs. Runs execute detached (tmux when available, else a background process; on macOS under caffeinate -i), so closing the terminal or pressing Ctrl-C does not stop them: hedonic run list, status, attach, logs, stop NAME and resume NAME manage them, and hedonic run check NAME replays a sample of a run's rows from their seeds and compares them. A queue skips what its files show as finished and resumes the rest, so running it again continues it. Runs go to ~/Databases/Hedonic/Disjoint (HEDONIC_DISJOINT_OUTPUT_DIR, or hedonic config set disjoint_output_root PATH), a queue to <disjoint_output_root>/disjoint-queue (--root DIR), and the registry of runs to ~/.cache/hedonic/runs (HEDONIC_RUNS_DIR). hedonic config example prints every setting, and hedonic update compares the installed version with PyPI (it upgrades only with --yes).

Interactive explainer

The web/ directory contains an educational website that explains the disjoint hedonic game visually: friends and strangers on a balance scale, the resolution parameter, the Familiarity Index, the decision tree, the metagraph of all partitions of a four-vertex graph, and better-response walks to a stable equilibrium. It also hosts documentation generated from this package's source. It is a small browser-side teaching model, not a replacement for the detector. From the repository root:

npm install
npm run dev

The GitHub Actions workflow .github/workflows/pages.yml tests, builds and publishes it to GitHub Pages; see web/README.md for details.

Development

git clone https://github.com/lucaslopes/hedonic.git
cd hedonic
python -m pip install -e ".[cli]" pytest
python -m pytest
make -C native test            # the C core's own tests (sanitizers)
python tools/native_tests.py   # bit-level pins, as the wheel builds run them

The C core lives in native/ (include/hedonic_core.h is its API, native/README.md its design) and is compiled by setup.py into hedonic._core. Rounding is fixed by the source (explicit fused multiply-adds, computed by the instruction or the core's own correctly rounded soft fma, never the C library's; no contraction), so results are identical across platforms; the wheel workflow (.github/workflows/wheels.yml) checks this on every platform it builds for.

Citation

The game and the SBM benchmark are those of:

Lucas Lopes Felipe, Konstantin Avrachenkov and Daniel Sadoc Menasché. From Leiden to Pleasure Island: The Constant Potts Model for community detection as a hedonic game. Physica A: Statistical Mechanics and its Applications 680, 130989 (2025). Preprint: arXiv:2509.03834.

@article{felipe2025leiden,
  title   = {From Leiden to Pleasure Island: The Constant Potts Model for community detection as a hedonic game},
  author  = {Felipe, Lucas Lopes and Avrachenkov, Konstantin and Menasch{\'e}, Daniel Sadoc},
  journal = {Physica A: Statistical Mechanics and its Applications},
  volume  = {680},
  pages   = {130989},
  year    = {2025}
}

License

This project is distributed under the GNU General Public License, version 3 or later. See LICENSE. The C core was written for this package and contains no code from igraph or other libraries; the binding implements the MT19937 generator step (Matsumoto and Nishimura) as CPython's random module does, so that seeded runs draw exactly what random.Random would.

Metadata

Release files for hedonic 1.0.0rc1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hedonic 1.0.0rc1
File Size Uploaded Provenance
hedonic-1.0.0rc1.tar.gz 312.6 kB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for hedonic 1.0.0rc1
File
hedonic-1.0.0rc1-cp314-cp314-win_arm64.whl CPython 3.14 CPython 3.14 Windows ARM64 Details
hedonic-1.0.0rc1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
hedonic-1.0.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
hedonic-1.0.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
hedonic-1.0.0rc1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
hedonic-1.0.0rc1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
hedonic-1.0.0rc1-cp314-cp314-macosx_11_0_x86_64.whl CPython 3.14 CPython 3.14 macOS 11.0+ x86-64 Details
hedonic-1.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
hedonic-1.0.0rc1-cp313-cp313-win_arm64.whl CPython 3.13 CPython 3.13 Windows ARM64 Details
hedonic-1.0.0rc1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
hedonic-1.0.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
hedonic-1.0.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
hedonic-1.0.0rc1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
hedonic-1.0.0rc1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
hedonic-1.0.0rc1-cp313-cp313-macosx_11_0_x86_64.whl CPython 3.13 CPython 3.13 macOS 11.0+ x86-64 Details
hedonic-1.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
hedonic-1.0.0rc1-cp312-cp312-win_arm64.whl CPython 3.12 CPython 3.12 Windows ARM64 Details
hedonic-1.0.0rc1-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
hedonic-1.0.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
hedonic-1.0.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
hedonic-1.0.0rc1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
hedonic-1.0.0rc1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
hedonic-1.0.0rc1-cp312-cp312-macosx_11_0_x86_64.whl CPython 3.12 CPython 3.12 macOS 11.0+ x86-64 Details
hedonic-1.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details

Total release size: 7.2 MB

Release files / hedonic-1.0.0rc1.tar.gz

Download URL hedonic-1.0.0rc1.tar.gz
Size 312.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c31573675d731be86a36f142aaee28412e594d4f711cac9ce18794228e16100f
BLAKE2b-256 checksum
How to use checksums
3637e481d268a91141e25a01b64fe1456450353f1321101fd28156296c610d38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-win_arm64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-win_arm64.whl
Size 273.7 kB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
5f58347f316d0c741ed44af2078af2333b67adc6ecbfa8b86c6b52757d68088b
BLAKE2b-256 checksum
How to use checksums
c9c9483583ee924c6e205eaa7ef214fb49868417c36e2e52c88fff3a8ebaeda3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-win_amd64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-win_amd64.whl
Size 290.2 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
98cbc5eb4ae5c577c8832d4d1a9aacfaf534d9612094d6297f55666657d70633
BLAKE2b-256 checksum
How to use checksums
71e834f09683b72daac916f821487884a187d4eb055697e3ef1deaf48d43e8e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-musllinux_1_2_x86_64.whl
Size 317.7 kB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
3824dadc06c2f9d59b15955493fa6764599b776c0ad06c81e7d5fc4c9c12c981
BLAKE2b-256 checksum
How to use checksums
5313b9bd813528c5cffd00fa1fd41a0dae3d0c490ef0a3447e77243763913fda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-musllinux_1_2_aarch64.whl
Size 278.5 kB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
40a72ca99dfbea02a162d2091bc050222f7ff2fc2568120d9c7253b713c2e78f
BLAKE2b-256 checksum
How to use checksums
e72a0fb27d813e032c02bb1f01b9c429031da35b379ea39a9a933e90666edcbe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 317.0 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
58bc2e945b8b41208a8b8571d51bc73a97b46a0695c3fc63e63dd5c78c25f3f4
BLAKE2b-256 checksum
How to use checksums
de423baa5083b0dbb71b9f70c98833f6f7f798ede64abb32e9e14c5cae28eec1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 278.8 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
73d100f5e3ab045e14f775add0a98a25de056de7bfc2d431031cae16147fbc76
BLAKE2b-256 checksum
How to use checksums
9f1e5ebe8f8912a65389fc54f836c5f3869df9ceb5a399c4db8c1b0dba210fe8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-macosx_11_0_x86_64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-macosx_11_0_x86_64.whl
Size 285.2 kB
Tags CPython 3.14 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
3d4d8a94fc84292a1252fe5ef083bc17b0e3a57955e023cb81525c4a4c7cdd67
BLAKE2b-256 checksum
How to use checksums
4cb9cfbed27b5aa84ba6847f25423a19af191d3687a5cb75b535078d2076de04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl

Download URL hedonic-1.0.0rc1-cp314-cp314-macosx_11_0_arm64.whl
Size 270.0 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bb8f5b2aadfacfc00dc3620b7d2b171f9d2c4fd23b6a6b1d9f40f42721308234
BLAKE2b-256 checksum
How to use checksums
8b09f20bb1df22a4ddafa25be4fb3ac689e49fc0c7bee8b112cf2eb15f37107f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-win_arm64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-win_arm64.whl
Size 271.6 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
a73e34380dfdd76d4b6deedc7e1a8bfc86ed3c91149598ff434a01b365afffc2
BLAKE2b-256 checksum
How to use checksums
4c5da4e213c6a613de839cb2db19b4e2a1a5bb97a9afb62c6fd28678f3a6a76e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-win_amd64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-win_amd64.whl
Size 288.5 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
13a717d8ee5b5266d13fe9d73768ad0e277ea6c5ef2b5066d1cf79d1a032a02f
BLAKE2b-256 checksum
How to use checksums
fb920685c9067e6d60b7e2940150eb355f89756834cde66906178b3e30fd595b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-musllinux_1_2_x86_64.whl
Size 317.6 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
c91cc1a2d7a1b44e5760df354f9cbc94005a7e6b54922326cad1ffebea415a6b
BLAKE2b-256 checksum
How to use checksums
21f78d4bdca4c76e9a1604cdf0d4449170deb7309eef64b90ca95a08434df4da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-musllinux_1_2_aarch64.whl
Size 278.5 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
980dfda5f1d31bdf9501939d2c34ef6d889ec998cd0574e4e6f2cedb0924e8b9
BLAKE2b-256 checksum
How to use checksums
b89027e2d9e41feef7565ab3a15dc7256a1de26d6730e156515e9ad3c9b02e04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 317.0 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e92289af635df9bbf8dd6976e874a87b8983d1036f6d2e7aac23a3fc6fe2ca8d
BLAKE2b-256 checksum
How to use checksums
9e77f5b8bb45bcc0e50e637472e610a3bb6371af83a438143b09878c52489788
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 278.7 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f0012c359cb618bcfb8575f13e65acf8d41b622d5720c297af7f7fdc953fcfb8
BLAKE2b-256 checksum
How to use checksums
6d2cc87eb5e2d31582ae553e3a747cabf7fa720d4521afa395bdb89803f951f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-macosx_11_0_x86_64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-macosx_11_0_x86_64.whl
Size 285.2 kB
Tags CPython 3.13 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
02ba1c3fc14fa77d6d7d573411768a91bd80c81e9fd75ea0a648be2378917ede
BLAKE2b-256 checksum
How to use checksums
8abc38adc6a1f80669fc799deccb59131e8db797cec647be6e152e422197f538
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl

Download URL hedonic-1.0.0rc1-cp313-cp313-macosx_11_0_arm64.whl
Size 270.0 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f001d67600153db5b56fa3326abcaec7a1da467b52d2d523ba49175b55ff1505
BLAKE2b-256 checksum
How to use checksums
5debde00548521319eb37c96bc0df04d4a054b8000d2de23b28f8f2ebbe2a3a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-win_arm64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-win_arm64.whl
Size 271.6 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
d18c0515fb3c6b031ab98f530fec3e8c6218ece647cf93871f9bd9159de09f59
BLAKE2b-256 checksum
How to use checksums
7a3b87988e387ebad63656b6d658a9f1bc2bd0f9d3a1bd9fb90995b1efe28847
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-win_amd64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-win_amd64.whl
Size 288.5 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
3a2fc4d91419af66ff30c79662b3bc1e9e5be062e079439b2b2d793266ddd4a3
BLAKE2b-256 checksum
How to use checksums
bdbeb476421d30dd1174f57fb5ccb28f52d2579985fbd3dc6b1e6cd3ad5a565e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-musllinux_1_2_x86_64.whl
Size 317.7 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
6d4cad1771b9faa9b1bad6a5d3f9bbdf79b60a29cc9ce393a4f20460854e7b25
BLAKE2b-256 checksum
How to use checksums
6718b7603179c2ef40488786b168089654b332684657fd77f19de7c4e72bcecf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-musllinux_1_2_aarch64.whl
Size 278.5 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
3aa5a7972e306175bb28fe091bbdb0a683fe697723e72fafcfeb579d66cd7643
BLAKE2b-256 checksum
How to use checksums
14a448605eca51a933cad983652b27a8ef915f2039ed89fbb7a09ef6066f00da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 317.0 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
842166e621aa218a13ded2138c6b604cd9a8ef7722c73e4713fd51349668445f
BLAKE2b-256 checksum
How to use checksums
0a229aeacf47cd9451b5d37aad21003e056220ab0b92cd3570edc32ff859c6b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 278.8 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a4ea523ced68ea86f91740e51931c0d362b9e9478c129e81b6f44acf3852aa35
BLAKE2b-256 checksum
How to use checksums
18e3f7ae5ef324fd763f1474fb6e6436f6752ff3fda57952cc975961cfcfff4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-macosx_11_0_x86_64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-macosx_11_0_x86_64.whl
Size 285.2 kB
Tags CPython 3.12 macOS 11.0+ x86-64
SHA-256 checksum
How to use checksums
2c5209bf02a3add331848fb8bcd2165b9013add8a76b1ba340411a11956b3b3e
BLAKE2b-256 checksum
How to use checksums
2e5be9abcf5d252c7dae91b3865942bfb9d440834dea455d5cf0ef50e40ef16f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / hedonic-1.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl

Download URL hedonic-1.0.0rc1-cp312-cp312-macosx_11_0_arm64.whl
Size 270.0 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
95361cfdd824a896007297b4167ecaa274258472c4613b6461aac36d409bc619
BLAKE2b-256 checksum
How to use checksums
93a58de3372156f1279d74376f826432dfa6d28c04ad4033f8357690dd83321f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Security for hedonic 1.0.0rc1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 25 files in this release have been uploaded with provenance metadata.

Select from 25 files

Attestation for hedonic-1.0.0rc1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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