import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
import r7_common as c
ARM_B_SIGMA0 = {**c.ARM_B, "SMC_WIND_ROT_SIGMA": "0", "SMC_DIAG": "1"}
ARM_B_20 = {**c.ARM_B, "SMC_WIND_ROT_GENE": "20", "SMC_DIAG": "1"}
ARM_B_DIAG = {**c.ARM_B, "SMC_DIAG": "1"}
ARMS = {
"sigma0": (ARM_B_SIGMA0, "armB_sigma0", "exp45_wind_rot_mechanism_sigma0.json"),
"20": (ARM_B_20, "armB_20", "exp45_wind_rot_mechanism_20.json"),
"armb_diag": (ARM_B_DIAG, "armB_diag", "exp45_arm_b_diag.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 -- 'sigma0', '20', or the optional "
"'armb_diag' re-run. Required to actually launch a batch (one arm "
"per batch, never together); a bare --dry-run with no --arm prints "
"jobs for all three.")
p.add_argument("--seeds", choices=["5", "3"], default=None,
help="'5' for seeds 0-4 (E44's Arm B sd <= E33's on >= 4 fires), "
"'3' for seeds 0-2 (otherwise) -- see TEST_PLAN.md v1.9 E45. "
"Required to actually launch a batch; a bare --dry-run with no "
"--seeds prints both pre-registered branches.")
args = p.parse_args()
arm_names = [args.arm] if args.arm else list(ARMS)
seed_branches = [int(args.seeds)] if args.seeds else [5, 3]
if args.dry_run:
if args.arm is None:
print("# no --arm given: printing jobs for all three (sigma0, 20, armb_diag)")
if args.seeds is None:
print("# both seed branches pre-registered (TEST_PLAN.md v1.9 E45); "
"pick one with --seeds once E44 has a result")
for arm_name in arm_names:
env, label_prefix, out_json = ARMS[arm_name]
for n_seeds in seed_branches:
suffix = "" if args.seeds else f" (seeds={n_seeds} branch)"
c.dry_run(jobs_for(env, label_prefix, range(n_seeds)), out_json + suffix)
else:
if args.arm is None:
p.error("--arm {sigma0,20,armb_diag} is required to launch a batch -- one arm "
"per batch, TEST_PLAN.md v1.9 E45")
if args.seeds is None:
p.error("--seeds {5,3} is required to launch a batch -- see TEST_PLAN.md v1.9 E45 "
"for which branch E44's result selects")
env, label_prefix, out_json = ARMS[args.arm]
c.run_all(jobs_for(env, label_prefix, range(int(args.seeds))), out_json, workers=args.workers)