mirror of https://gitlab.com/pamhyr/pamhyr2
253 lines
6.6 KiB
Python
253 lines
6.6 KiB
Python
import os
|
|
import logging
|
|
import tempfile
|
|
|
|
from queue import Queue
|
|
from tools import trace, timer, logger_exception
|
|
|
|
from View.Tools.PamhyrWindow import PamhyrDialog, PamhyrWindow
|
|
|
|
from PyQt5.QtGui import (
|
|
QKeySequence,
|
|
)
|
|
|
|
from PyQt5.QtCore import (
|
|
Qt, QVariant, QAbstractTableModel,
|
|
QCoreApplication, QModelIndex, pyqtSlot,
|
|
QRect, QTimer, QProcess,
|
|
)
|
|
|
|
from PyQt5.QtWidgets import (
|
|
QDialogButtonBox, QPushButton, QLineEdit,
|
|
QFileDialog, QTableView, QAbstractItemView,
|
|
QUndoStack, QShortcut, QAction, QItemDelegate,
|
|
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
|
QTextEdit,
|
|
)
|
|
|
|
from View.WaitingDialog import WaitingDialog
|
|
|
|
_translate = QCoreApplication.translate
|
|
|
|
logger = logging.getLogger()
|
|
|
|
|
|
class CompareSolversWindow(PamhyrDialog):
|
|
_pamhyr_ui = "CompareSolvers"
|
|
_pamhyr_name = "Compare solvers"
|
|
|
|
def __init__(self, study=None, config=None,
|
|
parent=None):
|
|
self._solver1 = None
|
|
self._solver2 = None
|
|
|
|
name = _translate("Solver", "Compare solvers")
|
|
super(CompareSolversWindow, self).__init__(
|
|
title=name,
|
|
study=study,
|
|
config=config,
|
|
options=[],
|
|
parent=parent
|
|
)
|
|
|
|
self.setup_solvers()
|
|
self.setup_connections()
|
|
self.select_last_solver()
|
|
|
|
def setup_solvers(self):
|
|
solvers = self._config.solvers
|
|
solvers_name = list(
|
|
map(
|
|
self._format_solver_name,
|
|
solvers
|
|
)
|
|
)
|
|
|
|
self.combobox_add_items("comboBox1", solvers_name)
|
|
self.combobox_add_items("comboBox2", solvers_name)
|
|
|
|
def setup_connections(self):
|
|
self.find(QPushButton, "pushButton_ok").clicked.connect(self.accept)
|
|
self.find(QPushButton, "pushButton_cancel")\
|
|
.clicked.connect(self.reject)
|
|
|
|
def select_last_solver(self):
|
|
solvers = self._config.solvers
|
|
last = self._config.last_solver_name
|
|
|
|
solver = list(
|
|
filter(
|
|
lambda s: s.name == last,
|
|
solvers
|
|
)
|
|
)
|
|
|
|
if len(solver) != 0:
|
|
self.set_combobox_text(
|
|
"comboBox1",
|
|
self._format_solver_name(solver[0])
|
|
)
|
|
|
|
def _format_solver_name(self, solver):
|
|
return f"{solver.name} - ({solver._type})"
|
|
|
|
@property
|
|
def solver1(self):
|
|
return self._solver1
|
|
|
|
@property
|
|
def solver2(self):
|
|
return self._solver2
|
|
|
|
def accept(self):
|
|
solver_name1 = self.get_combobox_text("comboBox1")
|
|
solver_name1 = solver_name1.rsplit(" - ", 1)[0]
|
|
|
|
self._solver1 = next(
|
|
filter(
|
|
lambda s: s.name == solver_name1,
|
|
self._config.solvers
|
|
)
|
|
)
|
|
solver_name2 = self.get_combobox_text("comboBox2")
|
|
solver_name2 = solver_name2.rsplit(" - ", 1)[0]
|
|
|
|
self._solver2 = next(
|
|
filter(
|
|
lambda s: s.name == solver_name2,
|
|
self._config.solvers
|
|
)
|
|
)
|
|
|
|
super(CompareSolversWindow, self).accept()
|
|
|
|
|
|
class CompareScenariosWindow(PamhyrDialog):
|
|
_pamhyr_ui = "CompareScenarios"
|
|
_pamhyr_name = "Compare scenarios"
|
|
|
|
def __init__(self, study=None, config=None,
|
|
parent=None):
|
|
self._solver1 = None
|
|
self._solver2 = None
|
|
self._scenario1 = None
|
|
self._scenario2 = None
|
|
|
|
name = _translate("Solver", "Compare solvers")
|
|
super(CompareScenariosWindow, self).__init__(
|
|
title=name,
|
|
study=study,
|
|
config=config,
|
|
options=[],
|
|
parent=parent
|
|
)
|
|
|
|
self.setup_solvers()
|
|
self.setup_scenarios()
|
|
self.setup_connections()
|
|
self.select_last_solver()
|
|
|
|
def setup_solvers(self):
|
|
solvers = self._config.solvers
|
|
solvers_name = list(
|
|
map(
|
|
self._format_solver_name, solvers
|
|
)
|
|
)
|
|
|
|
self.combobox_add_items("comboBoxSolver1", solvers_name)
|
|
self.combobox_add_items("comboBoxSolver2", solvers_name)
|
|
|
|
def setup_scenarios(self):
|
|
scenarios = self._study.scenarios.lst
|
|
scenarios_name = list(
|
|
map(
|
|
lambda s: s.name, scenarios
|
|
)
|
|
)
|
|
|
|
self.combobox_add_items("comboBoxScenario1", scenarios_name)
|
|
self.combobox_add_items("comboBoxScenario2", scenarios_name)
|
|
|
|
def setup_connections(self):
|
|
self.find(QPushButton, "pushButton_ok").clicked.connect(self.accept)
|
|
self.find(QPushButton, "pushButton_cancel")\
|
|
.clicked.connect(self.reject)
|
|
|
|
def select_last_solver(self):
|
|
solvers = self._config.solvers
|
|
last = self._config.last_solver_name
|
|
|
|
solver = list(
|
|
filter(
|
|
lambda s: s.name == last,
|
|
solvers
|
|
)
|
|
)
|
|
|
|
if len(solver) != 0:
|
|
self.set_combobox_text(
|
|
"comboBoxSolver1",
|
|
self._format_solver_name(solver[0])
|
|
)
|
|
self.set_combobox_text(
|
|
"comboBoxSolver2",
|
|
self._format_solver_name(solver[0])
|
|
)
|
|
|
|
def _format_solver_name(self, solver):
|
|
return f"{solver.name} - ({solver._type})"
|
|
|
|
@property
|
|
def solver1(self):
|
|
return self._solver1
|
|
|
|
@property
|
|
def solver2(self):
|
|
return self._solver2
|
|
|
|
@property
|
|
def scenario1(self):
|
|
return self._scenario1
|
|
|
|
@property
|
|
def scenario2(self):
|
|
return self._scenario2
|
|
|
|
def accept(self):
|
|
solver_name1 = self.get_combobox_text("comboBoxSolver1")
|
|
solver_name1 = solver_name1.rsplit(" - ", 1)[0]
|
|
self._solver1 = next(
|
|
filter(
|
|
lambda s: s.name == solver_name1,
|
|
self._config.solvers
|
|
)
|
|
)
|
|
|
|
solver_name2 = self.get_combobox_text("comboBoxSolver2")
|
|
solver_name2 = solver_name2.rsplit(" - ", 1)[0]
|
|
self._solver2 = next(
|
|
filter(
|
|
lambda s: s.name == solver_name2,
|
|
self._config.solvers
|
|
)
|
|
)
|
|
|
|
scenario_name1 = self.get_combobox_text("comboBoxScenario1")
|
|
self._scenario1 = next(
|
|
filter(
|
|
lambda s: s.name == scenario_name1,
|
|
self._study.scenarios
|
|
)
|
|
)
|
|
|
|
scenario_name2 = self.get_combobox_text("comboBoxScenario2")
|
|
self._scenario2 = next(
|
|
filter(
|
|
lambda s: s.name == scenario_name2,
|
|
self._study.scenarios
|
|
)
|
|
)
|
|
|
|
super(CompareScenariosWindow, self).accept()
|