Skip to content

Commit 879d3a2

Browse files
committed
fixing np.NaN and compat with pandapower 3.0.0
Signed-off-by: DONNOT Benjamin <[email protected]>
1 parent 31eba75 commit 879d3a2

File tree

14 files changed

+124
-123
lines changed

14 files changed

+124
-123
lines changed

grid2op/Action/baseAction.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,10 @@ def __init__(self, _names_chronics_to_backend: Optional[Dict[Literal["loads", "p
471471
# shunts
472472
if cls.shunts_data_available:
473473
self.shunt_p = np.full(
474-
shape=cls.n_shunt, fill_value=np.NaN, dtype=dt_float
474+
shape=cls.n_shunt, fill_value=np.nan, dtype=dt_float
475475
)
476476
self.shunt_q = np.full(
477-
shape=cls.n_shunt, fill_value=np.NaN, dtype=dt_float
477+
shape=cls.n_shunt, fill_value=np.nan, dtype=dt_float
478478
)
479479
self.shunt_bus = np.full(shape=cls.n_shunt, fill_value=0, dtype=dt_int)
480480
else:
@@ -1805,8 +1805,8 @@ def reset(self):
18051805

18061806
# shunts
18071807
if type(self).shunts_data_available:
1808-
self.shunt_p[:] = np.NaN
1809-
self.shunt_q[:] = np.NaN
1808+
self.shunt_p[:] = np.nan
1809+
self.shunt_q[:] = np.nan
18101810
self.shunt_bus[:] = 0
18111811

18121812
# alarm
@@ -3990,7 +3990,7 @@ def _aux_effect_on_load(self, load_id):
39903990
)
39913991
if load_id < 0:
39923992
raise Grid2OpException(f"`load_id` should be positive.")
3993-
res = {"new_p": np.NaN, "new_q": np.NaN, "change_bus": False, "set_bus": 0}
3993+
res = {"new_p": np.nan, "new_q": np.nan, "change_bus": False, "set_bus": 0}
39943994
if "load_p" in self._dict_inj:
39953995
res["new_p"] = self._dict_inj["load_p"][load_id]
39963996
if "load_q" in self._dict_inj:
@@ -4008,7 +4008,7 @@ def _aux_effect_on_gen(self, gen_id):
40084008
)
40094009
if gen_id < 0:
40104010
raise Grid2OpException(f"`gen_id` should be positive.")
4011-
res = {"new_p": np.NaN, "new_v": np.NaN, "set_bus": 0, "change_bus": False}
4011+
res = {"new_p": np.nan, "new_v": np.nan, "set_bus": 0, "change_bus": False}
40124012
if "prod_p" in self._dict_inj:
40134013
res["new_p"] = self._dict_inj["prod_p"][gen_id]
40144014
if "prod_v" in self._dict_inj:
@@ -4051,7 +4051,7 @@ def _aux_effect_on_storage(self, storage_id):
40514051
)
40524052
if storage_id < 0:
40534053
raise Grid2OpException(f"`storage_id` should be positive.")
4054-
res = {"power": np.NaN, "set_bus": 0, "change_bus": False}
4054+
res = {"power": np.nan, "set_bus": 0, "change_bus": False}
40554055
my_id = self.storage_pos_topo_vect[storage_id]
40564056
res["change_bus"] = self._change_bus_vect[my_id]
40574057
res["set_bus"] = self._set_topo_vect[my_id]
@@ -4266,7 +4266,7 @@ def get_load_modif(self) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray
42664266
New bus of the loads, affected with "change_bus" command
42674267
"""
42684268
cls = type(self)
4269-
load_p = np.full(cls.n_load, fill_value=np.NaN, dtype=dt_float)
4269+
load_p = np.full(cls.n_load, fill_value=np.nan, dtype=dt_float)
42704270
if "load_p" in self._dict_inj:
42714271
load_p[:] = self._dict_inj["load_p"]
42724272
load_q = 1.0 * load_p
@@ -4295,7 +4295,7 @@ def get_gen_modif(self) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]
42954295
42964296
"""
42974297
cls = type(self)
4298-
gen_p = np.full(cls.n_gen, fill_value=np.NaN, dtype=dt_float)
4298+
gen_p = np.full(cls.n_gen, fill_value=np.nan, dtype=dt_float)
42994299
if "prod_p" in self._dict_inj:
43004300
gen_p[:] = self._dict_inj["prod_p"]
43014301
gen_v = 1.0 * gen_p

grid2op/Action/serializableActionSpace.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1517,7 +1517,7 @@ def _aux_get_back_to_ref_state_curtail(self, res, obs):
15171517
)
15181518
return
15191519

