diff --git a/force_bdss/core_plugins/dummy/dummy_plugin.py b/force_bdss/core_plugins/dummy/dummy_plugin.py index c8020e198a858cfb312d0080c56a1f31b06c1d26..766186f03a3330002830dad4c180f9098a88bfe2 100644 --- a/force_bdss/core_plugins/dummy/dummy_plugin.py +++ b/force_bdss/core_plugins/dummy/dummy_plugin.py @@ -3,6 +3,7 @@ from .dummy_notification_listener.dummy_notification_listener_factory import ( DummyNotificationListenerFactory ) from .csv_extractor.csv_extractor_factory import CSVExtractorFactory +from .power_evaluator.power_evaluator_factory import PowerEvaluatorFactory from .kpi_adder.kpi_adder_factory import KPIAdderFactory from .dummy_dakota.dakota_factory import DummyDakotaFactory from .dummy_data_source.dummy_data_source_factory import DummyDataSourceFactory @@ -16,7 +17,8 @@ class DummyPlugin(BaseExtensionPlugin): def _data_source_factories_default(self): return [DummyDataSourceFactory(self), - CSVExtractorFactory(self)] + CSVExtractorFactory(self), + PowerEvaluatorFactory(self)] def _mco_factories_default(self): return [DummyDakotaFactory(self)] diff --git a/force_bdss/core_plugins/dummy/power_evaluator/__init__.py b/force_bdss/core_plugins/dummy/power_evaluator/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_data_source.py b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_data_source.py new file mode 100644 index 0000000000000000000000000000000000000000..d8eb722ea6e3f485d3311d869a4709b2cdc5d3cb --- /dev/null +++ b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_data_source.py @@ -0,0 +1,24 @@ +import math + +from force_bdss.api import BaseDataSource, DataValue +from force_bdss.core.slot import Slot + + +class PowerEvaluatorDataSource(BaseDataSource): + def run(self, model, parameters): + x = parameters[0].value + return [ + DataValue( + type=model.cuba_type_out, + value=math.pow(x, model.power) + )] + + def slots(self, model): + return ( + ( + Slot(type=model.cuba_type_in), + ), + ( + Slot(type=model.cuba_type_out), + ) + ) diff --git a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_factory.py b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_factory.py new file mode 100644 index 0000000000000000000000000000000000000000..ebd3aacf8fcd9b6a5e229756ad64a13ce9d97087 --- /dev/null +++ b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_factory.py @@ -0,0 +1,21 @@ +from traits.api import String + +from force_bdss.api import factory_id, BaseDataSourceFactory + +from .power_evaluator_model import PowerEvaluatorModel +from .power_evaluator_data_source import PowerEvaluatorDataSource + + +class PowerEvaluatorFactory(BaseDataSourceFactory): + id = String(factory_id("enthought", "power_evaluator")) + + name = String("Power Evaluator") + + def create_model(self, model_data=None): + if model_data is None: + model_data = {} + + return PowerEvaluatorModel(self, **model_data) + + def create_data_source(self): + return PowerEvaluatorDataSource(self) diff --git a/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_model.py b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_model.py new file mode 100644 index 0000000000000000000000000000000000000000..6383bbf05183ec604f6f39b610c136a37036740c --- /dev/null +++ b/force_bdss/core_plugins/dummy/power_evaluator/power_evaluator_model.py @@ -0,0 +1,13 @@ +from traits.api import Float, String, on_trait_change + +from force_bdss.api import BaseDataSourceModel + + +class PowerEvaluatorModel(BaseDataSourceModel): + power = Float() + cuba_type_in = String() + cuba_type_out = String() + + @on_trait_change("cuba_type_in,cuba_type_out") + def _notify_changes_slots(self): + self.changes_slots = True diff --git a/force_bdss/core_plugins/dummy/power_evaluator/tests/__init__.py b/force_bdss/core_plugins/dummy/power_evaluator/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_data_source.py b/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_data_source.py new file mode 100644 index 0000000000000000000000000000000000000000..3b52ed1b6acec32764fc23a0ce06952320b45bb6 --- /dev/null +++ b/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_data_source.py @@ -0,0 +1,52 @@ +import unittest + +from force_bdss.core.data_value import DataValue +from force_bdss.core.slot import Slot +from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_data_source import PowerEvaluatorDataSource # noqa +from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_model import PowerEvaluatorModel # noqa +from force_bdss.data_sources.base_data_source_factory import \ + BaseDataSourceFactory +from force_bdss.tests import fixtures + +try: + import mock +except ImportError: + from unittest import mock + + +class TestPowerEvaluatorDataSource(unittest.TestCase): + def setUp(self): + self.factory = mock.Mock(spec=BaseDataSourceFactory) + + def test_initialization(self): + ds = PowerEvaluatorDataSource(self.factory) + self.assertEqual(ds.factory, self.factory) + + def test_run(self): + ds = PowerEvaluatorDataSource(self.factory) + model = PowerEvaluatorModel(self.factory) + model.power = 2 + mock_params = [DataValue(value=5, type="METER")] + result = ds.run(model, mock_params) + self.assertIsInstance(result, list) + self.assertEqual(len(result), 1) + self.assertIsInstance(result[0], DataValue) + self.assertEqual(result[0].value, 25) + + def test_run_with_exception(self): + ds = PowerEvaluatorDataSource(self.factory) + model = PowerEvaluatorModel(self.factory) + mock_params = [] + model.power = 3 + with self.assertRaises(IndexError): + ds.run(model, mock_params) + + def test_slots(self): + ds = PowerEvaluatorDataSource(self.factory) + model = PowerEvaluatorModel(self.factory) + slots = ds.slots(model) + self.assertEqual(len(slots), 2) + self.assertEqual(len(slots[0]), 1) + self.assertEqual(len(slots[1]), 1) + self.assertIsInstance(slots[0][0], Slot) + self.assertIsInstance(slots[1][0], Slot) diff --git a/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_factory.py b/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_factory.py new file mode 100644 index 0000000000000000000000000000000000000000..5df8c8f9e796042aaa8a8e0b8c4bd4500dfe4ea3 --- /dev/null +++ b/force_bdss/core_plugins/dummy/power_evaluator/tests/test_power_evaluator_factory.py @@ -0,0 +1,22 @@ +import unittest + +from force_bdss.core_plugins.dummy.tests.data_source_factory_test_mixin \ + import DataSourceFactoryTestMixin +from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_factory import PowerEvaluatorFactory # noqa +from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_data_source import PowerEvaluatorDataSource # noqa +from force_bdss.core_plugins.dummy.power_evaluator.power_evaluator_model import PowerEvaluatorModel # noqa + + +class TestPowerEvaluatorFactory(DataSourceFactoryTestMixin, + unittest.TestCase): + @property + def factory_class(self): + return PowerEvaluatorFactory + + @property + def model_class(self): + return PowerEvaluatorModel + + @property + def data_source_class(self): + return PowerEvaluatorDataSource