From 285bea7d91aafb1d4002afef21fe4b3e18efcc32 Mon Sep 17 00:00:00 2001 From: Lachlan Deakin Date: Sun, 18 Feb 2024 21:04:37 +1100 Subject: [PATCH] Add `Array::dimensionality()` --- CHANGELOG.md | 1 + src/array.rs | 10 +++++++--- src/array/array_async_readable.rs | 4 ++-- src/array/array_sync_readable.rs | 10 +++++----- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ebd31025..97c821a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `ArraySubset::new_empty()` and `ArraySubset::is_empty()` - Add missing `IncompatibleArraySubsetAndShapeError::new()` - Add more array tests + - Add `Array::dimensionality()` ### Changed - Dependency bumps diff --git a/src/array.rs b/src/array.rs index f1edc0c8..6a1d8d89 100644 --- a/src/array.rs +++ b/src/array.rs @@ -329,6 +329,12 @@ impl Array { &self.shape } + /// Get the array dimensionality. + #[must_use] + pub fn dimensionality(&self) -> usize { + self.shape.len() + } + /// Get the codecs. #[must_use] pub const fn codecs(&self) -> &CodecChain { @@ -543,9 +549,7 @@ impl Array { }, ) } - None => Ok(Some(ArraySubset::new_empty( - self.chunk_grid().dimensionality(), - ))), + None => Ok(Some(ArraySubset::new_empty(self.dimensionality()))), } } } diff --git a/src/array/array_async_readable.rs b/src/array/array_async_readable.rs index b687e987..86fc9bb3 100644 --- a/src/array/array_async_readable.rs +++ b/src/array/array_async_readable.rs @@ -293,7 +293,7 @@ impl Array { chunks: &ArraySubset, options: &DecodeOptions, ) -> Result, ArrayError> { - if chunks.dimensionality() != self.chunk_grid().dimensionality() { + if chunks.dimensionality() != self.dimensionality() { return Err(ArrayError::InvalidArraySubset( chunks.clone(), self.shape().to_vec(), @@ -476,7 +476,7 @@ impl Array { array_subset: &ArraySubset, options: &DecodeOptions, ) -> Result, ArrayError> { - if array_subset.dimensionality() != self.chunk_grid().dimensionality() { + if array_subset.dimensionality() != self.dimensionality() { return Err(ArrayError::InvalidArraySubset( array_subset.clone(), self.shape().to_vec(), diff --git a/src/array/array_sync_readable.rs b/src/array/array_sync_readable.rs index 7762a8f9..6812bfc4 100644 --- a/src/array/array_sync_readable.rs +++ b/src/array/array_sync_readable.rs @@ -58,7 +58,7 @@ impl Array { chunk_indices: &[u64], options: &DecodeOptions, ) -> Result>, ArrayError> { - if chunk_indices.len() != self.chunk_grid().dimensionality() { + if chunk_indices.len() != self.dimensionality() { return Err(ArrayError::InvalidChunkGridIndicesError( chunk_indices.to_vec(), )); @@ -427,7 +427,7 @@ impl Array { chunks: &ArraySubset, options: &DecodeOptions, ) -> Result, ArrayError> { - if chunks.dimensionality() != self.chunk_grid().dimensionality() { + if chunks.dimensionality() != self.dimensionality() { return Err(ArrayError::InvalidArraySubset( chunks.clone(), self.shape().to_vec(), @@ -579,7 +579,7 @@ impl Array { array_subset: &ArraySubset, options: &DecodeOptions, ) -> Result, ArrayError> { - if array_subset.dimensionality() != self.chunk_grid().dimensionality() { + if array_subset.dimensionality() != self.dimensionality() { return Err(ArrayError::InvalidArraySubset( array_subset.clone(), self.shape().to_vec(), @@ -627,7 +627,7 @@ impl Array { // Calc self/internal concurrent limits let chunk_representation = - self.chunk_array_representation(&vec![0; self.chunk_grid().dimensionality()])?; + self.chunk_array_representation(&vec![0; self.dimensionality()])?; let (self_concurrent_limit, codec_concurrent_limit) = calc_concurrent_limits( options.concurrent_limit(), &RecommendedConcurrency::new_minimum( @@ -750,7 +750,7 @@ impl Array { _ => { // Calc self/internal concurrent limits let chunk_representation = - self.chunk_array_representation(&vec![0; self.chunk_grid().dimensionality()])?; + self.chunk_array_representation(&vec![0; self.dimensionality()])?; let (self_concurrent_limit, codec_concurrent_limit) = calc_concurrent_limits( options.concurrent_limit(), &RecommendedConcurrency::new_minimum(