hpcflow.sdk.core.task.Task#

class hpcflow.sdk.core.task.Task(schema, repeats=None, groups=None, resources=None, inputs=None, input_files=None, sequences=None, input_sources=None, nesting_order=None, env_preset=None, environments=None, allow_non_coincident_task_sources=False, element_sets=None, output_labels=None, sourceable_elem_iters=None, merge_envs=True)#

Bases: JSONLike

Parametrisation of an isolated task for which a subset of input values are given “locally”. The remaining input values are expected to be satisfied by other tasks/imports in the workflow.

Parameters:
  • schema (TaskSchema | list[TaskSchema]) – A (list of) TaskSchema object(s) and/or a (list of) strings that are task schema names that uniquely identify a task schema. If strings are provided, the TaskSchema object will be fetched from the known task schemas loaded by the app configuration.

  • repeats (list[dict]) –

  • groups (list[ElementGroup]) –

  • resources (dict) –

  • inputs (list[InputValue]) – A list of InputValue objects.

  • input_files (list[InputFile]) –

  • sequences (list[ValueSequence]) –

  • input_sources (dict[str, InputSource]) –

  • nesting_order (list) –

  • env_preset (str) –

  • environments (dict[str, dict]) –

  • allow_non_coincident_task_sources (bool) – If True, if more than one parameter is sourced from the same task, then allow these sources to come from distinct element sub-sets. If False (default), only the intersection of element sub-sets for all parameters are included.

  • element_sets (list[ElementSet]) –

  • output_labels (list[OutputLabel]) –

  • sourceable_elem_iters (list[int]) –

  • merge_envs (bool) – If True, merge environment presets (set via the element set env_preset key) into resources using the “any” scope. If False, these presets are ignored. This is required on first initialisation, but not on subsequent re-initialisation from a persistent workflow.

Methods

add_group

Add an element group to this task.

all_schema_actions

Get all the schema actions and their indices.

from_json_like

Make an instance of this class from JSON (or YAML) data.

get_available_task_input_sources

For each input parameter of this task, generate a list of possible input sources that derive from inputs or outputs of this and other provided tasks.

get_input_statuses

Get a dict whose keys are normalised input paths (without the "inputs" prefix), and whose values are InputStatus objects.

get_param_provided_element_sets

Get the element set indices of this task for which a specified parameter type is locally provided.

get_schema_action

Get the schema action at the given index.

get_task_unique_names

Get the unique name of each in a list of tasks.

is_input_type_required

Check if an given input type must be specified in the parametrisation of this element set.

prepare_element_resolution

Set up the resolution of details of elements (especially multiplicities and how iterations are nested) within an element set.

provides_parameters

Get all provided parameter labelled types and whether they are inputs and outputs, considering all element sets.

set_sequence_parameters

Set up parameters parsed by value sequences.

to_dict

Serialize this object as a dictionary.

to_json_like

Serialize this object as an object structure that can be trivially converted to JSON.

to_persistent

Return a copy where any schema input defaults are saved to a persistent workflow.

Attributes

all_schema_input_normalised_paths

Normalised paths for all schema input types.

all_schema_input_types

The set of all schema input types (over all specified schemas).

all_schema_inputs

The inputs to this task's schemas.

all_schema_output_types

The set of all schema output types (over all specified schemas).

all_schema_outputs

The outputs from this task's schemas.

all_sourced_normalised_paths

All the sourced normalised paths, including of sub-values.

defined_input_types

The input types defined by this task, being the input types defined by any of its element sets.

dir_name

Artefact directory name.

element_sets

The element sets.

index

The index of this task within the workflow's tasks.

insert_ID

Insertion ID.

name

Task name.

non_universal_input_types

Get input types for each schema that are non-universal.

num_all_schema_actions

The total number of schema actions.

num_element_sets

The number of element sets.

objective

The goal of this task.

output_labels

The labels on the outputs of the task.

schema

The single task schema, if only one, else raises.

schemas

All the task schemas.

undefined_input_types

The schema's input types that this task doesn't define.

undefined_inputs

The task's inputs that are undefined.

universal_input_types

Get input types that are associated with all schemas

merge_envs

Whether to merge environments into resources using the "any" scope on first initialisation.

workflow_template

The template workflow that this task is within.

add_group(name, where, group_by_distinct)#

Add an element group to this task.

Parameters:
all_schema_actions()#

Get all the schema actions and their indices.

Return type:

Iterator[tuple[int, Action]]

property all_schema_input_normalised_paths: set[str]#

Normalised paths for all schema input types.

property all_schema_input_types: set[str]#

The set of all schema input types (over all specified schemas).

property all_schema_inputs: tuple[SchemaInput, ...]#

The inputs to this task’s schemas.

property all_schema_output_types: set[str]#

The set of all schema output types (over all specified schemas).

property all_schema_outputs: tuple[SchemaOutput, ...]#

The outputs from this task’s schemas.

property all_sourced_normalised_paths: set[str]#

All the sourced normalised paths, including of sub-values.

property defined_input_types: set[str]#

The input types defined by this task, being the input types defined by any of its element sets.

property dir_name: str#

Artefact directory name.

property element_sets: list[hpcflow.sdk.core.task.ElementSet]#

The element sets.

classmethod from_json_like(json_like, shared_data=None)#

Make an instance of this class from JSON (or YAML) data.

Parameters:
  • json_like (str | Mapping[str, JSONed] | Sequence[Mapping[str, JSONed]] | None) – The data to deserialise.

  • shared_data (Mapping[str, ObjectList[JSONable]] | None) – Shared context data.

Return type:

The deserialised object.

get_available_task_input_sources(element_set, source_tasks=())#

For each input parameter of this task, generate a list of possible input sources that derive from inputs or outputs of this and other provided tasks.

Note this only produces a subset of available input sources for each input parameter; other available input sources may exist from workflow imports.

Parameters:
Return type:

Mapping[str, Sequence[InputSource]]

get_input_statuses(elem_set)#

Get a dict whose keys are normalised input paths (without the “inputs” prefix), and whose values are InputStatus objects.

Parameters:

elem_set (ElementSet) – The element set for which input statuses should be returned.

Return type:

Mapping[str, InputStatus]

get_param_provided_element_sets(labelled_path)#

Get the element set indices of this task for which a specified parameter type is locally provided.

Note

Caller may freely modify this result.

Parameters:

labelled_path (str) –

Return type:

list[int]

get_schema_action(idx)#

Get the schema action at the given index.

Parameters:

idx (int) –

Return type:

Action

static get_task_unique_names(tasks)#

Get the unique name of each in a list of tasks.

Return type:

list of str

Parameters:

tasks (list[Task]) –

property index: int | None#

The index of this task within the workflow’s tasks.

property insert_ID: int#

Insertion ID.

is_input_type_required(typ, element_set)#

Check if an given input type must be specified in the parametrisation of this element set.

A schema input need not be specified if it is only required to generate an input file, and that input file is passed directly.

Parameters:
Return type:

bool

merge_envs#

Whether to merge environments into resources using the “any” scope on first initialisation.

property name: str#

Task name.

property non_universal_input_types: set[str]#

Get input types for each schema that are non-universal.

property num_all_schema_actions: int#

The total number of schema actions.

property num_element_sets: int#

The number of element sets.

property objective: TaskObjective#

The goal of this task.

property output_labels: Sequence[OutputLabel]#

The labels on the outputs of the task.

prepare_element_resolution(element_set, input_data_indices)#

Set up the resolution of details of elements (especially multiplicities and how iterations are nested) within an element set.

Parameters:
  • element_set (ElementSet) –

  • input_data_indices (Mapping[str, Sequence]) –

Return type:

list[MultiplicityDescriptor]

provides_parameters()#

Get all provided parameter labelled types and whether they are inputs and outputs, considering all element sets.

Return type:

tuple[tuple[str, str], …]

property schema: TaskSchema#

The single task schema, if only one, else raises.

property schemas: list[TaskSchema]#

All the task schemas.

set_sequence_parameters(element_set)#

Set up parameters parsed by value sequences.

Parameters:

element_set (ElementSet) –

Return type:

None

to_dict()#

Serialize this object as a dictionary.

Return type:

dict[str, Any]

to_json_like(dct=None, shared_data=None, exclude=(), path=None)#

Serialize this object as an object structure that can be trivially converted to JSON. Note that YAML can also be produced from the result of this method; it just requires a different final serialization step.

Parameters:
  • dct (dict[str, JSONable] | None) –

  • shared_data (_JSONDeserState) –

  • exclude (Container[str | None]) –

  • path (list | None) –

Return type:

tuple[JSONDocument, _JSONDeserState]

to_persistent(workflow, insert_ID)#

Return a copy where any schema input defaults are saved to a persistent workflow. Element set data is not made persistent.

Parameters:
Return type:

tuple[Self, list[int | list[int]]]

property undefined_input_types: set[str]#

The schema’s input types that this task doesn’t define.

property undefined_inputs: list[SchemaInput]#

The task’s inputs that are undefined.

property universal_input_types: set[str]#

Get input types that are associated with all schemas

workflow_template: WorkflowTemplate | None#

The template workflow that this task is within.