From db1c46287ba344fed06f03bce6483c1669389d27 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Mon, 10 Jul 2017 18:22:21 +0100 Subject: [PATCH] Creates a first trivial prototype using envisage --- README.md | 8 ++++++ braindump/main.py | 2 +- {force => force_bdss}/__init__.py | 0 force_bdss/application.py | 25 +++++++++++++++++ .../basic_key_performance_calculator.py | 9 +++++++ force_bdss/basic_multi_criteria_optimizer.py | 9 +++++++ force_bdss/i_key_performance_calculator.py | 6 +++++ force_bdss/i_multi_criteria_optimizers.py | 6 +++++ .../key_performance_calculators_plugin.py | 19 +++++++++++++ .../multi_criteria_optimizers_plugin.py | 19 +++++++++++++ force_bdss/workflow_plugin.py | 27 +++++++++++++++++++ setup.py | 15 +++++++++++ 12 files changed, 144 insertions(+), 1 deletion(-) rename {force => force_bdss}/__init__.py (100%) create mode 100644 force_bdss/application.py create mode 100644 force_bdss/basic_key_performance_calculator.py create mode 100644 force_bdss/basic_multi_criteria_optimizer.py create mode 100644 force_bdss/i_key_performance_calculator.py create mode 100644 force_bdss/i_multi_criteria_optimizers.py create mode 100644 force_bdss/key_performance_calculators_plugin.py create mode 100644 force_bdss/multi_criteria_optimizers_plugin.py create mode 100644 force_bdss/workflow_plugin.py diff --git a/README.md b/README.md index e69de29..68e6a40 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,8 @@ +FORCE BDSS +---------- + +This repository contains the implementation of the Business Decision System. It is implemented +under the FORCE project (Horizon 2020/NMBP-23-2016/721027). + + + diff --git a/braindump/main.py b/braindump/main.py index cbac201..a61d6a0 100644 --- a/braindump/main.py +++ b/braindump/main.py @@ -1,4 +1,4 @@ -from force import * +from force_bdss import * wf=Workflow() wf.set_mco(Dakota()) diff --git a/force/__init__.py b/force_bdss/__init__.py similarity index 100% rename from force/__init__.py rename to force_bdss/__init__.py diff --git a/force_bdss/application.py b/force_bdss/application.py new file mode 100644 index 0000000..d0fef51 --- /dev/null +++ b/force_bdss/application.py @@ -0,0 +1,25 @@ +# Enthought library imports. +from envisage.api import Application + + +# Application entry point. +from force_bdss.multi_criteria_optimizers_plugin import \ + MultiCriteriaOptimizersPlugin +from force_bdss.workflow_plugin import WorkflowPlugin +from force_bdss.key_performance_calculators_plugin import \ + KeyPerformanceCalculatorsPlugin + + +def run(): + + application = Application( + id='force', + plugins=[ + WorkflowPlugin(), + MultiCriteriaOptimizersPlugin(), + KeyPerformanceCalculatorsPlugin(), + ] + ) + + # Run it! + application.run() diff --git a/force_bdss/basic_key_performance_calculator.py b/force_bdss/basic_key_performance_calculator.py new file mode 100644 index 0000000..30d8a76 --- /dev/null +++ b/force_bdss/basic_key_performance_calculator.py @@ -0,0 +1,9 @@ +from traits.api import provides, HasStrictTraits + +from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator + + +@provides(IKeyPerformanceCalculator) +class BasicKeyPerformanceCalculator(HasStrictTraits): + def run(self): + print("Computing basic key performance indicator") diff --git a/force_bdss/basic_multi_criteria_optimizer.py b/force_bdss/basic_multi_criteria_optimizer.py new file mode 100644 index 0000000..740c6aa --- /dev/null +++ b/force_bdss/basic_multi_criteria_optimizer.py @@ -0,0 +1,9 @@ +from traits.api import provides, HasStrictTraits + +from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer + + +@provides(IMultiCriteriaOptimizer) +class BasicMultiCriteriaOptimizer(HasStrictTraits): + def run(self): + print("Basic multicriteria optimizer in action") diff --git a/force_bdss/i_key_performance_calculator.py b/force_bdss/i_key_performance_calculator.py new file mode 100644 index 0000000..8ad12ca --- /dev/null +++ b/force_bdss/i_key_performance_calculator.py @@ -0,0 +1,6 @@ +from traits.api import Interface + + +class IKeyPerformanceCalculator(Interface): + def run(self): + pass diff --git a/force_bdss/i_multi_criteria_optimizers.py b/force_bdss/i_multi_criteria_optimizers.py new file mode 100644 index 0000000..a04bf6b --- /dev/null +++ b/force_bdss/i_multi_criteria_optimizers.py @@ -0,0 +1,6 @@ +from traits.api import Interface + + +class IMultiCriteriaOptimizer(Interface): + def run(self): + pass diff --git a/force_bdss/key_performance_calculators_plugin.py b/force_bdss/key_performance_calculators_plugin.py new file mode 100644 index 0000000..082af87 --- /dev/null +++ b/force_bdss/key_performance_calculators_plugin.py @@ -0,0 +1,19 @@ +from traits.api import List +from envisage.plugin import Plugin + +from force_bdss.basic_key_performance_calculator import \ + BasicKeyPerformanceCalculator +from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator + + +class KeyPerformanceCalculatorsPlugin(Plugin): + + id = "force_bdss.key_performance_calculators_plugin" + + key_performance_calculators = List( + IKeyPerformanceCalculator, + contributes_to='force_bdss.key_performance_calculators' + ) + + def _key_performance_calculators_default(self): + return [BasicKeyPerformanceCalculator()] diff --git a/force_bdss/multi_criteria_optimizers_plugin.py b/force_bdss/multi_criteria_optimizers_plugin.py new file mode 100644 index 0000000..a815cd1 --- /dev/null +++ b/force_bdss/multi_criteria_optimizers_plugin.py @@ -0,0 +1,19 @@ +from traits.api import List +from envisage.plugin import Plugin + +from force_bdss.basic_multi_criteria_optimizer import \ + BasicMultiCriteriaOptimizer +from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer + + +class MultiCriteriaOptimizersPlugin(Plugin): + + id = "force_bdss.multi_criteria_optimizers_plugin" + + multi_criteria_optimizers = List( + IMultiCriteriaOptimizer, + contributes_to='force_bdss.multi_criteria_optimizers' + ) + + def _multi_criteria_optimizers_default(self): + return [BasicMultiCriteriaOptimizer()] diff --git a/force_bdss/workflow_plugin.py b/force_bdss/workflow_plugin.py new file mode 100644 index 0000000..75e898c --- /dev/null +++ b/force_bdss/workflow_plugin.py @@ -0,0 +1,27 @@ +from envisage.extension_point import ExtensionPoint +from traits.api import List +from envisage.plugin import Plugin +from traits.api import on_trait_change + +from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator +from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer + + +class WorkflowPlugin(Plugin): + + id = "force_bdss.workflow_plugin" + + key_performance_calculators = ExtensionPoint( + List(IKeyPerformanceCalculator), + id='force_bdss.key_performance_calculators') + + multi_criteria_optimizers = ExtensionPoint( + List(IMultiCriteriaOptimizer), + id='force_bdss.multi_criteria_optimizers') + + @on_trait_change("application:started") + def application_started(self): + for mco in self.multi_criteria_optimizers: + mco.run() + for kpc in self.key_performance_calculators: + kpc.run() diff --git a/setup.py b/setup.py index e69de29..dcce066 100644 --- a/setup.py +++ b/setup.py @@ -0,0 +1,15 @@ +from setuptools import setup + +VERSION="0.1.0.dev0" + +setup( + name="force_bdss", + version=VERSION, + entry_points={ + 'console_scripts': [ + 'force_bdss = force_bdss.application:run', + ]}, + install_requires=[ + "envisage >= 4.6.0" + ] +) -- GitLab