33import numpy as np
44import PIL .Image
55
6- from xcube .util .tiledimage import ArrayImage
6+ from xcube .util .tiledimage import SourceArrayImage
77from xcube .util .tiledimage import ColorMappedRgbaImage
88from xcube .util .tiledimage import DirectRgbaImage
99from xcube .util .tiledimage import OpImage
10- from xcube .util .tiledimage import TransformArrayImage
10+ from xcube .util .tiledimage import NormalizeArrayImage
1111from xcube .util .tiledimage import trim_tile
1212
1313
@@ -26,7 +26,7 @@ def compute_tile(self, tile_x, tile_y, rectangle):
2626class ColorMappedRgbaImageTest (TestCase ):
2727 def test_default (self ):
2828 a = np .linspace (0 , 255 , 24 , dtype = np .int32 ).reshape ((4 , 6 ))
29- source_image = ArrayImage (a , (2 , 2 ))
29+ source_image = SourceArrayImage (a , (2 , 2 ))
3030 cm_rgb_image = ColorMappedRgbaImage (source_image , format = 'PNG' )
3131 self .assertEqual (cm_rgb_image .size , (6 , 4 ))
3232 self .assertEqual (cm_rgb_image .tile_size , (2 , 2 ))
@@ -41,9 +41,9 @@ def test_default(self):
4141 b = np .linspace (255 , 0 , 24 , dtype = np .int32 ).reshape ((4 , 6 ))
4242 c = np .linspace (50 , 200 , 24 , dtype = np .int32 ).reshape ((4 , 6 ))
4343 source_images = [
44- ArrayImage (a , (2 , 2 )),
45- ArrayImage (b , (2 , 2 )),
46- ArrayImage (c , (2 , 2 )),
44+ SourceArrayImage (a , (2 , 2 )),
45+ SourceArrayImage (b , (2 , 2 )),
46+ SourceArrayImage (c , (2 , 2 )),
4747 ]
4848 cm_rgb_image = DirectRgbaImage (source_images , format = 'PNG' )
4949 self .assertEqual (cm_rgb_image .size , (6 , 4 ))
@@ -53,11 +53,11 @@ def test_default(self):
5353 self .assertIsInstance (tile , PIL .Image .Image )
5454
5555
56- class TransformArrayImageTest (TestCase ):
56+ class NormalizeArrayImageTest (TestCase ):
5757 def test_default (self ):
5858 a = np .arange (0 , 24 , dtype = np .int32 ).reshape ((4 , 6 ))
59- source_image = ArrayImage (a , (2 , 2 ))
60- target_image = TransformArrayImage (source_image )
59+ source_image = SourceArrayImage (a , (2 , 2 ))
60+ target_image = NormalizeArrayImage (source_image )
6161
6262 self .assertEqual (target_image .size , (6 , 4 ))
6363 self .assertEqual (target_image .tile_size , (2 , 2 ))
@@ -77,37 +77,86 @@ def test_default(self):
7777 self .assertEqual (target_image .get_tile (2 , 1 ).tolist (), [[16 , 17 ],
7878 [22 , 23 ]])
7979
80- def test_flip_y (self ):
81- a = np .arange (0 , 24 , dtype = np .int32 ).reshape ((4 , 6 ))
82- source_image = ArrayImage ( a , (2 , 2 ))
83- target_image = TransformArrayImage (source_image , flip_y = True )
80+ def test_force_2d (self ):
81+ a = np .arange (0 , 48 , dtype = np .int32 ).reshape ((2 , 4 , 6 ))
82+ source_image = SourceArrayImage ( a [ 0 ] , (2 , 2 ))
83+ target_image = NormalizeArrayImage (source_image , force_2d = True )
8484
8585 self .assertEqual (target_image .size , (6 , 4 ))
8686 self .assertEqual (target_image .tile_size , (2 , 2 ))
8787 self .assertEqual (target_image .num_tiles , (3 , 2 ))
8888
89- self .assertEqual (target_image .get_tile (0 , 0 ).tolist (), [[18 , 19 ],
90- [12 , 13 ]])
91- self .assertEqual (target_image .get_tile (1 , 0 ).tolist (), [[20 , 21 ],
92- [14 , 15 ]])
93- self .assertEqual (target_image .get_tile (2 , 0 ).tolist (), [[22 , 23 ],
94- [16 , 17 ]])
9589
96- self .assertEqual (target_image .get_tile (0 , 1 ).tolist (), [[6 , 7 ],
97- [0 , 1 ]])
98- self .assertEqual (target_image .get_tile (1 , 1 ).tolist (), [[8 , 9 ],
99- [2 , 3 ]])
100- self .assertEqual (target_image .get_tile (2 , 1 ).tolist (), [[10 , 11 ],
101- [4 , 5 ]])
102-
103- def test_force_2d (self ):
104- a = np .arange (0 , 48 , dtype = np .int32 ).reshape ((2 , 4 , 6 ))
105- source_image = ArrayImage (a [0 ], (2 , 2 ))
106- target_image = TransformArrayImage (source_image , force_2d = True )
90+ class SourceArrayImageTest (TestCase ):
10791
108- self .assertEqual (target_image .size , (6 , 4 ))
109- self .assertEqual (target_image .tile_size , (2 , 2 ))
110- self .assertEqual (target_image .num_tiles , (3 , 2 ))
92+ def test_flip_y_tiled_evenly (self ):
93+ a = np .arange (0 , 24 , dtype = np .int32 ).reshape ((4 , 6 ))
94+ source_array_image = SourceArrayImage (a , (2 , 2 ), flip_y = True )
95+
96+ self .assertEqual (source_array_image .size , (6 , 4 ))
97+ self .assertEqual (source_array_image .tile_size , (2 , 2 ))
98+ self .assertEqual (source_array_image .num_tiles , (3 , 2 ))
99+
100+ self .assertEqual (source_array_image .get_tile (0 , 0 ).tolist (),
101+ [[18 , 19 ],
102+ [12 , 13 ]])
103+ self .assertEqual (source_array_image .get_tile (1 , 0 ).tolist (),
104+ [[20 , 21 ],
105+ [14 , 15 ]])
106+ self .assertEqual (source_array_image .get_tile (2 , 0 ).tolist (),
107+ [[22 , 23 ],
108+ [16 , 17 ]])
109+
110+ self .assertEqual (source_array_image .get_tile (0 , 1 ).tolist (),
111+ [[6 , 7 ],
112+ [0 , 1 ]])
113+ self .assertEqual (source_array_image .get_tile (1 , 1 ).tolist (),
114+ [[8 , 9 ],
115+ [2 , 3 ]])
116+ self .assertEqual (source_array_image .get_tile (2 , 1 ).tolist (),
117+ [[10 , 11 ],
118+ [4 , 5 ]])
119+
120+ def test_flip_y_not_tiled_evenly (self ):
121+ a = np .arange (0 , 30 , dtype = np .int32 ).reshape ((5 , 6 ))
122+ source_array_image = SourceArrayImage (a , (2 , 2 ), flip_y = True )
123+
124+ self .assertEqual (source_array_image .size , (6 , 5 ))
125+ self .assertEqual (source_array_image .tile_size , (2 , 2 ))
126+ self .assertEqual (source_array_image .num_tiles , (3 , 3 ))
127+
128+ self .assertEqual (source_array_image .get_tile (0 , 0 ).tolist (),
129+ [[24 , 25 ],
130+ [18 , 19 ]])
131+ self .assertEqual (source_array_image .get_tile (1 , 0 ).tolist (),
132+ [[26 , 27 ],
133+ [20 , 21 ]])
134+ self .assertEqual (source_array_image .get_tile (2 , 0 ).tolist (),
135+ [[28 , 29 ],
136+ [22 , 23 ]])
137+
138+ self .assertEqual (source_array_image .get_tile (0 , 1 ).tolist (),
139+ [[12 , 13 ],
140+ [6 , 7 ]])
141+ self .assertEqual (source_array_image .get_tile (1 , 1 ).tolist (),
142+ [[14 , 15 ],
143+ [8 , 9 ]])
144+ self .assertEqual (source_array_image .get_tile (2 , 1 ).tolist (),
145+ [[16 , 17 ],
146+ [10 , 11 ]])
147+
148+ tile_0_2 = source_array_image .get_tile (0 , 2 ).tolist ()
149+ self .assertEqual (tile_0_2 [0 ], [0 , 1 ])
150+ self .assertTrue (np .isnan (tile_0_2 [1 ][0 ]))
151+ self .assertTrue (np .isnan (tile_0_2 [1 ][1 ]))
152+ tile_1_2 = source_array_image .get_tile (1 , 2 ).tolist ()
153+ self .assertEqual (tile_1_2 [0 ], [2 , 3 ])
154+ self .assertTrue (tile_1_2 [1 ][0 ])
155+ self .assertTrue (tile_1_2 [1 ][1 ])
156+ tile_2_2 = source_array_image .get_tile (2 , 2 ).tolist ()
157+ self .assertEqual (tile_2_2 [0 ], [4 , 5 ])
158+ self .assertTrue (tile_2_2 [1 ][0 ])
159+ self .assertTrue (tile_2_2 [1 ][1 ])
111160
112161
113162class TrimTileTest (TestCase ):
0 commit comments