import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import r7_common as c
ARM_A_STATION = {"SMC_WIND_SOURCE": "station"}
ARM_B_NO_GENE_STATION = {k: v for k, v in c.ARM_B.items() if k != "SMC_WIND_ROT_GENE"}
ARM_B_NO_GENE_STATION = {**ARM_B_NO_GENE_STATION, "SMC_WIND_SOURCE": "station"}
ARM_B_GENE_STATION = {**c.ARM_B, "SMC_WIND_SOURCE": "station"}
ARMS = {
"station_a": (ARM_A_STATION, "station_a", "exp46_station_wind_input_a.json"),
"station_b": (ARM_B_NO_GENE_STATION, "station_b", "exp46_station_wind_input_b.json"),
"station_c": (ARM_B_GENE_STATION, "station_c", "exp46_station_wind_input_c.json"),
}
def jobs_for(env, label_prefix, seeds):
return [
(fire, f"{label_prefix}_seed{seed}", {**env, "SMC_SEED": str(seed)}, 32, "assim")
for fire in c.FIRES
for seed in seeds
]
if __name__ == "__main__":
p = c.arg_parser(__doc__)
p.add_argument("--arm", choices=list(ARMS), default=None,
help="which batch to build/run -- 'station_a', 'station_b' or "
"'station_c'. Required to actually launch a batch (one arm per "
"batch, never together); a bare --dry-run with no --arm prints "
"jobs for all three.")
args = p.parse_args()
arm_names = [args.arm] if args.arm else list(ARMS)
if args.dry_run:
if args.arm is None:
print("# no --arm given: printing jobs for all three (station_a, station_b, station_c)")
for arm_name in arm_names:
env, label_prefix, out_json = ARMS[arm_name]
c.dry_run(jobs_for(env, label_prefix, range(3)), out_json)
else:
if args.arm is None:
p.error("--arm {station_a,station_b,station_c} is required to launch a batch -- "
"one arm per batch, TEST_PLAN.md v1.9 E46")
env, label_prefix, out_json = ARMS[args.arm]
c.run_all(jobs_for(env, label_prefix, range(3)), out_json, workers=args.workers)