Skip to content
Snippets Groups Projects
Commit 9b9b1f44 authored by Eduard Lavuš's avatar Eduard Lavuš
Browse files

experiments: add start and end indices to runner

parent 0b1c5f11
No related branches found
No related tags found
No related merge requests found
......@@ -202,12 +202,6 @@ class Measurement(DefinitionBase):
def __str__(self):
return f"Measurement({self.name},\n{self.runner},\n{self.experiment},\n{self.parameters})"
def __enter__(self):
self._setup()
def __exit__(self, exc_type, exc_value, traceback):
self._teardown()
@staticmethod
def _apply_fan_speed(speed):
subprocess.run(
......@@ -309,12 +303,20 @@ class Measurement(DefinitionBase):
yield self.runner.parameters.copy().merge(self.experiment.parameters).merge(parameters)
# TODO: allow_continue for _execute
def run(self, dry_run = False, allow_continue = False):
def run(self, dry_run = False, combination_range = (0, -1)):
start_index = combination_range[0]
end_index = combination_range[1]
if end_index == 0:
end_index = None
allow_continue = start_index != 0 or end_index is not None
if not dry_run:
self._setup(allow_continue)
self._setup(allow_continue = allow_continue)
for parameters in self._generate_execution_parameters():
combinations = list(self._generate_execution_parameters())
if allow_continue:
self._log(f"Skipping combinations outside range ({start_index}, {end_index})")
for parameters in combinations[start_index : end_index]:
command = self.runner.prepare_command(parameters) + self.experiment.prepare_command(parameters) + self.prepare_command(parameters)
env = self.runner.prepare_environment(parameters).merge(self.experiment.prepare_environment(parameters)).merge(self.prepare_environment(parameters))
......@@ -389,7 +391,8 @@ def try_notif(message, dry_run = False):
def main(
definitions_path,
measurement_name = None,
dry_run = False
dry_run = False,
combination_range = (0, -1)
):
definitions = None
with open(definitions_path, "r") as file:
......@@ -406,8 +409,8 @@ def main(
measurement = measurements[measurement_name]
try_notif(f"Starting measurement \"{measurement_name}\"", dry_run = dry_run)
measurement.run(dry_run = dry_run)
try_notif(f"Starting measurement \"{measurement_name}\" (range {combination_range})", dry_run = dry_run)
measurement.run(dry_run = dry_run, combination_range = combination_range)
try_notif(f"Done measurement \"{measurement_name}\"", dry_run = dry_run)
if __name__ == "__main__":
......@@ -422,6 +425,16 @@ if __name__ == "__main__":
action = "store_true",
help = "Don't actually run anything, only print what would happen."
)
parser.add_argument(
"--start-index", dest = "START_INDEX",
type = int, default = 0,
help = "Start from the given index of parameter combinations."
)
parser.add_argument(
"--end-index", dest = "END_INDEX",
type = int, default = 0,
help = "End at the given index of parameter combinations."
)
parser.add_argument(
"MEASUREMENT",
default = None, nargs = "?",
......@@ -429,4 +442,4 @@ if __name__ == "__main__":
)
args = parser.parse_args()
main(args.DEFINITIONS, args.MEASUREMENT, dry_run = args.DRY_RUN)
main(args.DEFINITIONS, args.MEASUREMENT, dry_run = args.DRY_RUN, combination_range = (args.START_INDEX, args.END_INDEX))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment