9
9
import urllib .request
10
10
11
11
import numpy as np
12
- from numpy .testing import assert_array_equal
12
+ from numpy .testing import assert_allclose , assert_array_equal
13
13
from PIL import Image
14
14
15
15
import matplotlib as mpl
18
18
from matplotlib .image import (AxesImage , BboxImage , FigureImage ,
19
19
NonUniformImage , PcolorImage )
20
20
from matplotlib .testing .decorators import check_figures_equal , image_comparison
21
- from matplotlib .transforms import Bbox , Affine2D , TransformedBbox
21
+ from matplotlib .transforms import Bbox , Affine2D , Transform , TransformedBbox
22
22
import matplotlib .ticker as mticker
23
23
24
24
import pytest
@@ -1641,6 +1641,41 @@ def test__resample_valid_output():
1641
1641
resample (np .zeros ((9 , 9 )), out )
1642
1642
1643
1643
1644
+ @pytest .mark .parametrize ("data, interpolation, expected" ,
1645
+ [(np .array ([[0.1 , 0.3 , 0.2 ]]), mimage .NEAREST ,
1646
+ np .array ([[0.1 , 0.1 , 0.1 , 0.3 , 0.3 , 0.3 , 0.3 , 0.2 , 0.2 , 0.2 ]])),
1647
+ (np .array ([[0.1 , 0.3 , 0.2 ]]), mimage .BILINEAR ,
1648
+ np .array ([[0.1 , 0.1 , 0.15078125 , 0.21096191 , 0.27033691 ,
1649
+ 0.28476562 , 0.2546875 , 0.22460938 , 0.20002441 , 0.20002441 ]])),
1650
+ ]
1651
+ )
1652
+ def test__resample_nonaffine (data , interpolation , expected ):
1653
+ # Test that equivalent affine and nonaffine transforms resample the same
1654
+
1655
+ # Create a simple affine transform for scaling the input array
1656
+ affine_transform = Affine2D ().scale (sx = expected .shape [1 ] / data .shape [1 ], sy = 1 )
1657
+
1658
+ affine_result = np .empty_like (expected )
1659
+ mpl ._image .resample (data , affine_result , affine_transform ,
1660
+ interpolation = interpolation )
1661
+ assert_allclose (affine_result , expected )
1662
+
1663
+ # Create a nonaffine version of the same transform
1664
+ # by compositing with a nonaffine identity transform
1665
+ class NonAffineIdentityTransform (Transform ):
1666
+ input_dims = 2
1667
+ output_dims = 2
1668
+
1669
+ def inverted (self ):
1670
+ return self
1671
+ nonaffine_transform = NonAffineIdentityTransform () + affine_transform
1672
+
1673
+ nonaffine_result = np .empty_like (expected )
1674
+ mpl ._image .resample (data , nonaffine_result , nonaffine_transform ,
1675
+ interpolation = interpolation )
1676
+ assert_allclose (nonaffine_result , expected , atol = 5e-3 )
1677
+
1678
+
1644
1679
def test_axesimage_get_shape ():
1645
1680
# generate dummy image to test get_shape method
1646
1681
ax = plt .gca ()
0 commit comments