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

Then run the wealth-exchange example, which 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: a scenario configures the model once; every tick the agents act, data is recorded and time advances; after the run the data is a DataFrame to visualize and analyze

Install

Modelly requires Python 3.12+ and is published on PyPI as modelly-abm.

python -m venv .venv && source .venv/bin/activate
pip install modelly-abm

Add extras for what you need:

pip install "modelly-abm[viz]"       # + solara, matplotlib, altair
pip install "modelly-abm[network]"   # + networkx
pip install "modelly-abm[rec]"       # network + viz: what the bundled examples need

To work on Modelly itself, install from a clone instead: see Development.

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.2"]

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, wall-clock values, 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
python -m modelly.lint --explain MDL101      # why a rule matters, with a fix

Every tool is also one command: python -m modelly --help (or modelly --help once installed) lists them, and modelly lint src/ is python -m modelly.lint src/. Every rule, with the fix, is in docs/lint.md.

Its runtime companion runs the model and shows where each step's time goes: every AgentSet.do / shuffle_do call by agent class and method, with its cost per agent, DataCollector.collect, scheduled events, births and deaths, plus hints that point at lint codes:

python -m modelly.profile path/to/model.py:MyModel --steps 100 --param n=5000

From Python, with modelly.profile.Profiler(model) as prof: model.run_for(100), then prof.report() or prof.to_dataframe(). See docs/profile.md.

Checkpoints

A long run can be saved and resumed bit for bit, in the same process or a new one:

model.run_for(50)
model.save("run.ckpt")  # agents, spaces, events, data, both generators
model = WolfSheep.load("run.ckpt")  # only load files you trust: it is a pickle
model.run_for(50)  # identical to running 100 steps in one go
model.checkpoint_every(100, "run-{time:05.0f}.ckpt")

See docs/checkpoints.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.profile python -m modelly.profile and Profiler, where a running model's time goes
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 eight 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
Schelling segregation (moves to random empty cells) ~32,000 3.23 s 0.12 s 27x
Boltzmann wealth exchange, Gini by a DataCollector 10,000 1.51 s 0.20 s 7.4x
Sugarscape, constant growback (vision, best sugar in sight) 1,600 to ~680 5.57 s 0.18 s 32x

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 on the epidemic and predator-prey models: the layout is where the time is, not the interpreter. (Schelling and Sugarscape with cell lists stay 15x and 6.3x ahead, from the O(1) empty-cell index and cached neighbourhoods.) 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
Profiling a model docs/profile.md: python -m modelly.profile, the report and its hints
Checkpoints docs/checkpoints.md: save a run, resume it bit for bit
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

git clone https://github.com/RemiPelloux/Modelly.git && cd Modelly
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

The coverage badge at the top of this page is produced by that gate: the test stage measures coverage and rewrites docs/images/badges/coverage.svg, so commit the badge with your change.

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.2.0

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.2.0
File Size Uploaded Provenance
modelly_abm-1.2.0.tar.gz 1.1 MB With provenance Details

Built distributions (wheels)

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

Total release size: 14.6 MB

Release files / modelly_abm-1.2.0.tar.gz

Download URL modelly_abm-1.2.0.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
7265892686fd7ef26be199ccc18a4195c34ad2c4e94e811dd5b9b0360cf7a525
BLAKE2b-256 checksum
How to use checksums
01c1cb11a6d48be1340b9529e4fdf4b2b96b8f9f95b3c23a1e42c9fa768f7e73
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.2.0-py3-none-any.whl

