Skip to main content

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

python -m atlas runs the same command without a PATH lookup, for a shell that cannot find atlas.

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, and descends into every subdirectory. 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. timestamp_nanoseconds goes the other way: it is an array element type, and no attribute takes it. Store the nanoseconds as int64 and name the unit beside it.

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

atlas_python-0.17.0.tar.gz (205.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

atlas_python-0.17.0-cp310-abi3-win_amd64.whl (4.8 MB view details)

Uploaded CPython 3.10+Windows x86-64

atlas_python-0.17.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

atlas_python-0.17.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.8 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

atlas_python-0.17.0-cp310-abi3-macosx_11_0_arm64.whl (5.0 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

atlas_python-0.17.0-cp310-abi3-macosx_10_12_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file atlas_python-0.17.0.tar.gz.

File metadata

  • Download URL: atlas_python-0.17.0.tar.gz
  • Upload date:
  • Size: 205.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for atlas_python-0.17.0.tar.gz
Algorithm Hash digest
SHA256 a1b536c76f7d3421ea297e2a9258463539a460a3bbda7736a684fe5d98233434
MD5 3c99b64bac6fbc1d5df2049f4350f184
BLAKE2b-256 073e9aaa2d327bf5f0da9b7f32da7ea0737092b052df7a8ff9fc6a85b0a978fe

See more details on using hashes here.

Provenance

The following attestation bundles were made for atlas_python-0.17.0.tar.gz:

Publisher: atlas-python-release.yaml on maris-development/atlas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atlas_python-0.17.0-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for atlas_python-0.17.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 716c32b70ec894b772efd6503f848a03388ad1c8f858cd638f820b26fe2cfec3
MD5 ba4eeb80b34168d3a203780fe40ed4f7
BLAKE2b-256 966a649fda53e2398f90d5c9d4ac2e728be7e872dee1fcc4d51ad8d2af7fac0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for atlas_python-0.17.0-cp310-abi3-win_amd64.whl:

Publisher: atlas-python-release.yaml on maris-development/atlas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atlas_python-0.17.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for atlas_python-0.17.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fa09b6d5f11ff6ec9330b7632e1b0cd02f78d8d43221142802ff3160c1e073c
MD5 4748099f86ef0b3862b50910e9995398
BLAKE2b-256 5f0b2584bec6950ba29eae5c4a7c435a668cba136c19b6be4720736a55b93ebb

See more details on using hashes here.

Provenance

The following attestation bundles were made for atlas_python-0.17.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: atlas-python-release.yaml on maris-development/atlas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atlas_python-0.17.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for atlas_python-0.17.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a1a6e86d1eea9ca9c332c8b7456ed64e1f240b67728a3dd14356990eef03bf72
MD5 558d310915c789dbeaeb68a0af3d2e3f
BLAKE2b-256 a1aada7fa98864805ac2ff33cf843eb664d8932273b3fb8a628649abbc78c685

See more details on using hashes here.

Provenance

The following attestation bundles were made for atlas_python-0.17.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: atlas-python-release.yaml on maris-development/atlas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atlas_python-0.17.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for atlas_python-0.17.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fdda73b082321c6e7229405658d981b5bed103da51e9cc68238211678168cfc1
MD5 1493eb4aa0f380e46d5d07f16b7fc065
BLAKE2b-256 10fbaa9663f075ad4d60e0932f2b32a086e0c762609c44f7d27eb37fcb578c04

See more details on using hashes here.

Provenance

The following attestation bundles were made for atlas_python-0.17.0-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: atlas-python-release.yaml on maris-development/atlas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file atlas_python-0.17.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for atlas_python-0.17.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a7cb32372634d7bde5b626b4374e4e021c21ee0354d54e2a160ab5e2e44601f3
MD5 f285bfedf0560fcbd70673cf808e016c
BLAKE2b-256 8331be822d82ad6da02bf4227db4d14bcffea0b6dbc9acef13d8527a7dc921c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for atlas_python-0.17.0-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: atlas-python-release.yaml on maris-development/atlas

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.17.2

6 files

0.17.1

6 files

This release

0.17.0 This release

6 files

0.16.4

6 files

0.16.3

6 files

0.16.2

6 files

0.16.1

6 files

0.16.0

6 files

0.14.0

6 files

0.13.1

6 files

0.13.0

6 files

0.12.0

6 files

0.10.0

6 files

0.9.1

6 files

0.9.0

6 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