Visitar URL original
Update pgf baseline image for TeX Live 2025 by axel-j-larsson · Pull Request #32504 · matplotlib/matplotlib · GitHub
Skip to content

Update pgf baseline image for TeX Live 2025 - #32504

Open
axel-j-larsson wants to merge 2 commits into
matplotlib:mainfrom
axel-j-larsson:fix-pgf-test-baseline-image
Open

axel-j-larsson wants to merge 2 commits into
matplotlib:mainfrom
axel-j-larsson:fix-pgf-test-baseline-image

Conversation

@axel-j-larsson

Copy link
Copy Markdown

PR summary

Fixes issue #29790. Also relates to PR #32478 .
With TeX Live 2025, test_backend_pgf.py was failing due to pgf_rcupdate2, where a single character had changed location by a pixel:
pgf_rcupdate2_pdf-failed-diff

I investigated it and the PGF files generated by pgf_backend.py were identical between TeX Live versions. After manually regenerating the PDFs from the same PGF file with both TeX Live 2025 and 2024, I found that their contents differed slightly in regards to object positioning. After additionally manually rasterizing the output with ghostscript (as done in the test), the same one-pixel difference appeared in both the files created by Matplotlib and the ones generated and rasterized manually.

It appears that the difference is instead caused by updates in PDFTeX's rendering engine, and would as such not be anything directly caused by a bug in Matplotlib. As such, I determined the most suitable fix would be to update the baseline image. I have also checked the new baseline with TeX Live 2026, and it still passes there.

However, the new baseline does instead fail for TeX Live 2024 (and presumably earlier versions as well). As such, the suitability of this PR depends on what which TeX Live version to support, and in extension which Ubuntu version to support (see #32478).

AI Disclosure

AI was used to help investigate the image difference and generate new PDFs directly with pdfLaTeX. However, the new baseline test results have been verified and reviewed manually.

PR quality check

  • Use an expressive title, e.g. "Fix title font property precedence"
  • New and changed code is tested
  • N/A Plotting related features are demonstrated in an example
  • N/A New features and API changes have release notes
  • N/A Documentation complies with general and docstring guidelines

@github-actions

Copy link
Copy Markdown

Thank you for opening your first PR into Matplotlib!

If you have not heard from us in a week or so, please leave a new comment below and that should bring it to our attention. Most of our reviewers are volunteers and sometimes things fall through the cracks. We also ask that you please finish addressing any review comments on this PR and wait for it to be merged (or closed) before opening a new one, as it can be a valuable learning experience to go through the review process.

You can also join us on discourse chat for real-time discussion.

For details on testing, writing docs, and our review process, please see the developer guide.
Please let us know if (and how) you use AI, it will help us give you better feedback on your PR.

We strive to be a welcoming and open project. Please follow our Code of Conduct.

@axel-j-larsson

Copy link
Copy Markdown
Author

Hi @iccir, just checking back to see if there were any plans on changing the CI to use TeX Live 2025. If not, would it perhaps be a good idea to instead specify which version of it that is expected in the docs?

@iccir

iccir commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

I'm honestly not sure, as this isn't my area of expertise. My instinct would be to pick the TeX Live version with the most users and then xfail the tests on other configurations. Ultimately, all tests either need to pass or be expected to fail.

@axel-j-larsson
axel-j-larsson force-pushed the fix-pgf-test-baseline-image branch from 1359e47 to 180b65c Compare November 4, 2026 17:51
'\\usepackage{sfmath}')}]
tol = [0, 13.2] if _old_gs_version else [0, 0]
for i, rc_set in enumerate(rc_sets):
if i == 1 and mpl._get_executable_info('pdflatex').version > Version('1.40.26'):

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.

I think this should be parse_version to match existing code.

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.

Additionally, can mpl._get_executable_info('pdflatex') return None for info?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

As far as I can tell, pdflatex has used the same versioning format since mid 2005, so as long as a version that isn't older than that is used it shouldn't return None.

Comment thread lib/matplotlib/__init__.py Outdated
f"version supported by Matplotlib is 3.0")
return info
elif name == "pdflatex":
return impl(["pdflatex", "-v"], r"pdfTeX .*-(\d+\.\d+\.\d+)")

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.

Is there any danger of -v failing on old pdflatex? See other review comment about returning None.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Using -version instead might be better, as I believe it has been supported for longer.

@axel-j-larsson
axel-j-larsson requested a review from iccir November 5, 2026 21:43
@axel-j-larsson

Copy link
Copy Markdown
Author

I did some revisions based on your feedback. Although the codecov check is failing (and for some reason I cannot access the line-by-line analysis of it either) and I am unsure whether something needs to be done in regards to that (and if so what).

@axel-j-larsson

Copy link
Copy Markdown
Author

Hi again @iccir, just checking back in case you missed my previous update. Thanks

for i, rc_set in enumerate(rc_sets):
if (i == 1 and
mpl._get_executable_info('pdflatex').version > parse_version('1.40.26')):
pytest.xfail(reason="This test currently requires a pdfTeX "

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.

Checking i == 1 seems fragile. Could we check the value of pgf.texsystem instead?

I'm a bit confused, however - why are we checking for 1.40.26 or earlier and not requiring a newer version of TeX Live? If TeX Live 2025 is more widely used, I think that we should have tests / images that pass on it and then xfail on older versions.

This branch has not been deployed

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants