Skip to content

Commit 4e99477

Browse files
test: output ndarrays as json arrays
1 parent 52a4192 commit 4e99477

File tree

6 files changed

+50
-1
lines changed

6 files changed

+50
-1
lines changed

packages/treetime-convolution/src/testing/metrics/pointwise/errors.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
use crate::testing::metrics::config::PointwiseConfig;
22
use ndarray::Array1;
33
use serde::{Deserialize, Serialize};
4+
use treetime_utils::serde::{array1_as_vec, array1_from_vec};
45

56
#[derive(Debug, Clone, Serialize, Deserialize)]
67
pub struct PointwiseErrors {
8+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
79
pub absolute: Array1<f64>,
10+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
811
pub relative: Array1<f64>,
12+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
913
pub signed: Array1<f64>,
14+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
1015
pub logarithmic: Array1<f64>,
1116
pub summary: PointwiseErrorSummary,
1217
}

packages/treetime-convolution/src/testing/metrics/pointwise/structural.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@ use crate::testing::metrics::config::PointwiseConfig;
22
use ndarray::Array1;
33
use serde::{Deserialize, Serialize};
44
use std::collections::BTreeMap;
5+
use treetime_utils::serde::{array1_as_vec, array1_from_vec};
56

67
#[derive(Debug, Clone, Serialize, Deserialize)]
78
pub struct StructuralErrors {
9+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
810
pub first_derivative: Array1<f64>,
11+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
912
pub second_derivative: Array1<f64>,
13+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
1014
pub symmetry_residual: Array1<f64>,
15+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
1116
pub monotonicity_violations: Array1<f64>,
1217
pub summary: StructuralErrorSummary,
1318
}

packages/treetime-convolution/src/testing/metrics/pointwise/tolerance.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,41 @@
11
use crate::testing::metrics::config::PointwiseConfig;
22
use ndarray::Array1;
3-
use serde::{Deserialize, Serialize};
3+
use serde::{Deserialize, Deserializer, Serialize, Serializer};
4+
use treetime_utils::serde::{array1_as_vec, array1_from_vec};
5+
6+
fn serialize_array_of_array1<S>(arrays: &[Array1<f64>; 3], serializer: S) -> Result<S::Ok, S::Error>
7+
where
8+
S: Serializer,
9+
{
10+
use serde::ser::SerializeSeq;
11+
let mut seq = serializer.serialize_seq(Some(3))?;
12+
for array in arrays {
13+
let vec: Vec<f64> = array.to_vec();
14+
seq.serialize_element(&vec)?;
15+
}
16+
seq.end()
17+
}
18+
19+
fn deserialize_array_of_array1<'de, D>(deserializer: D) -> Result<[Array1<f64>; 3], D::Error>
20+
where
21+
D: Deserializer<'de>,
22+
{
23+
let vecs: Vec<Vec<f64>> = Vec::deserialize(deserializer)?;
24+
if vecs.len() != 3 {
25+
return Err(serde::de::Error::custom(format!("Expected 3 arrays, got {}", vecs.len())));
26+
}
27+
Ok([
28+
Array1::from_vec(vecs[0].clone()),
29+
Array1::from_vec(vecs[1].clone()),
30+
Array1::from_vec(vecs[2].clone()),
31+
])
32+
}
433

534
#[derive(Debug, Clone, Serialize, Deserialize)]
635
pub struct ToleranceMetrics {
36+
#[serde(serialize_with = "serialize_array_of_array1", deserialize_with = "deserialize_array_of_array1")]
737
pub pass_masks: [Array1<f64>; 3],
38+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
839
pub support_coverage_mask: Array1<f64>,
940
pub summary: ToleranceSummary,
1041
}

packages/treetime-convolution/src/testing/metrics/spatial/cumulative.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
use ndarray::{Array1, Axis};
22
use serde::{Deserialize, Serialize};
33
use treetime_utils::ndarray::cumsum_axis;
4+
use treetime_utils::serde::{array1_as_vec, array1_from_vec};
45

56
#[derive(Debug, Clone, Serialize, Deserialize)]
67
pub struct CumulativeMetrics {
8+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
79
pub cumulative_error: Array1<f64>,
810
pub summary: CumulativeSummary,
911
}

packages/treetime-convolution/src/testing/metrics/spatial/regional.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use crate::testing::metrics::config::SpatialConfig;
22
use ndarray::Array1;
33
use serde::{Deserialize, Serialize};
4+
use treetime_utils::serde::{array1_as_vec, array1_from_vec};
45

56
#[derive(Debug, Clone, Serialize, Deserialize)]
67
pub struct RegionalMetrics {
8+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
79
pub peak_region_errors: Array1<f64>,
10+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
811
pub tail_region_errors: Array1<f64>,
912
pub summary: RegionalSummary,
1013
}

packages/treetime-convolution/src/testing/metrics/spatial/windowed.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use crate::testing::metrics::config::SpatialConfig;
22
use ndarray::Array1;
33
use serde::{Deserialize, Serialize};
4+
use treetime_utils::serde::{array1_as_vec, array1_from_vec};
45

56
#[derive(Debug, Clone, Serialize, Deserialize)]
67
pub struct WindowedMetrics {
8+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
79
pub sliding_rms: Array1<f64>,
10+
#[serde(serialize_with = "array1_as_vec", deserialize_with = "array1_from_vec")]
811
pub sliding_max: Array1<f64>,
912
pub summary: WindowedSummary,
1013
}

0 commit comments

Comments
 (0)