2019-02-12 18:56:05 +01:00
|
|
|
import json
|
|
|
|
import pickle
|
2019-02-13 12:53:17 +01:00
|
|
|
from typing import List
|
2019-02-12 18:56:05 +01:00
|
|
|
|
2019-03-04 19:33:16 +01:00
|
|
|
import numpy as np
|
|
|
|
|
2019-02-12 18:56:05 +01:00
|
|
|
from simulation import Simulation
|
|
|
|
|
|
|
|
|
|
|
|
class SimulationList:
|
2019-02-13 12:53:17 +01:00
|
|
|
simlist: List[Simulation]
|
|
|
|
|
2019-02-12 18:56:05 +01:00
|
|
|
def __init__(self, simlist: list = None):
|
|
|
|
if simlist is None:
|
|
|
|
self.simlist = []
|
|
|
|
else:
|
|
|
|
self.simlist = simlist
|
|
|
|
|
|
|
|
def append(self, value: Simulation):
|
|
|
|
self.simlist.append(value)
|
|
|
|
|
|
|
|
def pickle_save(self, filebasename="save"):
|
|
|
|
with open(f'{filebasename}.pickle', 'wb') as file:
|
|
|
|
pickle.dump(self.simlist, file)
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def pickle_load(cls, filebasename="save"):
|
|
|
|
with open(f'{filebasename}.pickle', 'rb') as file:
|
|
|
|
return cls(pickle.load(file))
|
|
|
|
|
|
|
|
def jsonlines_save(self, filebasename="save"):
|
|
|
|
with open(f'{filebasename}.jsonl', 'w') as file:
|
|
|
|
for sim in self.simlist:
|
|
|
|
file.write(json.dumps(vars(sim)) + "\n")
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def jsonlines_load(cls, filebasename="save"):
|
|
|
|
simlist = cls()
|
|
|
|
with open(f'{filebasename}.jsonl', 'r') as file:
|
|
|
|
for line in file:
|
|
|
|
sim = Simulation.from_dict(json.loads(line))
|
|
|
|
simlist.append(sim)
|
|
|
|
return simlist
|
2019-03-04 19:33:16 +01:00
|
|
|
|
|
|
|
@property
|
|
|
|
def as_matrix(self):
|
|
|
|
entrylist = []
|
|
|
|
for sim in self.simlist:
|
|
|
|
entrylist.append([sim.mcode, sim.wpcode, sim.wtcode, sim.gammacode, sim.alphacode, sim.vcode,sim.water_retention_both])
|
|
|
|
return np.asarray(entrylist)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def matrix_labels(self):
|
|
|
|
return ["mcode", "wpcode", "wtcode", "gammacode", "alphacode", "vcode"]
|