Skip to content

Commit ba8acb2

Browse files
committed
further distance tests for 2D and ND
1 parent 150edab commit ba8acb2

File tree

2 files changed

+56
-10
lines changed

2 files changed

+56
-10
lines changed

src/earthkit/hydro/distance.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,13 @@ def _upstream_distance_ND(river_network, field, grouping, mv):
7777
downstream_check_shorter[0] = river_network.downstream_nodes[
7878
downstream_check_shorter[0]
7979
]
80-
field[replace_upstream_indices] = np.max(field[downstream_replace_upstream]) + 1
81-
np.minimum.at(
82-
field, replace_upstream_indices, field[downstream_replace_upstream] + 1
83-
)
84-
np.minimum.at(field, check_shorter_indices, field[downstream_check_shorter] + 1)
80+
if replace_upstream_indices.size != 0:
81+
field[replace_upstream_indices] = np.max(field[downstream_replace_upstream]) + 1
82+
np.minimum.at(
83+
field, replace_upstream_indices, field[downstream_replace_upstream] + 1
84+
)
85+
if check_shorter_indices.size != 0:
86+
np.minimum.at(field, check_shorter_indices, field[downstream_check_shorter] + 1)
8587

8688

8789
def _downstream_distance_2D(river_network, field, grouping, mv):
@@ -125,8 +127,12 @@ def _downstream_distance_ND(river_network, field, grouping, mv):
125127
downstream_check_shorter[0] = river_network.downstream_nodes[
126128
downstream_check_shorter[0]
127129
]
128-
field[downstream_replace_downstream] = np.max(field[replace_downstream_indices]) + 1
129-
np.minimum.at(
130-
field, downstream_replace_downstream, field[replace_downstream_indices] + 1
131-
)
132-
np.minimum.at(field, downstream_check_shorter, field[check_shorter_indices] + 1)
130+
if downstream_replace_downstream.size != 0:
131+
field[downstream_replace_downstream] = (
132+
np.max(field[replace_downstream_indices]) + 1
133+
)
134+
np.minimum.at(
135+
field, downstream_replace_downstream, field[replace_downstream_indices] + 1
136+
)
137+
if downstream_check_shorter.size != 0:
138+
np.minimum.at(field, downstream_check_shorter, field[check_shorter_indices] + 1)

tests/test_river_network.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,3 +333,43 @@ def test_distance(reader, map_name, distance_query, distance):
333333
print(dist)
334334
print(distance)
335335
np.testing.assert_array_equal(dist, distance)
336+
337+
338+
@parametrize(
339+
"reader,map_name,distance_query,distance",
340+
[
341+
("d8_ldd", d8_ldd_1, distance_query_field_1, distance_1),
342+
("cama_downxy", cama_downxy_1, distance_query_field_1, distance_1),
343+
("cama_nextxy", cama_nextxy_1, distance_query_field_1, distance_1),
344+
],
345+
)
346+
def test_distance_2d(reader, map_name, distance_query, distance):
347+
network = read_network(reader, map_name)
348+
field = np.zeros(network.mask.shape, dtype="int") - 1
349+
field[network.mask] = distance_query
350+
network_dist = ekh.compute_distance(network, field)
351+
print(distance)
352+
print(network_dist)
353+
np.testing.assert_array_equal(network_dist[network.mask], distance)
354+
np.testing.assert_array_equal(network_dist[~network.mask], -1)
355+
356+
357+
@parametrize(
358+
"reader,map_name,distance_query,distance",
359+
[
360+
("d8_ldd", d8_ldd_1, distance_query_field_1, distance_1),
361+
("cama_downxy", cama_downxy_1, distance_query_field_1, distance_1),
362+
("cama_nextxy", cama_nextxy_1, distance_query_field_1, distance_1),
363+
],
364+
)
365+
def test_distance_Nd(reader, map_name, distance_query, distance):
366+
network = read_network(reader, map_name)
367+
field = np.zeros(network.mask.shape, dtype="int") - 1
368+
field[network.mask] = distance_query
369+
field = np.stack([field, field], axis=0)
370+
network_dist = ekh.compute_distance(network, field)
371+
distance = np.stack([distance, distance], axis=0)
372+
print(distance)
373+
print(network_dist)
374+
np.testing.assert_array_equal(network_dist[..., network.mask], distance)
375+
np.testing.assert_array_equal(network_dist[..., ~network.mask], -1)

0 commit comments

Comments
 (0)