Skip to content

Commit c52e773

Browse files
committed
refactor: follow updated schema
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
1 parent f67a9a2 commit c52e773

File tree

3 files changed

+33
-48
lines changed

3 files changed

+33
-48
lines changed

src/boost_histogram/serialization/_storage.py

+17-23
Original file line numberDiff line numberDiff line change
@@ -32,43 +32,37 @@ def _(
3232
) -> dict[str, Any]:
3333
return {
3434
"type": "int" if np.issubdtype(data.dtype, np.integer) else "double",
35-
"data": data,
35+
"values": data,
3636
}
3737

3838

3939
@_storage_to_dict.register(storage.Weight)
4040
def _(_storage: storage.Weight, /, data: Any) -> dict[str, Any]:
4141
return {
4242
"type": "weighted",
43-
"data": {
44-
"values": data.value,
45-
"variances": data.variance,
46-
},
43+
"values": data.value,
44+
"variances": data.variance,
4745
}
4846

4947

5048
@_storage_to_dict.register(storage.Mean)
5149
def _(_storage: storage.Mean, /, data: Any) -> dict[str, Any]:
5250
return {
5351
"type": "mean",
54-
"data": {
55-
"counts": data.count,
56-
"values": data.value,
57-
"variances": data.variance,
58-
},
52+
"counts": data.count,
53+
"values": data.value,
54+
"variances": data.variance,
5955
}
6056

6157

6258
@_storage_to_dict.register(storage.WeightedMean)
6359
def _(_storage: storage.WeightedMean, /, data: Any) -> dict[str, Any]:
6460
return {
6561
"type": "weighted_mean",
66-
"data": {
67-
"sum_of_weights": data.sum_of_weights,
68-
"sum_of_weights_squared": data.sum_of_weights_squared,
69-
"values": data.value,
70-
"variances": data.variance,
71-
},
62+
"sum_of_weights": data.sum_of_weights,
63+
"sum_of_weights_squared": data.sum_of_weights_squared,
64+
"values": data.value,
65+
"variances": data.variance,
7266
}
7367

7468

@@ -95,20 +89,20 @@ def _data_from_dict(data: dict[str, Any], /) -> np.typing.NDArray[Any]:
9589
storage_type = data["type"]
9690

9791
if storage_type in {"int", "double"}:
98-
return data["data"]
92+
return data["values"]
9993
if storage_type == "weighted":
100-
return np.stack([data["data"]["values"], data["data"]["variances"]]).T
94+
return np.stack([data["values"], data["variances"]]).T
10195
if storage_type == "mean":
10296
return np.stack(
103-
[data["data"]["counts"], data["data"]["values"], data["data"]["variances"]],
97+
[data["counts"], data["values"], data["variances"]],
10498
).T
10599
if storage_type == "weighted_mean":
106100
return np.stack(
107101
[
108-
data["data"]["sum_of_weights"],
109-
data["data"]["sum_of_weights_squared"],
110-
data["data"]["values"],
111-
data["data"]["variances"],
102+
data["sum_of_weights"],
103+
data["sum_of_weights_squared"],
104+
data["values"],
105+
data["variances"],
112106
],
113107
).T
114108

src/boost_histogram/serialization/hdf5.py

+6-13
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,13 @@ def write_hdf5_schema(grp: h5py.Group, /, histogram: Histogram) -> None:
5858
# Storage
5959
storage_grp = grp.create_group("storage")
6060
storage_type = hist_dict["storage"]["type"]
61-
storage_data = hist_dict["storage"]["data"]
6261

6362
storage_grp.attrs["type"] = storage_type
6463

65-
if not isinstance(storage_data, dict):
66-
storage_grp.create_dataset("data", shape=storage_data.shape, data=storage_data)
67-
else:
68-
storage_data_grp = storage_grp.create_group("data")
69-
for key, value in storage_data.items():
70-
storage_data_grp.create_dataset(key, shape=value.shape, data=value)
64+
for key, value in hist_dict["storage"].items():
65+
if key == "type":
66+
continue
67+
storage_grp.create_dataset(key, shape=value.shape, data=value)
7168

7269

