From f067e8c8b8e348f449e65d58208e99823842ccea Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Thu, 27 Jul 2017 17:45:06 +0100 Subject: [PATCH] Fixed related classes KPI and DS --- force_bdss/core_evaluation_driver.py | 10 ++++------ .../dummy/csv_extractor/csv_extractor_bundle.py | 4 ++-- .../csv_extractor/csv_extractor_data_source.py | 12 ++++++------ .../dummy_dakota/tests/test_dakota_communicator.py | 14 +++++++------- .../dummy/dummy_data_source/dummy_data_source.py | 2 +- .../dummy_data_source/dummy_data_source_bundle.py | 4 ++-- .../dummy_kpi_calculator/dummy_kpi_calculator.py | 2 +- .../dummy_kpi_calculator_bundle.py | 4 ++-- .../dummy/kpi_adder/kpi_adder_bundle.py | 4 ++-- .../dummy/kpi_adder/kpi_adder_calculator.py | 6 +++--- force_bdss/data_sources/base_data_source.py | 12 ++---------- force_bdss/data_sources/base_data_source_bundle.py | 2 +- force_bdss/data_sources/i_data_source_bundle.py | 2 +- .../data_sources/tests/test_base_data_source.py | 9 +-------- .../tests/test_base_data_source_bundle.py | 9 +++++++-- force_bdss/kpi/base_kpi_calculator.py | 12 ++---------- force_bdss/kpi/base_kpi_calculator_bundle.py | 2 +- force_bdss/kpi/i_kpi_calculator_bundle.py | 6 ++++-- force_bdss/kpi/tests/test_base_kpi_calculator.py | 8 +------- .../kpi/tests/test_base_kpi_calculator_bundle.py | 10 ++++++++-- force_bdss/mco/i_mco_bundle.py | 5 ++++- force_bdss/mco/tests/test_base_mco_bundle.py | 13 ++++++++++--- 22 files changed, 72 insertions(+), 80 deletions(-) diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py index ebe24cf..465e34a 100644 --- a/force_bdss/core_evaluation_driver.py +++ b/force_bdss/core_evaluation_driver.py @@ -32,15 +32,13 @@ class CoreEvaluationDriver(BaseCoreDriver): ds_results = [] for ds_model in workflow.data_sources: ds_bundle = ds_model.bundle - data_source = ds_bundle.create_data_source(self.application, - ds_model) - ds_results.append(data_source.run(parameters)) + data_source = ds_bundle.create_data_source() + ds_results.append(data_source.run(ds_model, parameters)) kpi_results = [] for kpic_model in workflow.kpi_calculators: kpic_bundle = kpic_model.bundle - kpi_calculator = kpic_bundle.create_kpi_calculator( - self.application, kpic_model) - kpi_results.append(kpi_calculator.run(ds_results)) + kpi_calculator = kpic_bundle.create_kpi_calculator() + kpi_results.append(kpi_calculator.run(kpic_model, ds_results)) mco_communicator.send_to_mco(mco_model, kpi_results) diff --git a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py index 55f998c..30dedee 100644 --- a/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py +++ b/force_bdss/core_plugins/dummy/csv_extractor/csv_extractor_bundle.py @@ -17,5 +17,5 @@ class CSVExtractorBundle(BaseDataSourceBundle): return CSVExtractorModel(self, **model_data) - def create_data_source(self, application, model): - return CSVExtractorDataSource(self, application, model) + def create_data_source(self): + return CSVExtractorDataSource(self) 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 f2835f8..b42cf1b 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 @@ -5,20 +5,20 @@ from force_bdss.api import DataSourceResult class CSVExtractorDataSource(BaseDataSource): - def run(self, parameters): - with open(self.model.filename) as csvfile: + def run(self, model, parameters): + with open(model.filename) as csvfile: reader = csv.reader(csvfile) for rowindex, row in enumerate(reader): - if rowindex < self.model.row: + if rowindex < model.row: continue - if rowindex == self.model.row: + if rowindex == model.row: return DataSourceResult( originator=self, - value_types=[self.model.cuba_type], + value_types=[model.cuba_type], values=numpy.array( parameters.values[0]+float( - row[self.model.column])).reshape(1, 1) + row[model.column])).reshape(1, 1) ) return None diff --git a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py index cacf0ad..e7bc0eb 100644 --- a/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py +++ b/force_bdss/core_plugins/dummy/dummy_dakota/tests/test_dakota_communicator.py @@ -1,6 +1,11 @@ import unittest -from force_bdss.bdss_application import BDSSApplication +try: + import mock +except ImportError: + from unittest import mock + +from envisage.plugin import Plugin from force_bdss.core_plugins.dummy.dummy_dakota.dakota_bundle import ( DummyDakotaBundle) @@ -10,15 +15,10 @@ from force_bdss.mco.parameters.base_mco_parameter_factory import \ BaseMCOParameterFactory from force_bdss.mco.parameters.core_mco_parameters import RangedMCOParameter -try: - import mock -except ImportError: - from unittest import mock - class TestDakotaCommunicator(unittest.TestCase): def test_receive_from_mco(self): - bundle = DummyDakotaBundle() + bundle = DummyDakotaBundle(mock.Mock(spec=Plugin)) mock_parameter_factory = mock.Mock(spec=BaseMCOParameterFactory) model = bundle.create_model() model.parameters = [ 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 a94c6b9..cd0446b 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 @@ -2,7 +2,7 @@ from force_bdss.api import BaseDataSource, DataSourceResult class DummyDataSource(BaseDataSource): - def run(self, parameters): + def run(self, model, parameters): print(parameters) return DataSourceResult( originator=self, 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 index ebebc00..1ed7905 100644 --- 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 @@ -12,5 +12,5 @@ class DummyDataSourceBundle(BaseDataSourceBundle): return DummyDataSourceModel(self, **model_data) - def create_data_source(self, application, model): - return DummyDataSource(self, application, model) + def create_data_source(self): + return DummyDataSource(self) 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 c0df8ae..0fe0077 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 @@ -4,7 +4,7 @@ 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): + def run(self, model, data_source_results): res = KPICalculatorResult( originator=self, value_names=data_source_results[0].value_names, 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 index b2c567b..0653618 100644 --- 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 @@ -15,5 +15,5 @@ class DummyKPICalculatorBundle(BaseKPICalculatorBundle): return DummyKPICalculatorModel(self, **model_data) - def create_kpi_calculator(self, application, model): - return DummyKPICalculator(self, application, model) + def create_kpi_calculator(self): + return DummyKPICalculator(self) diff --git a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py index ab40c71..76535e5 100644 --- a/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py +++ b/force_bdss/core_plugins/dummy/kpi_adder/kpi_adder_bundle.py @@ -17,5 +17,5 @@ class KPIAdderBundle(BaseKPICalculatorBundle): return KPIAdderModel(self, **model_data) - def create_kpi_calculator(self, application, model): - return KPIAdderCalculator(self, application, model) + def create_kpi_calculator(self): + return KPIAdderCalculator(self) 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 f6bbfe0..4611683 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 @@ -5,11 +5,11 @@ from force_bdss.api import KPICalculatorResult class KPIAdderCalculator(BaseKPICalculator): - def run(self, data_source_results): + def run(self, model, data_source_results): sum = 0.0 for res in data_source_results: try: - value_idx = res.value_types.index(self.model.cuba_type_in) + value_idx = res.value_types.index(model.cuba_type_in) except ValueError: continue @@ -17,6 +17,6 @@ class KPIAdderCalculator(BaseKPICalculator): return KPICalculatorResult( originator=self, - value_types=[self.model.cuba_type_out], + value_types=[model.cuba_type_out], values=numpy.array([sum]) ) diff --git a/force_bdss/data_sources/base_data_source.py b/force_bdss/data_sources/base_data_source.py index ac25f1d..11b053a 100644 --- a/force_bdss/data_sources/base_data_source.py +++ b/force_bdss/data_sources/base_data_source.py @@ -1,8 +1,6 @@ from traits.api import ABCHasStrictTraits, Instance import abc -from .base_data_source_model import BaseDataSourceModel -from ..bdss_application import BDSSApplication from ..data_sources.i_data_source_bundle import IDataSourceBundle @@ -14,18 +12,12 @@ class BaseDataSource(ABCHasStrictTraits): """ #: A reference to the bundle bundle = Instance(IDataSourceBundle) - #: A reference to the application - application = Instance(BDSSApplication) - #: A reference to the model class - model = Instance(BaseDataSourceModel) - def __init__(self, bundle, application, model, *args, **kwargs): + def __init__(self, bundle, *args, **kwargs): self.bundle = bundle - self.application = application - self.model = model super(BaseDataSource, self).__init__(*args, **kwargs) @abc.abstractmethod - def run(self, parameters): + def run(self, model, parameters): """Executes the data source evaluation/fetching and returns the list of results as a DataSourceResult instance.""" diff --git a/force_bdss/data_sources/base_data_source_bundle.py b/force_bdss/data_sources/base_data_source_bundle.py index 422de86..d099bf3 100644 --- a/force_bdss/data_sources/base_data_source_bundle.py +++ b/force_bdss/data_sources/base_data_source_bundle.py @@ -26,7 +26,7 @@ class BaseDataSourceBundle(ABCHasStrictTraits): super(BaseDataSourceBundle, self).__init__(*args, **kwargs) @abc.abstractmethod - def create_data_source(self, application, model): + def create_data_source(self): """Factory method. Must return the bundle-specific BaseDataSource instance. diff --git a/force_bdss/data_sources/i_data_source_bundle.py b/force_bdss/data_sources/i_data_source_bundle.py index 8ed2556..d3fda63 100644 --- a/force_bdss/data_sources/i_data_source_bundle.py +++ b/force_bdss/data_sources/i_data_source_bundle.py @@ -9,7 +9,7 @@ class IDataSourceBundle(Interface): #: A human readable name of the bundle name = String() - def create_data_source(self, application, model): + def create_data_source(self): """Factory method. Must return the bundle-specific BaseDataSource instance. """ diff --git a/force_bdss/data_sources/tests/test_base_data_source.py b/force_bdss/data_sources/tests/test_base_data_source.py index e4784fb..810b5f6 100644 --- a/force_bdss/data_sources/tests/test_base_data_source.py +++ b/force_bdss/data_sources/tests/test_base_data_source.py @@ -1,7 +1,6 @@ import unittest from force_bdss.data_sources.base_data_source import BaseDataSource -from force_bdss.data_sources.base_data_source_model import BaseDataSourceModel from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle try: @@ -9,8 +8,6 @@ try: except ImportError: from unittest import mock -from force_bdss.bdss_application import BDSSApplication - class DummyDataSource(BaseDataSource): def run(self, *args, **kwargs): @@ -20,10 +17,6 @@ class DummyDataSource(BaseDataSource): class TestBaseDataSource(unittest.TestCase): def test_initialization(self): bundle = mock.Mock(spec=IDataSourceBundle) - application = mock.Mock(spec=BDSSApplication) - model = mock.Mock(spec=BaseDataSourceModel) - ds = DummyDataSource(bundle, application, model) + ds = DummyDataSource(bundle) self.assertEqual(ds.bundle, bundle) - self.assertEqual(ds.application, application) - self.assertEqual(ds.model, model) diff --git a/force_bdss/data_sources/tests/test_base_data_source_bundle.py b/force_bdss/data_sources/tests/test_base_data_source_bundle.py index 3564a7e..b699423 100644 --- a/force_bdss/data_sources/tests/test_base_data_source_bundle.py +++ b/force_bdss/data_sources/tests/test_base_data_source_bundle.py @@ -1,5 +1,10 @@ import unittest +try: + import mock +except ImportError: + from unittest import mock +from envisage.plugin import Plugin from force_bdss.data_sources.base_data_source_bundle import \ BaseDataSourceBundle @@ -9,7 +14,7 @@ class DummyDataSourceBundle(BaseDataSourceBundle): name = "bar" - def create_data_source(self, application, model): + def create_data_source(self): pass def create_model(self, model_data=None): @@ -18,6 +23,6 @@ class DummyDataSourceBundle(BaseDataSourceBundle): class TestBaseDataSourceBundle(unittest.TestCase): def test_initialization(self): - bundle = DummyDataSourceBundle() + bundle = DummyDataSourceBundle(mock.Mock(spec=Plugin)) self.assertEqual(bundle.id, 'foo') self.assertEqual(bundle.name, 'bar') diff --git a/force_bdss/kpi/base_kpi_calculator.py b/force_bdss/kpi/base_kpi_calculator.py index d251842..dc10bd4 100644 --- a/force_bdss/kpi/base_kpi_calculator.py +++ b/force_bdss/kpi/base_kpi_calculator.py @@ -2,8 +2,6 @@ import abc from traits.api import ABCHasStrictTraits, Instance -from ..bdss_application import BDSSApplication -from .base_kpi_calculator_model import BaseKPICalculatorModel from .i_kpi_calculator_bundle import IKPICalculatorBundle @@ -14,19 +12,13 @@ class BaseKPICalculator(ABCHasStrictTraits): """ #: A reference to the bundle bundle = Instance(IKPICalculatorBundle) - #: A reference to the application - application = Instance(BDSSApplication) - #: A reference to the model class - model = Instance(BaseKPICalculatorModel) - def __init__(self, bundle, application, model, *args, **kwargs): + def __init__(self, bundle, *args, **kwargs): self.bundle = bundle - self.application = application - self.model = model super(BaseKPICalculator, self).__init__(*args, **kwargs) @abc.abstractmethod - def run(self, data_source_results): + def run(self, model, data_source_results): """ Executes the KPI evaluation and returns the list of results. Reimplement this method in your specific KPI calculator. diff --git a/force_bdss/kpi/base_kpi_calculator_bundle.py b/force_bdss/kpi/base_kpi_calculator_bundle.py index 756b70d..3d83553 100644 --- a/force_bdss/kpi/base_kpi_calculator_bundle.py +++ b/force_bdss/kpi/base_kpi_calculator_bundle.py @@ -27,7 +27,7 @@ class BaseKPICalculatorBundle(ABCHasStrictTraits): super(BaseKPICalculatorBundle, self).__init__(*args, **kwargs) @abc.abstractmethod - def create_kpi_calculator(self, application, model): + def create_kpi_calculator(self): """Factory method. Creates and returns an instance of a KPI Calculator, associated to the given application and model. diff --git a/force_bdss/kpi/i_kpi_calculator_bundle.py b/force_bdss/kpi/i_kpi_calculator_bundle.py index 938e7de..7bedd6a 100644 --- a/force_bdss/kpi/i_kpi_calculator_bundle.py +++ b/force_bdss/kpi/i_kpi_calculator_bundle.py @@ -1,4 +1,5 @@ -from traits.api import Interface, String +from traits.api import Interface, String, Instance +from envisage.plugin import Plugin class IKPICalculatorBundle(Interface): @@ -8,7 +9,8 @@ class IKPICalculatorBundle(Interface): name = String() - def create_kpi_calculator(self, application, model): + plugin = Instance(Plugin) + def create_kpi_calculator(self): pass def create_model(self, model_data=None): diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator.py b/force_bdss/kpi/tests/test_base_kpi_calculator.py index 512f51f..5483835 100644 --- a/force_bdss/kpi/tests/test_base_kpi_calculator.py +++ b/force_bdss/kpi/tests/test_base_kpi_calculator.py @@ -4,8 +4,6 @@ try: except ImportError: from unittest import mock -from force_bdss.bdss_application import BDSSApplication -from force_bdss.kpi.base_kpi_calculator_model import BaseKPICalculatorModel from force_bdss.kpi.base_kpi_calculator import BaseKPICalculator from force_bdss.kpi.i_kpi_calculator_bundle import IKPICalculatorBundle @@ -18,10 +16,6 @@ class DummyKPICalculator(BaseKPICalculator): class TestBaseKPICalculator(unittest.TestCase): def test_initialization(self): bundle = mock.Mock(spec=IKPICalculatorBundle) - application = mock.Mock(spec=BDSSApplication) - model = mock.Mock(spec=BaseKPICalculatorModel) - kpic = DummyKPICalculator(bundle, application, model) + kpic = DummyKPICalculator(bundle) self.assertEqual(kpic.bundle, bundle) - self.assertEqual(kpic.application, application) - self.assertEqual(kpic.model, model) diff --git a/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py b/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py index 30dc60e..f3cc87d 100644 --- a/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py +++ b/force_bdss/kpi/tests/test_base_kpi_calculator_bundle.py @@ -1,4 +1,10 @@ import unittest +from envisage.plugin import Plugin + +try: + import mock +except ImportError: + from unittest import mock from force_bdss.kpi.base_kpi_calculator_bundle import \ BaseKPICalculatorBundle @@ -9,7 +15,7 @@ class DummyKPICalculatorBundle(BaseKPICalculatorBundle): name = "bar" - def create_kpi_calculator(self, application, model): + def create_kpi_calculator(self): pass def create_model(self, model_data=None): @@ -18,6 +24,6 @@ class DummyKPICalculatorBundle(BaseKPICalculatorBundle): class TestBaseKPICalculatorBundle(unittest.TestCase): def test_initialization(self): - bundle = DummyKPICalculatorBundle() + bundle = DummyKPICalculatorBundle(mock.Mock(spec=Plugin)) self.assertEqual(bundle.id, 'foo') self.assertEqual(bundle.name, 'bar') diff --git a/force_bdss/mco/i_mco_bundle.py b/force_bdss/mco/i_mco_bundle.py index 3e0c199..69d4657 100644 --- a/force_bdss/mco/i_mco_bundle.py +++ b/force_bdss/mco/i_mco_bundle.py @@ -1,4 +1,5 @@ -from traits.api import Interface, String +from traits.api import Interface, String, Instance +from envisage.plugin import Plugin class IMCOBundle(Interface): @@ -9,6 +10,8 @@ class IMCOBundle(Interface): name = String() + plugin = Instance(Plugin) + def create_optimizer(self): pass diff --git a/force_bdss/mco/tests/test_base_mco_bundle.py b/force_bdss/mco/tests/test_base_mco_bundle.py index cd253ff..fc17352 100644 --- a/force_bdss/mco/tests/test_base_mco_bundle.py +++ b/force_bdss/mco/tests/test_base_mco_bundle.py @@ -1,5 +1,12 @@ import unittest +try: + import mock +except ImportError: + from unittest import mock + +from envisage.plugin import Plugin + from force_bdss.mco.base_mco_bundle import BaseMCOBundle @@ -8,18 +15,18 @@ class DummyMCOBundle(BaseMCOBundle): name = "bar" - def create_optimizer(self, application, model): + def create_optimizer(self): pass def create_model(self, model_data=None): pass - def create_communicator(self, application, model): + def create_communicator(self): pass class TestBaseMCOBundle(unittest.TestCase): def test_initialization(self): - bundle = DummyMCOBundle() + bundle = DummyMCOBundle(mock.Mock(spec=Plugin)) self.assertEqual(bundle.id, 'foo') self.assertEqual(bundle.name, 'bar') -- GitLab