refactoring: refacto solver parameters

setup.py
Pierre-Antoine Rouby 2023-10-04 17:01:31 +02:00
parent 63d6c114c0
commit a64a9867ef
5 changed files with 85 additions and 115 deletions

View File

@ -24,9 +24,9 @@ from Solver.Mage import Mage7, Mage8
_translate = QCoreApplication.translate
solver_long_name = {
"generic": _translate("Solvers", "Generic"),
# "mage7": _translate("Solvers", "Mage version 7"),
"mage8": _translate("Solvers", "Mage version 8"),
"generic": "Generic",
# "mage7": "Mage v7",
"mage8": "Mage v8",
}
solver_type_list = {

View File

@ -52,7 +52,7 @@ from View.Stricklers.Window import StricklersWindow
from View.Frictions.Window import FrictionsWindow
from View.SedimentLayers.Window import SedimentLayersWindow
from View.SedimentLayers.Reach.Window import ReachSedimentLayersWindow
# from View.SolverParameters.Window import SolverParametersWindow
from View.SolverParameters.Window import SolverParametersWindow
# from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow
# from View.CheckList.Window import CheckListWindow
# from View.Results.Window import ResultsWindow

View File

@ -34,37 +34,20 @@ from PyQt5.QtWidgets import (
QComboBox,
)
from View.Tools.PamhyrTable import PamhyrTableModel
from View.SolverParameters.UndoCommand import *
from View.SolverParameters import translate as tr
from Solver.Solvers import solver_long_name, solver_type_list
logger = logging.getLogger()
_translate = QCoreApplication.translate
class TableModel(QAbstractTableModel):
def __init__(self, data=None, undo=None, tab=""):
super(QAbstractTableModel, self).__init__()
self._headers = list(tr.table_headers.keys())
self._data = data
self._undo = undo
self._tab = tab
self._params = self._data.get_params(self._tab)
def flags(self, index):
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
column = index.column()
if self._headers[column] == "value":
options |= Qt.ItemIsEditable
return options
def rowCount(self, parent):
return len(self._params)
def columnCount(self, parent):
return len(self._headers)
class TableModel(PamhyrTableModel):
def _setup_lst(self):
self._tab = self._opt_data
self._lst = self._data.get_params(self._tab)
def data(self, index, role):
if role != Qt.ItemDataRole.DisplayRole:
@ -75,24 +58,18 @@ class TableModel(QAbstractTableModel):
cname = self._headers[column]
if cname == "name":
value = self._params.get(row)[cname]
if value in tr.names:
value = tr.names[value]
value = self._lst.get(row)[cname]
if value in self._trad.get_dict("names"):
value = self._trad.get_dict("names")[value]
return value
elif cname == "value":
value = self._params.get(row)[cname]
if value in tr.yes_no:
value = tr.yes_no[value]
value = self._lst.get(row)[cname]
if value in self._trad.get_dict("yes_no"):
value = self._trad.get_dict("yes_no")[value]
return value
return QVariant()
def headerData(self, section, orientation, role):
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
return tr.table_headers[self._headers[section]]
return QVariant()
def setData(self, index, value, role=Qt.EditRole):
if not index.isValid() or role != Qt.EditRole:
return False
@ -102,12 +79,12 @@ class TableModel(QAbstractTableModel):
try:
if self._headers[column] == "value":
if value in tr.r_yes_no:
value = tr.r_yes_no[value].lower()
if value in self._trad.get_dict("r_yes_no"):
value = self._trad.get_dict("r_yes_no")[value].lower()
self._undo.push(
SetCommand(
self._params, row,
self._lst, row,
"value", value
)
)
@ -123,7 +100,7 @@ class TableModel(QAbstractTableModel):
# self._undo.push(
# AddCommand(
# self._params, row
# self._lst, row
# )
# )
@ -135,7 +112,7 @@ class TableModel(QAbstractTableModel):
# self._undo.push(
# DelCommand(
# self._params, rows
# self._lst, rows
# )
# )
@ -147,7 +124,7 @@ class TableModel(QAbstractTableModel):
# self._undo.push(
# SortCommand(
# self._params, False
# self._lst, False
# )
# )
@ -164,7 +141,7 @@ class TableModel(QAbstractTableModel):
# self._undo_stack.push(
# MoveCommand(
# self._params, "up", row
# self._lst, "up", row
# )
# )
@ -172,7 +149,7 @@ class TableModel(QAbstractTableModel):
# self.layoutChanged.emit()
# def move_down(self, index, parent=QModelIndex()):
# if row > len(self._params):
# if row > len(self._lst):
# return
# target = row
@ -181,7 +158,7 @@ class TableModel(QAbstractTableModel):
# self._undo_stack.push(
# MoveCommand(
# self._params, "down", row
# self._lst, "down", row
# )
# )

View File

@ -42,7 +42,7 @@ from PyQt5.QtWidgets import (
from View.SolverParameters.UndoCommand import *
from View.SolverParameters.Table import TableModel
from View.SolverParameters import translate as tr
from View.SolverParameters.translate import ParamTranslate
from Solver.Solvers import solver_long_name, solver_type_list
@ -55,16 +55,13 @@ class SolverParametersWindow(PamhyrWindow):
_pamhyr_name = "Solver parameters"
def __init__(self, study=None, config=None, parent=None):
# Init tanslate dictionary
tr.init()
name = self._pamhyr_name + " - " + study.name
super(SolverParametersWindow, self).__init__(
title = name,
study = study,
config = config,
options = ['copy'],
trad = ParamTranslate(),
parent = parent
)
@ -73,8 +70,6 @@ class SolverParametersWindow(PamhyrWindow):
self.setup_sc()
self.setup_table()
self.ui.setWindowTitle(self._title)
def setup_sc(self):
self._undo_stack = {}
@ -101,9 +96,13 @@ class SolverParametersWindow(PamhyrWindow):
# Create table model
self._table[st] = TableModel(
table_view = table,
data = self._study.river,
opt_data = st,
table_headers = self._trad.get_dict("table_headers"),
editable_headers = ["value"],
trad = self._trad,
undo = self._undo_stack[st],
tab = st,
)
table.setModel(self._table[st])

View File

@ -18,66 +18,60 @@
from PyQt5.QtCore import QCoreApplication
from View.Tools.PamhyrTranslate import PamhyrTranslate
_translate = QCoreApplication.translate
table_headers = None
yes_no = None
r_yes_no = None
names = None
class ParamTranslate(PamhyrTranslate):
def __init__(self):
super(ParamTranslate, self).__init__()
def init():
global table_headers
table_headers = {
"name": _translate("SolverParameters", "Name"),
"value": _translate("SolverParameters", "Value")
}
self._sub_dict["table_headers"] = {
"name": _translate("SolverParameters", "Name"),
"value": _translate("SolverParameters", "Value")
}
# Used to translate user parameter with value yes or no
global yes_no
yes_no = {
"yes": _translate("SolverParameters", "Yes"),
"no": _translate("SolverParameters", "No"),
"y": _translate("SolverParameters", "Y"),
"n": _translate("SolverParameters", "N"),
}
self._sub_dict["yes_no"] = {
"yes": _translate("SolverParameters", "Yes"),
"no": _translate("SolverParameters", "No"),
"y": _translate("SolverParameters", "Y"),
"n": _translate("SolverParameters", "N"),
}
# Reverse
global r_yes_no
r_yes_no = {
_translate("SolverParameters", "Yes"): "yes",
_translate("SolverParameters", "No"): "no",
_translate("SolverParameters", "Y"): "y",
_translate("SolverParameters", "N"): "n",
}
self._sub_dict["r_yes_no"] = {
_translate("SolverParameters", "Yes"): "yes",
_translate("SolverParameters", "No"): "no",
_translate("SolverParameters", "Y"): "y",
_translate("SolverParameters", "N"): "n",
}
global names
names = {
"all_init_time": _translate("SolverParameters", "Initial time (jj:hh:mm:ss)"),
"all_final_time": _translate("SolverParameters", "Final time (jj:hh:mm:ss)"),
"all_timestep": _translate("SolverParameters", "Timestep (second)"),
"all_command_line_arguments": _translate("SolverParameters", "Command line arguments"),
# Mage specific parameters
"mage_min_timestep": _translate("SolverParameters", "Minimum timestep (second)"),
"mage_timestep_tra": _translate("SolverParameters", "Time step of writing on .TRA"),
"mage_timestep_bin": _translate("SolverParameters", "Time step of writing on .BIN"),
"mage_implicitation": _translate("SolverParameters", "Implicitation parameter"),
"mage_continuity_discretization": _translate("SolverParameters", "Continuity discretization type (S/L)"),
"mage_qsj_discretization": _translate("SolverParameters", "QSJ discretization (A/B)"),
"mage_stop_criterion_iterations": _translate("SolverParameters", "Stop criterion iterations (G/A/R)"),
"mage_iteration_type": _translate("SolverParameters", "Iteration type"),
"mage_smooth_coef": _translate("SolverParameters", "Smoothing coefficient"),
"mage_cfl_max": _translate("SolverParameters", "Maximun accepted number of CFL"),
"mage_min_height": _translate("SolverParameters", "Minimum water height (meter)"),
"mage_max_niter": _translate("SolverParameters", "Maximun number of iterations (< 100)"),
"mage_timestep_reduction_factor": _translate("SolverParameters", "Timestep reduction factor"),
"mage_precision_reduction_factor_Z": _translate("SolverParameters", "Reduction precision factor of Z"),
"mage_precision_reduction_factor_Q": _translate("SolverParameters", "Reduction precision factor of Q"),
"mage_precision_reduction_factor_r": _translate("SolverParameters", "Reduction precision factor of residue"),
"mage_niter_max_precision": _translate("SolverParameters", "Number of iteration at maximum precision"),
"mage_niter_before_switch": _translate("SolverParameters", "Number of iteration before switch"),
"mage_max_froude": _translate("SolverParameters", "Maximum accepted Froude number"),
"mage_diffluence_node_height_balance": _translate("SolverParameters", "Diffluence node height balance"),
"mage_compute_reach_volume_balance": _translate("SolverParameters", "Compute reach volume balance (Y/N)"),
"mage_max_reach_volume_balance": _translate("SolverParameters", "Maximum reach volume balance"),
"mage_min_reach_volume_to_check": _translate("SolverParameters", "Minimum reach volume to check"),
}
self._sub_dict["names"] = {
"all_init_time": _translate("SolverParameters", "Initial time (jj:hh:mm:ss)"),
"all_final_time": _translate("SolverParameters", "Final time (jj:hh:mm:ss)"),
"all_timestep": _translate("SolverParameters", "Timestep (second)"),
"all_command_line_arguments": _translate("SolverParameters", "Command line arguments"),
# Mage specific parameters
"mage_min_timestep": _translate("SolverParameters", "Minimum timestep (second)"),
"mage_timestep_tra": _translate("SolverParameters", "Time step of writing on .TRA"),
"mage_timestep_bin": _translate("SolverParameters", "Time step of writing on .BIN"),
"mage_implicitation": _translate("SolverParameters", "Implicitation parameter"),
"mage_continuity_discretization": _translate("SolverParameters", "Continuity discretization type (S/L)"),
"mage_qsj_discretization": _translate("SolverParameters", "QSJ discretization (A/B)"),
"mage_stop_criterion_iterations": _translate("SolverParameters", "Stop criterion iterations (G/A/R)"),
"mage_iteration_type": _translate("SolverParameters", "Iteration type"),
"mage_smooth_coef": _translate("SolverParameters", "Smoothing coefficient"),
"mage_cfl_max": _translate("SolverParameters", "Maximun accepted number of CFL"),
"mage_min_height": _translate("SolverParameters", "Minimum water height (meter)"),
"mage_max_niter": _translate("SolverParameters", "Maximun number of iterations (< 100)"),
"mage_timestep_reduction_factor": _translate("SolverParameters", "Timestep reduction factor"),
"mage_precision_reduction_factor_Z": _translate("SolverParameters", "Reduction precision factor of Z"),
"mage_precision_reduction_factor_Q": _translate("SolverParameters", "Reduction precision factor of Q"),
"mage_precision_reduction_factor_r": _translate("SolverParameters", "Reduction precision factor of residue"),
"mage_niter_max_precision": _translate("SolverParameters", "Number of iteration at maximum precision"),
"mage_niter_before_switch": _translate("SolverParameters", "Number of iteration before switch"),
"mage_max_froude": _translate("SolverParameters", "Maximum accepted Froude number"),
"mage_diffluence_node_height_balance": _translate("SolverParameters", "Diffluence node height balance"),
"mage_compute_reach_volume_balance": _translate("SolverParameters", "Compute reach volume balance (Y/N)"),
"mage_max_reach_volume_balance": _translate("SolverParameters", "Maximum reach volume balance"),
"mage_min_reach_volume_to_check": _translate("SolverParameters", "Minimum reach volume to check"),
}