mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
Ensemble: Add sequential runs with RUG variation into mage export.
This commit is contained in:
1 parent
807592eab2
commit
b5432498c6
6 files changed
+256
-3
No files matched your search
@@ -40,7 +40,7 @@ from PyQt5.QtWidgets import (
|
||||
QFileDialog, QTableView, QAbstractItemView,
|
||||
QUndoStack, QShortcut, QAction, QItemDelegate,
|
||||
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
||||
QTextEdit,
|
||||
QTextEdit, QProgressBar,
|
||||
)
|
||||
|
||||
from View.RunSolver.Log.Window import SolverLogFileWindow
|
||||
@@ -57,6 +57,36 @@ _translate = QCoreApplication.translate
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
class EnsembleRunNumberDialog(PamhyrDialog):
|
||||
_pamhyr_ui = "EnsembleRunNumberDialog"
|
||||
_pamhyr_name = "EnsembleRunNumber"
|
||||
|
||||
def __init__(self, trad=None, parent=None):
|
||||
super(EnsembleRunNumberDialog, self).__init__(
|
||||
title=trad[self._pamhyr_name],
|
||||
trad=trad,
|
||||
options=[],
|
||||
parent=parent
|
||||
)
|
||||
|
||||
self._init_default_values()
|
||||
|
||||
def _init_default_values(self):
|
||||
self.set_spin_box("spinBox", 100)
|
||||
|
||||
@property
|
||||
def number(self):
|
||||
return self._number
|
||||
|
||||
def accept(self):
|
||||
self._number = self.get_spin_box("spinBox")
|
||||
|
||||
super().accept()
|
||||
|
||||
def reject(self):
|
||||
self.close()
|
||||
|
||||
|
||||
class SelectSolverWindow(PamhyrDialog):
|
||||
_pamhyr_ui = "SelectSolver"
|
||||
_pamhyr_name = "Select solver"
|
||||
@@ -425,3 +455,121 @@ class SolverLogWindow(PamhyrWindow):
|
||||
parent=self,
|
||||
)
|
||||
log.show()
|
||||
|
||||
|
||||
class SolverLogEnsWindow(SolverLogWindow):
|
||||
_pamhyr_ui = "SolverLogEnsemble"
|
||||
_pamhyr_name = "Solver Log Ensemble"
|
||||
|
||||
def __init__(self, run_number=100,
|
||||
study=None, config=None,
|
||||
solver=None, parent=None):
|
||||
self._run_number = run_number
|
||||
self._last_run = 0
|
||||
|
||||
self._samples = {}
|
||||
for ens in study.river._ensembles.lst:
|
||||
if ens.function is None:
|
||||
continue
|
||||
|
||||
self._samples[ens] = ens.get_sample(self._run_number)
|
||||
|
||||
super(SolverLogEnsWindow, self).__init__(
|
||||
solver=solver,
|
||||
study=study,
|
||||
config=config,
|
||||
parent=parent,
|
||||
)
|
||||
|
||||
def setup_connections(self):
|
||||
self.setup_progress_bar()
|
||||
|
||||
super(SolverLogEnsWindow, self).setup_connections()
|
||||
|
||||
def setup_progress_bar(self):
|
||||
self._progress_bar = self.find(QProgressBar, "progressBar")
|
||||
self._progress_bar.setRange(0, self._run_number)
|
||||
self._progress_bar.setValue(0)
|
||||
|
||||
def _log_int(self, int_code, color=None):
|
||||
logger.info(f"solver: Returns {int_code}")
|
||||
color = "blue" if int_code == 0 else "red"
|
||||
|
||||
self.find(QTextEdit, "textEdit")\
|
||||
.append(
|
||||
f"<font color=\"{color}\">" +
|
||||
f" *** Finished with code {int_code}" +
|
||||
"</font>"
|
||||
)
|
||||
|
||||
self.statusbar.showMessage(
|
||||
"Done" if int_code == 0 else "Failed",
|
||||
3000
|
||||
)
|
||||
|
||||
if self._last_run < self._run_number:
|
||||
self.next()
|
||||
else:
|
||||
self._progress_bar.setValue(self._last_run)
|
||||
|
||||
def next(self):
|
||||
self._process = self.new_process(self._parent)
|
||||
|
||||
self._log(f" *** Run #{self._last_run}", color="blue")
|
||||
self._solver.export_ensemble_variation(
|
||||
self._study, self._workdir, qlog=self._output,
|
||||
samples=self._samples,
|
||||
)
|
||||
|
||||
self._solver.run(
|
||||
self._study,
|
||||
process=self._process,
|
||||
output_queue=self._output
|
||||
)
|
||||
self._last_run += 1
|
||||
self._progress_bar.setValue(self._last_run - 1)
|
||||
|
||||
def run(self):
|
||||
self._log(f" *** Run solver {self._solver.name}", color="blue")
|
||||
self.next()
|
||||
|
||||
def start(self):
|
||||
if self._solver.is_stoped():
|
||||
self._log(f" *** Export study {self._solver.name}", color="blue")
|
||||
|
||||
ok = self._solver.export(
|
||||
self._study, self._workdir, qlog=self._output
|
||||
)
|
||||
|
||||
if not ok:
|
||||
self._log(f" *** Failed to export", color="red")
|
||||
self.update()
|
||||
return
|
||||
else:
|
||||
self.update()
|
||||
self._process = self.new_process(self._parent)
|
||||
|
||||
self._log(" *** Start", color="blue")
|
||||
self._results = None
|
||||
|
||||
self.next()
|
||||
|
||||
self.find(QAction, "action_start").setEnabled(False)
|
||||
if _signal:
|
||||
self.find(QAction, "action_pause").setEnabled(True)
|
||||
else:
|
||||
self.find(QAction, "action_pause").setEnabled(False)
|
||||
self.find(QAction, "action_stop").setEnabled(True)
|
||||
self.find(QAction, "action_log_file").setEnabled(False)
|
||||
self.find(QAction, "action_results").setEnabled(False)
|
||||
|
||||
def stop(self):
|
||||
self._log(" *** Stop", color="blue")
|
||||
self._solver.kill()
|
||||
|
||||
self.find(QAction, "action_start").setEnabled(True)
|
||||
self.find(QAction, "action_pause").setEnabled(False)
|
||||
self.find(QAction, "action_stop").setEnabled(False)
|
||||
self.find(QAction, "action_results").setEnabled(True)
|
||||
if self._solver.log_file() != "":
|
||||
self.find(QAction, "action_log_file").setEnabled(True)
|
||||
Reference in new issue
Block a user