Skip to content

Make xy.pyplot gallery-compatible with Matplotlib 3.11 - #413

Open
Alek99 wants to merge 16 commits into
mainfrom
agent/pyplot-gallery-compat
Open

Make xy.pyplot gallery-compatible with Matplotlib 3.11#413
Alek99 wants to merge 16 commits into
mainfrom
agent/pyplot-gallery-compat

Conversation

@Alek99

@Alek99 Alek99 commented Jul 31, 2026

Copy link
Copy Markdown
Member

Summary

Makes xy.pyplot a gallery-compatible drop-in surface for Matplotlib 3.11 while preserving the dependency-free, performance-oriented native renderer.

  • Adds native, compat, and lazy auto modes plus plt.set_mode(), plt.get_mode(), and XY_PYPLOT_MODE.
  • Adds the public module://xy.backends.backend_xy Matplotlib backend.
  • Uses genuine Matplotlib Figure/Axes/Artist semantics in compat mode and an XY display-list renderer for browser, SVG, and raster output.
  • Covers paths, clipping, collections, images, text/mathtext, hatches, path effects, meshes, Gouraud triangles, toolkits, units, widgets, events, and animations.
  • Adds a live browser canvas with pointer/keyboard/scroll/resize/close events, navigation, picking, timers, widgets, and deterministic animation tests.
  • Vendors and hashes the selected Matplotlib gallery as a permanent executable compatibility contract.
  • Explicitly excludes three-dimensional plotting: all 48 upstream 3-D examples are outside the runnable corpus, and the XY Matplotlib backend rejects three-dimensional axes before drawing.

Matplotlib supplies frontend semantics in compat mode, but accepted charts are rendered by XY: gallery acceptance rejects Agg or any other renderer fallback.

Gallery contract

The original Python and notebook archives remain provenance-locked at 507 members each. XY's runnable contract excludes the 48 three-dimensional examples and contains 459 byte-exact source files.

Measure Result
Runnable sources represented 459/459
pyplot-eligible sources accepted 437/437
Standard profile 425/425
Extended profile 12/12
Non-pyplot backend/font/GUI examples classified 22/22
Figure/capture parity 437/437
Dimension policy 437/437
Exact dimensions 433/437
Semantic gate 437/437
Tolerant visual gate 437/437
Fallbacks / waivers / ratchet failures 0 / 0 / 0

Exact pixels are not required. The four non-exact dimensions (skewt, figure_size_units, horizontal_barchart_distribution, and colormap_reference) pass the documented tolerant dimension policy. All other structural, semantic, visual, and behavioral gates pass without waivers.

Executable contract and CI

The harness:

  • Records both supplied archive hashes and every included source hash.
  • Proves notebook code-cell AST equivalence without vendoring duplicate notebooks.
  • Rewrites only the pyplot binding using exact token-span edits, with stable hashes across supported Python micro versions.
  • Executes transformed sources as real temporary files.
  • Records interpreter, source, manifest, implementation, figure, capture, dimension, semantic, visual, behavior, warning, performance, and fallback provenance.
  • Rejects stale cross-interpreter resume data, any renderer fallback, any waiver, or a passing-case regression.
  • Runs the 425-case standard profile in eight CI shards and provisions TeX, fonts, GTK, Xvfb, optional dependencies, clean argv, and multiprocessing support for the 12-case extended profile.

The browser probes use a bounded Playwright/Chromium driver, fail closed when CI requires a browser, preserve semantic diagnostics, and avoid Linux Chromium first-profile hangs.

Evidence and tracked root causes

Browse the permanent comparison screenshots.

Example Matplotlib xy.pyplot
Mesh normalization Matplotlib mesh XY mesh

Root-cause issues include complete upstream Matplotlib sources, comparison screenshots, affected-example counts, acceptance tests, and the pyplot label:

Fixes #354
Fixes #409
Fixes #414
Fixes #415
Fixes #416

Revalidates #410 and #411.

@greptile-apps

greptile-apps Bot commented Jul 31, 2026

Copy link
Copy Markdown

Too many files changed for review. (553 files found, 100 file limit)

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 552 files, which is 252 over the limit of 300.

To get a review, reduce the PR to 300 files or fewer by splitting it into smaller PRs or changing its base branch.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 51a82d0d-7b02-4bc2-9c10-bc9a552c27b8

📥 Commits

