unittests_temporal_algebra.py 18 KB

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