File indexing completed on 2026-09-16 08:18:54
0001 import sys
0002 import argparse
0003 import numpy as np
0004 import uproot
0005
0006 parser = argparse.ArgumentParser()
0007 parser.add_argument("a")
0008 parser.add_argument("b")
0009 parser.add_argument("--event-nr", default="event_nr")
0010 parser.add_argument("--fail-fast", action="store_true")
0011 args = parser.parse_args()
0012
0013 a_data = uproot.open(args.a)
0014 b_data = uproot.open(args.b)
0015 event_nr = args.event_nr
0016 fail_fast = args.fail_fast
0017
0018 a_sort_index = np.argsort(a_data[event_nr].array(library="np"), kind="stable")
0019 b_sort_index = np.argsort(b_data[event_nr].array(library="np"), kind="stable")
0020
0021 np.set_printoptions(linewidth=np.inf)
0022
0023
0024 def cmp(a, b):
0025 if np.isscalar(a):
0026 if a != b:
0027 return False
0028 elif type(a) == np.ndarray:
0029 if not np.array_equal(a, b, equal_nan=True):
0030 return False
0031 else:
0032 for aa, bb in zip(a, b):
0033 if not cmp(aa, bb):
0034 return False
0035 return True
0036
0037
0038 failed_events = set()
0039 failed_keys = set()
0040 for key in a_data.keys():
0041 if key == event_nr:
0042 continue
0043
0044 a_vals = a_data[key].array(library="np")
0045 a_vals = a_vals[a_sort_index]
0046
0047 b_vals = b_data[key].array(library="np")
0048 b_vals = b_vals[b_sort_index]
0049
0050 for event, (a, b) in enumerate(zip(a_vals, b_vals)):
0051 if not cmp(a, b):
0052 print(f"event {event} failed for {key}")
0053 print(f"a {a}")
0054 print(f"b {b}")
0055 print()
0056
0057 if fail_fast:
0058 sys.exit(1)
0059 failed_events.add(event)
0060 failed_keys.add(key)
0061
0062 if failed_events or failed_keys:
0063 print("summary")
0064 print("failed events: " + " ".join(map(str, sorted(failed_events))))
0065 print("failed keys: " + " ".join(failed_keys))
0066 sys.exit(1)
0067
0068 sys.exit(0)