From f3ad6af850a80f8a77bdd71de8d599a4580221ff Mon Sep 17 00:00:00 2001 From: andrzejnovak Date: Mon, 1 Apr 2024 15:16:33 +0200 Subject: [PATCH] feat: add 2d flow tests --- src/mplhep/plot.py | 9 --- .../test_hist2dplot_hist_all_flow_hint.png | Bin 0 -> 7030 bytes .../test_hist2dplot_hist_all_flow_show.png | Bin 0 -> 18232 bytes tests/test_basic.py | 56 ++++++++++++++++++ 4 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 tests/baseline/test_hist2dplot_hist_all_flow_hint.png create mode 100644 tests/baseline/test_hist2dplot_hist_all_flow_show.png diff --git a/src/mplhep/plot.py b/src/mplhep/plot.py index f9536879..b534cd94 100644 --- a/src/mplhep/plot.py +++ b/src/mplhep/plot.py @@ -689,15 +689,6 @@ def hist2dplot( f"Warning: {type(h)} is not allowed to get flow bins, flow bin option set to None" ) flow = None - elif ( - hasattr(h, "axes") - and hasattr(h.axes[0], "traits") - and hasattr(h.axes[0].traits, "underflow") - and not h.axes[0].traits.underflow - and not h.axes[0].traits.overflow - ): - flow = None - print(f"Warning: you don't have flow bins stored in {h}") elif flow in ["hint", "show"]: xwidth, ywidth = (xbins[-1] - xbins[0]) * 0.05, (ybins[-1] - ybins[0]) * 0.05 pxbins = np.r_[xbins[0] - xwidth, xbins, xbins[-1] + xwidth] diff --git a/tests/baseline/test_hist2dplot_hist_all_flow_hint.png b/tests/baseline/test_hist2dplot_hist_all_flow_hint.png new file mode 100644 index 0000000000000000000000000000000000000000..c38cde4a0c39835a9a3a16298b74436f41bee444 GIT binary patch literal 7030 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 literal 0 HcmV?d00001 diff --git a/tests/baseline/test_hist2dplot_hist_all_flow_show.png b/tests/baseline/test_hist2dplot_hist_all_flow_show.png new file mode 100644 index 0000000000000000000000000000000000000000..0d23a10a590184dde81477d1a09166fe24682cb0 GIT binary patch literal 18232 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 Wwh4_mRJuhW;-cBn