Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 1.3.1 instead.

Modelly: agent-based modeling in Python

coverage latest release 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+. The core (model, agents, columns, spaces, time, data) follows semantic versioning; modules under modelly.experimental may change between minor versions and say so in their docstrings. The current version is modelly.__version__, and what changed in each release is in CHANGELOG.md.

pip install git+https://github.com/RemiPelloux/Modelly.git  # not on PyPI yet: installs from GitHub
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 @ git+https://github.com/RemiPelloux/Modelly.git"]

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.discrete_space import CellAgent, OrthogonalMooreGrid
from modelly.experimental.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.datacollection 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.experimental.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, 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.

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, and incremental data frames. 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 hot loops. An optional compiled path for the cell move and the neighbourhood lookup, the last two Python-bound costs of a per-agent step.
  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

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.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.0.0
File Size Uploaded Provenance
modelly_abm-1.0.0.tar.gz 1.0 MB With provenance Details

Built distributions (wheels)

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

Total release size: 10.1 MB

Release files / modelly_abm-1.0.0.tar.gz

Download URL modelly_abm-1.0.0.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
4f35276923bba351feaffa6c6800f07c2da462bec488e97e70b9669379f0fef0
BLAKE2b-256 checksum
How to use checksums
8232db4137c6dcf27dceb9042cf1cc298116f2c7113dd6519e9649e30dc3855d
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.0-py3-none-any.whl

Download URL modelly_abm-1.0.0-py3-none-any.whl
Size 349.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
12221d5ffa434d46eedfa82a01fbac57b8bbc22e637e7d9e6fa3ec4ea6730d5a
BLAKE2b-256 checksum
How to use checksums
0291988162ce9960aee84151e7e94a93d52d0514beeef98c2b06b9615ee70812
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.0-cp315-cp315-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.0-cp315-cp315-musllinux_1_2_x86_64.whl
Size 364.3 kB
Tags CPython 3.15 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
05039b531a0d7aaeda3e5aeceef3ce6baabe4e73015364fd9036e0217f4a8ba4
BLAKE2b-256 checksum
How to use checksums
b5a96ddef41aa8e6f86387b107b1b24cef9dac81253fd19806d08336e450bf64
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.0-cp315-cp315-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.0-cp315-cp315-musllinux_1_2_aarch64.whl
Size 364.6 kB
Tags CPython 3.15 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
35599208981b62c91183ea173bee644a573252e450d6e7dc60e68f832b2b730e
BLAKE2b-256 checksum
How to use checksums
2c3e660b018450a09215a9f7da7b4426026e11aced08a548da93e9f8e99049d2
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.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 364.0 kB
Tags CPython 3.15 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8e03da8b55029a80ff1ee0b8fb1c57dbddbc07bb83dd770e90affc9a8d00cd14
BLAKE2b-256 checksum
How to use checksums
fb2551fdec4e8128aa5eb5156d164a343e63d539cdb57a7688f28bdd0c4db974
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.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 364.5 kB
Tags CPython 3.15 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f565c4a79aaebd41a3556d362bfd4f00d4610003c256854b9aa7457c10eb54b7
BLAKE2b-256 checksum
How to use checksums
5fb2537067ce9fbc24649e2bb3c93bec1b956e44eb23674818d361f6918dc977
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.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.0-cp315-cp315-macosx_11_0_arm64.whl
Size 364.5 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
df09f0150dbd31bfd36d0a63a65c5bb9d13dbc811af30fe36aa0a798e0621bf3
BLAKE2b-256 checksum
How to use checksums
2ee2526308c04ef8c58d930438b703349cfca829d7c2f7152e79a4deb9aebed2
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.0-cp315-cp315-macosx_10_15_x86_64.whl

