mirror of https://gitlab.com/pamhyr/pamhyr2
Ensemble: Change function to id and name, minor change and fix.
parent
6dc42b637a
commit
82fb2bcc48
|
|
@ -31,10 +31,7 @@ class Ensemble(SQLSubModel):
|
||||||
|
|
||||||
def __init__(self, id: int = -1,
|
def __init__(self, id: int = -1,
|
||||||
name: str = "",
|
name: str = "",
|
||||||
prob_dist="generic",
|
function=-1, range=[], data_pid=-1,
|
||||||
function="generic",
|
|
||||||
range=[],
|
|
||||||
data_pid=-1,
|
|
||||||
status=None, owner_scenario=-1):
|
status=None, owner_scenario=-1):
|
||||||
super(Ensemble, self).__init__(
|
super(Ensemble, self).__init__(
|
||||||
id=id, status=status,
|
id=id, status=status,
|
||||||
|
|
@ -43,7 +40,6 @@ class Ensemble(SQLSubModel):
|
||||||
|
|
||||||
self._name = name
|
self._name = name
|
||||||
self._type = "generic"
|
self._type = "generic"
|
||||||
self._prob_dist = prob_dist
|
|
||||||
self._function = function
|
self._function = function
|
||||||
self._range = range
|
self._range = range
|
||||||
self._data_pid = data_pid
|
self._data_pid = data_pid
|
||||||
|
|
@ -56,8 +52,8 @@ class Ensemble(SQLSubModel):
|
||||||
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
name TEXT NOT NULL,
|
name TEXT NOT NULL,
|
||||||
type VARCHAR(8) NOT NULL,
|
type VARCHAR(8) NOT NULL,
|
||||||
prob_dist VARCHAR(8) NOT NULL,
|
function INTEGER NOT NULL,
|
||||||
function VARCHAR(8) NOT NULL,
|
function_name VARCHAR(32) NOT NULL,
|
||||||
range BLOB NOT NULL,
|
range BLOB NOT NULL,
|
||||||
range_len INTEGER NOT NULL,
|
range_len INTEGER NOT NULL,
|
||||||
data_pid INTEGER NOT NULL,
|
data_pid INTEGER NOT NULL,
|
||||||
|
|
@ -87,11 +83,12 @@ class Ensemble(SQLSubModel):
|
||||||
def _db_load(cls, execute, data=None):
|
def _db_load(cls, execute, data=None):
|
||||||
new = []
|
new = []
|
||||||
scenario = data["scenario"]
|
scenario = data["scenario"]
|
||||||
|
functions = data["ens_functions"]
|
||||||
loaded = data['loaded_pid']
|
loaded = data['loaded_pid']
|
||||||
|
|
||||||
table = execute(
|
table = execute(
|
||||||
"SELECT pamhyr_id, deleted, name, type, " +
|
"SELECT pamhyr_id, deleted, name, type, " +
|
||||||
"prob_dist, function, range, range_len, data_pid, " +
|
"function, function_name, range, range_len, data_pid, " +
|
||||||
"scenario " +
|
"scenario " +
|
||||||
"FROM ensemble " +
|
"FROM ensemble " +
|
||||||
f"WHERE scenario = {scenario.id} " +
|
f"WHERE scenario = {scenario.id} " +
|
||||||
|
|
@ -105,18 +102,26 @@ class Ensemble(SQLSubModel):
|
||||||
deleted = (next(it) == 1)
|
deleted = (next(it) == 1)
|
||||||
name = next(it)
|
name = next(it)
|
||||||
type = next(it)
|
type = next(it)
|
||||||
prob_dist = next(it)
|
fid = next(it)
|
||||||
function = next(it)
|
fname = next(it)
|
||||||
range = next(it)
|
range = next(it)
|
||||||
range_len = next(it)
|
range_len = next(it)
|
||||||
data_pid = next(it)
|
data_pid = next(it)
|
||||||
owner_scenario = next(it)
|
owner_scenario = next(it)
|
||||||
|
|
||||||
|
def fn(f): f.name == fname
|
||||||
|
if fid != -1:
|
||||||
|
def fn(f): f.pamhyr_id == fid
|
||||||
|
|
||||||
|
function = next(
|
||||||
|
filter(fn, functions),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
|
||||||
rdata = cls._decode_range(range, range_len)
|
rdata = cls._decode_range(range, range_len)
|
||||||
|
|
||||||
new_ensemble = cls(
|
new_ensemble = cls(
|
||||||
id, name=name,
|
id, name=name,
|
||||||
prob_dist=prob_dist,
|
|
||||||
function=function,
|
function=function,
|
||||||
range=rdata,
|
range=rdata,
|
||||||
status=data["status"],
|
status=data["status"],
|
||||||
|
|
@ -142,27 +147,24 @@ class Ensemble(SQLSubModel):
|
||||||
|
|
||||||
brange, length = self._encode_range()
|
brange, length = self._encode_range()
|
||||||
|
|
||||||
|
fid = self._function.pamhyr_id
|
||||||
|
if self._function._type == "generic":
|
||||||
|
fid = -1
|
||||||
|
|
||||||
execute(
|
execute(
|
||||||
"INSERT INTO " +
|
"INSERT INTO " +
|
||||||
"ensemble(pamhyr_id, deleted, name, type, " +
|
"ensemble(pamhyr_id, deleted, name, type, " +
|
||||||
" prob_dist, function, range, range_len, " +
|
" function, function_name, range, range_len, " +
|
||||||
" data_pid, scenario) " +
|
" data_pid, scenario) " +
|
||||||
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
|
||||||
self.pamhyr_id, self.is_deleted(),
|
self.pamhyr_id, self.is_deleted(),
|
||||||
self._name, self._type,
|
self._name, self._type,
|
||||||
self._prob_dist, self._function, brange, length,
|
fid, self._function.name, brange, length,
|
||||||
self._data_pid, self._status.scenario_id
|
self._data_pid, self._status.scenario_id
|
||||||
)
|
)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _data_traversal(self,
|
|
||||||
predicate=lambda obj, data: True,
|
|
||||||
modifier=lambda obj, data: None,
|
|
||||||
data={}):
|
|
||||||
if predicate(self, data):
|
|
||||||
modifier(self, data)
|
|
||||||
|
|
||||||
def _encode_range(self):
|
def _encode_range(self):
|
||||||
length = len(self._range)
|
length = len(self._range)
|
||||||
data_format = ">" + ''.join(itertools.repeat("d", length))
|
data_format = ">" + ''.join(itertools.repeat("d", length))
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,6 @@ class EnsembleList(PamhyrModelList):
|
||||||
f"WHERE scenario = {self._status.scenario_id}"
|
f"WHERE scenario = {self._status.scenario_id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
if data is None:
|
|
||||||
data = {}
|
|
||||||
|
|
||||||
for ens in self._lst:
|
for ens in self._lst:
|
||||||
ens._db_save(execute, data=data)
|
ens._db_save(execute, data=data)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
import struct
|
import struct
|
||||||
import logging
|
import logging
|
||||||
import itertools
|
import itertools
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
from tools import logger_exception
|
from tools import logger_exception
|
||||||
|
|
||||||
|
|
@ -150,7 +151,13 @@ class Uniform(Function):
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_sample(self, dist, ens_range):
|
def get_sample(self, dist, ens_range):
|
||||||
return range(ens_range[0], ens_range[1])
|
b = ens_range[0]
|
||||||
|
t = ens_range[1]
|
||||||
|
n = ens_range[2]
|
||||||
|
|
||||||
|
step = (t - b) / n
|
||||||
|
|
||||||
|
return np.arange(b, t, step)
|
||||||
|
|
||||||
|
|
||||||
class Custom(Function):
|
class Custom(Function):
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,12 @@ class FunctionList(PamhyrModelList):
|
||||||
def _db_load(cls, execute, data=None):
|
def _db_load(cls, execute, data=None):
|
||||||
new = cls(status=data['status'])
|
new = cls(status=data['status'])
|
||||||
|
|
||||||
new._lst = [Uniform(status=data['status'])]
|
# Default functions
|
||||||
|
new._lst = [
|
||||||
|
Uniform(status=data['status']),
|
||||||
|
]
|
||||||
|
|
||||||
|
# DB custom functions
|
||||||
new._lst += Function._db_load(
|
new._lst += Function._db_load(
|
||||||
execute, data
|
execute, data
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@ class Study(SQLModel):
|
||||||
self.scenarios[0] = s0
|
self.scenarios[0] = s0
|
||||||
self.status.scenario = s0
|
self.status.scenario = s0
|
||||||
|
|
||||||
self._ens_function = FunctionList(status=self.status)
|
self._ens_functions = FunctionList(status=self.status)
|
||||||
|
|
||||||
self._river = River(status=self.status)
|
self._river = River(status=self.status)
|
||||||
else:
|
else:
|
||||||
|
|
@ -400,10 +400,12 @@ class Study(SQLModel):
|
||||||
data["loaded_pid"] = set()
|
data["loaded_pid"] = set()
|
||||||
|
|
||||||
# Get ensemble function
|
# Get ensemble function
|
||||||
new._ens_function = FunctionList._db_load(
|
new._ens_functions = FunctionList._db_load(
|
||||||
sql_exec, data=data
|
sql_exec, data=data
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data["ens_functions"] = new._ens_functions
|
||||||
|
|
||||||
# Load river data
|
# Load river data
|
||||||
new._river = River._db_load(
|
new._river = River._db_load(
|
||||||
sql_exec, data=data
|
sql_exec, data=data
|
||||||
|
|
@ -466,7 +468,7 @@ class Study(SQLModel):
|
||||||
|
|
||||||
self._save_submodel(
|
self._save_submodel(
|
||||||
[
|
[
|
||||||
self.scenarios, self._ens_function,
|
self.scenarios, self._ens_functions,
|
||||||
self._river
|
self._river
|
||||||
],
|
],
|
||||||
data=progress
|
data=progress
|
||||||
|
|
@ -586,7 +588,8 @@ class Study(SQLModel):
|
||||||
data = {
|
data = {
|
||||||
"status": self.status,
|
"status": self.status,
|
||||||
"loaded_pid": set(),
|
"loaded_pid": set(),
|
||||||
"scenario": scenario
|
"scenario": scenario,
|
||||||
|
"ens_functions": self._ens_functions,
|
||||||
}
|
}
|
||||||
|
|
||||||
self.status.start_loading()
|
self.status.start_loading()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue