Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions HSP2_DriverInMem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# sample script to illustrate running HSP2 with inMem version

uciName = "C://dev//HSPsquared//tests//test10//HSP2results//test10.uci"
wdmName = "C://dev//HSPsquared//tests//test10//HSP2results//test10.wdm"

from readers.utilities.readUCIinMem import readUCI
from readers.utilities.readWDMinMem import readWDM

uciDict = readUCI(uciName,'')
wdmDict = readWDM(wdmName,'')
# combine the 2 dicts
uciDict.update(wdmDict)

from utilities.HSP2mainInMem import main
main(uciDict, saveall=True, jupyterlab=False)

x = uciDict
36 changes: 36 additions & 0 deletions HSP2_DriverInMemUCIonly.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# sample script to illustrate running HSP2 with inMem version

# reads UCI and WDMs into dictionary of pandas dataframes,
# executes HSP2 off the in-memory dictionary of pandas dataframes,
# writes output to same dictionary of pandas dataframes

uciName = "C://dev//HSPsquared//tests//test10//HSP2results//test10.uci"

from hsp2.hsp2tools.readUCIinMem import readUCI
from hsp2.hsp2tools.readWDMinMem import readWDM
import os

uciDict = readUCI(uciName,'')
uci_path = os.path.dirname(uciName)

input_file_missing = False
filesDf = uciDict['/CONTROL/FILES']
for index, row in filesDf.iterrows():
if row['TYPE'][0:3] == 'WDM':
wdmName = row['NAME']
wdmName = os.path.join(uci_path, wdmName)

if os.path.isfile(wdmName):
wdmDict = readWDM(wdmName,'')
# combine the 2 dicts
uciDict.update(wdmDict)
else:
input_file_missing = True

if input_file_missing:
print("Cant run " + uciName + ", wdm file missing")
else:
from hsp2.hsp2.HSP2mainInMem import main
main(uciDict, saveall=True, jupyterlab=False)

x = uciDict
67 changes: 67 additions & 0 deletions src/hsp2/hsp2/HSP2utilitiesInMem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# in memory versions of HSP2 utilities get_timeseries and save_timeseries

from typing import Protocol, Dict, Any, List, Union, runtime_checkable
from numba import types
from numba.typed import Dict
from enum import Enum
from hsp2.hsp2.utilities import transform, clean_name
import numpy as np
import pandas as pd

def get_timeseries_InMem(timeseries_inputs, ext_sourcesdd, siminfo):
''' makes timeseries for the current timestep and trucated to the sim interval'''
# explicit creation of Numba dictionary with signatures
ts = Dict.empty(key_type=types.unicode_type, value_type=types.float64[:])
for row in ext_sourcesdd:
path = f'/TIMESERIES/{row.SVOLNO}'
if path in timeseries_inputs:
data_frame = timeseries_inputs[path]
temp_data_frame = data_frame.copy()

if row.MFACTOR != 1.0:
temp_data_frame *= row.MFACTOR
t = transform(temp_data_frame, row.TMEMN, row.TRAN, siminfo)

tname = clean_name(row.TMEMN,row.TMEMSB)
if tname in ts:
ts[tname] += t
else:
ts[tname] = t
return ts

def save_timeseries_InMem(timeseries, ts, savedict, siminfo, saveall, operation, segment, activity, compress=True, outstep=2):
df = pd.DataFrame(index=siminfo['tindex'])
if (operation == 'IMPLND' and activity == 'IQUAL') or (operation == 'PERLND' and activity == 'PQUAL'):
for y in savedict.keys():
for z in set(ts.keys()):
if '/' + y in z:
zrep = z.replace('/','_')
zrep2 = zrep.replace(' ', '')
df[zrep2] = ts[z]
if '_' + y in z:
df[z] = ts[z]
elif (operation == 'RCHRES' and (activity == 'CONS' or activity == 'GQUAL')):
for y in savedict.keys():
for z in set(ts.keys()):
if '_' + y in z:
df[z] = ts[z]
for y in (savedict.keys() & set(ts.keys())):
df[y] = ts[y]
else:
for y in (savedict.keys() & set(ts.keys())):
df[y] = ts[y]
df = df.astype(np.float32).sort_index(axis='columns')

if saveall:
save_columns = df.columns
else:
save_columns = [key for key,value in savedict.items() if value or saveall]

if not df.empty:
path = f'{operation}_{segment}/{activity}'
#if category:
path = '/RESULTS/' + path
timeseries[path] = df
else:
print(f'DataFrame Empty for {operation}|{activity}|{segment}')
return
Loading
Loading