2
(C) 2013 by the GRASS Development Team
3
This program is free software under the GNU General Public
4
License (>=v2). Read the file COPYING that comes with GRASS
7
:authors: Soeren Gebbert and Thomas Leppelt
11
import grass.temporal as tgis
12
import grass.gunittest
16
class TestTemporalAlgebra(grass.gunittest.TestCase):
20
"""Initiate the temporal GIS and set the region
22
tgis.init(True) # Raise on error instead of exit(1)
24
cls.runModule("g.region", n=80.0, s=0.0, e=120.0,
25
w=0.0, t=1.0, b=0.0, res=10.0)
27
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 1")
28
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 2")
29
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a3 = 3")
30
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
31
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
32
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
33
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="c1 = 7")
34
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d1 = 8")
35
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 9")
36
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 10")
37
cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99")
40
tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
41
title="A", descr="A", semantic="field", overwrite=True)
42
tgis.open_new_stds(name="B", type="strds", temporaltype="absolute",
43
title="B", descr="B", semantic="field", overwrite=True)
44
tgis.open_new_stds(name="C", type="strds", temporaltype="absolute",
45
title="C", descr="C", semantic="field", overwrite=True)
46
tgis.open_new_stds(name="D", type="strds", temporaltype="absolute",
47
title="D", descr="D", semantic="field", overwrite=True)
49
tgis.register_maps_in_space_time_dataset(type="raster", name="A", maps="a1,a2,a3,a4",
50
start="2001-01-01", increment="1 day", interval=True)
51
tgis.register_maps_in_space_time_dataset(type="raster", name="B", maps="b1,b2",
52
start="2001-01-01", increment="2 day", interval=True)
53
tgis.register_maps_in_space_time_dataset(type="raster", name="C", maps="c1",
54
start="2001-01-02", increment="2 day", interval=True)
55
tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
56
start="2001-01-03", increment="1 day", interval=True)
57
tgis.register_maps_in_space_time_dataset(type="raster", name=None, maps="singletmap",
58
start="2001-01-03", end="2001-01-04", interval=True)
61
self.runModule("t.remove", inputs="R", quiet=True)
64
def tearDownClass(cls):
65
"""Remove the temporary region
67
cls.runModule("t.remove", flags="rf", inputs="A,B,C,D", quiet=True)
70
def test_temporal_select1(self):
71
"""Testing the temporal select operator with equal relations. """
72
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
73
ta.parse(expression="R = A : A", stdstype = 'strds', basename="r", overwrite=True)
75
D = tgis.open_old_stds("R", type="strds")
77
self.assertEqual(D.metadata.get_number_of_maps(), 4)
78
self.assertEqual(D.metadata.get_min_min(), 1)
79
self.assertEqual(D.metadata.get_max_max(), 4)
80
start, end = D.get_absolute_time()
81
self.assertEqual(start, datetime.datetime(2001, 1, 1))
82
self.assertEqual(end, datetime.datetime(2001, 1, 5))
83
self.assertEqual( D.check_temporal_topology(), True)
84
self.assertEqual(D.get_granularity(), u'1 day')
86
def test_temporal_select2(self):
87
"""Testing the temporal select operator with equal relations. """
88
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
89
ta.parse(expression="R = A : D", stdstype = 'strds', basename="r", overwrite=True)
91
D = tgis.open_old_stds("R", type="strds")
93
self.assertEqual(D.metadata.get_number_of_maps(), 2)
94
self.assertEqual(D.metadata.get_min_min(), 3)
95
self.assertEqual(D.metadata.get_max_max(), 4)
96
start, end = D.get_absolute_time()
97
self.assertEqual(start, datetime.datetime(2001, 1, 3))
98
self.assertEqual(end, datetime.datetime(2001, 1, 5))
99
self.assertEqual( D.check_temporal_topology(), True)
100
self.assertEqual(D.get_granularity(), u'1 day')
102
def test_temporal_select3(self):
103
"""Testing the temporal select operator with equal relations. """
104
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
105
ta.parse(expression="R = A !: D", stdstype = 'strds', basename="r", overwrite=True)
107
D = tgis.open_old_stds("R", type="strds")
109
self.assertEqual(D.metadata.get_number_of_maps(), 2)
110
self.assertEqual(D.metadata.get_min_min(), 1)
111
self.assertEqual(D.metadata.get_max_max(), 2)
112
start, end = D.get_absolute_time()
113
self.assertEqual(start, datetime.datetime(2001, 1, 1))
114
self.assertEqual(end, datetime.datetime(2001, 1, 3))
115
self.assertEqual( D.check_temporal_topology(), True)
116
self.assertEqual(D.get_granularity(), u'1 day')
118
def test_temporal_select_operators1(self):
119
"""Testing the temporal select operator. Including temporal relations. """
120
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
121
ta.parse(expression="R = A {:,during} C", stdstype = 'strds', basename="r", overwrite=True)
123
D = tgis.open_old_stds("R", type="strds")
125
self.assertEqual(D.metadata.get_number_of_maps(), 2)
126
self.assertEqual(D.metadata.get_min_min(), 2)
127
self.assertEqual(D.metadata.get_max_max(), 3)
128
start, end = D.get_absolute_time()
129
self.assertEqual(start, datetime.datetime(2001, 1, 2))
130
self.assertEqual(end, datetime.datetime(2001, 1, 4))
131
self.assertEqual( D.check_temporal_topology(), True)
132
self.assertEqual(D.get_granularity(), u'1 day')
134
def test_temporal_select_operators2(self):
135
"""Testing the temporal select operator. Including temporal relations. """
136
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
137
ta.parse(expression="R = A {:,equal|during} C", stdstype = 'strds', basename="r", overwrite=True)
139
D = tgis.open_old_stds("R", type="strds")
141
self.assertEqual(D.metadata.get_number_of_maps(), 2)
142
self.assertEqual(D.metadata.get_min_min(), 2)
143
self.assertEqual(D.metadata.get_max_max(), 3)
144
start, end = D.get_absolute_time()
145
self.assertEqual(start, datetime.datetime(2001, 1, 2))
146
self.assertEqual(end, datetime.datetime(2001, 1, 4))
147
self.assertEqual( D.check_temporal_topology(), True)
148
self.assertEqual(D.get_granularity(), u'1 day')
150
def test_temporal_select_operators3(self):
151
"""Testing the temporal select operator. Including temporal relations
152
and negation operation. """
153
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
154
ta.parse(expression="R = A {!:,during} C", stdstype = 'strds', basename="r", overwrite=True)
156
D = tgis.open_old_stds("R", type="strds")
158
self.assertEqual(D.metadata.get_number_of_maps(), 2)
159
self.assertEqual(D.metadata.get_min_min(), 1)
160
self.assertEqual(D.metadata.get_max_max(), 4)
161
start, end = D.get_absolute_time()
162
self.assertEqual(start, datetime.datetime(2001, 1, 1))
163
self.assertEqual(end, datetime.datetime(2001, 1, 5))
164
self.assertEqual( D.check_temporal_topology(), True)
165
self.assertEqual(D.get_granularity(), u'1 day')
167
def test_temporal_select_operators4(self):
168
"""Testing the temporal select operator. Including temporal relations and
169
temporal operators. """
170
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
171
ta.parse(expression="R = A {:,during,d} C", stdstype = 'strds', basename="r", overwrite=True)
173
D = tgis.open_old_stds("R", type="strds")
175
maplist = D.get_registered_maps_as_objects()
176
for map_i in maplist:
177
start_map, end_map = map_i.get_absolute_time()
178
self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
179
self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
180
self.assertEqual(D.metadata.get_number_of_maps(), 2)
181
self.assertEqual(D.metadata.get_min_min(), 2)
182
self.assertEqual(D.metadata.get_max_max(), 3)
183
start, end = D.get_absolute_time()
184
self.assertEqual(start, datetime.datetime(2001, 1, 2))
185
self.assertEqual(end, datetime.datetime(2001, 1, 4))
186
self.assertEqual( D.check_temporal_topology(), False)
187
self.assertEqual(D.get_granularity(), u'2 days')
189
def test_temporal_select_operators5(self):
190
"""Testing the temporal select operator. Including temporal relations and
191
temporal operators. """
192
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
193
ta.parse(expression="R = C {:,contains} A", stdstype = 'strds', basename="r", overwrite=True)
195
D = tgis.open_old_stds("R", type="strds")
197
maplist = D.get_registered_maps_as_objects()
198
for map_i in maplist:
199
start_map, end_map = map_i.get_absolute_time()
200
self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
201
self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
202
self.assertEqual(D.metadata.get_number_of_maps(), 1)
203
self.assertEqual(D.metadata.get_min_min(), 7)
204
self.assertEqual(D.metadata.get_max_max(), 7)
205
start, end = D.get_absolute_time()
206
self.assertEqual(start, datetime.datetime(2001, 1, 2))
207
self.assertEqual(end, datetime.datetime(2001, 1, 4))
208
self.assertEqual( D.check_temporal_topology(), True)
209
self.assertEqual(D.get_granularity(), u'2 days')
211
def test_temporal_extent1(self):
212
"""Testing the temporal extent operators. """
213
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
214
ta.parse(expression="R = A {:,during,r} C", stdstype = 'strds', basename="r", overwrite=True)
216
D = tgis.open_old_stds("R", type="strds")
218
maplist = D.get_registered_maps_as_objects()
219
self.assertEqual(D.metadata.get_number_of_maps(), 2)
220
self.assertEqual(D.metadata.get_min_min(), 2)
221
self.assertEqual(D.metadata.get_max_max(), 3)
222
start, end = D.get_absolute_time()
223
self.assertEqual(start, datetime.datetime(2001, 1, 2))
224
self.assertEqual(end, datetime.datetime(2001, 1, 4))
225
self.assertEqual( D.check_temporal_topology(), False)
226
self.assertEqual(D.get_granularity(), u'2 days')
228
def test_temporal_extent2(self):
229
"""Testing the temporal extent operators. """
230
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
231
ta.parse(expression="R = A {:,during,d} C", stdstype = 'strds', basename="r", overwrite=True)
233
D = tgis.open_old_stds("R", type="strds")
235
maplist = D.get_registered_maps_as_objects()
236
self.assertEqual(D.metadata.get_number_of_maps(), 2)
237
self.assertEqual(D.metadata.get_min_min(), 2)
238
self.assertEqual(D.metadata.get_max_max(), 3)
239
start, end = D.get_absolute_time()
240
self.assertEqual(start, datetime.datetime(2001, 1, 2))
241
self.assertEqual(end, datetime.datetime(2001, 1, 4))
242
self.assertEqual( D.check_temporal_topology(), False)
243
self.assertEqual(D.get_granularity(), u'2 days')
245
def test_temporal_extent3(self):
246
"""Testing the temporal extent operators. """
247
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
248
ta.parse(expression="R = A {:,during,u} C", stdstype = 'strds', basename="r", overwrite=True)
250
D = tgis.open_old_stds("R", type="strds")
252
maplist = D.get_registered_maps_as_objects()
253
for map_i in maplist:
254
start_map, end_map = map_i.get_absolute_time()
255
self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
256
self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
257
self.assertEqual(D.metadata.get_number_of_maps(), 2)
258
self.assertEqual(D.metadata.get_min_min(), 2)
259
self.assertEqual(D.metadata.get_max_max(), 3)
260
start, end = D.get_absolute_time()
261
self.assertEqual(start, datetime.datetime(2001, 1, 2))
262
self.assertEqual(end, datetime.datetime(2001, 1, 4))
263
self.assertEqual( D.check_temporal_topology(), False)
264
self.assertEqual(D.get_granularity(), u'2 days')
266
def test_temporal_hash1(self):
267
"""Testing the hash function in conditional statement. """
268
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
269
ta.parse(expression="R = if(A # D == 1, A)", stdstype = 'strds', basename="r", overwrite=True)
271
D = tgis.open_old_stds("R", type="strds")
273
maplist = D.get_registered_maps_as_objects()
274
self.assertEqual(D.metadata.get_number_of_maps(), 2)
275
self.assertEqual(D.metadata.get_min_min(), 3)
276
self.assertEqual(D.metadata.get_max_max(), 4)
277
start, end = D.get_absolute_time()
278
self.assertEqual(start, datetime.datetime(2001, 1, 3))
279
self.assertEqual(end, datetime.datetime(2001, 1, 5))
280
self.assertEqual( D.check_temporal_topology(), True)
281
self.assertEqual(D.get_granularity(), u'1 day')
283
def test_temporal_hash_operator1(self):
284
"""Testing the hash operator function in conditional statement. """
285
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
286
ta.parse(expression="R = if(A {#,during} C == 1, A)", stdstype = 'strds',
287
basename="r", overwrite=True)
289
D = tgis.open_old_stds("R", type="strds")
291
maplist = D.get_registered_maps_as_objects()
292
self.assertEqual(D.metadata.get_number_of_maps(), 2)
293
self.assertEqual(D.metadata.get_min_min(), 2)
294
self.assertEqual(D.metadata.get_max_max(), 3)
295
start, end = D.get_absolute_time()
296
self.assertEqual(start, datetime.datetime(2001, 1, 2))
297
self.assertEqual(end, datetime.datetime(2001, 1, 4))
298
self.assertEqual( D.check_temporal_topology(), True)
299
self.assertEqual(D.get_granularity(), u'1 day')
301
def test_temporal_hash_operator2(self):
302
"""Testing the hash operator function in conditional statement. """
303
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
304
ta.parse(expression="R = if({during}, C {#,contains} A == 2, A)",
305
stdstype = 'strds', basename="r", overwrite=True)
307
D = tgis.open_old_stds("R", type="strds")
309
maplist = D.get_registered_maps_as_objects()
310
self.assertEqual(D.metadata.get_number_of_maps(), 2)
311
self.assertEqual(D.metadata.get_min_min(), 2)
312
self.assertEqual(D.metadata.get_max_max(), 3)
313
start, end = D.get_absolute_time()
314
self.assertEqual(start, datetime.datetime(2001, 1, 2))
315
self.assertEqual(end, datetime.datetime(2001, 1, 4))
316
self.assertEqual( D.check_temporal_topology(), True)
317
self.assertEqual(D.get_granularity(), u'1 day')
319
def test_tmap_function1(self):
320
"""Testing the tmap function. """
321
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
322
ta.parse(expression='R = tmap(singletmap)', stdstype = 'strds', basename="r", overwrite=True)
324
D = tgis.open_old_stds("R", type="strds")
326
maplist = D.get_registered_maps_as_objects()
327
self.assertEqual(D.metadata.get_number_of_maps(), 1)
328
self.assertEqual(D.metadata.get_min_min(), 99)
329
self.assertEqual(D.metadata.get_max_max(), 99)
330
start, end = D.get_absolute_time()
331
self.assertEqual(start, datetime.datetime(2001, 1, 3))
332
self.assertEqual(end, datetime.datetime(2001, 1, 4))
333
self.assertEqual( D.check_temporal_topology(), True)
334
self.assertEqual(D.get_granularity(), u'1 day')
336
def test_tmap_function2(self):
337
"""Testing the tmap function. """
338
ta = tgis.TemporalAlgebraParser(run = True, debug = True)
339
ta.parse(expression='R = A : tmap(singletmap)', stdstype = 'strds', basename="r", overwrite=True)
341
D = tgis.open_old_stds("R", type="strds")
343
maplist = D.get_registered_maps_as_objects()
344
self.assertEqual(D.metadata.get_number_of_maps(), 1)
345
self.assertEqual(D.metadata.get_min_min(), 3)
346
self.assertEqual(D.metadata.get_max_max(), 3)
347
start, end = D.get_absolute_time()
348
self.assertEqual(start, datetime.datetime(2001, 1, 3))
349
self.assertEqual(end, datetime.datetime(2001, 1, 4))
350
self.assertEqual( D.check_temporal_topology(), True)
351
self.assertEqual(D.get_granularity(), u'1 day')
353
if __name__ == '__main__':
354
grass.gunittest.test()