aiida.orm.nodes.data.code package#

Data plugins that represent an executable code.

Submodules#

Abstract data plugin representing an executable code.

class aiida.orm.nodes.data.code.abstract.AbstractCode(default_calc_job_plugin: Optional[str] = None, append_text: str = '', prepend_text: str = '', use_double_quotes: bool = False, is_hidden: bool = False, **kwargs)[source]#

Bases: aiida.orm.nodes.data.data.Data

Abstract data plugin representing an executable code.

_KEY_ATTRIBUTE_APPEND_TEXT: str = 'append_text'#
_KEY_ATTRIBUTE_DEFAULT_CALC_JOB_PLUGIN: str = 'input_plugin'#
_KEY_ATTRIBUTE_PREPEND_TEXT: str = 'prepend_text'#
_KEY_ATTRIBUTE_USE_DOUBLE_QUOTES: str = 'use_double_quotes'#
_KEY_EXTRA_IS_HIDDEN: str = 'hidden'#
__abstractmethods__ = frozenset({'can_run_on_computer', 'full_label', 'get_executable'})#
__annotations__ = {'_KEY_ATTRIBUTE_APPEND_TEXT': 'str', '_KEY_ATTRIBUTE_DEFAULT_CALC_JOB_PLUGIN': 'str', '_KEY_ATTRIBUTE_PREPEND_TEXT': 'str', '_KEY_ATTRIBUTE_USE_DOUBLE_QUOTES': 'str', '_KEY_EXTRA_IS_HIDDEN': 'str', '_hash_ignored_attributes': 'Tuple[str, ...]', '_logger': 'Optional[Logger]', '_plugin_type_string': 'ClassVar[str]', '_query_type_string': 'ClassVar[str]', '_updatable_attributes': 'Tuple[str, ...]'}#
__init__(default_calc_job_plugin: Optional[str] = None, append_text: str = '', prepend_text: str = '', use_double_quotes: bool = False, is_hidden: bool = False, **kwargs)[source]#

Construct a new instance.

Parameters
  • default_calc_job_plugin – The entry point name of the default CalcJob plugin to use.

  • append_text – The text that should be appended to the run line in the job script.

  • prepend_text – The text that should be prepended to the run line in the job script.

  • use_double_quotes – Whether the command line invocation of this code should be escaped with double quotes.

  • is_hidden – Whether the code is hidden.

__module__ = 'aiida.orm.nodes.data.code.abstract'#
__parameters__ = ()#
_abc_impl = <_abc_data object>#
classmethod _get_cli_options() dict[source]#

Return the CLI options that would allow to create an instance of this class.

_logger: Optional[Logger] = <Logger aiida.orm.nodes.data.code.abstract.AbstractCode (REPORT)>#
_plugin_type_string: ClassVar[str] = 'data.code.abstract.AbstractCode.'#
_query_type_string: ClassVar[str] = 'data.code.abstract.'#
property append_text: str#

Return the text that should be appended to the run line in the job script.

Returns

The text that should be appended to the run line in the job script.

abstract can_run_on_computer(computer: aiida.orm.computers.Computer) bool[source]#

Return whether the code can run on a given computer.

Parameters

computer – The computer.

Returns

True if the code can run on computer, False otherwise.

static cli_validate_label_uniqueness(_, __, value)[source]#

Validate the uniqueness of the label of the code.

property default_calc_job_plugin: str | None#

Return the optional default CalcJob plugin.

Returns

The entry point name of the default CalcJob plugin to use.

abstract property full_label: str#

Return the full label of this code.

The full label can be just the label itself but it can be something else. However, it at the very least has to include the label of the code.

Returns

The full label of the code.

get_builder()[source]#

Create and return a new ProcessBuilder for the CalcJob class of the plugin configured for this code.

The configured calculation plugin class is defined by the default_calc_job_plugin property.

Note

it also sets the builder.code value.

Returns

a ProcessBuilder instance with the code input already populated with ourselves

