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()
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)