Ensemble: Switch data pid to data ref, and minor change.

scenario-dev-pa
Pierre-Antoine 2026-07-30 11:13:53 +02:00
parent 56217186ff
commit 54f5c7c548
2 changed files with 27 additions and 8 deletions

View File

@ -31,7 +31,7 @@ class Ensemble(SQLSubModel):
def __init__(self, id: int = -1,
name: str = "",
function=-1, range=[], data_pid=-1,
function=-1, range=[], target_data=None,
status=None, owner_scenario=-1):
super(Ensemble, self).__init__(
id=id, status=status,
@ -42,7 +42,7 @@ class Ensemble(SQLSubModel):
self._type = "generic"
self._function = function
self._range = range
self._data_pid = data_pid
self._target_data = target_data
@classmethod
def _db_create(cls, execute, ext=""):
@ -84,6 +84,7 @@ class Ensemble(SQLSubModel):
new = []
scenario = data["scenario"]
functions = data["ens_functions"]
stricklers = data["stricklers"]
loaded = data['loaded_pid']
table = execute(
@ -115,6 +116,15 @@ class Ensemble(SQLSubModel):
function = next(
filter(fn, functions.lst),
None
)
target_data = next(
filter(
lambda s: s._pamhyr_id == data_pid,
stricklers.lst
),
None
)
rdata = cls._decode_range(range, range_len)
@ -123,6 +133,7 @@ class Ensemble(SQLSubModel):
id, name=name,
function=function,
range=rdata,
target_data=target_data,
status=data["status"],
owner_scenario=owner_scenario
)
@ -150,6 +161,10 @@ class Ensemble(SQLSubModel):
if self._function._type == "generic":
fid = -1
data_pid = -1
if self._target_data is not None:
data_pid = self._target_data._pamhyr_id
execute(
"INSERT INTO " +
"ensemble(pamhyr_id, deleted, name, type, " +
@ -159,7 +174,7 @@ class Ensemble(SQLSubModel):
self.pamhyr_id, self.is_deleted(),
self._name, self._type,
fid, self._function._name, brange, length,
self._data_pid, self._status.scenario_id
data_pid, self._status.scenario_id
)
return True
@ -175,3 +190,8 @@ class Ensemble(SQLSubModel):
data_format = ">" + ''.join(itertools.repeat("d", length))
return struct.unpack(data_format, brange)
def get_sample(self, nb):
return self._function.get_sample(
self._range, nb
)

View File

@ -150,12 +150,11 @@ class Uniform(Function):
name=name, script=script
)
def get_sample(self, ens_range):
def get_sample(self, ens_range, nb):
b = ens_range[0]
t = ens_range[1]
n = ens_range[2]
step = (t - b) / n
step = (t - b) / nb
return np.arange(b, t, step)
@ -173,11 +172,11 @@ class Custom(Function):
self._type = "custom"
def get_sample(self, ens_range):
def get_sample(self, ens_range, nb):
try:
# Run script to (re)define the sample function
f = eval(self._script)
return f(ens_range)
return f(ens_range, nb)
except Exception as e:
logger_exception(e)
return None # TODO: Raise helpful exception