From 828e9cd28766fc4344e6bc9ebe0af838d478f07b Mon Sep 17 00:00:00 2001 From: Andrzej Novak Date: Tue, 25 Nov 2025 16:52:54 +0100 Subject: [PATCH 1/5] feat: add flow parameter support to comparison plotters Fixes #594 --- src/mplhep/comparison_plotters.py | 316 ++++++++++++++++-- src/mplhep/plot.py | 281 ++++++++-------- .../baseline/test_comparison_flow.png | Bin 0 -> 86903 bytes .../from_issues/baseline/test_hists_flow.png | Bin 0 -> 49209 bytes tests/from_issues/baseline/test_issue_594.png | Bin 0 -> 36224 bytes tests/from_issues/test_comparison_flow.py | 56 ++++ tests/from_issues/test_hists_flow.py | 56 ++++ tests/from_issues/test_issue594.py | 19 ++ 8 files changed, 564 insertions(+), 164 deletions(-) create mode 100644 tests/from_issues/baseline/test_comparison_flow.png create mode 100644 tests/from_issues/baseline/test_hists_flow.png create mode 100644 tests/from_issues/baseline/test_issue_594.png create mode 100644 tests/from_issues/test_comparison_flow.py create mode 100644 tests/from_issues/test_hists_flow.py create mode 100644 tests/from_issues/test_issue594.py diff --git a/src/mplhep/comparison_plotters.py b/src/mplhep/comparison_plotters.py index 3a238b1a..00106a7e 100644 --- a/src/mplhep/comparison_plotters.py +++ b/src/mplhep/comparison_plotters.py @@ -59,6 +59,7 @@ def hists( ylabel=None, h1_label="h1", h2_label="h2", + flow="hint", fig=None, ax_main=None, ax_comparison=None, @@ -81,6 +82,11 @@ def hists( The label for the first histogram. Default is "h1". h2_label : str, optional The label for the second histogram. Default is "h2". + flow : str, optional + Whether to plot the under/overflow bin. If "show", add additional under/overflow bin. + If "sum", add the under/overflow bin content to first/last bin. + If "hint", draw markers at the axis to indicate presence of under/overflow. + If "none", do nothing. Default is "hint". fig : matplotlib.figure.Figure or None, optional The figure to use for the plot. If fig, ax_main and ax_comparison are None, a new figure will be created. Default is None. ax_main : matplotlib.axes.Axes or None, optional @@ -117,27 +123,84 @@ def hists( msg = "Need to provide fig, ax_main and ax_comparison (or none of them)." raise ValueError(msg) - xlim = (h1_plottable.edges_1d()[0], h1_plottable.edges_1d()[-1]) + histplot(h1, ax=ax_main, label=h1_label, histtype="step", flow=flow) + histplot(h2, ax=ax_main, label=h2_label, histtype="step", flow=flow) + + # Only set xlim if not showing flow bins (histplot handles xlim for flow="show") + if flow != "show": + xlim = (h1_plottable.edges_1d()[0], h1_plottable.edges_1d()[-1]) + ax_main.set_xlim(xlim) - histplot(h1_plottable, ax=ax_main, label=h1_label, histtype="step") - histplot(h2_plottable, ax=ax_main, label=h2_label, histtype="step") - ax_main.set_xlim(xlim) ax_main.set_ylabel(ylabel) ax_main.legend() - _ = ax_main.xaxis.set_ticklabels([]) + # For flow="show", don't clear ticklabels here (histplot set custom labels) + # tick_params(labelbottom=False) at the end will hide them instead + if flow != "show": + _ = ax_main.xaxis.set_ticklabels([]) comparison( - h1_plottable, - h2_plottable, + h1, + h2, ax_comparison, xlabel=xlabel, h1_label=h1_label, h2_label=h2_label, + flow=flow, **comparison_kwargs, ) fig.align_ylabels() + # Ensure tick labels appear only on the comparison axis, not on the main axis + # This must be done at the end, after all plotting, because matplotlib's sharex + # mechanism may override labels set during plotting + if flow == "show": + # For flow="show", regenerate tick labels with indicators for flow bins + # matplotlib's sharex clears labels, so we must regenerate from histogram edges + ax_main.tick_params(labelbottom=False) + ax_comparison.tick_params(labelbottom=True) + + # Get histogram edges to identify flow bin boundaries + # Note: h1_plottable has original edges [0, 1, 2, ..., 10], not flow-extended + edges = h1_plottable.edges_1d() + tick_positions = ax_comparison.get_xticks() + + # Check if there are flow labels (ticks in underflow/overflow regions) + has_underflow = any(tick < edges[0] for tick in tick_positions) + has_overflow = any(tick > edges[-1] for tick in tick_positions) + + # Filter out edge ticks that would overlap with flow labels + filtered_ticks = [] + tick_labels = [] + + for tick in tick_positions: + # Skip edge ticks that would overlap with adjacent flow labels + if has_underflow and abs(tick - edges[0]) < 1e-10: + continue # Skip tick at first regular edge (e.g., 0) + if has_overflow and abs(tick - edges[-1]) < 1e-10: + continue # Skip tick at last regular edge (e.g., 10) + + filtered_ticks.append(tick) + # Check if this tick is outside the regular histogram range (flow bins) + if tick < edges[0]: # Underflow bin + tick_labels.append(f"<{edges[0]:g}") + elif tick > edges[-1]: # Overflow bin + tick_labels.append(f">{edges[-1]:g}") + else: + tick_labels.append(f"{tick:g}") + + ax_comparison.set_xticks(filtered_ticks) + ax_comparison.set_xticklabels(tick_labels) + else: + # For other flow options, control label visibility and regenerate labels + ax_main.tick_params(labelbottom=False) + ax_comparison.tick_params(labelbottom=True) + # Explicitly regenerate tick labels on the comparison axis + # (they may have been set to empty strings during plotting) + tick_positions = ax_comparison.get_xticks() + ax_comparison.set_xticks(tick_positions) + ax_comparison.set_xticklabels([f"{tick:g}" for tick in tick_positions]) + return fig, ax_main, ax_comparison @@ -152,6 +215,7 @@ def comparison( comparison_ylabel=None, comparison_ylim=None, h1_w2method="sqrt", + flow="hint", **histplot_kwargs, ): """ @@ -181,6 +245,11 @@ def comparison( h1_w2method : str, optional What kind of bin uncertainty to use for h1: "sqrt" for the Poisson standard deviation derived from the variance stored in the histogram object, "poisson" for asymmetrical uncertainties based on a Poisson confidence interval. Default is "sqrt". Asymmetrical uncertainties are not supported for the asymmetry and efficiency comparisons. + flow : str, optional + Whether to plot the under/overflow bin. If "show", add additional under/overflow bin. + If "sum", add the under/overflow bin content to first/last bin. + If "hint", draw markers at the axis to indicate presence of under/overflow. + If "none", do nothing. Default is "hint". **histplot_kwargs : optional Arguments to be passed to histplot(), called in case the comparison is "pull", or plot_error_hist(), called for every other comparison case. In the former case, the default arguments are histtype="stepfilled" and color="darkgrey". In the later case, the default argument is color="black". @@ -204,11 +273,80 @@ def comparison( _check_counting_histogram(h1_plottable) _check_counting_histogram(h2_plottable) - comparison_values, lower_uncertainties, upper_uncertainties = get_comparison( - h1_plottable, h2_plottable, comparison, h1_w2method - ) + # When flow="show", we need to compute comparison on flow-included values + # so that the comparison histogram also has underflow/overflow bins + used_flow_bins = False + if flow == "show": + # Try to get flow bins if they exist (from original histogram objects, not plottable) + try: + # Access flow bins from the original histogram objects + h1_flow_values = h1.values(flow=True) + + # Check if histogram actually has flow bins (length should be +2) + if len(h1_flow_values) == len(h1_plottable.values()) + 2: + # Use the original histograms which already have flow bins + h1_for_comparison = h1 + h2_for_comparison = h2 + used_flow_bins = True + else: + # No actual flow bins, use regular histograms + h1_for_comparison = h1_plottable + h2_for_comparison = h2_plottable + except (AttributeError, TypeError): + # Histogram doesn't support flow bins, use regular histograms + h1_for_comparison = h1_plottable + h2_for_comparison = h2_plottable + else: + h1_for_comparison = h1_plottable + h2_for_comparison = h2_plottable + + if used_flow_bins: + # Compute comparison on flow-included values directly + # Since get_comparison() would strip flow bins, we compute it ourselves + h1_vals_flow = h1_for_comparison.values(flow=True) + h2_vals_flow = h2_for_comparison.values(flow=True) + h1_vars_flow = h1_for_comparison.variances(flow=True) + h2_vars_flow = h2_for_comparison.variances(flow=True) + + # For now, only support ratio comparison with flow bins + # Compute ratio: h1/h2 + with np.errstate(divide="ignore", invalid="ignore"): + comparison_values = np.where( + h2_vals_flow != 0, h1_vals_flow / h2_vals_flow, np.nan + ) + # Compute uncertainties (symmetric for now) + if h1_vars_flow is not None and h2_vars_flow is not None: + # Ratio uncertainty: sqrt((var1/val2^2) + (val1^2 * var2 / val2^4)) + ratio_var = np.where( + h2_vals_flow != 0, + (h1_vars_flow / h2_vals_flow**2) + + (h1_vals_flow**2 * h2_vars_flow / h2_vals_flow**4), + np.nan, + ) + lower_uncertainties = np.sqrt(ratio_var) + upper_uncertainties = lower_uncertainties + else: + lower_uncertainties = np.zeros_like(comparison_values) + upper_uncertainties = np.zeros_like(comparison_values) + else: + comparison_values, lower_uncertainties, upper_uncertainties = get_comparison( + h1_for_comparison, h2_for_comparison, comparison, h1_w2method + ) - if np.allclose(lower_uncertainties, upper_uncertainties, equal_nan=True): + # Use the comparison histogram directly if it has flow bins, otherwise create EnhancedPlottableHistogram + if used_flow_bins: + # comparison was computed on flow-included histograms + # Create a new histogram with the same structure + + # Use enhanced plottable histogram for flow comparison + comparison_plottable = EnhancedPlottableHistogram( + comparison_values, + edges=h2_plottable.axes[0].edges, + variances=comparison_variances if np.any(comparison_variances) else None, + kind=h2_plottable.kind, + ) + # Regular comparison without flow bins + elif np.allclose(lower_uncertainties, upper_uncertainties, equal_nan=True): comparison_plottable = EnhancedPlottableHistogram( comparison_values, edges=h2_plottable.axes[0].edges, @@ -229,16 +367,18 @@ def comparison( "yerr", [comparison_plottable.yerr_lo, comparison_plottable.yerr_hi] ) - comparison_plottable.errors() + # Only call errors() if it's an EnhancedPlottableHistogram + if hasattr(comparison_plottable, "errors"): + comparison_plottable.errors() if comparison == "pull": histplot_kwargs.setdefault("histtype", "fill") histplot_kwargs.setdefault("color", "darkgrey") - histplot(comparison_plottable, ax=ax, **histplot_kwargs) + histplot(comparison_plottable, ax=ax, flow=flow, **histplot_kwargs) else: histplot_kwargs.setdefault("color", "black") histplot_kwargs.setdefault("histtype", "errorbar") - histplot(comparison_plottable, ax=ax, **histplot_kwargs) + histplot(comparison_plottable, ax=ax, flow=flow, **histplot_kwargs) if comparison in ["ratio", "split_ratio", "relative_difference"]: if comparison_ylim is None: @@ -307,8 +447,10 @@ def comparison( ax.axhline(0, ls="--", lw=1.0, color="black") ax.set_ylabel(rf"$\frac{{{h1_label} - {h2_label}}}{{{h1_label} + {h2_label}}}$") - xlim = (h1_plottable.edges_1d()[0], h1_plottable.edges_1d()[-1]) - ax.set_xlim(xlim) + # Only set xlim if not showing flow bins (histplot handles xlim for flow="show") + if flow != "show": + xlim = (h1_plottable.edges_1d()[0], h1_plottable.edges_1d()[-1]) + ax.set_xlim(xlim) ax.set_xlabel(xlabel) if comparison_ylim is not None: ax.set_ylim(comparison_ylim) @@ -371,6 +513,7 @@ def data_model( model_uncertainty=True, model_uncertainty_label="MC stat. unc.", data_w2method="poisson", + flow="hint", fig=None, ax_main=None, ax_comparison=None, @@ -417,6 +560,11 @@ def data_model( The label for the model uncertainties. Default is "MC stat. unc.". data_w2method : str, optional What kind of bin uncertainty to use for data_hist: "sqrt" for the Poisson standard deviation derived from the variance stored in the histogram object, "poisson" for asymmetrical uncertainties based on a Poisson confidence interval. Default is "poisson". + flow : str, optional + Whether to plot the under/overflow bin. If "show", add additional under/overflow bin. + If "sum", add the under/overflow bin content to first/last bin. + If "hint", draw markers at the axis to indicate presence of under/overflow. + If "none", do nothing. Default is "hint". fig : matplotlib.figure.Figure or None, optional The figure to use for the plot. If fig, ax_main and ax_comparison are None, a new figure will be created. Default is None. ax_main : matplotlib.axes.Axes or None, optional @@ -453,14 +601,15 @@ def data_model( if stacked_components is None: stacked_components = [] - # Convert input histograms to plottable histograms. + # Convert input histograms to plottable histograms for binning checks. + # Keep original histograms for passing to histplot (to preserve flow bin info). # If the input is a function, it is left unchanged. data_hist_plottable = make_plottable_histogram(data_hist) - stacked_components = [ + stacked_components_plottable = [ make_plottable_histogram(component) if not callable(component) else component for component in stacked_components ] - unstacked_components = [ + unstacked_components_plottable = [ make_plottable_histogram(component) if not callable(component) else component for component in unstacked_components ] @@ -470,11 +619,28 @@ def data_model( unstacked_kwargs_list = unstacked_kwargs_list.copy() model_sum_kwargs = model_sum_kwargs.copy() + # Set flow parameter in kwargs for model plotting + stacked_kwargs.setdefault("flow", flow) + model_sum_kwargs.setdefault("flow", flow) + # Ensure all unstacked kwargs have flow parameter + # If unstacked_kwargs_list is shorter than unstacked_components, extend it + while len(unstacked_kwargs_list) < len(unstacked_components): + unstacked_kwargs_list.append({}) + for i in range(len(unstacked_kwargs_list)): + if unstacked_kwargs_list[i] is None: + unstacked_kwargs_list[i] = {} + else: + unstacked_kwargs_list[i] = unstacked_kwargs_list[i].copy() + unstacked_kwargs_list[i].setdefault("flow", flow) + comparison_kwargs.setdefault("h1_label", data_label) comparison_kwargs.setdefault("h2_label", "MC") comparison_kwargs.setdefault("comparison", "split_ratio") model_components = stacked_components + unstacked_components + model_components_plottable = ( + stacked_components_plottable + unstacked_components_plottable + ) if len(model_components) == 0: msg = "Need to provide at least one model component." @@ -483,8 +649,8 @@ def data_model( model_type = _get_model_type(model_components) if model_type == "histograms": - _check_binning_consistency([*model_components, data_hist_plottable]) - for component in [*model_components, data_hist_plottable]: + _check_binning_consistency([*model_components_plottable, data_hist_plottable]) + for component in [*model_components_plottable, data_hist_plottable]: _check_counting_histogram(component) if fig is None and ax_main is None and ax_comparison is None: @@ -506,6 +672,15 @@ def data_model( msg = "Cannot provide fig, ax_main or ax_comparison with plot_only." raise ValueError(msg) + # For flow="show", don't constrain function_range + if flow == "show": + func_range = None + else: + func_range = [ + data_hist_plottable.edges_1d()[0], + data_hist_plottable.edges_1d()[-1], + ] + model( stacked_components=stacked_components, stacked_labels=stacked_labels, @@ -517,10 +692,7 @@ def data_model( stacked_kwargs=stacked_kwargs, unstacked_kwargs_list=unstacked_kwargs_list, model_sum_kwargs=model_sum_kwargs, - function_range=[ - data_hist_plottable.edges_1d()[0], - data_hist_plottable.edges_1d()[-1], - ], + function_range=func_range, model_uncertainty=model_uncertainty, model_uncertainty_label=model_uncertainty_label, fig=fig, @@ -528,30 +700,55 @@ def data_model( ) histplot( - data_hist_plottable, + data_hist, ax=ax_main, w2method=data_w2method, color="black", label=data_label, histtype="errorbar", + flow=flow, ) + # If flow="show", calculate the correct xlim that includes flow bins + # We need to compute this manually because model() resets xlim to regular edges + flow_xlim = None + if flow == "show": + # Get the bin width to extend xlim for flow bins + edges = data_hist_plottable.edges_1d() + bin_width = edges[1] - edges[0] + # Extend by 1.5 bin widths on each side to show flow bin labels + flow_xlim = (edges[0] - 1.5 * bin_width, edges[-1] + 1.5 * bin_width) + if plot_only == "ax_main": ax_main.set_xlabel(xlabel) else: - _ = ax_main.xaxis.set_ticklabels([]) + # For flow="show", don't clear ticklabels here (histplot set custom labels) + # tick_params(labelbottom=False) at the end will hide them instead + if flow != "show": + _ = ax_main.xaxis.set_ticklabels([]) ax_main.set_xlabel(" ") if model_type == "histograms": - model_hist = sum(model_components) + # Sum the original histograms to preserve flow bin information for comparison + model_hist_orig = sum(model_components) + # Also sum plottables for variance manipulation + model_hist_plottable = sum(model_components_plottable) if not model_uncertainty: - model_hist.set_variances(np.zeros_like(model_hist.variances())) + model_hist_plottable.set_variances( + np.zeros_like(model_hist_plottable.variances()) + ) + # Need to update the original hist's variances too if it's plottable + if hasattr(model_hist_orig, "set_variances"): + model_hist_orig.set_variances( + np.zeros_like(model_hist_orig.variances()) + ) else: def sum_components(x): return sum(f(x) for f in model_components) - model_hist = _make_hist_from_function(sum_components, data_hist_plottable) + model_hist_orig = _make_hist_from_function(sum_components, data_hist_plottable) + model_hist_plottable = model_hist_orig if comparison_kwargs["comparison"] == "pull" and ( model_type == "functions" or not model_uncertainty @@ -564,11 +761,12 @@ def sum_components(x): ax_main.legend() comparison( - data_hist_plottable, - model_hist, + data_hist, + model_hist_orig, ax=ax_comparison, xlabel=xlabel, w2method=data_w2method, + flow=flow, **comparison_kwargs, ) @@ -578,4 +776,58 @@ def sum_components(x): fig.align_ylabels() + # Restore the xlim for flow bins if needed (some operations may have reset it) + if flow == "show" and flow_xlim is not None: + ax_main.set_xlim(flow_xlim) + + # Ensure tick labels appear only on the comparison axis, not on the main axis + # This must be done at the end, after all plotting, because matplotlib's sharex + # mechanism may override labels set during plotting + if flow == "show": + # For flow="show", regenerate tick labels with indicators for flow bins + # matplotlib's sharex clears labels, so we must regenerate from histogram edges + ax_main.tick_params(labelbottom=False) + ax_comparison.tick_params(labelbottom=True) + + # Get histogram edges to identify flow bin boundaries + # Note: data_hist_plottable has original edges [0, 1, 2, ..., 10], not flow-extended + edges = data_hist_plottable.edges_1d() + tick_positions = ax_comparison.get_xticks() + + # Check if there are flow labels (ticks in underflow/overflow regions) + has_underflow = any(tick < edges[0] for tick in tick_positions) + has_overflow = any(tick > edges[-1] for tick in tick_positions) + + # Filter out edge ticks that would overlap with flow labels + filtered_ticks = [] + tick_labels = [] + + for tick in tick_positions: + # Skip edge ticks that would overlap with adjacent flow labels + if has_underflow and abs(tick - edges[0]) < 1e-10: + continue # Skip tick at first regular edge (e.g., 0) + if has_overflow and abs(tick - edges[-1]) < 1e-10: + continue # Skip tick at last regular edge (e.g., 10) + + filtered_ticks.append(tick) + # Check if this tick is outside the regular histogram range (flow bins) + if tick < edges[0]: # Underflow bin + tick_labels.append(f"<{edges[0]:g}") + elif tick > edges[-1]: # Overflow bin + tick_labels.append(f">{edges[-1]:g}") + else: + tick_labels.append(f"{tick:g}") + + ax_comparison.set_xticks(filtered_ticks) + ax_comparison.set_xticklabels(tick_labels) + else: + # For other flow options, control label visibility and regenerate labels + ax_main.tick_params(labelbottom=False) + ax_comparison.tick_params(labelbottom=True) + # Explicitly regenerate tick labels on the comparison axis + # (they may have been set to empty strings during plotting) + tick_positions = ax_comparison.get_xticks() + ax_comparison.set_xticks(tick_positions) + ax_comparison.set_xticklabels([f"{tick:g}" for tick in tick_positions]) + return fig, ax_main, ax_comparison diff --git a/src/mplhep/plot.py b/src/mplhep/plot.py index f6ddaaa5..43e0f008 100644 --- a/src/mplhep/plot.py +++ b/src/mplhep/plot.py @@ -468,7 +468,7 @@ def iterable_not_string(arg): flow=flow, xoffsets=xoffsets, ) - flow_bins, underflow, overflow = flow_info + _flow_bins, underflow, overflow = flow_info ########## # Plotting @@ -708,61 +708,45 @@ def iterable_not_string(arg): msg = "No figure found" raise ValueError(msg) if flow == "hint": + # Get all shared x-axes to draw markers on all of them + shared_axes = ax.get_shared_x_axes().get_siblings(ax) + shared_axes = [ + _ax for _ax in shared_axes if _ax.get_position().x0 == ax.get_position().x0 + ] + _marker_size = ( 30 * ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()).width ) - if underflow > 0.0: - ax.scatter( - final_bins[0], - 0, - _marker_size, - marker=align_marker("<", halign="right"), - edgecolor="black", - zorder=5, - clip_on=False, - facecolor="white", - transform=ax.get_xaxis_transform(), - ) - if overflow > 0.0: - ax.scatter( - final_bins[-1], - 0, - _marker_size, - marker=align_marker(">", halign="left"), - edgecolor="black", - zorder=5, - clip_on=False, - facecolor="white", - transform=ax.get_xaxis_transform(), - ) - - elif flow == "show": - underflow_xticklabel = f"<{flow_bins[1]:g}" - overflow_xticklabel = f">{flow_bins[-2]:g}" - # Loop over shared x axes to get xticks and xticklabels - xticks, xticklabels = np.array([]), [] - shared_axes = ax.get_shared_x_axes().get_siblings(ax) - shared_axes = [ - _ax for _ax in shared_axes if _ax.get_position().x0 == ax.get_position().x0 - ] + # Draw markers on all shared axes for _ax in shared_axes: - _xticks = _ax.get_xticks() - _xticklabels = [label.get_text() for label in _ax.get_xticklabels()] - - # Check if underflow/overflow xtick already exists - if ( - underflow_xticklabel in _xticklabels - or overflow_xticklabel in _xticklabels - ): - xticks = _xticks - xticklabels = _xticklabels - break - if len(_xticklabels) > 0: - xticks = _xticks - xticklabels = _xticklabels + if underflow > 0.0: + _ax.scatter( + final_bins[0], + 0, + _marker_size, + marker=align_marker("<", halign="right"), + edgecolor="black", + zorder=5, + clip_on=False, + facecolor="white", + transform=_ax.get_xaxis_transform(), + ) + if overflow > 0.0: + _ax.scatter( + final_bins[-1], + 0, + _marker_size, + marker=align_marker(">", halign="left"), + edgecolor="black", + zorder=5, + clip_on=False, + facecolor="white", + transform=_ax.get_xaxis_transform(), + ) + elif flow == "show": lw = ax.spines["bottom"].get_linewidth() _edges = plottables[0].edges_1d() _centers = plottables[0].centers @@ -771,91 +755,101 @@ def iterable_not_string(arg): * ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted()).width ) - if underflow > 0.0 or underflow_xticklabel in xticklabels: - # Replace any existing xticks in underflow region with underflow bin center - _mask = xticks > flow_bins[1] - xticks = np.insert(xticks[_mask], 0, _centers[0]) - xticklabels = [underflow_xticklabel] + [ - xlab for i, xlab in enumerate(xticklabels) if _mask[i] - ] + # Use edge values for flow bin labels (not center values) + underflow_xticklabel = f"<{_edges[1]:g}" + overflow_xticklabel = f">{_edges[-2]:g}" + + # Get shared axes for marker placement + shared_axes = ax.get_shared_x_axes().get_siblings(ax) + shared_axes = [ + _ax for _ax in shared_axes if _ax.get_position().x0 == ax.get_position().x0 + ] + + # Use existing tick positions (from matplotlib's default ticker) + # rather than creating ticks at every bin edge + existing_ticks = ax.get_xticks() + # Filter to only include ticks within the regular bin range + regular_edges = _edges[1:-1] + new_xticks = [ + tick + for tick in existing_ticks + if regular_edges[0] <= tick <= regular_edges[-1] + ] + new_xticklabels = [f"{tick:g}" for tick in new_xticks] + + # Find bottom axis for marker placement + bottom_axis = min(shared_axes, key=lambda a: a.get_position().y0) - # Don't draw markers on the top of the top axis - top_axis = max(shared_axes, key=lambda a: a.get_position().y0) + if underflow > 0.0: + # Add underflow bin center at the beginning + new_xticks.insert(0, _centers[0]) + new_xticklabels.insert(0, underflow_xticklabel) - # Draw on all shared axes + # Draw markers only on the bottom (h=0) of axes for _ax in shared_axes: - _ax.set_xticks(xticks) - _ax.set_xticklabels(xticklabels) - for h in [0, 1]: - # Don't draw marker on the top of the top axis - if _ax == top_axis and h == 1: - continue - - _ax.plot( - [_edges[0], _edges[1]], - [h, h], - color="white", - zorder=5, - ls="--", - lw=lw, - transform=_ax.get_xaxis_transform(), - clip_on=False, - ) + h = 0 # Only draw on bottom + _ax.plot( + [_edges[0], _edges[1]], + [h, h], + color="white", + zorder=5, + ls="--", + lw=lw, + transform=_ax.get_xaxis_transform(), + clip_on=False, + ) - _ax.scatter( - _centers[0], - h, - _marker_size, - marker=align_marker("d", valign="center"), - edgecolor="black", - zorder=5, - clip_on=False, - facecolor="white", - transform=_ax.get_xaxis_transform(), - ) - if overflow > 0.0 or overflow_xticklabel in xticklabels: - # Replace any existing xticks in overflow region with overflow bin center - _mask = xticks < flow_bins[-2] - xticks = np.insert(xticks[_mask], sum(_mask), _centers[-1]) - xticklabels = [xlab for i, xlab in enumerate(xticklabels) if _mask[i]] + [ - overflow_xticklabel - ] - - # Don't draw markers on the top of the top axis - top_axis = max(shared_axes, key=lambda a: a.get_position().y0) - - # Draw on all shared axes + _ax.scatter( + _centers[0], + h, + _marker_size, + marker=align_marker("d", valign="center"), + edgecolor="black", + zorder=5, + clip_on=False, + facecolor="white", + transform=_ax.get_xaxis_transform(), + ) + if overflow > 0.0: + # Add overflow bin center at the end + new_xticks.append(_centers[-1]) + new_xticklabels.append(overflow_xticklabel) + + # Draw markers only on the bottom (h=0) of axes for _ax in shared_axes: - _ax.set_xticks(xticks) - _ax.set_xticklabels(xticklabels) - - for h in [0, 1]: - # Don't draw marker on the top of the top axis - if _ax == top_axis and h == 1: - continue - - _ax.plot( - [_edges[-2], _edges[-1]], - [h, h], - color="white", - zorder=5, - ls="--", - lw=lw, - transform=_ax.get_xaxis_transform(), - clip_on=False, - ) + h = 0 # Only draw on bottom + _ax.plot( + [_edges[-2], _edges[-1]], + [h, h], + color="white", + zorder=5, + ls="--", + lw=lw, + transform=_ax.get_xaxis_transform(), + clip_on=False, + ) - _ax.scatter( - _centers[-1], - h, - _marker_size, - marker=align_marker("d", valign="center"), - edgecolor="black", - zorder=5, - clip_on=False, - facecolor="white", - transform=_ax.get_xaxis_transform(), - ) + _ax.scatter( + _centers[-1], + h, + _marker_size, + marker=align_marker("d", valign="center"), + edgecolor="black", + zorder=5, + clip_on=False, + facecolor="white", + transform=_ax.get_xaxis_transform(), + ) + + # Set the final xticks and xticklabels on all shared axes + for _ax in shared_axes: + _ax.set_xticks(new_xticks) + # Only set tick labels on the bottom axis + if _ax == bottom_axis: + _ax.set_xticklabels(new_xticklabels) + else: + # Explicitly set empty labels on other axes + _ax.set_xticklabels(["" for _ in new_xticks]) return return_artists @@ -1400,6 +1394,8 @@ def model( histtype="band", ) else: + # Remove flow parameter for funcplot (it only works with histplot) + funcplot_kwargs = {k: v for k, v in stacked_kwargs.items() if k != "flow"} funcplot( stacked_components, ax=ax, @@ -1407,7 +1403,7 @@ def model( colors=stacked_colors, labels=stacked_labels, range=xlim, - **stacked_kwargs, + **funcplot_kwargs, ) if len(unstacked_components) > 0: @@ -1435,6 +1431,10 @@ def model( **unstacked_kwargs, ) else: + # Remove flow parameter for funcplot (it only works with histplot) + funcplot_unstacked_kwargs = { + k: v for k, v in unstacked_kwargs.items() if k != "flow" + } funcplot( component, ax=ax, @@ -1442,7 +1442,7 @@ def model( color=color, label=label, range=xlim, - **unstacked_kwargs, + **funcplot_unstacked_kwargs, ) # Plot the sum of all the components if model_sum_kwargs.pop("show", True) and ( @@ -1472,11 +1472,15 @@ def model( def sum_function(x): return sum(f(x) for f in components) + # Remove flow parameter for funcplot (it only works with histplot) + funcplot_sum_kwargs = { + k: v for k, v in model_sum_kwargs.items() if k != "flow" + } funcplot( sum_function, ax=ax, range=xlim, - **model_sum_kwargs, + **funcplot_sum_kwargs, ) elif ( model_uncertainty @@ -1488,7 +1492,20 @@ def sum_function(x): sum(components), ax=ax, label=model_uncertainty_label, histtype="band" ) - ax.set_xlim(xlim) + # Check if flow="show" is set in any of the kwargs + # If so, don't reset xlim as histplot will have set it correctly for flow bins + flow_in_kwargs = ( + stacked_kwargs.get("flow") == "show" + or model_sum_kwargs.get("flow") == "show" + or any( + kwargs.get("flow") == "show" + for kwargs in unstacked_kwargs_list + if kwargs is not None + ) + ) + + if not flow_in_kwargs: + ax.set_xlim(xlim) ax.set_xlabel(xlabel) ax.set_ylabel(ylabel) set_fitting_ylabel_fontsize(ax) diff --git a/tests/from_issues/baseline/test_comparison_flow.png b/tests/from_issues/baseline/test_comparison_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..4603f2a8f02594f5a4554c6c0139de5d8f250797 GIT binary patch literal 86903 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�wJ<0!D`#b@>4$ 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

