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, def __init__(self, id: int = -1,
name: str = "", name: str = "",
function=-1, range=[], data_pid=-1, function=-1, range=[], target_data=None,
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,
@ -42,7 +42,7 @@ class Ensemble(SQLSubModel):
self._type = "generic" self._type = "generic"
self._function = function self._function = function
self._range = range self._range = range
self._data_pid = data_pid self._target_data = target_data
@classmethod @classmethod
def _db_create(cls, execute, ext=""): def _db_create(cls, execute, ext=""):
@ -84,6 +84,7 @@ class Ensemble(SQLSubModel):
new = [] new = []
scenario = data["scenario"] scenario = data["scenario"]
functions = data["ens_functions"] functions = data["ens_functions"]
stricklers = data["stricklers"]
loaded = data['loaded_pid'] loaded = data['loaded_pid']
table = execute( table = execute(
@ -115,6 +116,15 @@ class Ensemble(SQLSubModel):
function = next( function = next(
filter(fn, functions.lst), 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) rdata = cls._decode_range(range, range_len)
@ -123,6 +133,7 @@ class Ensemble(SQLSubModel):
id, name=name, id, name=name,
function=function, function=function,
range=rdata, range=rdata,
target_data=target_data,
status=data["status"], status=data["status"],
owner_scenario=owner_scenario owner_scenario=owner_scenario
) )
@ -150,6 +161,10 @@ class Ensemble(SQLSubModel):
if self._function._type == "generic": if self._function._type == "generic":
fid = -1 fid = -1
data_pid = -1
if self._target_data is not None:
data_pid = self._target_data._pamhyr_id
execute( execute(
"INSERT INTO " + "INSERT INTO " +
"ensemble(pamhyr_id, deleted, name, type, " + "ensemble(pamhyr_id, deleted, name, type, " +
@ -159,7 +174,7 @@ class Ensemble(SQLSubModel):
self.pamhyr_id, self.is_deleted(), self.pamhyr_id, self.is_deleted(),
self._name, self._type, self._name, self._type,
fid, self._function._name, brange, length, fid, self._function._name, brange, length,
self._data_pid, self._status.scenario_id data_pid, self._status.scenario_id
) )
return True return True
@ -175,3 +190,8 @@ class Ensemble(SQLSubModel):
data_format = ">" + ''.join(itertools.repeat("d", length)) data_format = ">" + ''.join(itertools.repeat("d", length))
return struct.unpack(data_format, brange) 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 name=name, script=script
) )
def get_sample(self, ens_range): def get_sample(self, ens_range, nb):
b = ens_range[0] b = ens_range[0]
t = ens_range[1] t = ens_range[1]
n = ens_range[2]
step = (t - b) / n step = (t - b) / nb
return np.arange(b, t, step) return np.arange(b, t, step)
@ -173,11 +172,11 @@ class Custom(Function):
self._type = "custom" self._type = "custom"
def get_sample(self, ens_range): def get_sample(self, ens_range, nb):
try: try:
# Run script to (re)define the sample function # Run script to (re)define the sample function
f = eval(self._script) f = eval(self._script)
return f(ens_range) return f(ens_range, nb)
except Exception as e: except Exception as e:
logger_exception(e) logger_exception(e)
return None # TODO: Raise helpful exception return None # TODO: Raise helpful exception