aboutsummaryrefslogtreecommitdiff
path: root/Tools/DevUtils/update_benchmarks_from_azure_output.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Tools/DevUtils/update_benchmarks_from_azure_output.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/Tools/DevUtils/update_benchmarks_from_azure_output.py b/Tools/DevUtils/update_benchmarks_from_azure_output.py
new file mode 100644
index 000000000..28c3dc6b5
--- /dev/null
+++ b/Tools/DevUtils/update_benchmarks_from_azure_output.py
@@ -0,0 +1,65 @@
+# Copyright 2023 Neil Zaim
+#
+# This file is part of WarpX.
+#
+# License: BSD-3-Clause-LBNL
+
+import json
+import re
+import sys
+
+'''
+This Python script updates the Azure benchmarks automatically using a raw Azure output textfile
+that is given as the first and only argument of the script.
+
+In the Azure output, we read the lines contained between
+"New file for Test_Name:"
+and the next occurrence of
+"'----------------'"
+And use these lines to update the benchmarks
+'''
+
+azure_output_filename = sys.argv[1]
+
+pattern_test_name = 'New file for (?P<testname>[\w\-]*)'
+closing_string = '----------------'
+benchmark_path = "../../Regression/Checksum/benchmarks_json/"
+benchmark_suffix = ".json"
+
+first_line_read = False
+current_test = ""
+
+with open(azure_output_filename, "r") as f:
+ for line in f:
+
+ if current_test == "":
+ # Here we search lines that read, for example,
+ # "New file for LaserAcceleration_BTD"
+ # and we set current_test = "LaserAcceleration_BTD"
+ match_test_name = re.search(pattern_test_name, line)
+ if match_test_name:
+ current_test = match_test_name.group('testname')
+ new_file_string = ""
+
+ else:
+ # We add each line to the new file string until we find the line containing
+ # "----------------"
+ # which indicates that we have read the new file entirely
+
+ if not closing_string in line:
+ if not first_line_read:
+ # Raw Azure output comes with a prefix at the beginning of each line that we do
+ # not need here. The first line that we will read is the prefix followed by the
+ # "{" character, so we determine how long the prefix is by finding the last
+ # occurence of the "{" character in this line.
+ azure_indent = line.rfind('{')
+ first_line_read = True
+ new_file_string += line[azure_indent:]
+
+ else:
+ # We have read the new file entirely. Dump it in the json file.
+ new_file_json = json.loads(new_file_string)
+ json_filepath = benchmark_path+current_test+benchmark_suffix
+ with open(json_filepath, "w") as f_json:
+ json.dump(new_file_json, f_json, indent=2)
+ current_test = ""