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()