4
4
import numpy as np
5
5
6
6
7
- from tiling import ConstStrideTiles
7
+ from tiling import ConstStrideTiles , ceil_int
8
+
9
+
10
+ DEBUG_MODE = False
8
11
9
12
10
13
class TestConstStrideTiles (unittest .TestCase ):
@@ -38,6 +41,12 @@ def test_wrong_args(self):
38
41
with self .assertRaises (AssertionError ):
39
42
ConstStrideTiles ((100 , 120 ), (10 , 10 ), stride = (10 , - 10 ))
40
43
44
+ def test_wrong_index (self ):
45
+
46
+ with self .assertRaises (IndexError ):
47
+ tiles = ConstStrideTiles ((100 , 120 ), (10 , 10 ), stride = (5 , 5 ))
48
+ tiles [10000 ]
49
+
41
50
def test_with_nodata (self ):
42
51
43
52
def _test (im_size , ts , scale , stride , origin ):
@@ -54,7 +63,7 @@ def _test(im_size, ts, scale, stride, origin):
54
63
55
64
debug_msg += "n={}\n " .format (len (tiles ))
56
65
self .assertGreater (len (tiles ), 0 , debug_msg )
57
- self .assertLess (np .sqrt (len (tiles )), 1 + (im_size - origin ) * 1.0 / stride , debug_msg )
66
+ self .assertLess (np .sqrt (len (tiles )), 1 + (im_size - origin ) * 1.0 / tiles . stride [ 0 ] , debug_msg )
58
67
59
68
extent0 , out_size0 = tiles [0 ]
60
69
# Start at origin
@@ -71,9 +80,9 @@ def _test(im_size, ts, scale, stride, origin):
71
80
self .assertEqual (d , (extent [2 ], extent [3 ]), debug_msg )
72
81
# Check if constant stride
73
82
if extent [0 ] - prev_extent [0 ] > 0 :
74
- self .assertEqual (stride , extent [0 ] - prev_extent [0 ], debug_msg )
83
+ self .assertEqual (tiles . stride [ 0 ] , extent [0 ] - prev_extent [0 ], debug_msg )
75
84
if extent [1 ] - prev_extent [1 ] > 0 :
76
- self .assertEqual (stride , extent [1 ] - prev_extent [1 ], debug_msg )
85
+ self .assertEqual (tiles . stride [ 1 ] , extent [1 ] - prev_extent [1 ], debug_msg )
77
86
else :
78
87
self .assertEqual (0 , extent [1 ] - prev_extent [1 ], debug_msg )
79
88
@@ -85,15 +94,25 @@ def _test(im_size, ts, scale, stride, origin):
85
94
debug_msg += "extent={}, out_size={}\n " .format (extent , _ )
86
95
self .assertLess (extent [0 ], im_size , debug_msg )
87
96
self .assertLess (extent [1 ], im_size , debug_msg )
88
- self .assertGreaterEqual (extent [0 ] + max (extent [2 ], stride ), im_size , debug_msg )
89
- self .assertGreaterEqual (extent [1 ] + max (extent [3 ], stride ), im_size , debug_msg )
90
-
91
- for scale in [0.7 , 0.89 , 0.99 , 1.0 , 1.78 , 2.12 ]:
92
- for im_size in range (100 , 120 ):
93
- for ext in range (32 , int (im_size * scale ) - 1 , 3 ):
94
- for stride in range (ext // 2 , ext + 10 , 3 ):
95
- for origin in range (- 5 , 5 ):
96
- _test (im_size , ext , scale , stride , origin )
97
+ self .assertGreaterEqual (extent [0 ] + max (extent [2 ], tiles .stride [0 ]), im_size , debug_msg )
98
+ self .assertGreaterEqual (extent [1 ] + max (extent [3 ], tiles .stride [1 ]), im_size , debug_msg )
99
+
100
+ if not DEBUG_MODE :
101
+ for scale in [0.7 , 0.89 , 0.99 , 1.0 , 1.78 , 2.12 ]:
102
+ for im_size in range (100 , 120 ):
103
+ for ext in range (32 , int (im_size * scale ) - 1 , 3 ):
104
+ for stride in range (int (ext * scale ) // 2 , int (ext * scale ) + 10 , 5 ):
105
+ for origin in range (- 5 , 5 ):
106
+ _test (im_size , ext , scale , stride , origin )
107
+
108
+ def test_as_iterator (self ):
109
+ tiles = ConstStrideTiles ((100 , 120 ), (10 , 10 ), stride = (5 , 5 ))
110
+ counter = 0
111
+ for extent , out_size in tiles :
112
+ _extent , _out_size = tiles [counter ]
113
+ self .assertEqual (extent , _extent )
114
+ self .assertEqual (out_size , _out_size )
115
+ counter += 1
97
116
98
117
def test_without_nodata (self ):
99
118
@@ -111,7 +130,7 @@ def _test(im_size, ts, scale, stride, origin):
111
130
112
131
debug_msg += "n={}\n " .format (len (tiles ))
113
132
self .assertGreater (len (tiles ), 0 , debug_msg )
114
- self .assertLess (np .sqrt (len (tiles )), 1 + (im_size - origin ) * 1.0 / stride , debug_msg )
133
+ self .assertLess (np .sqrt (len (tiles )), 1 + (im_size - origin ) * 1.0 / tiles . stride [ 0 ] , debug_msg )
115
134
116
135
extent0 , out_size0 = tiles [0 ]
117
136
# Start at origin but should be positive
@@ -145,7 +164,7 @@ def _test(im_size, ts, scale, stride, origin):
145
164
if prev_extent [2 ] == tiles .tile_extent [0 ]:
146
165
# Check if constant stride
147
166
if extent [0 ] - prev_extent [0 ] > 0 :
148
- self .assertEqual (stride , extent [0 ] - prev_extent [0 ],
167
+ self .assertEqual (tiles . stride [ 0 ] , extent [0 ] - prev_extent [0 ],
149
168
debug_msg + var_debug_msg )
150
169
151
170
# Check if output size is the same
@@ -154,16 +173,16 @@ def _test(im_size, ts, scale, stride, origin):
154
173
if extent [0 ] - prev_extent [0 ] > 0 :
155
174
if prev_extent [0 ] == 0 and extent [0 ] + extent [2 ] < im_size :
156
175
# Check stride between the ends of tiles
157
- self .assertEqual (stride , extent [0 ] + extent [2 ] - prev_extent [0 ] - prev_extent [2 ],
176
+ self .assertEqual (tiles . stride [ 1 ] , extent [0 ] + extent [2 ] - prev_extent [0 ] - prev_extent [2 ],
158
177
debug_msg + var_debug_msg )
159
178
elif prev_extent [0 ] > 0 and extent [0 ] + extent [2 ] == im_size :
160
179
# Check stride between the starts of tiles
161
- self .assertEqual (stride , extent [0 ] - prev_extent [0 ],
180
+ self .assertEqual (tiles . stride [ 0 ] , extent [0 ] - prev_extent [0 ],
162
181
debug_msg + var_debug_msg )
163
182
164
183
if prev_extent [3 ] == tiles .tile_extent [1 ]:
165
184
if extent [1 ] - prev_extent [1 ] > 0 :
166
- self .assertEqual (stride , extent [1 ] - prev_extent [1 ],
185
+ self .assertEqual (tiles . stride [ 1 ] , extent [1 ] - prev_extent [1 ],
167
186
debug_msg + var_debug_msg )
168
187
else :
169
188
self .assertEqual (0 , extent [1 ] - prev_extent [1 ], debug_msg + var_debug_msg )
@@ -172,33 +191,37 @@ def _test(im_size, ts, scale, stride, origin):
172
191
if extent [1 ] - prev_extent [1 ] > 0 :
173
192
if prev_extent [1 ] == 0 and extent [1 ] + extent [3 ] < im_size :
174
193
# Check stride between the ends of tiles
175
- self .assertEqual (stride , extent [1 ] + extent [3 ] - prev_extent [1 ] - prev_extent [3 ],
194
+ self .assertEqual (tiles . stride [ 1 ] , extent [1 ] + extent [3 ] - prev_extent [1 ] - prev_extent [3 ],
176
195
debug_msg + var_debug_msg )
177
196
elif prev_extent [1 ] > 0 and extent [1 ] + extent [3 ] == im_size :
178
- self .assertEqual (stride , extent [1 ] - prev_extent [1 ],
197
+ self .assertEqual (tiles . stride [ 1 ] , extent [1 ] - prev_extent [1 ],
179
198
debug_msg + var_debug_msg )
180
199
181
200
# Check the last tile ends at the boundary or out side and starts inside
182
201
extent , _ = tiles [- 1 ]
183
202
debug_msg += "extent={}, out_size={}\n " .format (extent , _ )
184
203
self .assertLess (extent [0 ], im_size , debug_msg )
185
204
self .assertLess (extent [1 ], im_size , debug_msg )
186
- if stride < tiles .tile_extent [0 ]:
205
+ if tiles . stride [ 0 ] < tiles .tile_extent [0 ]:
187
206
self .assertEqual (extent [0 ] + extent [2 ], im_size , debug_msg )
188
207
else :
189
208
self .assertLessEqual (extent [0 ] + extent [2 ], im_size , debug_msg )
190
209
191
- if stride < tiles .tile_extent [1 ]:
210
+ if tiles . stride [ 1 ] < tiles .tile_extent [1 ]:
192
211
self .assertEqual (extent [1 ] + extent [3 ], im_size , debug_msg )
193
212
else :
194
213
self .assertLessEqual (extent [1 ] + extent [3 ], im_size , debug_msg )
195
214
196
- for scale in [0.7 , 0.89 , 0.99 , 1.0 , 1.78 , 2.12 ]:
197
- for im_size in range (100 , 120 ):
198
- for ext in range (32 , int (im_size * scale ) - 1 , 3 ):
199
- for stride in range (ext // 2 , ext + 10 , 3 ):
200
- for origin in range (- 5 , 5 ):
201
- _test (im_size , ext , scale , stride , origin )
215
+ if not DEBUG_MODE :
216
+ for scale in [0.7 , 0.89 , 0.99 , 1.0 , 1.78 , 2.12 ]:
217
+ for im_size in range (100 , 120 ):
218
+ for ext in range (32 , int (im_size * scale ) - 1 , 3 ):
219
+ for stride in range (int (ext * scale ) // 2 , int (ext * scale ) + 10 , 5 ):
220
+ for origin in range (- 5 , 5 ):
221
+ _test (im_size , ext , scale , stride , origin )
222
+
223
+ def test_int_ceil (self ):
224
+ self .assertEqual (2 , ceil_int (1.789 ))
202
225
203
226
204
227
if __name__ == "__main__" :
0 commit comments