Skip to main content

Modelly: agent-based modeling in Python

coverage PyPI version python 3.12+ ruff Pelloux guidelines license: Apache-2.0

Modelly: agent-based modeling in Python

Modelly is an agent-based modeling (ABM) framework for Python. Declare a typed scenario, give your agents behaviour, run the world forward in time, then measure, replay and publish it. Seeded runs, numpy-backed agents, grids, networks and continuous space, discrete-event time, pandas data collection, browser visualization. Fast by construction, reproducible by default.

Documentation · Tutorials · Examples · Coming from Mesa · Changelog


Status: stable, Python 3.12+. Every public package (core, space, time, data, behaviour, scenarios, batch, viz) follows semantic versioning; there is no experimental area. The current version is modelly.__version__.

pip install modelly-abm
python -c "import modelly; print(modelly.__version__)"   # the import name is modelly

Or, from a clone, pip install -e ".[all]" then python example.py: a wealth-exchange model that prints its Gini coefficient.

Vision

Agent-based models are how researchers study systems whose behaviour emerges from many interacting parts: markets, epidemics, ecosystems, cities, opinions. The models are easy to describe and hard to keep correct, reproducible and fast. Modelly exists to remove that gap.

What we are building

  • A research instrument, not a toy. Every run is seeded, every parameter lives in a typed scenario, every dataset lands in pandas. A result you got once is a result you can get again.
  • Fast by construction. The hot paths of a simulation (activating agents, moving them, looking up neighbours, recording data) are measured, benchmarked in CI, and written so the cost per agent-step stays flat as models grow. Performance is a feature with a test, not a hope.
  • Small, readable modules. A researcher should be able to open any file and understand it in one sitting. Files stay under 300 lines, functions under 25, and the rule is enforced by a script, not by goodwill. The Pelloux guidelines are the contract.
  • One mental model from notebook to cluster. The same scenario object drives a quick look in a notebook, a browser visualization, a parameter sweep and a batch of replications.

Where we are going. The engine keeps one Python object per agent, which is what makes models easy to write, and moves the heavy lifting into arrays: Column attributes give the model a numpy view of every agent, continuous space answers neighbour queries for the whole population with one KD-tree, and the roadmap adds vectorised step phases and parallel replications out of the box. The performance audit records what has been done and what is next.

Why Modelly

Modelly gives you the boring, load-bearing parts as small composable objects, so your model file reads like the description of the system instead of the plumbing around it:

Building block What it gives you
Scenario Parameters as a typed class: one run, one seed, one config object
Agents Agent classes with a step(), grouped in ordered AgentSets
Columns Attributes stored in numpy arrays, readable per agent and as a whole
Space Orthogonal / hexagonal grids, cells, networks, Voronoi meshes, continuous space
Time Discrete ticks, events, generators and priorities in one scheduler
Data Reporters and datasets that land in pandas, ready to plot
Front end Browser visualization (Solara), static charts, notebooks

No global state, no hidden step order, no bespoke loops: reproducibility is the default.

The Modelly loop: scenario, step, record, visualize

Install

Modelly requires Python 3.12+.

git clone https://github.com/RemiPelloux/Modelly.git
cd Modelly

python -m venv .venv && source .venv/bin/activate
pip install -e ".[all]"          # core + network + visualization + examples + docs

Pick only what you need if all is too much:

pip install -e .                 # core: numpy, pandas, scipy, tqdm
pip install -e ".[viz]"          # + solara, matplotlib, altair
pip install -e ".[network]"      # + networkx

To depend on Modelly from your own project, add it to pyproject.toml (the distribution is modelly-abm, the import is modelly):

dependencies = ["modelly-abm>=1.0.1"]

The full walkthrough, from an empty folder to a tested and replicated model, is docs/using_modelly_in_your_project.md.

A model in 30 seconds

Agents wander a grid and hand one unit of wealth to a random cellmate. Inequality emerges. The same code ships as example.py.

from modelly import Model
from modelly.space import CellAgent, OrthogonalMooreGrid
from modelly.scenarios import Scenario


class WealthScenario(Scenario):
    """Everything that can vary between runs lives here."""

    n: int = 120
    width: int = 12
    height: int = 12


