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_HOME Where to load the .k standard library from at run time.

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

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

Source distribution (sdist)

Source distribution for amber-lang 2.9.1
File Size Uploaded
amber_lang-2.9.1.tar.gz 640.6 kB Details

Built distributions (wheels)

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

Download URL amber_lang-2.9.1.tar.gz
Size 640.6 kB
Tags Source
SHA-256 checksum
How to use checksums
4f3d5737c167589891392ecf4c8bdb36431b49eca2c6d6a12d75348c9c989ec0
BLAKE2b-256 checksum
How to use checksums
68479089fa825935a078b986155f0dd0c124577ec8ee38e33fca7d8240ed8ea6
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.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.1-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
3b0f111404ad104c2662201b7724f5b0880f0a52cc0ea006ba7e06375b96676b
BLAKE2b-256 checksum
How to use checksums
464ccc050e06ed51432b80f32493144c6bc3ed80d94243d97805434979a866c6
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.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 941.2 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a91efe941e54fb6a4f2fc07908eb7d1dc579b0216fce3e3958d5aeb9716ac66c
BLAKE2b-256 checksum
How to use checksums
a5d8f7d6c35b19568e33eea8d70569822b2f63526ce271904191d01c3400961f
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.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.1-cp314-cp314-macosx_11_0_arm64.whl
Size 669.9 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
df8d096acfb6b951b75e7a315ff3e01fa13d55883d32e629f4d3876dd9dac279
BLAKE2b-256 checksum
How to use checksums
9df71cab04840984a51b42faa151f748a2883a9da7b6c20be259faa0719023f2
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.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.1-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
24df3a54d572007b23d8af4f83ae04f480d13fafa59f71a6b9fdd48e0d42417e
BLAKE2b-256 checksum
How to use checksums
7c6c7109fceb77e3fefb95c93330b1ac7be89f76d08db5de891de00dd4aacf63
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.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 941.0 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
37c6e78018a962a53d927e84e4f46d2dce496eedecad99e1bab2d52c02b73e76
BLAKE2b-256 checksum
How to use checksums
9a5f9064971f1d8a312cd0e0df72810fab41fd9664f7e28883b891cac332c0fc
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.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.1-cp313-cp313-macosx_11_0_arm64.whl
Size 669.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
39d6f2f6802e626726028ac2a86556a84be7efdceff6e3880e104b36191f61ed
BLAKE2b-256 checksum
How to use checksums
6cb04072b7107519274500afa7f3191b2af6c9cbccd2b163760efbb5df3c95ab
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.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.1-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
23164498db59e0db34ee9420ad90b7074766a0c6243ee0a940d82468a86a307d
BLAKE2b-256 checksum
How to use checksums
e8bb582350d9bfd0f3fcf502ac3a617fcd7b7398ca1b43265d1e219fb5ed2d9c
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.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 940.9 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
fe38e8c22da590f9ac679ad39096eb21f61f08566feddcaaad7a31290214c867
BLAKE2b-256 checksum
How to use checksums
f13ac369cf0110a225a00d35e9fe0e92f78941a661bc1d7ad0edf67c5c894136
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.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.1-cp312-cp312-macosx_11_0_arm64.whl
Size 669.9 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8cbcedefc68924d2f2ebd5b3b933db5134506ade1a4e3039d357f0674a5b8487
BLAKE2b-256 checksum
How to use checksums
1ace3abe09b22dc8ec133bbc405040981ab2c22137ed3a755490f12cd1d059ee
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.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.1-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
394cc2f1134c1f7958dc320074f0e1c76846e79def845378842674911f51ecfe
BLAKE2b-256 checksum
How to use checksums
e9f12625953de2726085d4bd1bd5235cb824d553c24d3fe0696f9e1c2ebe90e3
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.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 937.1 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
eaab7dca57226c5e61d19674c9fea1cd54236b0cf85f903ae6825658b281ead0
BLAKE2b-256 checksum
How to use checksums
8d819ac16cf638ca5d4eefd6344a08d56799a67b1e662ebf1d3cb9177d95e57e
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.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.1-cp311-cp311-macosx_11_0_arm64.whl
Size 669.8 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ed2aedd72dfecfff1cb5d09e8f89e06534de8b9d977634744d039cdbda0b92b8
BLAKE2b-256 checksum
How to use checksums
f0cd37bf6ea6e356451d4474d574e102a6d70ebaa466c975b727c9d229504057
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.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL amber_lang-2.9.1-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
68b7a6552b4c92532bbdf2a41f1b40531fc79317026c0e083f3be54f42db715f
BLAKE2b-256 checksum
How to use checksums
ca70d0c5336f4d5d7cb44efea5f0f2f8d547c53dfabefd3210ea8a72eb4a7e90
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.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL amber_lang-2.9.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 936.0 kB
Tags CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
f115205bb7e57f7e434ebdbb790e8a9e30556958dd2ef36fd5a252d68cb6a423
BLAKE2b-256 checksum
How to use checksums
68c259e9a6eff740ea166290d6ecb89c3cb283913f97466212bbfab6f81f26f8
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.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL amber_lang-2.9.1-cp310-cp310-macosx_11_0_arm64.whl
Size 669.8 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7f0c4e5fd67662bd061969e14a1c4aaec6ac8ae4488e7c84e735ea77059b96c7
BLAKE2b-256 checksum
How to use checksums
98ce1b2aa9f84f6ab7c8e50c25e124fca7321b71930d07f5f550cf5b0a8a5ae6
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

2.9.3

16 release files

This release

2.9.1 This release

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