| """ |
| Batch runner for LRMC summary. |
| |
| Iterates over every XXX.json file in cora_seeds/stage0 and runs the |
| 2.6_lrmc_summary.py script for each seed, writing results to |
| cora_seeds/summary/XXX.json via the script's --output_json flag. |
| |
| This version does not capture stdout/stderr or write .txt logs; it only |
| directs the underlying script to produce structured JSON summaries. |
| """ |
|
|
| import os |
| import glob |
| import subprocess |
| from pathlib import Path |
| from rich import print |
| import argparse |
|
|
| |
| |
| |
| SCRIPT_NAME = "2.6_lrmc_summary.py" |
| DATASET = "Cora" |
| HIDDEN = "32" |
| EPOCHS = "200" |
| LR = "0.05" |
| RUNS = "20" |
| EXTRA_FLAGS = ["--expand_core_with_train"] |
| |
|
|
| def run_script(seed_path: Path, out_json: Path) -> None: |
| """Execute the summary script for a single seed, writing JSON to out_json.""" |
| cmd = [ |
| "python3", |
| SCRIPT_NAME, |
| "--dataset", DATASET, |
| "--seeds", str(seed_path), |
| "--hidden", HIDDEN, |
| "--epochs", EPOCHS, |
| "--lr", LR, |
| "--runs", RUNS, |
| "-o", str(out_json), |
| *EXTRA_FLAGS |
| ] |
|
|
| |
| subprocess.run(cmd, check=True, cwd=Path.cwd(), stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) |
|
|
| def main() -> None: |
| """Main entry point.""" |
| parser = argparse.ArgumentParser(description="Batch runner for LRMC summary.") |
| parser.add_argument('--baseline', type=str, choices=['random'], help='Use a baseline method.') |
| args = parser.parse_args() |
|
|
| if args.baseline == 'random': |
| SEEDS_DIR = Path("cora_seeds/stage0_rand") |
| SUMMARY_DIR = Path("cora_seeds/summary_rand") |
| else: |
| SEEDS_DIR = Path("cora_seeds/stage0") |
| SUMMARY_DIR = Path("cora_seeds/summary") |
|
|
| |
| SUMMARY_DIR.mkdir(parents=True, exist_ok=True) |
|
|
| |
| seed_files = sorted(SEEDS_DIR.glob("*.json")) |
| if not seed_files: |
| print(f"[red]No JSON seed files found in {SEEDS_DIR!s}[/red]") |
| return |
|
|
| |
| try: |
| from rich.progress import Progress, BarColumn, TextColumn, TimeRemainingColumn |
| except ImportError: |
| print("[red]The 'rich' package is required – run: pip install rich[/red]") |
| return |
|
|
| progress = Progress( |
| TextColumn("[bold cyan]{task.fields[seed]}"), |
| BarColumn(), |
| TimeRemainingColumn(), |
| transient=True, |
| ) |
|
|
| with progress: |
| task_id = progress.add_task( |
| "Processing seeds", total=len(seed_files), seed="Preparing..." |
| ) |
|
|
| for seed_path in seed_files: |
| seed_name = seed_path.stem |
| out_json = SUMMARY_DIR / f"{seed_name}.json" |
|
|
| |
| try: |
| run_script(seed_path, out_json) |
| except Exception as exc: |
| print(f"[red]Failed: {seed_name}.json -> {exc}[/red]") |
|
|
| |
| progress.update( |
| task_id, |
| advance=1, |
| seed=f"{seed_name}.json" |
| ) |
|
|
| print(f"[green]All seeds processed – JSON summaries in {SUMMARY_DIR}/[/green]") |
|
|
| if __name__ == "__main__": |
| main() |