diff --git a/force_bdss/core_plugins/dummy/__init__.py b/force_bdss/core_plugins/dummy/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/__init__.py b/force_bdss/core_plugins/dummy/dummy_dakota/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_bundle.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_bundle.py new file mode 100644 index 0000000000000000000000000000000000000000..3d3bfacb035c7a978e5d331d790f5f37499dddcb --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_bundle.py @@ -0,0 +1,23 @@ +from traits.api import String +from force_bdss.api import bundle_id, BaseMultiCriteriaOptimizerBundle + +from .dakota_communicator import DummyDakotaCommunicator +from .dakota_model import DummyDakotaModel +from .dakota_optimizer import DummyDakotaOptimizer + + +class DummyDakotaBundle(BaseMultiCriteriaOptimizerBundle): + id = String(bundle_id("enthought", "dummy_dakota")) + + name = "Dummy Dakota" + + def create_model(self, model_data=None): + if model_data is None: + model_data = {} + return DummyDakotaModel(self, **model_data) + + def create_optimizer(self, application, model): + return DummyDakotaOptimizer(self, application, model) + + def create_communicator(self, application, model): + return DummyDakotaCommunicator(self, application, model) diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py new file mode 100644 index 0000000000000000000000000000000000000000..dfcc11349ec3a2db0093958f096267340f619966 --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py @@ -0,0 +1,20 @@ +import sys +import numpy + +from force_bdss.api import DataSourceParameters, BaseMCOCommunicator + + +class DummyDakotaCommunicator(BaseMCOCommunicator): + def receive_from_mco(self): + data = sys.stdin.read() + values = list(map(float, data.split())) + return DataSourceParameters( + value_types=["DUMMY"]*len(values), + values=numpy.array(values) + ) + + def send_to_mco(self, kpi_results): + data = " ".join( + [" ".join(list(map(str, r.values.tolist()))) for r in kpi_results] + ) + sys.stdout.write(data) diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_model.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_model.py new file mode 100644 index 0000000000000000000000000000000000000000..65150979e82bf7dfe79074baf5f978053a23ef1b --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_model.py @@ -0,0 +1,5 @@ +from force_bdss.api import BaseMCOModel + + +class DummyDakotaModel(BaseMCOModel): + pass diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py new file mode 100644 index 0000000000000000000000000000000000000000..e91edb5b3146f94c3b30cc2eb79ac0f7d70c3ba5 --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_optimizer.py @@ -0,0 +1,20 @@ +import subprocess + +import sys + +from force_bdss.api import BaseMultiCriteriaOptimizer + + +class DummyDakotaOptimizer(BaseMultiCriteriaOptimizer): + def run(self): + print("Running dakota optimizer") + for initial_value in range(10): + ps = subprocess.Popen( + [sys.argv[0], + "--evaluate", + self.application.workflow_filepath], + stdout=subprocess.PIPE, + stdin=subprocess.PIPE) + + out = ps.communicate("{}".format(initial_value).encode("utf-8")) + print("{}: {}".format(initial_value, out[0].decode("utf-8"))) diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py new file mode 100644 index 0000000000000000000000000000000000000000..20004b3a933fd6eba0da31a6069277d930aa36ea --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source.py @@ -0,0 +1,11 @@ +from force_bdss.api import BaseDataSource, DataSourceResult + + +class DummyDataSource(BaseDataSource): + def run(self, parameters): + print(parameters) + return DataSourceResult( + originator=self, + value_types=parameters.value_types, + values=parameters.values.reshape( + parameters.values.shape + (1,))) diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_bundle.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_bundle.py new file mode 100644 index 0000000000000000000000000000000000000000..ebebc00c4ad9e6b9b8278cbfa6978c849e68cc78 --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_bundle.py @@ -0,0 +1,16 @@ +from force_bdss.api import BaseDataSourceBundle, bundle_id +from .dummy_data_source_model import DummyDataSourceModel +from .dummy_data_source import DummyDataSource + + +class DummyDataSourceBundle(BaseDataSourceBundle): + id = bundle_id("enthought", "dummy_data_source") + + def create_model(self, model_data=None): + if model_data is None: + model_data = {} + + return DummyDataSourceModel(self, **model_data) + + def create_data_source(self, application, model): + return DummyDataSource(self, application, model) diff --git a/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_model.py b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_model.py new file mode 100644 index 0000000000000000000000000000000000000000..a79145f9bd9966a4834edb8ede4e89aa5500cebc --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_data_source/dummy_data_source_model.py @@ -0,0 +1,5 @@ +from force_bdss.api import BaseDataSourceModel + + +class DummyDataSourceModel(BaseDataSourceModel): + pass diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/__init__.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py new file mode 100644 index 0000000000000000000000000000000000000000..aeee46827562c20ecb61ca87f7cd5ef2cac9fc05 --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator.py @@ -0,0 +1,12 @@ +from force_bdss.api import BaseKPICalculator, KPICalculatorResult, bundle_id + + +class DummyKPICalculator(BaseKPICalculator): + id = bundle_id("enthought", "dummy_kpi_calculator") + + def run(self, data_source_results): + return KPICalculatorResult( + originator=self, + value_types=data_source_results[0].value_types, + values=data_source_results[0].values.reshape( + data_source_results[0].values.shape[:-1])) diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_bundle.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_bundle.py new file mode 100644 index 0000000000000000000000000000000000000000..b2c567bc6852c7779a6799b2c026b2cda2995756 --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_bundle.py @@ -0,0 +1,19 @@ +from traits.api import String +from force_bdss.api import bundle_id, BaseKPICalculatorBundle +from .dummy_kpi_calculator import DummyKPICalculator +from .dummy_kpi_calculator_model import DummyKPICalculatorModel + + +class DummyKPICalculatorBundle(BaseKPICalculatorBundle): + id = String(bundle_id("enthought", "dummy_kpi_calculator")) + + name = String("Dummy KPI") + + def create_model(self, model_data=None): + if model_data is None: + model_data = {} + + return DummyKPICalculatorModel(self, **model_data) + + def create_kpi_calculator(self, application, model): + return DummyKPICalculator(self, application, model) diff --git a/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_model.py b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_model.py new file mode 100644 index 0000000000000000000000000000000000000000..d72ee3f4556297d5ce718fbfaf6b8e555e018d8d --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_kpi_calculator/dummy_kpi_calculator_model.py @@ -0,0 +1,5 @@ +from force_bdss.api import BaseKPICalculatorModel + + +class DummyKPICalculatorModel(BaseKPICalculatorModel): + pass diff --git a/force_bdss/core_plugins/dummy/dummy_plugin.py b/force_bdss/core_plugins/dummy/dummy_plugin.py new file mode 100644 index 0000000000000000000000000000000000000000..01850726513c44d0f888bbb610b5b0da3a991ff4 --- /dev/null +++ b/force_bdss/core_plugins/dummy/dummy_plugin.py @@ -0,0 +1,17 @@ +from force_bdss.api import BaseExtensionPlugin +from .dummy_dakota.dakota_bundle import DummyDakotaBundle +from .dummy_data_source.dummy_data_source_bundle import DummyDataSourceBundle +from .dummy_kpi_calculator.dummy_kpi_calculator_bundle import ( + DummyKPICalculatorBundle +) + + +class DummyPlugin(BaseExtensionPlugin): + def _data_source_bundles_default(self): + return [DummyDataSourceBundle()] + + def _mco_bundles_default(self): + return [DummyDakotaBundle()] + + def _kpi_calculator_bundles_default(self): + return [DummyKPICalculatorBundle()] diff --git a/setup.py b/setup.py index 19b2c6aa22c8b83e91c3d48dfa550c0c6900726b..28dc7d9729bb3de994b6abf8c9a12636082b1080 100644 --- a/setup.py +++ b/setup.py @@ -16,6 +16,7 @@ setup( ".csv_extractor_plugin:CSVExtractorPlugin", "kpi_adder = force_bdss.core_plugins.dummy_kpi" ".dummy_kpi_calculator_plugin:DummyKPICalculatorPlugin", + "dummy = force_bdss.core_plugins.dummy.dummy_plugin:DummyPlugin", ] }, packages=find_packages(),