Removal of baseline images from matplotlib_baseline_images package#17793
Removal of baseline images from matplotlib_baseline_images package#17793SidharthBansal wants to merge 11 commits intomatplotlib:masterfrom
Conversation
25eb8c5 to
678b778
Compare
c5b1486 to
a000051
Compare
| stdout=subprocess.DEVNULL), | ||
| universal_newlines=True) | ||
| # Clone mpl repo to tmpvenv and run pytests from new mpl repo created | ||
| subprocess.run(["git", "clone", str(mplRepoPath), "tmp/testenv"], |
There was a problem hiding this comment.
What version of git do we get worktree? I suspect that would be both faster and small footprint.
| stderr=subprocess.STDOUT, | ||
| stdout=subprocess.DEVNULL, | ||
| universal_newlines=True) | ||
| subprocess.run(["python", "-mpip", "install", "-e", mplRepoPath], |
There was a problem hiding this comment.
should this be the new venv python?
| stderr=subprocess.STDOUT, | ||
| stdout=subprocess.DEVNULL, | ||
| universal_newlines=True) | ||
| subprocess.run(["python", "-mpytest"], |
There was a problem hiding this comment.
Should also install pytest and all of the extra dependencies (pandas, ...) to make sure we generate all of the images or should we only match what the user has installed in their development environment?
There was a problem hiding this comment.
I think installing all extra dependencies is a better option as testing aims to check integrity amongst the components too, which can't be achieved if only some of the installs are done.
First time all the images will be generated, later on we can move on specific missing installs and modifications of the baseline images.
7a6aedd to
c885729
Compare
|
Series of commands executed in the terminal: The first pytest command generates the baseline images with the |
631f056 to
cd7dda9
Compare
cdfbf4e to
b97b849
Compare
| ------------------------- | ||
| The first time this test is run, there will be no baseline image to compare against, so the test will fail. The baseline | ||
| images would be generated either by installing ``matplotlib-baseline-images`` package or by running the baseline image | ||
| generation command from the commandline. These methods are described below. Later on, developer can run :: |
There was a problem hiding this comment.
Should we be suggesting folks generate the images themselves? That will introduce all sorts of changes due to bad font installs. I think tests should be done against canonical, even locally.
There was a problem hiding this comment.
The point of this work is so that we don't have to compare against the canonical version of the images which eliminates the issues we have with freetype / latex drifting under us. So long as you don't change your local images commit-to-commit they should also not change commit-to-commit on a different machine with a different freetype / latex install.
The plan is to with a release publish a set of "blessed" images with a fixed freetype.
There was a problem hiding this comment.
OK, I thought the point was not to have all the images in the repo.
So the idea is that I generate the images off of master, and then make a new branch, make my changes and then run the tests and compare my changes to the ones I made on master.
A possible difficulty here are all the fixed-size tests we have that are not image tests. There are many tests we have that assert the position of an element is at 0.9765, but it may not be if we don't have the same font library.
In either case, the above description is not clear on the process. I'd say something like
In order to run local image tests, the developer should checkout the ``master`` branch and
run the tests once to get a set of baseline images that are consistent with the code in
``master``. Then subsequent tests from their branches will test against these baseline
images.
Alternately, the developer could download the ``matplotlib-baseline-images`` package and
compare against these images. However, the developer will have to be certain to have
development environment that has the same free type and other dependencies as the testing
environment on the the machine that made ``matplotlib-baseline-images``.
There was a problem hiding this comment.
The idea is to eventually remove all of the images but we have options about where devs get the baselines from.
|
|
||
| Baseline image generation at the fresh install of matplotlib through command line | ||
| ---------------------------------------------------------------------------------- | ||
| The baseline images can be generated in the ``baseline_images`` directory by using :: |
There was a problem hiding this comment.
As above - not sure we should encourage this. Its basically a useless test if local images pass but fail when uploaded.
| --------------------------------------------- | ||
| Tests generating the baseline images may change over time. So, the baseline images needs to be regenerated by the | ||
| developer after fetching the changes through ``git pull`` or ``git checkout -b featured_branch``. Missing baseline | ||
| images can be generated in the ``baseline_images`` directory with the following command:: |
There was a problem hiding this comment.
So I still don't understand what will happen at this point. I fix a bug, but it changes the image for test_boo.py::test_existing_feature. I decide the change is acceptable, and submit a PR. How does the reviewer know that the image changed? How do they compare the old versus new and assess if the new change is actually acceptable or not? How do the CI tests pass?
There was a problem hiding this comment.
Great thoughts. I will write the documentation for those cases. Thanks
| ---------------------------------------------------------------------- | ||
| In the previous flow the committed baseline images were changed when the tests generating them changed. Now, there is | ||
| no need to change the baseline images as they will be generated by running the tests by other developers. Instead, | ||
| change the name of the baseline images. It can be done by changing the id appended to the name of the test to the next |
There was a problem hiding this comment.
In the previous flow changed baseline images were explicitly committed to the repo as part of the PR as a change to the file, and you could compare before and after. I'm still not at all clear what the new plan is from these descriptions. This needs a thorough before and after guide.
|
|
||
| Baseline image generation | ||
| ------------------------- | ||
| The idea is to eventually remove all of the images but we have options about where devs get the baselines from. |
There was a problem hiding this comment.
This needs a paragraph explaining the current state of things to the reader. To us (who have been thinking about this all summer), this makes perfect sense, but to a new contributor who does not even know we have baseline images checked into the repo this is going to be consufing.
…ectory and matplotlib directory
|
@anntzer this seems like a good start, but is there any reason to keep it open? |
|
Let's close this for now; we can always revisit... |
PR Summary
This is useful e.g. for mplcairo, whose test suite relies on matplotlib's one.
Also, useful for Baseline image problem optimisation.
test_datafolder needed for additional test images apart from the baseline imagesmatplotlibandmpl_toolkitsfoldersFixes #16447
attn: @anntzer
PR Checklist