unittests_temporal_algebra.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. """
  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
  5. for details.
  6. :authors: Soeren Gebbert and Thomas Leppelt
  7. """
  8. import grass.script
  9. import grass.temporal as tgis
  10. from grass.gunittest.case import TestCase
  11. from grass.gunittest.main import test
  12. import datetime
  13. import os
  14. class TestTemporalAlgebra(TestCase):
  15. @classmethod
  16. def setUpClass(cls):
  17. """Initiate the temporal GIS and set the region
  18. """
  19. tgis.init(True) # Raise on error instead of exit(1)
  20. cls.use_temp_region()
  21. cls.runModule("g.region", n=80.0, s=0.0, e=120.0,
  22. w=0.0, t=1.0, b=0.0, res=10.0)
  23. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 1")
  24. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 2")
  25. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a3 = 3")
  26. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
  27. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
  28. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
  29. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="c1 = 7")
  30. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d1 = 8")
  31. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 9")
  32. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 10")
  33. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99")
  34. tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
  35. title="A", descr="A", semantic="field", overwrite=True)
  36. tgis.open_new_stds(name="B", type="strds", temporaltype="absolute",
  37. title="B", descr="B", semantic="field", overwrite=True)
  38. tgis.open_new_stds(name="C", type="strds", temporaltype="absolute",
  39. title="C", descr="C", semantic="field", overwrite=True)
  40. tgis.open_new_stds(name="D", type="strds", temporaltype="absolute",
  41. title="D", descr="D", semantic="field", overwrite=True)
  42. tgis.register_maps_in_space_time_dataset(type="raster", name="A", maps="a1,a2,a3,a4",
  43. start="2001-01-01", increment="1 day", interval=True)
  44. tgis.register_maps_in_space_time_dataset(type="raster", name="B", maps="b1,b2",
  45. start="2001-01-01", increment="2 day", interval=True)
  46. tgis.register_maps_in_space_time_dataset(type="raster", name="C", maps="c1",
  47. start="2001-01-02", increment="2 day", interval=True)
  48. tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
  49. start="2001-01-03", increment="1 day", interval=True)
  50. tgis.register_maps_in_space_time_dataset(type="raster", name=None, maps="singletmap",
  51. start="2001-01-03", end="2001-01-04")
  52. def tearDown(self):
  53. self.runModule("t.remove", inputs="R", quiet=True)
  54. @classmethod
  55. def tearDownClass(cls):
  56. """Remove the temporary region
  57. """
  58. cls.runModule("t.remove", flags="rf", inputs="A,B,C,D", quiet=True)
  59. cls.del_temp_region()
  60. def test_temporal_select1(self):
  61. """Testing the temporal select operator with equal relations. """
  62. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  63. ta.parse(expression="R = A : A", stdstype = 'strds', basename="r", overwrite=True)
  64. D = tgis.open_old_stds("R", type="strds")
  65. D.select()
  66. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  67. self.assertEqual(D.metadata.get_min_min(), 1)
  68. self.assertEqual(D.metadata.get_max_max(), 4)
  69. start, end = D.get_absolute_time()
  70. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  71. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  72. self.assertEqual( D.check_temporal_topology(), True)
  73. self.assertEqual(D.get_granularity(), u'1 day')
  74. def test_temporal_select2(self):
  75. """Testing the temporal select operator with equal relations. """
  76. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  77. ta.parse(expression="R = A : D", stdstype = 'strds', basename="r", overwrite=True)
  78. D = tgis.open_old_stds("R", type="strds")
  79. D.select()
  80. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  81. self.assertEqual(D.metadata.get_min_min(), 3)
  82. self.assertEqual(D.metadata.get_max_max(), 4)
  83. start, end = D.get_absolute_time()
  84. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  85. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  86. self.assertEqual( D.check_temporal_topology(), True)
  87. self.assertEqual(D.get_granularity(), u'1 day')
  88. def test_temporal_select3(self):
  89. """Testing the temporal select operator with equal relations. """
  90. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  91. ta.parse(expression="R = A !: D", stdstype = 'strds', basename="r", overwrite=True)
  92. D = tgis.open_old_stds("R", type="strds")
  93. D.select()
  94. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  95. self.assertEqual(D.metadata.get_min_min(), 1)
  96. self.assertEqual(D.metadata.get_max_max(), 2)
  97. start, end = D.get_absolute_time()
  98. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  99. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  100. self.assertEqual( D.check_temporal_topology(), True)
  101. self.assertEqual(D.get_granularity(), u'1 day')
  102. def test_temporal_select_operators1(self):
  103. """Testing the temporal select operator. Including temporal relations. """
  104. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  105. ta.parse(expression="R = A {:,during} C", stdstype = 'strds', basename="r", overwrite=True)
  106. D = tgis.open_old_stds("R", type="strds")
  107. D.select()
  108. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  109. self.assertEqual(D.metadata.get_min_min(), 2)
  110. self.assertEqual(D.metadata.get_max_max(), 3)
  111. start, end = D.get_absolute_time()
  112. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  113. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  114. self.assertEqual( D.check_temporal_topology(), True)
  115. self.assertEqual(D.get_granularity(), u'1 day')
  116. def test_temporal_select_operators2(self):
  117. """Testing the temporal select operator. Including temporal relations. """
  118. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  119. ta.parse(expression="R = A {:,equal|during} C", stdstype = 'strds', basename="r", overwrite=True)
  120. D = tgis.open_old_stds("R", type="strds")
  121. D.select()
  122. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  123. self.assertEqual(D.metadata.get_min_min(), 2)
  124. self.assertEqual(D.metadata.get_max_max(), 3)
  125. start, end = D.get_absolute_time()
  126. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  127. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  128. self.assertEqual( D.check_temporal_topology(), True)
  129. self.assertEqual(D.get_granularity(), u'1 day')
  130. def test_temporal_select_operators3(self):
  131. """Testing the temporal select operator. Including temporal relations
  132. and negation operation. """
  133. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  134. ta.parse(expression="R = A {!:,during} C", stdstype = 'strds', basename="r", overwrite=True)
  135. D = tgis.open_old_stds("R", type="strds")
  136. D.select()
  137. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  138. self.assertEqual(D.metadata.get_min_min(), 1)
  139. self.assertEqual(D.metadata.get_max_max(), 4)
  140. start, end = D.get_absolute_time()
  141. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  142. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  143. self.assertEqual( D.check_temporal_topology(), True)
  144. self.assertEqual(D.get_granularity(), u'1 day')
  145. def test_temporal_select_operators4(self):
  146. """Testing the temporal select operator. Including temporal relations and
  147. temporal operators. """
  148. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  149. ta.parse(expression="R = A {:,during,d} C", stdstype = 'strds', basename="r", overwrite=True)
  150. D = tgis.open_old_stds("R", type="strds")
  151. D.select()
  152. maplist = D.get_registered_maps_as_objects()
  153. for map_i in maplist:
  154. start_map, end_map = map_i.get_absolute_time()
  155. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  156. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  157. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  158. self.assertEqual(D.metadata.get_min_min(), 2)
  159. self.assertEqual(D.metadata.get_max_max(), 3)
  160. start, end = D.get_absolute_time()
  161. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  162. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  163. self.assertEqual( D.check_temporal_topology(), False)
  164. self.assertEqual(D.get_granularity(), u'2 days')
  165. def test_temporal_select_operators5(self):
  166. """Testing the temporal select operator. Including temporal relations and
  167. temporal operators. """
  168. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  169. ta.parse(expression="R = C {:,contains} A", stdstype = 'strds', basename="r", overwrite=True)
  170. D = tgis.open_old_stds("R", type="strds")
  171. D.select()
  172. maplist = D.get_registered_maps_as_objects()
  173. for map_i in maplist:
  174. start_map, end_map = map_i.get_absolute_time()
  175. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  176. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  177. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  178. self.assertEqual(D.metadata.get_min_min(), 7)
  179. self.assertEqual(D.metadata.get_max_max(), 7)
  180. start, end = D.get_absolute_time()
  181. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  182. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  183. self.assertEqual( D.check_temporal_topology(), True)
  184. self.assertEqual(D.get_granularity(), u'2 days')
  185. def test_temporal_extent1(self):
  186. """Testing the temporal extent operators. """
  187. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  188. ta.parse(expression="R = A {:,during,r} C", stdstype = 'strds', basename="r", overwrite=True)
  189. D = tgis.open_old_stds("R", type="strds")
  190. D.select()
  191. maplist = D.get_registered_maps_as_objects()
  192. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  193. self.assertEqual(D.metadata.get_min_min(), 2)
  194. self.assertEqual(D.metadata.get_max_max(), 3)
  195. start, end = D.get_absolute_time()
  196. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  197. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  198. self.assertEqual( D.check_temporal_topology(), False)
  199. self.assertEqual(D.get_granularity(), u'2 days')
  200. def test_temporal_extent2(self):
  201. """Testing the temporal extent operators. """
  202. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  203. ta.parse(expression="R = A {:,during,d} C", stdstype = 'strds', basename="r", overwrite=True)
  204. D = tgis.open_old_stds("R", type="strds")
  205. D.select()
  206. maplist = D.get_registered_maps_as_objects()
  207. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  208. self.assertEqual(D.metadata.get_min_min(), 2)
  209. self.assertEqual(D.metadata.get_max_max(), 3)
  210. start, end = D.get_absolute_time()
  211. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  212. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  213. self.assertEqual( D.check_temporal_topology(), False)
  214. self.assertEqual(D.get_granularity(), u'2 days')
  215. def test_temporal_extent3(self):
  216. """Testing the temporal extent operators. """
  217. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  218. ta.parse(expression="R = A {:,during,u} C", stdstype = 'strds', basename="r", overwrite=True)
  219. D = tgis.open_old_stds("R", type="strds")
  220. D.select()
  221. maplist = D.get_registered_maps_as_objects()
  222. for map_i in maplist:
  223. start_map, end_map = map_i.get_absolute_time()
  224. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  225. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  226. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  227. self.assertEqual(D.metadata.get_min_min(), 2)
  228. self.assertEqual(D.metadata.get_max_max(), 3)
  229. start, end = D.get_absolute_time()
  230. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  231. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  232. self.assertEqual( D.check_temporal_topology(), False)
  233. self.assertEqual(D.get_granularity(), u'2 days')
  234. def test_temporal_hash1(self):
  235. """Testing the hash function in conditional statement. """
  236. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  237. ta.parse(expression="R = if(A # D == 1, A)", stdstype = 'strds', basename="r", overwrite=True)
  238. D = tgis.open_old_stds("R", type="strds")
  239. D.select()
  240. maplist = D.get_registered_maps_as_objects()
  241. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  242. self.assertEqual(D.metadata.get_min_min(), 3)
  243. self.assertEqual(D.metadata.get_max_max(), 4)
  244. start, end = D.get_absolute_time()
  245. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  246. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  247. self.assertEqual( D.check_temporal_topology(), True)
  248. self.assertEqual(D.get_granularity(), u'1 day')
  249. def test_temporal_hash_operator1(self):
  250. """Testing the hash operator function in conditional statement. """
  251. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  252. ta.parse(expression="R = if(A {#,during} C == 1, A)", stdstype = 'strds',
  253. basename="r", overwrite=True)
  254. D = tgis.open_old_stds("R", type="strds")
  255. D.select()
  256. maplist = D.get_registered_maps_as_objects()
  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(), True)
  264. self.assertEqual(D.get_granularity(), u'1 day')
  265. def test_temporal_hash_operator2(self):
  266. """Testing the hash operator function in conditional statement. """
  267. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  268. ta.parse(expression="R = if({during}, C {#,contains} A == 2, A)",
  269. stdstype = 'strds', basename="r", overwrite=True)
  270. D = tgis.open_old_stds("R", type="strds")
  271. D.select()
  272. maplist = D.get_registered_maps_as_objects()
  273. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  274. self.assertEqual(D.metadata.get_min_min(), 2)
  275. self.assertEqual(D.metadata.get_max_max(), 3)
  276. start, end = D.get_absolute_time()
  277. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  278. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  279. self.assertEqual( D.check_temporal_topology(), True)
  280. self.assertEqual(D.get_granularity(), u'1 day')
  281. def test_tmap_function1(self):
  282. """Testing the tmap function. """
  283. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  284. ta.parse(expression='R = tmap(singletmap)', stdstype = 'strds', basename="r", overwrite=True)
  285. D = tgis.open_old_stds("R", type="strds")
  286. D.select()
  287. maplist = D.get_registered_maps_as_objects()
  288. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  289. self.assertEqual(D.metadata.get_min_min(), 99)
  290. self.assertEqual(D.metadata.get_max_max(), 99)
  291. start, end = D.get_absolute_time()
  292. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  293. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  294. self.assertEqual( D.check_temporal_topology(), True)
  295. self.assertEqual(D.get_granularity(), u'1 day')
  296. def test_tmap_function2(self):
  297. """Testing the tmap function. """
  298. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  299. ta.parse(expression='R = A : tmap(singletmap)', stdstype = 'strds', basename="r", overwrite=True)
  300. D = tgis.open_old_stds("R", type="strds")
  301. D.select()
  302. maplist = D.get_registered_maps_as_objects()
  303. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  304. self.assertEqual(D.metadata.get_min_min(), 3)
  305. self.assertEqual(D.metadata.get_max_max(), 3)
  306. start, end = D.get_absolute_time()
  307. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  308. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  309. self.assertEqual( D.check_temporal_topology(), True)
  310. self.assertEqual(D.get_granularity(), u'1 day')
  311. def test_merge_function1(self):
  312. """Testing the merge function. """
  313. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  314. ta.parse(expression='R = merge(A,D)', stdstype = 'strds', basename="r", overwrite=True)
  315. D = tgis.open_old_stds("R", type="strds")
  316. D.select()
  317. maplist = D.get_registered_maps_as_objects()
  318. self.assertEqual(D.metadata.get_number_of_maps(), 7)
  319. self.assertEqual(D.metadata.get_min_min(), 1)
  320. self.assertEqual(D.metadata.get_max_max(), 10)
  321. start, end = D.get_absolute_time()
  322. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  323. self.assertEqual(end, datetime.datetime(2001, 1, 6))
  324. self.assertEqual( D.check_temporal_topology(), False)
  325. self.assertEqual(D.get_granularity(), u'1 day')
  326. def test_merge_function2(self):
  327. """Testing the merge function. """
  328. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  329. ta.parse(expression='R = merge(A, B {!:,contains} A)', stdstype = 'strds', basename="r", overwrite=True)
  330. D = tgis.open_old_stds("R", type="strds")
  331. D.select()
  332. maplist = D.get_registered_maps_as_objects()
  333. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  334. self.assertEqual(D.metadata.get_min_min(), 1)
  335. self.assertEqual(D.metadata.get_max_max(), 4)
  336. start, end = D.get_absolute_time()
  337. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  338. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  339. self.assertEqual( D.check_temporal_topology(), True)
  340. self.assertEqual(D.get_granularity(), u'1 day')
  341. if __name__ == '__main__':
  342. test()