1*ae2b091fSJames Wright# SPDX-FileCopyrightText: Copyright (c) 2017-2024, HONEE contributors. 2*ae2b091fSJames Wright# SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause 3fc37ad8cSJames Wright 4fc37ad8cSJames Wrightimport re 5fc37ad8cSJames Wrightimport pandas as pd 6fc37ad8cSJames Wrightfrom pathlib import Path 7fc37ad8cSJames Wright 8fc37ad8cSJames Wright# Regex to parse STDOUT of the navierstokes run 9fc37ad8cSJames Wrightlogreg = re.compile( 10fc37ad8cSJames Wright r".*(?:^Degree of FEM Space: (\d+)).*(?:^Global FEM nodes: (\d{2,})).*(?:^dm_plex_box_faces: (\S+)).*(?:^Time taken for solution: (\d*\.?\d+)).*(?:^Relative Error: (\d*\.?\d+))", 11fc37ad8cSJames Wright re.DOTALL | re.MULTILINE, 12fc37ad8cSJames Wright) 13fc37ad8cSJames Wright 14fc37ad8cSJames Wright 15fc37ad8cSJames Wrightdef parseFile(file): 16fc37ad8cSJames Wright """Returns dictionary of parsed logfile contents. 17fc37ad8cSJames Wright 18fc37ad8cSJames Wright Parameters 19fc37ad8cSJames Wright ---------- 20fc37ad8cSJames Wright file : Path-like object 21fc37ad8cSJames Wright Path to the file to be parsed. 22fc37ad8cSJames Wright 23fc37ad8cSJames Wright Returns 24fc37ad8cSJames Wright ------- 25fc37ad8cSJames Wright dict 26fc37ad8cSJames Wright Values of "dofs", "time", "error", "degree", and "box_faces"' 27fc37ad8cSJames Wright """ 28fc37ad8cSJames Wright 29fc37ad8cSJames Wright values = {} 30fc37ad8cSJames Wright with file.open() as filer: 31fc37ad8cSJames Wright filestring = filer.read() 32fc37ad8cSJames Wright match = logreg.match(filestring) 33fc37ad8cSJames Wright values["degree"] = match[1] 34fc37ad8cSJames Wright values["dofs"] = match[2] 35fc37ad8cSJames Wright box_faceStr = match[3] 36fc37ad8cSJames Wright values["time"] = match[4] 37fc37ad8cSJames Wright values["error"] = match[5] 38fc37ad8cSJames Wright 39fc37ad8cSJames Wright # Splitting box_face argument str into individual entries 40fc37ad8cSJames Wright box_faceList = box_faceStr.split(",") 41fc37ad8cSJames Wright for i, box_face in enumerate(box_faceList): 42fc37ad8cSJames Wright values["box_face" + str(i)] = box_face 43fc37ad8cSJames Wright 44fc37ad8cSJames Wright return values 45fc37ad8cSJames Wright 46fc37ad8cSJames Wright 47fc37ad8cSJames Wrightif __name__ == "__main__": 48fc37ad8cSJames Wright # Directory location of log files 49fc37ad8cSJames Wright runlogDir = Path("./") 50fc37ad8cSJames Wright 51fc37ad8cSJames Wright results = pd.DataFrame() 52fc37ad8cSJames Wright for file in runlogDir.glob("*.log"): 53fc37ad8cSJames Wright values = parseFile(file) 54fc37ad8cSJames Wright results = results.append(values, ignore_index=True) 55fc37ad8cSJames Wright 56fc37ad8cSJames Wright # Convert string values to numeric type 57fc37ad8cSJames Wright results = results.apply(lambda col: pd.to_numeric(col, errors="coerce")) 58