Skip to content

Commit

Permalink
Merge pull request #142 from ecmwf/feature/updated_protobuf_w_develop…
Browse files Browse the repository at this point in the history
…_bug_fixed

Feature/updated protobuf w develop bug fixed
  • Loading branch information
mathleur authored Jun 19, 2024
2 parents ff9b687 + 2557aa7 commit 8a779f0
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 6 deletions.
12 changes: 8 additions & 4 deletions polytope/datacube/backends/fdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,9 @@ def get_2nd_last_values(self, requests, leaf_path=None):
for i in range(len(requests.children)):
lat_child = requests.children[i]
lon_length = len(lat_child.children)
range_lengths[i] = [1] * lon_length
range_lengths[i] = [0] * lon_length
current_start_idxs[i] = [None] * lon_length
fdb_node_ranges[i] = [[TensorIndexTree.root] * lon_length] * lon_length
fdb_node_ranges[i] = [[TensorIndexTree.root for y in range(lon_length)] for x in range(lon_length)]
range_length = deepcopy(range_lengths[i])
current_start_idx = deepcopy(current_start_idxs[i])
fdb_range_nodes = deepcopy(fdb_node_ranges[i])
Expand All @@ -216,6 +216,7 @@ def get_2nd_last_values(self, requests, leaf_path=None):
def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx, fdb_range_n):
i = 0
for c in requests.children:
fdb_range_n_i = fdb_range_n[i]
# now c are the leaves of the initial tree
key_value_path = {c.axis.name: c.values}
ax = c.axis
Expand All @@ -225,12 +226,13 @@ def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx,
leaf_path.update(key_value_path)
last_idx = key_value_path["values"]
if current_idx[i] is None:
range_l[i] = 1
current_idx[i] = last_idx
fdb_range_n[i][range_l[i] - 1] = c
fdb_range_n_i[range_l[i] - 1] = c
else:
if last_idx == current_idx[i] + range_l[i]:
range_l[i] += 1
fdb_range_n[i][range_l[i] - 1] = c
fdb_range_n_i[range_l[i] - 1] = c
else:
key_value_path = {c.axis.name: c.values}
ax = c.axis
Expand All @@ -241,6 +243,8 @@ def get_last_layer_before_leaf(self, requests, leaf_path, range_l, current_idx,
i += 1
current_start_idx = key_value_path["values"]
current_idx[i] = current_start_idx
range_l[i] = 1
fdb_range_n[i][range_l[i] - 1] = c
return (range_l, current_idx, fdb_range_n)

def assign_fdb_output_to_nodes(self, output_values, fdb_requests_decoding_info):
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
numpy
numpy == 1.23.5
pandas
scipy
sortedcontainers
Expand Down
33 changes: 32 additions & 1 deletion tests/test_slice_date_range_fdb.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from polytope.engine.hullslicer import HullSlicer
from polytope.polytope import Polytope, Request
from polytope.shapes import Box, Select, Span, Disk
from polytope.shapes import Box, Disk, Select, Span


class TestSlicingFDBDatacube:
Expand Down Expand Up @@ -102,3 +102,34 @@ def test_fdb_datacube_disk(self):
assert len(result.leaves) == 6
for i in range(len(result.leaves)):
assert len(result.leaves[i].result) == 1

@pytest.mark.fdb
def test_fdb_datacube_disk_2(self):
import pygribjump as gj

request = Request(
Select("step", [0]),
Select("levtype", ["sfc"]),
Span("date", pd.Timestamp("20230625T120000"), pd.Timestamp("20230626T120000")),
Select("domain", ["g"]),
Select("expver", ["0001"]),
Select("param", ["167"]),
Select("class", ["od"]),
Select("stream", ["oper"]),
Select("type", ["an"]),
Disk(["latitude", "longitude"], [0.05, 0.070148090413], [0.1, 0.15]),
)

self.fdbdatacube = gj.GribJump()
self.slicer = HullSlicer()
self.API = Polytope(
request=request,
datacube=self.fdbdatacube,
engine=self.slicer,
options=self.options,
)
result = self.API.retrieve(request)
result.pprint()
assert len(result.leaves) == 11
for i in range(len(result.leaves)):
assert result.leaves[i].result is not None

0 comments on commit 8a779f0

Please sign in to comment.