polaris.tasks.ocean.analysis.publish.Publish

class polaris.tasks.ocean.analysis.publish.Publish(component, subdir, product_steps)[source]

A step that publishes what the analysis steps made and generates the gallery over it

This is the only step that knows how results are presented. It reads each step’s manifest fragment, symlinks the products into the staging tree, renders a thumbnail for each plot, writes the merged manifest, and generates the site. Working from the fragments rather than from the directory structure is what lets the work be re-chunked later without disturbing output paths, links, or the gallery.

The step never looks for its inputs. Each fragment is a declared input, linked into fragments/ from the step that wrote it, so Polaris checks before this step runs that every one of them is there and names the ones that are not. Each of those steps is also declared as a dependency, which is what reaches anything knowable only after a step has run and what names a step that never ran at all. Nothing reorders steps, so the suite has to list this one last.

Every step that makes products writes a fragment, even when it made nothing: an empty product list is what a step with nothing to publish writes, and it is what lets the fragment be declared rather than looked for.

Variables:

fragment_filenames (list of str) – The fragments, as local paths within this step’s work directory, in the order the steps that wrote them are listed

__init__(component, subdir, product_steps)[source]

Create the publish step

Parameters:
  • component (polaris.tasks.ocean.Ocean) – The ocean component the step belongs to

  • subdir (str) – The subdirectory for the step

  • product_steps (list of polaris.Step) – The steps that make products, each of which becomes a dependency

Methods

__init__(component, subdir, product_steps)

Create the publish step

add_dependency(step[, name])

Add step as a dependency of this step (i.e. this step can't run until the dependency has finished).

add_input_file([filename, target, database, ...])

Add an input file to the step (but not necessarily to the MPAS model).

add_output_file(filename[, validate_vars, ...])

Add the output file to the step

add_property_check(filename, check_properties)

Add a single conservation comparison for an output file

check_properties()

Check conservation properties of the output files of this step.

constrain_resources(available_resources)

Constrain cpus_per_task and ntasks based on the number of cores available to this step

output_path()

Get the root of the staging tree results are published into

process_inputs_and_outputs()

Process the inputs to and outputs from a step added with polaris.Step.add_input_file() and polaris.Step.add_output_file().

run()

Publish every product the fragments describe and generate the gallery

runtime_setup()

Update attributes of the step at runtime before calling the run() method.

set_resources([cpus_per_task, ...])

Update the resources for the subtask.

set_shared_config(config[, link])

Replace the step's config parser with the shared config parser

setup()

Set up the task in the work directory, including downloading any dependencies.

validate_baselines()

Compare variables between output files in this step and in the same step from a baseline run if one was provided.

work_path(*filenames)

Get the absolute path to a file or directory in the step's work directory

Attributes

cores

the number of cores this step needs, in total

gpus

the number of GPUs this step needs, in total

may_span_nodes

whether this step's cores and GPUs may come from several nodes

min_cores

the number of cores this step needs in order to run at all

min_gpus

the number of GPUs this step requires, in total