|
|
@@ -1,4 +1,5 @@
|
|
|
#!/usr/bin/env python3
|
|
|
+import os
|
|
|
import subprocess
|
|
|
import csv
|
|
|
import re
|
|
|
@@ -33,7 +34,7 @@ def run_devstone(model_type, depth, width, mode="parallel", out=False, *, classi
|
|
|
SCRIPT_PATH = MinimalPyPDEVS
|
|
|
|
|
|
cmd = [
|
|
|
- "python3", SCRIPT_PATH,
|
|
|
+ "uv", "run", SCRIPT_PATH,
|
|
|
"-m", model_type,
|
|
|
"-d", str(depth),
|
|
|
"-w", str(width),
|
|
|
@@ -126,13 +127,14 @@ def parse_args():
|
|
|
parser = ArgumentParser()
|
|
|
parser.add_argument("-p", "--path", type=str, default="./Results-PyPDEVS/", help="Path to the results directory")
|
|
|
parser.add_argument("-f", '--filename', type=str, default="", help="Name of the output file")
|
|
|
+ parser.add_argument("-a", "--append", action="store_true", help="Append to the output file instead of overwriting.")
|
|
|
|
|
|
parser.add_argument("-md", "--max-depth", default=8, type=int, help="Max depth for the generated models")
|
|
|
- parser.add_argument("-ds", "--depth-stepsize", default=1, type=int,
|
|
|
+ parser.add_argument("-ds", "--depth-stepsize", type=int,
|
|
|
help="Determines for which depths a model is generated.")
|
|
|
|
|
|
parser.add_argument("-mw", "--max-width", default=8, type=int, help="Max width for the generated models")
|
|
|
- parser.add_argument("-ws", "--width-stepsize", default=1, type=int,
|
|
|
+ parser.add_argument("-ws", "--width-stepsize", type=int,
|
|
|
help="Determines for which depths a model is generated.")
|
|
|
|
|
|
parser.add_argument("-r", "--repetitions", default=1, type=int, help="The number of times a simulation is repeated")
|
|
|
@@ -145,6 +147,11 @@ def parse_args():
|
|
|
Dynamic(subparsers)
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
+ if args.depth_stepsize is None:
|
|
|
+ args.depth_stepsize = args.max_depth
|
|
|
+ if args.width_stepsize is None:
|
|
|
+ args.width_stepsize = args.max_width
|
|
|
+
|
|
|
return args
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
@@ -163,26 +170,28 @@ if __name__ == "__main__":
|
|
|
if args.mode == "dynamic":
|
|
|
fieldnames += ["number", "generator_mode"]
|
|
|
|
|
|
+ extra = {
|
|
|
+ "classic": False if not hasattr(args, "classic") else args.classic,
|
|
|
+ "gen_mode": "uniform" if not hasattr(args, "gen_mode") else args.gen_mode,
|
|
|
+ "number": 1 if not hasattr(args, "number") else args.number,
|
|
|
+ }
|
|
|
|
|
|
for model_type in args.model_structure:
|
|
|
model_filename = f"{args.path}{model_type}"
|
|
|
if args.filename:
|
|
|
model_filename += f"_{args.filename}"
|
|
|
- else:
|
|
|
- model_filename += ".csv"
|
|
|
- with open(model_filename, "w", newline="") as csvfile:
|
|
|
+ model_filename += ".csv"
|
|
|
+
|
|
|
+ file_mode = "a" if args.append else "w"
|
|
|
+ write_header = not args.append or not os.path.exists(model_filename)
|
|
|
+ with open(model_filename, file_mode, newline="") as csvfile:
|
|
|
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
|
|
- writer.writeheader()
|
|
|
+ if write_header:
|
|
|
+ writer.writeheader()
|
|
|
|
|
|
for depth in range(d[1], d[0] + 1, d[1]):
|
|
|
for width in range(w[1], w[0] + 1, w[1]):
|
|
|
for run in range(args.repetitions):
|
|
|
- extra = {}
|
|
|
- if args.mode == "dynamic":
|
|
|
- extra["classic"] = args.classic
|
|
|
- extra["gen_mode"] = args.gen_mode
|
|
|
- extra["number"] = args.number
|
|
|
-
|
|
|
creation, setup, sim, output = run_devstone(
|
|
|
model_type, depth, width,
|
|
|
args.mode, args.output,
|