Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Fix image comparison #1291

Merged
merged 20 commits into from

7 participants

@mgiuca-google

Fixes the compare_image RMS calculation algorithm, so that it computes the RMS of the difference between corresponding pixels, as opposed to the RMS of the histograms between the two images.

See discussion on Issue 1287.

Note: This is not yet ready to merge, since it breaks a lot of tests. Some negotiation is required to figure out whether to update the expected output for each test, or bump up the tolerance.

lib/matplotlib/testing/compare.py
((6 lines not shown))
actualImage, expectedImage = crop_to_same(actual, actualImage, expected, expectedImage)
- # compare the resulting image histogram functions
- expected_version = version.LooseVersion("1.6")
- found_version = version.LooseVersion(np.__version__)
+ # convert to signed integers, so that the images can be subtracted without
+ # overflow
+ expectedImage = expectedImage.astype(np.int32)
+ actualImage = actualImage.astype(np.int32)
+
+ # calculate the per-pixel errors, then compute the root mean square error
+ num_values = reduce(operator.mul, expectedImage.shape)
@pelson Collaborator
pelson added a note

np.prod(expectedImage.shape) would do the trick here (obviously your version works, but feels less numpy-y).

Ah much better.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
lib/matplotlib/testing/compare.py
((6 lines not shown))
actualImage, expectedImage = crop_to_same(actual, actualImage, expected, expectedImage)
- # compare the resulting image histogram functions
- expected_version = version.LooseVersion("1.6")
- found_version = version.LooseVersion(np.__version__)
+ # convert to signed integers, so that the images can be subtracted without
+ # overflow
+ expectedImage = expectedImage.astype(np.int32)
+ actualImage = actualImage.astype(np.int32)
@pelson Collaborator
pelson added a note

Wouldn't int16 do?

>>> np.int16(0) - np.int16(255)
-255

Yeah. I was trying to make it work for 16-bit PNGs as well, but the rest of the code won't support that anyway. Changed to int16.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
lib/matplotlib/testing/compare.py
((37 lines not shown))
else:
- rms = 0
- bins = np.arange(257)
-
- for i in xrange(0, 3):
- h1p = expectedImage[:,:,i]
- h2p = actualImage[:,:,i]
-
- h1h = np.histogram(h1p, bins=bins)[0]
- h2h = np.histogram(h2p, bins=bins)[0]
-
- rms += np.sum(np.power((h1h-h2h), 2))
+ histogram = np.histogram(absDiffImage, bins=np.arange(257))[0]
@pelson Collaborator
pelson added a note

Could this not be np.arange(256) rather than 257?

No, because the bins argument to histogram expects an array with all of the boundary values, from the minimum value of the first bin, to the maximum value of the last bin. The resulting histogram has len(bins)-1 values, so passing an array with 257 elements results in a histogram of 256 elements that counts the number of values of each byte.

np.arange(256) would mean that the 254 and 255 values would be merged into a single bin.

@pelson Collaborator
pelson added a note

That's my kind of spelling - but is probably inconsistent with the rest of the docs/codebase. Would you mind dropping the "u" from colour? (It feels very alien asking you to do this...)

@NelleV Collaborator
NelleV added a note

@pelson in fact:

nvaroqua@u900-bdd-1-156t-6917:~/Projects/matplotlib$ git grep color | wc
   15543   81737 1965493
nvaroqua@u900-bdd-1-156t-6917:~/Projects/matplotlib$ git grep colour | wc
    59     396    4876
@dmcdougall Collaborator

That's probably my fault...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
lib/matplotlib/testing/compare.py
((50 lines not shown))
- rms = np.sqrt(rms / (256 * 3))
+ sumOfSquares = sum(count*(i**2) for i, count in enumerate(histogram))
@pelson Collaborator
pelson added a note

Nice line. I think it can be simplified with np.sum(histogram * np.arange(len(histogram))**2)

e.g:

>>> a = np.array([0, 3, 2, 4]) 
>>> i = np.arange(len(a))
>>> a
array([0, 3, 2, 4])
>>> i
array([0, 1, 2, 3])
>>> i**2
array([0, 1, 4, 9])
>>> a * i**2
array([ 0,  3,  8, 36])
>>> np.sum(a * i**2)
47

Awesome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
lib/matplotlib/testing/compare.py
((50 lines not shown))
- rms = np.sqrt(rms / (256 * 3))
+ sumOfSquares = sum(count*(i**2) for i, count in enumerate(histogram))
+ rms = np.sqrt(float(sumOfSquares) / num_values)
@pelson Collaborator
pelson added a note

This is the standard rms, right? So another step would be needed to scale the rms to have a standard magnitude irrespective of the number of pixels?

That's what / num_values is doing. It is calculating the (geometric) average of errors across all pixels, so you have already divided by the number of pixels. To test this, see my all127 vs all128 test, which has an RMS error of exactly 1.0, because all of the pixels have a difference of 1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
lib/matplotlib/tests/test_compare_images.py
((43 lines not shown))
+ im2 = 'cosine_peak-nn-img-minorchange.png'
+ image_comparison_expect_rms(im1, im2, tol=10, expect_rms=None)
+
+ # Now test with no tolerance.
+ image_comparison_expect_rms(im1, im2, tol=0, expect_rms=2.99949)
+
+def test_image_compare_scrambled():
+ """Test comparison of an image and the same image scrambled."""
+ # This expects the images to compare completely different, with a very large
+ # RMS.
+ # Note: The image has been scrambled in a specific way, by having each
+ # colour component of each pixel randomly placed somewhere in the image. It
+ # contains exactly the same number of pixels of each colour value of R, G
+ # and B, but in a totally different position.
+ im1 = 'cosine_peak-nn-img.png'
+ im2 = 'cosine_peak-nn-img-scrambled.png'
@pelson Collaborator
pelson added a note

We could compute this file, rather than having to store it. Not sure if we would want to do such a thing (the only reason I have is to reduce the number of extra files needed in the repo). @mdboom : any feeling on whether we need to be particularly cautious of growing the repo too much?

Yep, I could replace this with the algorithm I used to scramble the file. If you are concerned about the repo size, I probably should not be copying the other image either -- note that it is an exact copy of baseline_images/test_delaunay/cosine_peak-nn-img.png. Let me know if you want me to make either of these changes.

@pelson Collaborator
pelson added a note

any feeling on whether we need to be particularly cautious of growing the repo too much?

IMHO We should be cautious, but that doesn't mean we have to be frugal. Do what you think is best here - if its practical and not overly prohibitive, then I would prefer to programatically generate some of the data - otherwise what's here is fine.

