| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- """Pipeline task registry and scenario definitions.
- A *task* is a callable ``task(tracker, logger, config, state) -> None``. A
- *scenario* is an ordered list of task ids the pipeline runs. Tasks communicate
- through the mutable ``state`` dict (dataloaders, model paths, control events).
- Pipeline stages (see ai/ARCHITECTURE.md):
- 1. load_data -> implemented
- 2. train_regular -> implemented
- 3. train_bayesian -> implemented
- 4. evaluate_regular -> PLANNED (placeholder)
- 5. evaluate_bayesian-> PLANNED (placeholder)
- 6. evaluate_noisy -> PLANNED (placeholder)
- load_models -> PLANNED (placeholder); loads saved .pt ensembles from
- disk into ``state`` so evaluation is decoupled from
- training (training deletes models from VRAM after saving).
- """
- from typing import Any, Dict
- from util.progress import ProgressTracker
- from util.ui_logger import PipelineLogger
- from . import load_data
- from . import train_bayesian
- from . import train_normal
- def _placeholder_task(planned: str):
- """Build a no-op task for a pipeline stage that is not implemented yet.
- It logs a clear warning and returns cleanly (advancing the pipeline) instead
- of crashing, so the scenario wiring can be exercised before the real
- evaluation logic lands.
- """
- def _task(
- tracker: ProgressTracker,
- logger: PipelineLogger,
- config: Dict[str, Any],
- state: Dict[str, Any],
- ) -> None:
- logger.info(f"[NOT IMPLEMENTED] {planned} — skipping (placeholder).")
- return _task
- PIPELINE_TASKS = {
- "load_data": {
- "task_name": "Load Image and ADNIMERGE",
- "task_func": load_data.load_data_task,
- },
- "train_regular": {
- "task_name": "Train Regular Models",
- "task_func": train_normal.train_normal_task,
- },
- "train_bayesian": {
- "task_name": "Train Bayesian Models",
- "task_func": train_bayesian.train_bayesian_task,
- },
- "load_models": {
- "task_name": "Load Saved Models",
- "task_func": _placeholder_task(
- "Load trained normal/Bayesian ensembles from work_dir into state"
- ),
- },
- "evaluate_regular": {
- "task_name": "Evaluate Regular Models",
- "task_func": _placeholder_task(
- "Evaluate normal ensemble and save netCDF (step 4)"
- ),
- },
- "evaluate_bayesian": {
- "task_name": "Evaluate Bayesian Models",
- "task_func": _placeholder_task(
- "Evaluate Bayesian ensemble with MC uncertainty and save netCDF (step 5)"
- ),
- },
- "evaluate_noisy": {
- "task_name": "Evaluate Models on Noised Data",
- "task_func": _placeholder_task(
- "Evaluate both ensembles across Gaussian noise levels and save netCDF (step 6)"
- ),
- },
- }
- SCENARIOS = {
- "scen_train_all": {
- "label": "1. Train, Evaluate, & Noise Analysis",
- "tasks": [
- "load_data",
- "train_regular",
- "train_bayesian",
- "load_models",
- "evaluate_regular",
- "evaluate_bayesian",
- "evaluate_noisy",
- ],
- },
- "scen_load_all": {
- "label": "2. Load, Evaluate, & Noise Analysis",
- "tasks": [
- "load_data",
- "load_models",
- "evaluate_regular",
- "evaluate_bayesian",
- "evaluate_noisy",
- ],
- },
- "scen_load_eval": {
- "label": "3. Load & Evaluate (Skip Noise)",
- "tasks": [
- "load_data",
- "load_models",
- "evaluate_regular",
- "evaluate_bayesian",
- ],
- },
- }
|