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(). One
method returns either a disjoint partition or an overlapping cover.
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.
TL;DR
pip install hedonic # the library
pip install "hedonic[cli]" # plus the command line that reproduces the papers
from hedonic import Game
h = Game(g) # g: an igraph graph (convert NetworkX, edge lists, ... through igraph)
partition = h.community_hedonic(max_memberships=1) # disjoint
cover = h.community_hedonic(max_memberships=3) # overlapping
from hedonic import Gameis the public API.max_memberships=1puts each vertex in exactly one community and returns anigraph.VertexClustering.max_memberships>1lets each vertex join up to that many communities and returns anigraph.VertexCover.- 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 withmax_communities, or set a community-count limit). The result is also stored inh.memberships; passinitial_membership=h.membershipsto 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 (disjoint), or
choose the set of at most max_memberships communities it prefers
(overlapping, where a vertex in k communities takes part in each with
intensity 1/√k).
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).
For a partition 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. A cover's intensities 1/√k are rounded,
so its slack stays a tiny positive number, smaller on larger graphs: about
1e-15 on Zachary's karate club and 1e-17 on complete DBLP and Amazon,
where partitions get about 1e-21.
native/README.md gives the bounds, the termination
argument and the proof that the best set of communities is a prefix of the
sorted gains.
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). The command line and the paper
experiments need the cli extra: python -m pip install "hedonic[cli]".
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.
The package also installs the experiment command line (hedonic and
hedonic-exp, see Command line)
and its dependencies (SciPy, pandas, Matplotlib, NetworkX, PyArrow, DuckDB and
tqdm). The experiments' robustness audits run on the same C audit as
Game.stable_intervals and Game.regrets, so they need nothing more. The
command line runs on macOS and Linux; on Windows the package installs the
library alone.
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")
# Disjoint: each vertex has one community id
partition = h.community_hedonic(max_memberships=1, seed=0)
print(partition.membership[:8])
print(partition.sizes()) # community sizes
# Overlapping: each vertex has a list of community ids (length <= max_memberships)
cover = h.community_hedonic(max_memberships=3, seed=0)
print(cover.membership[:4])
Iterate communities as lists of vertex ids:
for community in partition: # disjoint clusters
print(list(community))
for community in cover: # overlapping clusters
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 | that cover |
Labels are non-negative integers; a start whose labels have gaps
([5, 9, 5]) is renumbered in label order ([0, 1, 0]).
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(max_memberships=1, seed=0)
cover = h.community_hedonic(max_memberships=3, initial_membership=h.memberships)
A partition is a valid start for a cover. The reverse works too: when a start
gives a vertex more labels than max_memberships, the vertex keeps the ones
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. A cover passed to max_memberships=1 therefore starts from the
partition in which every vertex keeps its preferred community.
_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 |
1 = partition; >1 = cover with that per-vertex cap; -1 = no practical per-vertex cap |
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 disjoint 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:
partition = h.community_hedonic(n_communities=2)
cover = h.community_hedonic(max_memberships=3, 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 its projection to
max_memberships) 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 cover or
partition:
h = Game.Famous("Zachary")
h.community_hedonic(seed=0)
truth = [0] * 17 + [1] * 17 # any flat partition, cover or 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. 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. Communities with the same members count once, on both
sides.
A reference that labels only part of the graph (the SNAP ground-truth covers,
for instance) 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(max_memberships=1, seed=0)
print(f"{h.vcount()} vertices, {h.ecount()} edges")
print(f"disjoint communities: {len(partition)}, sizes {partition.sizes()}")
cover = h.community_hedonic(max_memberships=3, seed=0)
print(f"overlapping communities: {len(cover)}")
print(f"memberships of the first five vertices: {cover.membership[:5]}")
Command line: reproducing the experiments
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 methods # the nine overlapping methods and whether each can run here
hedonic run exp # a one-minute benchmark (a wizard in a terminal; --dry-run plans)
The disjoint (stochastic block model) paper:
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 cores
hedonic run queue disjoint # the same, as a queue: the smoke run, then the paper's grid
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).
Each method's results carry their own identity (its call, parameters 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.
The overlapping-communities paper is one queue of six runs: the Hedonic
calibration, the baseline calibration, the synthetic networks, then, pair by
pair, the ground-truth start curve, the robustness spectrum and the benchmark,
on eight SNAP graph/cover pairs (the top5000 covers of DBLP, Amazon,
YouTube, Friendster and LiveJournal, then the all covers of DBLP, Amazon and
YouTube). The robustness spectrum and the start curve read each pair's
calibrated resolution from the Hedonic calibration:
hedonic setup --all --dry-run # the pairs, the eight baselines and the system tools they need
hedonic setup --all # download the pairs; build and install the baselines
hedonic run queue paper --dry-run
hedonic run queue paper # detached and resumable; days on a laptop
hedonic run attach paper-queue # live view (q or Ctrl-C closes the view, never the run)
hedonic run queue paper --report # what is done, run by run and pair by pair
hedonic setup needs git, a C and C++ compiler, CMake and make, a C++
compiler with OpenMP for FOX (Homebrew g++ on macOS) and
uv for the locked CDlib environment of ANGEL
and Ego-Splitting; --dry-run says which are missing. Starting the queue
again continues it: every run decides from its files what is already done.
The queue writes under --root DIR (default ~/Databases/Hedonic/Overlap/paper-queue).
The benchmark runs a deterministic method (CoDeSEG at one thread, CliquePerc,
FOX, BigCLAM, NcGame, NEO-K-Means) once per pair, at the lowest seed of the
plan, since its other seeds would repeat the same cover; Hedonic, ANGEL and
Ego-Splitting run at every seed. --replication all
runs every method at every seed, to check that determinism; both settings
reuse the same records.
Runs execute detached (tmux when available), so closing the terminal does not
stop them: hedonic run list, status, attach, logs, stop NAME and
resume NAME manage them. Data goes to ~/Databases/Hedonic (HEDONIC_DATA_DIR;
SNAP files under Networks/, or HEDONIC_NETWORKS_DIR), overlapping runs to
~/Databases/Hedonic/Overlap (HEDONIC_OUTPUT_DIR), disjoint runs to
~/Databases/Hedonic/Disjoint (HEDONIC_DISJOINT_OUTPUT_DIR), and built method runtimes to
~/.cache/hedonic/codeseg (HEDONIC_CODESEG_CACHE, or hedonic config set cache_dir PATH). hedonic config set output_dir PATH and
hedonic config set network_root PATH change them for every run;
hedonic config example prints every setting.
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.
Stability of a fixed cover
from hedonic.stability import stable_fraction, stable_measures, nash_window
intervals = h.stable_intervals(max_memberships=3, allow_isolation=True)
regret, tolerance = h.regrets([0.0, h.density(), 0.1, 1.0], max_memberships=3,
allow_isolation=True)
stable = regret <= tolerance
linear_share, log_share = stable_measures(intervals) # log floor: 1e-4
fractions = stable_fraction(intervals, [0.0, 0.1, 1.0])
window = nash_window(intervals)
Both methods default to h.memberships, preserving its community labels.
Pass memberships= to audit another cover, or vertices=range(start, stop)
to split work across processes. Rows are copied, repeated labels count once,
and label gaps are renumbered in numeric order. Every vertex needs a label;
complete uncovered vertices explicitly with private labels. The cap defaults
to the largest row and cannot be smaller.
The C audit finds closed stable intervals over resolution [0, 1] using the
paper's tolerance 1e-10 + 1e-9 * max(1, abs(current_utility)). This differs
from the detector's rigorous equilibrium certificate. Audits support unit
node weights only, finite non-negative edge weights, and undirected graphs
without self-loops. edge_weights=None means ones, as in community_hedonic;
pass edge_weights="weight" to audit with an edge attribute. The native implementation computes each vertex's
supports on demand, avoiding a global vertex-by-label support table.
See the core arithmetic contract.
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.
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 2.0.0rc5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| hedonic-2.0.0rc5.tar.gz | 790.8 kB | With provenance | Details |
Built distributions (wheels)
Total release size: 20.2 MB
Release files / hedonic-2.0.0rc5.tar.gz
| Download URL | hedonic-2.0.0rc5.tar.gz |
|---|---|
| Size | 790.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3dc7f9220362db00bb5ab310287348045fd7523893e78c07a639f6df4f646432
|
|
BLAKE2b-256 checksum How to use checksums |
aaded4df40b4c1f689ee6f926c3c9bb24a0651d6dae80238e99cf5650ff917ca
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-win_arm64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-win_arm64.whl |
|---|---|
| Size | 775.4 kB |
| Tags | CPython 3.14 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
95f1a972d6b9f89ab13ab10a3a5cc832f50a4306b89d1d456275df8fec705c1d
|
|
BLAKE2b-256 checksum How to use checksums |
91e7962ce9f810a790277730833f80fd3d01f64f83de2b3b52b7174712e21172
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-win_amd64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 833.7 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2f1b8739f2b3e302de478ff22b9faba4d59a13469d805bfcafdf2006e3a8750f
|
|
BLAKE2b-256 checksum How to use checksums |
3b18e3eedde8a90679b5544bf2e104179b53718eaab3415bb0513a429f7b6f8e
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 857.4 kB |
| Tags | CPython 3.14 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
5f9eae1e5e1f664badac8f5161efe298e3a8e192b1d0108c98a1b0a866f23012
|
|
BLAKE2b-256 checksum How to use checksums |
1ef24284bf326b870f9a64790fd1da66f9c1095e6cfa6c6f44616d30d3a581e6
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-musllinux_1_2_aarch64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 787.4 kB |
| Tags | CPython 3.14 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
6ad9cad25d4d25fc02ebeffb6751207e3cf0a4bbde362dd06a5bca5781b4cc02
|
|
BLAKE2b-256 checksum How to use checksums |
65839d018470a497d34c44a082fa893635aa167d408adc98020f6436b7997223
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 856.2 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c822502de2a16cd11863bd90d4efe9958556bff454fa910629c688e916836358
|
|
BLAKE2b-256 checksum How to use checksums |
3167122361754be0718d0c7bdd0588661d67307059d7e7249ad18f8157849ab1
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 787.3 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
2a93bba1580c405e659f0a2b0ec918b6df2ac09e022a3b1cec86fbfcbcaed181
|
|
BLAKE2b-256 checksum How to use checksums |
6906bb80207253104806967a8a7dbb2ec91d5d2fcf266e6cfea6b1b232920a9b
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-macosx_11_0_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-macosx_11_0_x86_64.whl |
|---|---|
| Size | 821.3 kB |
| Tags | CPython 3.14 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
c67e070b7877630f8a7d60ebca1fc2dae07e0f3a8708efbea3fa0405936e9159
|
|
BLAKE2b-256 checksum How to use checksums |
aaa0533fe583133a6261284b5640f748bd10f051b39962eb02f27378b8c2a87d
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | hedonic-2.0.0rc5-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 766.7 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
837aef6b7c9df03f74d3048819e8ab9ef34e1c65e240496a143bd308a093634a
|
|
BLAKE2b-256 checksum How to use checksums |
ef83088f8d02c8d6da60adebaa73dd5e9d6c282b97c4a5a7ce1d664669173cbe
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-win_arm64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-win_arm64.whl |
|---|---|
| Size | 772.2 kB |
| Tags | CPython 3.13 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
df1e7aa8d3fe4828998a8ab827a1f83f57c0f3e19166702fa0084f740eeca64a
|
|
BLAKE2b-256 checksum How to use checksums |
ce12acd645b60fe593c37b85083338cfb2ad9aa9d674834a2fb69d01355f631e
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-win_amd64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 829.8 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1eff3e922ff37a54aeebe81e97960a281ac05e207612935b4d3bd2cb40fc3460
|
|
BLAKE2b-256 checksum How to use checksums |
bc76757aa32d1bd572372c47ecebfad738cb8d8ee2e7f52cade695b5fbf13f59
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 857.3 kB |
| Tags | CPython 3.13 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
e8a3964a9cf440c72249af0fee0a8854495cd258a0e9694b479af5de36f4a8c5
|
|
BLAKE2b-256 checksum How to use checksums |
8d5740ce03566fba86d9f48d4f32e5f6d121cc1e2d832c5105efbf4458c25528
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-musllinux_1_2_aarch64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 787.3 kB |
| Tags | CPython 3.13 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
b9ea2139fc4ab3b18daa4537f4ed1fa42fce4cc0b30317467ed218f6edd435ae
|
|
BLAKE2b-256 checksum How to use checksums |
f058f4354befefac2b19a2a98328615d97dc39c8c3af6d18413f1758c20dd49a
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 856.1 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
8747db0892fdc50ced03840c434fe86409a0838dc069aab3e47886d9610cab0d
|
|
BLAKE2b-256 checksum How to use checksums |
3b68df8b9695ca78af3d8a9e7bad7c329dbc3ad9d2a3fa14d8e56d45637c0bc4
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 787.2 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
e634533fde1f861141683abca15f83abe7d4d992829a6be9c172eb8b4964cb2b
|
|
BLAKE2b-256 checksum How to use checksums |
8562e91573f7ad3b390ce814a0ae101d02c03184f72cb27a5f95f28522665d17
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-macosx_11_0_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-macosx_11_0_x86_64.whl |
|---|---|
| Size | 821.2 kB |
| Tags | CPython 3.13 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
13da16258edaf9c095b7e6f186b70140cc6ddb728ba6d1143e6c7de1ba33a694
|
|
BLAKE2b-256 checksum How to use checksums |
b6bd8b28a2961426c2162f6876e0f6cd01686e6a28b1e61438d00ba22355e8bb
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | hedonic-2.0.0rc5-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 766.8 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
70ef042ef52007979ee4ddba090ce39e2df059540f603679f7ae374482982cb6
|
|
BLAKE2b-256 checksum How to use checksums |
87c6c449f58f67b7243ec072699400d9a388328654789630c4f97a6ef8dc26f1
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-win_arm64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-win_arm64.whl |
|---|---|
| Size | 772.2 kB |
| Tags | CPython 3.12 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
b5f480a094d1a3a27fdedeaf6bb992e5531b33ef6acd54bff87e52132e697509
|
|
BLAKE2b-256 checksum How to use checksums |
31ad9ed5dff1eecd3f15c9587a193ff881c8eac786c9dad4583314424cc05d16
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-win_amd64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 829.8 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f36e0bc927b55816725a8138111eb3174b806a61f59051d75ead4737386813fb
|
|
BLAKE2b-256 checksum How to use checksums |
75a2faec6a0366124c8aefc24e0123bee4cdbc25b5cbc6c3bd881fe5f740757b
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 857.3 kB |
| Tags | CPython 3.12 Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
80bdba64474d4353d270b0215b912f0c9c23544f306b612b617f9f822482d974
|
|
BLAKE2b-256 checksum How to use checksums |
70ed215b1994fb2c9f79016a63b784d1a4f4f03e74771a2c1fb571802305bf0d
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-musllinux_1_2_aarch64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 787.3 kB |
| Tags | CPython 3.12 Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
e673be2adffc61da83450bf86298342bd02f5cbc66802f885b11a3ffbf735cec
|
|
BLAKE2b-256 checksum How to use checksums |
9f313a2aebcb476515301450a0c2255f6d92bb91be7964b14060f28191a0d671
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 856.1 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d2362d4bfb0e2799f26259d5db5f54be4979c271fc5c0f9a204eda6af1fbf086
|
|
BLAKE2b-256 checksum How to use checksums |
064473b31f6e4966f5a98a7da1d1c9dd0ea67851440b8d997457a6878b66c172
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 787.2 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
85865a2d01fb353bea9f734ea607f3fb28a19415c446422bc831956bf85ec842
|
|
BLAKE2b-256 checksum How to use checksums |
c1cd5f47a545807171189c7fdaf4ea3a9194f46b108694d4fbb5b0d818dc8e39
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-macosx_11_0_x86_64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-macosx_11_0_x86_64.whl |
|---|---|
| Size | 821.2 kB |
| Tags | CPython 3.12 macOS 11.0+ x86-64 |
|
SHA-256 checksum How to use checksums |
90bd953062e610c445cbebe4773c440fb5b6de32fabf48e80cf6f810c300d6c4
|
|
BLAKE2b-256 checksum How to use checksums |
46da17c2d56bf5a9080560f70a51115d74b4c635578536514e01742c6eeceb3e
|
| 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 19, 2026.
Transparency logRelease files / hedonic-2.0.0rc5-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | hedonic-2.0.0rc5-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 766.8 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bc21621acfc3380530fb9ec4fa59abde2b03d59b3c3fdf2eeafcebd0fcd405c6
|
|
BLAKE2b-256 checksum How to use checksums |
33c5129761b3d957535bd94e093e01f728aca1f5f377222ad5808adbf498a05c
|
| 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 19, 2026.
Transparency logSecurity for hedonic 2.0.0rc5
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.
Attestation for hedonic-2.0.0rc5.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 19, 2026.
Transparency logA 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.