From 80b88976a4f094649f2356a10f6344912152d307 Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Sat, 19 Nov 2022 18:41:49 +0800 Subject: [PATCH] Add api for simulation and dump output --- epanet/epanet.py | 23 ++++++++++++++++++----- tjnetwork.py | 12 ++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/epanet/epanet.py b/epanet/epanet.py index 62af392..76830d6 100644 --- a/epanet/epanet.py +++ b/epanet/epanet.py @@ -126,7 +126,7 @@ class Output: return usages - def dump(self, cache: bool = False) -> str: + def dump(self, cache: bool = True) -> str: data = {} data |= { 'version' : self.version() } data |= { 'net_size' : self.net_size() } @@ -135,7 +135,7 @@ class Output: data |= { 'element_name' : self.element_name() } data |= { 'energy_usage' : self.energy_usage() } if cache: - with open(self.opt + '.json', 'w') as f: + with open(self._path + '.json', 'w') as f: json.dump(data, f) return json.dumps(data) @@ -174,10 +174,23 @@ def run_project(name: str) -> str: return dump_output(opt) -def run_inp(inp: str) -> str: - return '' +def run_inp(name: str) -> str: + dir = os.path.dirname(os.getcwd()) + + exe = os.path.join(os.path.join(dir, 'epanet'), 'runepanet.exe') + inp = os.path.join(os.path.join(dir, 'inp'), name + '.inp') + rpt = os.path.join(os.path.join(dir, 'temp'), name + '.rpt') + opt = os.path.join(os.path.join(dir, 'temp'), name + '.opt') + command = f'{exe} {inp} {rpt} {opt}' + + result = os.system(command) + if result != 0: + msg = f'Failed to run simulation for project [{name}]' + raise Exception(msg) + + return dump_output(opt) if __name__ == '__main__': _verify_platform() - print(run_project('net3')) + print(run_inp('net3')) diff --git a/tjnetwork.py b/tjnetwork.py index 4c09e8c..91c4dc9 100644 --- a/tjnetwork.py +++ b/tjnetwork.py @@ -1,5 +1,6 @@ from typing import Any import api +import epanet ############################################################ @@ -129,6 +130,17 @@ def read_inp(name: str, inp: str) -> None: def dump_inp(name: str, inp: str) -> None: return api.dump_inp(name, inp) +def run_project(name: str) -> str: + return epanet.run_project(name) + +# put in inp folder, name without extension +def run_inp(name: str) -> str: + return epanet.run_inp(name) + +# path is absolute path +def dump_output(path: str) -> str: + return epanet.dump_output(path) + ############################################################ # operation