Raises
classmethod get_cli_options() collections.OrderedDict[source]#

Return the CLI options that would allow to create an instance of this class.

abstract get_executable() str[source]#

Return the executable that the submission script should execute to run the code.

Returns

The executable to be called in the submission script.

property is_hidden: bool#

Return whether the code is hidden.

Returns

True if the code is hidden, False otherwise, which is also the default.

property label: str#

Return the node label.

Returns

the label

property prepend_text: str#

Return the text that should be prepended to the run line in the job script.

Returns

The text that should be prepended to the run line in the job script.

property use_double_quotes: bool#

Return whether the command line invocation of this code should be escaped with double quotes.

Returns

True if to escape with double quotes, False otherwise.

Data plugin representing an executable code on a remote computer.

This plugin should be used if an executable is pre-installed on a computer. The InstalledCode represents the code by storing the absolute filepath of the relevant executable and the computer on which it is installed. The computer is represented by an instance of aiida.orm.computers.Computer. Each time a aiida.engine.CalcJob is run using an InstalledCode, it will run its executable on the associated computer.

class aiida.orm.nodes.data.code.installed.InstalledCode(computer: aiida.orm.computers.Computer, filepath_executable: str, **kwargs)[source]#

Bases: aiida.orm.nodes.data.code.abstract.AbstractCode

Data plugin representing an executable code on a remote computer.

_KEY_ATTRIBUTE_FILEPATH_EXECUTABLE: str = 'filepath_executable'#
__abstractmethods__ = frozenset({})#
__annotations__ = {'_KEY_ATTRIBUTE_APPEND_TEXT': 'str', '_KEY_ATTRIBUTE_DEFAULT_CALC_JOB_PLUGIN': 'str', '_KEY_ATTRIBUTE_FILEPATH_EXECUTABLE': <class 'str'>, '_KEY_ATTRIBUTE_PREPEND_TEXT': 'str', '_KEY_ATTRIBUTE_USE_DOUBLE_QUOTES': 'str', '_KEY_EXTRA_IS_HIDDEN': 'str', '_hash_ignored_attributes': 'Tuple[str, ...]', '_logger': 'Optional[Logger]', '_plugin_type_string': 'ClassVar[str]', '_query_type_string': 'ClassVar[str]', '_updatable_attributes': 'Tuple[str, ...]'}#
__init__(computer: aiida.orm.computers.Computer, filepath_executable: str, **kwargs)[source]#

Construct a new instance.

Parameters
  • computer – The remote computer on which the executable is located.

  • filepath_executable – The absolute filepath of the executable on the remote computer.

__module__ = 'aiida.orm.nodes.data.code.installed'#
__parameters__ = ()#
_abc_impl = <_abc_data object>#
classmethod _get_cli_options() dict[source]#

Return the CLI options that would allow to create an instance of this class.

_logger: Optional[Logger] = <Logger aiida.orm.nodes.data.code.installed.InstalledCode (REPORT)>#
_plugin_type_string: ClassVar[str] = 'data.core.code.installed.InstalledCode.'#
_query_type_string: ClassVar[str] = 'data.core.code.installed.'#
_validate()[source]#

Validate the instance by checking that a computer has been defined.

:raises aiida.common.exceptions.ValidationError: If the state of the node is invalid.

can_run_on_computer(computer: aiida.orm.computers.Computer) bool[source]#

Return whether the code can run on a given computer.

Parameters

computer – The computer.

Returns

True if the provided computer is the same as the one configured for this code.

static cli_validate_label_uniqueness(ctx, _, value)[source]#

Validate the uniqueness of the label of the code.

property filepath_executable: pathlib.PurePath#

Return the absolute filepath of the executable that this code represents.

Returns

The absolute filepath of the executable.

property full_label: str#

Return the full label of this code.

The full label can be just the label itself but it can be something else. However, it at the very least has to include the label of the code.

Returns

The full label of the code.

get_executable() str[source]#

Return the executable that the submission script should execute to run the code.

Returns

The executable to be called in the submission script.

validate_filepath_executable()[source]#

Validate the filepath_executable attribute.

Checks whether the executable exists on the remote computer if a transport can be opened to it. This method is intentionally not called in _validate as to allow the creation of Code instances whose computers can not yet be connected to and as to not require the overhead of opening transports in storing a new code.

Raises

ValidationError – if no transport could be opened or if the defined executable does not exist on the remote computer.

Data plugin represeting an executable code to be wrapped and called through a CalcJob plugin.

class aiida.orm.nodes.data.code.legacy.Code(remote_computer_exec=None, local_executable=None, input_plugin_name=None, files=None, **kwargs)[source]#

Bases: aiida.orm.nodes.data.code.abstract.AbstractCode

A code entity. It can either be ‘local’, or ‘remote’.

  • Local code: it is a collection of files/dirs (added using the add_path() method), where one file is flagged as executable (using the set_local_executable() method).

  • Remote code: it is a pair (remotecomputer, remotepath_of_executable) set using the set_remote_computer_exec() method.

For both codes, one can set some code to be executed right before or right after the execution of the code, using the set_preexec_code() and set_postexec_code() methods (e.g., the set_preexec_code() can be used to load specific modules required for the code to be run).

HIDDEN_KEY = 'hidden'#
__abstractmethods__ = frozenset({})#
__init__(remote_computer_exec=None, local_executable=None, input_plugin_name=None, files=None, **kwargs)[source]#

Construct a new instance.

Parameters
  • default_calc_job_plugin – The entry point name of the default CalcJob plugin to use.

  • append_text – The text that should be appended to the run line in the job script.

  • prepend_text – The text that should be prepended to the run line in the job script.

  • use_double_quotes – Whether the command line invocation of this code should be escaped with double quotes.

  • is_hidden – Whether the code is hidden.

__module__ = 'aiida.orm.nodes.data.code.legacy'#
__parameters__ = ()#
__str__()[source]#

Return str(self).

_abc_impl = <_abc_data object>#
_logger: Optional[Logger] = <Logger aiida.orm.nodes.data.code.legacy.Code (REPORT)>#
_plugin_type_string: ClassVar[str] = 'data.core.code.Code.'#
_query_type_string: ClassVar[str] = 'data.core.code.'#
_set_local()[source]#

Set the code as a ‘local’ code, meaning that all the files belonging to the code will be copied to the cluster, and the file set with set_exec_filename will be run.

It also deletes the flags related to the local case (if any)

_set_remote()[source]#

Set the code as a ‘remote’ code, meaning that the code itself has no files attached, but only a location on a remote computer (with an absolute path of the executable on the remote computer).

It also deletes the flags related to the local case (if any)

_validate()[source]#

Validate information stored in Node object.

For the Node base class, this check is always valid. Subclasses can override this method to perform additional checks and should usually call super()._validate() first!

This method is called automatically before storing the node in the DB. Therefore, use get() and similar methods that automatically read either from the DB or from the internal attribute cache.

can_run_on(computer)[source]#

Return True if this code can run on the given computer, False otherwise.

Local codes can run on any machine; remote codes can run only on the machine on which they reside.

TODO: add filters to mask the remote machines on which a local code can run.

can_run_on_computer(computer: aiida.orm.computers.Computer) bool[source]#

Return whether the code can run on a given computer.

Parameters

computer – The computer.

Returns

True if the code can run on computer, False otherwise.

property full_label#

Get full label of this code.

Returns label of the form <code-label>@<computer-name>.

classmethod get(pk=None, label=None, machinename=None)[source]#

Get a Computer object with given identifier string, that can either be the numeric ID (pk), or the label (and computername) (if unique).

Parameters
  • pk – the numeric ID (pk) for code

  • label – the code label identifying the code to load

  • machinename – the machine name where code is setup

Raises
get_append_text()[source]#