7370
def read_hdf5_schema(grp: h5py.Group, /) -> Histogram:
@@ -84,12 +81,8 @@ def read_hdf5_schema(grp: h5py.Group, /) -> Histogram:
8481
storage_grp = grp["storage"]
8582
assert isinstance(storage_grp, h5py.Group)
8683
storage: dict[str, Any] = {"type": storage_grp.attrs["type"]}
87-
data_grp = storage_grp["data"]
88-
if isinstance(data_grp, h5py.Dataset):
89-
storage["data"] = np.array(data_grp)
90-
else:
91-
assert isinstance(data_grp, h5py.Group)
92-
storage["data"] = {key: np.array(data_grp[key]) for key in data_grp}
84+
for key in storage_grp:
85+
storage[key] = np.asarray(storage_grp[key])
9386

9487
histogram_dict = {"axes": axes, "storage": storage}
9588
if "metadata" in grp:

tests/test_serialization_generic.py

+10-12
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def test_simple_to_dict(storage_type: bh.storage.Storage, expected_type: str) ->
3434
assert data["axes"][0]["overflow"]
3535
assert not data["axes"][0]["circular"]
3636
assert data["storage"]["type"] == expected_type
37-
assert data["storage"]["data"] == pytest.approx(np.zeros(12))
37+
assert data["storage"]["values"] == pytest.approx(np.zeros(12))
3838

3939

4040
def test_weighed_to_dict() -> None:
@@ -52,8 +52,8 @@ def test_weighed_to_dict() -> None:
5252
assert data["axes"][0]["overflow"]
5353
assert not data["axes"][0]["circular"]
5454
assert data["storage"]["type"] == "weighted"
55-
assert data["storage"]["data"]["values"] == pytest.approx(np.zeros(14))
56-
assert data["storage"]["data"]["variances"] == pytest.approx(np.zeros(14))
55+
assert data["storage"]["values"] == pytest.approx(np.zeros(14))
56+
assert data["storage"]["variances"] == pytest.approx(np.zeros(14))
5757

5858

5959
def test_mean_to_dict() -> None:
@@ -69,9 +69,9 @@ def test_mean_to_dict() -> None:
6969
assert data["axes"][0]["categories"] == ["one", "two", "three"]
7070
assert data["axes"][0]["flow"]
7171
assert data["storage"]["type"] == "mean"
72-
assert data["storage"]["data"]["counts"] == pytest.approx(np.zeros(4))
73-
assert data["storage"]["data"]["values"] == pytest.approx(np.zeros(4))
74-
assert data["storage"]["data"]["variances"] == pytest.approx(np.zeros(4))
72+
assert data["storage"]["counts"] == pytest.approx(np.zeros(4))
73+
assert data["storage"]["values"] == pytest.approx(np.zeros(4))
74+
assert data["storage"]["variances"] == pytest.approx(np.zeros(4))
7575

7676

7777
def test_weighted_mean_to_dict() -> None:
@@ -87,16 +87,14 @@ def test_weighted_mean_to_dict() -> None:
8787
assert data["axes"][0]["categories"] == pytest.approx([1, 2, 3])
8888
assert data["axes"][0]["flow"]
8989
assert data["storage"]["type"] == "weighted_mean"
90-
assert data["storage"]["data"]["sum_of_weights"] == pytest.approx(
90+
assert data["storage"]["sum_of_weights"] == pytest.approx(
9191
np.array([20, 40, 60, 10])
9292
)
93-
assert data["storage"]["data"]["sum_of_weights_squared"] == pytest.approx(
93+
assert data["storage"]["sum_of_weights_squared"] == pytest.approx(
9494
np.array([200, 800, 1800, 50])
9595
)
96-
assert data["storage"]["data"]["values"] == pytest.approx(
97-
np.array([100, 200, 300, 1])
98-
)
99-
assert data["storage"]["data"]["variances"] == pytest.approx(np.zeros(4))
96+
assert data["storage"]["values"] == pytest.approx(np.array([100, 200, 300, 1]))
97+
assert data["storage"]["variances"] == pytest.approx(np.zeros(4))
10098

10199

102100
def test_transform_log_axis_to_dict() -> None:

0 commit comments

Comments
 (0)