Source code for wntr.msx.io
"""
The wntr.msx.io module includes functions that convert the MSX reaction
model to other data formats, create an MSX model from a file, and write
the MSX model to a file.
"""
import logging
import json
logger = logging.getLogger(__name__)
[docs]
def to_dict(msx) -> dict:
"""
Convert a MsxModel into a dictionary
Parameters
----------
msx : MsxModel
The MSX reaction model.
Returns
-------
dict
Dictionary representation of the MsxModel
"""
return msx.to_dict()
[docs]
def from_dict(d: dict):
"""
Create or append a MsxModel from a dictionary
Parameters
----------
d : dict
Dictionary representation of the water network model.
Returns
-------
MsxModel
"""
from wntr.msx.model import MsxModel
return MsxModel.from_dict(d)
[docs]
def write_json(msx, path_or_buf, as_library=False, indent=4, **kw_json):
"""
Write the MSX model to a JSON file
Parameters
----------
msx : MsxModel
The model to output.
path_or_buf : str or IO stream
Name of the file or file pointer.
as_library : bool, optional
Strip out network-specific elements if True, by default False.
kw_json : keyword arguments
Arguments to pass directly to :meth:`json.dump`.
"""
d = to_dict(msx)
if as_library:
d.get('network_data', {}).get('initial_quality',{}).clear()
d.get('network_data', {}).get('parameter_values',{}).clear()
d.get('network_data', {}).get('sources',{}).clear()
d.get('network_data', {}).get('patterns',{}).clear()
d.get('options', {}).get('report',{}).setdefault('nodes', None)
d.get('options', {}).get('report',{}).setdefault('links', None)
if isinstance(path_or_buf, str):
with open(path_or_buf, "w") as fout:
json.dump(d, fout, indent=indent, **kw_json)
else:
json.dump(d, path_or_buf, indent=indent, **kw_json)
[docs]
def read_json(path_or_buf, **kw_json):
"""
Create or append a WaterNetworkModel from a JSON file
Parameters
----------
f : str
Name of the file or file pointer.
kw_json : keyword arguments
Keyword arguments to pass to `json.load`.
Returns
-------
MsxModel
"""
if isinstance(path_or_buf, str):
with open(path_or_buf, "r") as fin:
d = json.load(fin, **kw_json)
else:
d = json.load(path_or_buf, **kw_json)
return from_dict(d)
[docs]
def write_msxfile(msx, filename):
"""
Write an EPANET-MSX input file (.msx)
Parameters
----------
msx : MsxModel
The model to write
filename : str
The filename to use for output
"""
from wntr.epanet.msx.io import MsxFile
MsxFile.write(filename, msx)
[docs]
def read_msxfile(filename, append=None):
"""
Read in an EPANET-MSX input file (.msx)
Parameters
----------
filename : str
The filename to read in.
append : MsxModel
An existing model to add data into, by default None.
"""
from wntr.epanet.msx.io import MsxFile
return MsxFile.read(filename, append)