csdms

Source code for dakotathon.run_plugin

#!/usr/bin/env python
"""Defines the `dakota_run_plugin` console script."""

import importlib
from .utils import get_configuration_file, deserialize


plugin_script = "dakota_run_plugin"
_plugins_path = "dakotathon.plugins."


[docs]def run_plugin(params_file, results_file): """Brokers communication between Dakota and a model through files. Parameters ---------- params_file : str The path to the parameters file created by Dakota. results_file : str The path the results file returned to Dakota. Notes ----- This console script provides a generic *analysis driver* for a Dakota experiment. At each evaluation step, Dakota calls this script with two arguments, the names of the parameters and results files: 1. The parameters file provides information on the current Dakota evaluation step, including the names and values of model variables and their responses. It also includes, as the *analysis component*, the name of a configuration file that stores information about the setup of the experiment, including the name of the model to call, input files, output file(s) to examine, and the statistic to apply to the output file(s). 2. The results file contains model output values in a format specified by the Dakota documentation. Once the model is identified, an interface is created to perform three steps: preprocessing, execution, and postprocessing. In the preprocessing step, information from the configuration file is transferred to the component. In the execution step, the component is called, using the information passed from Dakota. In the postprocessing step, output from the component is read, and a single statistic (e.g., mean, median, max, etc.) is applied to it. This number, one for each response, is returned to Dakota through the results file, ending the Dakota evaluation step. """ config_file = get_configuration_file(params_file) config = deserialize(config_file) _module = importlib.import_module(_plugins_path + config["plugin"]) if _module.is_installed(): _class = getattr(_module, _module.classname) model = _class() else: raise NameError("Model cannot be created.") # Set up the simulation, call the model, calculate the response # statistic for the simulation, write the output to the Dakota # results file. model.setup(config) model.call() model.calculate() model.write(params_file, results_file)
[docs]def main(): """Handle arguments to the `dakota_run_plugin` console script.""" import argparse from . import __version__ parser = argparse.ArgumentParser( description="A generic analysis driver for a Dakota experiment." ) parser.add_argument("parameters_file", help="parameters file from Dakota") parser.add_argument("results_file", help="results file to Dakota") parser.add_argument( "--version", action="version", version=plugin_script + " " + __version__ ) args = parser.parse_args() run_plugin(args.parameters_file, args.results_file)
if __name__ == "__main__": main()