Source code for idmtools_calibra.singularity_json_python_task
from dataclasses import field, dataclass
from functools import partial
from typing import Optional, Any, Dict
from idmtools.entities import CommandLine
from idmtools.entities.simulation import Simulation
from idmtools_models.python.json_python_task import JSONConfiguredPythonTask
# TODO - Move into idmtools?
[docs]@dataclass
class SingularityJSONConfiguredPythonTask(JSONConfiguredPythonTask):
provided_command: Optional[CommandLine] = field(default_factory=lambda: CommandLine(), metadata={"md": True})
[docs] def pre_creation(self, parent, platform):
super().pre_creation(parent=parent, platform=platform)
self.command = self.provided_command
# TODO: once calibra is updated, remove this method and use calib_manager.set_parameter_sweep_callback
[docs] @staticmethod
def set_parameter_sweep_callback(simulation: Simulation, param: str, value: Any) -> Dict[str, Any]:
"""
Convenience callback for sweeps
Args:
simulation: Simulation we are updating
param: Parameter
value: Value
Returns:
Tags to set on simulation
"""
if not hasattr(simulation.task, 'set_parameter'):
raise ValueError("update_task_with_set_parameter can only be used on tasks with a set_parameter")
return simulation.task.set_parameter(param, value)
[docs] @classmethod
def set_param_partial(cls, parameter: str):
return partial(cls.set_parameter_sweep_callback, param=parameter)