Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions ymmsl/v0_2/tests/test_timeline_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,3 +149,8 @@ def test_inconsistent_interact(timelines_configuration: Configuration) -> None:
def test_model_ports(timelines_configuration: Configuration) -> None:
model = timelines_configuration.models[Ref("model_ports")]
resolve_timelines(model)


def test_muscle_settings_in(timelines_configuration: Configuration) -> None:
model = timelines_configuration.models[Ref("qmc")]
resolve_timelines(model)
15 changes: 15 additions & 0 deletions ymmsl/v0_2/tests/ymmsl1/timelines.ymmsl
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,18 @@ models:
in: meso.in
meso.final: macro.in
macro.final: final

qmc:
components:
mc:
ports:
o_i: parameters_out
s: states_in
description: Monte Carlo driver for UQ.
sim:
ports:
o_f: state_out
description: Simulation
conduits:
mc.parameters_out: sim.muscle_settings_in
sim.state_out: mc.states_in
10 changes: 10 additions & 0 deletions ymmsl/v0_2/timeline_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
)

ROOT_TIMELINE = Timeline(":")
MUSCLE_SETTINGS_IN = Identifier("muscle_settings_in")


def resolve_timelines(model: Model) -> None:
Expand Down Expand Up @@ -172,6 +173,11 @@ def __init__(self, model: Model) -> None:
for port_name, port in component.ports.items()
}
"""Map of Port objects by their full reference"""
# Special ports:
for component in self._model.components.values():
self._all_ports[component.name + MUSCLE_SETTINGS_IN] = Port(
MUSCLE_SETTINGS_IN, Operator.F_INIT
)

# Assign components to timelines
for component in self._model.components.values():
Expand All @@ -187,6 +193,10 @@ def _f_init_conduits_for_component(self, component: Component) -> list[Conduit]:
conduit = self._conduits_by_receiver.get(component.name + port.name)
if conduit is not None:
result.append(conduit)
# Special ports:
conduit = self._conduits_by_receiver.get(component.name + MUSCLE_SETTINGS_IN)
if conduit is not None:
result.append(conduit)
return result

def _assign_component(
Expand Down