Download URL modelly_abm-1.2.0-py3-none-any.whl
Size 437.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da9386be6ce5ba454356e8773e0f637b1b387bb11ad17c655106546a9d109bf5
BLAKE2b-256 checksum
How to use checksums
88fd5dfe920fe9e6a84700907ae8d87da47ce4c7af42a50973b983ea64abe617
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.2.0-cp315-cp315-win_amd64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-win_amd64.whl
Size 458.0 kB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
12efca89d6e69b5442e7ca55984a4e3daba603669a7cad3270e01976b2c00e2a
BLAKE2b-256 checksum
How to use checksums
606083887d5607594da77d3b13295aa0a2305546d78059cd60345b0a3990f730
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.2.0-cp315-cp315-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-musllinux_1_2_x86_64.whl
Size 466.6 kB
Tags CPython 3.15 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
a48bc2915768dd65f44eea5eee4a932011960f028a793c53650e1334a80afbe4
BLAKE2b-256 checksum
How to use checksums
ce654e10cb4a1fdb8fa80134223112f1a12667082aa7411dd2b16aa470109563
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.2.0-cp315-cp315-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-musllinux_1_2_aarch64.whl
Size 468.7 kB
Tags CPython 3.15 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
0478e86f7508ea25ddbe4efbf0a14b8d92db8be677fb0290bf462fa0fb455558
BLAKE2b-256 checksum
How to use checksums
cd0a51b6b37246c1639f8458dfb753e90d1e1c6cdab48d8b754d574b81621e39
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.2.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 465.6 kB
Tags CPython 3.15 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
cf4b8a85cf11aeaa15a3573bdd430987b32c7d3654dbe33e55a94d38899a8f89
BLAKE2b-256 checksum
How to use checksums
87c906e60a36765c06098cc18dd95e50af66af25536b9c3f6a28fcd6ce426f25
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.2.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 468.5 kB
Tags CPython 3.15 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a2b537384c2c01ddb0598a40b0beb32469d847d20249f3c97c7cf25ebf545c33
BLAKE2b-256 checksum
How to use checksums
b45853d5ac48567732a1404acd2db1654fe96a666d07d7de4d4abda1aec07bd5
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.2.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-macosx_11_0_arm64.whl
Size 470.8 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6fda8f97b20bd5f93e2ba09d8e2aa300357d0be3b14f8b842a3466c28f7fce25
BLAKE2b-256 checksum
How to use checksums
9036faf1ac47d914299a5e3faba3f29257f2ee31a89e8211ffbf7c84ba88c994
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.2.0-cp315-cp315-macosx_10_15_x86_64.whl