Reviewing files that changed from the base of the PR and between d5f2d9c and 0a19b35.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (552)
  • .github/workflows/ci.yml
  • Makefile
  • README.md
  • docs/app/tests/test_docs_site.py
  • docs/integrations/index.md
  • docs/integrations/matplotlib.md
  • docs/overview/installation.md
  • gallery/matplotlib-3.11.1/LICENSE
  • gallery/matplotlib-3.11.1/README.md
  • gallery/matplotlib-3.11.1/baseline.json
  • gallery/matplotlib-3.11.1/companions/README.md
  • gallery/matplotlib-3.11.1/companions/manifest.json
  • gallery/matplotlib-3.11.1/companions/xy_native/basic_units.py
  • gallery/matplotlib-3.11.1/companions/xy_native/canvasagg.py
  • gallery/matplotlib-3.11.1/companions/xy_native/font_indexing.py
  • gallery/matplotlib-3.11.1/companions/xy_native/ftface_props.py
  • gallery/matplotlib-3.11.1/examples/animation/animate_decay.py
  • gallery/matplotlib-3.11.1/examples/animation/animated_histogram.py
  • gallery/matplotlib-3.11.1/examples/animation/animation_demo.py
  • gallery/matplotlib-3.11.1/examples/animation/bayes_update.py
  • gallery/matplotlib-3.11.1/examples/animation/double_pendulum.py
  • gallery/matplotlib-3.11.1/examples/animation/dynamic_image.py
  • gallery/matplotlib-3.11.1/examples/animation/frame_grabbing_sgskip.py
  • gallery/matplotlib-3.11.1/examples/animation/multiple_axes.py
  • gallery/matplotlib-3.11.1/examples/animation/pause_resume.py
  • gallery/matplotlib-3.11.1/examples/animation/rain.py
  • gallery/matplotlib-3.11.1/examples/animation/simple_anim.py
  • gallery/matplotlib-3.11.1/examples/animation/simple_scatter.py
  • gallery/matplotlib-3.11.1/examples/animation/strip_chart.py
  • gallery/matplotlib-3.11.1/examples/animation/unchained.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_anchored_direction_arrows.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_axes_divider.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_axes_grid.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_axes_grid2.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_axes_hbox_divider.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_axes_rgb.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_colorbar_with_axes_divider.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_colorbar_with_inset_locator.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_edge_colorbar.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_fixed_size_axes.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/demo_imagegrid_aspect.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/inset_locator_demo.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/inset_locator_demo2.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/make_room_for_ylabel_using_axesgrid.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/parasite_simple.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/parasite_simple2.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/scatter_hist_locatable_axes.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/simple_anchored_artists.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/simple_axes_divider1.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/simple_axes_divider3.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/simple_axesgrid.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/simple_axesgrid2.py
  • gallery/matplotlib-3.11.1/examples/axes_grid1/simple_axisline4.py
  • gallery/matplotlib-3.11.1/examples/axisartist/axis_direction.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_axis_direction.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_axisline_style.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_curvelinear_grid.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_curvelinear_grid2.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_floating_axes.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_floating_axis.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_parasite_axes.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_parasite_axes2.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_ticklabel_alignment.py
  • gallery/matplotlib-3.11.1/examples/axisartist/demo_ticklabel_direction.py
  • gallery/matplotlib-3.11.1/examples/axisartist/simple_axis_direction01.py
  • gallery/matplotlib-3.11.1/examples/axisartist/simple_axis_direction03.py
  • gallery/matplotlib-3.11.1/examples/axisartist/simple_axis_pad.py
  • gallery/matplotlib-3.11.1/examples/axisartist/simple_axisartist1.py
  • gallery/matplotlib-3.11.1/examples/axisartist/simple_axisline.py
  • gallery/matplotlib-3.11.1/examples/axisartist/simple_axisline3.py
  • gallery/matplotlib-3.11.1/examples/color/color_by_yvalue.py
  • gallery/matplotlib-3.11.1/examples/color/color_cycle_default.py
  • gallery/matplotlib-3.11.1/examples/color/color_demo.py
  • gallery/matplotlib-3.11.1/examples/color/color_sequences.py
  • gallery/matplotlib-3.11.1/examples/color/colorbar_basics.py
  • gallery/matplotlib-3.11.1/examples/color/colorbar_histogram.py
  • gallery/matplotlib-3.11.1/examples/color/colormap_reference.py
  • gallery/matplotlib-3.11.1/examples/color/custom_cmap.py
  • gallery/matplotlib-3.11.1/examples/color/individual_colors_from_cmap.py
  • gallery/matplotlib-3.11.1/examples/color/named_colors.py
  • gallery/matplotlib-3.11.1/examples/color/set_alpha.py
  • gallery/matplotlib-3.11.1/examples/event_handling/close_event.py
  • gallery/matplotlib-3.11.1/examples/event_handling/coords_demo.py
  • gallery/matplotlib-3.11.1/examples/event_handling/cursor_demo.py
  • gallery/matplotlib-3.11.1/examples/event_handling/data_browser.py
  • gallery/matplotlib-3.11.1/examples/event_handling/figure_axes_enter_leave.py
  • gallery/matplotlib-3.11.1/examples/event_handling/ginput_manual_clabel_sgskip.py
  • gallery/matplotlib-3.11.1/examples/event_handling/image_slices_viewer.py
  • gallery/matplotlib-3.11.1/examples/event_handling/keypress_demo.py
  • gallery/matplotlib-3.11.1/examples/event_handling/lasso_demo.py
  • gallery/matplotlib-3.11.1/examples/event_handling/legend_picking.py
  • gallery/matplotlib-3.11.1/examples/event_handling/looking_glass.py
  • gallery/matplotlib-3.11.1/examples/event_handling/path_editor.py
  • gallery/matplotlib-3.11.1/examples/event_handling/pick_event_demo.py
  • gallery/matplotlib-3.11.1/examples/event_handling/pick_event_demo2.py
  • gallery/matplotlib-3.11.1/examples/event_handling/poly_editor.py
  • gallery/matplotlib-3.11.1/examples/event_handling/pong_sgskip.py
  • gallery/matplotlib-3.11.1/examples/event_handling/resample.py
  • gallery/matplotlib-3.11.1/examples/event_handling/timers.py
  • gallery/matplotlib-3.11.1/examples/event_handling/trifinder_event_demo.py
  • gallery/matplotlib-3.11.1/examples/event_handling/viewlims.py
  • gallery/matplotlib-3.11.1/examples/event_handling/zoom_window.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/affine_image.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/barb_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/barcode_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/colormap_interactive_adjustment.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/colormap_normalizations.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/colormap_normalizations_symlognorm.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contour_corner_mask.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contour_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contour_image.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contour_label_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contourf_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contourf_hatching.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contourf_log.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/contours_in_optimization_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/demo_bboximage.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/figimage_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_annotated_heatmap.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_antialiasing.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_clip_path.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_exact_placement.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_masked.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_nonuniform.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_transparency_blend.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/image_zcoord.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/interpolation_methods.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/irregulardatagrid.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/layer_images.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/matshow.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/multi_image.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/pcolor_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/pcolormesh_grids.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/pcolormesh_levels.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/plot_streamplot.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/quadmesh_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/quiver_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/quiver_simple_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/shading_example.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/specgram_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/spy_demos.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/tricontour_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/tricontour_smooth_delaunay.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/tricontour_smooth_user.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/trigradient_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/triinterp_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/tripcolor_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/triplot_demo.py
  • gallery/matplotlib-3.11.1/examples/images_contours_and_fields/watermark_image.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/axline.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/bar_colors.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/bar_label_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/bar_stacked.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/barchart.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/barh.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/broken_barh.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/capstyle.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/categorical_variables.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/eventcollection_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/eventplot_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/fill.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/fill_between_alpha.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/fill_between_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/fill_betweenx_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/gradient_bar.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/hat_graph.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/horizontal_barchart_distribution.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/joinstyle.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/line_demo_dash_control.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/lines_with_ticks_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/linestyles.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/marker_reference.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/markevery_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/masked_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/multicolored_line.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/multivariate_marker_plot.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/scatter_demo2.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/scatter_hist.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/scatter_masked.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/scatter_star_poly.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/scatter_with_legend.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/simple_plot.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/span_regions.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/spectrum_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/stackplot_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/stairs_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/stem_plot.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/step_demo.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/timeline.py
  • gallery/matplotlib-3.11.1/examples/lines_bars_and_markers/vline_hline_demo.py
  • gallery/matplotlib-3.11.1/examples/misc/anchored_artists.py
  • gallery/matplotlib-3.11.1/examples/misc/bbox_intersect.py
  • gallery/matplotlib-3.11.1/examples/misc/contour_manual.py
  • gallery/matplotlib-3.11.1/examples/misc/coords_report.py
  • gallery/matplotlib-3.11.1/examples/misc/custom_projection.py
  • gallery/matplotlib-3.11.1/examples/misc/customize_rc.py
  • gallery/matplotlib-3.11.1/examples/misc/demo_agg_filter.py
  • gallery/matplotlib-3.11.1/examples/misc/demo_ribbon_box.py
  • gallery/matplotlib-3.11.1/examples/misc/fig_x.py
  • gallery/matplotlib-3.11.1/examples/misc/fill_spiral.py
  • gallery/matplotlib-3.11.1/examples/misc/findobj_demo.py
  • gallery/matplotlib-3.11.1/examples/misc/font_indexing.py
  • gallery/matplotlib-3.11.1/examples/misc/ftface_props.py
  • gallery/matplotlib-3.11.1/examples/misc/histogram_path.py
  • gallery/matplotlib-3.11.1/examples/misc/hyperlinks_sgskip.py
  • gallery/matplotlib-3.11.1/examples/misc/keyword_plotting.py
  • gallery/matplotlib-3.11.1/examples/misc/logos2.py
  • gallery/matplotlib-3.11.1/examples/misc/multipage_pdf.py
  • gallery/matplotlib-3.11.1/examples/misc/multiprocess_sgskip.py
  • gallery/matplotlib-3.11.1/examples/misc/packed_bubbles.py
  • gallery/matplotlib-3.11.1/examples/misc/patheffect_demo.py
  • gallery/matplotlib-3.11.1/examples/misc/print_stdout_sgskip.py
  • gallery/matplotlib-3.11.1/examples/misc/rasterization_demo.py
  • gallery/matplotlib-3.11.1/examples/misc/set_and_get.py
  • gallery/matplotlib-3.11.1/examples/misc/svg_filter_line.py
  • gallery/matplotlib-3.11.1/examples/misc/svg_filter_pie.py
  • gallery/matplotlib-3.11.1/examples/misc/table_demo.py
  • gallery/matplotlib-3.11.1/examples/misc/tickedstroke_demo.py
  • gallery/matplotlib-3.11.1/examples/misc/transoffset.py
  • gallery/matplotlib-3.11.1/examples/misc/zorder_demo.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/bar_of_pie.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/nested_pie.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/pie_and_donut_labels.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/pie_features.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/pie_label.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/polar_bar.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/polar_demo.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/polar_error_caps.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/polar_legend.py
  • gallery/matplotlib-3.11.1/examples/pie_and_polar_charts/polar_scatter.py
  • gallery/matplotlib-3.11.1/examples/pyplots/pyplot_simple.py
  • gallery/matplotlib-3.11.1/examples/pyplots/pyplot_two_subplots.py
  • gallery/matplotlib-3.11.1/examples/scales/asinh_demo.py
  • gallery/matplotlib-3.11.1/examples/scales/aspect_loglog.py
  • gallery/matplotlib-3.11.1/examples/scales/custom_scale.py
  • gallery/matplotlib-3.11.1/examples/scales/log_demo.py
  • gallery/matplotlib-3.11.1/examples/scales/logit_demo.py
  • gallery/matplotlib-3.11.1/examples/scales/power_norm.py
  • gallery/matplotlib-3.11.1/examples/scales/scales.py
  • gallery/matplotlib-3.11.1/examples/scales/symlog_demo.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/arrow_guide.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/artist_reference.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/collections.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/compound_path.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/dolphin.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/donut.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/ellipse_arrow.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/ellipse_collection.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/ellipse_demo.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/fancybox_demo.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/hatch_demo.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/hatch_style_reference.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/hatchcolor_demo.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/line_collection.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/patch_collection.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/path_patch.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/quad_bezier.py
  • gallery/matplotlib-3.11.1/examples/shapes_and_collections/scatter.py
  • gallery/matplotlib-3.11.1/examples/showcase/anatomy.py
  • gallery/matplotlib-3.11.1/examples/showcase/firefox.py
  • gallery/matplotlib-3.11.1/examples/showcase/integral.py
  • gallery/matplotlib-3.11.1/examples/showcase/mandelbrot.py
  • gallery/matplotlib-3.11.1/examples/showcase/pan_zoom_overlap.py
  • gallery/matplotlib-3.11.1/examples/showcase/stock_prices.py
  • gallery/matplotlib-3.11.1/examples/showcase/xkcd.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/advanced_hillshading.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/anscombe.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/hinton_demo.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/ishikawa_diagram.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/leftventricle_bullseye.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/mri_with_eeg.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/radar_chart.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/sankey_basics.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/sankey_links.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/sankey_rankine.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/skewt.py
  • gallery/matplotlib-3.11.1/examples/specialty_plots/topographic_hillshading.py
  • gallery/matplotlib-3.11.1/examples/spines/centered_spines_with_arrows.py
  • gallery/matplotlib-3.11.1/examples/spines/spine_placement_demo.py
  • gallery/matplotlib-3.11.1/examples/spines/spines.py
  • gallery/matplotlib-3.11.1/examples/spines/spines_dropped.py
  • gallery/matplotlib-3.11.1/examples/statistics/boxplot.py
  • gallery/matplotlib-3.11.1/examples/statistics/boxplot_color.py
  • gallery/matplotlib-3.11.1/examples/statistics/boxplot_demo.py
  • gallery/matplotlib-3.11.1/examples/statistics/boxplot_vs_violin.py
  • gallery/matplotlib-3.11.1/examples/statistics/bxp.py
  • gallery/matplotlib-3.11.1/examples/statistics/cohere.py
  • gallery/matplotlib-3.11.1/examples/statistics/confidence_ellipse.py
  • gallery/matplotlib-3.11.1/examples/statistics/csd_demo.py
  • gallery/matplotlib-3.11.1/examples/statistics/curve_error_band.py
  • gallery/matplotlib-3.11.1/examples/statistics/customized_violin.py
  • gallery/matplotlib-3.11.1/examples/statistics/errorbar.py
  • gallery/matplotlib-3.11.1/examples/statistics/errorbar_features.py
  • gallery/matplotlib-3.11.1/examples/statistics/errorbar_limits.py
  • gallery/matplotlib-3.11.1/examples/statistics/errorbar_limits_simple.py
  • gallery/matplotlib-3.11.1/examples/statistics/errorbar_subsample.py
  • gallery/matplotlib-3.11.1/examples/statistics/errorbars_and_boxes.py
  • gallery/matplotlib-3.11.1/examples/statistics/hexbin_demo.py
  • gallery/matplotlib-3.11.1/examples/statistics/hist.py
  • gallery/matplotlib-3.11.1/examples/statistics/histogram_bihistogram.py
  • gallery/matplotlib-3.11.1/examples/statistics/histogram_cumulative.py
  • gallery/matplotlib-3.11.1/examples/statistics/histogram_histtypes.py
  • gallery/matplotlib-3.11.1/examples/statistics/histogram_multihist.py
  • gallery/matplotlib-3.11.1/examples/statistics/histogram_normalization.py
  • gallery/matplotlib-3.11.1/examples/statistics/multiple_histograms_side_by_side.py
  • gallery/matplotlib-3.11.1/examples/statistics/psd_demo.py
  • gallery/matplotlib-3.11.1/examples/statistics/time_series_histogram.py
  • gallery/matplotlib-3.11.1/examples/statistics/violinplot.py
  • gallery/matplotlib-3.11.1/examples/statistics/xcorr_acorr_demo.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/bmh.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/dark_background.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/fivethirtyeight.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/ggplot.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/grayscale.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/petroff10.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/plot_solarizedlight2.py
  • gallery/matplotlib-3.11.1/examples/style_sheets/style_sheets_reference.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/align_labels_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/auto_subplots_adjust.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axes_box_aspect.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axes_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axes_margins.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axes_props.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axes_zoom_effect.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axhspan_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axis_equal_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/axis_labels_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/broken_axis.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/custom_figure_class.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/demo_constrained_layout.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/demo_tight_layout.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/fahrenheit_celsius_scales.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/figure_size_units.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/figure_title.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/ganged_plots.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/geo_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/gridspec_and_subplots.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/gridspec_customization.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/gridspec_multicolumn.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/gridspec_nested.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/invert_axes.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/multiple_figs_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/multiple_yaxis_with_spines.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/secondary_axis.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/shared_axis_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/subfigures.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/subplot.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/subplot2grid.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/subplots_adjust.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/subplots_demo.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/twin_axes_zorder.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/two_scales.py
  • gallery/matplotlib-3.11.1/examples/subplots_axes_and_figures/zoom_inset_axes.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/accented_text.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/angle_annotation.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/angles_on_bracket_arrows.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/annotation_basic.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/annotation_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/annotation_polar.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/arrow_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/autowrap.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/custom_legends.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/demo_annotation_box.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/demo_text_path.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/demo_text_rotation_mode.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/dfrac_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/fancyarrow_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/fancytextbox_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/figlegend_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/font_family_rc.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/font_file.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/font_table.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/fonts_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/fonts_demo_kw.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/label_subplots.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/legend.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/legend_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/line_with_text.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/mathtext_asarray.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/mathtext_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/mathtext_examples.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/mathtext_fontfamily_example.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/multiline.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/placing_text_boxes.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/rainbow_text.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/stix_fonts_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/tex_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/text_alignment.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/text_commands.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/text_fontdict.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/text_rotation_relative_to_line.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/titles_demo.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/unicode_minus.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/usetex_baseline_test.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/usetex_fonteffects.py
  • gallery/matplotlib-3.11.1/examples/text_labels_and_annotations/watermark_text.py
  • gallery/matplotlib-3.11.1/examples/ticks/align_ticklabels.py
  • gallery/matplotlib-3.11.1/examples/ticks/auto_ticks.py
  • gallery/matplotlib-3.11.1/examples/ticks/centered_ticklabels.py
  • gallery/matplotlib-3.11.1/examples/ticks/colorbar_tick_labelling_demo.py
  • gallery/matplotlib-3.11.1/examples/ticks/custom_ticker1.py
  • gallery/matplotlib-3.11.1/examples/ticks/date.py
  • gallery/matplotlib-3.11.1/examples/ticks/date_concise_formatter.py
  • gallery/matplotlib-3.11.1/examples/ticks/date_demo_convert.py
  • gallery/matplotlib-3.11.1/examples/ticks/date_demo_rrule.py
  • gallery/matplotlib-3.11.1/examples/ticks/date_formatters_locators.py
  • gallery/matplotlib-3.11.1/examples/ticks/date_index_formatter.py
  • gallery/matplotlib-3.11.1/examples/ticks/date_precision_and_epochs.py
  • gallery/matplotlib-3.11.1/examples/ticks/dollar_ticks.py
  • gallery/matplotlib-3.11.1/examples/ticks/engformatter_offset.py
  • gallery/matplotlib-3.11.1/examples/ticks/engineering_formatter.py
  • gallery/matplotlib-3.11.1/examples/ticks/fig_axes_customize_simple.py
  • gallery/matplotlib-3.11.1/examples/ticks/major_minor_demo.py
  • gallery/matplotlib-3.11.1/examples/ticks/multilevel_ticks.py
  • gallery/matplotlib-3.11.1/examples/ticks/scalarformatter.py
  • gallery/matplotlib-3.11.1/examples/ticks/tick-formatters.py
  • gallery/matplotlib-3.11.1/examples/ticks/tick-locators.py
  • gallery/matplotlib-3.11.1/examples/ticks/tick_labels_from_values.py
  • gallery/matplotlib-3.11.1/examples/ticks/ticklabels_rotation.py
  • gallery/matplotlib-3.11.1/examples/ticks/ticks_too_many.py
  • gallery/matplotlib-3.11.1/examples/ticks/ticks_top_right.py
  • gallery/matplotlib-3.11.1/examples/units/annotate_with_units.py
  • gallery/matplotlib-3.11.1/examples/units/artist_tests.py
  • gallery/matplotlib-3.11.1/examples/units/bar_demo2.py
  • gallery/matplotlib-3.11.1/examples/units/bar_unit_demo.py
  • gallery/matplotlib-3.11.1/examples/units/basic_units.py
  • gallery/matplotlib-3.11.1/examples/units/ellipse_with_units.py
  • gallery/matplotlib-3.11.1/examples/units/evans_test.py
  • gallery/matplotlib-3.11.1/examples/units/radian_demo.py
  • gallery/matplotlib-3.11.1/examples/units/units_sample.py
  • gallery/matplotlib-3.11.1/examples/units/units_scatter.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/canvasagg.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_gtk3_panzoom_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_gtk3_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_gtk4_panzoom_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_gtk4_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_qt_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_tk_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_wx2_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_wx3_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_wx4_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_in_wx5_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/embedding_webagg_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/fourier_demo_wx_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/gtk3_spreadsheet_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/gtk4_spreadsheet_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/mathtext_wx_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/mpl_with_glade3_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/mplcvd.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/pylab_with_gtk3_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/pylab_with_gtk4_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/svg_histogram_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/svg_tooltip_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/toolmanager_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/web_application_server_sgskip.py
  • gallery/matplotlib-3.11.1/examples/user_interfaces/wxcursor_demo_sgskip.py
  • gallery/matplotlib-3.11.1/examples/widgets/annotated_cursor.py
  • gallery/matplotlib-3.11.1/examples/widgets/buttons.py
  • gallery/matplotlib-3.11.1/examples/widgets/check_buttons.py
  • gallery/matplotlib-3.11.1/examples/widgets/cursor.py
  • gallery/matplotlib-3.11.1/examples/widgets/lasso_selector_demo_sgskip.py
  • gallery/matplotlib-3.11.1/examples/widgets/menu.py
  • gallery/matplotlib-3.11.1/examples/widgets/mouse_cursor.py
  • gallery/matplotlib-3.11.1/examples/widgets/multicursor.py
  • gallery/matplotlib-3.11.1/examples/widgets/polygon_selector_demo.py
  • gallery/matplotlib-3.11.1/examples/widgets/polygon_selector_simple.py
  • gallery/matplotlib-3.11.1/examples/widgets/radio_buttons.py
  • gallery/matplotlib-3.11.1/examples/widgets/radio_buttons_grid.py
  • gallery/matplotlib-3.11.1/examples/widgets/range_slider.py
  • gallery/matplotlib-3.11.1/examples/widgets/rectangle_selector.py
  • gallery/matplotlib-3.11.1/examples/widgets/slider_demo.py
  • gallery/matplotlib-3.11.1/examples/widgets/slider_snap_demo.py
  • gallery/matplotlib-3.11.1/examples/widgets/span_selector.py
  • gallery/matplotlib-3.11.1/examples/widgets/textbox.py
  • gallery/matplotlib-3.11.1/extended-environment.json
  • gallery/matplotlib-3.11.1/manifest.json
  • gallery/matplotlib-3.11.1/provenance.json
  • pyproject.toml
  • python/xy/backends/__init__.py
  • python/xy/backends/backend_xy.py
  • python/xy/backends/backend_xy_host.py
  • python/xy/backends/backend_xy_widget.js
  • python/xy/backends/backend_xy_widget.py
  • python/xy/backends/display_list.py
  • python/xy/backends/raster.py
  • python/xy/pyplot/__init__.py
  • python/xy/pyplot/_axes.py
  • python/xy/pyplot/_compat_inventory.py
  • python/xy/pyplot/_figure_tree.py
  • python/xy/pyplot/_grid.py
  • python/xy/pyplot/_mode.py
  • python/xy/pyplot/_mplfig.py
  • python/xy/pyplot/_plot_types.py
  • python/xy/pyplot/_state.py
  • python/xy/pyplot/typing.py
  • scripts/artifact_metadata.py
  • scripts/generate_pyplot_compat_inventory.py
  • scripts/pyplot_gallery/__init__.py
  • scripts/pyplot_gallery/behavior.py
  • scripts/pyplot_gallery/contract.py
  • scripts/pyplot_gallery/extended_drivers.py
  • scripts/pyplot_gallery/extended_environment.py
  • scripts/pyplot_gallery/integrity.py
  • scripts/pyplot_gallery/metrics.py
  • scripts/pyplot_gallery/provenance.py
  • scripts/pyplot_gallery/rewrite.py
  • scripts/pyplot_gallery/run_case.py
  • scripts/pyplot_gallery/run_gallery.py
  • scripts/pyplot_gallery/runtime.py
  • scripts/verify_ci_workflow.py
  • scripts/verify_sdist.py
  • scripts/verify_wheel.py
  • spec/matplotlib/backend-xy.md
  • spec/matplotlib/compat-changelog.md
  • spec/matplotlib/compat.md
  • spec/matplotlib/gallery-contract.md
  • spec/matplotlib/live-canvas.md
  • spec/matplotlib/modes.md
  • spec/matplotlib/non-pyplot-companions.md
  • spec/matplotlib/shim-todo.md
  • spec/process/production-readiness.md
  • tests/backends/backend_xy_live_toolbar_probe.mjs
  • tests/backends/pyplot_svg_gallery_probe.mjs
  • tests/backends/test_backend_xy.py
  • tests/backends/test_backend_xy_widget.py
  • tests/backends/test_display_list.py
  • tests/backends/test_pyplot_svg_gallery_browser.py
  • tests/browser_probe_runner.mjs
  • tests/conftest.py
  • tests/pyplot/conftest.py
  • tests/pyplot/test_dark_background_text_parity.py
  • tests/pyplot/test_figure_state.py
  • tests/pyplot/test_figure_tree.py
  • tests/pyplot/test_frame_geometry.py
  • tests/pyplot/test_gallery_acceptance_integrity.py
  • tests/pyplot/test_gallery_behavior.py
  • tests/pyplot/test_gallery_contract.py
  • tests/pyplot/test_gallery_extended_environment.py
  • tests/pyplot/test_gallery_metrics.py
  • tests/pyplot/test_gallery_report_provenance.py
  • tests/pyplot/test_launch_compat.py
  • tests/pyplot/test_layout_text_parity_fixes.py
  • tests/pyplot/test_modes.py
  • tests/pyplot/test_non_pyplot_companions.py
  • tests/pyplot/test_public_protocols.py
  • tests/pyplot/test_reference_corpus.py
  • tests/test_browser_probe_driver.py
  • tests/test_dependencies.py
  • tests/test_verify_ci_workflow.py
  • tests/test_verify_sdist.py
  • tests/test_verify_wheel.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Comment @coderabbitai help to get the list of available commands.