class MoneyAgent(CellAgent):
    def __init__(self, model, cell):
        super().__init__(model)
        self.cell = cell
        self.wealth = 1

    def step(self):
        self.cell = self.cell.neighborhood.select_random_cell()
        cellmates = [a for a in self.cell.agents if a is not self]
        if self.wealth > 0 and cellmates:
            self.random.choice(cellmates).wealth += 1
            self.wealth -= 1


class WealthModel(Model):
    def __init__(self, scenario: WealthScenario = WealthScenario):
        super().__init__(scenario=scenario)
        self.grid = OrthogonalMooreGrid(
            (scenario.width, scenario.height), random=self.random
        )
        MoneyAgent.create_agents(
            self,
            scenario.n,
            self.random.choices(self.grid.all_cells.cells, k=scenario.n),
        )

    def step(self):
        self.agents.shuffle_do("step")  # every agent, in random order

    @property
    def gini(self):
        x = sorted(a.wealth for a in self.agents)
        n = len(x)
        weighted = sum(xi * (n - i) for i, xi in enumerate(x))
        return 1 + 1 / n - 2 * weighted / (n * sum(x))


model = WealthModel()
for _ in range(100):
    model.step()

print(model.gini)  # 0.0 at the start, about 0.6 after 100 ticks

Three pieces, and nothing else: a scenario of inputs, agents that know one thing each, and a model that owns the world and advances it.

Record it, then look at it

from modelly.data.collector import DataCollector


class WealthModel(Model):
    def __init__(self, scenario: WealthScenario = WealthScenario):
        super().__init__(scenario=scenario)
        # ... grid and agents as above ...
        self.datacollector = DataCollector(
            model_reporters={"Gini": "gini"},  # anything reachable from the model
            agent_reporters={"Wealth": "wealth"},  # anything on each agent
        )

    def step(self):
        self.agents.shuffle_do("step")
        self.datacollector.collect(self)  # one row per tick
model_vars = model.datacollector.get_model_vars_dataframe()  # Gini per tick
agent_vars = model.datacollector.get_agent_vars_dataframe()  # wealth per agent per tick
agent_vars.groupby("Step")["Wealth"].mean().plot()

Both frames are plain pandas, so everything you already know how to do keeps working. Attribute reporters are gathered in C (operator.attrgetter), so a string reporter is the fast path, not just the convenient one.

Vectorise the bulk work

An agent-based model has two kinds of work: what one agent does in its step, which is Python by nature, and what the model does to all agents at once (aggregate, filter, record, update), which should be numpy. Declare a Column and the attribute lives in a model-owned array: the agent keeps reading and writing it as before, and the model gets a zero-copy view of everyone.

import numpy as np
from modelly import Agent, Column, Model


class MoneyAgent(Agent):
    wealth = Column(int, default=1)  # one numpy array for the whole class

    def step(self):
        other = self.random.choice(self.model.agents.to_list())
        if self.wealth > 0:  # per-agent access works as before
            other.wealth += 1
            self.wealth -= 1


class WealthModel(Model):
    @property
    def gini(self):
        x = np.sort(self.columns[MoneyAgent].wealth)  # view, no copy
        n = len(x)
        return 1 + 1 / n - 2 * np.sum(x * (n - np.arange(n))) / (n * x.sum())

    def tax(self):
        w = self.columns[MoneyAgent].wealth
        w[w > 10] -= 1  # bulk update, in place

    def rich(self):
        table = self.columns[MoneyAgent]
        return table.where(table.wealth > 10)  # an AgentSet

Nothing else changes: model.agents, shuffle_do, DataCollector and the examples work the same, and attribute reporters on a column are recorded straight from the array. Measured on 10,000 agents:

Operation Plain attribute Column
Gini coefficient 1.09 ms 0.03 ms
Count agents with wealth > 0 0.94 ms 0.008 ms
Mean wealth 0.47 ms 0.009 ms
Decrement every wealth > 5 0.15 ms 0.004 ms
DataCollector.collect, one reporter 0.95 ms 0.46 ms
One agent.wealth read inside step 6 ns 27 ns

