@@ -60,11 +60,14 @@ def mean(x, n):
6060"""
6161
6262import argparse
63+ import datetime
6364import inspect
6465import json
66+ import platform
6567import timeit
6668from ast import literal_eval
6769from functools import partial
70+ from importlib .metadata import PackageNotFoundError , version
6871from itertools import product
6972from pathlib import Path
7073
@@ -80,6 +83,14 @@ class SkipBenchmarkException(Exception):
8083 """Exception to be raised to skip benchmark for some parameter set."""
8184
8285
86+ def _get_version_or_none (package_name ):
87+ """Get installed version of package or `None` if package not found."""
88+ try :
89+ return version (package_name )
90+ except PackageNotFoundError :
91+ return None
92+
93+
8394def skip (message ):
8495 """Skip benchmark for a particular parameter set with explanatory message.
8596
@@ -319,6 +330,25 @@ def parse_args_collect_and_run_benchmarks(module=None):
319330 run_once_and_discard = args .run_once_and_discard ,
320331 )
321332 if args .output_file is not None :
333+ package_versions = {
334+ f"{ package } _version" : _get_version_or_none (package )
335+ for package in ("s2fft" , "jax" , "numpy" )
336+ }
337+ system_info = {
338+ "architecture" : platform .architecture (),
339+ "machine" : platform .machine (),
340+ "node" : platform .node (),
341+ "processor" : platform .processor (),
342+ "python_version" : platform .python_version (),
343+ "release" : platform .release (),
344+ "system" : platform .system (),
345+ ** package_versions ,
346+ }
322347 with open (args .output_file , "w" ) as f :
323- json .dump (results , f )
348+ output = {
349+ "date_time" : datetime .datetime .now ().isoformat (),
350+ "system_info" : system_info ,
351+ "results" : results ,
352+ }
353+ json .dump (output , f , indent = True )
324354 return results
0 commit comments