atlas-python
Thousands of NetCDF datasets in one immutable file. It sits on local disk or on object storage: S3, GCS, Azure, or HTTP. A Rust core, five operations, and one command.
pip install atlas-python
atlas create /data/nc /data/collection
atlas ls /data/collection
atlas show /data/collection 2024-01.nc
atlas info /data/collection
atlas rm /data/collection 2024-02.nc 2024-03.nc
| Extra | Install | Adds |
|---|---|---|
| cloud | pip install "atlas-python[cloud]" |
S3 / GCS / Azure / HTTP via obstore |
numpy, xarray, and dask install automatically.
Five operations
The same five as a library:
import atlas
atlas.create("/data/nc", "/data/collection") # from a directory of NetCDF files
atlas.list_datasets("/data/collection") # ['2024-01.nc', '2024-02.nc', '2024-03.nc']
atlas.describe("/data/collection", "2024-01.nc") # types, shapes, attrs, statistics
atlas.info("/data/collection") # counts, size, codec, statistics
atlas.remove("/data/collection", ["2024-02.nc"]) # updates the mask
Every one takes a local path, a URL, or an obstore handle:
atlas ls s3://my-bucket/collections/2024 --region eu-west-1
atlas.list_datasets("s3://my-bucket/collections/2024", region="eu-west-1")
Two things to internalise
One write builds a collection. There is no append, no in-place update, and
no flush. The file has a valid trailer, or it is no collection. To change a
dataset, rebuild the collection. remove is the one exception. It writes a
small mask file, and never touches the container. It therefore reclaims no
space, and moves no ordinal.
Python writes. Rust reads array data. From Python you build a collection
and read its metadata. That is the dataset names, the array types, the
shapes, the chunk shapes, the fill values, the attributes, and the statistics
of the write. There is no read_array. Array values come from the Rust API.
That split makes the read side free. The footer an open already fetched answers every metadata call. A catalogue of a thousand datasets is therefore one request.
What show gives you
$ atlas show /data/collection 2024-01.nc
dataset 2024-01.nc {
dimensions:
lat = 4 ;
lon = 6 ;
variables:
float32 temperature(lat, lon) ;
temperature:_FillValue = nan ;
temperature:units = "celsius" ;
// stats: count=24 min=1.0 max=24.0
string station(lat) ;
// stats: count=4 min="a" max="d"
// global attributes:
:month = 1 ;
// ordinal 0, segment bytes 8..1691
}
The shape follows ncdump -h. It adds the statistics of the write: the
minimum, the maximum, and how many elements are missing. --json on any read
command gives the same content as a structure.
Ingest
create scans a directory for .nc, .nc4, .cdf, and .netcdf. It sorts
them, and writes one dataset per file, named after the file. Each coordinate
and data variable becomes an array. Each variable attribute becomes a per-array
attribute. _FillValue becomes the fill of the array.
Each file opens with dask chunking. A file far larger than memory therefore
streams block by block. --chunk-size sets the block budget, and defaults to
128 MiB. It is about the memory ceiling per variable. Those blocks also become
the stored chunk shape.
Nothing at the destination is readable until every file lands. A failure
part-way leaves no collection, and not a partial one. on_error="skip", or
--skip-errors, trades that for progress.
Atlas cannot store every numpy dtype, and bool is the common case. One such
variable fails the whole file by default. on_unsupported="skip", or
--skip-unsupported, leaves out that one array and lands the rest.
--log-file PATH, or atlas.log_to_file(path), appends every error and
warning to a file, each with its reason and the file it came from.
dtypes
| numpy | atlas |
|---|---|
int / uint widths, float32, float64 |
the same |
datetime64[ns] |
timestamp_nanoseconds |
timedelta64[*] |
int64 nanoseconds, plus a unit marker |
object / S / U |
string |
bool, binary, and the list types work as an attribute value. No one of
them works yet as an array element type.
Documentation
The full docs sit at https://maris-development.github.io/atlas/. They hold the command reference, and guides for creating, inspecting, removing, dtypes, reading data, and cloud storage.
The format itself is documented in
docs/.
License
Apache-2.0. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atlas_python-0.16.1.tar.gz.
File metadata
- Download URL: atlas_python-0.16.1.tar.gz
- Upload date:
- Size: 174.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69a3d0c3df24cd819a6b3b46fe708de342f5e9d046e078e4d7333b6a35dc0174
|
|
| MD5 |
3ef9611d28c0cff84381900d69bedf3e
|
|
| BLAKE2b-256 |
41ab38919b49f2f3fe2c3d2e2f7d7fdc7ca7455af893d831b259dc3f82cb51d9
|
Provenance
The following attestation bundles were made for atlas_python-0.16.1.tar.gz:
Publisher:
atlas-python-release.yaml on maris-development/atlas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlas_python-0.16.1.tar.gz -
Subject digest:
69a3d0c3df24cd819a6b3b46fe708de342f5e9d046e078e4d7333b6a35dc0174 - Sigstore transparency entry: 2676412302
- Sigstore integration time:
-
Permalink:
maris-development/atlas@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Branch / Tag:
refs/tags/0.16.1 - Owner: https://github.com/maris-development
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
atlas-python-release.yaml@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Trigger Event:
release
-
Statement type:
File details
Details for the file atlas_python-0.16.1-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: atlas_python-0.16.1-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 5.3 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7646390ae62a5e97823cc9b5067c66d184a8ba192d7fe1b34e31da6de79f3bc3
|
|
| MD5 |
cabf0eb34a67737d294c83e4f0fea7cf
|
|
| BLAKE2b-256 |
e76fc49ea923faec9f44cc8e6ccd08546172bdf3f8a734de717d72c5c34a1083
|
Provenance
The following attestation bundles were made for atlas_python-0.16.1-cp310-abi3-win_amd64.whl:
Publisher:
atlas-python-release.yaml on maris-development/atlas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlas_python-0.16.1-cp310-abi3-win_amd64.whl -
Subject digest:
7646390ae62a5e97823cc9b5067c66d184a8ba192d7fe1b34e31da6de79f3bc3 - Sigstore transparency entry: 2676412493
- Sigstore integration time:
-
Permalink:
maris-development/atlas@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Branch / Tag:
refs/tags/0.16.1 - Owner: https://github.com/maris-development
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
atlas-python-release.yaml@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Trigger Event:
release
-
Statement type:
File details
Details for the file atlas_python-0.16.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: atlas_python-0.16.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 6.0 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3054fc12052baf686ad45085c78ea4609948b8bdb1a19c1f0568943d940e6fac
|
|
| MD5 |
94ad2c5b8013ba71ea69c1713b821fc4
|
|
| BLAKE2b-256 |
f9d9d42794103e34b1d2c602b8c312f60077c82a87d32512e31f8738b164351c
|
Provenance
The following attestation bundles were made for atlas_python-0.16.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
atlas-python-release.yaml on maris-development/atlas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlas_python-0.16.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
3054fc12052baf686ad45085c78ea4609948b8bdb1a19c1f0568943d940e6fac - Sigstore transparency entry: 2676412399
- Sigstore integration time:
-
Permalink:
maris-development/atlas@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Branch / Tag:
refs/tags/0.16.1 - Owner: https://github.com/maris-development
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
atlas-python-release.yaml@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Trigger Event:
release
-
Statement type:
File details
Details for the file atlas_python-0.16.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: atlas_python-0.16.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 6.2 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdc5a7ed8f928a580650bb0ebfb2821330e68a61c34f3e80f314f80854d5ac08
|
|
| MD5 |
d936848c02ff0d260432762e006edb29
|
|
| BLAKE2b-256 |
f5a606b728734d9a4b64330b201cb2938e7e7afbdd4e2e66d1042b38ee3054cd
|
Provenance
The following attestation bundles were made for atlas_python-0.16.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
atlas-python-release.yaml on maris-development/atlas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlas_python-0.16.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
bdc5a7ed8f928a580650bb0ebfb2821330e68a61c34f3e80f314f80854d5ac08 - Sigstore transparency entry: 2676412612
- Sigstore integration time:
-
Permalink:
maris-development/atlas@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Branch / Tag:
refs/tags/0.16.1 - Owner: https://github.com/maris-development
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
atlas-python-release.yaml@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Trigger Event:
release
-
Statement type:
File details
Details for the file atlas_python-0.16.1-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: atlas_python-0.16.1-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 5.3 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ccb1ef656d6d977e50ce46f51c9e7e5d0f6f1c9c0c1a8abaea540c0cdec64a6
|
|
| MD5 |
29608c9f51e606ed937cb15085e1497f
|
|
| BLAKE2b-256 |
feacaf09af309df3647f06a5f8e9e136760e4c77f618e34acff5e5ad068611a9
|
Provenance
The following attestation bundles were made for atlas_python-0.16.1-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
atlas-python-release.yaml on maris-development/atlas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlas_python-0.16.1-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
0ccb1ef656d6d977e50ce46f51c9e7e5d0f6f1c9c0c1a8abaea540c0cdec64a6 - Sigstore transparency entry: 2676412857
- Sigstore integration time:
-
Permalink:
maris-development/atlas@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Branch / Tag:
refs/tags/0.16.1 - Owner: https://github.com/maris-development
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
atlas-python-release.yaml@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Trigger Event:
release
-
Statement type:
File details
Details for the file atlas_python-0.16.1-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: atlas_python-0.16.1-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 5.6 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73838aaf47bdab9f9769f7cd94b749d4c30a029d9406da3ac18bd20b1d4cd349
|
|
| MD5 |
b7bad932387cd8209c3ba82deb62c2e4
|
|
| BLAKE2b-256 |
353a2c5703908766599718046ff4923a193eddd9931fa2939af44dedd6bab107
|
Provenance
The following attestation bundles were made for atlas_python-0.16.1-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
atlas-python-release.yaml on maris-development/atlas
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
atlas_python-0.16.1-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
73838aaf47bdab9f9769f7cd94b749d4c30a029d9406da3ac18bd20b1d4cd349 - Sigstore transparency entry: 2676412766
- Sigstore integration time:
-
Permalink:
maris-development/atlas@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Branch / Tag:
refs/tags/0.16.1 - Owner: https://github.com/maris-development
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
atlas-python-release.yaml@dec77e9dc96ee45d4a81420f416421f4ec9a1267 -
Trigger Event:
release
-
Statement type: