4. Drivers

The various software components required by EAGLE are executed by uwtools drivers implemented as Python modules under src/eagle/. By default, the targets in src/Makefile invoke drivers’ most comprehensive tasks, i.e. those that configure and execute the component to produce its final output. However, each driver provides a number of tasks, some of which depend on others, and lower-level tasks can be invoked to request less than full execution of the driver, which can be useful during development and debugging.

To request a specific task, add a task= clause to the appropriate make target. To see a list of available tasks, specify task=?.

4.1. Inspect Available Tasks

To list the tasks available for the Inference driver:

$ make inference config=eagle.yaml task=?
+ uw execute --module eagle/inference/inference.py --classname Inference
[2026-02-27T23:58:43]    ERROR Available tasks:
[2026-02-27T23:58:43]    ERROR   anemoi_config
[2026-02-27T23:58:43]    ERROR     Anemoi-inference config created with specified checkpoint path.
[2026-02-27T23:58:43]    ERROR   provisioned_rundir
[2026-02-27T23:58:43]    ERROR     Run directory provisioned with all required content.
[2026-02-27T23:58:43]    ERROR   run
[2026-02-27T23:58:43]    ERROR     A run.
[2026-02-27T23:58:43]    ERROR   runscript
[2026-02-27T23:58:43]    ERROR     The runscript.
[2026-02-27T23:58:43]    ERROR   show_output
[2026-02-27T23:58:43]    ERROR     Show the output to be created by this component.
[2026-02-27T23:58:43]    ERROR   validate
[2026-02-27T23:58:43]    ERROR     Validate the UW driver config.

The provisioned_rundir task provisions the run directory with all its required content, but would not execute the anemoi-inference component. The run task would fully execute inference.

4.2. Provision a Runscript

To invoke the Inference driver’s runscript task, provisioning only the component’s runscript:

$ make inference config=eagle.yaml task=runscript
+ uw execute --config-file eagle.yaml --module eagle/inference/inference.py --classname Inference --task runscript --batch
[2026-02-27T22:35:11]     INFO Schema validation succeeded for inference config
[2026-02-27T22:35:11]     INFO Validating config against internal schema: platform
[2026-02-27T22:35:11]     INFO Schema validation succeeded for platform config
[2026-02-27T22:35:11]     INFO inference runscript.inference: Executing
[2026-02-27T22:35:11]     INFO inference runscript.inference: Ready

The previously non-existent run/<expname>/inference/ directory now contains:

$ tree run/<expname>/inference/
run/<expname>/inference/
\--- runscript.inference

1 directory, 1 file

4.3. Editing a Provisioned Runscript

Since uwtools driver tasks are idempotent, now that runscript.inference exists, it will not be overwritten by subsequent driver invocations. It could now be manually edited, for example to add debugging statements, and the run task then invoked to execute inference with the debugging statements in place. If runscript.inference were manually deleted and the driver invoked again, the runscript would be recreated with its default contents.

4.4. Executing Without Batch Submission

Some targets defined in src/Makefile invoke their drivers by default with the --batch flag set, which directs uwtools to provision a runscript that includes batch-system directives (e.g. #SBATCH directives for Slurm) and to submit that script to the batch system for execution. Alternatively, the optional batch= clause may be used to disable (or to explicitly enable) batch submission. YAML true and false boolean values are supported; true values enable batch submission and false values disable it.

For example, the following make invocations would all execute inference with batch submission enabled:

$ make inference config=eagle.yaml
$ make inference config=eagle.yaml batch=true
$ make inference config=eagle.yaml batch=yes

These invocations would execute inference without batch submission, i.e. on the current local machine:

$ make inference config=eagle.yaml batch=false
$ make inference config=eagle.yaml batch=no

Invocation without batch submission can be useful when running on a system with hardware appropriate to the driver given its configuration, for example in a batch job created by a Rocoto workflow where it would be unnecessary for EAGLE to submit a new batch job from within an existing one.