@codspeed-hq

codspeed-hq Bot commented Jul 31, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 109 untouched benchmarks
⏩ 2 skipped benchmarks1


Comparing agent/pyplot-gallery-compat (0a19b35) with main (d5f2d9c)

Open in CodSpeed

Footnotes

  1. 2 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

Alek99 commented Jul 31, 2026

Copy link
Copy Markdown
Member Author

Final exact-head acceptance audit is complete for 99ee677ad05a506b9a4dd11385c708d411b6f43e.

  • CI run 30669491110 is fully green, including all eight standard gallery shards, the 13/13 extended profile, the Matplotlib reference job, full Rust/Python/JS and Python 3.11 suites, browser conformance, sdists, and Windows/Linux wheels. Binder, Docs, and CodSpeed are green too.
  • 507/507 supplied sources are represented: 485/485 pyplot-eligible examples accepted (472 standard + 13 extended), with the remaining 22/22 explicitly classified.
  • Figure/capture, dimension-policy, semantic, and tolerant-visual gates are 485/485; 481/485 dimensions are exact.
  • Interaction behavior is 76/76.
  • Fallbacks, waivers, ratchet failures, comparison failures, and JUnit failures are all zero.
  • Every exact-head report records clean commit provenance and CPython 3.12.3 at both report and engine levels; source/provenance validation also passes cross-version under CPython 3.14.
  • The independently downloaded extended artifact 8808274446 has ZIP SHA-256 a85c5c585c7a26958740c6af8caacfd4f730a161c98171b992ebfbbd75574d4a and report SHA-256 2bb1d2d01705410d8589b504693d0b30fd7161c026ad7a65b4b4bd90b550880f.

