Crates.io | zarrs |
lib.rs | zarrs |
version | 0.18.0 |
source | src |
created_at | 2023-09-25 06:02:04.411191 |
updated_at | 2024-11-23 04:34:42.575666 |
description | A library for the Zarr storage format for multidimensional arrays and metadata |
homepage | |
repository | https://github.com/LDeakin/zarrs |
max_upload_size | |
id | 982388 |
size | 1,409,039 |
zarrs
is a Rust library for the Zarr storage format for multidimensional arrays and metadata. It supports:
A changelog can be found here. Correctness issues with past versions are detailed here.
Developed at the Department of Materials Physics, Australian National University, Canberra, Australia.
[!TIP] If you are a Python user, check out
zarrs-python
. It includes a high-performance codec pipeline for the referencezarr-python
implementation.
zarrs
Book.array::Array
is a good place to start.zarrs
ecosystem.use zarrs::group::GroupBuilder;
use zarrs::array::{ArrayBuilder, DataType, FillValue, ZARR_NAN_F32};
use zarrs::array::codec::GzipCodec; // requires gzip feature
use zarrs::array_subset::ArraySubset;
use zarrs::storage::ReadableWritableListableStorage;
use zarrs::filesystem::FilesystemStore; // requires filesystem feature
// Create a filesystem store
let store_path: PathBuf = "/path/to/hierarchy.zarr".into();
let store: ReadableWritableListableStorage =
Arc::new(FilesystemStore::new(&store_path)?);
// Write the root group metadata
GroupBuilder::new()
.build(store.clone(), "/")?
// .attributes(...)
.store_metadata()?;
// Create a new V3 array using the array builder
let array = ArrayBuilder::new(
vec![3, 4], // array shape
DataType::Float32,
vec![2, 2].try_into()?, // regular chunk shape (non-zero elements)
FillValue::from(ZARR_NAN_F32),
)
.bytes_to_bytes_codecs(vec![
Arc::new(GzipCodec::new(5)?),
])
.dimension_names(["y", "x"].into())
.attributes(serde_json::json!({"Zarr V3": "is great"}).as_object().unwrap().clone())
.build(store.clone(), "/array")?; // /path/to/hierarchy.zarr/array
// Store the array metadata
array.store_metadata()?;
println!("{}", serde_json::to_string_pretty(array.metadata())?);
// {
// "zarr_format": 3,
// "node_type": "array",
// ...
// }
// Perform some operations on the chunks
array.store_chunk_elements::<f32>(
&[0, 1], // chunk index
&[0.2, 0.3, 1.2, 1.3]
)?;
array.store_array_subset_ndarray::<f32, _>(
&[1, 1], // array index (start of subset)
ndarray::array![[-1.1, -1.2], [-2.1, -2.2]]
)?;
array.erase_chunk(&[1, 1])?;
// Retrieve all array elements as an ndarray
let array_ndarray = array.retrieve_array_subset_ndarray::<f32>(&array.subset_all())?;
println!("{array_ndarray:4}");
// [[ NaN, NaN, 0.2, 0.3],
// [ NaN, -1.1, -1.2, 1.3],
// [ NaN, -2.1, NaN, NaN]]
zarrs
EcosystemCrate | Docs / Description |
---|---|
Core | |
zarrs |
The core library for manipulating Zarr hierarchies |
zarrs_metadata |
Zarr metadata support |
zarrs_storage |
The storage API for zarrs |
Stores | |
zarrs_filesystem |
A filesystem store |
zarrs_object_store |
object_store store support |
zarrs_opendal |
opendal store support |
zarrs_http |
A synchronous http store |
zarrs_zip |
A storage adapter for zip files |
zarrs_icechunk | icechunk store support |
Bindings | |
zarrs-python | A codec pipeline for zarr-python |
zarrs_ffi | A subset of zarrs exposed as a C/C++ API |
Zarr Metadata Conventions | |
ome_zarr_metadata | A library for OME-Zarr (previously OME-NGFF) metadata |
zarrs
.zarrs
is licensed under either of
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.