Return the postexec_code, or an empty string if no post-exec code was defined.

classmethod get_code_helper(label, machinename=None, backend=None)[source]#
Parameters
  • label – the code label identifying the code to load

  • machinename – the machine name where code is setup

Raises
get_computer_label()[source]#

Get label of this code’s computer.

get_description()[source]#

Return a string description of this Code instance.

Returns

string description of this Code instance

get_execname()[source]#

Return the executable string to be put in the script. For local codes, it is ./LOCAL_EXECUTABLE_NAME For remote codes, it is the absolute path to the executable.

get_executable() str[source]#

Return the executable that the submission script should execute to run the code.

Returns

The executable to be called in the submission script.

classmethod get_from_string(code_string)[source]#

Get a Computer object with given identifier string in the format label@machinename. See the note below for details on the string detection algorithm.

Note

the (leftmost) ‘@’ symbol is always used to split code and computername. Therefore do not use ‘@’ in the code name if you want to use this function (‘@’ in the computer name are instead valid).

Parameters

code_string – the code string identifying the code to load

Raises
get_input_plugin_name()[source]#

Return the name of the default input plugin (or None if no input plugin was set.

get_local_executable()[source]#
get_prepend_text()[source]#

Return the code that will be put in the scheduler script before the execution, or an empty string if no pre-exec code was defined.

get_remote_computer()[source]#

Return the remote computer associated with this code.

get_remote_exec_path()[source]#
get_use_double_quotes() bool[source]#

Return whether the command line invocation of this code should be escaped with double quotes.

Returns

True if to escape with double quotes, False otherwise which is also the default.

property hidden#

Determines whether the Code is hidden or not

hide()[source]#

Hide the code (prevents from showing it in the verdi code list)

is_local()[source]#

Return True if the code is ‘local’, False if it is ‘remote’ (see also documentation of the set_local and set_remote functions).

classmethod list_for_plugin(plugin, labels=True, backend=None)[source]#

Return a list of valid code strings for a given plugin.

Parameters
  • plugin – The string of the plugin.

  • labels – if True, return a list of code names, otherwise return the code PKs (integers).

Returns

a list of string, with the code names if labels is True, otherwise a list of integers with the code PKs.

relabel(new_label)[source]#

Relabel this code.

Parameters

new_label – new code label

reveal()[source]#

Reveal the code (allows to show it in the verdi code list) By default, it is revealed

set_append_text(code)[source]#

Pass a string of code that will be put in the scheduler script after the execution of the code.

set_files(files)[source]#

Given a list of filenames (or a single filename string), add it to the path (all at level zero, i.e. without folders). Therefore, be careful for files with the same name!

Todo

decide whether to check if the Code must be a local executable to be able to call this function.

set_input_plugin_name(input_plugin)[source]#

Set the name of the default input plugin, to be used for the automatic generation of a new calculation.

set_local_executable(exec_name)[source]#

Set the filename of the local executable. Implicitly set the code as local.

set_prepend_text(code)[source]#

Pass a string of code that will be put in the scheduler script before the execution of the code.

set_remote_computer_exec(remote_computer_exec)[source]#

Set the code as remote, and pass the computer on which it resides and the absolute path on that computer.

Parameters

remote_computer_exec – a tuple (computer, remote_exec_path), where computer is a aiida.orm.Computer and remote_exec_path is the absolute path of the main executable on remote computer.

set_use_double_quotes(use_double_quotes: bool)[source]#

Set whether the command line invocation of this code should be escaped with double quotes.

Parameters

use_double_quotes – True if to escape with double quotes, False otherwise.

validate_remote_exec_path()[source]#

Validate the remote_exec_path attribute.

Checks whether the executable exists on the remote computer if a transport can be opened to it. This method is intentionally not called in _validate as to allow the creation of Code instances whose computers can not yet be connected to and as to not require the overhead of opening transports in storing a new code.

Raises

ValidationError – if no transport could be opened or if the defined executable does not exist on the remote computer.

Data plugin representing an executable code stored in AiiDA’s storage.

This plugin should be used for executables that are not already installed on the target computer, but instead are available on the machine where AiiDA is running. The plugin assumes that the code is self-contained by a single directory containing all the necessary files, including a main executable. When constructing a PortableCode, passing the absolute filepath as filepath_files will make sure that all the files contained within are uploaded to AiiDA’s storage. The filepath_executable should indicate the filename of the executable within that directory. Each time a aiida.engine.CalcJob is run using a PortableCode, the uploaded files will be automatically copied to the working directory on the selected computer and the executable will be run there.

class aiida.orm.nodes.data.code.portable.PortableCode(filepath_executable: str, filepath_files: pathlib.Path, **kwargs)[source]#

Bases: aiida.orm.nodes.data.code.abstract.AbstractCode

Data plugin representing an executable code stored in AiiDA’s storage.

_KEY_ATTRIBUTE_FILEPATH_EXECUTABLE: str = 'filepath_executable'#
__abstractmethods__ = frozenset({})#
__annotations__ = {'_KEY_ATTRIBUTE_APPEND_TEXT': 'str', '_KEY_ATTRIBUTE_DEFAULT_CALC_JOB_PLUGIN': 'str', '_KEY_ATTRIBUTE_FILEPATH_EXECUTABLE': <class 'str'>, '_KEY_ATTRIBUTE_PREPEND_TEXT': 'str', '_KEY_ATTRIBUTE_USE_DOUBLE_QUOTES': 'str', '_KEY_EXTRA_IS_HIDDEN': 'str', '_hash_ignored_attributes': 'Tuple[str, ...]', '_logger': 'Optional[Logger]', '_plugin_type_string': 'ClassVar[str]', '_query_type_string': 'ClassVar[str]', '_updatable_attributes': 'Tuple[str, ...]'}#
__init__(filepath_executable: str, filepath_files: pathlib.Path, **kwargs)[source]#

Construct a new instance.

Note

If the files necessary for this code are not all located in a single directory or the directory contains files that should not be uploaded, and so the filepath_files cannot be used. One can use the methods of the aiida.orm.nodes.repository.NodeRepository class. This can be accessed through the base.repository attribute of the instance after it has been constructed. For example:

code = PortableCode(filepath_executable='some_name.exe')
code.put_object_from_file()
code.put_object_from_filelike()
code.put_object_from_tree()
Parameters
  • filepath_executable – The relative filepath of the executable within the directory of uploaded files.

  • filepath_files – The filepath to the directory containing all the files of the code.

__module__ = 'aiida.orm.nodes.data.code.portable'#
__parameters__ = ()#
_abc_impl = <_abc_data object>#
classmethod _get_cli_options() dict[source]#

Return the CLI options that would allow to create an instance of this class.

_logger: Optional[Logger] = <Logger aiida.orm.nodes.data.code.portable.PortableCode (REPORT)>#
_plugin_type_string: ClassVar[str] = 'data.core.code.portable.PortableCode.'#
_query_type_string: ClassVar[str] = 'data.core.code.portable.'#
_validate()[source]#

Validate the instance by checking that an executable is defined and it is part of the repository files.

:raises aiida.common.exceptions.ValidationError: If the state of the node is invalid.

can_run_on_computer(computer: aiida.orm.computers.Computer) bool[source]#

Return whether the code can run on a given computer.

A PortableCode should be able to be run on any computer in principle.

Parameters

computer – The computer.

Returns

True if the provided computer is the same as the one configured for this code.

property filepath_executable: pathlib.PurePath#

Return the relative filepath of the executable that this code represents.

Returns

The relative filepath of the executable.

property full_label: str#

Return the full label of this code.

The full label can be just the label itself but it can be something else. However, it at the very least has to include the label of the code.

Returns

The full label of the code.

get_executable() str[source]#

Return the executable that the submission script should execute to run the code.

Returns

The executable to be called in the submission script.