@@ -22,9 +22,11 @@ def flow_downstream(
22
22
ufunc = np .add ,
23
23
accept_missing = False ,
24
24
skip_missing_check = False ,
25
- additive_weight = None ,
26
- multiplicative_weight = None ,
27
- modifier_use_upstream = True ,
25
+ node_additive_weight = None ,
26
+ node_multiplicative_weight = None ,
27
+ node_modifier_use_upstream = True ,
28
+ edge_additive_weight = None ,
29
+ edge_multiplicative_weight = None ,
28
30
):
29
31
"""Accumulates field values downstream.
30
32
@@ -70,22 +72,24 @@ def flow_downstream(
70
72
def operation (
71
73
river_network ,
72
74
field ,
73
- up_ids ,
74
- down_ids ,
75
+ grouping ,
75
76
mv ,
76
- additive_weight ,
77
- multiplicative_weight ,
78
- modifier_use_upstream ,
77
+ node_additive_weight ,
78
+ node_multiplicative_weight ,
79
+ node_modifier_use_upstream ,
80
+ edge_additive_weight ,
81
+ edge_multiplicative_weight ,
79
82
):
80
83
return op (
81
84
river_network ,
82
85
field ,
83
- up_ids ,
84
- down_ids ,
86
+ grouping ,
85
87
mv ,
86
- additive_weight ,
87
- multiplicative_weight ,
88
- modifier_use_upstream ,
88
+ node_additive_weight ,
89
+ node_multiplicative_weight ,
90
+ node_modifier_use_upstream ,
91
+ edge_additive_weight ,
92
+ edge_multiplicative_weight ,
89
93
ufunc = ufunc ,
90
94
)
91
95
@@ -95,9 +99,11 @@ def operation(
95
99
False ,
96
100
operation ,
97
101
mv ,
98
- additive_weight ,
99
- multiplicative_weight ,
100
- modifier_use_upstream ,
102
+ node_additive_weight ,
103
+ node_multiplicative_weight ,
104
+ node_modifier_use_upstream ,
105
+ edge_additive_weight ,
106
+ edge_multiplicative_weight ,
101
107
)
102
108
103
109
return nan_to_missing (field , field_dtype , mv )
@@ -106,12 +112,13 @@ def operation(
106
112
def _ufunc_to_downstream (
107
113
river_network ,
108
114
field ,
109
- up_ids ,
110
- down_ids ,
115
+ grouping ,
111
116
mv ,
112
- additive_weight ,
113
- multiplicative_weight ,
114
- modifier_use_upstream ,
117
+ node_additive_weight ,
118
+ node_multiplicative_weight ,
119
+ node_modifier_use_upstream ,
120
+ edge_additive_weight ,
121
+ edge_multiplicative_weight ,
115
122
ufunc ,
116
123
):
117
124
"""Updates field in-place by applying a ufunc at the downstream nodes of
@@ -144,20 +151,19 @@ def _ufunc_to_downstream(
144
151
None
145
152
146
153
"""
147
- modifier_group = up_ids if modifier_use_upstream else down_ids
148
- if additive_weight is None :
149
- if multiplicative_weight is None :
150
- modifier_field = field [..., up_ids ]
151
- else :
152
- modifier_field = field [..., up_ids ] * multiplicative_weight [modifier_group ]
153
- else :
154
- if multiplicative_weight is None :
155
- modifier_field = field [..., up_ids ] + additive_weight [modifier_group ]
156
- else :
157
- modifier_field = (
158
- field [..., up_ids ] * multiplicative_weight [modifier_group ]
159
- + additive_weight [modifier_group ]
160
- )
154
+ up_ids , down_ids = river_network .get_up_down (grouping )
155
+ modifier_group = up_ids if node_modifier_use_upstream else down_ids
156
+
157
+ modifier_field = field [..., up_ids ]
158
+ if node_multiplicative_weight is not None :
159
+ modifier_field *= node_multiplicative_weight [modifier_group ]
160
+ if edge_multiplicative_weight is not None :
161
+ modifier_field *= edge_multiplicative_weight [grouping ]
162
+ if node_additive_weight is not None :
163
+ modifier_field += node_additive_weight [modifier_group ]
164
+ if edge_additive_weight is not None :
165
+ modifier_field += edge_additive_weight [grouping ]
166
+
161
167
ufunc .at (
162
168
field ,
163
169
(* [slice (None )] * (field .ndim - 1 ), down_ids ),
@@ -174,9 +180,11 @@ def flow_upstream(
174
180
ufunc = np .add ,
175
181
accept_missing = False ,
176
182
skip_missing_check = False ,
177
- additive_weight = None ,
178
- multiplicative_weight = None ,
179
- modifier_use_upstream = True ,
183
+ node_additive_weight = None ,
184
+ node_multiplicative_weight = None ,
185
+ node_modifier_use_upstream = True ,
186
+ edge_additive_weight = None ,
187
+ edge_multiplicative_weight = None ,
180
188
):
181
189
"""Accumulates field values upstream.
182
190
@@ -221,22 +229,24 @@ def flow_upstream(
221
229
def operation (
222
230
river_network ,
223
231
field ,
224
- up_ids ,
225
- down_ids ,
232
+ grouping ,
226
233
mv ,
227
- additive_weight ,
228
- multiplicative_weight ,
229
- modifier_use_upstream ,
234
+ node_additive_weight ,
235
+ node_multiplicative_weight ,
236
+ node_modifier_use_upstream ,
237
+ edge_additive_weight ,
238
+ edge_multiplicative_weight ,
230
239
):
231
240
return op (
232
241
river_network ,
233
242
field ,
234
- up_ids ,
235
- down_ids ,
243
+ grouping ,
236
244
mv ,
237
- additive_weight ,
238
- multiplicative_weight ,
239
- modifier_use_upstream ,
245
+ node_additive_weight ,
246
+ node_multiplicative_weight ,
247
+ node_modifier_use_upstream ,
248
+ edge_additive_weight ,
249
+ edge_multiplicative_weight ,
240
250
ufunc = ufunc ,
241
251
)
242
252
@@ -246,9 +256,11 @@ def operation(
246
256
True ,
247
257
operation ,
248
258
mv ,
249
- additive_weight ,
250
- multiplicative_weight ,
251
- modifier_use_upstream ,
259
+ node_additive_weight ,
260
+ node_multiplicative_weight ,
261
+ node_modifier_use_upstream ,
262
+ edge_additive_weight ,
263
+ edge_multiplicative_weight ,
252
264
)
253
265
254
266
return nan_to_missing (field , field_dtype , mv )
@@ -257,12 +269,13 @@ def operation(
257
269
def _ufunc_to_upstream (
258
270
river_network ,
259
271
field ,
260
- up_ids ,
261
- down_ids ,
272
+ grouping ,
262
273
mv ,
263
- additive_weight ,
264
- multiplicative_weight ,
265
- modifier_use_upstream ,
274
+ node_additive_weight ,
275
+ node_multiplicative_weight ,
276
+ node_modifier_use_upstream ,
277
+ edge_additive_weight ,
278
+ edge_multiplicative_weight ,
266
279
ufunc ,
267
280
):
268
281
"""Updates field in-place by applying a ufunc at the nodes of
@@ -295,25 +308,18 @@ def _ufunc_to_upstream(
295
308
None
296
309
297
310
"""
298
- down_group = down_ids
299
- modifier_group = up_ids if modifier_use_upstream else down_ids
300
- if additive_weight is None :
301
- if multiplicative_weight is None :
302
- modifier_field = field [..., down_group ]
303
- else :
304
- modifier_field = (
305
- field [..., down_group ] * multiplicative_weight [..., modifier_group ]
306
- )
307
- else :
308
- if multiplicative_weight is None :
309
- modifier_field = (
310
- field [..., down_group ] + additive_weight [..., modifier_group ]
311
- )
312
- else :
313
- modifier_field = (
314
- field [..., down_group ] * multiplicative_weight [..., modifier_group ]
315
- + additive_weight [..., modifier_group ]
316
- )
311
+ up_ids , down_ids = river_network .get_up_down (grouping )
312
+ modifier_group = up_ids if node_modifier_use_upstream else down_ids
313
+
314
+ modifier_field = field [..., down_ids ]
315
+ if node_multiplicative_weight is not None :
316
+ modifier_field *= node_multiplicative_weight [modifier_group ]
317
+ if edge_multiplicative_weight is not None :
318
+ modifier_field *= edge_multiplicative_weight [grouping ]
319
+ if node_additive_weight is not None :
320
+ modifier_field += node_additive_weight [modifier_group ]
321
+ if edge_additive_weight is not None :
322
+ modifier_field += edge_additive_weight [grouping ]
317
323
318
324
ufunc .at (
319
325
field ,
0 commit comments