@@ -191,6 +191,13 @@ function _status_for_node_id(source_statuses, target_node_id::Int)
191191 return nothing
192192end
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