diff --git a/examples/test_workflow.json b/examples/test_workflow.json index f0fa936ec307ee749bef6b3e85bb4bdc05303f4e..64e04bbbbe181604dd97217b241c2d1a27c06d11 100644 --- a/examples/test_workflow.json +++ b/examples/test_workflow.json @@ -1,9 +1,17 @@ { - "multi_criteria_optimization": { - "name": "basic" + "multi_criteria_optimizer": { + "name": "basic", + "model_data": {} + }, + "data_sources": [ + { + "name": "viscosity", + "model_data": {} }, - "data_sources": [ - "viscosity", "price" - ] + { + "name": "price", + "model_data": {} + } + ] } diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py index 02625f2a01382f0810d2163910937b3f1ff0dd92..57051c180ce7336c08107185668d2b9b54d2345b 100644 --- a/force_bdss/core_mco_driver.py +++ b/force_bdss/core_mco_driver.py @@ -36,34 +36,36 @@ class CoreMCODriver(Plugin): workflow = self.application.workflow if self.application.evaluate: for requested_ds in workflow.data_sources: - ds_bundle = self._find_data_source_bundle_by_name(requested_ds) + ds_bundle = self._find_data_source_bundle_by_name( + requested_ds.name) if ds_bundle: ds_model = ds_bundle.create_model(requested_ds.model_data) - data_source = ds_bundle.create_data_source(self, ds_model) + data_source = ds_bundle.create_data_source( + self.application, ds_model) data_source.run() else: raise Exception("Requested data source {} but don't know " - "to find it.".format(requested_ds)) + "to find it.".format(requested_ds.name)) else: mco_data = workflow.multi_criteria_optimizer mco_bundle = self._find_mco_bundle_by_name(mco_data.name) if mco_bundle: mco_model = mco_bundle.create_model(mco_data.model_data) - mco = mco_bundle.create_optimizer(self, mco_model) + mco = mco_bundle.create_optimizer(self.application, mco_model) mco.run() else: raise Exception("Requested MCO {} but it's not available" "to compute it.".format(mco_data.name)) - def _find_data_source_by_name(self, name): - for ds in self.data_sources: + def _find_data_source_bundle_by_name(self, name): + for ds in self.data_source_bundles: if ds.name == name: return ds return None - def _find_mco_by_name(self, name): - for mco in self.multi_criteria_optimizers: + def _find_mco_bundle_by_name(self, name): + for mco in self.mco_bundles: if mco.name == name: return mco diff --git a/force_bdss/data_sources/basic_bundle.py b/force_bdss/data_sources/basic_bundle.py index 5e4f87ccd7a2f33a962b3ab0c1ad14a611748019..a0764c4fbdbeaee01980c3a0034e69b1e8a9538d 100644 --- a/force_bdss/data_sources/basic_bundle.py +++ b/force_bdss/data_sources/basic_bundle.py @@ -1,4 +1,4 @@ -from traits.api import provides, HasStrictTraits +from traits.api import provides, HasStrictTraits, String from force_bdss.data_sources.basic_data_source import BasicDataSource from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle @@ -7,6 +7,8 @@ from force_bdss.mco.basic_model import BasicModel @provides(IDataSourceBundle) class BasicBundle(HasStrictTraits): + name = String("basic") + def create_model(self, model_data): return BasicModel.from_json(model_data) diff --git a/force_bdss/data_sources/price_bundle.py b/force_bdss/data_sources/price_bundle.py index 678517e45a7305f095d2725f173a31da1a8953ca..7067d1aaa1f711a897fa76b181c7a0bc2c764841 100644 --- a/force_bdss/data_sources/price_bundle.py +++ b/force_bdss/data_sources/price_bundle.py @@ -1,4 +1,5 @@ from traits.api import provides, HasStrictTraits +from traits.trait_types import String from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle from force_bdss.data_sources.price_data_source import PriceDataSource @@ -7,6 +8,8 @@ from force_bdss.data_sources.price_model import PriceModel @provides(IDataSourceBundle) class PriceBundle(HasStrictTraits): + name = String("price") + def create_model(self, model_data): return PriceModel.from_json(model_data) diff --git a/force_bdss/data_sources/viscosity_bundle.py b/force_bdss/data_sources/viscosity_bundle.py index 3e495a5e2f8da6ec0ae0ad53524bced09c87f9bb..c338a98fde569a9112e67d850ed354ee15eaca85 100644 --- a/force_bdss/data_sources/viscosity_bundle.py +++ b/force_bdss/data_sources/viscosity_bundle.py @@ -1,4 +1,5 @@ from traits.api import provides, HasStrictTraits +from traits.trait_types import String from force_bdss.data_sources.viscosity_model import ViscosityModel from .i_data_source_bundle import IDataSourceBundle @@ -7,6 +8,8 @@ from .viscosity_data_source import ViscosityDataSource @provides(IDataSourceBundle) class ViscosityBundle(HasStrictTraits): + name = String("viscosity") + def create_model(self, model_data): return ViscosityModel.from_json(model_data) diff --git a/force_bdss/mco/basic_bundle.py b/force_bdss/mco/basic_bundle.py index 86139561ad1de0e4a8814fa132e1605440629be5..a673f316b0bed910cd0ce58b69e64b984cfe9470 100644 --- a/force_bdss/mco/basic_bundle.py +++ b/force_bdss/mco/basic_bundle.py @@ -1,4 +1,5 @@ from traits.has_traits import HasStrictTraits, provides +from traits.trait_types import String from .i_multi_criteria_optimizer_bundle import IMultiCriteriaOptimizerBundle from .basic_model import BasicModel @@ -7,6 +8,8 @@ from .basic_optimizer import BasicOptimizer @provides(IMultiCriteriaOptimizerBundle) class BasicBundle(HasStrictTraits): + name = String("basic") + def create_model(self, model_data): return BasicModel.from_json(model_data) diff --git a/force_bdss/mco/dakota_bundle.py b/force_bdss/mco/dakota_bundle.py index a33c5efafe5051779c26fd773f38bce01ee0d86d..1ad413bd98a4ee40f7c49c8f38811ec5d5c4b1ed 100644 --- a/force_bdss/mco/dakota_bundle.py +++ b/force_bdss/mco/dakota_bundle.py @@ -1,4 +1,5 @@ from traits.has_traits import HasStrictTraits, provides +from traits.trait_types import String from force_bdss.mco.dakota_optimizer import DakotaOptimizer from force_bdss.mco.dakota_model import DakotaModel @@ -7,6 +8,8 @@ from .i_multi_criteria_optimizer_bundle import IMultiCriteriaOptimizerBundle @provides(IMultiCriteriaOptimizerBundle) class DakotaBundle(HasStrictTraits): + name = String("dakota") + def create_model(self, model_data): return DakotaModel.from_json(model_data) diff --git a/force_bdss/workspecs/data_source.py b/force_bdss/workspecs/data_source.py new file mode 100644 index 0000000000000000000000000000000000000000..944e41ce68b6fa60fd9be2c77a6f651df2832b00 --- /dev/null +++ b/force_bdss/workspecs/data_source.py @@ -0,0 +1,16 @@ +from traits.has_traits import HasStrictTraits +from traits.trait_types import String, Dict + + +class DataSource(HasStrictTraits): + name = String() + model_data = Dict() + + @classmethod + def from_json(cls, json_data): + self = cls( + name=json_data["name"], + model_data=json_data["model_data"] + ) + + return self diff --git a/force_bdss/workspecs/multi_criteria_optimization.py b/force_bdss/workspecs/multi_criteria_optimization.py deleted file mode 100644 index 9e5e3152e68a168d0de2d2e5f0ff8d2031c1b25d..0000000000000000000000000000000000000000 --- a/force_bdss/workspecs/multi_criteria_optimization.py +++ /dev/null @@ -1,13 +0,0 @@ -from traits.api import HasStrictTraits, String - - -class MultiCriteriaOptimization(HasStrictTraits): - name = String() - - @classmethod - def from_json(cls, json_data): - self = cls( - name=json_data["name"] - ) - - return self diff --git a/force_bdss/workspecs/multi_criteria_optimizer.py b/force_bdss/workspecs/multi_criteria_optimizer.py new file mode 100644 index 0000000000000000000000000000000000000000..72a2fa6b264fb3f5cd0be4fc9af9fb284a6fca96 --- /dev/null +++ b/force_bdss/workspecs/multi_criteria_optimizer.py @@ -0,0 +1,15 @@ +from traits.api import HasStrictTraits, String, Dict + + +class MultiCriteriaOptimizer(HasStrictTraits): + name = String() + model_data = Dict() + + @classmethod + def from_json(cls, json_data): + self = cls( + name=json_data["name"], + model_data=json_data["model_data"] + ) + + return self diff --git a/force_bdss/workspecs/workflow.py b/force_bdss/workspecs/workflow.py index 871e9b7d1acab73292e017903a632d3d174cfb2f..88e5b60203bec836fbad4ef3c2bd7c3dae1b42e0 100644 --- a/force_bdss/workspecs/workflow.py +++ b/force_bdss/workspecs/workflow.py @@ -1,20 +1,24 @@ from traits.api import HasStrictTraits, Instance, String, List -from .multi_criteria_optimization import MultiCriteriaOptimization +from force_bdss.workspecs.data_source import DataSource +from .multi_criteria_optimizer import MultiCriteriaOptimizer class Workflow(HasStrictTraits): name = String() - multi_criteria_optimization = Instance(MultiCriteriaOptimization) - data_sources = List(String) + multi_criteria_optimizer = Instance(MultiCriteriaOptimizer) + data_sources = List(DataSource) @classmethod def from_json(cls, json_data): + self = cls( - multi_criteria_optimization=MultiCriteriaOptimization.from_json( - json_data["multi_criteria_optimization"] + multi_criteria_optimizer=MultiCriteriaOptimizer.from_json( + json_data["multi_criteria_optimizer"] ), - data_sources=json_data["data_sources"] + data_sources=[ + DataSource.from_json(data_source_data) + for data_source_data in json_data["data_sources"]] ) return self