iris
Ship the decoder with the data.
A container carries a reference to a WebAssembly decoder alongside its bytes, and this reads one without linking a format specific reader. Open it and hand it to anything that speaks Arrow.
import iris
import pyarrow as pa
runtime = iris.Runtime()
dataset = runtime.open_path("sample.iris")
table = pa.table(dataset)
pa.table works because a dataset carries __arrow_c_stream__, which is the Arrow PyCapsule interface, so polars, DuckDB and nanoarrow read one the same way. Nothing in the wheel imports pyarrow and the wheel does not depend on it. That is the reason there is no to_pandas and no to_table here: the protocol already exists, every consumer worth handing bytes to speaks it, and a tenth version of it is not an improvement.
The buffers are not copied on the way across. What the consumer takes ownership of is the memory the decoder wrote, and tests/test_iris.py checks that by watching pyarrow's allocator, which does not grow when a table is imported this way.
The whole API
runtime = iris.Runtime()
runtime.set_compilation_cache("/var/cache/iris/decoders") # off until this is called
dataset = runtime.open_path("sample.iris")
dataset = runtime.open(open("sample.iris", "rb").read())
dataset.name, dataset.num_columns, dataset.column_names
pa.schema(dataset)
pa.table(dataset)
pa.table(dataset.scan([0, 2])) # by position in the schema
One runtime per process is the point of the runtime. Every dataset opened from the same one shares its compiled decoders, so the second container to be opened does not compile anything. Making a runtime per file throws that away, and with a compilation cache named it is the difference between tens of milliseconds and a fraction of one. docs/COLD_START.md in the repository has the numbers.
The name
The distribution is irisdb on PyPI and the module is iris, for the same reason the crate is irisdb on crates.io and the command line tool it installs is called iris: the bare name was taken in both places before this project existed.
What it is not
This is a wrapper over the C ABI in iris-c rather than a second implementation. Python and C get the same open, the same projection rule and the same behaviour on a container that reopens for each scan, because there is one implementation of all three and neither binding contains a copy of it.
A container larger than memory is read a range at a time through the windowed path, and that path is Rust only today. From Python, a container is opened whole.
Part of iris. Licensed under Apache-2.0.
Metadata
Release files for irisdb 0.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| irisdb-0.8.1-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| irisdb-0.8.1-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| irisdb-0.8.1-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| irisdb-0.8.1-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| irisdb-0.8.1-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 20.8 MB
Release files / irisdb-0.8.1-cp39-abi3-win_amd64.whl
| Download URL | irisdb-0.8.1-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 4.4 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
944875ed275c48e02412239e118681508f8fbc5e38662eefa806cc313d0fb9ea
|
|
BLAKE2b-256 checksum How to use checksums |
3b124beaee3311cbbb291aefc4e061af13125e3bf156503027b2bd0617884971
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / irisdb-0.8.1-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | irisdb-0.8.1-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f50d12f75e7cb3698b1af20475cc9698ef3af4296400440fce91c1e01e13ec5b
|
|
BLAKE2b-256 checksum How to use checksums |
234eca88e0ac1ea93833774de3e567d38066fa8e0d826052f9193decae14fd51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / irisdb-0.8.1-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | irisdb-0.8.1-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
6e13fcd6575b0bfeaeb3ded8966385968bb676cea255c7fa015a9a256a5a4bb4
|
|
BLAKE2b-256 checksum How to use checksums |
2ab7090b427a5204a70ea3923468f767b5df1c8883935b3ab1ae0fed26c77707
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / irisdb-0.8.1-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | irisdb-0.8.1-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
85c9e9aeb4f84f273ab2f4a90ab0167a6366538693aff6cf8c69bfce3ae5465b
|
|
BLAKE2b-256 checksum How to use checksums |
a50cf7b5bdc3788166d9e290545acb4f7d4233072eddddf721827a3bf43016d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / irisdb-0.8.1-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | irisdb-0.8.1-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.4 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
ea1683b7a9c3cd45f80e3d98372a0cc091f2d8026ae918d43e05108071787786
|
|
BLAKE2b-256 checksum How to use checksums |
100fb37476c1b3cc7084a9dc4d66eca0888dcecc56119ea57dea682a024281f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|