The PR description now contains the complete standard shard artifact IDs/digests and final acceptance evidence. The PR remains draft for maintainer review.

@Alek99
Alek99 marked this pull request as ready for review August 3, 2026 17:19

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed

Not reviewed (too large): gallery/matplotlib-3.11.1/manifest.json (~14,146 lines), gallery/matplotlib-3.11.1/baseline.json (~11,911 lines) - if these are generated or fixture files, add them to ignored paths to exclude them from future reviews.

Note: This PR contains a large number of files. cubic only reviews up to 200 files per PR, so some files may not have been reviewed. cubic prioritizes the most important files to review.

Fix all with cubic | Re-trigger cubic

Comment thread gallery/matplotlib-3.11.1/companions/xy_native/font_indexing.py Outdated
Comment thread gallery/matplotlib-3.11.1/README.md Outdated
Comment thread gallery/matplotlib-3.11.1/companions/xy_native/canvasagg.py Outdated
Comment thread README.md Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 72 files (changes from recent commits).

Tip: instead of fixing issues one by one fix them all with cubic
Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread gallery/matplotlib-3.11.1/baseline.json
Comment thread scripts/pyplot_gallery/contract.py Outdated
Comment thread python/xy/backends/backend_xy.py
Comment thread scripts/pyplot_gallery/contract.py Outdated
Comment thread scripts/pyplot_gallery/contract.py
Comment thread spec/matplotlib/shim-todo.md Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 8 files (changes from recent commits).

