# Script Nodes

A PoPy script file is in YAML format, which consists of nested dictionaries that form a tree structure.

Each node of the tree is either:-

- a dictionary (dict) with sub nodes
- or a leave node

A leave node has to be one of the script node types listed below.

auto
  The word “auto”, indicating a preference for default behaviour.
bool
  A boolean: “true”/”yes”/”y”/”1” or “False”/”no”/”n”/”0”
dict

  A dictionary of unspecified structure - the user chooses the keys.

  Many of the elements of a script file are known as dictionaries (also known as mappings or associative arrays). These are key:value pairs that can be written as follows using curly brackets:-

      my_dictionary1: { key1: value1, key2: value2 }

  or alternatively using spacing:-

      my_dictionary2:
          key1: value1
          key2: value2

  Whichever you use is a matter of convenience and space.

dict_record
  A dictionary with a pre-determined structure (i.e. key names and corresponding types)
float
  Any number
input_file
  The path to a file that already exists. (An error occurs if it does not.)
input_file_as_glob
  A pattern (e.g. `*.csv`) that has only a single match. (An error occurs if there are multiple matching filenames.)
input_files_as_glob
  A pattern (e.g. `"*.csv"`) that has at least one match. (An error occurs only if there are no matching filenames.)
input_folder
  The path to a folder that already exists. (An error occurs if it does not.)
int
  An integer (whole number)
list
  A list of values of unspecified type.
list_of
  A list of one or more strings taken from the list of options in brackets.
list_record
  A list
none
  The word “none”, indicating a file that does not exist.
one_of
  A string, limited to one of the options given in brackets.
one_of_record
  One from a selection of dict_records
output_file
  The path to a file that may not yet exist (in contrast to input_file).
output_folder
  The path to a folder that may not yet exist (in contrast to input_folder).
pseudocode
  verbatim sections of the script file accept Python code with extra PoPy syntax added. For example special variable names such as `f[X]`, `r[X]` etc. We refer to this code as ‘pseudocode’. Pseudocode is automatically translated into runnable Python functions that are executed by PoPy to process your script.
repeat_record
  One or more of a selection of dict_records
star
  The “*” character, shorthand for “all possibilities”.
str
  A string.
verbatim
  Several blocks in the script file (namely MODEL_PARAMS, STATES, DERIVATIVES and PREDICTIONS) are reserved for pseudocode of a relatively unstructured kind. This is translated into executable code.