Skip to content

Commit 9dfcef4

Browse files
committed
Update input_resolution.jl
Always prefer local status over other scales
1 parent c8615cd commit 9dfcef4

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

src/time/runtime/input_resolution.jl

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,13 @@ function _status_for_node_id(source_statuses, target_node_id::Int)
191191
return nothing
192192
end
193193

194+
function _prefer_local_status_fallback(st::Status, input_var::Symbol, source_var::Symbol, prefer_local_status::Bool)
195+
prefer_local_status || return false
196+
source_var in keys(st) || return false
197+
_assign_input_value!(st, input_var, st[source_var])
198+
return true
199+
end
200+
194201
"""
195202
_resolve_input_windowed(sim, node, st, input_var, source_scale, source_process, source_var, t_start, t_end, policy)
196203
@@ -203,6 +210,7 @@ function _resolve_input_windowed(
203210
st::Status,
204211
consumer_scope::ScopeId,
205212
source_model_spec,
213+
prefer_local_status::Bool,
206214
input_var::Symbol,
207215
source_scale::Symbol,
208216
source_process::Symbol,
@@ -237,6 +245,8 @@ function _resolve_input_windowed(
237245
return nothing
238246
end
239247

248+
_prefer_local_status_fallback(st, input_var, source_var, prefer_local_status) && return nothing
249+
240250
consumer_node_id = node_id(st.node)
241251
v, ok = _resolved_windowed_value_for_source(
242252
sim, consumer_scope, source_scale, source_process, source_var, consumer_node_id, t_start, t_end, policy, source_sample_duration_seconds
@@ -313,6 +323,7 @@ function _resolve_input_interpolate(
313323
st::Status,
314324
consumer_scope::ScopeId,
315325
source_model_spec,
326+
prefer_local_status::Bool,
316327
input_var::Symbol,
317328
source_scale::Symbol,
318329
source_process::Symbol,
@@ -343,6 +354,8 @@ function _resolve_input_interpolate(
343354
return nothing
344355
end
345356

357+
_prefer_local_status_fallback(st, input_var, source_var, prefer_local_status) && return nothing
358+
346359
consumer_node_id = node_id(st.node)
347360
v, ok = _resolved_interpolated_value_for_source(
348361
sim, consumer_scope, source_scale, source_process, source_var, consumer_node_id, t, policy
@@ -387,6 +400,7 @@ function _resolve_input_holdlast(
387400
st::Status,
388401
consumer_scope::ScopeId,
389402
source_model_spec,
403+
prefer_local_status::Bool,
390404
input_var::Symbol,
391405
source_scale::Symbol,
392406
source_process::Symbol,
@@ -416,6 +430,8 @@ function _resolve_input_holdlast(
416430
return nothing
417431
end
418432

433+
_prefer_local_status_fallback(st, input_var, source_var, prefer_local_status) && return nothing
434+
419435
consumer_node_id = node_id(st.node)
420436
v, ok = _resolved_value_for_source(sim, consumer_scope, source_scale, source_process, source_var, consumer_node_id, t)
421437
if ok
@@ -516,6 +532,7 @@ function resolve_inputs_from_temporal_state!(sim::GraphSimulation, node::SoftDep
516532
continue
517533
end
518534
end
535+
prefer_local_status = !policy_is_explicit
519536
source_model_spec = _model_spec_for_process(sim, source_scale, source_process)
520537
source_model = get_models(sim)[source_scale][source_process]
521538
source_clock = _model_clock(source_model_spec, source_model, timeline)
@@ -525,16 +542,17 @@ function resolve_inputs_from_temporal_state!(sim::GraphSimulation, node::SoftDep
525542
end
526543

527544
if policy isa HoldLast
528-
_resolve_input_holdlast(sim, node, st, consumer_scope, source_model_spec, input_var, source_scale, source_process, source_var, t)
545+
_resolve_input_holdlast(sim, node, st, consumer_scope, source_model_spec, prefer_local_status, input_var, source_scale, source_process, source_var, t)
529546
elseif policy isa Interpolate
530-
_resolve_input_interpolate(sim, node, st, consumer_scope, source_model_spec, input_var, source_scale, source_process, source_var, t, policy)
547+
_resolve_input_interpolate(sim, node, st, consumer_scope, source_model_spec, prefer_local_status, input_var, source_scale, source_process, source_var, t, policy)
531548
elseif policy isa Integrate || policy isa Aggregate
532549
_resolve_input_windowed(
533550
sim,
534551
node,
535552
st,
536553
consumer_scope,
537554
source_model_spec,
555+
prefer_local_status,
538556
input_var,
539557
source_scale,
540558
source_process,

0 commit comments

Comments
 (0)