Skip to content

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

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

Make xy.pyplot gallery-compatible with Matplotlib 3.11#413
Alek99 wants to merge 17 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: c042ed89-2bb6-4da8-b4c6-21385b3ff21b

📥 Commits

Reviewing files that changed from the base of the PR and between d5f2d9c and 105bc08.

⛔ 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.

All reported issues were addressed 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.

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

Fix all with cubic | Re-trigger cubic

Comment thread scripts/pyplot_gallery/contract.py Outdated
Comment thread scripts/pyplot_gallery/contract.py Outdated
Comment thread scripts/pyplot_gallery/contract.py 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.

1 issue found across 2 files (changes from recent commits).

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:1445">
P3: The schema-1 verifier now requires the baseline summary to equal the independently pinned `LEGACY_SCHEMA_ONE_SUMMARY` (e.g. `xy_execution_passed` must be exactly 189), but `build_contract` still writes its schema-1 `baseline["summary"]` by deriving it from the live audit via `_legacy_summary` (line ~730). These two only coincide when the audit reproduced by `build_contract` matches exactly the historical d505ef pass/waiver numbers (189/172/168/127/327). If the contract is rebuilt with a current, improved audit (more passes, fewer waivers), the freshly built schema-1 `baseline.json` will fail its own `verify_contract` with confusing "baseline summary ... must be 189" errors until it is promoted to schema 3. Consider either having `build_contract` emit the pinned schema-1 summary directly (making a build verify round-trip without promotion), or documenting/enforcing that a schema-1 build is only valid for the historical audit and should never be verified pre-promotion.</violation>
</file>

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

Fix all with cubic | Re-trigger cubic

else:
if baseline.get("audit_commit") != LEGACY_SCHEMA_ONE_AUDIT_COMMIT:
errors.append("schema-1 baseline audit_commit is not the pinned historical audit")
expected_summary = dict(LEGACY_SCHEMA_ONE_SUMMARY) if baseline_paths_match else {}

@cubic-dev-ai cubic-dev-ai Bot Aug 4, 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: The schema-1 verifier now requires the baseline summary to equal the independently pinned LEGACY_SCHEMA_ONE_SUMMARY (e.g. xy_execution_passed must be exactly 189), but build_contract still writes its schema-1 baseline["summary"] by deriving it from the live audit via _legacy_summary (line ~730). These two only coincide when the audit reproduced by build_contract matches exactly the historical d505ef pass/waiver numbers (189/172/168/127/327). If the contract is rebuilt with a current, improved audit (more passes, fewer waivers), the freshly built schema-1 baseline.json will fail its own verify_contract with confusing "baseline summary ... must be 189" errors until it is promoted to schema 3. Consider either having build_contract emit the pinned schema-1 summary directly (making a build verify round-trip without promotion), or documenting/enforcing that a schema-1 build is only valid for the historical audit and should never be verified pre-promotion.

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 1445:

<comment>The schema-1 verifier now requires the baseline summary to equal the independently pinned `LEGACY_SCHEMA_ONE_SUMMARY` (e.g. `xy_execution_passed` must be exactly 189), but `build_contract` still writes its schema-1 `baseline["summary"]` by deriving it from the live audit via `_legacy_summary` (line ~730). These two only coincide when the audit reproduced by `build_contract` matches exactly the historical d505ef pass/waiver numbers (189/172/168/127/327). If the contract is rebuilt with a current, improved audit (more passes, fewer waivers), the freshly built schema-1 `baseline.json` will fail its own `verify_contract` with confusing "baseline summary ... must be 189" errors until it is promoted to schema 3. Consider either having `build_contract` emit the pinned schema-1 summary directly (making a build verify round-trip without promotion), or documenting/enforcing that a schema-1 build is only valid for the historical audit and should never be verified pre-promotion.</comment>

<file context>
@@ -1403,33 +1415,34 @@ def verify_contract(root: Path = CORPUS_ROOT) -> list[str]:
-        )
+        if baseline.get("audit_commit") != LEGACY_SCHEMA_ONE_AUDIT_COMMIT:
+            errors.append("schema-1 baseline audit_commit is not the pinned historical audit")
+        expected_summary = dict(LEGACY_SCHEMA_ONE_SUMMARY) if baseline_paths_match else {}
     for key, expected in expected_summary.items():
         if baseline.get("summary", {}).get(key) != expected:
</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