Source code for aiida.calculations.importers.arithmetic.add
"""Importer for the :class:`aiida.calculations.arithmetic.add.ArithmeticAddCalculation` plugin."""
from pathlib import Path
from re import match
from tempfile import NamedTemporaryFile
from typing import Dict, Union
from aiida.engine import CalcJobImporter
from aiida.orm import Int, Node, RemoteData
[docs]
class ArithmeticAddCalculationImporter(CalcJobImporter):
"""Importer for the :class:`aiida.calculations.arithmetic.add.ArithmeticAddCalculation` plugin."""
[docs]
@staticmethod
def parse_remote_data(remote_data: RemoteData, **kwargs) -> Dict[str, Union[Node, Dict]]:
"""Parse the input nodes from the files in the provided ``RemoteData``.
:param remote_data: the remote data node containing the raw input files.
:param kwargs: additional keyword arguments to control the parsing process.
:returns: a dictionary with the parsed inputs nodes that match the input spec of the associated ``CalcJob``.
"""
with NamedTemporaryFile('w+') as handle:
with remote_data.get_authinfo().get_transport() as transport:
filepath = Path(remote_data.get_remote_path()) / 'aiida.in'
transport.getfile(filepath, handle.name)
handle.seek(0)
data = handle.read()
matches = match(r'echo \$\(\(([0-9]+) \+ ([0-9]+)\)\).*', data.strip())
if matches is None:
raise ValueError(f'failed to parse the integers `x` and `y` from the input content: {data}')
return {
'x': Int(matches.group(1)),
'y': Int(matches.group(2)),
}