Download URL modelly_abm-1.2.0-cp315-cp315-macosx_10_15_x86_64.whl
Size 457.5 kB
Tags CPython 3.15 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
7f9ed2b55931aeff7760b01487473e6cbae09d113d6642b4f4af4592b25d30b4
BLAKE2b-256 checksum
How to use checksums
04472fba8cf76eeee654ecdfe6aa2424f404d1f028f3d4a6fe2b19cf8a4ff989
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.2.0-cp314-cp314-win_amd64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-win_amd64.whl
Size 458.1 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
b833fdc7fbdc9764dc854773b9120843ffa4cbd5909c3b57d65b65bb9add9b52
BLAKE2b-256 checksum
How to use checksums
a76c53dc2974d7ba4a564ce5f24ede9bccb725a68ddf40d39a3117c833dba3ef
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.2.0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 466.6 kB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
7ef02c3105a8d7ccab99e50591674521b278a287b6820b4a6dd067f0e9cc6d0f
BLAKE2b-256 checksum
How to use checksums
89d0c5f3924cb43a259fd168d4ec1766d80f2514e2f2c6eea98f38fc8e7eb4c9
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.2.0-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-musllinux_1_2_aarch64.whl
Size 468.6 kB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
5a7b8e6d233eaca70cdac15cf53bcb3dadb22a7a210c23eed07d1ad03e335956
BLAKE2b-256 checksum
How to use checksums
b5a4462b718c682dd5e1e83896248ab6344ceba491e5ceb11bf3b2647622364d
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.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 465.6 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
34f1c2e4bf0ef7bbc0955ecd61c3f283b3e32a0a05f43104de6051b5033c10d0
BLAKE2b-256 checksum
How to use checksums
b69dc977082ae12dcc8edcb59a1fff070e74d4e2aea91eea8623ee669111f0f6
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.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 468.4 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
7d863eada5e09a8215d876672fc2df738a5ac5ec517c0244929c8bc9b3e4fa66
BLAKE2b-256 checksum
How to use checksums
33d18b89cdb198ac196144c8f18f05ed0ba6b8d5b266efb48e92a708faacfed7
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.2.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-macosx_11_0_arm64.whl
Size 470.8 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
30f7fae6bc5bcfb78e87a6f8168d726476aa8f8682c6fbc0079812a8857857a7
BLAKE2b-256 checksum
How to use checksums
bf204ee3ecd5432dbe712cac33d96cf159280857a96b2cb8a090cee534fab772
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.2.0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL modelly_abm-1.2.0-cp314-cp314-macosx_10_15_x86_64.whl
Size 457.5 kB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
9d5cd7244494624bda5c979bf57fae2079684dd829515f1d2a56ceaa7847690a
BLAKE2b-256 checksum
How to use checksums
38f567043aaeea007007e3e6980b94b14d759054b2268af59cd529f098cb7dde
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.2.0-cp313-cp313-win_amd64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-win_amd64.whl
Size 458.5 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
90ddab1c5fd510654ad3cf0a0ed2db894c851b2fa8640736c4d660e0f01ec57d
BLAKE2b-256 checksum
How to use checksums
60fc27f6f0072646c126cb8cddd41279ea0a48486988318abfb7ac2de9313869
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.2.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 466.5 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
51097759294c8a98d796f9ebf52de7d45103ecc2ea43afd94cfcd9f536acf373
BLAKE2b-256 checksum
How to use checksums
ef7c7612d3274c2f9e92d679e2443e174f865de748ca03fde8dfd1804c9060c1
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.2.0-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl
Size 468.4 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
de166da2ef63578df31bd31a9b2068cc3a437dc0ca159243b069f87d0a8085b2
BLAKE2b-256 checksum
How to use checksums
65ba22d81a03ee0fd6f9ffed5eec5d6d7d99953fca23cdc0129a618845fca3a8
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.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 465.6 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0f18751b9b730bd27a1c540fa7fe72d027908810647206ddcc3f549beeef4e88
BLAKE2b-256 checksum
How to use checksums
923f87f98267d2946df354e2cfbb34b0c3b4a20a0dcc884f1c573f9ec374ebc9
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.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 468.3 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
28d39ee7d206b42a5f949506cc2de7e8d4a443e9844a1a1e0c50a34c0989d96f
BLAKE2b-256 checksum
How to use checksums
7752348891361630b484a50c9a00b5fd80ca4a5c429e194c7f91cdb10e65cd7a
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.2.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-macosx_11_0_arm64.whl
Size 470.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4dda7d192b5e866434dda17af69f5ea4e880f6af7a585c8bb0883afdae1559e7
BLAKE2b-256 checksum
How to use checksums
137914073c8f34e4cb563a9fc7d9a30308d95f32f5663779fc127011b00fc935
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.2.0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL modelly_abm-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl
Size 457.3 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
b00eaf6abd9ba9635c48430495cb83734316dffe48784698f7c093ca7dd48c3a
BLAKE2b-256 checksum
How to use checksums
a65a6a63424d76796bb022213c0a22d9653afc0af8f81601d6e28bc61d23155f
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.2.0-cp312-cp312-win_amd64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-win_amd64.whl
Size 458.4 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
afb92f6a88eebf9e067a168cc210db4bb2cf78e0f87ab08c97b84a56c307ef96
BLAKE2b-256 checksum
How to use checksums
87f044fafdeafbbb14bfa1774bcd2e1527810ca8da7b6cf523bae352eb30943d
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.2.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 466.4 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
c56e0e5f0ea6b5853e49a778b747bfc7058cc28260ff02433a54434833256863
BLAKE2b-256 checksum
How to use checksums
71cf52277957c06e743260bca62402de3ada851121aa2d084880d80b85d2d40a
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.2.0-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl
Size 468.2 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
902478bd28a8f9902d3b76fe2fa33735026c640226c56879ca0ec23565b2475f
BLAKE2b-256 checksum
How to use checksums
7034596812189d64e39945853d32f9ec22657d1486e318ea7d00f8a7d0474c4b
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.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 465.4 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ffc7e9fb0b817b4781b2a7e6bb26978a7026b80cd89ba7bcaf8aae628d7b2d52
BLAKE2b-256 checksum
How to use checksums
8c8caad2f8b3468134f41e1d86c00a4cbfd335e28d429178075e8e5a95eee6a3
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.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 468.1 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
2af72d4e8d4911237f6ebd87944ae6354ceed0236c8abe4e1b8082efb009f418
BLAKE2b-256 checksum
How to use checksums
830f8d063895ba22548a02f8a47d58dbc5e3b383c9c708c7360138cae4f6d41a
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.2.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-macosx_11_0_arm64.whl
Size 459.5 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ed36c11cc5df28aac46127a754b5b38475f9e2c7cd3a32d9670f77bc31bdb84e
BLAKE2b-256 checksum
How to use checksums
e179aca4e6e299c7205a4022d2a490b8439ebfaa335423badb4562d23b39e9b7
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.2.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL modelly_abm-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 458.1 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
5cb343daeae66bf0e0f589458ffa8832f1e2f9a472cf69f2bb22c490d2eaa35b
BLAKE2b-256 checksum
How to use checksums
835b1af9d2e9c2c4eabe9ef28f36fe128f3805adb24b1905354bc6b0b421865a
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.2.0

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

Select from 30 files

Attestation for modelly_abm-1.2.0.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