FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
matplotlib/lib/matplotlib/tests/test_compare_images.py at main · spha-code/matplotlib · GitHub
spha-code
matplotlib
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
matplotlib
/
lib
/
matplotlib
/
tests
/
test_compare_images.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
100 lines (88 loc) · 4.48 KB
Breadcrumbs
matplotlib
/
lib
/
matplotlib
/
tests
/
test_compare_images.py
Copy path
File metadata and controls
100 lines (88 loc) · 4.48 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from
pathlib
import
Path
import
shutil
import
numpy
as
np
import
pytest
from
pytest
import
approx
from
matplotlib
import
_image
from
matplotlib
.
testing
.
compare
import
compare_images
from
matplotlib
.
testing
.
decorators
import
_image_directories
from
matplotlib
.
testing
.
exceptions
import
ImageComparisonFailure
# Tests of the image comparison algorithm.
@
pytest
.
mark
.
parametrize
(
'im1, im2, tol, expect_rms'
,
[
# Comparison of an image and the same image with minor differences.
# This expects the images to compare equal under normal tolerance, and
# have a small RMS.
(
'basn3p02.png'
,
'basn3p02-minorchange.png'
,
10
,
None
),
# Now test with no tolerance.
(
'basn3p02.png'
,
'basn3p02-minorchange.png'
,
0
,
6.50646
),
# Comparison with an image that is shifted by 1px in the X axis.
(
'basn3p02.png'
,
'basn3p02-1px-offset.png'
,
0
,
90.15611
),
# Comparison with an image with half the pixels shifted by 1px in the X
# axis.
(
'basn3p02.png'
,
'basn3p02-half-1px-offset.png'
,
0
,
63.75
),
# 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 color component of each pixel randomly placed somewhere in the
# image. It contains exactly the same number of pixels of each color
# value of R, G and B, but in a totally different position.
# Test with no tolerance to make sure that we pick up even a very small
# RMS error.
(
'basn3p02.png'
,
'basn3p02-scrambled.png'
,
0
,
172.63582
),
# Comparison of an image and a slightly brighter image.
# The two images are solid color, with the second image being exactly 1
# color value brighter.
# This expects the images to compare equal under normal tolerance, and
# have an RMS of exactly 1.
(
'all127.png'
,
'all128.png'
,
0
,
1
),
# Now test the reverse comparison.
(
'all128.png'
,
'all127.png'
,
0
,
1
),
])
def
test_image_comparison_expect_rms
(
im1
,
im2
,
tol
,
expect_rms
,
tmp_path
,
monkeypatch
):
"""
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.
"""
# Change the working directory using monkeypatch to use a temporary
# test specific directory
monkeypatch
.
chdir
(
tmp_path
)
baseline_dir
,
result_dir
=
map
(
Path
,
_image_directories
(
lambda
:
"dummy"
))
# Copy "test" image to result_dir, so that compare_images writes
# the diff to result_dir, rather than to the source tree
result_im2
=
result_dir
/
im1
shutil
.
copyfile
(
baseline_dir
/
im2
,
result_im2
)
results
=
compare_images
(
baseline_dir
/
im1
,
result_im2
,
tol
=
tol
,
in_decorator
=
True
)
if
expect_rms
is
None
:
assert
results
is
None
else
:
assert
results
is
not
None
assert
results
[
'rms'
]
==
approx
(
expect_rms
,
abs
=
1e-4
)
def
test_invalid_input
():
img
=
np
.
zeros
((
16
,
16
,
4
),
dtype
=
np
.
uint8
)
with
pytest
.
raises
(
ImageComparisonFailure
,
match
=
'must be 3-dimensional, but is 2-dimensional'
):
_image
.
calculate_rms_and_diff
(
img
[:, :,
0
],
img
)
with
pytest
.
raises
(
ImageComparisonFailure
,
match
=
'must be 3-dimensional, but is 5-dimensional'
):
_image
.
calculate_rms_and_diff
(
img
,
img
[:, :, :,
np
.
newaxis
,
np
.
newaxis
])
with
pytest
.
raises
(
ImageComparisonFailure
,
match
=
'must be RGB or RGBA but has depth 2'
):
_image
.
calculate_rms_and_diff
(
img
[:, :, :
2
],
img
)
with
pytest
.
raises
(
ImageComparisonFailure
,
match
=
r'expected size: \(16, 16, 4\) actual size \(8, 16, 4\)'
):
_image
.
calculate_rms_and_diff
(
img
,
img
[:
8
, :, :])
with
pytest
.
raises
(
ImageComparisonFailure
,
match
=
r'expected size: \(16, 16, 4\) actual size \(16, 6, 4\)'
):
_image
.
calculate_rms_and_diff
(
img
,
img
[:, :
6
, :])
with
pytest
.
raises
(
ImageComparisonFailure
,
match
=
r'expected size: \(16, 16, 4\) actual size \(16, 16, 3\)'
):
_image
.
calculate_rms_and_diff
(
img
,
img
[:, :, :
3
])
Back
|
FazBrowse Home
|
New Git URL