From 579f4fd15d7ecd1f9bb1a222f3c898e03e729a3d Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Tue, 1 Aug 2017 10:07:59 +0100 Subject: [PATCH] Adding data value --- force_bdss/api.py | 1 + force_bdss/core/__init__.py | 0 force_bdss/core/data_value.py | 20 ++++++++++++++ force_bdss/core_evaluation_driver.py | 4 +-- .../csv_extractor_data_source.py | 17 +++++------- .../dummy/dummy_dakota/dakota_communicator.py | 14 +++++----- .../dummy_data_source/dummy_data_source.py | 10 ++----- .../dummy_kpi_calculator.py | 11 ++------ .../dummy/kpi_adder/kpi_adder_calculator.py | 26 ++++++++----------- force_bdss/mco/base_mco_communicator.py | 9 +++---- 10 files changed, 56 insertions(+), 56 deletions(-) create mode 100644 force_bdss/core/__init__.py create mode 100644 force_bdss/core/data_value.py diff --git a/force_bdss/api.py b/force_bdss/api.py index 5c71f3d..4f54ab3 100644 --- a/force_bdss/api.py +++ b/force_bdss/api.py @@ -1,5 +1,6 @@ from .base_extension_plugin import BaseExtensionPlugin # noqa from .ids import bundle_id, plugin_id # noqa +from .core.data_value import DataValue # noqa from .data_sources.base_data_source_model import BaseDataSourceModel # noqa from .data_sources.data_source_result import DataSourceResult # noqa diff --git a/force_bdss/core/__init__.py b/force_bdss/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/force_bdss/core/data_value.py b/force_bdss/core/data_value.py new file mode 100644 index 0000000..f03aca3 --- /dev/null +++ b/force_bdss/core/data_value.py @@ -0,0 +1,20 @@ +from traits.api import HasStrictTraits, Any, String + + +class DataValue(HasStrictTraits): + """Contains the parameters as passed from the MCO.""" + #: The CUBA types associated to the values + type = String() + + #: The user-defined names associated to the values. + name = String() + + #: The values as a single array. + value = Any() + + def __str__(self): + return """ + {} {} : {} + """.format(str(self.type), + str(self.name), + str(self.value)) diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py index ee8de2b..8cfe761 100644 --- a/force_bdss/core_evaluation_driver.py +++ b/force_bdss/core_evaluation_driver.py @@ -31,13 +31,13 @@ class CoreEvaluationDriver(BaseCoreDriver): mco_bundle = mco_model.bundle mco_communicator = mco_bundle.create_communicator() - parameters = mco_communicator.receive_from_mco(mco_model) + mco_data_values = mco_communicator.receive_from_mco(mco_model) ds_results = [] for ds_model in workflow.data_sources: ds_bundle = ds_model.bundle data_source = ds_bundle.create_data_source() - ds_results.append(data_source.run(ds_model, parameters)) + ds_results.append(data_source.run(ds_model, mco_data_values)) kpi_results = [] for kpic_model in workflow.kpi_calculators: diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py index b42cf1b..d159906 100644 --- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py +++ b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_data_source.py @@ -1,7 +1,5 @@ import csv -import numpy -from force_bdss.api import BaseDataSource -from force_bdss.api import DataSourceResult +from force_bdss.api import BaseDataSource, DataValue class CSVExtractorDataSource(BaseDataSource): @@ -13,13 +11,12 @@ class CSVExtractorDataSource(BaseDataSource): continue if rowindex == model.row: - return DataSourceResult( - originator=self, - value_types=[model.cuba_type], - values=numpy.array( - parameters.values[0]+float( - row[model.column])).reshape(1, 1) - ) + return [ + DataValue( + type=model.cuba_type, + value=float(row[model.column]) + ) + ] return None return None diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py index d5b53d9..958d5c2 100644 --- a/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py +++ b/force_bdss/core_plugins/dummy/dummy_dakota/dakota_communicator.py @@ -1,7 +1,8 @@ import sys -import numpy -from force_bdss.api import DataSourceParameters, BaseMCOCommunicator +from force_bdss.api import ( + BaseMCOCommunicator, + DataValue) class DummyDakotaCommunicator(BaseMCOCommunicator): @@ -11,11 +12,10 @@ class DummyDakotaCommunicator(BaseMCOCommunicator): value_names = [p.value_name for p in model.parameters] value_types = [p.value_type for p in model.parameters] - return DataSourceParameters( - value_names=value_names, - value_types=value_types, - values=numpy.array(values) - ) + return [ + DataValue(type=type_, name=name, value=value) + for type_, name, value in zip( + value_types, value_names, values)] def send_to_mco(self, model, kpi_results): data = " ".join( 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 index cd0446b..03c36de 100644 --- 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 @@ -1,12 +1,6 @@ -from force_bdss.api import BaseDataSource, DataSourceResult +from force_bdss.api import BaseDataSource class DummyDataSource(BaseDataSource): def run(self, model, parameters): - print(parameters) - return DataSourceResult( - originator=self, - value_names=parameters.value_names, - value_types=parameters.value_types, - values=parameters.values.reshape( - parameters.values.shape + (1,))) + return parameters 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 index 0fe0077..f1a8a16 100644 --- 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 @@ -1,15 +1,8 @@ -from force_bdss.api import BaseKPICalculator, KPICalculatorResult, bundle_id +from force_bdss.api import BaseKPICalculator, bundle_id class DummyKPICalculator(BaseKPICalculator): id = bundle_id("enthought", "dummy_kpi_calculator") def run(self, model, data_source_results): - res = KPICalculatorResult( - originator=self, - value_names=data_source_results[0].value_names, - value_types=data_source_results[0].value_types, - values=data_source_results[0].values.reshape( - data_source_results[0].values.shape[:-1])) - - return res + return data_source_results diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py index 4611683..2c24d62 100644 --- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py +++ b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_calculator.py @@ -1,22 +1,18 @@ -import numpy - -from force_bdss.api import BaseKPICalculator -from force_bdss.api import KPICalculatorResult +from force_bdss.api import BaseKPICalculator, DataValue class KPIAdderCalculator(BaseKPICalculator): def run(self, model, data_source_results): sum = 0.0 - for res in data_source_results: - try: - value_idx = res.value_types.index(model.cuba_type_in) - except ValueError: - continue + for ds_res in data_source_results: + for res in ds_res: + if res.type != model.cuba_type_in: + continue - sum += res.values[value_idx].sum() + sum += res.value - return KPICalculatorResult( - originator=self, - value_types=[model.cuba_type_out], - values=numpy.array([sum]) - ) + return [ + DataValue( + type=model.cuba_type_out, + value=sum + )] diff --git a/force_bdss/mco/base_mco_communicator.py b/force_bdss/mco/base_mco_communicator.py index 4cb0f3b..073b16c 100644 --- a/force_bdss/mco/base_mco_communicator.py +++ b/force_bdss/mco/base_mco_communicator.py @@ -29,8 +29,8 @@ class BaseMCOCommunicator(ABCHasStrictTraits): The conversion is specific to the format of the communication between the MCO and its evaluator program. - Must return a single DataSourceParameters object, containing - the parameters as passed by the MCO. + Must return a list of DataValue objects, containing the data passed + by the MCO. Parameters ---------- @@ -39,9 +39,8 @@ class BaseMCOCommunicator(ABCHasStrictTraits): Returns ------- - DataSourceParameters - An instance of the DataSourceParameters with the appropriate - information filled in. + List(DataValue) + A list of the DataValues with the appropriate information filled in """ @abc.abstractmethod -- GitLab