Skip to main content

python-amber

The Amber columnar time-series engine, in your Python process, with zero-copy NumPy / Arrow / pandas interop.

import amber as am

am.gentq(10_000_000)                                     # 10M synthetic trades + quotes
df = am.q("select vwap:wavg[sz;px], n:#px by sym from trades").to_pandas()

No server. No socket. No serialisation. am.eval("2+3") calls the same C function the Amber REPL calls, in the same address space, and a query result that comes back as a NumPy array is pointing at the engine's own memory — not at a copy of it.

>>> col = am.q("select from trades").column("px", raw=True)
>>> arr = numpy.asarray(col)
>>> hex(arr.ctypes.data) == hex(col.handle())            # the engine's buffer
True

Contents


Install

pip install amber-lang

The import is still import amber (the plain amber name on PyPI was already taken). Wheels exist for Linux x86_64 and aarch64 and for Apple silicon Macs, on CPython 3.10 to 3.14. Anywhere else pip builds from the sdist, which carries the engine's source, so all you need is a C compiler and bash.

On Windows, use WSL: the engine is POSIX code (mmap, fork, POSIX sockets), so there's no native Windows build yet, and pip says so instead of trying.

A binary wheel carries libamber.so and the eight .k standard-library modules, so this is genuinely all you need — no engine checkout, no $AMBER_HOME, no build toolchain.

From source, against an engine checkout:

git clone https://github.com/BonucciAndrea/amber
git clone https://github.com/BonucciAndrea/python-amber
cd python-amber
AMBER_SRC=../amber pip install .

Optional extras, none of them required:

pip install "amber[numpy]"     # NumPy views of columns
pip install "amber[pandas]"    # .to_pandas()
pip install "amber[arrow]"     # .to_arrow(), .to_polars()
pip install "amber[all]"

They are optional because they are reached through ABI contracts, not Python imports: the buffer protocol (PEP 3118) for NumPy, the Arrow C Data Interface for PyArrow. This package pins neither and imports both lazily, at the moment you call the method that needs them.


How it fits together

   your Python process
   ┌──────────────────────────────────────────────────────────────┐
   │                                                              │
   │   import amber as am                                         │
   │        │                                                     │
   │        ▼                                                     │
   │   amber/__init__.py       dynamic dispatch, conversion       │
   │   amber/table.py          pandas / Arrow / Polars bridges    │
   │        │                                                     │
   │        ▼                                                     │
   │   amber/_amber.so         CPython extension  (src/py_amber.c)│
   │        │                  ~800 lines, no NumPy/Arrow headers │
   │        ▼                                                     │
   │   libamber.so             the engine, exporting 57 symbols   │
   │                           all named amber_* or am_ext_*      │
   │        │                                                     │
   │        ├──── column payload ────────────┐                    │
   │        │                                │  same address      │
   │        ▼                                ▼                    │
   │   numpy.ndarray                  pyarrow.Table               │
   └──────────────────────────────────────────────────────────────┘

The engine repository is not modified by this package and does not know it exists. The entire contract between them is section 6 of the engine's src/ext.h — mirrored here in include/amber_capi.h and checked at import time via amber_abi_version().


Quick start

import amber as am

# --- evaluate ------------------------------------------------------------
am.eval("2+3")                       # 5
am.eval("1 2 3 4 5")                 # array([1,2,3,4,5], dtype=int8)
am.eval('"hello"')                   # 'hello'
am.eval("`aapl`msft")                # ['aapl', 'msft']

# --- dynamic dispatch: any Amber global is an attribute -------------------
am.gentq(1_000_000)                  # runs `gentq 1000000` in the engine
am.wavg([1, 2, 3], [10.0, 20.0, 30.0])
am.u.pub                             # dotted names work: the `u.pub` global

# --- qSQL, exactly as you'd type it at the prompt -------------------------
t = am.q("select vwap:wavg[sz;px], n:#px by sym from trades where px>0")
t.to_pandas()

# --- as-of join, the thing Amber is actually for --------------------------
am.eval("taq:aj[`sym`time; trades; quotes]")
am.q("select from taq where sym=`AAPL").to_arrow()

# --- push data back in ----------------------------------------------------
import numpy as np
am.set("signal", np.random.randn(1_000_000))
am.eval("avg signal")