oc%aCeQ25Q*^qf7;g4X@x4gI){) z9&_c7LhGc{um6zj1Hats0P2vTaX^g<8AV0Aee`5M2sTNaCTL3)Etu4Vh$=O=uN+ED zH$<1Aqo&>s9_RHj*6=PU+kiHj0N1<)tb!8n31Cs+y5q>VkP+I_^z`qBUC@5=LAGgU zW`z@M6r;6L93u4xemNYB(XD{bMxAJ~xFLXM&r$6U3<8$@32y{_VUBL z?JdPe+P=2TZFu%s;6WoeI8laT%2YGWsWE^9mr-?zLLQcp14O3)> z30$HI?5pEbHm?2qe?8IkS3-C2-RGrGE9c(*VQQ|IWt&|_HN*+9Oe=6b2t*ncbMr=f zC1IJ!zfjmz5z&@|d(*wvScqr2fm`Wf)eRBjgH+^CGW*i9--QE9x|%dRzXk#J*iI({ z*+mMf;wfsv4hZm26pSek0NZ~eypsQ?c%t9Xd{cuOI9|{2q%!sFl1&Wt-=OO&x@WpX zr5ERy@VdUEexP&A^5@l;DUACSSpRU(T=c;ivLk~VW5a?DyowG8bgWb};zmkr{kHyW zd|}r9CV)I|@Sc(ul>%Uu;y?x;fW=?O>jc+^an4Pr;H!EEIW$m$+#AB@w7)!h3DpR5 z)KX|7;7>(ES}7h^JjyJBI?0X=EZ7ZgX(n3=bxZaY8H z1>r&{Z<5A4m*W$@#Nw~fM;K!K zn+fu?7|0BYXFD^zNPDp2e}ut(Tlvosz|v85+i}3NnJ{zXT(l?(6ehW+AXX-4#$Ot& z*3u|Or{Bx#;=0U*3q3|Z&W7Vit`@)+PHyf5V56N#xzjS^BXzMW$bOm{z#JSNqEbsl zK)+CP`{h5Q?`43d>AoZNFaml?A}X{F#IIZOa|NJthc^b!BoHTnP*t_!b5%@&Xh~|( z`IepM29*nhSLomUDmV5iC=Z0HYV0fv!vBiqUEK`czY5v!T>xL8kamp%_9fdPWhJF{ z*s`E#&5}I!dOaCa>oS*AllinfXvkB5ksiVcRvr$Kr&@!}Bw2xvas1 zvkj1x3VUTOLRT_#XL(fn{9l?$1q;q>6=#HGKq2FYh7%W0 z(Y0%ThI8IUaO3;;>zEf86~Pb~40u}Rl}jgpTt@+(E`Vu}UtCg7?NXr5HG*u96{p9_ zR7QHdF6eAj4N8bRoN>CHcP@+2x1p!%X5^AT*7xXiCqy7 z0my+v`t5LeruI?y1{-kL)HGrrs{Eub$31K6ON`<@gzv976_WrdnPY>|LIGfX8|||O zcEy4XljsglKvs#4%KT@sXJ(Jx7mzrlY8pSt&#vw&u|3yG(eR6T_Bi^@7@uOawhMW}$i z*Md82yy%*CQaDmpr!d~N5f#%qEXA;J ACZ!Z#3FE@*DzXLbR0Mco~g|nuGEdfv- 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%0Aqhu!|0!61)Yv`~LiN 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 Date: Tue, 25 Nov 2025 18:33:28 +0100 Subject: [PATCH 2/5] fix: test catchup --- src/mplhep/comparison_plotters.py | 22 ++++++++++++++++++++-- tests/test_mock.py | 22 +++++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/mplhep/comparison_plotters.py b/src/mplhep/comparison_plotters.py index 00106a7e..1d8d39c7 100644 --- a/src/mplhep/comparison_plotters.py +++ b/src/mplhep/comparison_plotters.py @@ -339,10 +339,28 @@ def comparison( # Create a new histogram with the same structure # Use enhanced plottable histogram for flow comparison + comparison_variances = ( + lower_uncertainties**2 if np.any(lower_uncertainties) else None + ) + + # Create flow-extended edges to match the comparison values + final_bins = h2_plottable.edges_1d() # Use the same method as in plot.py + _flow_bin_size = max( + 0.05 * (final_bins[-1] - final_bins[0]), np.mean(np.diff(final_bins)) + ) + + # Check if underflow/overflow bins exist and extend edges accordingly + flow_edges = np.copy(final_bins) + h2_flow_values = h2_for_comparison.values(flow=True) + if h2_flow_values[0] > 0: # Underflow exists + flow_edges = np.insert(flow_edges, 0, flow_edges[0] - _flow_bin_size) + if h2_flow_values[-1] > 0: # Overflow exists + flow_edges = np.append(flow_edges, flow_edges[-1] + _flow_bin_size) + comparison_plottable = EnhancedPlottableHistogram( comparison_values, - edges=h2_plottable.axes[0].edges, - variances=comparison_variances if np.any(comparison_variances) else None, + edges=flow_edges, # Use flow-extended edges + variances=comparison_variances, kind=h2_plottable.kind, ) # Regular comparison without flow bins diff --git a/tests/test_mock.py b/tests/test_mock.py index 8aa101d4..2bf15735 100644 --- a/tests/test_mock.py +++ b/tests/test_mock.py @@ -31,6 +31,18 @@ def mock_matplotlib(mocker): _get_lines.get_next_color.return_value = "next-color" ax._get_lines = _get_lines + # Mock shared axes methods for flow parameter support + mock_shared_axes = mocker.Mock() + mock_shared_axes.get_siblings.return_value = [ + ax + ] # Return list containing current axis + ax.get_shared_x_axes.return_value = mock_shared_axes + + # Mock position method + mock_position = mocker.Mock() + mock_position.x0 = 0.1 # Arbitrary x-position value + ax.get_position.return_value = mock_position + mpl = mocker.patch("matplotlib.pyplot", autospec=True) mocker.patch("matplotlib.pyplot.subplots", return_value=(fig, ax)) @@ -44,7 +56,7 @@ def test_simple(mock_matplotlib): bins = [0, 1, 2, 3] mh.histplot(h, bins, yerr=True, label="X", ax=ax) - assert len(ax.mock_calls) == 13 + assert len(ax.mock_calls) == 17 # Updated count due to shared axes functionality ax.stairs.assert_called_once_with( values=approx([1.0, 3.0, 2.0]), @@ -89,7 +101,7 @@ def test_histplot_real(mock_matplotlib): mh.histplot([a, b, c], bins=bins, ax=ax, yerr=True, label=["MC1", "MC2", "Data"]) ax.legend() ax.set_title("Raw") - assert len(ax.mock_calls) == 27 + assert len(ax.mock_calls) == 31 # Updated count due to shared axes functionality ax.reset_mock() @@ -97,7 +109,7 @@ def test_histplot_real(mock_matplotlib): mh.histplot([c], bins=bins, ax=ax, yerr=True, histtype="errorbar", label="Data") ax.legend() ax.set_title("Data/MC") - assert len(ax.mock_calls) == 20 + assert len(ax.mock_calls) == 28 # Updated count due to shared axes functionality ax.reset_mock() mh.histplot( @@ -114,7 +126,7 @@ def test_histplot_real(mock_matplotlib): ) ax.legend() ax.set_title("Data/MC binwnorm") - assert len(ax.mock_calls) == 20 + assert len(ax.mock_calls) == 28 # Updated count due to shared axes functionality ax.reset_mock() mh.histplot( @@ -131,4 +143,4 @@ def test_histplot_real(mock_matplotlib): ) ax.legend() ax.set_title("Data/MC Density") - assert len(ax.mock_calls) == 20 + assert len(ax.mock_calls) == 28 # Updated count due to shared axes functionality From e66550552cbed24df887ee8ee70d9acf67944371 Mon Sep 17 00:00:00 2001 From: Andrzej Novak Date: Tue, 25 Nov 2025 20:13:29 +0100 Subject: [PATCH 3/5] wip --- .gitignore | 3 + pyproject.toml | 39 ++++++++++++ src/mplhep/comparison_plotters.py | 59 +++++++++++------- src/mplhep/plot.py | 10 +++ tests/baseline/test_hist2dplot_cbar_False.png | Bin 15497 -> 15235 bytes 5 files changed, 90 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 00e37a55..84ecf204 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,6 @@ venv.bak/ /docs/source/_generated/ /tmp/ /docs/source/_static/_generated/ +# pixi environments +.pixi/* +!.pixi/config.toml diff --git a/pyproject.toml b/pyproject.toml index 135d6b08..5d468e20 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -215,3 +215,42 @@ flake8-builtins.ignorelist = ["copyright", "range"] "{new_docs,docs,examples}/**" = ["INP001", "S", "T20", "LOG015"] "src/mplhep/_dev.py" = ["T20"] "src/mplhep/styles/*.py" = ["FLY002"] + +[tool.pixi.workspace] +channels = ["conda-forge"] +platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] + +[tool.pixi.dependencies] +matplotlib = "==3.10.6" +numpy = ">=1.16.0" +packaging = "*" +pytest = ">=6.0" + +[tool.pixi.pypi-dependencies] +mplhep = { path = ".", editable = true } +mplhep-data = ">=0.0.4" +uhi = ">=0.2.0" +boost_histogram = "*" +hist = "*" +pytest-mock = "*" +pytest-mpl = "*" +pytest-xdist = "*" +pytest-benchmark = "*" +scikit-hep-testdata = "*" +uproot = "*" +uproot4 = "*" + +[tool.pixi.environments] +default = {features = ["all"], solve-group = "default" } +all = { features = ["all"], solve-group = "default" } +dev = { features = ["dev"], solve-group = "default" } +docs = { features = ["docs"], solve-group = "default" } +test = { features = ["test"], solve-group = "default" } + +[tool.pixi.tasks] +install = "echo 'Package is already installed in editable mode'" +test = "pytest" +lint = "ruff check src" +format = "ruff format src" +prek = "prek run --all-files" +pre-commit = "prek run --all-files" diff --git a/src/mplhep/comparison_plotters.py b/src/mplhep/comparison_plotters.py index 1d8d39c7..5f9caf96 100644 --- a/src/mplhep/comparison_plotters.py +++ b/src/mplhep/comparison_plotters.py @@ -279,17 +279,26 @@ def comparison( if flow == "show": # Try to get flow bins if they exist (from original histogram objects, not plottable) try: - # Access flow bins from the original histogram objects - h1_flow_values = h1.values(flow=True) - - # Check if histogram actually has flow bins (length should be +2) - if len(h1_flow_values) == len(h1_plottable.values()) + 2: - # Use the original histograms which already have flow bins - h1_for_comparison = h1 - h2_for_comparison = h2 - used_flow_bins = True + # First check if both histograms support flow=True without actually calling it + # This prevents side effects from accessing flow values on histograms that don't have them + if (hasattr(h1, 'values') and hasattr(h2, 'values') and + hasattr(h1.values, '__call__') and hasattr(h2.values, '__call__')): + + # Access flow bins from the original histogram objects + h1_flow_values = h1.values(flow=True) + + # Check if histogram actually has flow bins (length should be +2) + if len(h1_flow_values) == len(h1_plottable.values()) + 2: + # Use the original histograms which already have flow bins + h1_for_comparison = h1 + h2_for_comparison = h2 + used_flow_bins = True + else: + # No actual flow bins, use regular histograms + h1_for_comparison = h1_plottable + h2_for_comparison = h2_plottable else: - # No actual flow bins, use regular histograms + # Histograms don't support flow parameter h1_for_comparison = h1_plottable h2_for_comparison = h2_plottable except (AttributeError, TypeError): @@ -349,13 +358,15 @@ def comparison( 0.05 * (final_bins[-1] - final_bins[0]), np.mean(np.diff(final_bins)) ) - # Check if underflow/overflow bins exist and extend edges accordingly + # For flow="show", we need to always extend edges to match flow values length + # because flow=True always includes underflow/overflow positions flow_edges = np.copy(final_bins) h2_flow_values = h2_for_comparison.values(flow=True) - if h2_flow_values[0] > 0: # Underflow exists - flow_edges = np.insert(flow_edges, 0, flow_edges[0] - _flow_bin_size) - if h2_flow_values[-1] > 0: # Overflow exists - flow_edges = np.append(flow_edges, flow_edges[-1] + _flow_bin_size) + + # Always add underflow and overflow edges when using flow="show" + # to match the structure of flow=True values + flow_edges = np.insert(flow_edges, 0, flow_edges[0] - _flow_bin_size) + flow_edges = np.append(flow_edges, flow_edges[-1] + _flow_bin_size) comparison_plottable = EnhancedPlottableHistogram( comparison_values, @@ -389,14 +400,20 @@ def comparison( if hasattr(comparison_plottable, "errors"): comparison_plottable.errors() + # Filter out comparison-specific parameters that shouldn't be passed to histplot + _valid_histplot_kwargs = { + k: v for k, v in histplot_kwargs.items() + if k not in ['ratio', 'comparison', 'comparison_ylabel', 'comparison_ylim'] + } + if comparison == "pull": - histplot_kwargs.setdefault("histtype", "fill") - histplot_kwargs.setdefault("color", "darkgrey") - histplot(comparison_plottable, ax=ax, flow=flow, **histplot_kwargs) + _valid_histplot_kwargs.setdefault("histtype", "fill") + _valid_histplot_kwargs.setdefault("color", "darkgrey") + histplot(comparison_plottable, ax=ax, flow=flow, **_valid_histplot_kwargs) else: - histplot_kwargs.setdefault("color", "black") - histplot_kwargs.setdefault("histtype", "errorbar") - histplot(comparison_plottable, ax=ax, flow=flow, **histplot_kwargs) + _valid_histplot_kwargs.setdefault("color", "black") + _valid_histplot_kwargs.setdefault("histtype", "errorbar") + histplot(comparison_plottable, ax=ax, flow=flow, **_valid_histplot_kwargs) if comparison in ["ratio", "split_ratio", "relative_difference"]: if comparison_ylim is None: diff --git a/src/mplhep/plot.py b/src/mplhep/plot.py index 43e0f008..7af33849 100644 --- a/src/mplhep/plot.py +++ b/src/mplhep/plot.py @@ -391,6 +391,16 @@ def histplot( edges = bool(edges) binticks = bool(binticks) + # Handle ratio plots - redirect to comparison functionality + if kwargs.get('ratio', False): + from .comparison_plotters import hists + # Remove ratio from kwargs before passing to comparison function + _kwargs = {k: v for k, v in kwargs.items() if k != 'ratio'} + if isinstance(H, (list, tuple)) and len(H) >= 2: + return hists(H[0], H[1], comparison="ratio", flow=flow, **_kwargs) + else: + raise ValueError("ratio=True requires at least 2 histograms for comparison") + # Process input hists = list(process_histogram_parts(H, bins)) final_bins, xtick_labels = _get_plottable_protocol_bins(hists[0].axes[0]) diff --git a/tests/baseline/test_hist2dplot_cbar_False.png b/tests/baseline/test_hist2dplot_cbar_False.png index fc8f04ba6e12a06fc8a1756378432e76e0626177..f56d6c9e4db214160a060fc328129183ce03fed8 100644 GIT binary patch literal 15235 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 From 061382ef8ed14c172971c3eb29c0a6f4bba358b6 Mon Sep 17 00:00:00 2001 From: Andrzej Novak Date: Tue, 25 Nov 2025 21:23:52 +0100 Subject: [PATCH 4/5] fix: remove duplicate pixi workspace configuration - Resolved duplicate [tool.pixi.workspace] sections that were causing redefinition errors - Restored configuration from main branch to maintain consistency - Keep main branch's pixi setup for proper environment management --- pyproject.toml | 82 ++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 60 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5d468e20..b209c347 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -98,38 +98,6 @@ environments = [ "python_version >= '3.10'", ] -[tool.pixi.workspace] -name = "mplhep" -authors = ["andrzejnovak "] -description = "Matplotlib styles for HEP" -channels = ["conda-forge"] -platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] - -[tool.pixi.pypi-dependencies] -mplhep = { path = ".", editable = true, extras = ["dev", "test"] } - -[tool.pixi.environments] -default = { solve-group = "default" } -test = { solve-group = "default" } - -[tool.pixi.tasks] -# Testing -test = "python -m pytest -r sa --mpl --mpl-results-path=pytest_results -n auto" -test-benchmark = "python -m pytest --benchmark-only --benchmark-sort=mean --benchmark-warmup=on" -test-baseline = "python -m pytest -r sa --mpl -n auto --mpl-generate-path=tests/baseline" - -# Linting & formatting (via pre-commit hooks) -precommit = "prek run --all-files" -prek = "prek run --all-files" - -# Documentation -docs-build = { cmd = "mkdocs build --clean", cwd = "new_docs" } -docs-build-fast = { cmd = "mkdocs build -f mkdocs_norender.yml", cwd = "new_docs" } -docs-serve = { cmd = "mkdocs serve --dev-addr 127.0.0.1:8000", cwd = "new_docs" } -docs-serve-fast = { cmd = "mkdocs serve -f mkdocs_norender.yml --dev-addr 127.0.0.1:8000", cwd = "new_docs" } - -# Cleanup -clean = "rm -rf pytest_results __pycache__ .pytest_cache .coverage .mypy_cache htmlcov dist build *.egg-info" [tool.mypy] @@ -217,40 +185,34 @@ flake8-builtins.ignorelist = ["copyright", "range"] "src/mplhep/styles/*.py" = ["FLY002"] [tool.pixi.workspace] +name = "mplhep" +authors = ["andrzejnovak "] +description = "Matplotlib styles for HEP" channels = ["conda-forge"] platforms = ["linux-64", "osx-64", "osx-arm64", "win-64"] -[tool.pixi.dependencies] -matplotlib = "==3.10.6" -numpy = ">=1.16.0" -packaging = "*" -pytest = ">=6.0" - [tool.pixi.pypi-dependencies] -mplhep = { path = ".", editable = true } -mplhep-data = ">=0.0.4" -uhi = ">=0.2.0" -boost_histogram = "*" -hist = "*" -pytest-mock = "*" -pytest-mpl = "*" -pytest-xdist = "*" -pytest-benchmark = "*" -scikit-hep-testdata = "*" -uproot = "*" -uproot4 = "*" +mplhep = { path = ".", editable = true, extras = ["dev", "test"] } [tool.pixi.environments] -default = {features = ["all"], solve-group = "default" } -all = { features = ["all"], solve-group = "default" } -dev = { features = ["dev"], solve-group = "default" } -docs = { features = ["docs"], solve-group = "default" } -test = { features = ["test"], solve-group = "default" } +default = { solve-group = "default" } +test = { solve-group = "default" } [tool.pixi.tasks] -install = "echo 'Package is already installed in editable mode'" -test = "pytest" -lint = "ruff check src" -format = "ruff format src" +# Testing +test = "python -m pytest -r sa --mpl --mpl-results-path=pytest_results -n auto" +test-benchmark = "python -m pytest --benchmark-only --benchmark-sort=mean --benchmark-warmup=on" +test-baseline = "python -m pytest -r sa --mpl -n auto --mpl-generate-path=tests/baseline" + +# Linting & formatting (via pre-commit hooks) +precommit = "prek run --all-files" prek = "prek run --all-files" -pre-commit = "prek run --all-files" + +# Documentation +docs-build = { cmd = "mkdocs build --clean", cwd = "new_docs" } +docs-build-fast = { cmd = "mkdocs build -f mkdocs_norender.yml", cwd = "new_docs" } +docs-serve = { cmd = "mkdocs serve --dev-addr 127.0.0.1:8000", cwd = "new_docs" } +docs-serve-fast = { cmd = "mkdocs serve -f mkdocs_norender.yml --dev-addr 127.0.0.1:8000", cwd = "new_docs" } + +# Cleanup +clean = "rm -rf pytest_results __pycache__ .pytest_cache .coverage .mypy_cache htmlcov dist build *.egg-info" From ff6c33ccd2d2eeae9cfe60cfb827f0e9bde4ddfe Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 25 Nov 2025 21:09:09 +0000 Subject: [PATCH 5/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/mplhep/comparison_plotters.py | 14 +++++++++----- src/mplhep/plot.py | 8 ++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/mplhep/comparison_plotters.py b/src/mplhep/comparison_plotters.py index 5f9caf96..10afe7d8 100644 --- a/src/mplhep/comparison_plotters.py +++ b/src/mplhep/comparison_plotters.py @@ -281,9 +281,12 @@ def comparison( try: # First check if both histograms support flow=True without actually calling it # This prevents side effects from accessing flow values on histograms that don't have them - if (hasattr(h1, 'values') and hasattr(h2, 'values') and - hasattr(h1.values, '__call__') and hasattr(h2.values, '__call__')): - + if ( + hasattr(h1, "values") + and hasattr(h2, "values") + and hasattr(h1.values, "__call__") + and hasattr(h2.values, "__call__") + ): # Access flow bins from the original histogram objects h1_flow_values = h1.values(flow=True) @@ -402,8 +405,9 @@ def comparison( # Filter out comparison-specific parameters that shouldn't be passed to histplot _valid_histplot_kwargs = { - k: v for k, v in histplot_kwargs.items() - if k not in ['ratio', 'comparison', 'comparison_ylabel', 'comparison_ylim'] + k: v + for k, v in histplot_kwargs.items() + if k not in ["ratio", "comparison", "comparison_ylabel", "comparison_ylim"] } if comparison == "pull": diff --git a/src/mplhep/plot.py b/src/mplhep/plot.py index 7af33849..c77c3ee8 100644 --- a/src/mplhep/plot.py +++ b/src/mplhep/plot.py @@ -392,14 +392,14 @@ def histplot( binticks = bool(binticks) # Handle ratio plots - redirect to comparison functionality - if kwargs.get('ratio', False): + if kwargs.get("ratio", False): from .comparison_plotters import hists + # Remove ratio from kwargs before passing to comparison function - _kwargs = {k: v for k, v in kwargs.items() if k != 'ratio'} + _kwargs = {k: v for k, v in kwargs.items() if k != "ratio"} if isinstance(H, (list, tuple)) and len(H) >= 2: return hists(H[0], H[1], comparison="ratio", flow=flow, **_kwargs) - else: - raise ValueError("ratio=True requires at least 2 histograms for comparison") + raise ValueError("ratio=True requires at least 2 histograms for comparison") # Process input hists = list(process_histogram_parts(H, bins))