Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 17 additions & 7 deletions covjsonkit/encoder/TimeSeries.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ def from_polytope(self, result, date_key: str = "date") -> dict:
fields["step"] = 0
fields["dates"] = []
fields["levels"] = [0]
fields["identifiers"] = []

start = time.time()
logging.debug("Tree walking starts at: %s", start) # noqa: E501
Expand Down Expand Up @@ -243,13 +244,22 @@ def from_polytope(self, result, date_key: str = "date") -> dict:
f"Key {key} not found in range_dict. "
f"Please ensure all axes are compressed in config"
)
mm = mars_metadata.copy()
mm["number"] = num
mm["Forecast date"] = date
mm["levelist"] = level
coordinates[date][i]["levelist"] = [level]
del mm["step"]
self.add_coverage(mm, coordinates[date][i], val_dict)
# Determine identifiers for this point
point_identifiers = [None]
if fields["identifiers"] and i < len(fields["identifiers"]):
point_identifiers = fields["identifiers"][i]

# Emit one coverage per identifier (duplicates coverage for merged points)
for identifier in point_identifiers:
mm = mars_metadata.copy()
mm["number"] = num
mm["Forecast date"] = date
mm["levelist"] = level
if identifier is not None:
mm["label"] = identifier
coordinates[date][i]["levelist"] = [level]
del mm["step"]
self.add_coverage(mm, coordinates[date][i], val_dict)

end = time.time()
delta = end - start
Expand Down
13 changes: 13 additions & 0 deletions covjsonkit/encoder/encoder.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,13 +383,25 @@ def append_composite_coords(dates, tree_values, lat, coords):
for value in tree_values:
coords[dates]["composite"].append([lat, value])

def collect_tags(tree, fields, count):
"""Collect tags from the latitude node into fields['identifiers']."""
if "identifiers" in fields:
tags = fields.get("_lat_tags", None) or getattr(tree, "tags", None)
if tags:
tag_list = sorted(tags, key=str)
else:
tag_list = [None]
for _ in range(count):
fields["identifiers"].append(tag_list)

if len(tree.children) != 0:
for child in tree.children:
handle_non_leaf_node(child)
result = handle_specific_axes(child)
if result is not None:
if child.axis.name == "latitude":
fields["lat"] = result
fields["_lat_tags"] = getattr(child, "tags", None)
elif child.axis.name == "levelist":
fields["levels"] = result
if "l" in fields:
Expand Down Expand Up @@ -426,6 +438,7 @@ def append_composite_coords(dates, tree_values, lat, coords):
step_len = para_len / len(fields["step"])

append_composite_coords(fields["dates"][-1], tree.values, fields["lat"], coords)
collect_tags(tree, fields, len(tree.values))

for l, level in enumerate(fields["levels"]): # noqa: E741
for i, num in enumerate(fields["number"]):
Expand Down
Loading