Not reviewed (too large): gallery/matplotlib-3.11.1/baseline.json (~1,861 lines) - if these are generated or fixture files, add them to ignored paths to exclude them from future reviews.

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="scripts/pyplot_gallery/contract.py">

<violation number="1" location="scripts/pyplot_gallery/contract.py:1379">
P3: When a promoted (schema 2/3) baseline has paths that don't match the manifest, this new guard returns immediately after recording only the path-mismatch error, so all subsequent independent checks in the same function — the acceptance-report provenance validation (record SHA, implementation_commit, report/promoted manifest hashes, extended-spec hash) and the archive provenance hash checks — are silently skipped. The schema-1 branch directly above handles the same mismatch as a no-op and still runs those later checks, so this is an inconsistency that reduces the diagnostic surface during contract verification. Consider not short-circuiting the whole function: keep the fatal path-mismatch error but let the downstream provenance/archive checks run and accumulate, returning once with all findings, which matches how the schema-1 path behaves.</violation>

<violation number="2" location="scripts/pyplot_gallery/contract.py:1413">
P2: Acceptance provenance can claim different shards consumed different input manifests and still verify, although promotion requires every report to reference the same pre-promotion manifest bytes. Validate one shared lowercase SHA-256 value across all `report_manifest_sha256` records.</violation>

