From 4428ff40644242061689cec010b1d1cf2701ca87 Mon Sep 17 00:00:00 2001 From: Eva BOGUSLAWSKI Date: Tue, 5 Sep 2023 16:31:51 +0200 Subject: [PATCH 1/3] fix issue 446: problem with BoxGymObsSpace when normalizing --- grid2op/gym_compat/box_gym_obsspace.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/grid2op/gym_compat/box_gym_obsspace.py b/grid2op/gym_compat/box_gym_obsspace.py index edb979383..d0aecf761 100644 --- a/grid2op/gym_compat/box_gym_obsspace.py +++ b/grid2op/gym_compat/box_gym_obsspace.py @@ -618,10 +618,10 @@ def __init__( if subtract is None: subtract = {} - self._subtract = subtract + self._subtract = subtract.copy() if divide is None: divide = {} - self._divide = divide + self._divide = divide.copy() # handle the "functional" part self._template_obs = ob_sp._template_obj.copy() From ac503f169062437cd816cd1ff93ea5403efaa34f Mon Sep 17 00:00:00 2001 From: Eva BOGUSLAWSKI Date: Tue, 5 Sep 2023 18:43:02 +0200 Subject: [PATCH 2/3] add test for previous fix for issue 446 --- grid2op/tests/test_issue_446.py | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 grid2op/tests/test_issue_446.py diff --git a/grid2op/tests/test_issue_446.py b/grid2op/tests/test_issue_446.py new file mode 100644 index 000000000..2a09853eb --- /dev/null +++ b/grid2op/tests/test_issue_446.py @@ -0,0 +1,40 @@ +# Copyright (c) 2023, RTE (https://www.rte-france.com) +# See AUTHORS.txt +# This Source Code Form is subject to the terms of the Mozilla Public License, version 2.0. +# If a copy of the Mozilla Public License, version 2.0 was not distributed with this file, +# you can obtain one at http://mozilla.org/MPL/2.0/. +# SPDX-License-Identifier: MPL-2.0 +# This file is part of Grid2Op, Grid2Op a testbed platform to model sequential decision making in power systems. + + +import grid2op +from grid2op.gym_compat import BoxGymActSpace, BoxGymObsSpace +import numpy as np +import unittest + + +class Issue446Tester(unittest.TestCase): + def test_box_action_space(self): + # We considers only redispatching actions + env = grid2op.make("l2rpn_case14_sandbox", test=True) + + divide = {"hour_of_day": np.ones(1)} + + gym_observation_space_1 = BoxGymObsSpace(env.observation_space, + attr_to_keep=["curtailment_mw", "hour_of_day"], + divide = divide + ) + + gym_observation_space_2 = BoxGymObsSpace(env.observation_space.copy(), + attr_to_keep=["curtailment_mw", "hour_of_day"], + divide = divide + ) + + gym_observation_space_1.normalize_attr("curtailment_mw") + + assert "curtailment_mw" in gym_observation_space_1._divide + assert "curtailment_mw" not in gym_observation_space_2._divide + + +if __name__ == "__main__": + unittest.main() \ No newline at end of file From 2ea3c8ab365787fdca3381290942e7beec246540 Mon Sep 17 00:00:00 2001 From: Eva BOGUSLAWSKI Date: Tue, 5 Sep 2023 18:58:30 +0200 Subject: [PATCH 3/3] complete test for issue 446 --- grid2op/tests/test_issue_446.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/grid2op/tests/test_issue_446.py b/grid2op/tests/test_issue_446.py index 2a09853eb..d9aad58f7 100644 --- a/grid2op/tests/test_issue_446.py +++ b/grid2op/tests/test_issue_446.py @@ -19,21 +19,26 @@ def test_box_action_space(self): env = grid2op.make("l2rpn_case14_sandbox", test=True) divide = {"hour_of_day": np.ones(1)} + subtract = {"hour_of_day": np.zeros(1)} gym_observation_space_1 = BoxGymObsSpace(env.observation_space, attr_to_keep=["curtailment_mw", "hour_of_day"], - divide = divide + divide = divide, + subtract = subtract ) gym_observation_space_2 = BoxGymObsSpace(env.observation_space.copy(), attr_to_keep=["curtailment_mw", "hour_of_day"], - divide = divide + divide = divide, + subtract = subtract ) gym_observation_space_1.normalize_attr("curtailment_mw") assert "curtailment_mw" in gym_observation_space_1._divide assert "curtailment_mw" not in gym_observation_space_2._divide + assert "curtailment_mw" in gym_observation_space_1._subtract + assert "curtailment_mw" not in gym_observation_space_2._subtract if __name__ == "__main__":