From ca660a08f8b7a381a73b824d3f45411436cfd0b9 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 11 Nov 2022 10:27:37 -0800 Subject: [PATCH 01/88] remove requests requirement --- setup.py | 1 - 1 file changed, 1 deletion(-) diff --git a/setup.py b/setup.py index 69e60f32..4949ab7d 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,6 @@ long_description_content_type="text/markdown", include_package_data=True, install_requires=[ - "requests", "pandas", "numpy", "cvxpy", From ede9fe17bd5b08598085f47c47fae4ebb65bb4ff Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 11 Nov 2022 10:45:28 -0800 Subject: [PATCH 02/88] rename nonmodular microgrid tests --- tests/{test_microgrid.py => test_nonmodular_microgrid.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/{test_microgrid.py => test_nonmodular_microgrid.py} (97%) diff --git a/tests/test_microgrid.py b/tests/test_nonmodular_microgrid.py similarity index 97% rename from tests/test_microgrid.py rename to tests/test_nonmodular_microgrid.py index 7fed044b..a99fcb63 100644 --- a/tests/test_microgrid.py +++ b/tests/test_nonmodular_microgrid.py @@ -13,7 +13,7 @@ from pymgrid.MicrogridGenerator import MicrogridGenerator -class TestMicrogrid(unittest.TestCase): +class TestNonmodularMicrogrid(unittest.TestCase): def setUp(self): mgen = MicrogridGenerator() self.mg = mgen._create_microgrid() From 4bd7d47e60f1a840d1fed2afd501c6776d252658 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 11 Nov 2022 10:58:35 -0800 Subject: [PATCH 03/88] store pv modules in lower case --- .../data/scenario/pymgrid25/microgrid_0/microgrid_0.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_1/microgrid_1.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_10/microgrid_10.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_11/microgrid_11.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_12/microgrid_12.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_13/microgrid_13.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_14/microgrid_14.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_15/microgrid_15.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_16/microgrid_16.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_17/microgrid_17.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_18/microgrid_18.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_19/microgrid_19.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_2/microgrid_2.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_20/microgrid_20.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_21/microgrid_21.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_22/microgrid_22.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_23/microgrid_23.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_24/microgrid_24.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_3/microgrid_3.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_4/microgrid_4.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_5/microgrid_5.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_6/microgrid_6.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_7/microgrid_7.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_8/microgrid_8.yaml | 4 ++-- .../data/scenario/pymgrid25/microgrid_9/microgrid_9.yaml | 4 ++-- 25 files changed, 50 insertions(+), 50 deletions(-) diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_0/microgrid_0.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_0/microgrid_0.yaml index 0136b865..1470df57 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_0/microgrid_0.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_0/microgrid_0.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_1/microgrid_1.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_1/microgrid_1.yaml index 2a2edfe1..40c16024 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_1/microgrid_1.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_1/microgrid_1.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_10/microgrid_10.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_10/microgrid_10.yaml index 363898e4..9c75a804 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_10/microgrid_10.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_10/microgrid_10.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_11/microgrid_11.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_11/microgrid_11.yaml index 2f692197..d67195c1 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_11/microgrid_11.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_11/microgrid_11.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_12/microgrid_12.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_12/microgrid_12.yaml index 346c06c8..80d9159f 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_12/microgrid_12.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_12/microgrid_12.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_13/microgrid_13.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_13/microgrid_13.yaml index 94450a98..e98b22f9 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_13/microgrid_13.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_13/microgrid_13.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_14/microgrid_14.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_14/microgrid_14.yaml index d935b57c..748e53a8 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_14/microgrid_14.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_14/microgrid_14.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_15/microgrid_15.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_15/microgrid_15.yaml index 65ea3c19..713be126 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_15/microgrid_15.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_15/microgrid_15.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 26153 soc: 1.0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_16/microgrid_16.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_16/microgrid_16.yaml index ac5714be..f4db7726 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_16/microgrid_16.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_16/microgrid_16.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_17/microgrid_17.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_17/microgrid_17.yaml index c642fb0b..b4f7b7c3 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_17/microgrid_17.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_17/microgrid_17.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 7727.200000000001 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_18/microgrid_18.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_18/microgrid_18.yaml index 8a64cbaf..0a8a061f 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_18/microgrid_18.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_18/microgrid_18.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_19/microgrid_19.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_19/microgrid_19.yaml index 698996e8..aca3fcb7 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_19/microgrid_19.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_19/microgrid_19.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 501.20000000000005 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_2/microgrid_2.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_2/microgrid_2.yaml index e8010a0a..3c5ceb1d 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_2/microgrid_2.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_2/microgrid_2.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 13223.2 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_20/microgrid_20.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_20/microgrid_20.yaml index 01aa31e3..1edeec06 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_20/microgrid_20.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_20/microgrid_20.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 25953.0 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_21/microgrid_21.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_21/microgrid_21.yaml index 2e4c0ff9..8c89e8cb 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_21/microgrid_21.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_21/microgrid_21.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 34138.8 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_22/microgrid_22.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_22/microgrid_22.yaml index 119ea13a..2acdd4e8 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_22/microgrid_22.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_22/microgrid_22.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_23/microgrid_23.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_23/microgrid_23.yaml index a25696db..aeaa966a 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_23/microgrid_23.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_23/microgrid_23.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 2858.8 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_24/microgrid_24.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_24/microgrid_24.yaml index fb73e0da..4b351952 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_24/microgrid_24.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_24/microgrid_24.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_3/microgrid_3.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_3/microgrid_3.yaml index bf2bcde0..aec1cd18 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_3/microgrid_3.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_3/microgrid_3.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 20490.0 soc: 0.2 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_4/microgrid_4.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_4/microgrid_4.yaml index 502b6243..b9dea4db 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_4/microgrid_4.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_4/microgrid_4.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_5/microgrid_5.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_5/microgrid_5.yaml index dbbdb575..431bd542 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_5/microgrid_5.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_5/microgrid_5.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 57581 soc: 1.0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_6/microgrid_6.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_6/microgrid_6.yaml index 6807b9d9..2733ff90 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_6/microgrid_6.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_6/microgrid_6.yaml @@ -54,7 +54,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -65,7 +65,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_7/microgrid_7.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_7/microgrid_7.yaml index 645d0273..bf869979 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_7/microgrid_7.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_7/microgrid_7.yaml @@ -61,7 +61,7 @@ modules: _current_step: 0 current_charge: 19334 soc: 1.0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -72,7 +72,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_8/microgrid_8.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_8/microgrid_8.yaml index b65272cf..1bfc6df5 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_8/microgrid_8.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_8/microgrid_8.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 diff --git a/src/pymgrid/data/scenario/pymgrid25/microgrid_9/microgrid_9.yaml b/src/pymgrid/data/scenario/pymgrid25/microgrid_9/microgrid_9.yaml index 4985764f..56685ed0 100644 --- a/src/pymgrid/data/scenario/pymgrid25/microgrid_9/microgrid_9.yaml +++ b/src/pymgrid/data/scenario/pymgrid25/microgrid_9/microgrid_9.yaml @@ -78,7 +78,7 @@ modules: - 0 state: _current_step: 0 -- - PV +- - pv - !RenewableModule cls_params: forecast_horizon: 23 @@ -89,7 +89,7 @@ modules: time_series: !NDArray 'data/cls_params/RenewableModule/time_series.csv.gz' log: null name: - - PV + - pv - 0 state: _current_step: 0 From 56a1b7ef704ff4fa29b8e1c582061910bde61241 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 11 Nov 2022 10:59:08 -0800 Subject: [PATCH 04/88] update from_scenario for new serialization --- src/pymgrid/microgrid/envs/base/base.py | 2 +- .../microgrid/modular_microgrid/modular_microgrid.py | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/pymgrid/microgrid/envs/base/base.py b/src/pymgrid/microgrid/envs/base/base.py index ae5d35af..a687c649 100644 --- a/src/pymgrid/microgrid/envs/base/base.py +++ b/src/pymgrid/microgrid/envs/base/base.py @@ -15,7 +15,7 @@ def __new__(cls, modules, *args, **kwargs): elif "scenario" in kwargs or "microgrid_number" in kwargs: scenario = kwargs.get("scenario", "pymgrid25") microgrid_number = kwargs.get("microgrid_number", 0) - instance = cls.from_scenario(scenario=scenario, microgrid_number=microgrid_number) + instance = cls.from_scenario(microgrid_number=microgrid_number) cls.__init__ = skip_init(cls, cls.__init__) return instance diff --git a/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py index a2cdbe36..8a5b942d 100644 --- a/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py +++ b/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py @@ -288,13 +288,11 @@ def to_nonmodular(self): return to_nonmodular(self) @classmethod - def from_scenario(cls, microgrid_number=0, scenario="pymgrid25"): - # TODO use better serialization - import pickle + def from_scenario(cls, microgrid_number=0): from pymgrid import PROJECT_PATH - with open(PROJECT_PATH / f"data/scenario/{scenario}.pkl", "rb") as f: - mgen = pickle.load(f) - return cls.from_nonmodular(mgen.microgrids[microgrid_number]) + n = microgrid_number + with open(PROJECT_PATH / f"data/scenario/pymgrid25/microgrid_{n}/microgrid_{n}.yaml", "r") as f: + return cls.load(f) def __getnewargs__(self): return (self.module_tuples(), ) From edf033d14b709b0eccadf070dd2ee74d7936f8ec Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 11 Nov 2022 10:59:28 -0800 Subject: [PATCH 05/88] add from_scenario microgrid tests --- tests/microgrid/test_microgrid.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/microgrid/test_microgrid.py diff --git a/tests/microgrid/test_microgrid.py b/tests/microgrid/test_microgrid.py new file mode 100644 index 00000000..666dd715 --- /dev/null +++ b/tests/microgrid/test_microgrid.py @@ -0,0 +1,17 @@ +import numpy as np + +from pymgrid import Microgrid + +from tests.helpers.modular_microgrid import get_modular_microgrid +from tests.helpers.test_case import TestCase + + +class TestMicrogrid(TestCase): + def test_from_scenario(self): + for j in range(25): + with self.subTest(microgrid_number=j): + microgrid = Microgrid.from_scenario(j) + self.assertTrue(hasattr(microgrid, "load")) + self.assertTrue(hasattr(microgrid, "pv")) + self.assertTrue(hasattr(microgrid, "battery")) + self.assertTrue(hasattr(microgrid, "grid") or hasattr(microgrid, "genset")) From 762934f6374738a97c6d5039f3c6f5908cfb84f6 Mon Sep 17 00:00:00 2001 From: ahalev Date: Mon, 14 Nov 2022 17:55:49 -0800 Subject: [PATCH 06/88] bug fix: correctly deserialize envs --- src/pymgrid/microgrid/envs/base/base.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pymgrid/microgrid/envs/base/base.py b/src/pymgrid/microgrid/envs/base/base.py index a687c649..cd1ec185 100644 --- a/src/pymgrid/microgrid/envs/base/base.py +++ b/src/pymgrid/microgrid/envs/base/base.py @@ -70,3 +70,7 @@ def from_microgrid(cls, microgrid): def from_nonmodular(cls, nonmodular): microgrid = super().from_nonmodular(nonmodular) return cls.from_microgrid(microgrid) + + @classmethod + def load(cls, stream): + return cls(super().load(stream)) From 893eb8fc9ac6e7f089e59aedb5780e3180ad9e83 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 15 Nov 2022 15:05:45 -0800 Subject: [PATCH 07/88] fix bad assertion in forecast --- src/pymgrid/microgrid/modules/base/timeseries/forecaster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pymgrid/microgrid/modules/base/timeseries/forecaster.py b/src/pymgrid/microgrid/modules/base/timeseries/forecaster.py index 7629910b..60f200d3 100644 --- a/src/pymgrid/microgrid/modules/base/timeseries/forecaster.py +++ b/src/pymgrid/microgrid/modules/base/timeseries/forecaster.py @@ -75,7 +75,7 @@ def __call__(self, val_c, val_c_n, n): return None else: forecast = self._pad(forecast, n) - assert forecast.shape == val_c_n.shape + assert forecast.shape == (n, val_c_n.shape[1]) return forecast def __repr__(self): From 9e5c756d9356528e144ff790f5b03ab33275419e Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:13:32 -0500 Subject: [PATCH 08/88] refactor modules to src/pymgrid/modules --- .../{microgrid/modules/base/timeseries => forecast}/__init__.py | 0 .../{microgrid/modules/base/timeseries => forecast}/forecaster.py | 0 src/pymgrid/{microgrid => }/modules/base/__init__.py | 0 src/pymgrid/{microgrid => }/modules/base/base_module.py | 0 src/pymgrid/modules/base/timeseries/__init__.py | 0 .../modules/base/timeseries/base_timeseries_module.py | 0 src/pymgrid/{microgrid => }/modules/battery_module.py | 0 src/pymgrid/{microgrid => }/modules/genset_module.py | 0 src/pymgrid/{microgrid => }/modules/grid_module.py | 0 src/pymgrid/{microgrid => }/modules/load_module.py | 0 src/pymgrid/{microgrid => }/modules/module_container.py | 0 src/pymgrid/{microgrid => }/modules/renewable_module.py | 0 src/pymgrid/{microgrid => }/modules/unbalanced_energy_module.py | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename src/pymgrid/{microgrid/modules/base/timeseries => forecast}/__init__.py (100%) rename src/pymgrid/{microgrid/modules/base/timeseries => forecast}/forecaster.py (100%) rename src/pymgrid/{microgrid => }/modules/base/__init__.py (100%) rename src/pymgrid/{microgrid => }/modules/base/base_module.py (100%) create mode 100644 src/pymgrid/modules/base/timeseries/__init__.py rename src/pymgrid/{microgrid => }/modules/base/timeseries/base_timeseries_module.py (100%) rename src/pymgrid/{microgrid => }/modules/battery_module.py (100%) rename src/pymgrid/{microgrid => }/modules/genset_module.py (100%) rename src/pymgrid/{microgrid => }/modules/grid_module.py (100%) rename src/pymgrid/{microgrid => }/modules/load_module.py (100%) rename src/pymgrid/{microgrid => }/modules/module_container.py (100%) rename src/pymgrid/{microgrid => }/modules/renewable_module.py (100%) rename src/pymgrid/{microgrid => }/modules/unbalanced_energy_module.py (100%) diff --git a/src/pymgrid/microgrid/modules/base/timeseries/__init__.py b/src/pymgrid/forecast/__init__.py similarity index 100% rename from src/pymgrid/microgrid/modules/base/timeseries/__init__.py rename to src/pymgrid/forecast/__init__.py diff --git a/src/pymgrid/microgrid/modules/base/timeseries/forecaster.py b/src/pymgrid/forecast/forecaster.py similarity index 100% rename from src/pymgrid/microgrid/modules/base/timeseries/forecaster.py rename to src/pymgrid/forecast/forecaster.py diff --git a/src/pymgrid/microgrid/modules/base/__init__.py b/src/pymgrid/modules/base/__init__.py similarity index 100% rename from src/pymgrid/microgrid/modules/base/__init__.py rename to src/pymgrid/modules/base/__init__.py diff --git a/src/pymgrid/microgrid/modules/base/base_module.py b/src/pymgrid/modules/base/base_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/base/base_module.py rename to src/pymgrid/modules/base/base_module.py diff --git a/src/pymgrid/modules/base/timeseries/__init__.py b/src/pymgrid/modules/base/timeseries/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/pymgrid/microgrid/modules/base/timeseries/base_timeseries_module.py b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/base/timeseries/base_timeseries_module.py rename to src/pymgrid/modules/base/timeseries/base_timeseries_module.py diff --git a/src/pymgrid/microgrid/modules/battery_module.py b/src/pymgrid/modules/battery_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/battery_module.py rename to src/pymgrid/modules/battery_module.py diff --git a/src/pymgrid/microgrid/modules/genset_module.py b/src/pymgrid/modules/genset_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/genset_module.py rename to src/pymgrid/modules/genset_module.py diff --git a/src/pymgrid/microgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/grid_module.py rename to src/pymgrid/modules/grid_module.py diff --git a/src/pymgrid/microgrid/modules/load_module.py b/src/pymgrid/modules/load_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/load_module.py rename to src/pymgrid/modules/load_module.py diff --git a/src/pymgrid/microgrid/modules/module_container.py b/src/pymgrid/modules/module_container.py similarity index 100% rename from src/pymgrid/microgrid/modules/module_container.py rename to src/pymgrid/modules/module_container.py diff --git a/src/pymgrid/microgrid/modules/renewable_module.py b/src/pymgrid/modules/renewable_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/renewable_module.py rename to src/pymgrid/modules/renewable_module.py diff --git a/src/pymgrid/microgrid/modules/unbalanced_energy_module.py b/src/pymgrid/modules/unbalanced_energy_module.py similarity index 100% rename from src/pymgrid/microgrid/modules/unbalanced_energy_module.py rename to src/pymgrid/modules/unbalanced_energy_module.py From fbd487d2fe41cbdcbd53852579aec538deaab1d9 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:15:45 -0500 Subject: [PATCH 09/88] update import in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd9b743f..a694e533 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ to a microgrid: ```python import numpy as np from pymgrid import Microgrid -from pymgrid.microgrid.modules import GensetModule, BatteryModule, LoadModule, RenewableModule +from pymgrid.modules import GensetModule, BatteryModule, LoadModule, RenewableModule genset = GensetModule(running_min_production=10, From e989a76423b2441c19c675b204d9579d09a9bdb4 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:16:21 -0500 Subject: [PATCH 10/88] add module __init__ --- src/pymgrid/modules/__init__.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/pymgrid/modules/__init__.py diff --git a/src/pymgrid/modules/__init__.py b/src/pymgrid/modules/__init__.py new file mode 100644 index 00000000..c3fda508 --- /dev/null +++ b/src/pymgrid/modules/__init__.py @@ -0,0 +1,8 @@ +from .battery_module import BatteryModule +from .genset_module import GensetModule +from .grid_module import GridModule +from .load_module import LoadModule +from .renewable_module import RenewableModule +from .unbalanced_energy_module import UnbalancedEnergyModule + +from .module_container import ModuleContainer From 751bd800d2492abe8c7eddb17ae84b97bd723eb5 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:17:24 -0500 Subject: [PATCH 11/88] update demo notebook --- notebooks/modular_microgrid_demo.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notebooks/modular_microgrid_demo.ipynb b/notebooks/modular_microgrid_demo.ipynb index 63b757ed..32852231 100644 --- a/notebooks/modular_microgrid_demo.ipynb +++ b/notebooks/modular_microgrid_demo.ipynb @@ -9,7 +9,7 @@ "source": [ "from pymgrid.MicrogridGenerator import MicrogridGenerator\n", "from pymgrid import Microgrid\n", - "from pymgrid.microgrid.modules import *\n", + "from pymgrid.modules import *\n", "import numpy as np\n" ] }, @@ -1010,7 +1010,7 @@ "text": [ "\n", "_modules\n", - "{'fixed': {'sources': {'genset': []}, 'sinks': {'load': []}, 'source_and_sinks': {'battery': []}}, 'sources': {'fixed': {'genset': []}, 'flex': {'PV': []}}, 'sinks': {'fixed': {'load': []}, 'flex': {}}, 'source_and_sinks': {'fixed': {'battery': []}, 'flex': {'unbalanced_energy': []}}, 'flex': {'sources': {'PV': []}, 'sinks': {}, 'source_and_sinks': {'unbalanced_energy': []}}}\n", + "{'fixed': {'sources': {'genset': []}, 'sinks': {'load': []}, 'source_and_sinks': {'battery': []}}, 'sources': {'fixed': {'genset': []}, 'flex': {'PV': []}}, 'sinks': {'fixed': {'load': []}, 'flex': {}}, 'source_and_sinks': {'fixed': {'battery': []}, 'flex': {'unbalanced_energy': []}}, 'flex': {'sources': {'PV': []}, 'sinks': {}, 'source_and_sinks': {'unbalanced_energy': []}}}\n", "\n", "_balance_logger\n", "{}\n" From 274eb46f61c8a1a12b94ad8a15a37763776839c7 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:19:13 -0500 Subject: [PATCH 12/88] move forecast to new dir --- src/pymgrid/forecast/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pymgrid/forecast/__init__.py b/src/pymgrid/forecast/__init__.py index e69de29b..05be0939 100644 --- a/src/pymgrid/forecast/__init__.py +++ b/src/pymgrid/forecast/__init__.py @@ -0,0 +1 @@ +from .forecaster import get_forecaster, OracleForecaster, GaussianNoiseForecaster, UserDefinedForecaster, NoForecaster \ No newline at end of file From 5e2df86ac5c03171e31ea57036160c6c2d94c6e9 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:19:26 -0500 Subject: [PATCH 13/88] refactor forecast and module imports --- src/pymgrid/microgrid/convert/get_module.py | 2 +- src/pymgrid/microgrid/convert/to_nonmodular_ops.py | 2 +- .../microgrid/modular_microgrid/modular_microgrid.py | 3 +-- src/pymgrid/microgrid/modules/__init__.py | 7 +------ src/pymgrid/modules/base/__init__.py | 4 ++-- .../modules/base/timeseries/base_timeseries_module.py | 8 ++++---- src/pymgrid/modules/battery_module.py | 2 +- src/pymgrid/modules/genset_module.py | 2 +- src/pymgrid/modules/grid_module.py | 2 +- src/pymgrid/modules/load_module.py | 2 +- src/pymgrid/modules/module_container.py | 2 +- src/pymgrid/modules/renewable_module.py | 2 +- src/pymgrid/modules/unbalanced_energy_module.py | 2 +- 13 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/pymgrid/microgrid/convert/get_module.py b/src/pymgrid/microgrid/convert/get_module.py index cbe17e99..2409b713 100644 --- a/src/pymgrid/microgrid/convert/get_module.py +++ b/src/pymgrid/microgrid/convert/get_module.py @@ -1,5 +1,5 @@ import pandas as pd -from pymgrid.microgrid.modules import LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule +from pymgrid.modules import LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule def get_module(component, nonmodular, raise_errors): diff --git a/src/pymgrid/microgrid/convert/to_nonmodular_ops.py b/src/pymgrid/microgrid/convert/to_nonmodular_ops.py index 4b703b78..c6a3f3f3 100644 --- a/src/pymgrid/microgrid/convert/to_nonmodular_ops.py +++ b/src/pymgrid/microgrid/convert/to_nonmodular_ops.py @@ -1,4 +1,4 @@ -from pymgrid.microgrid.modules import LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule +from pymgrid.modules import LoadModule, RenewableModule, BatteryModule, GridModule, GensetModule, UnbalancedEnergyModule from copy import deepcopy import pandas as pd import numpy as np diff --git a/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py index d058a654..7e5541fc 100644 --- a/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py +++ b/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py @@ -6,8 +6,7 @@ from warnings import warn from pymgrid.microgrid import DEFAULT_HORIZON -from pymgrid.microgrid.modules import * -from pymgrid.microgrid.modules.module_container import ModuleContainer +from pymgrid.modules import ModuleContainer, UnbalancedEnergyModule from pymgrid.microgrid.utils.logger import ModularLogger from pymgrid.microgrid.utils.step import MicrogridStep from pymgrid.microgrid.utils.serialize import add_numpy_pandas_representers, add_numpy_pandas_constructors, dump_data diff --git a/src/pymgrid/microgrid/modules/__init__.py b/src/pymgrid/microgrid/modules/__init__.py index fc69d927..8b137891 100644 --- a/src/pymgrid/microgrid/modules/__init__.py +++ b/src/pymgrid/microgrid/modules/__init__.py @@ -1,6 +1 @@ -from .battery_module import BatteryModule -from .renewable_module import RenewableModule -from .load_module import LoadModule -from .unbalanced_energy_module import UnbalancedEnergyModule -from .grid_module import GridModule -from .genset_module import GensetModule + diff --git a/src/pymgrid/modules/base/__init__.py b/src/pymgrid/modules/base/__init__.py index c2922879..2a1e3bc5 100644 --- a/src/pymgrid/modules/base/__init__.py +++ b/src/pymgrid/modules/base/__init__.py @@ -1,2 +1,2 @@ -from pymgrid.microgrid.modules.base.base_module import BaseMicrogridModule -from pymgrid.microgrid.modules.base.timeseries.base_timeseries_module import BaseTimeSeriesMicrogridModule \ No newline at end of file +from .base_module import BaseMicrogridModule +from .timeseries.base_timeseries_module import BaseTimeSeriesMicrogridModule diff --git a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py index dd73637b..e4d88dff 100644 --- a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py +++ b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py @@ -1,9 +1,9 @@ -from abc import ABC, abstractmethod +from abc import abstractmethod import numpy as np from pymgrid.microgrid import DEFAULT_HORIZON -from pymgrid.microgrid.modules.base import BaseMicrogridModule -from pymgrid.microgrid.modules.base.timeseries.forecaster import get_forecaster +from pymgrid.modules.base import BaseMicrogridModule +from pymgrid.forecast.forecaster import get_forecaster class BaseTimeSeriesMicrogridModule(BaseMicrogridModule): @@ -107,7 +107,7 @@ def forecast_horizon(self, value): self._forecast_horizon = value else: from warnings import warn - from pymgrid.microgrid.modules.base.timeseries.forecaster import OracleForecaster + from pymgrid.forecast.forecaster import OracleForecaster warn("Setting forecast_horizon requires a non-null forecaster. Implementing OracleForecaster.") self.forecaster = OracleForecaster() self._forecast_horizon = value diff --git a/src/pymgrid/modules/battery_module.py b/src/pymgrid/modules/battery_module.py index 7fa3f181..b2b5a2cd 100644 --- a/src/pymgrid/modules/battery_module.py +++ b/src/pymgrid/modules/battery_module.py @@ -1,4 +1,4 @@ -from pymgrid.microgrid.modules.base import BaseMicrogridModule +from pymgrid.modules.base import BaseMicrogridModule import numpy as np import yaml from warnings import warn diff --git a/src/pymgrid/modules/genset_module.py b/src/pymgrid/modules/genset_module.py index 5f8ec4b5..3a99331f 100644 --- a/src/pymgrid/modules/genset_module.py +++ b/src/pymgrid/modules/genset_module.py @@ -2,7 +2,7 @@ import numpy as np from warnings import warn -from pymgrid.microgrid.modules.base import BaseMicrogridModule +from pymgrid.modules.base import BaseMicrogridModule class GensetModule(BaseMicrogridModule): diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index ea2697b2..e5184cf3 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -2,7 +2,7 @@ import yaml from pymgrid.microgrid import DEFAULT_HORIZON -from pymgrid.microgrid.modules.base import BaseTimeSeriesMicrogridModule +from pymgrid.modules.base import BaseTimeSeriesMicrogridModule class GridModule(BaseTimeSeriesMicrogridModule): diff --git a/src/pymgrid/modules/load_module.py b/src/pymgrid/modules/load_module.py index c08d98f3..39d220b3 100644 --- a/src/pymgrid/modules/load_module.py +++ b/src/pymgrid/modules/load_module.py @@ -2,7 +2,7 @@ import yaml from pymgrid.microgrid import DEFAULT_HORIZON -from pymgrid.microgrid.modules.base import BaseTimeSeriesMicrogridModule +from pymgrid.modules.base import BaseTimeSeriesMicrogridModule class LoadModule(BaseTimeSeriesMicrogridModule): diff --git a/src/pymgrid/modules/module_container.py b/src/pymgrid/modules/module_container.py index c4bded5a..f3ab2d21 100644 --- a/src/pymgrid/modules/module_container.py +++ b/src/pymgrid/modules/module_container.py @@ -1,6 +1,6 @@ import json from collections import UserDict, UserList -from pymgrid.microgrid.modules.base import BaseMicrogridModule +from pymgrid.modules.base import BaseMicrogridModule class ModuleContainer(UserDict): diff --git a/src/pymgrid/modules/renewable_module.py b/src/pymgrid/modules/renewable_module.py index 8fb39dd0..4a2aff40 100644 --- a/src/pymgrid/modules/renewable_module.py +++ b/src/pymgrid/modules/renewable_module.py @@ -2,7 +2,7 @@ import yaml from pymgrid.microgrid import DEFAULT_HORIZON -from pymgrid.microgrid.modules.base import BaseTimeSeriesMicrogridModule +from pymgrid.modules.base import BaseTimeSeriesMicrogridModule class RenewableModule(BaseTimeSeriesMicrogridModule): diff --git a/src/pymgrid/modules/unbalanced_energy_module.py b/src/pymgrid/modules/unbalanced_energy_module.py index fcfc4eed..7060f665 100644 --- a/src/pymgrid/modules/unbalanced_energy_module.py +++ b/src/pymgrid/modules/unbalanced_energy_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.microgrid.modules.base import BaseMicrogridModule +from pymgrid.modules.base import BaseMicrogridModule class UnbalancedEnergyModule(BaseMicrogridModule): From 312cb52a6c35fc0cd71bfa017dc686d735f82e46 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:19:38 -0500 Subject: [PATCH 14/88] refactor test imports --- tests/control/test_mpc.py | 8 ++++---- tests/helpers/genset_module_testing_utils.py | 2 +- tests/helpers/modular_microgrid.py | 12 ++++++++++-- .../modules/forecaster_tests/test_forecaster.py | 2 +- .../modules/module_tests/test_renewable_module.py | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/tests/control/test_mpc.py b/tests/control/test_mpc.py index 5921be06..b7f69244 100644 --- a/tests/control/test_mpc.py +++ b/tests/control/test_mpc.py @@ -14,7 +14,7 @@ def test_init(self): self.assertEqual(mpc.horizon, 1) def test_run_with_load_pv_battery_grid(self): - from pymgrid.microgrid.modules import RenewableModule, LoadModule + from pymgrid.modules import RenewableModule, LoadModule forecast_steps = 10 pv_const = 50 @@ -35,7 +35,7 @@ def test_run_with_load_pv_battery_grid(self): ) def test_run_with_load_pv_battery_genset(self): - from pymgrid.microgrid.modules import RenewableModule, LoadModule + from pymgrid.modules import RenewableModule, LoadModule forecast_steps = 10 pv_const = 50 @@ -56,7 +56,7 @@ def test_run_with_load_pv_battery_genset(self): [10.] * mpc_output.shape[0]) def test_run_twice_with_load_pv_battery_genset(self): - from pymgrid.microgrid.modules import RenewableModule, LoadModule + from pymgrid.modules import RenewableModule, LoadModule forecast_steps = 10 pv_const = 50 @@ -83,7 +83,7 @@ def test_run_twice_with_load_pv_battery_genset(self): self.assertEqual(mpc_output[("genset", 0, "genset_production")].values, [10.] * mpc_output.shape[0]) def test_run_with_load_pv_battery_grid_different_names(self): - from pymgrid.microgrid.modules import RenewableModule, LoadModule + from pymgrid.modules import RenewableModule, LoadModule forecast_steps = 10 pv_const = 50 diff --git a/tests/helpers/genset_module_testing_utils.py b/tests/helpers/genset_module_testing_utils.py index 74b60953..f8a44138 100644 --- a/tests/helpers/genset_module_testing_utils.py +++ b/tests/helpers/genset_module_testing_utils.py @@ -1,4 +1,4 @@ -from pymgrid.microgrid.modules import GensetModule +from pymgrid.modules import GensetModule default_params = dict(running_min_production=10, diff --git a/tests/helpers/modular_microgrid.py b/tests/helpers/modular_microgrid.py index dec83041..27dd0d15 100644 --- a/tests/helpers/modular_microgrid.py +++ b/tests/helpers/modular_microgrid.py @@ -1,7 +1,15 @@ -from pymgrid.microgrid.modular_microgrid.modular_microgrid import Microgrid -from pymgrid.microgrid.modules import * import numpy as np +from pymgrid import Microgrid + +from pymgrid.modules import ( + BatteryModule, + GensetModule, + GridModule, + LoadModule, + RenewableModule +) + def get_modular_microgrid(remove_modules=(), additional_modules=None, add_unbalanced_module=True): diff --git a/tests/microgrid/modules/forecaster_tests/test_forecaster.py b/tests/microgrid/modules/forecaster_tests/test_forecaster.py index b5fd764e..4fcc6e31 100644 --- a/tests/microgrid/modules/forecaster_tests/test_forecaster.py +++ b/tests/microgrid/modules/forecaster_tests/test_forecaster.py @@ -1,6 +1,6 @@ import numpy as np from tests.helpers.test_case import TestCase -from pymgrid.microgrid.modules.base.timeseries.forecaster import ( +from pymgrid.forecast import ( get_forecaster, OracleForecaster, GaussianNoiseForecaster, UserDefinedForecaster, NoForecaster) diff --git a/tests/microgrid/modules/module_tests/test_renewable_module.py b/tests/microgrid/modules/module_tests/test_renewable_module.py index f6d16e97..30e02548 100644 --- a/tests/microgrid/modules/module_tests/test_renewable_module.py +++ b/tests/microgrid/modules/module_tests/test_renewable_module.py @@ -1,7 +1,7 @@ import numpy as np from gym.spaces import Box -from pymgrid.microgrid.modules.renewable_module import RenewableModule +from pymgrid.modules import RenewableModule from tests.helpers.test_case import TestCase From dd5c827009f24126898766b7e25a59b4175a8a63 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:27:10 -0500 Subject: [PATCH 15/88] add _deprecated --- src/pymgrid/_deprecated/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/pymgrid/_deprecated/__init__.py diff --git a/src/pymgrid/_deprecated/__init__.py b/src/pymgrid/_deprecated/__init__.py new file mode 100644 index 00000000..e69de29b From 31a91f582471e878d575db07bf649068eaaff452 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:27:58 -0500 Subject: [PATCH 16/88] move old environments to _deprecated --- src/pymgrid/{ => _deprecated}/Environments/Environment.py | 0 src/pymgrid/{ => _deprecated}/Environments/Preprocessing.py | 0 src/pymgrid/{ => _deprecated}/Environments/__init__.py | 0 src/pymgrid/{ => _deprecated}/Environments/pymgrid_csca.py | 0 src/pymgrid/{ => _deprecated}/Environments/pymgrid_csca_old.py | 0 src/pymgrid/{ => _deprecated}/Environments/pymgrid_csda.py | 0 src/pymgrid/{ => _deprecated}/Environments/pymgrid_cspla.py | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename src/pymgrid/{ => _deprecated}/Environments/Environment.py (100%) rename src/pymgrid/{ => _deprecated}/Environments/Preprocessing.py (100%) rename src/pymgrid/{ => _deprecated}/Environments/__init__.py (100%) rename src/pymgrid/{ => _deprecated}/Environments/pymgrid_csca.py (100%) rename src/pymgrid/{ => _deprecated}/Environments/pymgrid_csca_old.py (100%) rename src/pymgrid/{ => _deprecated}/Environments/pymgrid_csda.py (100%) rename src/pymgrid/{ => _deprecated}/Environments/pymgrid_cspla.py (100%) diff --git a/src/pymgrid/Environments/Environment.py b/src/pymgrid/_deprecated/Environments/Environment.py similarity index 100% rename from src/pymgrid/Environments/Environment.py rename to src/pymgrid/_deprecated/Environments/Environment.py diff --git a/src/pymgrid/Environments/Preprocessing.py b/src/pymgrid/_deprecated/Environments/Preprocessing.py similarity index 100% rename from src/pymgrid/Environments/Preprocessing.py rename to src/pymgrid/_deprecated/Environments/Preprocessing.py diff --git a/src/pymgrid/Environments/__init__.py b/src/pymgrid/_deprecated/Environments/__init__.py similarity index 100% rename from src/pymgrid/Environments/__init__.py rename to src/pymgrid/_deprecated/Environments/__init__.py diff --git a/src/pymgrid/Environments/pymgrid_csca.py b/src/pymgrid/_deprecated/Environments/pymgrid_csca.py similarity index 100% rename from src/pymgrid/Environments/pymgrid_csca.py rename to src/pymgrid/_deprecated/Environments/pymgrid_csca.py diff --git a/src/pymgrid/Environments/pymgrid_csca_old.py b/src/pymgrid/_deprecated/Environments/pymgrid_csca_old.py similarity index 100% rename from src/pymgrid/Environments/pymgrid_csca_old.py rename to src/pymgrid/_deprecated/Environments/pymgrid_csca_old.py diff --git a/src/pymgrid/Environments/pymgrid_csda.py b/src/pymgrid/_deprecated/Environments/pymgrid_csda.py similarity index 100% rename from src/pymgrid/Environments/pymgrid_csda.py rename to src/pymgrid/_deprecated/Environments/pymgrid_csda.py diff --git a/src/pymgrid/Environments/pymgrid_cspla.py b/src/pymgrid/_deprecated/Environments/pymgrid_cspla.py similarity index 100% rename from src/pymgrid/Environments/pymgrid_cspla.py rename to src/pymgrid/_deprecated/Environments/pymgrid_cspla.py From 5ebaad7a4c5c94c91cf0c2b3a2ff2b1b12ad3575 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:30:54 -0500 Subject: [PATCH 17/88] move non_modular_microgrid to deprecated dir --- src/pymgrid/{ => _deprecated}/non_modular_microgrid.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/pymgrid/{ => _deprecated}/non_modular_microgrid.py (100%) diff --git a/src/pymgrid/non_modular_microgrid.py b/src/pymgrid/_deprecated/non_modular_microgrid.py similarity index 100% rename from src/pymgrid/non_modular_microgrid.py rename to src/pymgrid/_deprecated/non_modular_microgrid.py From 180fde6297d4de05abbcf9b01e38122be4606b93 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:31:08 -0500 Subject: [PATCH 18/88] update imports to reflect non_modular_microgrid move --- src/pymgrid/__init__.py | 2 +- src/pymgrid/_deprecated/Environments/pymgrid_csca.py | 2 +- src/pymgrid/microgrid/convert/convert.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pymgrid/__init__.py b/src/pymgrid/__init__.py index 249978f5..68da1fd2 100644 --- a/src/pymgrid/__init__.py +++ b/src/pymgrid/__init__.py @@ -4,6 +4,6 @@ PROJECT_PATH = Path(__file__).parent -from .non_modular_microgrid import NonModularMicrogrid +from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid from .microgrid import Microgrid from .MicrogridGenerator import MicrogridGenerator diff --git a/src/pymgrid/_deprecated/Environments/pymgrid_csca.py b/src/pymgrid/_deprecated/Environments/pymgrid_csca.py index e6538fa5..3d5684d1 100644 --- a/src/pymgrid/_deprecated/Environments/pymgrid_csca.py +++ b/src/pymgrid/_deprecated/Environments/pymgrid_csca.py @@ -1,7 +1,7 @@ from abc import ABC import gym, logging, numpy as np, pandas as pd from gym import Env -from pymgrid.non_modular_microgrid import NonModularMicrogrid +from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid from pymgrid.MicrogridGenerator import MicrogridGenerator from copy import deepcopy from pymgrid.algos.saa.saa import SampleAverageApproximation diff --git a/src/pymgrid/microgrid/convert/convert.py b/src/pymgrid/microgrid/convert/convert.py index 31bbe2b8..9a432c11 100644 --- a/src/pymgrid/microgrid/convert/convert.py +++ b/src/pymgrid/microgrid/convert/convert.py @@ -1,4 +1,4 @@ -from pymgrid.non_modular_microgrid import NonModularMicrogrid +from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid from pymgrid.microgrid.modular_microgrid.modular_microgrid import Microgrid from pymgrid.microgrid.convert.get_module import get_module from pymgrid.microgrid.convert.to_nonmodular_ops import check_viability, add_params_from_module, get_empty_params, finalize_params From e3fa348990864bdf48c6b433528455c6f0830275 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:33:57 -0500 Subject: [PATCH 19/88] move modular_microgrid dir up level --- src/pymgrid/{microgrid => }/modular_microgrid/__init__.py | 0 .../{microgrid => }/modular_microgrid/modular_microgrid.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/pymgrid/{microgrid => }/modular_microgrid/__init__.py (100%) rename src/pymgrid/{microgrid => }/modular_microgrid/modular_microgrid.py (100%) diff --git a/src/pymgrid/microgrid/modular_microgrid/__init__.py b/src/pymgrid/modular_microgrid/__init__.py similarity index 100% rename from src/pymgrid/microgrid/modular_microgrid/__init__.py rename to src/pymgrid/modular_microgrid/__init__.py diff --git a/src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/modular_microgrid/modular_microgrid.py similarity index 100% rename from src/pymgrid/microgrid/modular_microgrid/modular_microgrid.py rename to src/pymgrid/modular_microgrid/modular_microgrid.py From a6f1f374e3d9b65dc325da21023f9e338724a94d Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:34:05 -0500 Subject: [PATCH 20/88] refactor Microgrid imports --- src/pymgrid/__init__.py | 2 +- src/pymgrid/microgrid/__init__.py | 1 - src/pymgrid/microgrid/convert/convert.py | 2 +- src/pymgrid/modular_microgrid/__init__.py | 1 + 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pymgrid/__init__.py b/src/pymgrid/__init__.py index 68da1fd2..c2a5e7d6 100644 --- a/src/pymgrid/__init__.py +++ b/src/pymgrid/__init__.py @@ -5,5 +5,5 @@ PROJECT_PATH = Path(__file__).parent from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid -from .microgrid import Microgrid +from .modular_microgrid import Microgrid from .MicrogridGenerator import MicrogridGenerator diff --git a/src/pymgrid/microgrid/__init__.py b/src/pymgrid/microgrid/__init__.py index f0dd5af4..46a54881 100644 --- a/src/pymgrid/microgrid/__init__.py +++ b/src/pymgrid/microgrid/__init__.py @@ -1,3 +1,2 @@ DEFAULT_HORIZON = 23 -from .modular_microgrid.modular_microgrid import Microgrid diff --git a/src/pymgrid/microgrid/convert/convert.py b/src/pymgrid/microgrid/convert/convert.py index 9a432c11..9a6a4fff 100644 --- a/src/pymgrid/microgrid/convert/convert.py +++ b/src/pymgrid/microgrid/convert/convert.py @@ -1,5 +1,5 @@ from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid -from pymgrid.microgrid.modular_microgrid.modular_microgrid import Microgrid +from pymgrid.modular_microgrid.modular_microgrid import Microgrid from pymgrid.microgrid.convert.get_module import get_module from pymgrid.microgrid.convert.to_nonmodular_ops import check_viability, add_params_from_module, get_empty_params, finalize_params diff --git a/src/pymgrid/modular_microgrid/__init__.py b/src/pymgrid/modular_microgrid/__init__.py index e69de29b..2fc11389 100644 --- a/src/pymgrid/modular_microgrid/__init__.py +++ b/src/pymgrid/modular_microgrid/__init__.py @@ -0,0 +1 @@ +from .modular_microgrid import Microgrid \ No newline at end of file From 55924460438fc67003472d2b7926dfb553a2e172 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:34:55 -0500 Subject: [PATCH 21/88] remove old modules dir --- src/pymgrid/microgrid/modules/__init__.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/pymgrid/microgrid/modules/__init__.py diff --git a/src/pymgrid/microgrid/modules/__init__.py b/src/pymgrid/microgrid/modules/__init__.py deleted file mode 100644 index 8b137891..00000000 --- a/src/pymgrid/microgrid/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ - From 91938abdbab90f238c719a8741c66286b99a6f21 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:35:45 -0500 Subject: [PATCH 22/88] move envs up level --- src/pymgrid/{microgrid => }/envs/__init__.py | 0 src/pymgrid/{microgrid => }/envs/base/__init__.py | 0 src/pymgrid/{microgrid => }/envs/base/base.py | 0 src/pymgrid/{microgrid => }/envs/base/skip_init.py | 0 src/pymgrid/{microgrid => }/envs/continuous/__init__.py | 0 src/pymgrid/{microgrid => }/envs/continuous/continuous.py | 0 src/pymgrid/{microgrid => }/envs/discrete/__init__.py | 0 src/pymgrid/{microgrid => }/envs/discrete/discrete.py | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename src/pymgrid/{microgrid => }/envs/__init__.py (100%) rename src/pymgrid/{microgrid => }/envs/base/__init__.py (100%) rename src/pymgrid/{microgrid => }/envs/base/base.py (100%) rename src/pymgrid/{microgrid => }/envs/base/skip_init.py (100%) rename src/pymgrid/{microgrid => }/envs/continuous/__init__.py (100%) rename src/pymgrid/{microgrid => }/envs/continuous/continuous.py (100%) rename src/pymgrid/{microgrid => }/envs/discrete/__init__.py (100%) rename src/pymgrid/{microgrid => }/envs/discrete/discrete.py (100%) diff --git a/src/pymgrid/microgrid/envs/__init__.py b/src/pymgrid/envs/__init__.py similarity index 100% rename from src/pymgrid/microgrid/envs/__init__.py rename to src/pymgrid/envs/__init__.py diff --git a/src/pymgrid/microgrid/envs/base/__init__.py b/src/pymgrid/envs/base/__init__.py similarity index 100% rename from src/pymgrid/microgrid/envs/base/__init__.py rename to src/pymgrid/envs/base/__init__.py diff --git a/src/pymgrid/microgrid/envs/base/base.py b/src/pymgrid/envs/base/base.py similarity index 100% rename from src/pymgrid/microgrid/envs/base/base.py rename to src/pymgrid/envs/base/base.py diff --git a/src/pymgrid/microgrid/envs/base/skip_init.py b/src/pymgrid/envs/base/skip_init.py similarity index 100% rename from src/pymgrid/microgrid/envs/base/skip_init.py rename to src/pymgrid/envs/base/skip_init.py diff --git a/src/pymgrid/microgrid/envs/continuous/__init__.py b/src/pymgrid/envs/continuous/__init__.py similarity index 100% rename from src/pymgrid/microgrid/envs/continuous/__init__.py rename to src/pymgrid/envs/continuous/__init__.py diff --git a/src/pymgrid/microgrid/envs/continuous/continuous.py b/src/pymgrid/envs/continuous/continuous.py similarity index 100% rename from src/pymgrid/microgrid/envs/continuous/continuous.py rename to src/pymgrid/envs/continuous/continuous.py diff --git a/src/pymgrid/microgrid/envs/discrete/__init__.py b/src/pymgrid/envs/discrete/__init__.py similarity index 100% rename from src/pymgrid/microgrid/envs/discrete/__init__.py rename to src/pymgrid/envs/discrete/__init__.py diff --git a/src/pymgrid/microgrid/envs/discrete/discrete.py b/src/pymgrid/envs/discrete/discrete.py similarity index 100% rename from src/pymgrid/microgrid/envs/discrete/discrete.py rename to src/pymgrid/envs/discrete/discrete.py From 9e983ef801d56ce2e44a3d262144a6058fbc4f0c Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:38:42 -0500 Subject: [PATCH 23/88] refactor envs --- src/pymgrid/envs/base/base.py | 2 +- src/pymgrid/envs/continuous/continuous.py | 2 +- src/pymgrid/envs/discrete/discrete.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pymgrid/envs/base/base.py b/src/pymgrid/envs/base/base.py index cd1ec185..1a4d225a 100644 --- a/src/pymgrid/envs/base/base.py +++ b/src/pymgrid/envs/base/base.py @@ -3,7 +3,7 @@ from abc import abstractmethod from pymgrid import NonModularMicrogrid, Microgrid -from pymgrid.microgrid.envs.base.skip_init import skip_init +from pymgrid.envs.base import skip_init class BaseMicrogridEnv(Microgrid, Env): diff --git a/src/pymgrid/envs/continuous/continuous.py b/src/pymgrid/envs/continuous/continuous.py index 24fb005d..e45805b1 100644 --- a/src/pymgrid/envs/continuous/continuous.py +++ b/src/pymgrid/envs/continuous/continuous.py @@ -1,7 +1,7 @@ from gym.spaces import Dict, Tuple, flatten_space from warnings import warn -from pymgrid.microgrid.envs.base.base import BaseMicrogridEnv +from pymgrid.envs.base import BaseMicrogridEnv class ContinuousMicrogridEnv(BaseMicrogridEnv): diff --git a/src/pymgrid/envs/discrete/discrete.py b/src/pymgrid/envs/discrete/discrete.py index b911af02..ed22f563 100644 --- a/src/pymgrid/envs/discrete/discrete.py +++ b/src/pymgrid/envs/discrete/discrete.py @@ -4,7 +4,7 @@ from gym.spaces import Discrete from math import isclose -from pymgrid.microgrid.envs.base.base import BaseMicrogridEnv +from pymgrid.envs.base import BaseMicrogridEnv from pymgrid.microgrid.utils.logger import ModularLogger From b06461d69bb425553c891060203b39ccf22665ca Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:39:09 -0500 Subject: [PATCH 24/88] refactor env test imports --- tests/envs/discrete.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/envs/discrete.py b/tests/envs/discrete.py index cad4e0d0..c1a2e6fb 100644 --- a/tests/envs/discrete.py +++ b/tests/envs/discrete.py @@ -1,7 +1,7 @@ from tests.helpers.test_case import TestCase from tests.helpers.modular_microgrid import get_modular_microgrid -from pymgrid.microgrid.envs import DiscreteMicrogridEnv +from pymgrid.envs import DiscreteMicrogridEnv class TestDiscreteEnv(TestCase): From bdb5456116801436950c4e4d430566c6aea15186 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:40:50 -0500 Subject: [PATCH 25/88] refactor deprecated imports --- src/pymgrid/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pymgrid/__init__.py b/src/pymgrid/__init__.py index c2a5e7d6..fa578c74 100644 --- a/src/pymgrid/__init__.py +++ b/src/pymgrid/__init__.py @@ -4,6 +4,7 @@ PROJECT_PATH = Path(__file__).parent -from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid +from ._deprecated.non_modular_microgrid import NonModularMicrogrid from .modular_microgrid import Microgrid from .MicrogridGenerator import MicrogridGenerator + From cb8e953b20d9efad262e40ee6abd3ee61c663a79 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:51:10 -0500 Subject: [PATCH 26/88] add nl at end of file --- src/pymgrid/envs/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pymgrid/envs/__init__.py b/src/pymgrid/envs/__init__.py index 8ea1f0a8..1d86a8b7 100644 --- a/src/pymgrid/envs/__init__.py +++ b/src/pymgrid/envs/__init__.py @@ -1,2 +1,2 @@ from .discrete.discrete import DiscreteMicrogridEnv -from .continuous.continuous import ContinuousMicrogridEnv \ No newline at end of file +from .continuous.continuous import ContinuousMicrogridEnv From a66325892694b9f6eeb28b7ce9bb6677afc57e50 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 15:51:23 -0500 Subject: [PATCH 27/88] fix base env imports --- src/pymgrid/envs/base/__init__.py | 1 + src/pymgrid/envs/base/base.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pymgrid/envs/base/__init__.py b/src/pymgrid/envs/base/__init__.py index e69de29b..47ce3c70 100644 --- a/src/pymgrid/envs/base/__init__.py +++ b/src/pymgrid/envs/base/__init__.py @@ -0,0 +1 @@ +from .base import BaseMicrogridEnv diff --git a/src/pymgrid/envs/base/base.py b/src/pymgrid/envs/base/base.py index 1a4d225a..f64e8cd7 100644 --- a/src/pymgrid/envs/base/base.py +++ b/src/pymgrid/envs/base/base.py @@ -3,7 +3,7 @@ from abc import abstractmethod from pymgrid import NonModularMicrogrid, Microgrid -from pymgrid.envs.base import skip_init +from pymgrid.envs.base.skip_init import skip_init class BaseMicrogridEnv(Microgrid, Env): From a5468d78dd5946bd88e446f02b67e2fdfdf5ef34 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:08:06 -0500 Subject: [PATCH 28/88] refactor microgrid/convert->convert --- src/pymgrid/{microgrid => }/convert/__init__.py | 0 src/pymgrid/{microgrid => }/convert/convert.py | 0 src/pymgrid/{microgrid => }/convert/get_module.py | 0 src/pymgrid/{microgrid => }/convert/to_nonmodular_ops.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename src/pymgrid/{microgrid => }/convert/__init__.py (100%) rename src/pymgrid/{microgrid => }/convert/convert.py (100%) rename src/pymgrid/{microgrid => }/convert/get_module.py (100%) rename src/pymgrid/{microgrid => }/convert/to_nonmodular_ops.py (100%) diff --git a/src/pymgrid/microgrid/convert/__init__.py b/src/pymgrid/convert/__init__.py similarity index 100% rename from src/pymgrid/microgrid/convert/__init__.py rename to src/pymgrid/convert/__init__.py diff --git a/src/pymgrid/microgrid/convert/convert.py b/src/pymgrid/convert/convert.py similarity index 100% rename from src/pymgrid/microgrid/convert/convert.py rename to src/pymgrid/convert/convert.py diff --git a/src/pymgrid/microgrid/convert/get_module.py b/src/pymgrid/convert/get_module.py similarity index 100% rename from src/pymgrid/microgrid/convert/get_module.py rename to src/pymgrid/convert/get_module.py diff --git a/src/pymgrid/microgrid/convert/to_nonmodular_ops.py b/src/pymgrid/convert/to_nonmodular_ops.py similarity index 100% rename from src/pymgrid/microgrid/convert/to_nonmodular_ops.py rename to src/pymgrid/convert/to_nonmodular_ops.py From f85d012ea3ae40cddceb925da084c30c8584a0a0 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:08:26 -0500 Subject: [PATCH 29/88] refactor conversion imports --- src/pymgrid/_deprecated/non_modular_microgrid.py | 8 ++------ src/pymgrid/convert/convert.py | 4 ++-- src/pymgrid/modular_microgrid/modular_microgrid.py | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/pymgrid/_deprecated/non_modular_microgrid.py b/src/pymgrid/_deprecated/non_modular_microgrid.py index c604b823..1d982071 100644 --- a/src/pymgrid/_deprecated/non_modular_microgrid.py +++ b/src/pymgrid/_deprecated/non_modular_microgrid.py @@ -23,12 +23,8 @@ import pandas as pd import numpy as np from copy import copy -import cvxpy as cp -import operator -import sys from plotly.offline import init_notebook_mode, iplot import matplotlib.pyplot as plt -import cufflinks as cf from IPython.display import display from IPython import get_ipython @@ -1263,10 +1259,10 @@ def penalty(self, coef = 1): @classmethod def from_modular(cls, modular): - from pymgrid.microgrid.convert.convert import to_nonmodular + from pymgrid.convert.convert import to_nonmodular return to_nonmodular(modular) def to_modular(self): - from pymgrid.microgrid.convert.convert import to_modular + from pymgrid.convert.convert import to_modular return to_modular(self) diff --git a/src/pymgrid/convert/convert.py b/src/pymgrid/convert/convert.py index 9a6a4fff..4bea83c4 100644 --- a/src/pymgrid/convert/convert.py +++ b/src/pymgrid/convert/convert.py @@ -1,7 +1,7 @@ from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid from pymgrid.modular_microgrid.modular_microgrid import Microgrid -from pymgrid.microgrid.convert.get_module import get_module -from pymgrid.microgrid.convert.to_nonmodular_ops import check_viability, add_params_from_module, get_empty_params, finalize_params +from pymgrid.convert.get_module import get_module +from pymgrid.convert.to_nonmodular_ops import check_viability, add_params_from_module, get_empty_params, finalize_params def to_modular(nonmodular, raise_errors=False): diff --git a/src/pymgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/modular_microgrid/modular_microgrid.py index 7e5541fc..a57d2f3f 100644 --- a/src/pymgrid/modular_microgrid/modular_microgrid.py +++ b/src/pymgrid/modular_microgrid/modular_microgrid.py @@ -278,11 +278,11 @@ def serialize(self, dumper_stream): @classmethod def from_nonmodular(cls, nonmodular): - from pymgrid.microgrid.convert.convert import to_modular + from pymgrid.convert.convert import to_modular return to_modular(nonmodular) def to_nonmodular(self): - from pymgrid.microgrid.convert.convert import to_nonmodular + from pymgrid.convert.convert import to_nonmodular return to_nonmodular(self) @classmethod From 82d611e24f60210422e044cc71236864fa3c2f60 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:08:44 -0500 Subject: [PATCH 30/88] refactor conversion imports in tests --- .../microgrid/modules/conversion_test/test_modular_conversion.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/microgrid/modules/conversion_test/test_modular_conversion.py b/tests/microgrid/modules/conversion_test/test_modular_conversion.py index 85de5ea9..153cfe23 100644 --- a/tests/microgrid/modules/conversion_test/test_modular_conversion.py +++ b/tests/microgrid/modules/conversion_test/test_modular_conversion.py @@ -15,7 +15,6 @@ def setUp(self) -> None: self.strong_grid_and_genset = [microgrid for microgrid in mgen.microgrids if microgrid.architecture["genset"] and self.is_strong_grid(microgrid)] - @staticmethod def is_weak_grid(microgrid): return microgrid.architecture["grid"] and microgrid._grid_status_ts.min().item() < 1 From 8804e66930e9fc76a18919163e5cf11a89d81daf Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:33:11 -0500 Subject: [PATCH 31/88] move the rest of the utils --- src/pymgrid/microgrid/utils/__init__.py | 0 src/pymgrid/{microgrid => modular_microgrid}/utils/step.py | 0 src/pymgrid/{microgrid => modules}/utils/normalize.py | 0 src/pymgrid/{microgrid => }/utils/logger.py | 0 src/pymgrid/{microgrid => }/utils/serialize.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/pymgrid/microgrid/utils/__init__.py rename src/pymgrid/{microgrid => modular_microgrid}/utils/step.py (100%) rename src/pymgrid/{microgrid => modules}/utils/normalize.py (100%) rename src/pymgrid/{microgrid => }/utils/logger.py (100%) rename src/pymgrid/{microgrid => }/utils/serialize.py (100%) diff --git a/src/pymgrid/microgrid/utils/__init__.py b/src/pymgrid/microgrid/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pymgrid/microgrid/utils/step.py b/src/pymgrid/modular_microgrid/utils/step.py similarity index 100% rename from src/pymgrid/microgrid/utils/step.py rename to src/pymgrid/modular_microgrid/utils/step.py diff --git a/src/pymgrid/microgrid/utils/normalize.py b/src/pymgrid/modules/utils/normalize.py similarity index 100% rename from src/pymgrid/microgrid/utils/normalize.py rename to src/pymgrid/modules/utils/normalize.py diff --git a/src/pymgrid/microgrid/utils/logger.py b/src/pymgrid/utils/logger.py similarity index 100% rename from src/pymgrid/microgrid/utils/logger.py rename to src/pymgrid/utils/logger.py diff --git a/src/pymgrid/microgrid/utils/serialize.py b/src/pymgrid/utils/serialize.py similarity index 100% rename from src/pymgrid/microgrid/utils/serialize.py rename to src/pymgrid/utils/serialize.py From e46b7a4b330ab887634844158669c9ba38c4d369 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:33:58 -0500 Subject: [PATCH 32/88] refactor util imports --- src/pymgrid/envs/discrete/discrete.py | 2 +- src/pymgrid/modular_microgrid/modular_microgrid.py | 6 +++--- src/pymgrid/modules/base/base_module.py | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pymgrid/envs/discrete/discrete.py b/src/pymgrid/envs/discrete/discrete.py index ed22f563..b2593a8d 100644 --- a/src/pymgrid/envs/discrete/discrete.py +++ b/src/pymgrid/envs/discrete/discrete.py @@ -5,7 +5,7 @@ from math import isclose from pymgrid.envs.base import BaseMicrogridEnv -from pymgrid.microgrid.utils.logger import ModularLogger +from pymgrid.utils.logger import ModularLogger class DiscreteMicrogridEnv(BaseMicrogridEnv): diff --git a/src/pymgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/modular_microgrid/modular_microgrid.py index a57d2f3f..64e8fe36 100644 --- a/src/pymgrid/modular_microgrid/modular_microgrid.py +++ b/src/pymgrid/modular_microgrid/modular_microgrid.py @@ -7,9 +7,9 @@ from pymgrid.microgrid import DEFAULT_HORIZON from pymgrid.modules import ModuleContainer, UnbalancedEnergyModule -from pymgrid.microgrid.utils.logger import ModularLogger -from pymgrid.microgrid.utils.step import MicrogridStep -from pymgrid.microgrid.utils.serialize import add_numpy_pandas_representers, add_numpy_pandas_constructors, dump_data +from pymgrid.utils.logger import ModularLogger +from pymgrid.modular_microgrid.utils.step import MicrogridStep +from pymgrid.utils.serialize import add_numpy_pandas_representers, add_numpy_pandas_constructors, dump_data class Microgrid(yaml.YAMLObject): diff --git a/src/pymgrid/modules/base/base_module.py b/src/pymgrid/modules/base/base_module.py index 01197456..fd1b9715 100644 --- a/src/pymgrid/modules/base/base_module.py +++ b/src/pymgrid/modules/base/base_module.py @@ -7,9 +7,9 @@ from gym.spaces import Box from warnings import warn -from pymgrid.microgrid.utils.logger import ModularLogger -from pymgrid.microgrid.utils.normalize import Normalize, IdentityNormalize -from pymgrid.microgrid.utils.serialize import add_numpy_pandas_representers, add_numpy_pandas_constructors, dump_data +from pymgrid.utils.logger import ModularLogger +from pymgrid.modules.utils.normalize import Normalize, IdentityNormalize +from pymgrid.utils.serialize import add_numpy_pandas_representers, add_numpy_pandas_constructors, dump_data script_logger = logging.getLogger(__name__) From 853a0d8d52c0938c635c86a06a09a84ea2387d56 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:34:08 -0500 Subject: [PATCH 33/88] add __init__ files --- src/pymgrid/modular_microgrid/utils/__init__.py | 0 src/pymgrid/modules/utils/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/pymgrid/modular_microgrid/utils/__init__.py create mode 100644 src/pymgrid/modules/utils/__init__.py diff --git a/src/pymgrid/modular_microgrid/utils/__init__.py b/src/pymgrid/modular_microgrid/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/pymgrid/modules/utils/__init__.py b/src/pymgrid/modules/utils/__init__.py new file mode 100644 index 00000000..e69de29b From 88b48d2a4fa251ce2a49eaaa1363249877511637 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:50:35 -0500 Subject: [PATCH 34/88] move DEFAULT_HORIZON param --- src/pymgrid/microgrid/__init__.py | 1 - src/pymgrid/modular_microgrid/__init__.py | 4 +++- src/pymgrid/modular_microgrid/modular_microgrid.py | 2 +- src/pymgrid/modules/base/timeseries/base_timeseries_module.py | 2 +- src/pymgrid/modules/grid_module.py | 2 +- src/pymgrid/modules/load_module.py | 2 +- src/pymgrid/modules/renewable_module.py | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/pymgrid/microgrid/__init__.py b/src/pymgrid/microgrid/__init__.py index 46a54881..8b137891 100644 --- a/src/pymgrid/microgrid/__init__.py +++ b/src/pymgrid/microgrid/__init__.py @@ -1,2 +1 @@ -DEFAULT_HORIZON = 23 diff --git a/src/pymgrid/modular_microgrid/__init__.py b/src/pymgrid/modular_microgrid/__init__.py index 2fc11389..466581a8 100644 --- a/src/pymgrid/modular_microgrid/__init__.py +++ b/src/pymgrid/modular_microgrid/__init__.py @@ -1 +1,3 @@ -from .modular_microgrid import Microgrid \ No newline at end of file +DEFAULT_HORIZON = 23 + +from .modular_microgrid import Microgrid diff --git a/src/pymgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/modular_microgrid/modular_microgrid.py index 64e8fe36..e9698c93 100644 --- a/src/pymgrid/modular_microgrid/modular_microgrid.py +++ b/src/pymgrid/modular_microgrid/modular_microgrid.py @@ -5,7 +5,7 @@ from copy import deepcopy from warnings import warn -from pymgrid.microgrid import DEFAULT_HORIZON +from pymgrid.modular_microgrid import DEFAULT_HORIZON from pymgrid.modules import ModuleContainer, UnbalancedEnergyModule from pymgrid.utils.logger import ModularLogger from pymgrid.modular_microgrid.utils.step import MicrogridStep diff --git a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py index e4d88dff..76560164 100644 --- a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py +++ b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py @@ -1,7 +1,7 @@ from abc import abstractmethod import numpy as np -from pymgrid.microgrid import DEFAULT_HORIZON +from pymgrid.modular_microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseMicrogridModule from pymgrid.forecast.forecaster import get_forecaster diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index e5184cf3..da618da6 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.microgrid import DEFAULT_HORIZON +from pymgrid.modular_microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseTimeSeriesMicrogridModule diff --git a/src/pymgrid/modules/load_module.py b/src/pymgrid/modules/load_module.py index 39d220b3..8967bc99 100644 --- a/src/pymgrid/modules/load_module.py +++ b/src/pymgrid/modules/load_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.microgrid import DEFAULT_HORIZON +from pymgrid.modular_microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseTimeSeriesMicrogridModule diff --git a/src/pymgrid/modules/renewable_module.py b/src/pymgrid/modules/renewable_module.py index 4a2aff40..30903a20 100644 --- a/src/pymgrid/modules/renewable_module.py +++ b/src/pymgrid/modules/renewable_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.microgrid import DEFAULT_HORIZON +from pymgrid.modular_microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseTimeSeriesMicrogridModule From ca301193c4042164b2586954aab9dd2b92539f6a Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:51:13 -0500 Subject: [PATCH 35/88] remove old microgrid dir --- src/pymgrid/microgrid/__init__.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/pymgrid/microgrid/__init__.py diff --git a/src/pymgrid/microgrid/__init__.py b/src/pymgrid/microgrid/__init__.py deleted file mode 100644 index 8b137891..00000000 --- a/src/pymgrid/microgrid/__init__.py +++ /dev/null @@ -1 +0,0 @@ - From fd6db457925ed34ddcf4a63489a13131d711a690 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:52:23 -0500 Subject: [PATCH 36/88] rename modular_microgrid dir to microgrid --- src/pymgrid/__init__.py | 2 +- src/pymgrid/convert/convert.py | 2 +- src/pymgrid/{modular_microgrid => microgrid}/__init__.py | 0 .../{modular_microgrid => microgrid}/modular_microgrid.py | 4 ++-- .../{modular_microgrid => microgrid}/utils/__init__.py | 0 src/pymgrid/{modular_microgrid => microgrid}/utils/step.py | 0 src/pymgrid/modules/base/timeseries/base_timeseries_module.py | 2 +- src/pymgrid/modules/grid_module.py | 2 +- src/pymgrid/modules/load_module.py | 2 +- src/pymgrid/modules/renewable_module.py | 2 +- 10 files changed, 8 insertions(+), 8 deletions(-) rename src/pymgrid/{modular_microgrid => microgrid}/__init__.py (100%) rename src/pymgrid/{modular_microgrid => microgrid}/modular_microgrid.py (99%) rename src/pymgrid/{modular_microgrid => microgrid}/utils/__init__.py (100%) rename src/pymgrid/{modular_microgrid => microgrid}/utils/step.py (100%) diff --git a/src/pymgrid/__init__.py b/src/pymgrid/__init__.py index fa578c74..df0ad1a6 100644 --- a/src/pymgrid/__init__.py +++ b/src/pymgrid/__init__.py @@ -5,6 +5,6 @@ PROJECT_PATH = Path(__file__).parent from ._deprecated.non_modular_microgrid import NonModularMicrogrid -from .modular_microgrid import Microgrid +from .microgrid import Microgrid from .MicrogridGenerator import MicrogridGenerator diff --git a/src/pymgrid/convert/convert.py b/src/pymgrid/convert/convert.py index 4bea83c4..db434c2b 100644 --- a/src/pymgrid/convert/convert.py +++ b/src/pymgrid/convert/convert.py @@ -1,5 +1,5 @@ from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid -from pymgrid.modular_microgrid.modular_microgrid import Microgrid +from pymgrid.microgrid.modular_microgrid import Microgrid from pymgrid.convert.get_module import get_module from pymgrid.convert.to_nonmodular_ops import check_viability, add_params_from_module, get_empty_params, finalize_params diff --git a/src/pymgrid/modular_microgrid/__init__.py b/src/pymgrid/microgrid/__init__.py similarity index 100% rename from src/pymgrid/modular_microgrid/__init__.py rename to src/pymgrid/microgrid/__init__.py diff --git a/src/pymgrid/modular_microgrid/modular_microgrid.py b/src/pymgrid/microgrid/modular_microgrid.py similarity index 99% rename from src/pymgrid/modular_microgrid/modular_microgrid.py rename to src/pymgrid/microgrid/modular_microgrid.py index e9698c93..102ef511 100644 --- a/src/pymgrid/modular_microgrid/modular_microgrid.py +++ b/src/pymgrid/microgrid/modular_microgrid.py @@ -5,10 +5,10 @@ from copy import deepcopy from warnings import warn -from pymgrid.modular_microgrid import DEFAULT_HORIZON +from pymgrid.microgrid import DEFAULT_HORIZON from pymgrid.modules import ModuleContainer, UnbalancedEnergyModule from pymgrid.utils.logger import ModularLogger -from pymgrid.modular_microgrid.utils.step import MicrogridStep +from pymgrid.microgrid.utils.step import MicrogridStep from pymgrid.utils.serialize import add_numpy_pandas_representers, add_numpy_pandas_constructors, dump_data diff --git a/src/pymgrid/modular_microgrid/utils/__init__.py b/src/pymgrid/microgrid/utils/__init__.py similarity index 100% rename from src/pymgrid/modular_microgrid/utils/__init__.py rename to src/pymgrid/microgrid/utils/__init__.py diff --git a/src/pymgrid/modular_microgrid/utils/step.py b/src/pymgrid/microgrid/utils/step.py similarity index 100% rename from src/pymgrid/modular_microgrid/utils/step.py rename to src/pymgrid/microgrid/utils/step.py diff --git a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py index 76560164..e4d88dff 100644 --- a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py +++ b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py @@ -1,7 +1,7 @@ from abc import abstractmethod import numpy as np -from pymgrid.modular_microgrid import DEFAULT_HORIZON +from pymgrid.microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseMicrogridModule from pymgrid.forecast.forecaster import get_forecaster diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index da618da6..e5184cf3 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.modular_microgrid import DEFAULT_HORIZON +from pymgrid.microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseTimeSeriesMicrogridModule diff --git a/src/pymgrid/modules/load_module.py b/src/pymgrid/modules/load_module.py index 8967bc99..39d220b3 100644 --- a/src/pymgrid/modules/load_module.py +++ b/src/pymgrid/modules/load_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.modular_microgrid import DEFAULT_HORIZON +from pymgrid.microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseTimeSeriesMicrogridModule diff --git a/src/pymgrid/modules/renewable_module.py b/src/pymgrid/modules/renewable_module.py index 30903a20..4a2aff40 100644 --- a/src/pymgrid/modules/renewable_module.py +++ b/src/pymgrid/modules/renewable_module.py @@ -1,7 +1,7 @@ import numpy as np import yaml -from pymgrid.modular_microgrid import DEFAULT_HORIZON +from pymgrid.microgrid import DEFAULT_HORIZON from pymgrid.modules.base import BaseTimeSeriesMicrogridModule From 3f0040e053ee727e484cb096d522fcb19899a717 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 21:53:31 -0500 Subject: [PATCH 37/88] rename modular_microgrid.py to microgrid.py --- src/pymgrid/convert/convert.py | 2 +- src/pymgrid/microgrid/__init__.py | 2 +- src/pymgrid/microgrid/{modular_microgrid.py => microgrid.py} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename src/pymgrid/microgrid/{modular_microgrid.py => microgrid.py} (100%) diff --git a/src/pymgrid/convert/convert.py b/src/pymgrid/convert/convert.py index db434c2b..eabe391e 100644 --- a/src/pymgrid/convert/convert.py +++ b/src/pymgrid/convert/convert.py @@ -1,5 +1,5 @@ from pymgrid._deprecated.non_modular_microgrid import NonModularMicrogrid -from pymgrid.microgrid.modular_microgrid import Microgrid +from pymgrid.microgrid.microgrid import Microgrid from pymgrid.convert.get_module import get_module from pymgrid.convert.to_nonmodular_ops import check_viability, add_params_from_module, get_empty_params, finalize_params diff --git a/src/pymgrid/microgrid/__init__.py b/src/pymgrid/microgrid/__init__.py index 466581a8..f728feae 100644 --- a/src/pymgrid/microgrid/__init__.py +++ b/src/pymgrid/microgrid/__init__.py @@ -1,3 +1,3 @@ DEFAULT_HORIZON = 23 -from .modular_microgrid import Microgrid +from .microgrid import Microgrid diff --git a/src/pymgrid/microgrid/modular_microgrid.py b/src/pymgrid/microgrid/microgrid.py similarity index 100% rename from src/pymgrid/microgrid/modular_microgrid.py rename to src/pymgrid/microgrid/microgrid.py From 2478d8474f8813eee0734267fef91c236df94ff6 Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:44:54 -0800 Subject: [PATCH 38/88] clean up arg in modules --- src/pymgrid/modules/load_module.py | 3 ++- src/pymgrid/modules/renewable_module.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pymgrid/modules/load_module.py b/src/pymgrid/modules/load_module.py index 39d220b3..438e069d 100644 --- a/src/pymgrid/modules/load_module.py +++ b/src/pymgrid/modules/load_module.py @@ -11,7 +11,8 @@ class LoadModule(BaseTimeSeriesMicrogridModule): yaml_dumper = yaml.SafeDumper yaml_loader = yaml.SafeLoader - def __init__(self, time_series, + def __init__(self, + time_series, loss_load_cost, forecaster=None, forecast_horizon=DEFAULT_HORIZON, diff --git a/src/pymgrid/modules/renewable_module.py b/src/pymgrid/modules/renewable_module.py index 4a2aff40..fd5ea6d7 100644 --- a/src/pymgrid/modules/renewable_module.py +++ b/src/pymgrid/modules/renewable_module.py @@ -11,7 +11,8 @@ class RenewableModule(BaseTimeSeriesMicrogridModule): yaml_loader = yaml.SafeLoader yaml_dumper = yaml.SafeDumper - def __init__(self, time_series, + def __init__(self, + time_series, raise_errors=False, forecaster=None, forecast_horizon=DEFAULT_HORIZON, From 8f184bae139e870f81971c017497f611d4aab201 Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:46:18 -0800 Subject: [PATCH 39/88] add Microgrid docstring --- src/pymgrid/microgrid/microgrid.py | 77 +++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index 102ef511..8db12a62 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -13,6 +13,65 @@ class Microgrid(yaml.YAMLObject): + """ + Microgrid class, used to define and simulate an environment with a variety of modules. + + Parameters + ---------- + modules: List[Union[Tuple[str, BaseMicrogridModule], BaseMicrogridModule]] + List of modules that define the microgrid. The list can contain either/both microgrid modules -- subclasses of + ``BaseMicrogridModule`` -- and tuples of length two, which must contain a string defining the name of the module + followed by the module. + + ``Microgrid`` groups modules into lists based on their names. If no name is given (e.g. an element in ``modules`` + is a subclass of ``BaseMicrogridModule`` and not a tuple, then the name is defined to be + ``module.__class__.__name__[0]``. Modules are then exposed (within lists) by name as attributes to the microgrid. + See below for an example. + add_unbalanced_module: bool, default True. + Whether to add an unbalanced energy module to your microgrid. Such a module computes and attributes + costs to any excess supply or demand. + Set to True unless ``modules`` contains an ``UnbalancedEnergyModule``. + loss_load_cost: float, default 10.0 + Cost per unit of unmet demand. Ignored if ``add_unbalanced_module=False``. + overgeneration_cost: float, default 2.0 + Cost per unit of excess generation. Ignored if ``add_unbalanced_module=False``. + + Examples + -------- + >>> timesteps = 10 + >>> load = LoadModule(10*np.random.rand(timesteps), loss_load_cost=10.) + >>> pv = RenewableModule(10*np.random.rand(timesteps)) + >>> grid = GridModule(max_import=100, max_export=10, time_series=np.random.rand(timesteps, 3)) + >>> battery_0 = BatteryModule(min_capacity=0, + max_capacity=100, + max_charge=1, + max_discharge=10, + efficiency=0.9, + init_soc=0.5) + >>> battery_1 = BatteryModule(min_capacity=1, + max_capacity=20, + max_charge=5, + max_discharge=10, + efficiency=0.9, + init_soc=0.5) + + >>> microgrid = Microgrid(modules=[load, ('pv', pv), grid, battery_0, battery_1]) + >>> # The modules are now available as attributes. The exception to this is `load`, which is an exposed method. + >>> print(microgrid.pv) + [RenewableModule(time_series=, raise_errors=False, forecaster=NoForecaster, forecast_horizon=0, forecaster_increase_uncertainty=False, provided_energy_name=renewable_used)] + >>> print(microgrid.grid) + [GridModule(max_import=100, max_export=10)] + >>> print(microgrid.grid.item()) # Return the module instead of a list containing the module, if list has one item. + GridModule(max_import=100, max_export=10) + >>> for j, battery in enumerate(microgrid.battery): + >>> print(f"Battery {j}:\n\t{battery}") + Battery 0: + BatteryModule(min_capacity=0, max_capacity=100, max_charge=1, max_discharge=10, efficiency=0.9, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False) + Battery 1: + BatteryModule(min_capacity=1, max_capacity=20, max_charge=5, max_discharge=10, efficiency=0.9, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False) + + """ + yaml_tag = u"!Microgrid" yaml_dumper = yaml.SafeDumper yaml_loader = yaml.SafeLoader @@ -20,19 +79,13 @@ class Microgrid(yaml.YAMLObject): def __init__(self, modules, add_unbalanced_module=True, - loss_load_cost=10, - overgeneration_cost=2): - """ - - :param modules: list-like. List of _modules or tuples. Latter case: tup(str, Module); str to define name of module - and second element is the module. - - """ - + loss_load_cost=10., + overgeneration_cost=2.): self._modules = self._get_module_container(modules, - add_unbalanced_module, - loss_load_cost, - overgeneration_cost) + add_unbalanced_module, + loss_load_cost, + overgeneration_cost) + self._balance_logger = ModularLogger() def _get_unbalanced_energy_module(self, From 5583f1bce3d9f3958fc82822cc0a5eca6c59d0ae Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:46:45 -0800 Subject: [PATCH 40/88] remove traceback in modularmicrogrid attributeerrors --- src/pymgrid/microgrid/microgrid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index 8db12a62..4bce3940 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -384,4 +384,4 @@ def __getattr__(self, item): except AttributeError: names = ", ".join([f'"{x}"' for x in self.modules.names()]) raise AttributeError(f'ModularMicrogrid has no attribute "{item}". ' - f'Did you mean one of the modules {names}?') + f'Did you mean one of the modules {names}?').with_traceback(None) From 6de7de6347967e3e9096e562ef4bdaa846e21eed Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:47:09 -0800 Subject: [PATCH 41/88] clean up get_forecaster docstring --- src/pymgrid/forecast/forecaster.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/pymgrid/forecast/forecaster.py b/src/pymgrid/forecast/forecaster.py index 60f200d3..6e6fe910 100644 --- a/src/pymgrid/forecast/forecaster.py +++ b/src/pymgrid/forecast/forecaster.py @@ -6,7 +6,11 @@ def get_forecaster(forecaster, forecast_horizon, time_series=None, increase_uncertainty=False): """ Get the forecasting function for the time series module. - :param forecaster: callable, float, "oracle", or None, default None. Function that gives a forecast n-steps ahead. + + Parameters + ---------- + forecaster: callable, float, "oracle", or None, default None. + Function that gives a forecast n-steps ahead. If callable, must take as arguments (val_c: float, val_{c+n}: float, n: int), where: val_c is the current value in the time series: self.time_series[self.current_step], val_{c+n} is the value in the time series n steps in the future, @@ -21,17 +25,20 @@ def get_forecaster(forecaster, forecast_horizon, time_series=None, increase_unce If None, no forecast. - :param forecast_horizon: int. Number of steps in the future to forecast. If forecaster is None, ignored and 0 is returned. + forecast_horizon: int. Number of steps in the future to forecast. If forecaster is None, ignored and 0 is returned. - :param time_series: ndarray[float] or None, default None. + time_series: ndarray[float] or None, default None. The underlying time series, used to validate UserDefinedForecaster. Only used if callable(forecaster). - :param increase_uncertainty: bool, default False. Whether to increase uncertainty for farther-out dates if using + increase_uncertainty: bool, default False. Whether to increase uncertainty for farther-out dates if using a GaussianNoiseForecaster. Ignored otherwise. - :return: - forecast, callable[float, float, int]. The forecasting function. + Returns + ------- + forecast, callable[float, float, int]. + The forecasting function. + """ if forecaster is None: From e09fa7d0ab84af639aae0bb6e64b5d1ec828d116 Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:47:25 -0800 Subject: [PATCH 42/88] better GridModule docstring --- src/pymgrid/modules/grid_module.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index e5184cf3..94aaf282 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -7,19 +7,24 @@ class GridModule(BaseTimeSeriesMicrogridModule): """ - Module representing a grid + Module representing a grid. - :param max_import: float. Maximum import at any time step. + Parameters + ---------- + max_import: float + Maximum import at any time step. - :param max_export: float. Maximum export at any time step. + max_export: float + Maximum export at any time step. - :param time_series: array-like, shape (n_features, n_steps), n_features = {3, 4}. + time_series: array-like, shape (n_features, n_steps), n_features = {3, 4} If n_features=3, time series of (import_price, export_price, co2_per_kwH) in each column, respectively. Grid is assumed to have no outages. If n_features=4, time series of (import_price, export_price, co2_per_kwH, grid_status) in each column, respectively. time_series[:, -1] -- the grid status -- must be binary. - :param forecaster: callable, float, "oracle", or None, default None. Function that gives a forecast n-steps ahead. + forecaster: callable, float, "oracle", or None, default None. + Function that gives a forecast n-steps ahead. If callable, must take as arguments (val_c: float, val_{c+n}: float, n: int), where: val_c is the current value in the time series: self.time_series[self.current_step], val_{c+n} is the value in the time series n steps in the future, @@ -34,18 +39,21 @@ class GridModule(BaseTimeSeriesMicrogridModule): If None, no forecast. - :param forecast_horizon: int. Number of steps in the future to forecast. If forecaster is None, ignored and 0 is returned. + forecast_horizon: int. + Number of steps in the future to forecast. If forecaster is None, ignored and 0 is returned. - :param forecaster_increase_uncertainty: bool, default False. Whether to increase uncertainty for farther-out dates if using - a GaussianNoiseForecaster. Ignored otherwise. + forecaster_increase_uncertainty: bool, default False + Whether to increase uncertainty for farther-out dates if using a GaussianNoiseForecaster. Ignored otherwise. - :param cost_per_unit_co2: float, default 0.0. Marginal cost of grid co2 production. + cost_per_unit_co2: float, default 0.0 + Marginal cost of grid co2 production. - :param raise_errors: bool, default False. + raise_errors: bool, default False Whether to raise errors if bounds are exceeded in an action. If False, actions are clipped to the limit possible. """ + module_type = ('grid', 'fixed') yaml_tag = u"!GridModule" yaml_loader = yaml.SafeLoader From 07321b5c0104177e7c6350b3f19c2236b1cc6e2a Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:47:45 -0800 Subject: [PATCH 43/88] allow accessing values by keys in module pointers --- src/pymgrid/modules/module_container.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pymgrid/modules/module_container.py b/src/pymgrid/modules/module_container.py index f3ab2d21..89516ba5 100644 --- a/src/pymgrid/modules/module_container.py +++ b/src/pymgrid/modules/module_container.py @@ -154,6 +154,15 @@ def iterlist(self): for module in self.module_list(): yield module + def __getitem__(self, item): + try: + return self.data[item] + except KeyError: + try: + return self.module_dict()[item] + except KeyError: + raise KeyError(item) + def __len__(self): return sum(len(v) for k, v in self.items()) From a95ec8241ccb34d86153d328f9680889a6a1ea99 Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 12:47:59 -0800 Subject: [PATCH 44/88] clean up _ModuleSubContainer --- src/pymgrid/modules/module_container.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/pymgrid/modules/module_container.py b/src/pymgrid/modules/module_container.py index 89516ba5..19e02e95 100644 --- a/src/pymgrid/modules/module_container.py +++ b/src/pymgrid/modules/module_container.py @@ -260,7 +260,7 @@ def _get_source_sink(module): f'Module {name} of type {module.__class__.module_type[1]} conflicts with previous modules' f'of type {fixed_or_flex}') if source_or_sink is not None and _get_source_sink(module) != source_or_sink: - raise ValueError('Subcontainer must only one of sources, sinks, or sources and sinks, but not combinations.' + raise ValueError('Subcontainer must be one of sources, sinks, or sources and sinks, but not combinations.' f'Module {name} of type {_get_source_sink(module)} conflicts with previous modules' f'of type {source_or_sink}') @@ -283,7 +283,6 @@ def iterdict(self): for name, modules in self.items(): yield name, modules - def __len__(self): return sum([len(v) for k, v in self.items()]) From 2315fa0ee74adc22ae12a26c5bf5def81ee5dfe1 Mon Sep 17 00:00:00 2001 From: ahalev Date: Sat, 19 Nov 2022 13:01:08 -0800 Subject: [PATCH 45/88] add docs --- docs/Makefile | 20 ++++++++++++++++++++ docs/make.bat | 35 +++++++++++++++++++++++++++++++++++ docs/source/conf.py | 30 ++++++++++++++++++++++++++++++ docs/source/index.rst | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 docs/Makefile create mode 100644 docs/make.bat create mode 100644 docs/source/conf.py create mode 100644 docs/source/index.rst diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..dc1312ab --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..9cbf6160 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,30 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'pymgrid' +copyright = '2022, Avishai Halev' +author = 'Avishai Halev' +release = '0.1' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + 'sphinx.ext.duration', +] + +templates_path = ['_templates'] +exclude_patterns = [] + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'alabaster' +html_static_path = ['_static'] diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 00000000..db420610 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,35 @@ +.. pymgrid documentation master file, created by + sphinx-quickstart on Sat Nov 19 12:49:18 2022. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to pymgrid's documentation! +=================================== + +**pymgrid** is a Python library to simulate tertiary control of electrical microgrids. **pymgrid** allows +users to create and customize microgrids of their choosing. These microgrids can then be controlled using a user-defined +algorithm or one of the control algorithms contained in **pymgrid**: rule-based control and model predictive control. + +Environments corresponding to the OpenAI-Gym API are also provided, with both continuous and discrete action space +environments available. These environments can be used with your choice of reinforcement learning algorithm to train +a control algorithm. + +**pymgrid** attempts to offer the simplest and most intuitive API possible, allowing the user to +focus on their particular application. + +.. note:: + + This project is under active development. + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` From 39d1071bd1d85e64451da36bb8fc9a9e5acffa03 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:48:33 -0500 Subject: [PATCH 46/88] update setup.py for docs --- setup.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4949ab7d..f13ca2d1 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,13 @@ EXTRAS = dict() EXTRAS["genset_mpc"] = ["Mosek", "cvxopt"] -EXTRAS["dev"] = ["pytest", "flake8", *EXTRAS["genset_mpc"]] +EXTRAS["dev"] = [ + "pytest", + "flake8", + "sphinx", + "pydata_sphinx_theme", + "numpydoc", + *EXTRAS["genset_mpc"]] EXTRAS["all"] = list(set(sum(EXTRAS.values(), []))) From 31274885ba7e1176bad13a1f9f7eb2532e330f54 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:49:39 -0500 Subject: [PATCH 47/88] add pymgrid import to conf.py --- docs/source/conf.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 9cbf6160..895b9615 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -3,6 +3,13 @@ # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent.parent)) + +import pymgrid + # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information From 2dc09f0f5a03eb1ada348556382d89319d7641ad Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:50:00 -0500 Subject: [PATCH 48/88] copyright total --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 895b9615..f24204e1 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -14,7 +14,7 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = 'pymgrid' -copyright = '2022, Avishai Halev' +copyright = '2022, TotalEnergies' author = 'Avishai Halev' release = '0.1' From db88d483bf9bb86c5a4e059abdf67e374a6116b7 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:50:17 -0500 Subject: [PATCH 49/88] add version link --- docs/source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index f24204e1..698ec34c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,7 +16,8 @@ project = 'pymgrid' copyright = '2022, TotalEnergies' author = 'Avishai Halev' -release = '0.1' +release = pymgrid.__version__ +version = pymgrid.__version__ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration From 0dc2b113411b8c651d477eecb50886440d422fa6 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:50:33 -0500 Subject: [PATCH 50/88] use pydata theme --- docs/source/conf.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 698ec34c..60dbb343 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -24,6 +24,10 @@ extensions = [ 'sphinx.ext.duration', + 'sphinx.ext.autodoc', + 'sphinx.ext.coverage', + # 'sphinx.ext.napoleon', + 'sphinx.ext.doctest' ] templates_path = ['_templates'] @@ -34,5 +38,10 @@ # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = 'alabaster' +html_theme = 'pydata_sphinx_theme' + +html_theme_options = { + "primary_sidebar_end": ["indices.html", "sidebar-ethical-ads.html"] +} + html_static_path = ['_static'] From c403929a5b22b0055f69a373603fd5c418ba7f03 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:50:55 -0500 Subject: [PATCH 51/88] update index.rst --- docs/source/index.rst | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index db420610..2dbab227 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -3,28 +3,42 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Welcome to pymgrid's documentation! -=================================== +********************* +pymgrid documentation +********************* -**pymgrid** is a Python library to simulate tertiary control of electrical microgrids. **pymgrid** allows +**Version**: |version| + +*pymgrid* is a Python library to simulate tertiary control of electrical microgrids. *pymgrid* allows users to create and customize microgrids of their choosing. These microgrids can then be controlled using a user-defined -algorithm or one of the control algorithms contained in **pymgrid**: rule-based control and model predictive control. +algorithm or one of the control algorithms contained in *pymgrid*: rule-based control and model predictive control. Environments corresponding to the OpenAI-Gym API are also provided, with both continuous and discrete action space environments available. These environments can be used with your choice of reinforcement learning algorithm to train a control algorithm. -**pymgrid** attempts to offer the simplest and most intuitive API possible, allowing the user to +*pymgrid* attempts to offer the simplest and most intuitive API possible, allowing the user to focus on their particular application. +See the :doc:`getting_started` section for further information, including instructions on how to +:ref:`install ` the project. + +**Useful links**: +`Binary Installers `__ | +`Source Repository `__ + + .. note:: This project is under active development. .. toctree:: - :maxdepth: 2 + :maxdepth: 3 :caption: Contents: + getting_started + reference/index + examples/index Indices and tables From fc5b2715b4b9a60d8824f12e781dd1c7d2e3dc4e Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:51:13 -0500 Subject: [PATCH 52/88] update modular microgrid docstring --- src/pymgrid/microgrid/microgrid.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index 4bce3940..0b680ac1 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -64,11 +64,9 @@ class Microgrid(yaml.YAMLObject): >>> print(microgrid.grid.item()) # Return the module instead of a list containing the module, if list has one item. GridModule(max_import=100, max_export=10) >>> for j, battery in enumerate(microgrid.battery): - >>> print(f"Battery {j}:\n\t{battery}") - Battery 0: - BatteryModule(min_capacity=0, max_capacity=100, max_charge=1, max_discharge=10, efficiency=0.9, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False) - Battery 1: - BatteryModule(min_capacity=1, max_capacity=20, max_charge=5, max_discharge=10, efficiency=0.9, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False) + >>> print(f"Battery {j}: {battery}") + Battery 0: BatteryModule(min_capacity=0, max_capacity=100, max_charge=1, max_discharge=10, efficiency=0.9, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False) + Battery 1: BatteryModule(min_capacity=1, max_capacity=20, max_charge=5, max_discharge=10, efficiency=0.9, battery_cost_cycle=0.0, battery_transition_model=None, init_charge=None, init_soc=0.5, raise_errors=False) """ From 745f0c5da70637962123ba5129f58a169c367010 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:51:41 -0500 Subject: [PATCH 53/88] add getting started --- docs/source/getting_started.rst | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/source/getting_started.rst diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst new file mode 100644 index 00000000..8b20c094 --- /dev/null +++ b/docs/source/getting_started.rst @@ -0,0 +1,40 @@ +Getting Started +=============== + +.. _installation: + +Installation +------------ + +The easiest way to install *pymgrid* is with pip: + +.. code-block:: console + + $ pip install -U pymgrid + +Alternatively, you can install from source. First clone the repo: + +.. code-block:: bash + + $ git clone https://github.com/Total-RD/pymgrid.git + +Then navigate to the root directory of pymgrid and call + +.. code-block:: bash + + $ pip install . + +Advanced Installation +--------------------- + +To use the included model predictive control algorithm on microgrids containing gensets, +additional dependencies are required as the optimization problem becomes mixed integer. + +The packages MOSEK and CVXOPT can both handle this case; you can install both by calling + +.. code-block:: bash + + $ pip install pymgrid[genset_mpc] + +Note that MOSEK requires a license; see https://www.mosek.com/ for details. +Academic and trial licenses are available. \ No newline at end of file From 7ce6a6f23a3eca1f4f737453014351a35336d82d Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:52:08 -0500 Subject: [PATCH 54/88] add reference docs --- docs/source/reference/index.rst | 10 ++++++++++ docs/source/reference/microgrid.rst | 5 +++++ docs/source/reference/modules/index.rst | 2 ++ 3 files changed, 17 insertions(+) create mode 100644 docs/source/reference/index.rst create mode 100644 docs/source/reference/microgrid.rst create mode 100644 docs/source/reference/modules/index.rst diff --git a/docs/source/reference/index.rst b/docs/source/reference/index.rst new file mode 100644 index 00000000..a69f9b4a --- /dev/null +++ b/docs/source/reference/index.rst @@ -0,0 +1,10 @@ +API reference +============= + +This page contains an overview of all public *pymgrid* objects and functions. + +.. toctree:: + :maxdepth: 2 + + microgrid + modules/index diff --git a/docs/source/reference/microgrid.rst b/docs/source/reference/microgrid.rst new file mode 100644 index 00000000..bc85df23 --- /dev/null +++ b/docs/source/reference/microgrid.rst @@ -0,0 +1,5 @@ +pymgrid.Microgrid +----------------- + +.. currentmodule:: pymgrid +.. autoclass:: Microgrid \ No newline at end of file diff --git a/docs/source/reference/modules/index.rst b/docs/source/reference/modules/index.rst new file mode 100644 index 00000000..6b807ee8 --- /dev/null +++ b/docs/source/reference/modules/index.rst @@ -0,0 +1,2 @@ +Modules +------- \ No newline at end of file From e93eeb1fe8177ffc4b9bfa8248a50d48c4033cc2 Mon Sep 17 00:00:00 2001 From: ahalev Date: Tue, 22 Nov 2022 14:52:22 -0500 Subject: [PATCH 55/88] add empty examples docs --- docs/source/examples/index.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 docs/source/examples/index.rst diff --git a/docs/source/examples/index.rst b/docs/source/examples/index.rst new file mode 100644 index 00000000..3ef18998 --- /dev/null +++ b/docs/source/examples/index.rst @@ -0,0 +1,4 @@ +Examples +======== + +This page is under development. \ No newline at end of file From c943df4604fe7322232ab08614e60706a6ce0f3e Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:17:17 -0500 Subject: [PATCH 56/88] add autosummary to autodocs --- docs/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 60dbb343..97e8c21c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -26,6 +26,7 @@ 'sphinx.ext.duration', 'sphinx.ext.autodoc', 'sphinx.ext.coverage', + 'sphinx.ext.autosummary', # 'sphinx.ext.napoleon', 'sphinx.ext.doctest' ] From eaf64718b23b5f1a61ea04a94588b51c9d5814a5 Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:17:38 -0500 Subject: [PATCH 57/88] add ability to exclude class methods from docs --- docs/source/conf.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 97e8c21c..1cbcf8d9 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -46,3 +46,23 @@ } html_static_path = ['_static'] + + +def autodoc_skip_member(app, what, name, obj, skip, options): + + if what != 'method': + return None + + try: + exclusions = obj.__self__.__autodoc_exclusions__ + except AttributeError: # not a method of an object, or object has no attribute '__autodoc_exclusions__' + return None + + if name in exclusions: + return True + + return None + + +def setup(app): + app.connect('autodoc-skip-member', autodoc_skip_member) From 1d389fbf0adede71238726feb21fdbdcfe3c1578 Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:18:10 -0500 Subject: [PATCH 58/88] update index tree --- docs/source/index.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 2dbab227..f6a0bd2c 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -32,9 +32,11 @@ See the :doc:`getting_started` section for further information, including instru This project is under active development. +Contents +======== + .. toctree:: :maxdepth: 3 - :caption: Contents: getting_started reference/index From 182ea82a060c222179ec91d0a76ae86b916d2070 Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:18:38 -0500 Subject: [PATCH 59/88] add microgrid rst file --- docs/source/reference/microgrid.rst | 41 ++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/docs/source/reference/microgrid.rst b/docs/source/reference/microgrid.rst index bc85df23..00cef107 100644 --- a/docs/source/reference/microgrid.rst +++ b/docs/source/reference/microgrid.rst @@ -1,5 +1,40 @@ -pymgrid.Microgrid ------------------ +.. _api.microgrid: + + +Microgrid +================= .. currentmodule:: pymgrid -.. autoclass:: Microgrid \ No newline at end of file + +Constructor +----------- +.. autosummary:: + :toctree: api/microgrid/ + + Microgrid + +Methods +------- +.. autosummary:: + + :toctree: api/microgrid/ + + Microgrid.run + Microgrid.reset + Microgrid.sample_action + Microgrid.get_log + Microgrid.get_forecast_horizon + Microgrid.get_empty_action + +Serialization/IO/Conversion +--------------------------- +.. autosummary:: + + :toctree: api/microgrid/ + + Microgrid.load + Microgrid.dump + Microgrid.from_nonmodular + Microgrid.from_scenario + Microgrid.serialize + Microgrid.to_nonmodular \ No newline at end of file From ee36e2b05bb2674d2779e0e91c55d76dc5eb6822 Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:19:05 -0500 Subject: [PATCH 60/88] add modules index rst file --- docs/source/reference/modules/index.rst | 44 ++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/source/reference/modules/index.rst b/docs/source/reference/modules/index.rst index 6b807ee8..ec5bfbca 100644 --- a/docs/source/reference/modules/index.rst +++ b/docs/source/reference/modules/index.rst @@ -1,2 +1,44 @@ +.. _api.modules: + Modules -------- \ No newline at end of file +======= + +.. currentmodule:: pymgrid.modules + +The modules defined here are commonly found in microgrids. +Pass any combination of modules to :ref:`Microgrid ` to define and run a microgrid. + +Timeseries Modules +------------------ + +Modules that are temporal in nature. + + + +.. autosummary:: + :toctree: api/modules/ + + GridModule + LoadModule + RenewableModule + +Non-temporal Modules +------------- + +Modules that do not depend on an underlying timeseries. + +.. autosummary:: + :toctree: api/modules/ + + BatteryModule + GensetModule + +Helper Module +-------------- + +A module that cleans up after all the other modules are deployed. + +.. autosummary:: + :toctree: api/modules/ + + UnbalancedEnergyModule \ No newline at end of file From 53f316822362c8422866bf36c255f03a8e2ed40c Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:19:27 -0500 Subject: [PATCH 61/88] add autosummary templates --- docs/source/_templates/autosummary/base.rst | 5 +++ docs/source/_templates/autosummary/class.rst | 34 ++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 docs/source/_templates/autosummary/base.rst create mode 100644 docs/source/_templates/autosummary/class.rst diff --git a/docs/source/_templates/autosummary/base.rst b/docs/source/_templates/autosummary/base.rst new file mode 100644 index 00000000..3fe9858d --- /dev/null +++ b/docs/source/_templates/autosummary/base.rst @@ -0,0 +1,5 @@ +{{ objname | escape | underline }} + +.. currentmodule:: {{ module }} + +.. auto{{ objtype }}:: {{ objname }} diff --git a/docs/source/_templates/autosummary/class.rst b/docs/source/_templates/autosummary/class.rst new file mode 100644 index 00000000..5a47cff2 --- /dev/null +++ b/docs/source/_templates/autosummary/class.rst @@ -0,0 +1,34 @@ +{{ fullname | escape | underline}} + +.. currentmodule:: {{ module }} + +.. autoclass:: {{ objname }} + + {% block methods %} + + {% if methods %} + .. rubric:: {{ _('Methods') }} + + .. autosummary:: + :toctree: generated/ + + {% for item in methods %} + {% if item != "__init__" %} + ~{{ name }}.{{ item }} + {% endif %} + {%- endfor %} + {% endif %} + {% endblock %} + + {% block attributes %} + {% if attributes %} + .. rubric:: {{ _('Attributes') }} + + .. autosummary:: + :toctree: generated/ + + {% for item in attributes %} + ~{{ name }}.{{ item }} + {%- endfor %} + {% endif %} + {% endblock %} From 5201d826e9c8161433168c1ec0886b4bbf34a8ea Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:28:15 -0500 Subject: [PATCH 62/88] update location of module autosummaries --- docs/source/reference/modules/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/reference/modules/index.rst b/docs/source/reference/modules/index.rst index ec5bfbca..b09bfe66 100644 --- a/docs/source/reference/modules/index.rst +++ b/docs/source/reference/modules/index.rst @@ -16,7 +16,7 @@ Modules that are temporal in nature. .. autosummary:: - :toctree: api/modules/ + :toctree: ../api/modules/ GridModule LoadModule @@ -28,7 +28,7 @@ Non-temporal Modules Modules that do not depend on an underlying timeseries. .. autosummary:: - :toctree: api/modules/ + :toctree: ../api/modules/ BatteryModule GensetModule @@ -39,6 +39,6 @@ Helper Module A module that cleans up after all the other modules are deployed. .. autosummary:: - :toctree: api/modules/ + :toctree: ../api/modules/ UnbalancedEnergyModule \ No newline at end of file From a452424a2b959bf3259422f93625e88147907251 Mon Sep 17 00:00:00 2001 From: ahalev Date: Wed, 23 Nov 2022 12:28:34 -0500 Subject: [PATCH 63/88] ignore autogen autosummaries --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0820afb5..2215c23f 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ parts/ sdist/ var/ wheels/ +docs/source/reference/api/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ From 363989ab8c0b9d6e90807d2bfb7e192863668212 Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:00:02 -0500 Subject: [PATCH 64/88] change some grid methods to properties --- src/pymgrid/algos/mpc/mpc.py | 6 ++--- src/pymgrid/modules/grid_module.py | 43 +++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/pymgrid/algos/mpc/mpc.py b/src/pymgrid/algos/mpc/mpc.py index 8ce609ad..0ba0b831 100644 --- a/src/pymgrid/algos/mpc/mpc.py +++ b/src/pymgrid/algos/mpc/mpc.py @@ -874,9 +874,9 @@ def _get_modular_state_values(self): else: grid_status = np.ones(self.horizon) - price_import = grid.import_price() - price_export = grid.export_price() - grid_co2_per_kwh = grid.co2_per_kwh() + price_import = grid.import_price + price_export = grid.export_price + grid_co2_per_kwh = grid.co2_per_kwh cost_co2 = [grid.cost_per_unit_co2] grid_max_import, grid_max_export = grid.max_import, grid.max_export diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index 94aaf282..b5a04279 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -151,21 +151,62 @@ def as_flex(self): def as_fixed(self): self.__class__.module_type = (self.__class__.module_type[0], 'fixed') + @property def import_price(self): + """ + Current and forecasted import prices. + + Returns + ------- + prices : np.ndarray, shape (forecast_horizon, ) + prices[0] gives the current import price while prices[1:] gives forecasted import prices. + + """ return self.state[::4] + @property def export_price(self): + """ + Current and forecasted export prices. + + Returns + ------- + prices : np.ndarray, shape (forecast_horizon, ) + prices[0] gives the current export price while prices[1:] gives forecasted export prices. + + """ return self.state[1::4] + @property def co2_per_kwh(self): + """ + Current and forecasted carbon dioxide production per kWh. + + Returns + ------- + marginal_production : np.ndarray, shape (forecast_horizon, ) + marginal_production[0] gives the current production per kWh while + marginal_production[1:] gives forecasted production per kWh. + + """ return self.state[2::4] + @property def grid_status(self): + """ + Current and forecasted grid status. + + Returns + ------- + status : np.ndarray, shape (forecast_horizon, ) + status[0] gives the current status of the grid while status[1:] gives forecasted status. + + """ return self.state[3::4] @property def current_status(self): - return self.grid_status()[0] + return self.grid_status[0] @property def state_components(self): From 163919fd84d86fb27c0b10324df273f0179e9bd8 Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:00:24 -0500 Subject: [PATCH 65/88] fix grid module docstring --- src/pymgrid/modules/grid_module.py | 42 +++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index b5a04279..11c2a1e2 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -7,48 +7,48 @@ class GridModule(BaseTimeSeriesMicrogridModule): """ - Module representing a grid. + An electrical grid module. Parameters ---------- - max_import: float + max_import : float Maximum import at any time step. - max_export: float + max_export : float Maximum export at any time step. - time_series: array-like, shape (n_features, n_steps), n_features = {3, 4} + time_series : array-like, shape (n_features, n_steps), n_features = {3, 4} If n_features=3, time series of (import_price, export_price, co2_per_kwH) in each column, respectively. - Grid is assumed to have no outages. + Grid is assumed to have no outages. If n_features=4, time series of (import_price, export_price, co2_per_kwH, grid_status) - in each column, respectively. time_series[:, -1] -- the grid status -- must be binary. + in each column, respectively. time_series[:, -1] -- the grid status -- must be binary. - forecaster: callable, float, "oracle", or None, default None. + forecaster : callable, float, "oracle", or None, default None. Function that gives a forecast n-steps ahead. - If callable, must take as arguments (val_c: float, val_{c+n}: float, n: int), where: - val_c is the current value in the time series: self.time_series[self.current_step], - val_{c+n} is the value in the time series n steps in the future, - n is the number of steps in the future at which we are forecasting. - The output forecast = forecaster(val_c, val_{c+n}, n) must have the same sign - as the inputs val_c and val_{c+n}. - - If float, serves as a standard deviation for a mean-zero gaussian noise function + * If callable, must take as arguments (val_c: float, val_{c+n}: float, n: int), where: + val_c is the current value in the time series: self.time_series[self.current_step], + val_{c+n} is the value in the time series n steps in the future, + n is the number of steps in the future at which we are forecasting. + The output forecast = forecaster(val_c, val_{c+n}, n) must have the same sign + as the inputs val_c and val_{c+n}. + + * If float, serves as a standard deviation for a mean-zero gaussian noise function that is added to the true value. - If "oracle", gives a perfect forecast. + * If "oracle", gives a perfect forecast. - If None, no forecast. + * If None, no forecast. - forecast_horizon: int. + forecast_horizon : int. Number of steps in the future to forecast. If forecaster is None, ignored and 0 is returned. - forecaster_increase_uncertainty: bool, default False + forecaster_increase_uncertainty : bool, default False Whether to increase uncertainty for farther-out dates if using a GaussianNoiseForecaster. Ignored otherwise. - cost_per_unit_co2: float, default 0.0 + cost_per_unit_co2 : float, default 0.0 Marginal cost of grid co2 production. - raise_errors: bool, default False + raise_errors : bool, default False Whether to raise errors if bounds are exceeded in an action. If False, actions are clipped to the limit possible. From e21e22027b533323dcc00affb609095a5eaaac18 Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:01:05 -0500 Subject: [PATCH 66/88] change get_bounds() to _get_bounds() --- .../modules/base/timeseries/base_timeseries_module.py | 6 +++--- src/pymgrid/modules/grid_module.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py index e4d88dff..22dd68f7 100644 --- a/src/pymgrid/modules/base/timeseries/base_timeseries_module.py +++ b/src/pymgrid/modules/base/timeseries/base_timeseries_module.py @@ -17,7 +17,7 @@ def __init__(self, absorbed_energy_name='absorbed_energy', normalize_pos=...): self._time_series = self._set_time_series(time_series) - self._min_obs, self._max_obs, self._min_act, self._max_act = self.get_bounds() + self._min_obs, self._max_obs, self._min_act, self._max_act = self._get_bounds() self._forecast_param = forecaster self.forecaster, self._forecast_horizon = get_forecaster(forecaster, forecast_horizon, @@ -38,7 +38,7 @@ def _set_time_series(self, time_series): assert len(_time_series) == len(time_series) return _time_series - def get_bounds(self): + def _get_bounds(self): _min, _max = np.min(self._time_series), np.max(self._time_series) if self.is_sink and not self.is_source: _min, _max = -1*_max, -1*_min @@ -79,7 +79,7 @@ def time_series(self): @time_series.setter def time_series(self, value): self._time_series = self._set_time_series(value) - self.get_bounds() + self._min_obs, self._max_obs, self._min_act, self._max_act = self._get_bounds() @property def min_obs(self): diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index 11c2a1e2..2c2669f6 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -103,7 +103,7 @@ def _check_params(self, max_import, max_export, time_series): return time_series - def get_bounds(self): + def _get_bounds(self): min_obs = self._time_series.min(axis=0) max_obs = self._time_series.max(axis=0) assert len(min_obs) in (3, 4) From 260b492447d8f9a4babdd41191fa7291b336042a Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:01:20 -0500 Subject: [PATCH 67/88] fix doc in microgrid --- src/pymgrid/microgrid/microgrid.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index 0b680ac1..f07cc0c9 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -18,7 +18,7 @@ class Microgrid(yaml.YAMLObject): Parameters ---------- - modules: List[Union[Tuple[str, BaseMicrogridModule], BaseMicrogridModule]] + modules : List[Union[Tuple[str, BaseMicrogridModule], BaseMicrogridModule]] List of modules that define the microgrid. The list can contain either/both microgrid modules -- subclasses of ``BaseMicrogridModule`` -- and tuples of length two, which must contain a string defining the name of the module followed by the module. @@ -27,13 +27,13 @@ class Microgrid(yaml.YAMLObject): is a subclass of ``BaseMicrogridModule`` and not a tuple, then the name is defined to be ``module.__class__.__name__[0]``. Modules are then exposed (within lists) by name as attributes to the microgrid. See below for an example. - add_unbalanced_module: bool, default True. + add_unbalanced_module : bool, default True. Whether to add an unbalanced energy module to your microgrid. Such a module computes and attributes costs to any excess supply or demand. Set to True unless ``modules`` contains an ``UnbalancedEnergyModule``. - loss_load_cost: float, default 10.0 + loss_load_cost : float, default 10.0 Cost per unit of unmet demand. Ignored if ``add_unbalanced_module=False``. - overgeneration_cost: float, default 2.0 + overgeneration_cost : float, default 2.0 Cost per unit of excess generation. Ignored if ``add_unbalanced_module=False``. Examples From 52ff59a99214a3add24e5a959c2e0bf084d37f72 Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:01:35 -0500 Subject: [PATCH 68/88] add autodoc exclusions to microgrid --- src/pymgrid/microgrid/microgrid.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index f07cc0c9..41fdf062 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -74,6 +74,8 @@ class Microgrid(yaml.YAMLObject): yaml_dumper = yaml.SafeDumper yaml_loader = yaml.SafeLoader + __autodoc_exclusions__ = 'from_yaml', 'to_yaml', 'serialize' + def __init__(self, modules, add_unbalanced_module=True, From 09c67fbd48db97cbbdd363d38cf726e67b6c35a9 Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:02:02 -0500 Subject: [PATCH 69/88] add microgrid docstrings --- src/pymgrid/microgrid/microgrid.py | 263 +++++++++++++++++++++++- src/pymgrid/modules/base/base_module.py | 15 +- 2 files changed, 270 insertions(+), 8 deletions(-) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index 41fdf062..f514a8c6 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -134,6 +134,14 @@ def _get_module_container(self, modules, add_unbalanced_module, loss_load_cost, return ModuleContainer(modules) def reset(self): + """ + Reset the microgrid and flush the log. + + Returns + ------- + dict[str, list[float]] + Observations from resetting the modules as well as the flushed balance log. + """ return { **{name: [module.reset() for module in module_list] for name, module_list in self.modules.iterdict()}, **{"balance": self._balance_logger.flush()} @@ -141,10 +149,28 @@ def reset(self): def run(self, control, normalized=True): """ - control must contain controls for all fixed _modules in the microgrid. - Flex _modules are consumed/deployed in the order passed to the microgrid (maybe this should be changed?) - :param control: dict. keys are names of all fixed _modules - :return: + + Run the microgrid for a single step. + + Parameters + ---------- + control : dict[str, list[float]] + Actions to pass to each fixed module. + normalized : bool, default True + Whether ``control`` is a normalized value or not. If not, each module de-normalizes its respective action. + + Returns + ------- + observation : dict[str, list[float]] + Observations of each module after using the passed ``control``. + reward : float + Reward/cost of running the microgrid. A positive value implies revenue while a negative + value is a cost. + done : bool + Whether the microgrid terminates. + info : dict + Additional information from this step. + """ control_copy = control.copy() microgrid_step = MicrogridStep() @@ -221,26 +247,117 @@ def _get_log_dict(self, provided_energy, absorbed_energy, log_dict=None, prefix= return _log_dict def sample_action(self, strict_bound=False, sample_flex_modules=False): + """ + Get a random action within the microgrid's action space. + + Parameters + ---------- + strict_bound : bool, default False + If True, choose actions that is guaranteed to satisfy self.max_consumption and + self.max_production bounds. Otherwise selects action from min_act and min_act, which may not satisfy + instantaneous bounds. + sample_flex_modules : bool, default false + Whether to sample the flex modules in the microgrid. + ``run`` does not expect actions for flex modules. + + Returns + ------- + + dict[str, list[float]] + Random action in the action space. + + """ + module_iterator = self._modules.module_dict() if sample_flex_modules else self._modules.fixed.module_dict() return {module_name: [module.sample_action(strict_bound=strict_bound) for module in module_list] for module_name, module_list in module_iterator.items()} def get_empty_action(self, sample_flex_modules=False): + """ + Get an action for the microgrid with no values set. + + Values are all ``None``; every ``None`` value should be replaced before passing an action to ``run``. + + Parameters + ---------- + sample_flex_modules : bool, default false + Whether to sample the flex modules in the microgrid. + ``run`` does not expect actions for flex modules. + + Returns + ------- + + dict[str, list[None]] + Empty action. + + """ module_iterator = self._modules.module_dict() if sample_flex_modules else self._modules.fixed.module_dict() return {module_name: [None]*len(module_list) for module_name, module_list in module_iterator.items()} - def to_normalized(self, data_dict, act=False, obs=False): + """ + Normalize an action or observation. + + Parameters + ---------- + data_dict : dict[str, list[int]] + Action or observation to normalize. Dictionary keys are names of the modules while dictionary values + are lists containing an action corresponding to all modules with that name. + act : bool, default False + Set to True if you are normalizing an action. + obs : bool, default False + Set to True if you are normalizing an observation. + + Returns + ------- + dict[str, list[float]] + Normalized action. + """ assert act + obs == 1, 'One of act or obs must be True but not both.' return {module_name: [module.to_normalized(value, act=act, obs=obs) for module, value in zip(module_list, data_dict[module_name])] for module_name, module_list in self._modules.iterdict() if module_name in data_dict} def from_normalized(self, data_dict, act=False, obs=False): + """ + De-normalize an action or observation. + + Parameters + ---------- + data_dict : dict[str, list[int]] + Action or observation to de-normalize. Dictionary keys are names of the modules while dictionary values + are lists containing an action corresponding to all modules with that name. + act : bool, default False + Set to True if you are de-normalizing an action. + obs : bool, default False + Set to True if you are de-normalizing an observation. + + Returns + ------- + dict[str, list[float]] + De-normalized action. + """ assert act + obs == 1, 'One of act or obs must be True but not both.' return {module_name: [module.from_normalized(value, act=act, obs=obs) for module, value in zip(module_list, data_dict[module_name])] for module_name, module_list in self._modules.iterdict() if module_name in data_dict} def get_log(self, as_frame=True, drop_singleton_key=False): + """ + + Collect a log of controls and responses of the microgrid. + + Parameters + ---------- + as_frame : bool, default True + Whether to return the log as a pd.DataFrame. If False, returns a nested dict. + drop_singleton_key : bool, default False + Whether to drop index level enumerating the modules by name if each module name has only one module. + Ignored otherwise. + + Returns + ------- + pd.DataFrame or dict + + """ _log_dict = dict() for name, modules in self._modules.iterdict(): for j, module in enumerate(modules): @@ -265,6 +382,20 @@ def get_log(self, as_frame=True, drop_singleton_key=False): return _log_dict def get_forecast_horizon(self): + """ + Get the forecast horizon of timeseries modules contained in the microgrid. + + Returns + ------- + int + The forecast horizon. + + Raises + ------ + ValueError + If horizons between modules are inconsistent. + + """ horizons = [] for module in self.iterlist(): try: @@ -286,10 +417,25 @@ def modules(self): @property def fixed_modules(self): + """ + List of all fixed modules in the microgrid. + + Returns + ------- + list of modules + """ return self._modules.fixed @property def flex_modules(self): + """ + List of all flex modules in the microgrid. + + Returns + ------- + list + The list of modules + """ return self._modules.flex @property @@ -298,17 +444,72 @@ def flat_modules(self): @property def module_list(self): + """ + List of all modules in the microgrid. + + Returns + ------- + list + The list of modules + + """ return self._modules.module_list() @property def n_modules(self): + """ + Number of modules in the microgrid. + + Returns + ------- + int + """ return len(self._modules) def dump(self, stream=None): + """ + Save a microgrid to a YAML buffer. + + Supports both strings of YAML or storing YAML in a path-like object. + + Parameters + ---------- + stream : file-like object or None, default None + Stream to save the YAML document. If None, returns the document instead. + + Returns + ------- + str or None : + Returns the YAMl document as a string if ``stream=None``. Returns None otherwise + + .. note:: + + ``dump`` handles the serialization of array-like objects (e.g. time series and logs) differently depending + on the value of ``stream``. If ``stream=None``, array-like objects are serialized inline. If ``stream`` is + a stream to a file-like object, however, array-like objects will be serialized as `.csv.gz` files in a + directory relative to ``stream``, and the relative locations stored inline in the YAML file. For an example of + this behavior, see `data/scenario/pymgrid25/microgrid_0`. + + """ return yaml.safe_dump(self, stream=stream) @classmethod def load(cls, stream): + """ + Load a microgrid from a yaml buffer. + + Supports both strings of YAML or YAML stored in a path-like object. + + Parameters + ---------- + stream : str or file-like object + YAML document. Can be either a string of loaded YAML or a stream to a local file containing a YAML document. + + Returns + ------- + Microgrid : the loaded microgrid. + + """ return yaml.safe_load(stream) @classmethod @@ -331,15 +532,67 @@ def serialize(self, dumper_stream): @classmethod def from_nonmodular(cls, nonmodular): + """ + Convert to Microgrid from old-style NonModularMicrogrid. + + Parameters + ---------- + nonmodular : pymgrid.NonModularMicrogrid + Non-modular (old-style) microgrid to be converted. + + Returns + ------- + converted : pymgrid.Microgrid + New-style modular microgrid. + + See Also + -------- + pymgrid.Microgrid.to_nonmodular : Converter from new-style to old-style. + + .. warning:: + + Any logs that have accumulated will be lost in conversion. + + """ from pymgrid.convert.convert import to_modular return to_modular(nonmodular) def to_nonmodular(self): + """ + Convert Microgrid to old-style NonModularMicrogrid. + + Returns + ------- + converted : pymgrid.NonModularMicrogrid + Old-style microgrid. + + See Also + -------- + :meth:`Microgrid.to_modular` : Converter from old-style to new-style. + + .. warning:: + + Any logs that have accumulated will be lost in conversion. + + """ from pymgrid.convert.convert import to_nonmodular return to_nonmodular(self) @classmethod def from_scenario(cls, microgrid_number=0): + """ + Load one of the *pymgrid25* benchmark microgrids. + + Parameters + ---------- + microgrid_number : int, default 0 + Number of the microgrid to return. 0<=microgrid_number<25. + + Returns + ------- + scenario : pymgrid.Microgrid + The loaded microgrid. + """ from pymgrid import PROJECT_PATH n = microgrid_number with open(PROJECT_PATH / f"data/scenario/pymgrid25/microgrid_{n}/microgrid_{n}.yaml", "r") as f: diff --git a/src/pymgrid/modules/base/base_module.py b/src/pymgrid/modules/base/base_module.py index fd1b9715..de4cc8fb 100644 --- a/src/pymgrid/modules/base/base_module.py +++ b/src/pymgrid/modules/base/base_module.py @@ -215,11 +215,20 @@ def update(self, external_energy_change, as_source=False, as_sink=False): def sample_action(self, strict_bound=False): """ - Need to change this in the case of non-singleton action space - :param strict_bound: bool. If True, choose action that is guaranteed to satisfy self.max_consumption and + + Sample an action from the module's action space. + + Parameters + ---------- + strict_bound : bool, default False + If True, choose action that is guaranteed to satisfy self.max_consumption and self.max_production bounds. Otherwise select action from min_act and min_act, which may not satisfy instantaneous bounds. - :return: + + Returns + ------- + float + An action within the action space for this module. """ min_bound, max_bound = 0, 1 From cb571463d1fb07a5eb9f86d6f9a90c92d29c2d9b Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:02:12 -0500 Subject: [PATCH 70/88] fix indentation --- src/pymgrid/microgrid/microgrid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pymgrid/microgrid/microgrid.py b/src/pymgrid/microgrid/microgrid.py index f514a8c6..b3b7ef00 100644 --- a/src/pymgrid/microgrid/microgrid.py +++ b/src/pymgrid/microgrid/microgrid.py @@ -407,7 +407,7 @@ def get_forecast_horizon(self): warn(f"No forecast horizon found in microgrid.modules. Using default horizon {DEFAULT_HORIZON}") return DEFAULT_HORIZON elif not np.min(horizons) == np.max(horizons): - raise ValueError(f"Mismatched forecast_horizons found: {horizons}") + raise ValueError(f"Mismatched forecast_horizons found: {horizons}") return horizons[0] From d530b3149df4420513c420e73ea20867d3f4ace5 Mon Sep 17 00:00:00 2001 From: ahalev Date: Thu, 24 Nov 2022 01:02:21 -0500 Subject: [PATCH 71/88] fix comment indentation --- src/pymgrid/modules/grid_module.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pymgrid/modules/grid_module.py b/src/pymgrid/modules/grid_module.py index 2c2669f6..4acc9b2c 100644 --- a/src/pymgrid/modules/grid_module.py +++ b/src/pymgrid/modules/grid_module.py @@ -123,10 +123,10 @@ def update(self, external_energy_change, as_source=False, as_sink=False): return reward, self._done(), info def get_cost(self, import_export, as_source, as_sink): - if as_source: # Import + if as_source: # Import import_cost = self._time_series[self.current_step, 0] return -1 * import_cost*import_export + self.get_co2_cost(import_export, as_source, as_sink) - elif as_sink: # Export + elif as_sink: # Export export_cost = self._time_series[self.current_step, 1] return export_cost * import_export + self.get_co2_cost(import_export, as_source, as_sink) else: @@ -136,11 +136,11 @@ def get_co2_cost(self, import_export, as_source, as_sink): return -1.0 * self.cost_per_unit_co2*self.get_co2_production(import_export, as_source, as_sink) def get_co2_production(self, import_export, as_source, as_sink): - if as_source: # Import + if as_source: # Import co2_prod_per_kWh = self._time_series[self.current_step, 2] co2 = import_export*co2_prod_per_kWh return co2 - elif as_sink: # Export + elif as_sink: # Export return 0.0 else: raise RuntimeError From a6b3d2378a81e3068b916c5d99948070a7b87178 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 15:27:04 -0500 Subject: [PATCH 72/88] move version to py file --- setup.py | 4 +++- src/pymgrid/__init__.py | 4 +--- src/pymgrid/version.py | 1 + version.txt | 1 - 4 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 src/pymgrid/version.py delete mode 100644 version.txt diff --git a/setup.py b/setup.py index f13ca2d1..6fd62aeb 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,9 @@ from pathlib import Path from setuptools import setup, find_packages -VERSION = (Path(__file__).parent / "version.txt").read_text() +v = {} +exec(open('src/pymgrid/version.py').read(), v) # read __version__ +VERSION = v['__version__'] DESCRIPTION = "A simulator for tertiary control of electrical microgrids" DOWNLOAD_URL = f"https://github.com/Total-RD/pymgrid/archive/refs/tags/v{VERSION}.tar.gz" MAINTAINER = "Avishai Halev" diff --git a/src/pymgrid/__init__.py b/src/pymgrid/__init__.py index df0ad1a6..91e16617 100644 --- a/src/pymgrid/__init__.py +++ b/src/pymgrid/__init__.py @@ -1,10 +1,8 @@ from pathlib import Path - -__version__ = (Path(__file__).parent.parent.parent / "version.txt").read_text() +from .version import __version__ PROJECT_PATH = Path(__file__).parent from ._deprecated.non_modular_microgrid import NonModularMicrogrid from .microgrid import Microgrid from .MicrogridGenerator import MicrogridGenerator - diff --git a/src/pymgrid/version.py b/src/pymgrid/version.py new file mode 100644 index 00000000..3f6fab60 --- /dev/null +++ b/src/pymgrid/version.py @@ -0,0 +1 @@ +__version__ = '1.0.3' diff --git a/version.txt b/version.txt deleted file mode 100644 index e4c0d46e..00000000 --- a/version.txt +++ /dev/null @@ -1 +0,0 @@ -1.0.3 \ No newline at end of file From b73001a729b26a8c77f6cc4d1a5dc2ca0bafc978 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:12:24 -0500 Subject: [PATCH 73/88] add docs requirements --- docs/requirements.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 docs/requirements.txt diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 00000000..a79d89de --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +numpydoc +pydata_sphinx_theme From 8f7e10f57a8e2ebd90211f87e10a4e0e28231e70 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:20:50 -0500 Subject: [PATCH 74/88] add readthedocs yaml file --- .readthedocs.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..7a14c877 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,19 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-20.04 + tools: + python: "3.8" + +sphinx: + configuration: docs/conf.py + +python: + install: + - requirements: docs/requirements.txt \ No newline at end of file From b45e99176df43ba2fb304d16875452ca255d6b39 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:28:34 -0500 Subject: [PATCH 75/88] add master_doc in sphinx conf --- docs/source/conf.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1cbcf8d9..41f1e3ac 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -22,6 +22,8 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration +master_doc = 'index' + extensions = [ 'sphinx.ext.duration', 'sphinx.ext.autodoc', From 39c4fed03ab3cd7d6e6b4e885535365803236413 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:31:20 -0500 Subject: [PATCH 76/88] add versions to docs requirements --- docs/requirements.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index a79d89de..b20efec4 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,3 @@ -numpydoc -pydata_sphinx_theme +numpydoc==1.5.0 +pydata_sphinx_theme==0.12.0 +Sphinx==5.3.0 From 438a0ad482a57a2cbeee8636d921b14499163010 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:35:46 -0500 Subject: [PATCH 77/88] update path to conf.py --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 7a14c877..d444c312 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -12,7 +12,7 @@ build: python: "3.8" sphinx: - configuration: docs/conf.py + configuration: docs/source/conf.py python: install: From f477ca0e9ba47ae2dcb7cd62692a26bc27c85d7a Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:49:12 -0500 Subject: [PATCH 78/88] debug commit for pymgrid import --- docs/source/conf.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 41f1e3ac..5fb58669 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -7,8 +7,12 @@ from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent.parent)) - -import pymgrid +try: + import pymgrid +except ImportError: + pymgrid_path = Path(sys.path[0]) + print('Contents of sys.path[0]') + print('\n'.join(str([x for x in sorted(pymgrid_path.iterdir())]))) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information From de1b48b03e5784260addd00a11736ed092495a3e Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 16:51:51 -0500 Subject: [PATCH 79/88] fix err msg --- docs/source/conf.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 5fb58669..cfc61097 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -11,8 +11,9 @@ import pymgrid except ImportError: pymgrid_path = Path(sys.path[0]) - print('Contents of sys.path[0]') - print('\n'.join(str([x for x in sorted(pymgrid_path.iterdir())]))) + err_msg = 'Contents of sys.path[0]:\n' + err_msg += '\n'.join([str(x) for x in sorted(pymgrid_path.iterdir())]) + raise ImportError(err_msg) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information From ae56bf83caf0943bfecfabd8107034970fb4e225 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 17:44:16 -0500 Subject: [PATCH 80/88] change path insertion to os --- docs/source/conf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index cfc61097..4d82645d 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -4,9 +4,12 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html import sys +import os + from pathlib import Path -sys.path.insert(0, str(Path(__file__).parent.parent.parent)) +sys.path.insert(0, os.path.abspath("..")) + try: import pymgrid except ImportError: From aebabb7fdbc08a747712b7397bc61db8a5b880d9 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 17:49:39 -0500 Subject: [PATCH 81/88] add correct pymgrid path --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 4d82645d..cb52b7da 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -8,7 +8,7 @@ from pathlib import Path -sys.path.insert(0, os.path.abspath("..")) +sys.path.insert(0, os.path.abspath("../../src")) try: import pymgrid From b8634374f4c1da85d7021e6585707b6acd7b68f9 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 18:03:40 -0500 Subject: [PATCH 82/88] update readthedocs to install package --- .readthedocs.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index d444c312..010be45b 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -16,4 +16,7 @@ sphinx: python: install: - - requirements: docs/requirements.txt \ No newline at end of file + - method: pip + path: . + extra_requirements: + - all \ No newline at end of file From f50efa20f82d913d8995399e60faa1406abf76da Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 18:22:41 -0500 Subject: [PATCH 83/88] import pymgrid without path append --- docs/source/conf.py | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index cb52b7da..65e274e9 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -3,20 +3,8 @@ # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -import sys -import os +import pymgrid -from pathlib import Path - -sys.path.insert(0, os.path.abspath("../../src")) - -try: - import pymgrid -except ImportError: - pymgrid_path = Path(sys.path[0]) - err_msg = 'Contents of sys.path[0]:\n' - err_msg += '\n'.join([str(x) for x in sorted(pymgrid_path.iterdir())]) - raise ImportError(err_msg) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information From d31b069307aec383127b1e8b45bb13838b542d56 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 20:43:34 -0500 Subject: [PATCH 84/88] remove ref to master_doc --- docs/source/conf.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 65e274e9..1f52f270 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -18,8 +18,6 @@ # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration -master_doc = 'index' - extensions = [ 'sphinx.ext.duration', 'sphinx.ext.autodoc', From 25cb093ad4d1dd304997e9b8e177847805c84576 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 20:43:56 -0500 Subject: [PATCH 85/88] readability in comment --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6fd62aeb..0655ecd1 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages v = {} -exec(open('src/pymgrid/version.py').read(), v) # read __version__ +exec(open('src/pymgrid/version.py').read(), v) # read __version__ VERSION = v['__version__'] DESCRIPTION = "A simulator for tertiary control of electrical microgrids" DOWNLOAD_URL = f"https://github.com/Total-RD/pymgrid/archive/refs/tags/v{VERSION}.tar.gz" From b17b8825bf4c8978454a0f11064a36c167dcc8ff Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 21:00:37 -0500 Subject: [PATCH 86/88] add readthedocs link to pypi --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0655ecd1..4ebacf7e 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,8 @@ MAINTAINER = "Avishai Halev" MAINTAINER_EMAIL = "avishaihalev@gmail.com" LICENSE = "GNU LGPL 3.0" -PROJECT_URLS = {"Source Code": "https://github.com/Total-RD/pymgrid"} +PROJECT_URLS = {"Source Code": "https://github.com/Total-RD/pymgrid", + "Documentation": "https://pymgrid.readthedocs.io/en/latest/"} EXTRAS = dict() EXTRAS["genset_mpc"] = ["Mosek", "cvxopt"] From 36ddddf33412967c2a0bfed106fbdbf0119ebeb6 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 21:00:56 -0500 Subject: [PATCH 87/88] bump version to 1.1.0 --- src/pymgrid/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pymgrid/version.py b/src/pymgrid/version.py index 3f6fab60..1a72d32e 100644 --- a/src/pymgrid/version.py +++ b/src/pymgrid/version.py @@ -1 +1 @@ -__version__ = '1.0.3' +__version__ = '1.1.0' From d67aed481a0fb74664f2166eb5a40dfe8e76ac96 Mon Sep 17 00:00:00 2001 From: ahalev Date: Fri, 25 Nov 2022 21:02:03 -0500 Subject: [PATCH 88/88] add doc ref to readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a694e533..e2991671 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,8 @@ pymgrid (PYthon MicroGRID) is a python library to generate and simulate a large number of microgrids. -For more context, please see the [presentation](https://www.climatechange.ai/papers/neurips2020/3) done at Climate Change AI. +For more context, please see the [presentation](https://www.climatechange.ai/papers/neurips2020/3) done at Climate Change AI +and the [documentation](https://pymgrid.readthedocs.io). ## Installation