Skip to content

Commit 3326c67

Browse files
committed
Merge branch 'develop' of https://github.com/e2nIEE/pandapower into develop
2 parents 6b7273c + d490550 commit 3326c67

File tree

5 files changed

+1734
-28
lines changed

5 files changed

+1734
-28
lines changed

pandapower/convert_format.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
# Copyright (c) 2016-2020 by University of Kassel and Fraunhofer Institute for Energy Economics
44
# and Energy System Technology (IEE), Kassel. All rights reserved.
55

6-
import pandas as pd
76
import numpy as np
7+
import pandas as pd
88
from packaging import version
9+
10+
from pandapower import __version__
911
from pandapower.create import create_empty_network, create_poly_cost
1012
from pandapower.results import reset_results
11-
from pandapower import __version__
1213

1314

1415
def convert_format(net):

pandapower/file_io.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
import json
88
import os
99
import pickle
10-
from packaging import version
1110
from warnings import warn
1211

13-
import pandas as pd
14-
1512
import numpy
13+
import pandas as pd
14+
from packaging import version
1615

16+
import pandapower.io_utils as io_utils
1717
from pandapower.auxiliary import pandapowerNet
18-
from pandapower.create import create_empty_network
1918
from pandapower.convert_format import convert_format
20-
import pandapower.io_utils as io_utils
19+
from pandapower.create import create_empty_network
20+
2121

2222
def to_pickle(net, filename):
2323
"""
@@ -67,7 +67,7 @@ def to_excel(net, filename, include_empty_tables=False, include_results=True):
6767
"""
6868
writer = pd.ExcelWriter(filename, engine='xlsxwriter')
6969
dict_net = io_utils.to_dict_of_dfs(net, include_results=include_results,
70-
include_empty_tables=include_empty_tables)
70+
include_empty_tables=include_empty_tables)
7171
for item, table in dict_net.items():
7272
table.to_excel(writer, sheet_name=item)
7373
writer.save()
@@ -314,7 +314,7 @@ def from_json_dict(json_dict):
314314
if key == 'dtypes':
315315
continue
316316
if key in net and isinstance(net[key], pd.DataFrame) and isinstance(json_dict[key], dict) \
317-
or key == "piecewise_linear_cost" or key == "polynomial_cost":
317+
or key == "piecewise_linear_cost" or key == "polynomial_cost":
318318
net[key] = pd.DataFrame.from_dict(json_dict[key], orient="columns")
319319
net[key].set_index(net[key].index.astype(numpy.int64), inplace=True)
320320
else:

pandapower/io_utils.py

+24-19
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@
2121
from networkx.readwrite import json_graph
2222
from numpy import ndarray, generic, equal, isnan, allclose, any as anynp
2323
from packaging import version
24+
from pandas.testing import assert_series_equal, assert_frame_equal
25+
2426
from pandapower.auxiliary import pandapowerNet
2527
from pandapower.create import create_empty_network
26-
from pandas.testing import assert_series_equal, assert_frame_equal
2728

2829
try:
2930
from functools import singledispatch
@@ -447,7 +448,7 @@ def rest(self):
447448
self.obj = json.loads(self.obj, cls=PPJSONDecoder,
448449
object_hook=partial(pp_hook, net=self.net,
449450
registry_class=FromSerializableRegistry))
450-
# backwards compatibility
451+
# backwards compatibility
451452
return class_.from_dict(self.obj, self.net)
452453
else:
453454
# for non-pp objects, e.g. tuple
@@ -484,24 +485,28 @@ def __init__(self, **kwargs):
484485

485486

486487
def pp_hook(d, net=None, registry_class=FromSerializableRegistry):
487-
if '_module' in d and '_class' in d:
488-
if "_object" in d:
489-
obj = d.pop('_object')
490-
elif "_state" in d:
491-
obj = d['_state']
492-
if d['has_net']:
493-
obj['net'] = 'net'
494-
if '_init' in obj:
495-
del obj['_init']
496-
return obj # backwards compatibility
488+
try:
489+
if '_module' in d and '_class' in d:
490+
if "_object" in d:
491+
obj = d.pop('_object')
492+
elif "_state" in d:
493+
obj = d['_state']
494+
if d['has_net']:
495+
obj['net'] = 'net'
496+
if '_init' in obj:
497+
del obj['_init']
498+
return obj # backwards compatibility
499+
else:
500+
# obj = {"_init": d, "_state": dict()} # backwards compatibility
501+
obj = {key: val for key, val in d.items() if key not in ['_module', '_class']}
502+
fs = registry_class(obj, d, net, pp_hook)
503+
fs.class_name = d.pop('_class', '')
504+
fs.module_name = d.pop('_module', '')
505+
return fs.from_serializable()
497506
else:
498-
# obj = {"_init": d, "_state": dict()} # backwards compatibility
499-
obj = {key: val for key, val in d.items() if key not in ['_module', '_class']}
500-
fs = registry_class(obj, d, net, pp_hook)
501-
fs.class_name = d.pop('_class', '')
502-
fs.module_name = d.pop('_module', '')
503-
return fs.from_serializable()
504-
else:
507+
return d
508+
except TypeError:
509+
logger.debug('Loading your grid raised a TypeError. %s raised this exception' % d)
505510
return d
506511

507512

pandapower/test/api/test_file_io.py

+8
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import pandapower.control as control
1717
import pandapower.networks as networks
1818
import pandapower.topology as topology
19+
from pandapower import pp_dir
1920
from pandapower.io_utils import PPJSONEncoder, PPJSONDecoder
2021
from pandapower.test.toolbox import assert_net_equal, create_test_network
2122
from pandapower.timeseries import DFData
@@ -68,6 +69,13 @@ def test_json_basic(net_in, tmp_path):
6869
assert_net_equal(net_in, net_out)
6970

7071

72+
def test_json_controller_none():
73+
try:
74+
pp.from_json(os.path.join(pp_dir, 'test', 'test_files', 'controller_containing_NoneNan.json'), convert=False)
75+
except:
76+
raise (UserWarning("empty net with controller containing Nan/None can't be loaded"))
77+
78+
7179
def test_json(net_in, tmp_path):
7280
filename = os.path.join(os.path.abspath(str(tmp_path)), "testfile.json")
7381
try:

0 commit comments

Comments
 (0)