Source code for ase2sprkkr.outputs.sprkkr_output_reader

from ..common.process_output_reader import ProcessOutputParser, readline_until
import os
import datetime
import re


[docs] class SprKkrOutputParser(ProcessOutputParser):
[docs] async def read_commons(self, stdout, result): out = await self.parse_files(stdout, result) return out
[docs] async def parse_files(self, stdout, result): # Read version info try: version = await readline_until(stdout, lambda line: b"VERSION" in line, can_end=False) version = version.split() result.program_info = {"version": version[3], "executable": version[1]} # Read start time started = await readline_until(stdout, lambda line: b"programm execution" in line, can_end=False) started = re.sub("[a-z]", "", started).strip() result.program_info["start_time"] = datetime.datetime.strptime(started, "%d/%m/%Y %H:%M:%S") # Wait until the file marker line await readline_until(stdout, lambda line: line.startswith(b" ffffffffff"), can_end=False) await stdout.readline() out = await stdout.readline() if out.decode("utf8").strip() != "FILES:": for i in range(10): print(await stdout.readline()) raise ValueError(f"Unexpected line: {out}") await stdout.readline() # skip empty line # Parse files line = (await stdout.readline()).decode("utf8").strip() while line: if ":" in line: name, rhs = line.split(":", 1) name = name.strip() rhs = rhs.strip() # Remove (number) if present if rhs.startswith("(") and ")" in rhs: rhs = rhs.split(")", 1)[1].strip() result.files[name] = rhs line = (await stdout.readline()).decode("utf8").strip() # Fallback for input file if "input" not in result.files: if hasattr(stdout, "file") and hasattr(stdout.file, "name"): filename = stdout.file.name if filename.endswith(".out") and os.path.exists(filename[:-4] + ".inp"): result.files["input"] = filename[:-4] + ".inp" except EOFError as e: raise EOFError("Unexpected end of output -- the program exited prematurely.") from e