Skip to content

Commit

Permalink
Add group metadata support to zarrs_info
Browse files Browse the repository at this point in the history
  • Loading branch information
LDeakin committed Jul 3, 2024
1 parent df17bb1 commit 0324ffe
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 55 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- `zarrs_info`: add group metadata support

## [0.5.0] - 2024-07-02

### Added
Expand Down
7 changes: 3 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "zarrs_tools"
version = "0.5.0"
version = "0.5.1"
authors = ["Lachlan Deakin <ljdgit@gmail.com>"]
edition = "2021"
rust-version = "1.75"
Expand Down Expand Up @@ -43,7 +43,7 @@ sysinfo = "0.30.6"
tempfile = "3.10.1"
thiserror = "1.0.57"
tokio = { version = "1.34.0", features = ["macros", "rt-multi-thread"] }
zarrs = { version = "0.15.0-beta.1", features = [] }
zarrs = { version = "0.15.0-beta.2", features = [] }

[[bin]]
name = "zarrs_benchmark_read_sync"
Expand Down Expand Up @@ -101,6 +101,6 @@ strip = true
# aarch64-apple-darwin = "macos-14"
# x86_64-apple-darwin = "macos-12"

# [patch.crates-io]
[patch.crates-io]
# zarrs = { path = "../zarrs" }
# zarrs = { git = "https://github.com/LDeakin/zarrs.git" }
zarrs = { git = "https://github.com/LDeakin/zarrs.git" }
106 changes: 59 additions & 47 deletions src/bin/zarrs_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ use serde::Serialize;
use serde_json::Number;
use zarrs::{
array::{Array, ArrayMetadataOptions, DimensionName, FillValueMetadata},
group::{Group, GroupMetadataOptions},
metadata::Metadata,
storage::store::FilesystemStore,
};
Expand All @@ -31,32 +32,32 @@ struct Cli {
command: InfoCommand,
}

#[derive(Parser)]
#[derive(Parser, Debug)]
struct HistogramParams {
n_bins: usize,
min: f64,
max: f64,
}

#[derive(Subcommand)]
#[derive(Subcommand, Debug)]
enum InfoCommand {
/// The metadata.
/// The array/group metadata.
Metadata,
/// The metadata (interpreted as V3).
/// The array/group metadata (interpreted as V3).
MetadataV3,
/// The array/group attributes.
Attributes,
/// The array shape.
Shape,
/// The array data type.
DataType,
/// The array fill value.
FillValue,
/// The array attributes.
Attributes,
/// The dimension names.
/// The array dimension names.
DimensionNames,
/// Range.
/// The array range.
Range,
/// Histogram.
/// The array histogram.
Histogram(HistogramParams),
}

Expand All @@ -69,28 +70,59 @@ fn main() -> std::process::ExitCode {
}
}

fn group_metadata_options_v3() -> GroupMetadataOptions {
let mut metadata_options = GroupMetadataOptions::default();
metadata_options.set_metadata_convert_version(zarrs::metadata::MetadataConvertVersion::V3);
metadata_options
}

fn array_metadata_options_v3() -> ArrayMetadataOptions {
let mut metadata_options = ArrayMetadataOptions::default();
metadata_options.set_metadata_convert_version(zarrs::metadata::MetadataConvertVersion::V3);
metadata_options.set_include_zarrs_metadata(false);
metadata_options
}

fn run() -> Result<(), Box<dyn Error>> {
let cli = Cli::parse();

let start = std::time::Instant::now();

let storage = Arc::new(FilesystemStore::new(&cli.path).unwrap());
let array = Array::open(storage, "/").unwrap();
let storage = Arc::new(FilesystemStore::new(&cli.path)?);

// Group handling
let group = Group::open(storage.clone(), "/");
if let Ok(group) = group {
match cli.command {
InfoCommand::Metadata => {
println!("{}", serde_json::to_string_pretty(group.metadata())?);
}
InfoCommand::MetadataV3 => {
let metadata = group.metadata_opt(&group_metadata_options_v3());
println!("{}", serde_json::to_string_pretty(&metadata)?);
}
InfoCommand::Attributes => {
println!("{}", serde_json::to_string_pretty(group.attributes())?);
}
_ => {
println!("The {:?} command is not supported for a group", cli.command)
}
}
return Ok(());
}

// Array handling
let array = Array::open(storage.clone(), "/")?;
match cli.command {
InfoCommand::Metadata => {
println!(
"{}",
serde_json::to_string_pretty(array.metadata()).unwrap()
);
println!("{}", serde_json::to_string_pretty(array.metadata())?);
}
InfoCommand::MetadataV3 => {
let mut metadata_options = ArrayMetadataOptions::default();
metadata_options
.set_metadata_convert_version(zarrs::metadata::MetadataConvertVersion::V3);
metadata_options.set_include_zarrs_metadata(false);
let metadata = array.metadata_opt(&metadata_options);
println!("{}", serde_json::to_string_pretty(&metadata).unwrap());
let metadata = array.metadata_opt(&array_metadata_options_v3());
println!("{}", serde_json::to_string_pretty(&metadata)?);
}
InfoCommand::Attributes => {
println!("{}", serde_json::to_string_pretty(array.attributes())?);
}
InfoCommand::Shape => {
#[derive(Serialize)]
Expand All @@ -101,8 +133,7 @@ fn run() -> Result<(), Box<dyn Error>> {
"{}",
serde_json::to_string_pretty(&Shape {
shape: array.shape().to_vec()
})
.unwrap()
})?
);
}
InfoCommand::DataType => {
Expand All @@ -114,8 +145,7 @@ fn run() -> Result<(), Box<dyn Error>> {
"{}",
serde_json::to_string_pretty(&DataType {
data_type: array.data_type().metadata()
})
.unwrap()
})?
);
}
InfoCommand::FillValue => {
Expand All @@ -127,8 +157,7 @@ fn run() -> Result<(), Box<dyn Error>> {
"{}",
serde_json::to_string_pretty(&FillValue {
fill_value: array.data_type().metadata_fill_value(array.fill_value())
})
.unwrap()
})?
);
}
InfoCommand::DimensionNames => {
Expand All @@ -140,21 +169,7 @@ fn run() -> Result<(), Box<dyn Error>> {
"{}",
serde_json::to_string_pretty(&DimensionNames {
dimension_names: array.dimension_names().clone()
})
.unwrap()
);
}
InfoCommand::Attributes => {
#[derive(Serialize)]
struct Attributes {
attributes: serde_json::Map<String, serde_json::Value>,
}
println!(
"{}",
serde_json::to_string_pretty(&Attributes {
attributes: array.attributes().clone()
})
.unwrap()
})?
);
}
InfoCommand::Range => {
Expand All @@ -164,10 +179,7 @@ fn run() -> Result<(), Box<dyn Error>> {
min: Number,
max: Number,
}
println!(
"{}",
serde_json::to_string_pretty(&MinMax { min, max }).unwrap()
);
println!("{}", serde_json::to_string_pretty(&MinMax { min, max })?);
}
InfoCommand::Histogram(histogram_params) => {
let (bin_edges, hist) = zarrs_tools::info::calculate_histogram(
Expand All @@ -184,7 +196,7 @@ fn run() -> Result<(), Box<dyn Error>> {
}
println!(
"{}",
serde_json::to_string_pretty(&Histogram { bin_edges, hist }).unwrap()
serde_json::to_string_pretty(&Histogram { bin_edges, hist })?
);
}
}
Expand Down

0 comments on commit 0324ffe

Please sign in to comment.