<violation number="3" location="scripts/pyplot_gallery/contract.py:1426">
P2: Schema-1 regressions are now self-validating because `verify_contract()` derives expected gate counts from the mutable baseline it is checking. Keep the historical `d505ef...` counts independently pinned (or independently hash the legacy baseline) instead of using `_legacy_summary()` as the verification oracle.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Fix all with cubic | Re-trigger cubic

or not isinstance(record.get("sha256"), str)
or len(record["sha256"]) != 64
or record.get("implementation_commit") != baseline.get("audit_commit")
or not isinstance(record.get("report_manifest_sha256"), str)

@cubic-dev-ai cubic-dev-ai Bot Aug 3, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Acceptance provenance can claim different shards consumed different input manifests and still verify, although promotion requires every report to reference the same pre-promotion manifest bytes. Validate one shared lowercase SHA-256 value across all report_manifest_sha256 records.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/pyplot_gallery/contract.py, line 1413:

<comment>Acceptance provenance can claim different shards consumed different input manifests and still verify, although promotion requires every report to reference the same pre-promotion manifest bytes. Validate one shared lowercase SHA-256 value across all `report_manifest_sha256` records.</comment>

<file context>
@@ -1375,6 +1409,11 @@ def verify_contract(root: Path = CORPUS_ROOT) -> list[str]:
                     or not isinstance(record.get("sha256"), str)
                     or len(record["sha256"]) != 64
