Generator Configuration#

Telling SIERRA About Scenario Details#

To enable SIERRA to generate experiment definitions based on the --scenario you specify, create generators/scenario.py in your --project directory.

Within this file, you must define the following functions:

Takes the --scenario argument and returns the string of the callable function within scenario.py that SIERRA should use to generate scenario definitions for your experiments:

def to_generator_name(scenario_arg: str) -> str:
    """
    Given ``--scenario`` string, generate the name of the callable
    generator in this file (``scenario.py``) to generate changes for
    all experiments.
    """

Important

This is the equivalent of the experiment.for_all_exp() for Engines; Projects don't define that hook directly (at least not that SIERRA uses). This alternative mechanism was used instead of *args/**kwargs to share for_all_exp() signatures between projects and engines, because it results in better static analysis support, and is semantically just as clear.

def to_dict(self, scenario_name: str) -> str:
        """
        Given a string (presumably a result of an earlier cmdline
        parse), parse it into a dictionary of components: arena_x,
        arena_y, arena_z, scenario_tag

        which specify the X,Y,Z dimensions of the arena a unique
        tag/short scenario name unique among all scenarios for the
        project, which is used which creating the SIERRA runtime
        directory structure. If you aren't interested in setting the
        dimensions of the arena from the cmdline, return -1 for the
        X,Y,Z components.
        """
        ...

Generating Experiments#

In generators/experiment.py, you may define the following functions:

This function is optional. It is used to generate expdef changes for a single Experimental Run for your project. If you define it, you must call the engine for_single_exp_run() otherwise none of the engine-specific changes will be made, and your experiment might not run.

import pathlib

from sierra.core.experiment import definition
from sierra.core import types

def for_single_exp_run(
  exp_def: definition.BaseExpDef,
  run_num: int,
  run_output_path: pathlib.Path,
  launch_stem_path: pathlib.Path,
  random_seed: int,
  cmdopts: types.Cmdopts) -> definition.BaseExpDef:
  """
  Generate expdef changes unique to a experimental run within an
  experiment for the current project.

  Return the updated experiment definition.

  Arguments:
      exp_def: The experiment definition after ``--engine`` changes
               common to all experiments have been made.

      run_num: The run # in the experiment.

      run_output_path: Path to run output directory within experiment
                       root (i.e., a leaf).

      launch_stem_path: Path to launch file in the input directory for
                        the experimental run, sans extension or other
                        modifications that the engine can impose.

      random_seed: The random seed for the run.

      cmdopts: Dictionary containing parsed cmdline options.
  """
  pass