Example #1
0
    def test_check_valid(self):
        """test the param.check_valid() is working correctly (accept valid param, reject wrong param)"""
        p = Parameters()
        p.check_valid()  # default params are valid

        # boolean attribute
        p.NO_OVERFLOW_DISCONNECTION = 1
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.NO_OVERFLOW_DISCONNECTION = True
        p.IGNORE_MIN_UP_DOWN_TIME = "True"
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.IGNORE_MIN_UP_DOWN_TIME = True
        p.ACTIVATE_STORAGE_LOSS = 42.
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.ACTIVATE_STORAGE_LOSS = False
        p.ENV_DC = [1, 2]
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.ENV_DC = True
        p.ALLOW_DISPATCH_GEN_SWITCH_OFF = {1, 2}
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.ALLOW_DISPATCH_GEN_SWITCH_OFF = False
        p.check_valid()  # everything valid again

        # int types
        for attr_nm in [
                "NB_TIMESTEP_OVERFLOW_ALLOWED", "NB_TIMESTEP_RECONNECTION",
                "NB_TIMESTEP_COOLDOWN_LINE", "NB_TIMESTEP_COOLDOWN_SUB",
                "MAX_SUB_CHANGED", "MAX_LINE_STATUS_CHANGED"
        ]:
            try:
                self._aux_check_attr_int(p, attr_nm)
            except Exception as exc_:
                raise RuntimeError(
                    f"Exception \"{exc_}\" for attribute \"{attr_nm}\"")
        # float types
        for attr_nm in ["HARD_OVERFLOW_THRESHOLD", "INIT_STORAGE_CAPACITY"]:
            try:
                self._aux_check_attr_float(p, attr_nm)
            except Exception as exc_:
                raise RuntimeError(
                    f"Exception \"{exc_}\" for attribute \"{attr_nm}\"")

        p.HARD_OVERFLOW_THRESHOLD = 0.5  # should not validate
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.ACTIVATE_STORAGE_LOSS = -0.1  # should not validate
        with self.assertRaises(RuntimeError):
            p.check_valid()
        p.ACTIVATE_STORAGE_LOSS = 1.1  # should not validate
        with self.assertRaises(RuntimeError):
            p.check_valid()
Example #2
0
    def test_change_parameters_forecast(self):
        """
        this is basic test of the env.change_forecast_parameters() function

        It only checks the right parameters are used for the environment (or obs_env) but it do not currently
        check the observation (with the cooldown for example)
        """
        param = Parameters()
        param.NO_OVERFLOW_DISCONNECTION = True
        param.MAX_SUB_CHANGED = 5
        param.MAX_LINE_STATUS_CHANGED = 5
        param.NB_TIMESTEP_COOLDOWN_LINE = 5
        param.NB_TIMESTEP_COOLDOWN_SUB = 5
        param.ENV_DC = True
        real_orig_param = copy.deepcopy(self.env1.parameters)
        self.env1.change_forecast_parameters(param)
        # in these first checks, parameters are not modified
        self._check_env_param(self.env1, real_orig_param)
        self._check_env_param(self.env1._observation_space.obs_env,
                              real_orig_param)

        obs, *_ = self.env1.step(self.env1.action_space())
        _ = obs.simulate(self.env1.action_space())
        self._check_env_param(self.env1, real_orig_param)
        self._check_env_param(self.env1._observation_space.obs_env,
                              real_orig_param)

        # reset triggers the modification
        obs = self.env1.reset()
        _ = obs.simulate(self.env1.action_space())
        self._check_env_param(self.env1, real_orig_param)
        self._check_env_param(self.env1._observation_space.obs_env, param)