+                    or record.get("implementation_commit") != baseline.get("audit_commit")
+                    or not isinstance(record.get("report_manifest_sha256"), str)
+                    or len(record["report_manifest_sha256"]) != 64
+                    or record.get("promoted_manifest_sha256") != baseline.get("manifest_sha256")
</file context>
Fix with cubic

errors.append("promoted baseline acceptance report provenance is invalid")
else:
expected_summary = (
_legacy_summary(

@cubic-dev-ai cubic-dev-ai Bot Aug 3, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Schema-1 regressions are now self-validating because verify_contract() derives expected gate counts from the mutable baseline it is checking. Keep the historical d505ef... counts independently pinned (or independently hash the legacy baseline) instead of using _legacy_summary() as the verification oracle.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/pyplot_gallery/contract.py, line 1426:

<comment>Schema-1 regressions are now self-validating because `verify_contract()` derives expected gate counts from the mutable baseline it is checking. Keep the historical `d505ef...` counts independently pinned (or independently hash the legacy baseline) instead of using `_legacy_summary()` as the verification oracle.</comment>

<file context>
@@ -1383,17 +1422,14 @@ def verify_contract(root: Path = CORPUS_ROOT) -> list[str]:
-            "temporary_waiver_count": 375,
-        }
+        expected_summary = (
+            _legacy_summary(
+                manifest=manifest,
+                baseline_examples=baseline_examples,
</file context>
Fix with cubic

else {}
)
if not expected_summary:
return errors

@cubic-dev-ai cubic-dev-ai Bot Aug 3, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: When a promoted (schema 2/3) baseline has paths that don't match the manifest, this new guard returns immediately after recording only the path-mismatch error, so all subsequent independent checks in the same function — the acceptance-report provenance validation (record SHA, implementation_commit, report/promoted manifest hashes, extended-spec hash) and the archive provenance hash checks — are silently skipped. The schema-1 branch directly above handles the same mismatch as a no-op and still runs those later checks, so this is an inconsistency that reduces the diagnostic surface during contract verification. Consider not short-circuiting the whole function: keep the fatal path-mismatch error but let the downstream provenance/archive checks run and accumulate, returning once with all findings, which matches how the schema-1 path behaves.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At scripts/pyplot_gallery/contract.py, line 1379:

<comment>When a promoted (schema 2/3) baseline has paths that don't match the manifest, this new guard returns immediately after recording only the path-mismatch error, so all subsequent independent checks in the same function — the acceptance-report provenance validation (record SHA, implementation_commit, report/promoted manifest hashes, extended-spec hash) and the archive provenance hash checks — are silently skipped. The schema-1 branch directly above handles the same mismatch as a no-op and still runs those later checks, so this is an inconsistency that reduces the diagnostic surface during contract verification. Consider not short-circuiting the whole function: keep the fatal path-mismatch error but let the downstream provenance/archive checks run and accumulate, returning once with all findings, which matches how the schema-1 path behaves.</comment>

<file context>
@@ -1335,14 +1362,21 @@ def verify_contract(root: Path = CORPUS_ROOT) -> list[str]:
+            else {}
         )
+        if not expected_summary:
+            return errors
         if expected_summary["acceptance_complete"] is not True:
             errors.append(
</file context>
Fix with cubic

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pyplot xy.pyplot Matplotlib compatibility

Projects

None yet

1 participant