From a5ebe7a7bef5570fe8bc6ac66937388338f39261 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Fri, 14 Jul 2017 11:52:46 +0100 Subject: [PATCH] Finalized the few bugs and typos --- examples/test_workflow.json | 18 +++++++++++++----- force_bdss/core_mco_driver.py | 18 ++++++++++-------- force_bdss/data_sources/basic_bundle.py | 4 +++- force_bdss/data_sources/price_bundle.py | 3 +++ force_bdss/data_sources/viscosity_bundle.py | 3 +++ force_bdss/mco/basic_bundle.py | 3 +++ force_bdss/mco/dakota_bundle.py | 3 +++ force_bdss/workspecs/data_source.py | 16 ++++++++++++++++ .../workspecs/multi_criteria_optimization.py | 13 ------------- .../workspecs/multi_criteria_optimizer.py | 15 +++++++++++++++ force_bdss/workspecs/workflow.py | 16 ++++++++++------ 11 files changed, 79 insertions(+), 33 deletions(-) create mode 100644 force_bdss/workspecs/data_source.py delete mode 100644 force_bdss/workspecs/multi_criteria_optimization.py create mode 100644 force_bdss/workspecs/multi_criteria_optimizer.py diff --git a/examples/test_workflow.json b/examples/test_workflow.json index f0fa936..64e04bb 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 02625f2..57051c1 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 5e4f87c..a0764c4 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 678517e..7067d1a 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 3e495a5..c338a98 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 8613956..a673f31 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 a33c5ef..1ad413b 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 0000000..944e41c --- /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 9e5e315..0000000 --- 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 0000000..72a2fa6 --- /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 871e9b7..88e5b60 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 -- GitLab