Skip to main content

aleff

Algebraic effects for Python — deep and shallow, stateful, composable, multi-shot handlers.

Doc | PyPI | GitHub

from aleff import effect, create_handler

choose = effect("choose")
h = create_handler(choose)

@h.on(choose)
def _(k, *values):
    return sum((k(v) for v in values), [])

print(h(lambda: [choose("A", "B") + choose("C", "D")]))
# ['AC', 'AD', 'BC', 'BD']

Features

  • Deep handlers — effects propagate through nested function calls without annotation
  • Shallow handlers — handle an effect once, then delegate re-installation to the handler function; enables state machines, shift0/reset0, and strategy changes between invocations
  • Stateful handlers — handlers can maintain and update state across multiple effect invocations, either via mutable variables (deep) or re-installation with new state (shallow); enables get/put state, transactions, and reverse-mode AD
  • Multi-shot continuationsresume can be called multiple times in a single handler, enabling backtracking search, non-determinism, and other advanced patterns
  • Sync and async — both synchronous (Handler) and asynchronous (AsyncHandler) handlers are supported, with transparent bridging between the two
  • Effect composition — handler functions can perform effects themselves, dispatched to enclosing handlers; enables layered architectures and modular effect stacking
  • Dynamic windwind context manager establishes before/after guards that are re-invoked on multi-shot re-entry, with optional auto-management of context managers returned by before
  • Effect annotation@effect(step1, step2) collects effect sets transitively from decorated functions
  • Introspectioneffects(fn) and unhandled_effects(fn, h) for querying and validating effect coverage
  • Typed — effect parameters and return types are checked by type checkers (pyright)
  • No macros, no code generation — pure Python library built on greenlet and a small CPython C extension

Requirements

  • CPython >=3.12
    • Tested versions:
      • 3.12.13
      • 3.13.12
      • 3.14.3
      • 3.14.3t (free-threaded)
  • greenlet >= 3.3.2
  • Linux / macOS / Windows

Installation

# uv
uv add aleff

# pip
pip install aleff

Quick start

from aleff import effect, Effect, Resume, create_handler

# Define effects
read: Effect[[], str] = effect("read")
write: Effect[[str], int] = effect("write")

# Write business logic using effects
def run():
    s = read()
    return write(s)

# Provide handler implementations
h = create_handler(read, write)

@h.on(read)
def _read(k: Resume[str, int]):
    return k("file contents")

@h.on(write)
def _write(k: Resume[int, int], contents: str):
    print(f"writing: {contents}")
    return k(len(contents))

result = h(run)
print(result)  # 13

Multi-shot example

from aleff import effect, Effect, Handler, Resume, create_handler

choose: Effect[[int], int] = effect("choose")

h: Handler[list[int]] = create_handler(choose)

@h.on(choose)
def _choose(k: Resume[int, list[int]], n: int):
    # Resume once for each choice and collect all results
    results: list[int] = []
    for i in range(n):
        results += k(i)
    return results

def computation():
    x = choose(3)  # 0, 1, or 2
    y = choose(2)  # 0 or 1
    return [x * 10 + y]

result = h(computation)
print(result)  # [0, 1, 10, 11, 20, 21]

Effect composition

Handler functions can perform effects that are handled by enclosing handlers:

from aleff import effect, Effect, Resume, create_handler

log: Effect[[str], None] = effect("log")
parse: Effect[[str], int] = effect("parse")

# Outer handler: logging
h_log = create_handler(log)

@h_log.on(log)
def _log(k: Resume[None, int], msg: str):
    print(f"[LOG] {msg}")
    return k(None)

# Inner handler: parsing with logging
h_parse = create_handler(parse)

@h_parse.on(parse)
def _parse(k: Resume[int, int], s: str):
    log(f"parsing: {s}")       # handled by the outer handler
    return k(int(s))

result = h_log(lambda: h_parse(lambda: parse("42") + 1))
# prints: [LOG] parsing: 42
print(result)  # 43

Dynamic wind