@mdboom Owner
mdboom added a note

We don't need to worry about going over github quotas. The only reason for concern is the extra disk space/bandwidth for everyone's local clones, but I don't think we need to worry at the moment.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@pelson pelson commented on the diff
lib/matplotlib/tests/test_compare_images.py
@@ -0,0 +1,74 @@
+from __future__ import print_function
+from matplotlib.testing.compare import compare_images
+from matplotlib.testing.decorators import _image_directories
+import os
+import shutil
+
+baseline_dir, result_dir = _image_directories(lambda: 'dummy func')
+
@pelson Collaborator
pelson added a note

I would like to see a pixel shift test (e.g. the whole image shifted across by 1 pixel).

Similarly, it would be nice to test a sub-region with a pixel shift. (i.e. move the x axis across by 1 pixel).

Done. The RMS errors for the particular cases I chose are 22 (for the whole image) and 13 (for the sub image), out of 255. This is above the default tolerance, but it's what I would have expected, given that a lot of pixels don't match. This is expected, but unfortunate, since it is not a major difference in the images from a human standpoint.

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

@mgiuca-google : This is really good stuff, thank you!

As you can see, I have raised a couple of questions, but in principle, I think this will be a beneficial change. As I hinted at in my comment on the original issue, I probably wouldn't call the original image comparison test "broke", just that it has some characteristics which may not be ideal for our image testing requirements. On that basis, I wonder if it is worth us maintaining the two functions side by side, primarily so that other users who may want to do image comparison could decide which algorithm to use. This may be a contentious issue, as inevitably it will increase the amount of code that mpl has to maintain...

One nitpick observation: you have built on code which is obviously not PEP8 compliant, resulting in you own code not being strictly PEP8 compliant (although you have followed the guiding principle: "A style guide is about consistency. Consistency with this style guide is important. Consistency within a project is more important. Consistency within one module or function is most important."). I would certainly find it an improvement if you were to rename the variables you have added/touched to be more PEP8-y (i.e. from camelCase to underscored_variables).

On the whole, pretty awesome!

@WeatherGod
Collaborator

Just something I have come across today in my work that might be relevant is the MapReady toolkit: http://www.asf.alaska.edu/downloads/software_tools

In it, there is a program called "diffimage" (which, because this is a geoprocessing tool, does a bit more than we are looking for), but has the following description:

DESCRIPTION:
   1. diffimage calculates image statistics within each input image
      and calculates the peak signal-to-noise (PSNR) between the two
      images.
   2. diffimage then lines up the two images, to slightly better
      than single-pixel precision, and determines if any geolocation
      shift has occurred between the two and the size of the shift.
      Because an fft-based match is utilized it will work with images of
      any size, but is most efficient when the image dimensions are
      near a power of 2.  The images need not be square.
   3. diffimage then compares image statistics and geolocation shift
      (if it occurred) and determines if the two images are different from
      each other or not.
   4. If there are no differences, the output file will exist but will be
      of zero length.  Otherwise, a summary of the differences will be placed
      in both the output file and the log file (if specified.)

So, what is interesting is the use of the fourier-transform as part of the image differentiating technique. Don't know if that might be an interesting avenue to pursue or not. Cheers!

@dmcdougall
Collaborator
@mgiuca-google

Thanks for your comments, @pelson. I have taken care of them.

I would certainly find it an improvement if you were to rename the variables you have added/touched to be more PEP8-y (i.e. from camelCase to underscored_variables).

I have renamed absDiffImage and sumOfSquares to PEP-8 style, but I didn't want to touch expectedImage and actualImage since that will make my patch look much bigger than it should.

@WeatherGod good find. I will have a look at that tool later on. The main improvement I'd be interested in over the RMSE algorithm I implemented would be whether it can detect minor pixel shifts and assign a small penalty (whereas RMS assigns a large penalty because it just thinks that all of the pixels have changed). It shoulds like step 2 (lining up the two images) is designed to solve this, but again, we need to be able to deal with sub-image shifts, not just whole-image shifts. The new test cases Phil suggested that I add are helpful in judging this requirement. They currently output 22 and 13 respectively. I'd expect them to output some positive value, but much smaller, perhaps about 4 and 2, respectively.

@mgiuca-google

@WeatherGod wrote:

Just something I have come across today in my work that might be relevant is the MapReady toolkit:
http://www.asf.alaska.edu/downloads/software_tools

I'm not sure if you're advocating using this tool or just borrowing the idea. If you meant the former, I had a brief look at the license agreement and it is incompatible with Matplotlib. It seems to be basically the BSD license, but with the additional BSD-incompatible clause:

Redistribution and use of source and binary forms are for noncommercial purposes only.

@pelson
Collaborator

@mgiuca-google - if you wouldn't mind rebasing this, I'd like to see if we can get this merged in the next couple of weeks. Previous commenter from #1287 were @mdboom, @dmcdougall, @WeatherGod so ideally we would get either a :+1:, :-1: or and explicit abstinence from those before we actually press the merge button (other commenter more than welcome too!).

Cheers,

@mdboom
Owner

I'm definitely in favor of this in principle. Once this is rebased and we have something to test again, I'd like to kick the tires one more time (since accidentally breaking the test suite would be a major problem). Assuming all that goes well, I'd say this is good to go.

lib/matplotlib/tests/test_compare_images.py
((6 lines not shown))
+
+baseline_dir, result_dir = _image_directories(lambda: 'dummy func')
+
+# Tests of the image comparison algorithm.
+def image_comparison_expect_rms(im1, im2, tol, expect_rms):
+ """Compare two images, expecting a particular RMS error.
+
+ im1 and im2 are filenames relative to the baseline_dir directory.
+
+ tol is the tolerance to pass to compare_images.
+
+ expect_rms is the expected RMS value, or None. If None, the test will
+ succeed if compare_images succeeds. Otherwise, the test will succeed if
+ compare_images fails and returns an RMS error almost equal to this value.
+ """
+ from nose.tools import assert_almost_equal
@NelleV Collaborator
NelleV added a note

It would be better to have those imports at the top of the file

Done. Thanks for spotting.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
lib/matplotlib/testing/compare.py
@@ -280,44 +280,35 @@ def compare_images( expected, actual, tol, in_decorator=False ):
# open the image files and remove the alpha channel (if it exists)
expectedImage = _png.read_png_int( expected )
actualImage = _png.read_png_int( actual )
+ expectedImage = expectedImage[:,:,:3]
@NelleV Collaborator
NelleV added a note

Minor PEP8 nitpick: you have have spaces after ,. You could run flake8 on this file, but as I don't think it is pep8 compliant at all, you'll have a lot of warnings that are not on lines of code you changed.

