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
- How it fits together
- Quick start
- The API
- Zero-copy, precisely
- Type mapping
- Building from source
- Building wheels
- Threading
- Troubleshooting
- Licence
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:
$AMBER_LIB_DIR— a directory containing a prebuiltlibamber.so$AMBER_SRC— an engine checkout; runs its own./build.sh --shared-onlyvendor/amber/— whatscripts/vendor_engine.shwrites, and what the sdist ships../amber/— a sibling checkout- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| amber_lang-2.9.3.tar.gz | 642.4 kB | Details |
Built distributions (wheels)
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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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 logRelease 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