1520-
curtail = np.full(obs.n_gen, fill_value=np.NaN)
1520+
curtail = np.full(obs.n_gen, fill_value=np.nan)
15211521
curtail[is_curtailed] = 1.0
15221522
act = self.actionClass()
15231523
act.curtail = curtail

grid2op/Agent/greedyAgent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def act(self, observation: BaseObservation, reward: float, done : bool=False) ->
6161
self.tested_action = self._get_tested_action(observation)
6262
if len(self.tested_action) > 1:
6363
self.resulting_rewards = np.full(
64-
shape=len(self.tested_action), fill_value=np.NaN, dtype=dt_float
64+
shape=len(self.tested_action), fill_value=np.nan, dtype=dt_float
6565
)
6666
for i, action in enumerate(self.tested_action):
6767
(

grid2op/Backend/backend.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,8 +1909,8 @@ def get_action_to_set(self) -> "grid2op.Action.CompleteAction":
19091909
sh_conn = bus_s > 0
19101910
p_s[sh_conn] *= (self._sh_vnkv[sh_conn] / sh_v[sh_conn]) ** 2
19111911
q_s[sh_conn] *= (self._sh_vnkv[sh_conn] / sh_v[sh_conn]) ** 2
1912-
p_s[bus_s == -1] = np.NaN
1913-
q_s[bus_s == -1] = np.NaN
1912+
p_s[bus_s == -1] = np.nan
1913+
q_s[bus_s == -1] = np.nan
19141914
dict_["shunt"]["shunt_p"] = p_s
19151915
dict_["shunt"]["shunt_q"] = q_s
19161916

@@ -1985,8 +1985,8 @@ def update_from_obs(self,
19851985
mults = (self._sh_vnkv / obs._shunt_v) ** 2
19861986
sh_p = obs._shunt_p * mults
19871987
sh_q = obs._shunt_q * mults
1988-
sh_p[~shunt_co] = np.NaN
1989-
sh_q[~shunt_co] = np.NaN
1988+
sh_p[~shunt_co] = np.nan
1989+
sh_q[~shunt_co] = np.nan
19901990
dict_["shunt"]["shunt_p"] = sh_p
19911991
dict_["shunt"]["shunt_q"] = sh_q
19921992
elif cls.shunts_data_available and not type(obs).shunts_data_available:

grid2op/Backend/educPandaPowerBackend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ def get_topo_vect(self) -> np.ndarray:
351351
352352
Function is verbose (~40 lines of code), but pretty straightforward.
353353
"""
354-
res = np.full(self.dim_topo, fill_value=np.NaN, dtype=dt_int)
354+
res = np.full(self.dim_topo, fill_value=np.nan, dtype=dt_int)
355355

356356
line_status = self.get_line_status()
357357

grid2op/Backend/pandaPowerBackend.py

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ def load_grid(self,
549549
else:
550550
tmp = dict(**el)
551551
if "geo" in tmp:
552+
# bug in pandapower 3.0.0 in this case
552553
del tmp["geo"]
553554
pp.create_bus(self._grid, index=ind, **tmp)
554555
self._init_private_attrs()
@@ -773,26 +774,26 @@ def _init_private_attrs(self) -> None:
773774
)
774775
self.thermal_limit_a = self.thermal_limit_a.astype(dt_float)
775776

776-
self.p_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
777-
self.q_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
778-
self.v_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
779-
self.a_or = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
780-
self.p_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
781-
self.q_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
782-
self.v_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
783-
self.a_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.NaN)
784-
self.load_p = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN)
785-
self.load_q = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN)
786-
self.load_v = np.full(self.n_load, dtype=dt_float, fill_value=np.NaN)
787-
self.prod_p = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN)
788-
self.prod_v = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN)
789-
self.prod_q = np.full(self.n_gen, dtype=dt_float, fill_value=np.NaN)
790-
self.storage_p = np.full(self.n_storage, dtype=dt_float, fill_value=np.NaN)
791-
self.storage_q = np.full(self.n_storage, dtype=dt_float, fill_value=np.NaN)
792-
self.storage_v = np.full(self.n_storage, dtype=dt_float, fill_value=np.NaN)
777+
self.p_or = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
778+
self.q_or = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
779+
self.v_or = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
780+
self.a_or = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
781+
self.p_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
782+
self.q_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
783+
self.v_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
784+
self.a_ex = np.full(self.n_line, dtype=dt_float, fill_value=np.nan)
785+
self.load_p = np.full(self.n_load, dtype=dt_float, fill_value=np.nan)
786+
self.load_q = np.full(self.n_load, dtype=dt_float, fill_value=np.nan)
787+
self.load_v = np.full(self.n_load, dtype=dt_float, fill_value=np.nan)
788+
self.prod_p = np.full(self.n_gen, dtype=dt_float, fill_value=np.nan)
789+
self.prod_v = np.full(self.n_gen, dtype=dt_float, fill_value=np.nan)
790+
self.prod_q = np.full(self.n_gen, dtype=dt_float, fill_value=np.nan)
791+
self.storage_p = np.full(self.n_storage, dtype=dt_float, fill_value=np.nan)
792+
self.storage_q = np.full(self.n_storage, dtype=dt_float, fill_value=np.nan)
793+
self.storage_v = np.full(self.n_storage, dtype=dt_float, fill_value=np.nan)
793794
self._nb_bus_before = None
794795

795-
self.line_status = np.full(self.n_line, dtype=dt_bool, fill_value=np.NaN)
796+
self.line_status = np.full(self.n_line, dtype=dt_bool, fill_value=np.nan)
796797
self.line_status.flags.writeable = False
797798

798799
# store the topoid -> objid
@@ -814,11 +815,11 @@ def _init_private_attrs(self) -> None:
814815
# store the topoid -> objid
815816
self._init_big_topo_to_bk()
816817

817-
self.theta_or = np.full(self.n_line, fill_value=np.NaN, dtype=dt_float)
818-
self.theta_ex = np.full(self.n_line, fill_value=np.NaN, dtype=dt_float)
819-
self.load_theta = np.full(self.n_load, fill_value=np.NaN, dtype=dt_float)
820-
self.gen_theta = np.full(self.n_gen, fill_value=np.NaN, dtype=dt_float)
821-
self.storage_theta = np.full(self.n_storage, fill_value=np.NaN, dtype=dt_float)
818+
self.theta_or = np.full(self.n_line, fill_value=np.nan, dtype=dt_float)
819+
self.theta_ex = np.full(self.n_line, fill_value=np.nan, dtype=dt_float)
820+
self.load_theta = np.full(self.n_load, fill_value=np.nan, dtype=dt_float)
821+
self.gen_theta = np.full(self.n_gen, fill_value=np.nan, dtype=dt_float)
822+
self.storage_theta = np.full(self.n_storage, fill_value=np.nan, dtype=dt_float)
822823

823824
self._get_topo_vect()
824825
self.tol = 1e-5 # this is NOT the pandapower tolerance !!!! this is used to check if a storage unit
@@ -835,10 +836,10 @@ def _init_private_attrs(self) -> None:
835836

836837
def storage_deact_for_backward_comaptibility(self) -> None:
837838
cls = type(self)
838-
self.storage_theta = np.full(cls.n_storage, fill_value=np.NaN, dtype=dt_float)
839-
self.storage_p = np.full(cls.n_storage, dtype=dt_float, fill_value=np.NaN)
840-
self.storage_q = np.full(cls.n_storage, dtype=dt_float, fill_value=np.NaN)
841-
self.storage_v = np.full(cls.n_storage, dtype=dt_float, fill_value=np.NaN)
839+
self.storage_theta = np.full(cls.n_storage, fill_value=np.nan, dtype=dt_float)
840+
self.storage_p = np.full(cls.n_storage, dtype=dt_float, fill_value=np.nan)
841+
self.storage_q = np.full(cls.n_storage, dtype=dt_float, fill_value=np.nan)
842+
self.storage_v = np.full(cls.n_storage, dtype=dt_float, fill_value=np.nan)
842843
self._topo_vect.flags.writeable = True
843844
self._topo_vect.resize(cls.dim_topo)
844845
self._topo_vect.flags.writeable = False
@@ -1208,30 +1209,30 @@ def runpf(self, is_dc : bool=False) -> Tuple[bool, Union[Exception, None]]:
12081209
return False, BackendError(f'powerflow diverged with error :"{msg}", you can check `env.backend.div_exception` for more information')
12091210

12101211
def _reset_all_nan(self) -> None:
1211-
self.p_or[:] = np.NaN
1212-
self.q_or[:] = np.NaN
1213-
self.v_or[:] = np.NaN
1214-
self.a_or[:] = np.NaN
1215-
self.p_ex[:] = np.NaN
1216-
self.q_ex[:] = np.NaN
1217-
self.v_ex[:] = np.NaN
1218-
self.a_ex[:] = np.NaN
1219-
self.prod_p[:] = np.NaN
1220-
self.prod_q[:] = np.NaN
1221-
self.prod_v[:] = np.NaN
1222-
self.load_p[:] = np.NaN
1223-
self.load_q[:] = np.NaN
1224-
self.load_v[:] = np.NaN
1225-
self.storage_p[:] = np.NaN
1226-
self.storage_q[:] = np.NaN
1227-
self.storage_v[:] = np.NaN
1212+
self.p_or[:] = np.nan
1213+
self.q_or[:] = np.nan
1214+
self.v_or[:] = np.nan
1215+
self.a_or[:] = np.nan
1216+
self.p_ex[:] = np.nan
1217+
self.q_ex[:] = np.nan
1218+
self.v_ex[:] = np.nan
1219+
self.a_ex[:] = np.nan
1220+
self.prod_p[:] = np.nan
1221+
self.prod_q[:] = np.nan
1222+
self.prod_v[:] = np.nan
1223+
self.load_p[:] = np.nan
1224+
self.load_q[:] = np.nan
1225+
self.load_v[:] = np.nan
1226+
self.storage_p[:] = np.nan
1227+
self.storage_q[:] = np.nan
1228+
self.storage_v[:] = np.nan
12281229
self._nb_bus_before = None
12291230

1230-
self.theta_or[:] = np.NaN
1231-
self.theta_ex[:] = np.NaN
1232-
self.load_theta[:] = np.NaN
1233-
self.gen_theta[:] = np.NaN
1234-
self.storage_theta[:] = np.NaN
1231+
self.theta_or[:] = np.nan
1232+
self.theta_ex[:] = np.nan
1233+
self.load_theta[:] = np.nan
1234+
self.gen_theta[:] = np.nan
1235+
self.storage_theta[:] = np.nan
12351236
self._topo_vect.flags.writeable = True
12361237
self._topo_vect[:] = -1
12371238
self._topo_vect.flags.writeable = False

grid2op/Environment/baseEnv.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1941,7 +1941,7 @@ def set_thermal_limit(self, thermal_limit):
19411941
"Have you called `env.reset()` after last game over ?"
19421942
)
19431943
if isinstance(thermal_limit, dict):
1944-
tmp = np.full(self.n_line, fill_value=np.NaN, dtype=dt_float)
1944+
tmp = np.full(self.n_line, fill_value=np.nan, dtype=dt_float)
19451945
for key, val in thermal_limit.items():
19461946
if key not in self.name_line:
19471947
raise Grid2OpException(

grid2op/Episode/CompactEpisodeData.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ def __init__(self, env, obs, exp_dir, ep_id:str=None):
106106
max_no_of_timesteps = int(env.max_episode_duration())
107107

108108
# Numpy Arrays
109-
self.actions = np.full((max_no_of_timesteps, env.action_space.n), fill_value=np.NaN, dtype=np.float16)
110-
self.env_actions = np.full((max_no_of_timesteps, env._helper_action_env.n), fill_value=np.NaN, dtype=np.float32)
109+
self.actions = np.full((max_no_of_timesteps, env.action_space.n), fill_value=np.nan, dtype=np.float16)
110+
self.env_actions = np.full((max_no_of_timesteps, env._helper_action_env.n), fill_value=np.nan, dtype=np.float32)
111111
self.attacks = np.full((max_no_of_timesteps, env._opponent_action_space.n), fill_value=0.0, dtype=np.float32)
112-
self.observations = np.full((max_no_of_timesteps + 1, len(obs.to_vect())),fill_value=np.NaN,dtype=np.float32)
113-
self.rewards = np.full(max_no_of_timesteps, fill_value=np.NaN, dtype=np.float32)
112+
self.observations = np.full((max_no_of_timesteps + 1, len(obs.to_vect())),fill_value=np.nan,dtype=np.float32)
113+
self.rewards = np.full(max_no_of_timesteps, fill_value=np.nan, dtype=np.float32)
114114
self.other_reward_names = list(sorted(env.other_rewards.keys()))
115-
self.other_rewards = np.full((max_no_of_timesteps, len(self.other_reward_names)), fill_value=np.NaN, dtype=np.float32)
116-
self.disc_lines = np.full((max_no_of_timesteps, env.backend.n_line), fill_value=np.NaN, dtype=np.bool_)
117-
self.times = np.full(max_no_of_timesteps, fill_value=np.NaN, dtype=np.float32)
115+
self.other_rewards = np.full((max_no_of_timesteps, len(self.other_reward_names)), fill_value=np.nan, dtype=np.float32)
116+
self.disc_lines = np.full((max_no_of_timesteps, env.backend.n_line), fill_value=np.nan, dtype=np.bool_)
117+
self.times = np.full(max_no_of_timesteps, fill_value=np.nan, dtype=np.float32)
118118

119119
self.disc_lines_templ = np.full((1, env.backend.n_line), fill_value=False, dtype=np.bool_)
120120
# AttackTempl: Not used, kept for comptabiility with EpisodeData

grid2op/Observation/baseObservation.py

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,25 +1350,25 @@ def reset(self) -> None:
13501350
self.topo_vect[:] = 0
13511351

13521352
# generators information
1353-
self.gen_p[:] = np.NaN
1354-
self.gen_q[:] = np.NaN
1355-
self.gen_v[:] = np.NaN
1353+
self.gen_p[:] = np.nan
1354+
self.gen_q[:] = np.nan
1355+
self.gen_v[:] = np.nan
13561356
# loads information
1357-
self.load_p[:] = np.NaN
1358-
self.load_q[:] = np.NaN
1359-
self.load_v[:] = np.NaN
1357+
self.load_p[:] = np.nan
1358+
self.load_q[:] = np.nan
1359+
self.load_v[:] = np.nan
13601360
# lines origin information
1361-
self.p_or[:] = np.NaN
1362-
self.q_or[:] = np.NaN
1363-
self.v_or[:] = np.NaN
1364-
self.a_or[:] = np.NaN
1361+
self.p_or[:] = np.nan
1362+
self.q_or[:] = np.nan
1363+
self.v_or[:] = np.nan
1364+
self.a_or[:] = np.nan
13651365
# lines extremity information
1366-
self.p_ex[:] = np.NaN
1367-
self.q_ex[:] = np.NaN
1368-
self.v_ex[:] = np.NaN
1369-
self.a_ex[:] = np.NaN
1366+
self.p_ex[:] = np.nan
1367+
self.q_ex[:] = np.nan
1368+
self.v_ex[:] = np.nan
1369+
self.a_ex[:] = np.nan
13701370
# lines relative flows
1371-
self.rho[:] = np.NaN
1371+
self.rho[:] = np.nan
13721372

13731373
# cool down and reconnection time after hard overflow, soft overflow or cascading failure
13741374
self.time_before_cooldown_line[:] = 0
@@ -1391,31 +1391,31 @@ def reset(self) -> None:
13911391
self._env_internal_params = {}
13921392

13931393
# redispatching
1394-
self.target_dispatch[:] = np.NaN
1395-
self.actual_dispatch[:] = np.NaN
1394+
self.target_dispatch[:] = np.nan
1395+
self.actual_dispatch[:] = np.nan
13961396

13971397
# storage units
1398-
self.storage_charge[:] = np.NaN
1399-
self.storage_power_target[:] = np.NaN
1400-
self.storage_power[:] = np.NaN
1398+
self.storage_charge[:] = np.nan
1399+
self.storage_power_target[:] = np.nan
1400+
self.storage_power[:] = np.nan
14011401

14021402
# to save up computation time
14031403
self._dictionnarized = None
14041404
self._connectivity_matrix_ = None
14051405
self._bus_connectivity_matrix_ = None
14061406

14071407
if type(self).shunts_data_available:
1408-
self._shunt_p[:] = np.NaN
1409-
self._shunt_q[:] = np.NaN
1410-
self._shunt_v[:] = np.NaN
1408+
self._shunt_p[:] = np.nan
1409+
self._shunt_q[:] = np.nan
1410+
self._shunt_v[:] = np.nan
14111411
self._shunt_bus[:] = -1
14121412

14131413
self.support_theta = False
1414-
self.theta_or[:] = np.NaN
1415-
self.theta_ex[:] = np.NaN
1416-
self.load_theta[:] = np.NaN
1417-
self.gen_theta[:] = np.NaN
1418-
self.storage_theta[:] = np.NaN
1414+
self.theta_or[:] = np.nan
1415+
self.theta_ex[:] = np.nan
1416+
self.load_theta[:] = np.nan
1417+
self.gen_theta[:] = np.nan
1418+
self.storage_theta[:] = np.nan
14191419

14201420
# alarm feature
14211421
self.is_alarm_illegal[:] = False
@@ -3228,10 +3228,10 @@ def get_forecasted_inj(self, time_step:int =1) -> np.ndarray:
32283228
)
32293229
cls = type(self)
32303230
t, a = self._forecasted_inj[time_step]
3231-
prod_p_f = np.full(cls.n_gen, fill_value=np.NaN, dtype=dt_float)
3232-
prod_v_f = np.full(cls.n_gen, fill_value=np.NaN, dtype=dt_float)
3233-
load_p_f = np.full(cls.n_load, fill_value=np.NaN, dtype=dt_float)
3234-
load_q_f = np.full(cls.n_load, fill_value=np.NaN, dtype=dt_float)
3231+
prod_p_f = np.full(cls.n_gen, fill_value=np.nan, dtype=dt_float)
3232+
prod_v_f = np.full(cls.n_gen, fill_value=np.nan, dtype=dt_float)
3233+
load_p_f = np.full(cls.n_load, fill_value=np.nan, dtype=dt_float)
3234+
load_q_f = np.full(cls.n_load, fill_value=np.nan, dtype=dt_float)
32353235

32363236
if "prod_p" in a["injection"]:
32373237
prod_p_f = a["injection"]["prod_p"]

0 commit comments

Comments
 (0)