I don't think PEP8 has an opinion on this either way; it's fairly specialized syntax for Numpy. The Numpy manual explicitly uses this syntax with no spaces: see z[1,:,:,2]. Besides, as you say, this file is not PEP8-compliant to begin with (see the previous two lines).

@NelleV Collaborator
NelleV added a note

I don't know about the numpy manual, but numpy's code itself doesn't follow pep8 convention. If you want a pep8 fullproof codebase, you should check out scikit-learn.

I can fix the non pep8 compliance when I pep8-tify this file. It's just that merging pep8 compliance patches starting now gives me less work to do later :)

@pelson Collaborator
pelson added a note

I agree with @NelleV on this - its not your responsibility to PEP8 this file, but ideally any new code should, within reason, be as PEP8 as possible. My take on this example is that there should be spaces after the commas (PEP8 quote: Avoid extraneous whitespace in the following situations:
Immediately before a comma, semicolon, or colon
- there is no explicit mention of whitespace after the comma, but generally that is the accepted form).

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

I'm definitely in favor of this in principle. Once this is rebased and we have something to test again, I'd like to kick the tires one more time (since accidentally breaking the test suite would be a major problem). Assuming all that goes well, I'd say this is good to go.

I agree with this. The negotiation @mgiuca-google mentions in this PR message I think should be carefully considered particularly given the issues we have comparing images of rasterised text across different versions of freetype.

@mgiuca-google

Hey guys,

Thanks for bumping this, Phil. I've done a merge up to the current head. (You said "rebase" and I'm not sure if you actually prefer a rebase instead of a merge -- I'm personally not a fan but if you really want a rebase, let me know and I'll do that.) You guys should be able to pull this branch and run the tests.

The other change I made was in commit 5e22c11, I deleted the section which Michael added in 1283feb, which retries a failed comparison, removing any pixel differences of 1. This change was presumably made to work around the fact that if you have a lot of pixels with a slightly different colour, you will get a big error, such as in my all-127 versus all-128 case. My branch fixes that issue, so I don't think we need this extra case. Let me know if there is another good reason for it.

Now this still fails a lot of tests due to RMS failures. As I said in the original PR, we will have to go through and update either the expected output, or the tolerance, for each test. I can do this but it would be good to come to a policy decision first.

@pelson
Collaborator

I can do this but it would be good to come to a policy decision first.

That is perfectly reasonable - we don't want you doing a lot of tedious work if it only goes stale again.

I'm confident that if we can blitz through a review of what's here this week, @mgiuca-google can then go through rms values next (or if there are other volunteers to help with that process, it can be shared appropriately).

I've done a merge up to the current head. You said "rebase" and I'm not sure if you actually prefer a rebase instead of a merge

I did mean rebase, which is generally our preferred way of bringing branches up to date, but the reason why this is preferred over merge eludes me (for a linear history on master???). I'm sure others can fill in the details on that and whether or not to undo the merge and rebase instead.

Cheers,

@mdboom
Owner

Yes -- we definitely want a rebase, not a merge. The merge creates clutter in the history, and it makes it look like the old master is not the "trunk".

Why are there more RMS failures with this change? The images should either be identical to the input (in which case they pass) or any differences should be handled by this new algorithm. If not, then updating the baselines will only cause the comparisons to work for you but fail for me (who produced most of the existing baseline images). Or am I missing something? I hope to find some time shortly to check this out and poke at it a bit.

@mdboom
Owner

Ok -- I see what's happening. It seems like most of these tests are failing due to a subtle text positioning improvement, which shows up mostly in the vector formats. I don't see any failures that look problematic -- in fact one failure is due to a baseline image still showing an old bug. I think the thing to do here is "reset" all of the baselines by updating all of them. I'll file a PR against this one shortly to do just that.

@mdboom
Owner

@mgiuca-google : github won't let me file a PR against your repo (???). Perhaps you could just manually merge mdboom/matplotlib:update_baseline_images.

@mgiuca-google

Yes -- we definitely want a rebase, not a merge. The merge creates clutter in the history, and it makes it look like the old master is not the "trunk".

Well, for what it's worth, if you merge the branch into the master with git merge --no-ff, you don't get that bad history. The merge commit's first parent will be the previous commit to master, so that anyone doing a git log --first-parent will see only the trunk, and not the individual commits to the branch. Note: I'm still going to do the rebase, since you asked me to, but I still recommend you merge with --no-ff to avoid splatting my branch commits (at this point, dozens) into the trunk.

Thanks for going to the effort of resetting all of those images. I wasn't sure you'd want to do that, but I think it's the best outcome. I was able to manually merge it, but it doesn't seem directly relevant to my branch. Wouldn't it be better to cherry-pick fb68c58 into master (since it should not break with the existing comparison function)? Then this branch is just about fixing the comparison function, and not the images themselves.

@mgiuca-google

Okay, I have done the rebase. Now all of my commits are applied to the current HEAD.

I am not sure whether I've done a "rebase" as you intended though. Did you just want my commits applied to HEAD, or did you actually want me to go back through the history and fix up the commits so that they are all in logical order and pristine? For example, removing the "Use int16 instead of int32 arrays," and just using int16 from the start. Also, should it be the case that the tests pass on all of the commits (so, don't commit a failing test case before fixing the code)? I'm just trying to get an idea of what style of branch you want to accept.

If you intend to do a merge --no-ff, then it shouldn't matter if the history is a bit buggy, as long as the final product is fine. If you intend to do a fast-forward merge, then all of the commits need to be sensible.

lib/matplotlib/testing/compare.py
@@ -316,37 +300,25 @@ def compare_images( expected, actual, tol, in_decorator=False ):
# open the image files and remove the alpha channel (if it exists)
expectedImage = _png.read_png_int( expected )
actualImage = _png.read_png_int( actual )
+ expectedImage = expectedImage[:,:,:3]
+ actualImage = actualImage[:,:,:3]
@pelson Collaborator
pelson added a note

Hmmm. Is there a reason for not taking the alpha channel into account?

@mdboom Owner
mdboom added a note

I think for the vast majority of our tests, it doesn't matter. But it's conceivable it might for one testing that the background of the figure is transparent for example. It probably saves some time, which is important when considering how long the tests currently take to run.

Note also that for PDF comparisons, Ghostscript never gives an alpha channel, so it's completely redundant there.

Maybe it should be a kwarg compare_alpha (defaulting to False)? I wouldn't want that to hold up this PR because of it.

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

