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):
|
||||
return self._status == STATUS.STOPED
|
||||
|
||||
def has_results_loaded(self):
|
||||
self._status = STATUS.NOT_LAUNCHED
|
||||
|
||||
@name.setter
|
||||
def name(self, name):
|
||||
self._name = name
|
||||
|
|
|
|||
|
|
@ -124,40 +124,11 @@ class SolverLogWindow(PamhyrWindow):
|
|||
self.setup_action()
|
||||
self.setup_alarm()
|
||||
self.setup_connections()
|
||||
self.setup_workdir()
|
||||
self.setup_process()
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
self.export()
|
||||
self.run()
|
||||
|
||||
def setup_action(self):
|
||||
self.find(QAction, "action_start").setEnabled(False)
|
||||
|
|
@ -182,30 +153,74 @@ class SolverLogWindow(PamhyrWindow):
|
|||
|
||||
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):
|
||||
if type(msg) is str:
|
||||
logger.info(f"solver: {msg}")
|
||||
|
||||
msg = msg.rsplit('\n')[0]
|
||||
|
||||
if color is not None:
|
||||
msg = f"<font color=\"{color}\">" + msg + "</font>"
|
||||
|
||||
self.find(QTextEdit, "textEdit").append(msg)
|
||||
self._log_str(msg, color)
|
||||
elif type(msg) is int:
|
||||
logger.info(f"solver: Returns {msg}")
|
||||
self._log_int(msg, color)
|
||||
|
||||
color = "blue" if msg == 0 else "red"
|
||||
self.find(QTextEdit, "textEdit")\
|
||||
.append(f"<font color=\"{color}\">" +
|
||||
f" *** Finished with code {msg}" +
|
||||
"</font>")
|
||||
def _log_str(self, msg, color=None):
|
||||
logger.info(f"solver: {msg}")
|
||||
msg = msg.rsplit('\n')[0]
|
||||
|
||||
self.statusbar.showMessage(
|
||||
"Done" if msg == 0 else "Failed",
|
||||
3000
|
||||
if color is not None:
|
||||
msg = f"<font color=\"{color}\">" + msg + "</font>"
|
||||
|
||||
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):
|
||||
if self._solver.is_stoped():
|
||||
self.find(QAction, "action_start").setEnabled(True)
|
||||
|
|
@ -235,6 +250,18 @@ class SolverLogWindow(PamhyrWindow):
|
|||
else:
|
||||
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):
|
||||
if self._solver.is_stoped():
|
||||
self._log(f" *** Export study {self._solver.name}", color="blue")
|
||||
|
|
@ -276,6 +303,10 @@ class SolverLogWindow(PamhyrWindow):
|
|||
if self._solver.log_file() != "":
|
||||
self.find(QAction, "action_log_file").setEnabled(True)
|
||||
|
||||
###########
|
||||
# Results #
|
||||
###########
|
||||
|
||||
def results(self):
|
||||
if self._results is None:
|
||||
self._results = self._solver.results(
|
||||
|
|
@ -284,6 +315,8 @@ class SolverLogWindow(PamhyrWindow):
|
|||
self._parent.set_results(self._solver, self._results)
|
||||
self._parent.open_solver_results(self._solver, self._results)
|
||||
|
||||
self._solver.has_results_loaded()
|
||||
|
||||
def log_file(self):
|
||||
file_name = os.path.join(self._workdir, self._solver.log_file())
|
||||
log = SolverLogFileWindow(
|
||||
|
|
|
|||
Loading…
Reference in New Issue