am.set("book", {"sym": ["AAPL", "MSFT"], "px": [187.2, 411.1]})

The API

Module level

am.init(home=None, *, bare=False) Boot the engine. Automatic on first use. bare=True skips the .k standard library.
am.eval(src, *, raw=False) Evaluate Amber source; returns the last statement's value.
am.q(line, *, raw=False) Evaluate after the bare-qSQL rewrite — select … from … works verbatim. Text over several lines is read the way a script is, so a query can carry on over indented lines.
am.call(name, *args, raw=False) Apply a global function to 0–8 native arguments (no string round-trip).
am.get(name) / am.set(name, obj) Read / bind an Amber global.
am.make_table({name: seq, …}) Build a table from Python columns.
am.load(path) Load a .k/.q script or a database directory, exactly as \l does.
am.convert(obj) Python object → Value.
am.as_array(v) The raw zero-copy NumPy view of a vector (temporal ones as their plain numbers).
am.plugin_load(path) dlopen a native Amber plugin.
am.diagnostics(bool) Re-enable the engine's rich stderr diagnostics (off by default here).
am.<anything> A Verb bound to that Amber global.

raw=True skips conversion and hands back a Value. Use it whenever the next thing you do is give the result back to the engine — conversion is the only step in the whole path that costs anything.

am.Value

An owned handle on an engine value. Flat vectors export the buffer protocol, so numpy.asarray(v), memoryview(v) and pyarrow.py_buffer(v) are all zero-copy and all keep the engine value alive for exactly as long as they exist.

.type() .type_name() .count() .is_table() .is_dict() .is_atom() .flatten() .format(plain=True) .to_str() .to_symbols() .scalar() .ncols() .colname(i) .column(i) .keys() .values() .items() .symbol_codes() .equals(v) .to_bytes() .release() .is_released() .handle()

Values pickle (through the engine's own serialiser), so they cross multiprocessing fine. .release() hands the memory back right away instead of waiting for the GC, and it says no while a NumPy view of it is still alive. Everything else on a released value raises instead of crashing.

am.Table

t.columns Column names.
t.key_columns Grouping columns of a keyed (by) result.
t[name] / t.column(name, raw=…) One column.
t.shape / t.dtypes / t.head(n) / t.tail(n) The usual.
t.to_pandas(copy=False, index=True, categorical=False) DataFrame; key columns become the index. categorical=True gives symbol columns as pandas.Categorical straight from the engine's ids.
t.to_arrow() pyarrow.Table, zero-copy for numerics.
t.to_polars() polars.DataFrame, via Arrow.
t.to_dict() Plain Python (always copies).
t.to_numpy() One 2-D array (a copy).
am.Table.from_pandas(df, index=False, strings="symbol") Import a DataFrame. Nullable Int64/Float64/boolean, categoricals and tz-aware datetimes all work.
am.Table.from_arrow(x) Import a pyarrow.Table, RecordBatch, RecordBatchReader or anything with __arrow_c_stream__. Sliced and chunked data, dictionaries, decimals and every temporal type are fine; nested types say no clearly.
am.Table.from_polars(df) Import a polars.DataFrame.

A REPL

$ python -m amber
amber> gentq 1000
amber> select vwap:wavg[sz;px] by sym from trades
amber> \py df = am.q("select from trades").to_pandas()

Zero-copy, precisely

Claims about zero copy are cheap, so here is exactly what is and is not copied.

Engine → Python is zero-copy for numeric columns. amber_get_vector_ptr() returns the payload pointer; the buffer protocol wraps it with view->obj set to the owning Value, INCREF'd. NumPy stores that as the array's base, so the Amber refcount cannot reach zero while the array is alive. The test suite asserts pointer equality, not value equality:

assert arr.ctypes.data == raw.handle()
assert arrow_buffer.address == raw.handle()

Engine → Arrow is zero-copy for numeric columns. The ArrowArray's data buffer is the Amber column's payload, and its release callback drops the Amber refcount. Symbol columns are materialised to utf8 — Amber stores interned int32 ids, Arrow wants offsets and bytes, and no pointer arithmetic bridges that.

Python → engine copies. Always. Amber stores a 32-byte object header immediately before every vector payload, so it cannot adopt a foreign allocation as a native vector. That asymmetry is not a limitation anyone is working around; it matches where the volume is. Query results are large and query parameters are small.

pandas is "where pandas permits". to_pandas() builds the DataFrame from the same views. Whether pandas keeps them or consolidates them into fresh blocks is pandas' decision and it varies by version, so this package documents that honestly rather than promising something it does not control. Pass copy=True to take a deliberate snapshot and stop pinning the engine's buffers.


Type mapping

Amber Python Notes
int atom, long atom int
float atom float
char atom, char vector str UTF-8 decoded
symbol atom str
symbol vector list[str] interned int32 ids resolved through the engine's symbol table
byte / short / int / long vector numpy.ndarray zero-copy, dtype int8/int16/int32/int64
float vector numpy.ndarray float64 zero-copy
bool vector numpy.ndarray bool rare: 101b is a byte vector in Amber, and comes back as int8
date vector numpy.ndarray datetime64[D] copied once, to move the epoch
month vector datetime64[M]
timestamp vector datetime64[ns]
timespan vector timedelta64[ns] zero-copy, nothing to shift
time / second / minute vector timedelta64[ms] / [s] / [m] time of day, as a span since midnight
temporal atoms numpy.datetime64 / timedelta64 datetime/timedelta without NumPy
lazy range (!n) numpy.ndarray materialised first
general list list recursive
dict dict
keyed table (by) amber.Table flattened, key_columns recorded
table amber.Table
function / projection amber.Value there is no Python object that means "the Amber verb +"

Integer width is real, not hidden. Amber stores an integer vector in the narrowest type that holds every element, so 1 2 3 is physically int8 and 1 2 3000000000 is int64 — both are "long vectors" as far as the language is concerned. The arrays you get back carry the true dtype rather than being widened behind your back; arr.astype("int64") is one call away when you want uniformity, and it should be your call.

Nulls (0Nd, 0Np, …) come back as NaT, and NaT goes in as the null.

Going the other way, Table.from_pandas maps object/string columns to symbol vectors (four bytes a row, integer comparisons — the reason Amber groups and joins fast on sym). Datetimes become real Amber timestamps, timedeltas timespans: Amber counts from 2000.01.01 and NumPy from 1970, and the move between the two happens here, so a timestamp never comes out thirty years off. datetime, date, time and timedelta objects convert the same way, and an aware datetime goes in as UTC.


Building from source

Point the build at the engine and install in editable mode. The [dev] extra pulls in pytest, NumPy, pandas and PyArrow, which the test suite needs:

# Against a prebuilt libamber.so (nothing is recompiled):
AMBER_LIB_DIR=/path/to/dir/holding/libamber.so \
AMBER_SRC=/path/to/amber \
    pip install -e ".[dev]"

# ...or against an engine checkout, letting it build the library if absent:
AMBER_SRC=/path/to/amber pip install -e ".[dev]"

AMBER_LIB_DIR supplies the prebuilt library; AMBER_SRC additionally supplies the eight .k standard-library modules, which the build copies into the package so the installed engine boots with its full vocabulary.

Run the tests. Point AMBER_HOME at a directory containing amber.k unless the build already bundled the standard library:

AMBER_HOME=/path/to/amber python -m pytest tests -q

setup.py looks for the engine in this order:

  1. $AMBER_LIB_DIR — a directory containing a prebuilt libamber.so
  2. $AMBER_SRC — an engine checkout; runs its own ./build.sh --shared-only
  3. vendor/amber/ — what scripts/vendor_engine.sh writes, and what the sdist ships
  4. ../amber/ — a sibling checkout
  5. the system library path

It runs the engine's build script rather than reimplementing it, because that script already knows how to probe this toolchain for LTO, OpenMP and the right export-map flag, and a second copy of that logic here would rot.

Environment variables:

AMBER_SRC Engine checkout to build.
AMBER_LIB_DIR Directory holding a prebuilt libamber.so.
AMBER_BUNDLE=0 Do not copy the library and .k modules into the package. Right for a distro package, wrong for a wheel.
AMBER_FORCE_REBUILD=1 Rebuild the engine even if a library is already there.
AMBER_PY_HOME Load the .k standard library from here instead of the bundled copy.
AMBER_HOME The REPL's variable: used here only when the package has no bundled standard library.

Building wheels

scripts/build_wheel.sh                    # a local wheel with the engine bundled
scripts/build_wheel.sh --manylinux        # auditwheel-repaired, redistributable

Releases are built by .github/workflows/wheels.yml with cibuildwheel: push a v* tag and it builds the sdist and every wheel, tests each one after installing it, and publishes to PyPI with trusted publishing (no token in the repo).

The plain build copies libamber.so into amber/ and links the extension with an $ORIGIN rpath, so the library is found next to the extension wherever the wheel lands. auditwheel repair then does the rest of what a redistributable wheel needs — hashing the library's name, fixing the rpath, and checking the glibc symbols the engine actually references.


Threading

The engine is single-threaded at its API boundary. Every call in this package runs with the GIL held and never releases it, which makes the GIL the engine's lock for free.

That is deliberate, and it is why you will not find Py_BEGIN_ALLOW_THREADS around long evaluations. Releasing the GIL there would let a second Python thread re-enter the interpreter mid-evaluation, and the resulting corruption would be intermittent, timing-dependent and effectively unattributable — the worst possible failure mode in exchange for parallelism you can get safely another way. If you need concurrency, use several Amber processes, which is what the engine's own peach does (fork-based, copy-on-write, no shared heap).

Two things that follow from this. Ctrl-C can't stop a long engine call halfway: Python sees the KeyboardInterrupt as soon as the call returns. And on a free-threaded Python (3.13t, 3.14t) importing the module turns the GIL back on, on purpose.


Troubleshooting

ImportError: libamber.so: cannot open shared object file — the wheel was built with AMBER_BUNDLE=0, or the library was moved after installation. Either reinstall with bundling on, or put libamber.so on LD_LIBRARY_PATH.

AmberError: 'value on a name that clearly exists — the standard library did not load. Check am.home(); if it is None you have a bare engine (primitives only, no gentq, no select). Set $AMBER_HOME to a directory containing amber.k.

ImportError: libamber ABI mismatch — the extension and the library came from different engine versions. Rebuild one of them; the message names both ABI numbers.

Underscores in Amber names — _ is a verb in Amber (drop, and floor), so my_name does not lex as one identifier. Use dotted names (my.name) or camel case. This bites everyone once.

BufferError: … has no flat buffer to export — you asked for a memoryview of a table, a general list or an atom. Use .column(i), .items() or .scalar().


Licence

GNU AGPLv3, matching the engine. See LICENSE and NOTICE.

Metadata

Release files for amber-lang 2.9.3

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

Source distribution (sdist)

Source distribution for amber-lang 2.9.3
File Size Uploaded
amber_lang-2.9.3.tar.gz 642.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for amber-lang 2.9.3
File
amber_lang-2.9.3-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
amber_lang-2.9.3-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
amber_lang-2.9.3-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
amber_lang-2.9.3-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
amber_lang-2.9.3-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
amber_lang-2.9.3-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
amber_lang-2.9.3-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
amber_lang-2.9.3-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
amber_lang-2.9.3-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
amber_lang-2.9.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
amber_lang-2.9.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
amber_lang-2.9.3-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
amber_lang-2.9.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
amber_lang-2.9.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
amber_lang-2.9.3-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 14.0 MB

Release files / amber_lang-2.9.3.tar.gz

Download URL amber_lang-2.9.3.tar.gz
Size 642.4 kB
Tags Source
SHA-256 checksum
How to use checksums
aba44564d05f99f358a27666364f847dce1af8c5d03691552642958fb7079e58
BLAKE2b-256 checksum
How to use checksums
2730d84491f7d16cc34574577f6616033752928277e1ea3052bbbac42ba23b9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b464a41e15363152f12be9e5ed6f9872a1309a0ff1c7b412cbe047569ee9539a
BLAKE2b-256 checksum
How to use checksums
bc558a27289a2ed18629b01e48c8890980b05221b5de54dc16722328c2f4cd37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 941.9 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ab7f84e72fade6f10f495db08385d1385a079ff2f9eadfdbadc43044572be5a9
BLAKE2b-256 checksum
How to use checksums
604544e703dd6e9ea4a26de7180971d266a9855a2a2e09a4a90212f86c53e6d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp314-cp314-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.3-cp314-cp314-macosx_11_0_arm64.whl
Size 670.6 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e2d2a07b5f9b5888f8da43f33b6245c7a570d3b17661b0e398cdf6ebb8eef647
BLAKE2b-256 checksum
How to use checksums
cb3e6760c78fea43a0edda318883642c1ef7bf49758dc22807626dd09fd49c7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
121a4ba7cbe5dc388b58977ce810e0d70088d4cf853aae7a44584815b62b96ad
BLAKE2b-256 checksum
How to use checksums
776eb425a7ba0f47e28102906925e41ca934648c030272e835c553034080b376
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 941.7 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
dc616c17bac93a8ad3a67df758039a23df8e0a23fec4686f2025c44b27c0bce0
BLAKE2b-256 checksum
How to use checksums
b738b2ef6235567399ed933ff878b4eff60e7d678c6dad7e465a733af1bd8ba5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp313-cp313-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.3-cp313-cp313-macosx_11_0_arm64.whl
Size 670.6 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
dec1f7f403ffa100b46b51c8b3f9b2b87669d6404cfa804fcab8d9cc13b49d1e
BLAKE2b-256 checksum
How to use checksums
4ffd3f623f3b9aa9fab46daf4bb0fdb7d954136c910d56278cf72a840fe5e071
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ad90105bfe5e4ff1003087f7e2f6adb1393cb7f423ef2078b7203d44c1af8f3a
BLAKE2b-256 checksum
How to use checksums
54c28ac40cbb491c1653cb070646e1fc50ad958641538809d48104c83edb6cf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 941.7 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
31d785bdb2f2938479fa1b72cb702eb7daab29140de29d45b882ad48387068af
BLAKE2b-256 checksum
How to use checksums
8063dc3c22b3d20e4c900a3c7b687f0fdd32e00c6d09f8a5d134bc5f6569aaca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp312-cp312-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.3-cp312-cp312-macosx_11_0_arm64.whl
Size 670.6 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0378423204614555a496cf0c6fbef9d61ed78a5f4712ed67ce27df45ab07f939
BLAKE2b-256 checksum
How to use checksums
4ff04b71a4f3f8d7105f5b4d1af4ab45ff7ceb4ba8d0b9961843d71f578f9e20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
da1ee1065123c2b66016e65798bf6bb296755d2347cea29371ef39dfc3193e87
BLAKE2b-256 checksum
How to use checksums
60142ceba6645f2e6927fe60be8e54d162114c219c6f1b895139c42e5ed83ce3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 937.8 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5b89e16daf6a9cf05c03b928ffdf43d631143acd5780f0db5d7a27194995c8a5
BLAKE2b-256 checksum
How to use checksums
635edbdb43e84ef9e03e1a7648747123b76576cc38fa62bf5ad24b17b8b8e3a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp311-cp311-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.3-cp311-cp311-macosx_11_0_arm64.whl
Size 670.5 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b1274940a1a8cf4360e14b1bb3ed94a39ba9f1a2fd433bf4d7f485f54152191c
BLAKE2b-256 checksum
How to use checksums
25d9edd0f25203eb1dc7b473cfbc60a7f551a5d603798ff1eb6bf965aa0a06d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e6bf26bc2848d02e6ee2bed9d0d024eb1df440c093bf4c55f539f4ace4934aca
BLAKE2b-256 checksum
How to use checksums
1970384fcc82c3cf22ecb2466d05ed550380378797bcb04d21e67e12e112a9cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 936.7 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
cebe09031f3abd815d3d7036645c88bda767c24aba45e7fe5968c7ca1331a917
BLAKE2b-256 checksum
How to use checksums
f339239958eae98bd27581d67f63d80be370ee71efe477b285d5aa160c13619c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / amber_lang-2.9.3-cp310-cp310-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.3-cp310-cp310-macosx_11_0_arm64.whl
Size 670.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
61285692b935192590a6324393121af6c6c3a9aeabaab0565f02ab1440c6af29
BLAKE2b-256 checksum
How to use checksums
b2effee95c3e82a214b24bcd8b5790b7d9f7b9c2ee5ee4241b7e0f6b8545ab0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.9.3 This release

16 release files

2.9.1

16 release files

2.9.0

16 release files

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