Commit 8671e7b7 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Model, SolverParameters: Add SQL export for solver parameters.

Showing with 106 additions and 6 deletions
+106 -6
...@@ -184,7 +184,7 @@ class River(Graph, SQLSubModel): ...@@ -184,7 +184,7 @@ class River(Graph, SQLSubModel):
LateralContributionList, LateralContributionList,
# InitialConditionsDict, # InitialConditionsDict,
StricklersList, StricklersList,
# SolverParametersList, SolverParametersList,
] ]
def __init__(self, status=None): def __init__(self, status=None):
...@@ -232,15 +232,25 @@ class River(Graph, SQLSubModel): ...@@ -232,15 +232,25 @@ class River(Graph, SQLSubModel):
execute, execute,
data data
) )
# Lateral Contribution
new._lateral_contribution = LateralContributionList._sql_load( new._lateral_contribution = LateralContributionList._sql_load(
execute, execute,
data data
) )
# Stricklers
new._stricklers = StricklersList._sql_load( new._stricklers = StricklersList._sql_load(
execute, execute,
data data
) )
# Parameters
for solver in new._parameters:
data["solver"] = solver
new._parameters[solver] = SolverParametersList(
execute,
data
)
return new return new
def _sql_save(self, execute, data = None): def _sql_save(self, execute, data = None):
...@@ -248,6 +258,8 @@ class River(Graph, SQLSubModel): ...@@ -248,6 +258,8 @@ class River(Graph, SQLSubModel):
objs.append(self._boundary_condition) objs.append(self._boundary_condition)
objs.append(self._lateral_contribution) objs.append(self._lateral_contribution)
objs.append(self._stricklers) objs.append(self._stricklers)
for solver in self._parameters:
objs.append(self._parameters[solver])
self._save_submodel(execute, objs, data) self._save_submodel(execute, objs, data)
return True return True
......
...@@ -3,12 +3,16 @@ ...@@ -3,12 +3,16 @@
from copy import copy from copy import copy
from tools import trace, timer from tools import trace, timer
class Parameter(object): from Model.DB import SQLSubModel
def __init__(self, status = None):
class Parameter():
def __init__(self,
name = "", value = "",
status = None):
self._status = status self._status = status
self._name = "" self._name = name
self._value = "" self._value = value
@property @property
def name(self): def name(self):
...@@ -42,11 +46,12 @@ class Parameter(object): ...@@ -42,11 +46,12 @@ class Parameter(object):
return new return new
class SolverParametersList(object): class SolverParametersList(SQLSubModel):
def __init__(self, solver_type = None, status = None): def __init__(self, solver_type = None, status = None):
super(SolverParametersList, self).__init__() super(SolverParametersList, self).__init__()
self._status = status self._status = status
self._solver = solver_type
self._parameters = list( self._parameters = list(
map( map(
lambda t: Parameter.from_tuple(t, self._status), lambda t: Parameter.from_tuple(t, self._status),
...@@ -54,6 +59,79 @@ class SolverParametersList(object): ...@@ -54,6 +59,79 @@ class SolverParametersList(object):
) )
) )
@classmethod
def _sql_create(cls, execute):
execute("""
CREATE TABLE solver_parameter(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
ind INTEGER NOT NULL,
name TEXT NOT NULL,
value TEXT NOT NULL,
solver TEXT NOT NULL
)
""")
return cls._create_submodel(execute)
@classmethod
def _sql_update(cls, execute, version):
return cls._update_submodel(execute, version)
@classmethod
def _sql_load(cls, execute, data = None):
status = data["status"]
solver = data["solver"]
new = cls(solver_type = solver, status = status)
table = execute(
"SELECT ind, name, value " +
"FROM solver_parameter " +
f"WHERE solver = '{solver.type}'"
)
for _ in table:
new._parameters.append(None)
for row in table:
ind = row[0]
name = row[1]
value = row[2]
p = cls(
name = name,
value = value,
status = status
)
new._parameters[ind] = p
return stricklers
def _sql_save(self, execute, data = None):
t = self._solver._type
execute(
"DELETE FROM solver_parameter " +
f"WHERE solver = '{t}'"
)
ind = 0
for param in self._parameters:
sql = (
"INSERT INTO " +
"solver_parameter(ind, name, value, solver) "+
"VALUES (" +
f"{ind}, " +
f"'{self._sql_format(param.name)}', " +
f"'{self._sql_format(param.value)}', " +
f"'{self._sql_format(t)}'" +
")"
)
execute(sql)
ind += 1
return True
def __len__(self): def __len__(self):
return len(self._parameters) return len(self._parameters)
......
...@@ -19,6 +19,8 @@ class STATUS(Enum): ...@@ -19,6 +19,8 @@ class STATUS(Enum):
PAUSED = 5 PAUSED = 5
class AbstractSolver(object): class AbstractSolver(object):
_type = ""
def __init__(self, name): def __init__(self, name):
super(AbstractSolver, self).__init__() super(AbstractSolver, self).__init__()
......
...@@ -5,6 +5,8 @@ from Solver.ASolver import ( ...@@ -5,6 +5,8 @@ from Solver.ASolver import (
) )
class GenericSolver(AbstractSolver): class GenericSolver(AbstractSolver):
_type = "generic"
def __init__(self, name): def __init__(self, name):
super(GenericSolver, self).__init__(name) super(GenericSolver, self).__init__(name)
......
...@@ -8,6 +8,8 @@ from Solver.ASolver import AbstractSolver ...@@ -8,6 +8,8 @@ from Solver.ASolver import AbstractSolver
from Checker.Mage import MageNetworkGraphChecker from Checker.Mage import MageNetworkGraphChecker
class Mage(AbstractSolver): class Mage(AbstractSolver):
_type = "mage"
def __init__(self, name): def __init__(self, name):
super(Mage, self).__init__(name) super(Mage, self).__init__(name)
...@@ -310,6 +312,8 @@ class Mage(AbstractSolver): ...@@ -310,6 +312,8 @@ class Mage(AbstractSolver):
########## ##########
class Mage7(Mage): class Mage7(Mage):
_type = "mage7"
def __init__(self, name): def __init__(self, name):
super(Mage7, self).__init__(name) super(Mage7, self).__init__(name)
...@@ -326,6 +330,8 @@ class Mage7(Mage): ...@@ -326,6 +330,8 @@ class Mage7(Mage):
########## ##########
class Mage8(Mage): class Mage8(Mage):
_type = "mage8"
def __init__(self, name): def __init__(self, name):
super(Mage8, self).__init__(name) super(Mage8, self).__init__(name)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment