diff --git a/test/prsim_plot.py b/test/prsim_plot.py index bb53ce8..dad63e3 100755 --- a/test/prsim_plot.py +++ b/test/prsim_plot.py @@ -82,6 +82,20 @@ Use -exclude='regex' to specify signals to exclude (or -ex).""") if exclude_given: entries = [e for e in entries if re.search(exclude_re, e[1]) == None] + # Check if start time given + for arg in argv: + r = re.findall(r'-t0=(\d+)', arg) + if len(r) >= 1: + print(f"Filtering by start time t0 = {r[0]}") + entries = [e for e in entries if int(e[0]) >= int(r[0])] + + # Check if end time given + for arg in argv: + r = re.findall(r'-t1=(\d+)', arg) + if len(r) >= 1: + print(f"Filtering by start time t0 = {r[0]}") + entries = [e for e in entries if int(e[0]) <= int(r[0])] + assert len(entries) >= 1, "No valid entries in prsim.out!" # Get list of all sigs and times @@ -130,7 +144,7 @@ Use -exclude='regex' to specify signals to exclude (or -ex).""") # Generate figure # weird sizing is to try to keep "pixel" sizes approx const - fig = plt.figure(figsize = (num_sigs/3+0.5,num_times/3+0.2), dpi = 100) + fig = plt.figure(figsize = (num_times/3+0.2,num_sigs/3+0.2), dpi = 100) image = np.zeros((num_sigs, num_times, 3), dtype = int) image[signals_matrix == 0] = colour_undefined @@ -173,18 +187,37 @@ Use -exclude='regex' to specify signals to exclude (or -ex).""") else: s1 = s0 - - arrow_c = "black" if by_val == 1 else "grey" if by_val == 1: - plt.arrow(t0, s1, 0, s0-s1 + 0.2*np.sign(s0-s1), head_width = 0.5, width = 0.2, ec = "none", lw = 0, fc = "black", length_includes_head = True) + plt.arrow(t0, s1, 0, s0-s1 + 0.2*np.sign(s0-s1), head_width = 0.5, width = 0.2, + ec = "none", lw = 0, fc = "black", length_includes_head = True) else: - plt.arrow(t0, s1, 0, s0-s1 + 0.2*np.sign(s0-s1), head_width = 0, width = 0.2, ec = "none", lw = 0, fc = "black", length_includes_head = True) - plt.scatter((t0),(s0), c = "black", s = 30) + plt.arrow(t0, s1, 0, s0-s1 + 0.2*np.sign(s0-s1), head_width = 0, width = 0.2, + ec = "none", lw = 0, fc = "black", length_includes_head = True) + plt.scatter((t0),(s0), c = "black", s = 40) # Write times on x axis for time in unique_times: ax.text(time_to_index(time), num_sigs, time, ha = "center", va = "top", size = 10, rotation = 90) + # Find and plot wrong Assert statements + asserts = re.findall(r"\t *(\d+) .*\nWRONG ASSERT:\t(.+)", f) + if len(asserts): print("Failed asserts found!") + for a in asserts: + print(a) + time = int(a[0]) + index = time_to_index(time) + ax.axvline(index+0.5, c = "red", lw = 2) + ax.text(index+0.5, -1, a[1], rotation = 90, ha = "center", va = "bottom", c = "red") + + # Find echoed statements of the form "[digits] text" + echoes = re.findall(r"\t *(\d+) [^\t]*\n(\[\d+\].+)", f) + for a in echoes: + time = int(a[0]) + index = time_to_index(time) + c = "xkcd:bright purple" + ax.axvline(index+0.5, c = c, lw = 2) + ax.text(index+0.5, -1, a[1], rotation = 90, ha = "center", va = "bottom", c = c) + output_type = ".pdf" for arg in argv: if arg == "-png": output_type = ".png"