Source code for dakotathon.interface.base
"""An abstract base class for all Dakota interfaces."""
from abc import ABCMeta, abstractmethod
import os
[docs]class InterfaceBase(object):
"""Describe features common to all Dakota interfaces."""
__metaclass__ = ABCMeta
[docs] @abstractmethod
def __init__(
self,
interface="direct",
id_interface="CSDMS",
analysis_driver="rosenbrock",
asynchronous=False,
evaluation_concurrency=2,
work_directory=os.getcwd(),
work_folder="run",
parameters_file="params.in",
results_file="results.out",
**kwargs
):
"""Create a default interface.
Parameters
----------
interface : str, optional
The Dakota interface type (default is 'direct').
id_interface : str, optional
Interface identifier.
analysis_driver : str, optional
Name of analysis driver for Dakota experiment (default is
'rosenbrock').
asynchronous : bool, optional
Set to perform asynchronous evaluations (default is False).
evaluation_concurrency : int, optional
Number of concurrent evaluations (default is 2).
work_directory : str, optional
The file path to the work directory (default is the run
directory)
work_folder : str, optional
The name of the folders Dakota will create for each run
(default is **run**).
parameters_file : str, optional
The name of the parameters file (default is **params.in**).
results_file : str, optional
The name of the results file (default is **results.out**).
**kwargs
Optional keyword arguments.
"""
self.interface = interface
self.id_interface = id_interface
self.analysis_driver = analysis_driver
self._asynchronous = asynchronous
self._evaluation_concurrency = evaluation_concurrency
self.parameters_file = parameters_file
self.results_file = results_file
self.work_directory = os.path.join(work_directory, work_folder)
@property
def asynchronous(self):
"""State of Dakota evaluation concurrency."""
return self._asynchronous
@asynchronous.setter
def asynchronous(self, value):
"""Toggle Dakota evaluation concurrency.
Parameters
----------
value : bool
True if evaluation concurrency is enabled.
"""
if not isinstance(value, bool):
raise TypeError("Asynchronous must be a bool")
self._asynchronous = value
@property
def evaluation_concurrency(self):
"""Number of concurrent evaluations."""
return self._evaluation_concurrency
@evaluation_concurrency.setter
def evaluation_concurrency(self, value):
"""Set the number of concurrent evaluations.
Parameters
----------
value : int
The number of concurrent evaluations.
"""
if not isinstance(value, int):
raise TypeError("Evaluation concurrency must be a int")
self._evaluation_concurrency = value
[docs] def __str__(self):
"""Define the interface block of a Dakota input file."""
s = (
"interface\n"
+ " id_interface = {!r}\n".format(self.id_interface)
+ " {}\n".format(self.interface)
+ " analysis_driver = {!r}".format(self.analysis_driver)
)
if self.asynchronous:
s += "\n" + " asynchronous"
s += (
"\n"
+ " evaluation_concurrency ="
+ " {}".format(self.evaluation_concurrency)
)
return s