The last row is the trade-off: use columns for attributes you aggregate, filter, record or update in bulk; a plain attribute is still the cheapest thing to touch inside step. In the Boltzmann example the object loop is unchanged within noise while the model-level work is 30x cheaper.

The whole population at once

Two more operations run over everyone in one call, so a model can move its population-wide phases out of the per-agent loop:

# A whole-population step for the sheep: decrement, die, reproduce, no per-agent loop.
table = self.columns[Sheep]
table.energy -= 1
table.remove_where(table.energy < 0)
table.do_where(table.draw(0.04), "spawn_offspring")  # one seeded draw per sheep

# Continuous space: one KD-tree answers the whole flock, same snapshot for all.
lists = self.space.neighbors_within(radius=5.0)
for boid in self.agents:
    boid.neighbors = lists[boid]

draw uses the model's seeded numpy generator, so the run stays reproducible. neighbors_within is O(n log n) for the whole flock instead of one O(n) scan per agent, is periodic on a torus, and is cached while no position changes. The Boids example uses it: 2,000 boids go from 98 ms to 42 ms per step.

Replications in parallel

from modelly.scenarios import RunConfiguration, run_scenarios

scenarios = WealthScenario(n=5000, rng=1).spawn_replications(32)  # 32 independent seeds
store = run_scenarios(scenarios, RunConfiguration(WealthModel, until=200), workers=8)

Each replication carries its own seed derived from the base scenario, so the sweep is reproducible; workers= spreads it over processes.

For a plain factorial experiment, run_grid is the one-call version: every combination times the replicates, each run with its own seed, results in design order whatever the number of workers, so the DataFrame is identical to the sequential loop's.

from modelly import run_grid


def season(task):  # a notebook function works: on Linux the workers are forked
    model = Orchard(budget=task["budget"], invasion=task["invasion"], rng=task["seed"])
    model.run_for(100)
    return {"harvested": model.harvested, "rotten": model.rotten}


results = run_grid(
    season, {"budget": [0, 150, 300, 600], "invasion": [3, 10, 30]}, replicates=3
)

Populations as cohorts