Download URL modelly_abm-1.0.0-cp315-cp315-macosx_10_15_x86_64.whl
Size 359.5 kB
Tags CPython 3.15 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
ae62b8672bed6181dfe13839582dc1cf8926c14c7fb6ecba07b35ca9d34aa8bb
BLAKE2b-256 checksum
How to use checksums
103cfb115eaf4fc765e101069eab9587fa3e4e2af3fdf074a98bf94154c8dc4e
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.0-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.0-cp314-cp314-musllinux_1_2_x86_64.whl
Size 364.3 kB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
351e90a4561622017dee87d4a9c98fc00259f4a40829de06cd70f459a68decfb
BLAKE2b-256 checksum
How to use checksums
fd0aaa26e23b5538297aa29c3ef1b3c3d1721a11f444d431899c81e5f1e6161c
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.0-cp314-cp314-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.0-cp314-cp314-musllinux_1_2_aarch64.whl
Size 364.6 kB
Tags CPython 3.14 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
a573158e0f8923422c1aeb2e9e71eacec8fd66e885adf73b528080928838d770
BLAKE2b-256 checksum
How to use checksums
9c7f9661d2115359e29103b00b0f6c5af79f94db3673bf99cd5e7b209547bc11
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.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 363.9 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d5ad83e82917e06680a0b26c08e2e9f87607761195868ddead72c0846ea11a1b
BLAKE2b-256 checksum
How to use checksums
f24f7c5316065ed9d47692d4be2f715f099584c8477c74996711340f772b66d9
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.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 364.5 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ad374faf6463495c97ce66ade268e7a3599481d71118c21e7170d5da19a17907
BLAKE2b-256 checksum
How to use checksums
4ecce9fd705e2784c047518ec19ed83c39f27ce47800e7bb0e55cf5e3c5e152f
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.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.0-cp314-cp314-macosx_11_0_arm64.whl
Size 364.5 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1ec7245bdda4d77af3c8796c405fae0e9c3568d50d3527ad9aed6d92ddf28ecb
BLAKE2b-256 checksum
How to use checksums
36002f8116db9a30e199ef8fd77d56dbd9a4d9a0b74db6a79ba6875b2e552a2e
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.0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL modelly_abm-1.0.0-cp314-cp314-macosx_10_15_x86_64.whl
Size 359.5 kB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
a9b09d1fa0b67d9ca5e50c065b65944a86cb8f33415d3e0bb2c1a26ad84d84d3
BLAKE2b-256 checksum
How to use checksums
757107e7b52f63fe6cb4de9f40ef00cab47780e75d25ee64cc53dd9632e09391
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.0-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Size 364.2 kB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
fc0f587a56e3c6ee5e7ee64b0af9d585defcfdefb68e37601fd8545e60f40d0d
BLAKE2b-256 checksum
How to use checksums
60a0f89fd3abc32c30ab9a897cda493e5db09d695bc71ff1ad2797f77d7b95d3
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.0-cp313-cp313-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.0-cp313-cp313-musllinux_1_2_aarch64.whl
Size 364.6 kB
Tags CPython 3.13 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
053f4f6fc8502fbbb5b83647b3e5a34275fbe0d2f089bbe12887aec1fc087bed
BLAKE2b-256 checksum
How to use checksums
aad61930e93e90ebe69bfe4cc4b30d9d054a90ec34737526180aac6c4f5f5fe3
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.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 363.9 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
735f99bd34a12c82225f78840616b995466e3de687156fb14cfc4f4b2dd92553
BLAKE2b-256 checksum
How to use checksums
e0f2b020054f673695016c5cca2ebc3d8f0d4f55c87c8cd10feeacac731cb2ce
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.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 364.5 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
23e55bd4d04e6a5faf08839a9adaeebe8aa4e0bb9908ea9418fb0ffc7647f444
BLAKE2b-256 checksum
How to use checksums
aea6a7497452a3f61a77a8a5bfefe7dc900f3a814bad01c118ba986392629c30
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.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.0-cp313-cp313-macosx_11_0_arm64.whl
Size 364.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
afb28b0f8998f67362b134644cac4eb7780e2f6f15a287f0c0aee68fed87da18
BLAKE2b-256 checksum
How to use checksums
ca3a1ffeec4c65f161a41366935a2be0bf7e5a7f8b945af7272a6fc169e34c4b
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.0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL modelly_abm-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl
Size 359.4 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
39bb3e62ebd6f3061333f2c53eac100376b458367e8582f91ccf5e8c5ecd03d6
BLAKE2b-256 checksum
How to use checksums
9f5d47b691023491465cdda7bfa781ff2bef29aabdbcf67c2cf01281f12672fa
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.0-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL modelly_abm-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Size 364.2 kB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
c36c5f83729a1bc217c84688181c231565f8af4fab56371192a12c4ffbe11a31
BLAKE2b-256 checksum
How to use checksums
da3e5e5ac2de622ee3bc1af40513b18071c616426a3a7efe4806f51db3d303b8
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.0-cp312-cp312-musllinux_1_2_aarch64.whl

Download URL modelly_abm-1.0.0-cp312-cp312-musllinux_1_2_aarch64.whl
Size 364.6 kB
Tags CPython 3.12 Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
e61ae876564500cca7273b601ccb00372f66e8187607f4e656f9aea5ba2ee860
BLAKE2b-256 checksum
How to use checksums
b5068a8029beb4433afeba772ad7efae1c71971c71cb0e4d1dc7ebef83a86c6f
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.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL modelly_abm-1.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 363.9 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e32a443c9d89a41e9743661c5791cc0806f01e476fb3d5e4a22de0ac0f74fc87
BLAKE2b-256 checksum
How to use checksums
2ae5e9a6946ec2d031ec8a7016861e5ca9f4f1e871065f547a34de8a2ccfb04d
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.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL modelly_abm-1.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 364.5 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e036ae558f43ed7a133e87420881ec06afc01524231314971c10d5b8178c3dbc
BLAKE2b-256 checksum
How to use checksums
3aa7c4bf8af4f3ed617faf5135b8a0a6eadbff7398dfd45b0cb2b1c7037dbf1e
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.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL modelly_abm-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Size 360.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
72b03d9a45e840dde0fe928ada59cfea6c926cf6dc8c734310aa19728505977d
BLAKE2b-256 checksum
How to use checksums
be4d118a8cee8d685e6f76e5a7cb266ba7d633e6664d8d79f4488b41192ff596
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.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL modelly_abm-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 359.8 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
ebe439e74a581697b684faf001709868c7d4ec9665f9def5d996842d716a61ac
BLAKE2b-256 checksum
How to use checksums
0de6e8c32898af828c8fa176b7e2f4d22ab580dca0ce1c8a48fdeb551606feba
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.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 26 files in this release have been uploaded with provenance metadata.

Select from 26 files

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