Updating the PR (note: I didn't rebase again but I will after further discussion). Here are the remaining issues. Let me know if I've missed some:

  • PEP8 compliance. I've fixed the issue that was pointed out.
  • Removing the alpha channel. Interesting that the current code says "remove the alpha channel" but doesn't actually do so. I believe it used to do this, but it was lost in one of the refactorings over the past six months. I think that removing the alpha channel is correct at the moment, because none of the images have alpha and we want to make sure we can compare two images if one has alpha and the other does not. I'm happy to add a compare_alpha argument, but probably not in this PR.
  • Automatically generating some of the expected output images. I don't really want to generate the image algorithmically because a) that makes the tests non-deterministic (since it is a random scramble), and b) it involves lots of new code in the testing infrastructure with new ways to go wrong. The new images total 1.6 MB which is fairly hefty. Instead, I've replaced that rather large image with a tiny one that makes the same point, for a total of 4.3 kB of new images. Note that the old images are still in my commit history, but I'll rebase them away before we merge the PR.
  • The per-test tolerance settings. I decided to reset all of the custom tolerances since they are basically meaningless against the new algorithm (and some of them were huge). Obviously it's hard to choose an appropriate tolerance without having lots of computers to test it on, so maybe we can just set them low to begin with and creep them up as necessary. I've set the default tolerance to 10 out of 255, which allows for small changes in the kerning. For images with lots of text, the tolerance may need to be higher (for example, one images gives me an RMS error of 13.3 compared to Michael's updated baseline image). I'm getting huge RMS errors on the mathtext (presumably because Michael and I have different TeX renderers) -- in some cases up to 50 out of 255. I've set the tolerance to 50 for those tests, but this worries me, because with such a high tolerance, it won't detect a lot of problems with those images.
@pelson
Collaborator

Obviously it's hard to choose an appropriate tolerance without having lots of computers to test it on, so maybe we can just set them low to begin with and creep them up as necessary.

I agree with that approach. I'm prepared to accept that some developers' (depending on machine/os) test suite will fail after merging this PR - its easy for us to iteratively increase tolerances as needed.

I've set the tolerance to 50 for those tests, but this worries me, because with such a high tolerance, it won't detect a lot of problems with those images.

Perhaps, in an ideal world, we would do well to be able to specify regions of different tolerances in the same image. But not here. :smile:

@pelson
Collaborator

for a total of 4.3 kB of new images

Excellent saving! Thanks for doing this.

@mgiuca-google

Changed. (Don't worry, I'm used to writing "color" to be consistent with the code around me. I'm usually less careful in comments, but fixed for consistency.)

@mdboom
Owner

Agreed about alpha channel -- best to ignore it for now.

The difference in the mathtext tests is most likely the version of freetype. None of our tests use the tex renderer -- they use the built-in mathtext renderer. It would be nice to find an algorithm that would ignore those differences.

Note that we switched to using non-antialiased text at one point to be more robust with the old image comparison algorithm. Perhaps switching back to antialiased text would actually be more robust with the new algorithm. @mguica-google: I'll send you my output for the mathtext tests with antialiasing turned back on, and then perhaps you can experiment comparing those to the antialiased tests generated by your platform.

@mdboom
Owner

@mgiuca-google: I've put antialiased text results on my antialiased_text_test branch. If you merge that into this and run on your local machine, we should know pretty quickly whether this new approach is more robust against differences in antialiased text or aliased text (as it is now).

@mgiuca-google

@mdboom Good idea. I'd say that it is a net improvement, though not as good as I had hoped. It doesn't obviate the need to bump up the tolerances in a few places, but I was able to reduce the tolerance on mathtext from 50 down to 32, so I think it's a win.

Your antialiased_text_test branch has a few issues:

  • The test_arrow_patches baseline images are once again blank. I'm not sure what it is about your machine that is doing that. In any case, they don't have text, so it is safe to simply revert them.
  • The test_backend_svg baseline images are shifted slightly to the left, causing test failures. Again, no text, so safe to revert.

Maybe you should revert all of the pdf and svg files, since they shouldn't have changed anyway. Then I would say it is safe to go ahead and commit that (independent of this branch). After reverting the above files, it passes on my machine even with the old comparison algorithm. Oh, as of 6cf6cbb, there are some changes to the baseline images so you might need to generate them again!

@mdboom
Owner

The image comparison tests fail with the old algorithm and non-antialiased text on Travis-CI (which must be using yet another version of freetype) -- so I don't think I want to commit the antialiased images independent of this PR. What I think would be best is for me to fix up the problems as you noted (the test_arrow_patches and revert all of the non-PNG baselines), have you merge that into this branch, get Travis to pick it up and see how it does. I'll post another note here when I've had a chance to do that (and I might try to get to the bottom of the test_arrow_patches failure while I'm in there).

@mdboom
Owner

Ok -- I've updated my antialiased_text_branch (removing the old commit and replacing it with a new one that only updates PNG files).

@mgiuca-google

OK sorry for the delay. I was away. Now I have merged your branch and it seems to pass on my machine. I've also merged from master and there were a few new baseline images, so I updated those to be antialiased as well. We'll see how Travis likes it =)

@efiring
Owner

I did a manual merge and tested, with the result that the usual stackplot failures are still there, but in addition exceptions are being generated by test_backend_pgf.test_xelatex, test_pdflatex, and test_rcupdate. It looks like these tests need to be updated, or a default tolerance provided by converting the third argument of compare_images() to a kwarg. The failure is the same on all, e.g.:

======================================================================
ERROR: matplotlib.tests.test_backend_pgf.test_xelatex
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/tests/test_backend_pgf.py", line 45, in backend_switcher
    result = func(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/tests/test_backend_pgf.py", line 86, in test_xelatex
    compare_figure('pgf_xelatex.pdf')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/tests/test_backend_pgf.py", line 60, in compare_figure
    err = compare_images(expected, actual)
TypeError: compare_images() takes at least 3 arguments (2 given)
@mdboom
Owner

We at long last have the tests passing cleanly on Travis again. What's left to get this in at this point? This is a great piece of work, and it's high time to polish the details and get it merged. Thanks again.

@mgiuca-google

Did efiring's issues get fixed? If so, is there another branch with that fix which I should be merging into mine?

@efiring
Owner

I think that what we need now is for you to rebase your branch onto the latest master, since @mdboom has all tests passing there. Then, if your rebased branch also passes all tests, it is probably ready to go. If not, it will at least be ready for tracking down any remaining problems.

@mdboom
Owner

I think we'll probably need a rebase plus a regeneration of the images with antialiased text (since I think we determined that works better with this approach). And then we cross our fingers and hope Travis likes it ;)

mgiuca-google and others added some commits
@mgiuca-google mgiuca-google Added new test suite, test_compare_images.
This tests the image comparison function itself. Currently, all three cases
fail, due to a buggy comparison algorithm.

In particular, test_image_compare_scrambled shows the algorithm massively
under-computing the error, and test_image_compare_shade_difference shows the
algorithm massively over-computing the error.
3dcc2cb
@mgiuca-google mgiuca-google Remove the alpha channel from the expected and actual images.
(This regressed when the PIL code was migrated to numpy.)
2f139f2
@mgiuca-google mgiuca-google testing/compare: Fix image comparison RMS calculation.
The previous implementation did not compute the RMS error. It computed the RMS
in the difference of the number of colour components of each value. While this
computes 0 for equal images, it is incorrect in general. In particular, it does
not detect differences in images with the same pixels in different places. It
also cannot distinguish small changes in the colour of a pixel from large ones.
82ecfcf
@mgiuca-google mgiuca-google Do not divide RMS by 10000 when testing against tolerance.
This was arbitrary and made no sense. Increased all tolerances by a factor of
10000. Note that some are ridiculously large (e.g., 200 out of 255).
125d235
@mgiuca-google mgiuca-google Update the documentation to the 'tol' parameter. a344de6
@mgiuca-google mgiuca-google compare: Use np.prod instead of Python reduce. 7a9a71b
@mgiuca-google mgiuca-google compare: Use int16 instead of int32 arrays. 4e12012
@pelson pelson compare: Simplify and speed up sum of squares algorithm. 62a548d
@mgiuca-google mgiuca-google test_compare_images: Added two new test cases, testing a whole-image …
…and sub-image 1-pixel offset.
6edf6bc
@mgiuca-google mgiuca-google compare: Use PEP-8 variable names. 9701a43
@mgiuca-google mgiuca-google test_compare_images: Import nose.tools at the top, instead of in a fu…
…nction.
c855310
@mgiuca-google mgiuca-google testing/compare: Remove "retry ignoring pixels with differences of on…
…ly 1."

This was introduced in 1283feb, presumably to hack around the fact that 1-pixel
differences can make a very large error value. This is not necessary any more,
since the root cause has been fixed."
23b03aa
@mgiuca-google mgiuca-google test_compare_images: Fix errors on Python 2.6 because assert_is_none …
…is not available.
80f89a1
@mgiuca-google mgiuca-google test_compare_images: Replace cosine_peak-nn test images with new base…
…line images

derived from basn3p02 in pngsuite tests.
These are much smaller images than the cosine tests.
91c969a
@mgiuca-google mgiuca-google compare: PEP-8 formatting. 64ae6c8
@mgiuca-google mgiuca-google tests: Removed existing custom tolerance values, since they are irrel…
…evant under the new algorithm.

Added a few new tolerance values, for output I am seeing that is valid but slightly different to the baseline image.
8d44f75
@mgiuca-google mgiuca-google Change spelling of 'colour' to 'color'. 38b6157
@mgiuca-google mgiuca-google test_axes: Remove more arbitrary large tolerances. 9d3e774
@mgiuca-google mgiuca-google Reduce the tolerance for test_mathtext from 50 down to 32.
This is possible due to anti-aliasing.
9410fcf
@mdboom mdboom Update all of the images to use antialiased text afc50bf
@mgiuca-google

I have rebased from master and there was just one image that had changed in the meantime and needed to be regenerated (test_legend/legend_various_labels.png). I've regenerated that image with anti-aliased text and rolled that into mdboom's "Update all of the images to use antialiased text" commit. All tests seem to pass; we'll see what Travis says.

@mdboom
Owner

The Travis failure on 2.6 appears to be due to a network failure, not really any fault of ours. Ideally, we'd do something to push Travis to try again, but I'm reasonably confident that we are ok here, given that we have 2.7 and 3.2 working.

@mdboom
Owner

I'm just going to bite the bullet and merge this. I'm reasonably confident that the 2.6 test will pass once this is merged.

Thanks for all of this work -- I know this was a long lived PR for being so pervasive and fundamental to our workflow, but I think it represents a real improvement.

@mdboom mdboom merged commit f5d86b1 into from
@mgiuca-google

Sweet! Thanks for dealing with this Michael. It's a relief to have it done.

@mgiuca-google mgiuca-google deleted the branch
@pelson
Collaborator

Sweet!

Indeed. Very nice work @mgiuca-google - thanks for this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Feb 27, 2013
  1. @mgiuca-google

    Added new test suite, test_compare_images.

    mgiuca-google authored
    This tests the image comparison function itself. Currently, all three cases
    fail, due to a buggy comparison algorithm.
    
    In particular, test_image_compare_scrambled shows the algorithm massively
    under-computing the error, and test_image_compare_shade_difference shows the
    algorithm massively over-computing the error.
  2. @mgiuca-google

    Remove the alpha channel from the expected and actual images.

    mgiuca-google authored
    (This regressed when the PIL code was migrated to numpy.)
  3. @mgiuca-google

    testing/compare: Fix image comparison RMS calculation.

    mgiuca-google authored
    The previous implementation did not compute the RMS error. It computed the RMS
    in the difference of the number of colour components of each value. While this
    computes 0 for equal images, it is incorrect in general. In particular, it does
    not detect differences in images with the same pixels in different places. It
    also cannot distinguish small changes in the colour of a pixel from large ones.
  4. @mgiuca-google

    Do not divide RMS by 10000 when testing against tolerance.

    mgiuca-google authored
    This was arbitrary and made no sense. Increased all tolerances by a factor of
    10000. Note that some are ridiculously large (e.g., 200 out of 255).
  5. @mgiuca-google
  6. @mgiuca-google
  7. @mgiuca-google
  8. @pelson @mgiuca-google
  9. @mgiuca-google

    test_compare_images: Added two new test cases, testing a whole-image …

    mgiuca-google authored
    …and sub-image 1-pixel offset.
  10. @mgiuca-google
  11. @mgiuca-google
  12. @mgiuca-google

    testing/compare: Remove "retry ignoring pixels with differences of on…

    mgiuca-google authored
    …ly 1."
    
    This was introduced in 1283feb, presumably to hack around the fact that 1-pixel
    differences can make a very large error value. This is not necessary any more,
    since the root cause has been fixed."
  13. @mgiuca-google
  14. @mgiuca-google

    test_compare_images: Replace cosine_peak-nn test images with new base…

    mgiuca-google authored
    …line images
    
    derived from basn3p02 in pngsuite tests.
    These are much smaller images than the cosine tests.
  15. @mgiuca-google
  16. @mgiuca-google

    tests: Removed existing custom tolerance values, since they are irrel…

    mgiuca-google authored
    …evant under the new algorithm.
    
    Added a few new tolerance values, for output I am seeing that is valid but slightly different to the baseline image.
  17. @mgiuca-google
  18. @mgiuca-google
  19. @mgiuca-google

    Reduce the tolerance for test_mathtext from 50 down to 32.

    mgiuca-google authored
    This is possible due to anti-aliasing.
  20. @mdboom @mgiuca-google

    Update all of the images to use antialiased text

    mdboom authored mgiuca-google committed
This page is out of date. Refresh to see the latest.
Showing with 22 additions and 50 deletions.
  1. +1 −0  lib/matplotlib/__init__.py
  2. +20 −48 lib/matplotlib/testing/compare.py
  3. +1 −1  lib/matplotlib/testing/decorators.py
  4. +0 −1  lib/matplotlib/tests/__init__.py
  5. BIN  lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.png
  6. BIN  lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.png
  7. BIN  lib/matplotlib/tests/baseline_images/test_axes/boxplot.png
  8. BIN  lib/matplotlib/tests/baseline_images/test_axes/canonical.png
  9. BIN  lib/matplotlib/tests/baseline_images/test_axes/const_xy.png
  10. BIN  lib/matplotlib/tests/baseline_images/test_axes/contour_colorbar.png
  11. BIN  lib/matplotlib/tests/baseline_images/test_axes/contour_hatching.png
  12. BIN  lib/matplotlib/tests/baseline_images/test_axes/errorbar_basic.png
  13. BIN  lib/matplotlib/tests/baseline_images/test_axes/errorbar_mixed.png
  14. BIN  lib/matplotlib/tests/baseline_images/test_axes/errorbar_zorder.png
  15. BIN  lib/matplotlib/tests/baseline_images/test_axes/fill_units.png
  16. BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.png
  17. BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.png
  18. BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.png
  19. BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.png
  20. BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.png
  21. BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.png
  22. BIN  lib/matplotlib/tests/baseline_images/test_axes/hist2d.png
  23. BIN  lib/matplotlib/tests/baseline_images/test_axes/hist2d_transpose.png
  24. BIN  lib/matplotlib/tests/baseline_images/test_axes/hist_stacked.png
  25. BIN  lib/matplotlib/tests/baseline_images/test_axes/hist_stacked_weights.png
  26. BIN  lib/matplotlib/tests/baseline_images/test_axes/imshow_clip.png
  27. BIN  lib/matplotlib/tests/baseline_images/test_axes/log_scales.png
  28. BIN  lib/matplotlib/tests/baseline_images/test_axes/markevery.png
  29. BIN  lib/matplotlib/tests/baseline_images/test_axes/markevery_line.png
  30. BIN  lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.png
  31. BIN  lib/matplotlib/tests/baseline_images/test_axes/offset_points.png
  32. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_axes.png
  33. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_coords.png
  34. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.png
  35. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_theta_position.png
  36. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_units.png
  37. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_units_2.png
  38. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.png
  39. BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.png
  40. BIN  lib/matplotlib/tests/baseline_images/test_axes/scatter.png
  41. BIN  lib/matplotlib/tests/baseline_images/test_axes/shaped_data.png
  42. BIN  lib/matplotlib/tests/baseline_images/test_axes/single_date.png
  43. BIN  lib/matplotlib/tests/baseline_images/test_axes/single_point.png
  44. BIN  lib/matplotlib/tests/baseline_images/test_axes/stackplot_test_image.png
  45. BIN  lib/matplotlib/tests/baseline_images/test_axes/symlog.png
  46. BIN  lib/matplotlib/tests/baseline_images/test_axes/twin_axis_locaters_formatters.png
  47. BIN  lib/matplotlib/tests/baseline_images/test_axes/units_strings.png
  48. BIN  lib/matplotlib/tests/baseline_images/test_axes/vline_hline_zorder.png
  49. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/all127.png
  50. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/all128.png
  51. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-1px-offset.png
  52. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-half-1px-offset.png
  53. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-minorchange.png
  54. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-scrambled.png
  55. BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02.png
  56. BIN  lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.png
  57. BIN  lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.png
  58. BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axhline.png
  59. BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.png
  60. BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axvline.png
  61. BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.png
  62. BIN  lib/matplotlib/tests/baseline_images/test_dates/date_empty.png
  63. BIN  lib/matplotlib/tests/baseline_images/test_figure/figure_suptitle.png
  64. BIN  lib/matplotlib/tests/baseline_images/test_figure/figure_today.png
  65. BIN  lib/matplotlib/tests/baseline_images/test_image/image_clip.png
  66. BIN  lib/matplotlib/tests/baseline_images/test_image/image_interps.png
  67. BIN  lib/matplotlib/tests/baseline_images/test_legend/framealpha.png
  68. BIN  lib/matplotlib/tests/baseline_images/test_legend/legend_auto1.png
  69. BIN  lib/matplotlib/tests/baseline_images/test_legend/legend_auto2.png
  70. BIN  lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.png
  71. BIN  lib/matplotlib/tests/baseline_images/test_legend/scatter_rc1.png
  72. BIN  lib/matplotlib/tests/baseline_images/test_legend/scatter_rc3.png
  73. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_00.png
  74. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_01.png
  75. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_02.png
  76. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_03.png
  77. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_04.png
  78. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_05.png
  79. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_06.png
  80. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_07.png
  81. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_08.png
  82. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_09.png
  83. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_10.png
  84. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_11.png
  85. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_12.png
  86. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_13.png
  87. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_14.png
  88. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_15.png
  89. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_16.png
  90. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_17.png
  91. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_18.png
  92. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_19.png
  93. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_20.png
  94. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_21.png
  95. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_22.png
  96. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_23.png
  97. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_24.png
  98. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_25.png
  99. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_26.png
  100. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_27.png
  101. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_28.png
  102. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_29.png
  103. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_30.png
  104. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_31.png
  105. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_32.png
  106. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_33.png
  107. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_34.png
  108. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_35.png
  109. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_36.png
  110. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_37.png
  111. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_38.png
  112. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_39.png
  113. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_40.png
  114. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_41.png
  115. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_42.png
  116. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_43.png
  117. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_44.png
  118. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_45.png
  119. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_46.png
  120. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_47.png
  121. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_48.png
  122. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_49.png
  123. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_50.png
  124. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_51.png
  125. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_52.png
  126. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_53.png
  127. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_54.png
  128. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_55.png
  129. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_56.png
  130. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_57.png
  131. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_58.png
  132. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_59.png
  133. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_00.png
  134. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_01.png
  135. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_02.png
  136. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_03.png
  137. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_04.png
  138. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_05.png
  139. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_06.png
  140. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_07.png
  141. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_08.png
  142. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_09.png
  143. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_10.png
  144. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_11.png
  145. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_12.png
  146. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_13.png
  147. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_14.png
  148. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_15.png
  149. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_16.png
  150. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_17.png
  151. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_18.png
  152. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_19.png
  153. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_20.png
  154. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_21.png
  155. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_22.png
  156. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_23.png
  157. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_24.png
  158. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_25.png
  159. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_26.png
  160. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_27.png
  161. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_28.png
  162. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_29.png
  163. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_30.png
  164. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_31.png
  165. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_32.png
  166. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_33.png
  167. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_34.png
  168. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_35.png
  169. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_36.png
  170. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_37.png
  171. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_38.png
  172. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_39.png
  173. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_40.png
  174. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_41.png
  175. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_42.png
  176. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_43.png
  177. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_44.png
  178. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_45.png
  179. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_46.png
  180. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_47.png
  181. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_48.png
  182. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_49.png
  183. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_50.png
  184. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_51.png
  185. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_52.png
  186. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_53.png
  187. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_54.png
  188. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_55.png
  189. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_56.png
  190. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_57.png
  191. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_58.png
  192. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_59.png
  193. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_00.png
  194. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_01.png
  195. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_02.png
  196. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_03.png
  197. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_04.png
  198. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_05.png
  199. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_06.png
  200. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_07.png
  201. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_08.png
  202. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_09.png
  203. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_10.png
  204. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_11.png
  205. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_12.png
  206. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_13.png
  207. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_14.png
  208. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_15.png
  209. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_16.png
  210. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_17.png
  211. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_18.png
  212. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_19.png
  213. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_20.png
  214. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_21.png
  215. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_22.png
  216. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_23.png
  217. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_24.png
  218. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_25.png
  219. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_26.png
  220. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_27.png
  221. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_28.png
  222. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_29.png
  223. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_30.png
  224. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_31.png
  225. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_32.png
  226. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_33.png
  227. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_34.png
  228. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_35.png
  229. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_36.png
  230. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_37.png
  231. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_38.png
  232. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_39.png
  233. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_40.png
  234. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_41.png
  235. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_42.png
  236. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_43.png
  237. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_44.png
  238. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_45.png
  239. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_46.png
  240. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_47.png
  241. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_48.png
  242. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_49.png
  243. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_50.png
  244. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_51.png
  245. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_52.png
  246. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_53.png
  247. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_54.png
  248. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_55.png
  249. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_56.png
  250. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_57.png
  251. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_58.png
  252. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_59.png
  253. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_00.png
  254. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_01.png
  255. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_02.png
  256. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_03.png
  257. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_04.png
  258. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_05.png
  259. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_06.png
  260. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_07.png
  261. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_08.png
  262. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_09.png
  263. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_10.png
  264. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_11.png
  265. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_12.png
  266. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_13.png
  267. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_14.png
  268. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_15.png
  269. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_16.png
  270. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_17.png
  271. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_18.png
  272. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_19.png
  273. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_20.png
  274. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_21.png
  275. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_22.png
  276. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_23.png
  277. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_24.png
  278. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_25.png
  279. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_26.png
  280. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_27.png
  281. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_28.png
  282. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_29.png
  283. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.png
  284. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_31.png
  285. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_32.png
  286. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_33.png
  287. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_34.png
  288. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_35.png
  289. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_36.png
  290. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_37.png
  291. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_38.png
  292. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_39.png
  293. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_40.png
  294. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_41.png
  295. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_42.png
  296. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_43.png
  297. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_44.png
  298. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_45.png
  299. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_46.png
  300. BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_47.png
Sorry, we could not display the entire diff because too many files (485) changed.
View
1  lib/matplotlib/__init__.py
@@ -1114,6 +1114,7 @@ def tk_window_focus():
'matplotlib.tests.test_collections',
'matplotlib.tests.test_colorbar',
'matplotlib.tests.test_colors',
+ 'matplotlib.tests.test_compare_images',
'matplotlib.tests.test_contour',
'matplotlib.tests.test_dates',
'matplotlib.tests.test_delaunay',
View
68 lib/matplotlib/testing/compare.py
@@ -14,7 +14,6 @@
from distutils import version
import hashlib
import math
-import operator
import os
import numpy as np
import shutil
@@ -251,37 +250,21 @@ def crop_to_same(actual_path, actual_image, expected_path, expected_image):
return actual_image, expected_image
def calculate_rms(expectedImage, actualImage):
- # compare the resulting image histogram functions
- expected_version = version.LooseVersion("1.6")
- found_version = version.LooseVersion(np.__version__)
+ # calculate the per-pixel errors, then compute the root mean square error
+ num_values = np.prod(expectedImage.shape)
+ abs_diff_image = abs(expectedImage - actualImage)
# On Numpy 1.6, we can use bincount with minlength, which is much faster than
# using histogram
+ expected_version = version.LooseVersion("1.6")
+ found_version = version.LooseVersion(np.__version__)
if found_version >= expected_version:
- rms = 0
-
- for i in xrange(0, 3):
- h1p = expectedImage[:,:,i]
- h2p = actualImage[:,:,i]
-
- h1h = np.bincount(h1p.ravel(), minlength=256)
- h2h = np.bincount(h2p.ravel(), minlength=256)
-
- rms += np.sum(np.power((h1h-h2h), 2))
+ histogram = np.bincount(abs_diff_image.ravel(), minlength=256)
else:
- rms = 0
- bins = np.arange(257)
-
- for i in xrange(0, 3):
- h1p = expectedImage[:,:,i]
- h2p = actualImage[:,:,i]
+ histogram = np.histogram(abs_diff_image, bins=np.arange(257))[0]
- h1h = np.histogram(h1p, bins=bins)[0]
- h2h = np.histogram(h2p, bins=bins)[0]
-
- rms += np.sum(np.power((h1h-h2h), 2))
-
- rms = np.sqrt(rms / (256 * 3))
+ sum_of_squares = np.sum(histogram * np.arange(len(histogram))**2)
+ rms = np.sqrt(float(sum_of_squares) / num_values)
return rms
@@ -299,8 +282,9 @@ def compare_images( expected, actual, tol, in_decorator=False ):
= INPUT VARIABLES
- expected The filename of the expected image.
- actual The filename of the actual image.
- - tol The tolerance (a unitless float). This is used to
- determine the 'fuzziness' to use when comparing images.
+ - tol The tolerance (a color value difference, where 255 is the
+ maximal difference). The test fails if the average pixel
+ difference is greater than this value.
- in_decorator If called from image_comparison decorator, this should be
True. (default=False)
'''
@@ -316,37 +300,25 @@ def compare_images( expected, actual, tol, in_decorator=False ):
# open the image files and remove the alpha channel (if it exists)
expectedImage = _png.read_png_int( expected )
actualImage = _png.read_png_int( actual )
+ expectedImage = expectedImage[:, :, :3]
+ actualImage = actualImage[:, :, :3]
actualImage, expectedImage = crop_to_same(actual, actualImage, expected, expectedImage)
- # compare the resulting image histogram functions
- expected_version = version.LooseVersion("1.6")
- found_version = version.LooseVersion(np.__version__)
+ # convert to signed integers, so that the images can be subtracted without
+ # overflow
+ expectedImage = expectedImage.astype(np.int16)
+ actualImage = actualImage.astype(np.int16)
rms = calculate_rms(expectedImage, actualImage)
diff_image = make_test_filename(actual, 'failed-diff')
- if ( (rms / 10000.0) <= tol ):
+ if rms <= tol:
if os.path.exists(diff_image):
os.unlink(diff_image)
return None
- # For Agg-rendered images, we can retry by ignoring pixels with
- # differences of only 1
- if extension == 'png':
- # Remove differences of only 1
- diffImage = np.abs(np.asarray(actualImage, dtype=np.int) -
- np.asarray(expectedImage, dtype=np.int))
- actualImage = np.where(diffImage <= 1, expectedImage, actualImage)
-
- rms = calculate_rms(expectedImage, actualImage)
-
- if ( (rms / 10000.0) <= tol ):
- if os.path.exists(diff_image):
- os.unlink(diff_image)
- return None
-
save_diff_image( expected, actual, diff_image )
if in_decorator:
@@ -360,7 +332,7 @@ def compare_images( expected, actual, tol, in_decorator=False ):
else:
# old-style call from mplTest directory
msg = " Error: Image files did not match.\n" \
- " RMS Value: " + str( rms / 10000.0 ) + "\n" \
+ " RMS Value: " + str( rms ) + "\n" \
" Expected:\n " + str( expected ) + "\n" \
" Actual:\n " + str( actual ) + "\n" \
" Difference:\n " + str( diff_image ) + "\n" \
View
2  lib/matplotlib/testing/decorators.py
@@ -165,7 +165,7 @@ def do_test():
yield (do_test,)
-def image_comparison(baseline_images=None, extensions=None, tol=1e-3,
+def image_comparison(baseline_images=None, extensions=None, tol=10,
freetype_version=None, remove_text=False,
savefig_kwarg=None):
"""
View
1  lib/matplotlib/tests/__init__.py
@@ -13,4 +13,3 @@ def setup():
rcParams['font.family'] = 'Bitstream Vera Sans'
rcParams['text.hinting'] = False
rcParams['text.hinting_factor'] = 8
- rcParams['text.antialiased'] = False
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/boxplot.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/canonical.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/const_xy.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/contour_colorbar.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/contour_hatching.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/errorbar_basic.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/errorbar_mixed.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/errorbar_zorder.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/fill_units.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_large_small.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/hist2d.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/hist2d_transpose.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/hist_stacked.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/hist_stacked_weights.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/imshow_clip.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/log_scales.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/markevery.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/markevery_line.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/offset_points.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_axes.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_coords.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_theta_position.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_units.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_units_2.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/scatter.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/shaped_data.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/single_date.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/single_point.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/stackplot_test_image.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/symlog.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/twin_axis_locaters_formatters.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/units_strings.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_axes/vline_hline_zorder.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/all127.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/all128.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-1px-offset.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-half-1px-offset.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-minorchange.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02-scrambled.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_compare_images/basn3p02.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axhline.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axvline.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_dates/date_empty.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_figure/figure_suptitle.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_figure/figure_today.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_image/image_clip.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_image/image_interps.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_legend/framealpha.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_legend/legend_auto1.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_legend/legend_auto2.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_legend/legend_various_labels.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_legend/scatter_rc1.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_legend/scatter_rc3.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_00.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_01.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_02.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_03.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_04.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_05.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_06.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_07.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_08.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_09.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_10.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_11.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_12.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_13.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_14.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_15.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_16.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_17.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_18.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_19.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_20.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_21.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_22.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_23.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_24.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_25.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_26.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_27.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_28.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_29.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_30.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_31.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_32.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_33.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_34.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_35.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_36.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_37.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_38.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_39.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_40.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_41.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_42.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_43.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_44.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_45.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_46.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_47.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_48.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_49.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_50.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_51.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_52.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_53.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_54.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_55.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_56.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_57.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_58.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_59.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_00.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_01.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_02.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_03.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_04.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_05.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_06.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_07.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_08.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_09.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_10.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_11.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_12.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_13.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_14.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_15.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_16.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_17.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_18.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_19.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_20.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_21.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_22.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_23.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_24.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_25.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_26.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_27.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_28.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_29.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_30.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_31.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_32.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_33.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_34.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_35.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_36.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_37.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_38.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_39.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_40.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_41.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_42.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_43.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_44.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_45.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_46.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_47.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_48.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_49.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_50.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_51.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_52.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_53.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_54.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_55.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_56.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_57.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_58.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_59.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_00.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_01.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_02.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_03.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_04.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_05.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_06.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_07.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_08.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_09.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_10.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_11.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_12.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_13.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_14.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_15.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_16.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_17.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_18.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_19.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_20.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_21.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_22.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_23.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_24.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_25.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_26.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_27.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_28.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_29.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_30.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_31.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_32.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_33.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_34.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_35.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_36.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_37.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_38.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_39.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_40.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_41.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_42.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_43.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_44.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_45.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_46.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_47.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_48.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_49.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_50.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_51.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_52.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_53.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_54.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_55.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_56.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_57.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_58.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_59.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_00.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_01.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_02.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_03.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_04.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_05.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_06.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_07.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_08.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_09.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_10.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_11.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_12.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_13.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_14.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_15.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_16.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_17.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_18.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_19.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_20.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_21.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_22.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_23.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_24.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_25.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_26.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_27.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_28.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_29.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_31.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_32.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_33.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_34.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_35.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_36.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_37.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_38.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_39.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_40.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_41.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_42.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_43.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_44.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_45.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_46.png
Diff not rendered
View
BIN  lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_47.png
Diff not rendered
Something went wrong with that request. Please try again.