The wind context manager establishes before/after guards around a dynamic extent. When a multi-shot continuation captured inside the with block is resumed, the before thunk is called again; when it exits, the after thunk runs.

from aleff import effect, Effect, Resume, Handler, create_handler, wind

choose: Effect[[], int] = effect("choose")
h: Handler[list[int]] = create_handler(choose)

@h.on(choose)
def _choose(k: Resume[int, list[int]]):
    return k(1) + k(2)

log: list[str] = []

def run() -> list[int]:
    with wind(lambda: log.append("before"), lambda: log.append("after")):
        return [choose() * 10]

result = h(run)
print(result)  # [10, 20]
print(log)     # ['before', 'after', 'before', 'after']

If before returns a context manager and auto_exit=True (the default), __enter__ and __exit__ are called automatically:

with wind(lambda: open("data.txt")) as ref:
    ref.unwrap().read()
# file is closed on exit

wind_range is a multi-shot-safe replacement for range() in for loops. Python's range() iterator is shared across shots and exhausted after the first; wind_range saves and restores the iterator position automatically:

with wind_range(n) as r:
    for i in r:
        v = choose()  # multi-shot safe

How it works

Effects are declared as typed values and invoked like regular function calls. A Handler intercepts these calls via greenlet-based context switching:

  1. Business logic runs in a greenlet
  2. When an effect is invoked, control switches to the handler
  3. The handler processes the effect and calls resume(value) to return a value
  4. If resume is called multiple times, each call restores a snapshot of the continuation's frames (multi-shot)
  5. If the handler returns without calling resume, the computation is aborted (early exit)

Because handlers use greenlets (not exceptions), the control flow is:

  • Transparent — no yield, await, or special syntax in business logic
  • Non-stack-cutting — code after resume in the handler runs after the continuation completes, enabling reverse-order execution (useful for backpropagation, transactions, etc.)

Multi-shot continuations are implemented via a CPython C extension (aleff._multishot.v1._aleff) that snapshots and restores interpreter frame chains.

Package structure

Package Description
aleff Default: re-exports aleff.multishot (multi-shot handlers)
aleff.multishot Multi-shot handlers with frame snapshot/restore
aleff.oneshot One-shot handlers (no C extension required)

Examples

See examples/ for demonstrations:

  • N-Queens — backtracking search via multi-shot continuations
  • Amb / Logic puzzle — Scheme-style amb operator and constraint solving (SICP Exercise 4.42)
  • Probability — exact discrete probability distributions via weighted multi-shot
  • Dependency injection — swap DB/email/logging implementations
  • Record/Replay — record effect results, replay without side effects
  • Transactions — buffer writes, commit on success, rollback on failure
  • Automatic differentiation — forward-mode (dual numbers) and reverse-mode (backpropagation) with the same math expressions
  • Shallow state machine — mutable state (get/put) and traffic light controller via shallow handler re-installation
  • shift/reset, shift0/reset0 — delimited continuations: deep = shift/reset, shallow = shift0/reset0, with generator example

API reference

Function / Class Description
effect("name") Create a new Effect
@effect(e1, e2, ...) Decorate a function to declare its effects
create_handler(*effects, shallow=False) Create a synchronous handler
create_async_handler(*effects, shallow=False) Create an asynchronous handler
h.on(effect) Register a handler function (decorator)
h(caller) Run caller with the handler active
effects(fn) Get the declared effect set of a function
unhandled_effects(fn, *handlers) Get effects not covered by the given handlers
Effect[P, R] Effect protocol (parameters P, return type R)
Handler[V] Sync handler protocol
AsyncHandler[V] Async handler protocol
Resume[R, V] Sync continuation (k(value) -> V)
ResumeAsync[R, V] Async continuation (await k(value) -> V)
wind(before, after, *, auto_exit=True) Dynamic wind context manager
wind_range(stop) / wind_range(start, stop, step) Multi-shot-safe range() for for loops
Ref[T] Reference wrapper returned by wind; call unwrap() to get the value

Development

From source:

git clone https://github.com/hnmr293/aleff.git
cd aleff
uv sync
# Run tests
uv run pytest

# Run tests on all supported Python versions
./run_tests.sh

# Format
uv run ruff format

# Lint
uv run pyright

License

aleff's original code is licensed under Apache-2.0. Portions of the CPython integration and continuation adapters are derived from CPython and remain subject to PSF-2.0. See LICENSE, NOTICE, and LICENSES/CPython.txt.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aleff-0.4.1.tar.gz (515.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aleff-0.4.1-cp314-cp314t-win_amd64.whl (655.3 kB view details)

Uploaded CPython 3.14tWindows x86-64

aleff-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

aleff-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl (668.9 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

aleff-0.4.1-cp314-cp314t-macosx_10_15_x86_64.whl (677.2 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

aleff-0.4.1-cp314-cp314-win_amd64.whl (626.3 kB view details)

Uploaded CPython 3.14Windows x86-64

aleff-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

aleff-0.4.1-cp314-cp314-macosx_11_0_arm64.whl (629.8 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

aleff-0.4.1-cp314-cp314-macosx_10_15_x86_64.whl (639.1 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

aleff-0.4.1-cp313-cp313-win_amd64.whl (627.0 kB view details)

Uploaded CPython 3.13Windows x86-64

aleff-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

aleff-0.4.1-cp313-cp313-macosx_11_0_arm64.whl (625.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

aleff-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl (635.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

aleff-0.4.1-cp312-cp312-win_amd64.whl (626.5 kB view details)

Uploaded CPython 3.12Windows x86-64

aleff-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

aleff-0.4.1-cp312-cp312-macosx_11_0_arm64.whl (621.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

aleff-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl (632.1 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

File details

Details for the file aleff-0.4.1.tar.gz.

File metadata

  • Download URL: aleff-0.4.1.tar.gz
  • Upload date:
  • Size: 515.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aleff-0.4.1.tar.gz
Algorithm Hash digest
SHA256 8be6848e6b7a588a9d31d0aba5570b07249247b2aeb2da3e2b7f9232725313e2
MD5 304c7ba8e6bca7315b371fb34f9c0ef2
BLAKE2b-256 d9aacf2b89c63b3df8212d91a6cf981d054ef324119ac724cb1a2e8d34e0e315

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1.tar.gz:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: aleff-0.4.1-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 655.3 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aleff-0.4.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 eaf6de66bd1c40ec680d9aa014e87bd54a5b755a2301e85252d733c27b7e76f0
MD5 85a762b0221df52e1617fcef7ee9e7ce
BLAKE2b-256 3feed193425988eecc7f56fc3028c2c759110d2904abc030ca6d56e7e1beaa7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314t-win_amd64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2d202146a058cb6c11398c8071493170a5a5d779074a8581323e0769e71775b8
MD5 0a0b85d70fdc0293ab9182565367fbd2
BLAKE2b-256 05d7502170b008a0e93b46ae0a2dd2f7e227782da04fc3e4449c9919e3897fa5

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ffa7fc25900dee1d3e5a1568dd74400d8987f013fd647f3246c62c166a5c2dbf
MD5 248777fc3b0924664c8ad3e2c67f4e1e
BLAKE2b-256 837e2148642f4e079edc23f116ec45b7e7e91f992d2dd84aa2bdcfaa31e21ed8

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 517c92e71d4f9eddfb4e0ed71484b3adc677f853b2bfc4603cb8a75bc39de994
MD5 3ed27224db7b44b6ecb06a16c5391eba
BLAKE2b-256 97cf2c4e732711957228d3e30237f09d2ab2c0c45b07c0abf6d9d65b9eb5037d

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: aleff-0.4.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 626.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aleff-0.4.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 0a0e6b9d2899707de33f9987e3ec7f456a3582cfe91bfe99f97cb632f7820c02
MD5 19189e6ae528fe127bb8677f20c6c18c
BLAKE2b-256 3dfadbc7c0af99fd92320653a1e9e28dfa9a66b86fc92a21e4d83197c0af2983

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4d1c869044b4c047f6cc60a85af8604a6543d5d09e662bff9306e2a08bc0d6f2
MD5 adb5ee6439019bdafc46cd0a97994827
BLAKE2b-256 a14cf033eca658480ba06dd219e66f6673d91db0fd1b90698c0f3435899a9874

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1262d812ed38c2dd320a263ca3ce6238c9cb6283ff358157852353c3c1e233e8
MD5 ff2c30222b0d9489b428678892ef64d3
BLAKE2b-256 aa8aaa3350208824a8fefff5e476ba1e2b8571fd68d5992bdc5b0effb16f2b0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 174382cd303eb24589a38e2b7e920a97e074eb6eb17fb76cdec813e6808967ef
MD5 fd3ee9fa18ed9a9c66f298bda6b35977
BLAKE2b-256 904607e9bcdd2ec6f86948b65d4bb69753b4e319143340610d67b60c1422ff32

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp314-cp314-macosx_10_15_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: aleff-0.4.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 627.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aleff-0.4.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 892d2ee1d7dce18b0662fed130b9668e1f7d73e4068cd38ffe3ef7a93172088a
MD5 e2f6f97acf8e547474c6109188500d98
BLAKE2b-256 a85cc15804ad7c2766f38bc7c705ddbc79e708451e4e630d746fb430b043be06

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ebe45671894c13beeaff224b9bebaf72bea473f075d4633d5288d858c3b32833
MD5 bb52453f2aa90913dd14c55611546af8
BLAKE2b-256 00b919d95a43c8db01cbeee28279ab766bb072628d5bdee1f17d0463b95354e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 10c49a1be24c420c243012f5ec55b772bd10a0de2de05179c705fb6b07089ab6
MD5 0a8e890cac5c272824bf4de9948f29de
BLAKE2b-256 1c303e6acbd80b3867fc399d15b3e3296c74c7aba9e7066c8897d3bbb64a6708

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ef91f443cd2d922e91f0703c1871af9d1c07affa899ddd3c74a0945b3ae7be3f
MD5 4978352aeddd6be302327f298ba74b0d
BLAKE2b-256 a7b58f7ff7f3735d1a27780b280f22005866545d67a965cb3ae1ce79e6164b20

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: aleff-0.4.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 626.5 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aleff-0.4.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4665c5109d5d8ec8ba66b62c73ee4ef4e3746dbb556f65f9248678ade1b17603
MD5 622d496783b9b20ebde76078324e02c6
BLAKE2b-256 d559fab026b08b323694302fe89731a17ef9cf22eceb191970cd3dfca8799d6a

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 249e9ff656ca6b0a72184738244249047d8b7b49a42e24744cc6bc74d9ac2433
MD5 8ce3d0598388cff8ff911bc25aed7f1c
BLAKE2b-256 d50990ceea27593f1d6c51e627f45395efc3bfa0e1d584a6a1767a2418c65d5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f4adf31903f906750aa28b12271fbad7bc2ed99350aa130121856e20054fa9f
MD5 a1154491b5b2f00f7ddd748b77ccdc8f
BLAKE2b-256 51d54a96423f4b171def245ff16ea00c881076e1783ea146057002eda8db3fb5

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aleff-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for aleff-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 d61f7c83394c8bb4d2e111b169b9e603371c96fecf0bc6a9f48466c100e124d6
MD5 c526feb45da0ae815b9ffec7d8cdac90
BLAKE2b-256 802af1ee59a566433c0423c6ed6b14fd39e126827dcdc6f517b84836f8b6e9a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for aleff-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl:

Publisher: publish.yml on hnmr293/aleff

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.0

17 files

This release

0.4.1 This release

17 files

0.4.0

17 files

0.3.2

17 files

0.3.1

17 files

0.3.0

13 files

0.2.0

9 files

0.1.0

1 file

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