When individuals in the same state face the same probabilities (an insect's stage, age and sex), one row with a count replaces them all, and each per-individual draw becomes one binomial draw per row with exactly the same law. CohortTable holds such a population with no agent objects; the stage-structured playbook runs 213x faster than its individual Mesa version and agrees with it statistically.

from modelly import CohortTable

insects = CohortTable(model.rng, stage=np.int8, age=np.int16, female=bool)
insects.add(500, stage=EGG)
insects.thin(daily_survival[insects["stage"]])  # Binomial(count, s) per row
insects.split(0.5, where=emerging, stage=ADULT, female=True)  # sex at emergence
eggs = insects.draw(lay_prob, where=mature_females).sum() * clutch

Modelly, Mesa, NetLogo or Agents.jl?

Modelly Mesa NetLogo Agents.jl
Language Python Python NetLogo Julia
Authoring model Model, Agent, AgentSet, typed Scenario Model, Agent, AgentSet turtles, patches, links ABM, agent structs
Per-agent attributes in arrays Column: one numpy array per attribute, zero-copy views no no yes
Population-wide operations draw, do_where, remove_where, one KD-tree query per step per-agent loops built-in primitives vectorised
Time ticks, scheduled events, generators, priorities, hybrid ABM/DES ticks, events ticks ticks, events
Reproducibility one seed on the scenario, derived seeds per replication model seed run seed model RNG
Data out pandas, incremental frames pandas CSV, BehaviorSpace DataFrames.jl
Visualization Solara in the browser, matplotlib, altair Solara built-in GUI Makie
Moving from Mesa codemod plus a construct-by-construct guide – – –

Pick Modelly when you want Mesa's authoring model with numpy underneath, measured performance, and a scenario object that makes every run reproducible. Pick NetLogo for teaching and its GUI, Agents.jl when the rest of your stack is Julia.

Coming from Mesa

Modelly's authoring model is the one Mesa 3 users know (Model, Agent, AgentSet, DataCollector), with one grid system and no schedulers. A codemod does the mechanical part of a move and reports the rest, each line pointing at a section of the guide:

python -m modelly.migrate path/to/your/model/          # dry run: diff plus report
python -m modelly.migrate path/to/your/model/ --write  # apply the rewrites

It rewrites imports to the domain-package paths (modelly.space, modelly.time, modelly.data, modelly.batch, modelly.viz), agent constructors and scheduler attributes, and flags scheduler classes, legacy grid calls, batch_run, simulators and seed= for you to decide. The construct-by-construct map, for Mesa 2.x and 3.x, is docs/migrating_from_mesa.md.

Checking a model

A static check finds the bugs that break reproducibility (random draws outside the model's generators, a missing super().__init__, loops over sets) and the loops that make a step O(N²) (an agent scanning self.model.agents, nested population loops):

python -m modelly.lint path/to/your/model/   # exits 1 on findings, so it works in CI

Every rule, with the fix, is in docs/lint.md.

Architecture

Modelly architecture

  • Scenario to Model. Inputs enter through one typed object; the model owns state, seed, RNG and time.
  • Model to AgentSet / Space / Time. Agents live in sets, act inside some space, and are driven by the scheduler.
  • Model to Dataset. Reporters sample the model and its agents on intervals you choose.
  • Dataset to Visualize / Analyze / Reproduce. Same data, three exits: a browser app, a dataframe, or a seeded re-run.

Package layout

One package per domain; each __init__.py lists its public names in __all__.

Package What it holds
modelly.core Agent, Model, AgentSet, Column, FastRandom, exceptions
modelly.space cells, orthogonal and hex grids, networks, Voronoi, property layers, continuous space (modelly.space.continuous)
modelly.time Schedule, events, event generators, priorities, signals (modelly.time.signals)
modelly.data DataCollector, reporters, dataset recorders (modelly.data.recorders)
modelly.behaviour timed actions (actions), continuous states and thresholds (states), meta-agents (meta_agents)
modelly.scenarios Scenario, RunConfiguration, run_scenarios, result stores
modelly.batch run_batch, run_grid, CohortTable
modelly.viz Solara app, space renderer, matplotlib and altair backends, command console
modelly.lint python -m modelly.lint, static checks for models
modelly.migrate python -m modelly.migrate, the Mesa codemod
modelly._native the compiled modules (fastrng.c, fastloop.c), each with a pure-Python twin

The top-level names (modelly.Agent, modelly.Model, modelly.DataCollector, modelly.Column, modelly.CohortTable, modelly.FastRandom, modelly.run_batch, modelly.run_grid) import from modelly directly.

How the engine stays fast

The data structures are chosen for the operations a simulation actually performs, and each choice is backed by a measurement in docs/performance.md.

Structure Backed by Why
AgentSet (every view) ordered dict keyed on weakref.ref O(1) membership and removal, stable order for reproducible shuffles, no zombie agents; half the cost of WeakKeyDictionary
model.agents (the registry) ordered dict keyed on the agent Strong references where the lifecycle is explicit; views downgrade to weak sets in one place
Cell.agents list Cells hold a handful of agents; append and remove beat any indexed structure at that size
Cell neighbourhoods per-cell dict cache One lookup per query; invalidating one cell never touches another, and a discarded grid is freed
Empty cells in any discrete space swap-remove list + index O(1) random empty cell at any fill level, built lazily the first time a space turns out to be dense
Property layers np.ndarray per layer Vectorised updates on the array, per-cell accessors on the cells, one source of truth
Continuous space one np.ndarray of positions, one KD-tree per step Per-agent queries are numpy; neighbors_within answers the whole population in one periodic tree query
Event queue heapq with lazy cancellation and compaction O(log n) scheduling that never degrades under repeated cancel/reschedule

Benchmarks

Two questions, two methods, both in the repository.

Same code on both frameworks. A research notebook written for Mesa 2.3, ported with the codemod and nothing else changed, identical seeds, outputs checked bit-identical, CPU time pinned and alternating: with its compiled random core Modelly is 12% faster than Mesa 2.3 (paired runs at 0.877 to 0.884 of Mesa's time, identical output in every chunk). With the pure-Python FastRandom it is 1.3 to 3.8% faster, and 1.5 to 2% behind with the standard library's generator. The method and every round are in docs/performance.md.

Same model, each framework's own idiom. benchmarks/playbooks/ holds five models written twice: for Mesa 2.3 the way its API intends, and for Modelly with columns, vectorised phases, CellIndex and one KD-tree per step. The runner executes both in their own environments, pinned to one core, alternating rounds, checks that the implementations agree in distribution (Welch's t-test over shared seeds, every statistic) and that each is deterministic. CPU seconds of the steps at the large size, median of three rounds, this machine:

Playbook Agents Mesa 2.3 Modelly Speed-up
Grid epidemic (SIR, random walk, synchronous) 20,000 11.54 s 0.21 s 56x
Predator-prey with grass (births and deaths every step) ~5,500 3.90 s 0.47 s 8.3x
Flocking in continuous space 4,000 27.91 s 0.72 s 39x
Virus on a random network 30,000 8.70 s 0.20 s 44x
Stage-structured insect population, individuals ~26,000 2.83 s 0.65 s 4.3x
Same population as a CohortTable (binomial thinning) ~26,000 2.83 s 0.013 s 213x

Where Modelly keeps Mesa's data structure (agents held in cell lists, modelly-cells in the results) the gap closes to 1.4 to 1.9x: the layout is where the time is, not the interpreter. Every vectorised phase rests on a stated equivalence argument, in docs/vectorised_phases.md; the full tables with the agreement checks are in benchmarks/playbooks/results/README.md.

Future roadmap

What is shipped: columns, vectorised step phases (draw, do_where, remove_where), one KD-tree query for a whole continuous population, an O(1) empty-cell index on every discrete space, process-pool replications, incremental data frames, and compiled do / shuffle_do loops and neighbourhood walk (modelly/_native/fastloop.c). What comes next, in order of expected impact; each item keeps today's authoring model, you still write a Model, an Agent subclass and a Scenario:

  1. Vectorised movement on grids. A coordinate column plus a vectorised neighbourhood lookup, so a grid model can move its whole population in one numpy operation.
  2. Shared-memory replications. Fan a sweep over one large model out to processes without copying the column store.
  3. Compiled cell moves. An optional compiled path for the cell move, the last Python-bound cost of a per-agent step now that the agent-set loops and the neighbourhood walk are compiled.
  4. Live dashboards. The incremental data frame is the first piece; a streaming view that updates per tick without re-reading history is the next.

Built-in examples

Real, runnable models that ship with the package, good reading material for the patterns above.

Model Shows Path
Boltzmann Wealth Money exchange on a grid, emerging inequality modelly/examples/basic/boltzmann_wealth_model
Schelling Segregation from local tolerance thresholds modelly/examples/basic/schelling
Conway's Game of Life Cellular automaton, cell-state transitions modelly/examples/basic/conways_game_of_life
Virus on Network SIR epidemic on a contact network modelly/examples/basic/virus_on_network
Boid Flockers Continuous space, alignment and cohesion modelly/examples/basic/boid_flockers
Wolf Sheep Predator and prey ecology on a grid modelly/examples/advanced/wolf_sheep
Sugarscape G1MT Resource harvesting, trade and growth modelly/examples/advanced/sugarscape_g1mt
Epstein Civil Violence Regime shifts from agent state modelly/examples/advanced/epstein_civil_violence
Prisoner's Dilemma Pairwise strategic interaction modelly/examples/advanced/pd_grid
Alliance Formation Network structure and group formation modelly/examples/advanced/alliance_formation

Run one:

solara run modelly/examples/basic/boltzmann_wealth_model/app.py   # browser UI

Documentation

Where What
Documentation site remipelloux.github.io/Modelly: everything below, rendered and searchable
Use it in your project docs/using_modelly_in_your_project.md: install, layout, model, data, replications
Migrating from Mesa docs/migrating_from_mesa.md: construct-by-construct map, plus python -m modelly.migrate
Tutorials docs/tutorials/: 12 notebooks, from your first model to hybrid ABM/DES
Overview docs/overview.md: the object model, end to end
Performance audit docs/performance.md: measurements, what changed, what is next
Best practices docs/best-practices.md
Checking a model docs/lint.md: the python -m modelly.lint rules and their fixes
API reference docs/apis/: agents, agent sets, columns, model, space, time, data, migrate
Changelog CHANGELOG.md: what each release added, changed and fixed

The tutorials are executable: open them locally, in Colab, or through Binder (links at the top of each notebook).

Development

pip install -e ".[dev]"
bash scripts/ci-local.sh          # lint, format, tests, size audit: the same gate as CI
bash scripts/ci-local.sh --list   # stage names, run a subset with: ci-local.sh lint test
bash scripts/build-native.sh      # compile modelly/_native in place; MODELLY_PURE_PYTHON=1 forces the Python twins

Code discipline is written down in pelloux-guidelines.md: small files, short functions, surgical changes, conventional commits. scripts/audit-pelloux.sh enforces the size limits against pelloux-baseline.json; legacy oversized files are listed there and may shrink but never grow. The repository layout and how the brand assets are generated are in CONTRIBUTING.md.

Contributing

Issues, ideas and pull requests are welcome on the issue tracker. If you are adding a feature, opening a ticket first is the fastest route: it keeps the patch small and reviewable.

Everything you need is in CONTRIBUTING.md: local setup, tests, the lint and format commands CI runs, docs, and how a pull request is reviewed. By taking part you agree to our Code of Conduct.

Citing

If Modelly contributes to a publication, cite it with the metadata in CITATION.cff (GitHub shows a "Cite this repository" button that formats it for you).

License

Modelly is released under the Apache License 2.0. Third-party attribution is recorded in NOTICE.

Modelly: build the system, run the world, watch what emerges.

Metadata

Release files for modelly-abm 1.0.1

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

Source distribution (sdist)

Source distribution for modelly-abm 1.0.1
File Size Uploaded Provenance
modelly_abm-1.0.1.tar.gz 1.1 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for modelly-abm 1.0.1
File
modelly_abm-1.0.1-py3-none-any.whl Python 3 none any Details
modelly_abm-1.0.1-cp315-cp315-musllinux_1_2_x86_64.whl CPython 3.15 CPython 3.15 Linux musl 1.2+ x86-64 Details
modelly_abm-1.0.1-cp315-cp315-musllinux_1_2_aarch64.whl CPython 3.15 CPython 3.15 Linux musl 1.2+ ARM64 Details
modelly_abm-1.0.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
modelly_abm-1.0.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
modelly_abm-1.0.1-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
modelly_abm-1.0.1-cp315-cp315-macosx_10_15_x86_64.whl CPython 3.15 CPython 3.15 macOS 10.15+ x86-64 Details
modelly_abm-1.0.1-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details
modelly_abm-1.0.1-cp314-cp314-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ ARM64 Details
modelly_abm-1.0.1-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
modelly_abm-1.0.1-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
modelly_abm-1.0.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
modelly_abm-1.0.1-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details
modelly_abm-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details
modelly_abm-1.0.1-cp313-cp313-musllinux_1_2_aarch64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ ARM64 Details
modelly_abm-1.0.1-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
modelly_abm-1.0.1-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
modelly_abm-1.0.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
modelly_abm-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
modelly_abm-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details
modelly_abm-1.0.1-cp312-cp312-musllinux_1_2_aarch64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ ARM64 Details
modelly_abm-1.0.1-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.28+ x86-64, Linux glibc 2.17+ x86-64 Details
modelly_abm-1.0.1-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
modelly_abm-1.0.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
modelly_abm-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details

Total release size: 11.5 MB

Release files / modelly_abm-1.0.1.tar.gz

Download URL modelly_abm-1.0.1.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
4d3611619c2aacba37494f0e4a119ab1cedd8e7147704d83ec63ec6f7b377446
BLAKE2b-256 checksum
How to use checksums
6403fca44df5c86bb9d564e043ae922b46aca4ea4e1e275a73293253264ad6d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-py3-none-any.whl

Download URL modelly_abm-1.0.1-py3-none-any.whl
Size 398.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b69e74d5a2f6be3ac5034eb2030b9c28a2f672ace1bfea1f15fb94b7d6b2c251
BLAKE2b-256 checksum
How to use checksums
1972d8febbb9be6d45e0fb0f58582bc4e094a24a41ef4ff39e48c17ecd5ce839
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp315-cp315-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.1-cp315-cp315-musllinux_1_2_x86_64.whl
Size 420.0 kB
Tags CPython 3.15 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
fdfd437eaf1e5e783d7edbc2f853020c41d6daf0251e82a5839ba219ae60eaa1
BLAKE2b-256 checksum
How to use checksums
561677671c910514f29efb23d7a4149e053771aaf8331f897b540af7a53c846e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp315-cp315-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.1-cp315-cp315-musllinux_1_2_aarch64.whl
Size 421.3 kB
Tags CPython 3.15 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
0c1ae79e9ea9ee07755b222397537c456e65d46b1f50f2b79c0756bf5609858b
BLAKE2b-256 checksum
How to use checksums
7ea70a40c3085b8c956b1c584f3d1640ea2c2af59c2809608d56b51e0ec4511e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 419.4 kB
Tags CPython 3.15 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
053ec3126f9df27b67fd9a10a0a00ffc2dbfd6420f975df4fffb5e1322b386a5
BLAKE2b-256 checksum
How to use checksums
160d3500a92cb9b9deffd2e2ea4ab51a28037eed297c16aa7684d38f279fa025
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.1-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 421.2 kB
Tags CPython 3.15 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
8ad012e2271c00b0d4d9b78fc132a37d63fef7f600059170ea4642f2a1701a32
BLAKE2b-256 checksum
How to use checksums
0bdff1db961aaa85e674477e52b0958744292d8707b0be0a78d6aca18a46c5b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp315-cp315-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.1-cp315-cp315-macosx_11_0_arm64.whl
Size 422.3 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
24a7c59edde731f511387daba99ba6b6cf83689d640f712c55787498b1c76a50
BLAKE2b-256 checksum
How to use checksums
369c22481625d9f87391679a6d720016c9bb90562f2651b1a907d74b3852684f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp315-cp315-macosx_10_15_x86_64.whl

Download URL modelly_abm-1.0.1-cp315-cp315-macosx_10_15_x86_64.whl
Size 413.4 kB
Tags CPython 3.15 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
674db91185e6f503fcf03d16cea67cb85f5e7614a808ec5c92c03adafca3607d
BLAKE2b-256 checksum
How to use checksums
8f1b6e9122189290edf9e8d0ef76426f0a3799cb6b2b816852e2222f1a5bb234
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
Size 420.0 kB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
3785034f1390363521867d15c8a799b450ce8433ae1c607f30798376bedf02a3
BLAKE2b-256 checksum
How to use checksums
de7501a53351e7306b5b0873b1a820ed43ec768c3af766616f0887f62b8fe2a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.1-cp314-cp314-musllinux_1_2_aarch64.whl
Size 421.3 kB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
f1202a9e68fe0a4e490633e91c7fed2ba18e129618b1c90c35294ec31f98d212
BLAKE2b-256 checksum
How to use checksums
10822a59fb43a5c112a268540a983622150051b32e2a5d79c76c4e37808d5610
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 419.4 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f42b6419dc40ded0c2f8efe58810ca739e050856004ed3fdae80d2f5761cf406
BLAKE2b-256 checksum
How to use checksums
d8b732f812de3c29bcca136b75390857dfabeb1953124cffe1aafe7f49c84fd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 421.2 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
9bf490eeb39433ecf414152cac79fc8cf3d88bb9f94a28385271d565764551d2
BLAKE2b-256 checksum
How to use checksums
d13b5defe8dce9da885d9d9bdddf7061948241bbaca269213368918ca20d6927
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.1-cp314-cp314-macosx_11_0_arm64.whl
Size 422.2 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ce580fd9515c741faa8c4effce0dba04351f4504fe7c9115e8940989ad08ce6c
BLAKE2b-256 checksum
How to use checksums
7d072e0af41f58fb365feaa981bc6cef32168ff847cfd359cdbc9d080424677f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp314-cp314-macosx_10_15_x86_64.whl

Download URL modelly_abm-1.0.1-cp314-cp314-macosx_10_15_x86_64.whl
Size 413.4 kB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
acc281cc2b52ed88356d91dc59de8d131a23890a5bc53585ea7bfbbab710d34e
BLAKE2b-256 checksum
How to use checksums
09acc828aadab46b0e1a3f8319db3526749128ae3da7b12b6b8ffd8e931881c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
Size 420.0 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
75a5e0abe0003615353573676cfef537983292c35541831f97ca14e0e0328ece
BLAKE2b-256 checksum
How to use checksums
0f839920649db9610653151331fb217ba6aa7539b7b15e6330ff571fb2e67a2f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.1-cp313-cp313-musllinux_1_2_aarch64.whl
Size 421.1 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
4061f32a713c8e478e6b48cfc0e4f34e73e9fc62a19e2477af249b5cf3dc5c56
BLAKE2b-256 checksum
How to use checksums
18268283104e16e82dae79f475195571d95aa46b1de44b216ce2631577939df4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 419.4 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fd6d3fa9cdde84f1bc3aa4f236386e5cfdadd6052d385592274e91300ee3cc20
BLAKE2b-256 checksum
How to use checksums
dec802ec7a2f3c97577cd23b167fe1ce70dcad65c7852d06a856cbecb100e58b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 421.1 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
403930011ad140317af902879b6c98f41776b06474d0ca1c94e1074df3f4c753
BLAKE2b-256 checksum
How to use checksums
e092f68aa9ef6510896e5fabd73740f0590a85fa8ce113b948c16c715c3f2e23
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.1-cp313-cp313-macosx_11_0_arm64.whl
Size 422.2 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7428116bd4132366d68afdbcfe9b8f19a807cd3be398f99d5a5ab7615881fdd2
BLAKE2b-256 checksum
How to use checksums
efa9844d8385faa81e7aae7f3e2f65c98c28a99c38910266e08c10a52d487c1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl

Download URL modelly_abm-1.0.1-cp313-cp313-macosx_10_13_x86_64.whl
Size 413.3 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
df2f30296059c5d039fb60337b449f23010815879608cb98fa72fa0ac3f7a5c8
BLAKE2b-256 checksum
How to use checksums
70ec10f936f553c7f02da0742a000d3833921d480f25e7f9caaa4a0cb37e3843
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Size 419.9 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
03559ece9b72e57ba5cf85ce0b8193d429d2623f8c6fcecaf0fcdd7d68f0d93e
BLAKE2b-256 checksum
How to use checksums
7b6b385a82076a73b7ce61ae97deac1c4bba42ec5a2f873e0939ae054b6e801c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.1-cp312-cp312-musllinux_1_2_aarch64.whl
Size 421.0 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
59fc8616cc786f7571b4ce51ddda8ca0aabb95e77dde2066897e86c2d78e17c4
BLAKE2b-256 checksum
How to use checksums
9f7a63a211935d3557657a1f1bce6371bd748f6bfd0e218bc24ef9660ab72639
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 419.2 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
621daca47dc2be1525ce9681cbc404d29f440acd384b768b42125c789155e70b
BLAKE2b-256 checksum
How to use checksums
3f7d6f85118bf400b762675f425c6b5339bfad9dd275ccf8f5e635d076351da1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 420.9 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a826b53aa9606f4b97e454bb3f13ad9bc6596cab86006f9e05c291df8520c022
BLAKE2b-256 checksum
How to use checksums
6c1f153c16c3c09763648bd62e57c442d216706fe330a26b8be5681a43f98c68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.1-cp312-cp312-macosx_11_0_arm64.whl
Size 414.8 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f6223cec3c24550e69109fee70217c1deccf57d589b61b406f29eaafb3a2421b
BLAKE2b-256 checksum
How to use checksums
991372743ff60dd7112d8308c1e1377ccb189fe5ab73dcd428012a3ce8060a95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Release files / modelly_abm-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl

Download URL modelly_abm-1.0.1-cp312-cp312-macosx_10_13_x86_64.whl
Size 413.7 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
22405b48a71fa285a0ede25682ac83aeb00bcf618d312c277e274ffd3091ac5c
BLAKE2b-256 checksum
How to use checksums
1fed9b92ebbad7995d54709f8791ac441e4fb147dd983ed31853108b278305cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 24, 2026.

Transparency log

Security for modelly-abm 1.0.1

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 26 files in this release have been uploaded with provenance metadata.

Select from 26 files

Attestation for modelly_abm-1.0.1.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 24, 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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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