From 8a32320adf9c2fc40b448c395916d16752730d39 Mon Sep 17 00:00:00 2001 From: awarde96 Date: Tue, 29 Oct 2024 10:16:32 +0000 Subject: [PATCH 1/4] Fix path encoder --- covjsonkit/encoder/Path.py | 61 ++++++++++++++++++++++++----------- covjsonkit/encoder/encoder.py | 4 +++ 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/covjsonkit/encoder/Path.py b/covjsonkit/encoder/Path.py index e1999f8..dce8236 100644 --- a/covjsonkit/encoder/Path.py +++ b/covjsonkit/encoder/Path.py @@ -87,11 +87,14 @@ def from_polytope(self, result): fields["step"] = 0 fields["dates"] = [] fields["levels"] = [0] + fields["s"] = [] + fields["l"] = [] self.walk_tree(result, fields, coords, mars_metadata, range_dict) logging.debug("The values returned from walking tree: %s", range_dict) # noqa: E501 logging.debug("The coordinates returned from walking tree: %s", coords) # noqa: E501 + logging.debug("The fields: %s", fields) self.add_reference( { @@ -104,11 +107,13 @@ def from_polytope(self, result): ) combined_dict = {} + for k in range_dict.keys(): + print(k, range_dict[k]) for date in fields["dates"]: if date not in combined_dict: combined_dict[date] = {} - for level in fields["levels"]: + for level in fields["l"]: for num in fields["number"]: if num not in combined_dict[date]: combined_dict[date][num] = {} @@ -116,15 +121,23 @@ def from_polytope(self, result): if para not in combined_dict[date][num]: combined_dict[date][num][para] = {} # for s, value in range_dict[date][level][num][para].items(): - for s in fields["step"]: + for s in fields["s"]: key = (date, level, num, para, s) # for k, v in range_dict.items(): # if k == key: if s not in combined_dict[date][num][para]: - combined_dict[date][num][para][s] = range_dict[key] + if key in range_dict: + combined_dict[date][num][para][s] = range_dict[key] + #combined_dict[date][num][para][s] = range_dict[key] else: # Cocatenate arrays - combined_dict[date][num][para][s] += range_dict[key] + if key in range_dict: + combined_dict[date][num][para][s] += range_dict[key] + #for s in fields["s"]: + + + logging.debug("The values returned from combined dicts: %s", combined_dict) # noqa: E501 + levels = fields["levels"] if fields["param"] == 0: @@ -138,27 +151,37 @@ def from_polytope(self, result): coord = coords[date]["composite"] coords[date]["composite"] = [] for level in levels: - for cor in coord: - coords[date]["composite"].append([cor[0], cor[1], level]) + start = 0 + for i, s in enumerate(fields["s"]): + end = start + len(coord)/len(fields["s"]) + for cor in coord[int(start):int(end)]: + if len(fields["l"]) == 1: + coords[date]["composite"].append([s, cor[0], cor[1], fields["l"][0]]) + else: + coords[date]["composite"].append([s, cor[0], cor[1], fields["l"][i]]) + start = end + logging.debug("The coordinates returned from walking tree: %s", coords) # noqa: E501 for date in combined_dict.keys(): for num in combined_dict[date].keys(): val_dict = {} - for step in combined_dict[date][num][self.parameters[0]].keys(): - val_dict[step] = {} + #for step in combined_dict[date][num][self.parameters[0]].keys(): + # val_dict[step] = {} for para in combined_dict[date][num].keys(): + if para not in val_dict: + val_dict[para] = [] for step in combined_dict[date][num][para].keys(): - val_dict[step][para] = combined_dict[date][num][para][step] - for step in val_dict.keys(): - mm = mars_metadata.copy() - mm["number"] = num - mm["step"] = step - temp = [] - for coord in coords[date]["composite"]: - temp.append([step] + coord) - coords[date]["composite"] = temp - mm["Forecast date"] = date - self.add_coverage(mm, coords[date], val_dict[step]) + val_dict[para].extend(combined_dict[date][num][para][step]) + #for step in val_dict.keys(): + mm = mars_metadata.copy() + mm["number"] = num + #mm["step"] = step + #temp = [] + #for coord in coords[date]["composite"]: + # temp.append([step] + coord) + #coords[date]["composite"] = temp + mm["Forecast date"] = date + self.add_coverage(mm, coords[date], val_dict) # self.add_coverage(mars_metadata, coords, range_dict) # return self.covjson diff --git a/covjsonkit/encoder/encoder.py b/covjsonkit/encoder/encoder.py index 507e3e2..661e197 100644 --- a/covjsonkit/encoder/encoder.py +++ b/covjsonkit/encoder/encoder.py @@ -142,6 +142,8 @@ def append_composite_coords(dates, tree_values, lat, coords): fields["lat"] = result elif child.axis.name == "levelist": fields["levels"] = result + if "l" in fields: + fields["l"].extend(result) elif child.axis.name == "param": fields["param"] = result elif child.axis.name in ["date", "time"]: @@ -150,6 +152,8 @@ def append_composite_coords(dates, tree_values, lat, coords): fields["number"] = result elif child.axis.name == "step": fields["step"] = result + if "s" in fields: + fields["s"].extend(result) self.walk_tree(child, fields, coords, mars_metadata, range_dict) else: From 5d5465f8744d97315efa54f319be6ed5333948cd Mon Sep 17 00:00:00 2001 From: awarde96 Date: Tue, 29 Oct 2024 10:18:41 +0000 Subject: [PATCH 2/4] Fix formatting --- covjsonkit/encoder/Path.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/covjsonkit/encoder/Path.py b/covjsonkit/encoder/Path.py index dce8236..51ceb50 100644 --- a/covjsonkit/encoder/Path.py +++ b/covjsonkit/encoder/Path.py @@ -128,17 +128,15 @@ def from_polytope(self, result): if s not in combined_dict[date][num][para]: if key in range_dict: combined_dict[date][num][para][s] = range_dict[key] - #combined_dict[date][num][para][s] = range_dict[key] + # combined_dict[date][num][para][s] = range_dict[key] else: # Cocatenate arrays if key in range_dict: combined_dict[date][num][para][s] += range_dict[key] - #for s in fields["s"]: - + # for s in fields["s"]: logging.debug("The values returned from combined dicts: %s", combined_dict) # noqa: E501 - levels = fields["levels"] if fields["param"] == 0: raise ValueError("No parameters were returned, date requested may be out of range") @@ -153,8 +151,8 @@ def from_polytope(self, result): for level in levels: start = 0 for i, s in enumerate(fields["s"]): - end = start + len(coord)/len(fields["s"]) - for cor in coord[int(start):int(end)]: + end = start + len(coord) / len(fields["s"]) + for cor in coord[int(start) : int(end)]: if len(fields["l"]) == 1: coords[date]["composite"].append([s, cor[0], cor[1], fields["l"][0]]) else: @@ -165,21 +163,21 @@ def from_polytope(self, result): for date in combined_dict.keys(): for num in combined_dict[date].keys(): val_dict = {} - #for step in combined_dict[date][num][self.parameters[0]].keys(): + # for step in combined_dict[date][num][self.parameters[0]].keys(): # val_dict[step] = {} for para in combined_dict[date][num].keys(): if para not in val_dict: val_dict[para] = [] for step in combined_dict[date][num][para].keys(): val_dict[para].extend(combined_dict[date][num][para][step]) - #for step in val_dict.keys(): + # for step in val_dict.keys(): mm = mars_metadata.copy() mm["number"] = num - #mm["step"] = step - #temp = [] - #for coord in coords[date]["composite"]: + # mm["step"] = step + # temp = [] + # for coord in coords[date]["composite"]: # temp.append([step] + coord) - #coords[date]["composite"] = temp + # coords[date]["composite"] = temp mm["Forecast date"] = date self.add_coverage(mm, coords[date], val_dict) From a29d489d0387c2ab7ed46d7e140f537eae6ef4ae Mon Sep 17 00:00:00 2001 From: awarde96 Date: Tue, 29 Oct 2024 13:33:55 +0000 Subject: [PATCH 3/4] Fix path for 2d --- covjsonkit/encoder/Path.py | 5 +++++ covjsonkit/encoder/VerticalProfile.py | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/covjsonkit/encoder/Path.py b/covjsonkit/encoder/Path.py index 51ceb50..12c5cd8 100644 --- a/covjsonkit/encoder/Path.py +++ b/covjsonkit/encoder/Path.py @@ -92,6 +92,9 @@ def from_polytope(self, result): self.walk_tree(result, fields, coords, mars_metadata, range_dict) + if len(fields["l"]) == 0: + fields["l"] = [0] + logging.debug("The values returned from walking tree: %s", range_dict) # noqa: E501 logging.debug("The coordinates returned from walking tree: %s", coords) # noqa: E501 logging.debug("The fields: %s", fields) @@ -155,6 +158,8 @@ def from_polytope(self, result): for cor in coord[int(start) : int(end)]: if len(fields["l"]) == 1: coords[date]["composite"].append([s, cor[0], cor[1], fields["l"][0]]) + elif len(fields["l"]) == 0: + coords[date]["composite"].append([s, cor[0], cor[1], level]) else: coords[date]["composite"].append([s, cor[0], cor[1], fields["l"][i]]) start = end diff --git a/covjsonkit/encoder/VerticalProfile.py b/covjsonkit/encoder/VerticalProfile.py index a8f3342..2cf8658 100644 --- a/covjsonkit/encoder/VerticalProfile.py +++ b/covjsonkit/encoder/VerticalProfile.py @@ -192,10 +192,13 @@ def func( tree.values = [float(val) for val in tree.values] tree.result = [float(val) for val in tree.result] # para_intervals = int(num_intervals/len(param)) + try: + len(param) + except TypeError: + raise ValueError("No parameters were returned, date requested may be out of range") len_paras = len(param) len_levels = len(param) len_nums = len_paras * len(levels) - for date in dates: coords[date]["x"] = [lat] From b513b19c6fde4fd313462cfe5c91505e7f0d1516 Mon Sep 17 00:00:00 2001 From: awarde96 Date: Wed, 30 Oct 2024 14:46:12 +0000 Subject: [PATCH 4/4] Bump version --- covjsonkit/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/covjsonkit/version.py b/covjsonkit/version.py index 5681085..1533102 100644 --- a/covjsonkit/version.py +++ b/covjsonkit/version.py @@ -1 +1 @@ -__version__ = "0.0.24" +__version__ = "0.0.26"