Skip to content

Commit d5ec93a

Browse files
committed
move configure_sim_modes from static method to simulation module
1 parent 4e52572 commit d5ec93a

File tree

4 files changed

+47
-51
lines changed

4 files changed

+47
-51
lines changed

cylc/flow/config.py

+2-48
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,7 @@
8080
is_relative_to,
8181
)
8282
from cylc.flow.print_tree import print_tree
83-
from cylc.flow.simulation import (
84-
parse_fail_cycle_points,
85-
get_simulated_run_len,
86-
build_simulation_script,
87-
disable_platforms,
88-
)
83+
from cylc.flow.simulation import configure_sim_modes
8984
from cylc.flow.subprocctx import SubFuncContext
9085
from cylc.flow.task_events_mgr import (
9186
EventData,
@@ -526,7 +521,7 @@ def __init__(
526521
self.process_runahead_limit()
527522

528523
if self.run_mode('simulation', 'dummy'):
529-
self.configure_sim_modes(
524+
configure_sim_modes(
530525
self.taskdefs.values(), self.run_mode())
531526

532527
self.configure_workflow_state_polling_tasks()
@@ -1346,47 +1341,6 @@ def configure_workflow_state_polling_tasks(self):
13461341
script = "echo " + comstr + "\n" + comstr
13471342
rtc['script'] = script
13481343

1349-
@staticmethod
1350-
def configure_sim_modes(taskdefs, sim_mode):
1351-
"""Adjust task defs for simulation and dummy mode.
1352-
1353-
"""
1354-
dummy_mode = bool(sim_mode == 'dummy')
1355-
1356-
for tdef in taskdefs:
1357-
# Compute simulated run time by scaling the execution limit.
1358-
rtc = tdef.rtconfig
1359-
sleep_sec = get_simulated_run_len(rtc)
1360-
1361-
rtc['execution time limit'] = (
1362-
sleep_sec + DurationParser().parse(str(
1363-
rtc['simulation']['time limit buffer'])).get_seconds()
1364-
)
1365-
1366-
rtc['simulation']['simulated run length'] = sleep_sec
1367-
rtc['submission retry delays'] = [1]
1368-
1369-
# Generate dummy scripting.
1370-
rtc['init-script'] = ""
1371-
rtc['env-script'] = ""
1372-
rtc['pre-script'] = ""
1373-
rtc['post-script'] = ""
1374-
rtc['script'] = build_simulation_script(
1375-
rtc, sleep_sec) if dummy_mode else ""
1376-
1377-
disable_platforms(rtc)
1378-
1379-
rtc['platform'] = 'localhost'
1380-
1381-
# Disable environment, in case it depends on env-script.
1382-
rtc['environment'] = {}
1383-
1384-
rtc["simulation"][
1385-
"fail cycle points"
1386-
] = parse_fail_cycle_points(
1387-
rtc["simulation"]["fail cycle points"]
1388-
)
1389-
13901344
def get_parent_lists(self):
13911345
return self.runtime['parents']
13921346

cylc/flow/simulation.py

+41
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,47 @@
3535
from metomi.isodatetime.parsers import DurationParser
3636

3737

38+
def configure_sim_modes(taskdefs, sim_mode):
39+
"""Adjust task defs for simulation and dummy mode.
40+
41+
"""
42+
dummy_mode = bool(sim_mode == 'dummy')
43+
44+
for tdef in taskdefs:
45+
# Compute simulated run time by scaling the execution limit.
46+
rtc = tdef.rtconfig
47+
sleep_sec = get_simulated_run_len(rtc)
48+
49+
rtc['execution time limit'] = (
50+
sleep_sec + DurationParser().parse(str(
51+
rtc['simulation']['time limit buffer'])).get_seconds()
52+
)
53+
54+
rtc['simulation']['simulated run length'] = sleep_sec
55+
rtc['submission retry delays'] = [1]
56+
57+
# Generate dummy scripting.
58+
rtc['init-script'] = ""
59+
rtc['env-script'] = ""
60+
rtc['pre-script'] = ""
61+
rtc['post-script'] = ""
62+
rtc['script'] = build_simulation_script(
63+
rtc, sleep_sec) if dummy_mode else ""
64+
65+
disable_platforms(rtc)
66+
67+
rtc['platform'] = 'localhost'
68+
69+
# Disable environment, in case it depends on env-script.
70+
rtc['environment'] = {}
71+
72+
rtc["simulation"][
73+
"fail cycle points"
74+
] = parse_fail_cycle_points(
75+
rtc["simulation"]["fail cycle points"]
76+
)
77+
78+
3879
def get_simulated_run_len(rtc: Dict[str, Any]) -> int:
3980
"""Get simulated run time.
4081

tests/integration/test_modes.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,4 @@ async def test_mode_task_basic(
113113
assert (
114114
pytest.approx(timers['sped_up_etl'], rel=0.2)
115115
== sim_times['sped_up_etl']
116-
)
116+
)

tests/unit/test_config.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@
3939
from cylc.flow.parsec.exceptions import Jinja2Error, EmPyError
4040
from cylc.flow.scheduler_cli import RunOptions
4141
from cylc.flow.scripts.validate import ValidateOptions
42+
from cylc.flow.simulation import configure_sim_modes
4243
from cylc.flow.workflow_files import WorkflowFiles
4344
from cylc.flow.wallclock import get_utc_mode, set_utc_mode
4445
from cylc.flow.xtrigger_mgr import XtriggerManager
4546
from cylc.flow.task_outputs import (
4647
TASK_OUTPUT_SUBMITTED,
47-
TASK_OUTPUT_SUCCEEDED
48+
TASK_OUTPUT_SUCCEEDED,
4849
)
4950

5051
from cylc.flow.cycling.iso8601 import ISO8601Point
@@ -1767,7 +1768,7 @@ def test_configure_sim_mode(caplog):
17671768
SimpleNamespace(rtconfig=rtconfig_1),
17681769
SimpleNamespace(rtconfig=rtconfig_2),
17691770
]
1770-
WorkflowConfig.configure_sim_modes(taskdefs, 'simulation')
1771+
configure_sim_modes(taskdefs, 'simulation')
17711772
results = [
17721773
i.rtconfig['simulation']['simulated run length'] for i in taskdefs]
17731774
assert results == [10.0, 2.0]

0 commit comments

Comments
 (0)