diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py index ebe24cf6bf9702bb5f1c0eb28b11c303222b5a4a..465e34a2657c2d89b4f0e17e54654f16ec0aba9a 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 55f998c49c4bfef7dfb37f93f61f3c435f00f518..30dedeeb0dbd7a72f2c09a47bee76759a4205e28 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 f2835f8fbaeb5290aa01c53271d1c253109531f8..b42cf1b7a17207188acefa7bb0192b7e81a9dbcb 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 cacf0adb3d5f11030e2bf3db661d4b730528afb3..e7bc0ebfaa80052e1043f5f6f9185859aff6856d 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 a94c6b9d4cd471d1fe87f6796b57b76fee373300..cd0446b68480517853da8be7571eaf0336c34441 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 ebebc00c4ad9e6b9b8278cbfa6978c849e68cc78..1ed7905b6de1269307a21da864c36be231492ac0 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 c0df8ae8bc4f5baaed2097fd4eed1cb489726572..0fe0077dd20c4e35ff26b73fe94c12d6fdf67b22 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 b2c567bc6852c7779a6799b2c026b2cda2995756..065361812bb5ecef475ce2b951f9f81f39e9787f 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 ab40c710bbbff3bbdd5c5a39d62b95414198fbc4..76535e51491d2cb84c297362600c27454cb05997 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 f6bbfe0de501c544cc134851f51a54e5c08b2767..4611683665384da3982d482e4ee99f783c15390b 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 ac25f1d6c6dd332f0f5a997af9a9a504b65f7490..11b053a92178485249b548e49e26716ed4f6aa5b 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 422de86f604bb803d248a86a8c9ea99ef9e432c9..d099bf3aee36b362a676e32bcce1946fef9570ca 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 8ed2556078382854920a999ce5c1bf1a8d6ed19f..d3fda63e1f3fb3be3f3dd6b2c340c60a72c23c8b 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 e4784fb31f4fd47184eb021e758443d959e03292..810b5f63805914b3b7c872d983eaaae022bbc471 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 3564a7eb423a4ea3e265b4996be184744c8b1d6f..b6994236760f5e9944f6d37e8c3c5e6a28627733 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 d251842e57df4933dadc8c41e72e869e6377213e..dc10bd41eb87e52a7e822187adbda12f27388081 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 756b70d7cf06d5cb4fe3ef329d0ee7aacab2e24e..3d83553325789e861fbb45ba242ffd1f0f8b70c2 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 938e7de719990cf5e672c1c350adbf36bfca2a31..7bedd6a3b686200f02c50cb513358a4583dd818f 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 512f51fdfe685aaf58296213548ec1a0b12c48cc..548383573691a320db5ec29c4664a62037a9be53 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 30dc60e7f8a5d4e6ebbc7598b14a03f247b61f3c..f3cc87d981890778075ebd95057e3c09ae5c49dd 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 3e0c19947890d7b8c2d2ba4c1d87dabb354aa4a4..69d4657ae4423ec23c16987eca49fb44b079864d 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 cd253ff428620b331cdd87ee75953861a573c0a0..fc173521607f0bc18ded75949a0dce8a48472616 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')