mirror of https://gitlab.com/pamhyr/pamhyr2
SolverRun: Fix bin/gra reading before solver running.
parent
c11350d49a
commit
00afc6c06b
|
|
@ -121,6 +121,9 @@ class AbstractSolver(object):
|
||||||
def is_stoped(self):
|
def is_stoped(self):
|
||||||
return self._status == STATUS.STOPED
|
return self._status == STATUS.STOPED
|
||||||
|
|
||||||
|
def has_results_loaded(self):
|
||||||
|
self._status = STATUS.NOT_LAUNCHED
|
||||||
|
|
||||||
@name.setter
|
@name.setter
|
||||||
def name(self, name):
|
def name(self, name):
|
||||||
self._name = name
|
self._name = name
|
||||||
|
|
|
||||||
|
|
@ -124,40 +124,11 @@ class SolverLogWindow(PamhyrWindow):
|
||||||
self.setup_action()
|
self.setup_action()
|
||||||
self.setup_alarm()
|
self.setup_alarm()
|
||||||
self.setup_connections()
|
self.setup_connections()
|
||||||
|
self.setup_workdir()
|
||||||
|
self.setup_process()
|
||||||
|
|
||||||
self._workdir = ""
|
self.export()
|
||||||
if self._study.filename == "":
|
self.run()
|
||||||
self._workdir = tempfile.TemporaryDirectory()
|
|
||||||
else:
|
|
||||||
self._workdir = os.path.join(
|
|
||||||
os.path.dirname(self._study.filename),
|
|
||||||
"_PAMHYR_",
|
|
||||||
self._study.name.replace(" ", "_"),
|
|
||||||
self._solver.name.replace(" ", "_"),
|
|
||||||
)
|
|
||||||
os.makedirs(self._workdir, exist_ok=True)
|
|
||||||
|
|
||||||
self._alarm.start(500)
|
|
||||||
self._output = Queue()
|
|
||||||
self._process = self.new_process(parent)
|
|
||||||
|
|
||||||
self._log(f" *** Export study {self._solver.name}", color="blue")
|
|
||||||
self._solver.export(self._study, self._workdir, qlog=self._output)
|
|
||||||
|
|
||||||
self.update()
|
|
||||||
|
|
||||||
self._log(f" *** Run solver {self._solver.name}", color="blue")
|
|
||||||
self._solver.run(
|
|
||||||
study,
|
|
||||||
process=self._process,
|
|
||||||
output_queue=self._output
|
|
||||||
)
|
|
||||||
|
|
||||||
def new_process(self, parent):
|
|
||||||
new = QProcess(parent)
|
|
||||||
new.setWorkingDirectory(self._workdir)
|
|
||||||
new.setProcessChannelMode(QProcess.MergedChannels)
|
|
||||||
return new
|
|
||||||
|
|
||||||
def setup_action(self):
|
def setup_action(self):
|
||||||
self.find(QAction, "action_start").setEnabled(False)
|
self.find(QAction, "action_start").setEnabled(False)
|
||||||
|
|
@ -182,30 +153,74 @@ class SolverLogWindow(PamhyrWindow):
|
||||||
|
|
||||||
self._alarm.timeout.connect(self.update)
|
self._alarm.timeout.connect(self.update)
|
||||||
|
|
||||||
|
def setup_workdir(self):
|
||||||
|
self._workdir = ""
|
||||||
|
if self._study.filename == "":
|
||||||
|
self._workdir = tempfile.TemporaryDirectory()
|
||||||
|
else:
|
||||||
|
self._workdir = os.path.join(
|
||||||
|
os.path.dirname(self._study.filename),
|
||||||
|
"_PAMHYR_",
|
||||||
|
self._study.name.replace(" ", "_"),
|
||||||
|
self._solver.name.replace(" ", "_"),
|
||||||
|
)
|
||||||
|
os.makedirs(self._workdir, exist_ok=True)
|
||||||
|
|
||||||
|
def setup_process(self):
|
||||||
|
self._alarm.start(500)
|
||||||
|
self._output = Queue()
|
||||||
|
self._process = self.new_process(self._parent)
|
||||||
|
|
||||||
|
def new_process(self, parent):
|
||||||
|
new = QProcess(parent)
|
||||||
|
new.setWorkingDirectory(self._workdir)
|
||||||
|
new.setProcessChannelMode(QProcess.MergedChannels)
|
||||||
|
return new
|
||||||
|
|
||||||
|
def export(self):
|
||||||
|
self._log(f" *** Export study {self._solver.name}", color="blue")
|
||||||
|
self._solver.export(self._study, self._workdir, qlog=self._output)
|
||||||
|
self.update()
|
||||||
|
|
||||||
|
#######
|
||||||
|
# LOG #
|
||||||
|
#######
|
||||||
|
|
||||||
def _log(self, msg, color=None):
|
def _log(self, msg, color=None):
|
||||||
if type(msg) is str:
|
if type(msg) is str:
|
||||||
logger.info(f"solver: {msg}")
|
self._log_str(msg, color)
|
||||||
|
|
||||||
msg = msg.rsplit('\n')[0]
|
|
||||||
|
|
||||||
if color is not None:
|
|
||||||
msg = f"<font color=\"{color}\">" + msg + "</font>"
|
|
||||||
|
|
||||||
self.find(QTextEdit, "textEdit").append(msg)
|
|
||||||
elif type(msg) is int:
|
elif type(msg) is int:
|
||||||
logger.info(f"solver: Returns {msg}")
|
self._log_int(msg, color)
|
||||||
|
|
||||||
color = "blue" if msg == 0 else "red"
|
def _log_str(self, msg, color=None):
|
||||||
self.find(QTextEdit, "textEdit")\
|
logger.info(f"solver: {msg}")
|
||||||
.append(f"<font color=\"{color}\">" +
|
msg = msg.rsplit('\n')[0]
|
||||||
f" *** Finished with code {msg}" +
|
|
||||||
"</font>")
|
|
||||||
|
|
||||||
self.statusbar.showMessage(
|
if color is not None:
|
||||||
"Done" if msg == 0 else "Failed",
|
msg = f"<font color=\"{color}\">" + msg + "</font>"
|
||||||
3000
|
|
||||||
|
self.find(QTextEdit, "textEdit").append(msg)
|
||||||
|
|
||||||
|
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
|
||||||
|
)
|
||||||
|
|
||||||
|
##########
|
||||||
|
# UPDATE #
|
||||||
|
##########
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
if self._solver.is_stoped():
|
if self._solver.is_stoped():
|
||||||
self.find(QAction, "action_start").setEnabled(True)
|
self.find(QAction, "action_start").setEnabled(True)
|
||||||
|
|
@ -235,6 +250,18 @@ class SolverLogWindow(PamhyrWindow):
|
||||||
else:
|
else:
|
||||||
self._log(s)
|
self._log(s)
|
||||||
|
|
||||||
|
####################
|
||||||
|
# Process controle #
|
||||||
|
####################
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self._log(f" *** Run solver {self._solver.name}", color="blue")
|
||||||
|
self._solver.run(
|
||||||
|
self._study,
|
||||||
|
process=self._process,
|
||||||
|
output_queue=self._output
|
||||||
|
)
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
if self._solver.is_stoped():
|
if self._solver.is_stoped():
|
||||||
self._log(f" *** Export study {self._solver.name}", color="blue")
|
self._log(f" *** Export study {self._solver.name}", color="blue")
|
||||||
|
|
@ -276,6 +303,10 @@ class SolverLogWindow(PamhyrWindow):
|
||||||
if self._solver.log_file() != "":
|
if self._solver.log_file() != "":
|
||||||
self.find(QAction, "action_log_file").setEnabled(True)
|
self.find(QAction, "action_log_file").setEnabled(True)
|
||||||
|
|
||||||
|
###########
|
||||||
|
# Results #
|
||||||
|
###########
|
||||||
|
|
||||||
def results(self):
|
def results(self):
|
||||||
if self._results is None:
|
if self._results is None:
|
||||||
self._results = self._solver.results(
|
self._results = self._solver.results(
|
||||||
|
|
@ -284,6 +315,8 @@ class SolverLogWindow(PamhyrWindow):
|
||||||
self._parent.set_results(self._solver, self._results)
|
self._parent.set_results(self._solver, self._results)
|
||||||
self._parent.open_solver_results(self._solver, self._results)
|
self._parent.open_solver_results(self._solver, self._results)
|
||||||
|
|
||||||
|
self._solver.has_results_loaded()
|
||||||
|
|
||||||
def log_file(self):
|
def log_file(self):
|
||||||
file_name = os.path.join(self._workdir, self._solver.log_file())
|
file_name = os.path.join(self._workdir, self._solver.log_file())
|
||||||
log = SolverLogFileWindow(
|
log = SolverLogFileWindow(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue