unittests_temporal_conditionals.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357
  1. """
  2. (C) 2014 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: Thomas leppelt and Soeren Gebbert
  7. """
  8. import grass.script
  9. import grass.temporal as tgis
  10. import grass.gunittest
  11. import datetime
  12. import os
  13. class TestTemporalConditionals(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="e1 = 11")
  33. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="e2 = 12")
  34. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="e3 = 13")
  35. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99")
  36. tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
  37. title="A", descr="A", semantic="field", overwrite=True)
  38. tgis.open_new_stds(name="B", type="strds", temporaltype="absolute",
  39. title="B", descr="B", semantic="field", overwrite=True)
  40. tgis.open_new_stds(name="C", type="strds", temporaltype="absolute",
  41. title="C", descr="C", semantic="field", overwrite=True)
  42. tgis.open_new_stds(name="D", type="strds", temporaltype="absolute",
  43. title="D", descr="D", semantic="field", overwrite=True)
  44. tgis.open_new_stds(name="E", type="strds", temporaltype="absolute",
  45. title="E", descr="E", semantic="field", overwrite=True)
  46. tgis.register_maps_in_space_time_dataset(type="raster", name="A", maps="a1,a2,a3,a4",
  47. start="2001-01-01", increment="1 day", interval=True)
  48. tgis.register_maps_in_space_time_dataset(type="raster", name="B", maps="b1,b2",
  49. start="2001-01-01", increment="2 day", interval=True)
  50. tgis.register_maps_in_space_time_dataset(type="raster", name="C", maps="c1",
  51. start="2001-01-02", increment="2 day", interval=True)
  52. tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
  53. start="2001-01-03", increment="1 day", interval=True)
  54. tgis.register_maps_in_space_time_dataset(type="raster", name="E", maps="e1,e2,e3",
  55. start="2000-12-31", increment="2 day", interval=True)
  56. tgis.register_maps_in_space_time_dataset(type="raster", name=None, maps="singletmap",
  57. start="2001-01-03", end="2001-01-04", interval=True)
  58. def tearDown(self):
  59. self.runModule("t.remove", inputs="R", quiet=True)
  60. @classmethod
  61. def tearDownClass(cls):
  62. """Remove the temporary region
  63. """
  64. cls.runModule("t.remove", flags="rf", inputs="A,B,C,D,E", quiet=True)
  65. cls.del_temp_region()
  66. def test_temporal_condition_1(self):
  67. """Testing the temporal select operator with equal relations. """
  68. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  69. ta.parse(expression='R = if(start_date(A) >= "2001-01-03", A)', basename="r", overwrite=True)
  70. D = tgis.open_old_stds("R", type="strds")
  71. D.select()
  72. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  73. self.assertEqual(D.metadata.get_min_min(), 3)
  74. self.assertEqual(D.metadata.get_max_max(), 4)
  75. start, end = D.get_absolute_time()
  76. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  77. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  78. self.assertEqual( D.check_temporal_topology(), True)
  79. self.assertEqual(D.get_granularity(), u'1 day')
  80. def test_temporal_condition_2(self):
  81. """Testing the temporal select operator with equal relations. """
  82. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  83. ta.parse(expression='R = if(td(A) == 1, A)', basename="r", overwrite=True)
  84. D = tgis.open_old_stds("R", type="strds")
  85. D.select()
  86. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  87. self.assertEqual(D.metadata.get_min_min(), 1)
  88. self.assertEqual(D.metadata.get_max_max(), 4)
  89. start, end = D.get_absolute_time()
  90. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  91. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  92. self.assertEqual( D.check_temporal_topology(), True)
  93. self.assertEqual(D.get_granularity(), u'1 day')
  94. def test_temporal_condition_3(self):
  95. """Testing the temporal select operator with equal relations. """
  96. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  97. ta.parse(expression='R = if(td(A) == 1 || start_date(A) >= "2001-01-03", A)', basename="r", overwrite=True)
  98. D = tgis.open_old_stds("R", type="strds")
  99. D.select()
  100. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  101. self.assertEqual(D.metadata.get_min_min(), 1)
  102. self.assertEqual(D.metadata.get_max_max(), 4)
  103. start, end = D.get_absolute_time()
  104. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  105. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  106. self.assertEqual( D.check_temporal_topology(), True)
  107. self.assertEqual(D.get_granularity(), u'1 day')
  108. def test_temporal_condition_4(self):
  109. """Testing the temporal select operator with equal relations. """
  110. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  111. ta.parse(expression='R = if(start_date(A) >= "2001-01-03", A)', basename="r", overwrite=True)
  112. D = tgis.open_old_stds("R", type="strds")
  113. D.select()
  114. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  115. self.assertEqual(D.metadata.get_min_min(), 3)
  116. self.assertEqual(D.metadata.get_max_max(), 4)
  117. start, end = D.get_absolute_time()
  118. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  119. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  120. self.assertEqual( D.check_temporal_topology(), True)
  121. self.assertEqual(D.get_granularity(), u'1 day')
  122. def test_temporal_condition_5(self):
  123. """Testing the temporal select operator with equal relations. """
  124. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  125. ta.parse(expression='R = if(start_day(A) <= 2, A)', basename="r", overwrite=True)
  126. D = tgis.open_old_stds("R", type="strds")
  127. D.select()
  128. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  129. self.assertEqual(D.metadata.get_min_min(), 1)
  130. self.assertEqual(D.metadata.get_max_max(), 2)
  131. start, end = D.get_absolute_time()
  132. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  133. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  134. self.assertEqual( D.check_temporal_topology(), True)
  135. self.assertEqual(D.get_granularity(), u'1 day')
  136. def test_temporal_condition_6(self):
  137. """Testing the temporal select operator with equal relations. """
  138. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  139. ta.parse(expression='R = if(td(A) == 1 {||,during} start_date(C) < "2001-01-02", A)', basename="r", overwrite=True)
  140. D = tgis.open_old_stds("R", type="strds")
  141. D.select()
  142. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  143. self.assertEqual(D.metadata.get_min_min(), 2)
  144. self.assertEqual(D.metadata.get_max_max(), 3)
  145. start, end = D.get_absolute_time()
  146. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  147. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  148. self.assertEqual( D.check_temporal_topology(), True)
  149. self.assertEqual(D.get_granularity(), u'1 day')
  150. def test_temporal_condition_7(self):
  151. """Testing the temporal select operator with equal relations. """
  152. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  153. ta.parse(expression='R = if({over},start_date(C) == "2001-01-02" {&&,contains} td(A) == 1, B)', basename="r", overwrite=True)
  154. D = tgis.open_old_stds("R", type="strds")
  155. D.select()
  156. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  157. self.assertEqual(D.metadata.get_min_min(), 5)
  158. self.assertEqual(D.metadata.get_max_max(), 6)
  159. start, end = D.get_absolute_time()
  160. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  161. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  162. self.assertEqual( D.check_temporal_topology(), True)
  163. self.assertEqual(D.get_granularity(), u'2 days')
  164. def test_temporal_condition_8(self):
  165. """Testing the temporal select operator with equal relations. """
  166. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  167. ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {||,over,|} td(E) == 2, B)', basename="r", overwrite=True)
  168. D = tgis.open_old_stds("R", type="strds")
  169. D.select()
  170. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  171. self.assertEqual(D.metadata.get_min_min(), 5)
  172. self.assertEqual(D.metadata.get_max_max(), 6)
  173. start, end = D.get_absolute_time()
  174. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  175. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  176. self.assertEqual( D.check_temporal_topology(), True)
  177. self.assertEqual(D.get_granularity(), u'2 days')
  178. def test_temporal_condition_9(self):
  179. """Testing the temporal select operator with equal relations. """
  180. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  181. ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,&} td(E) == 2, B)', basename="r", overwrite=True)
  182. D = tgis.open_old_stds("R", type="strds")
  183. D.select()
  184. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  185. self.assertEqual(D.metadata.get_min_min(), 5)
  186. self.assertEqual(D.metadata.get_max_max(), 5)
  187. start, end = D.get_absolute_time()
  188. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  189. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  190. self.assertEqual( D.check_temporal_topology(), True)
  191. self.assertEqual(D.get_granularity(), u'2 days')
  192. def test_temporal_condition_10(self):
  193. """Testing the temporal select operator with equal relations. """
  194. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  195. ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {||,over,|,r} td(E) == 2, E)', basename="r", overwrite=True)
  196. D = tgis.open_old_stds("R", type="strds")
  197. D.select()
  198. self.assertEqual(D.metadata.get_number_of_maps(), 3)
  199. self.assertEqual(D.metadata.get_min_min(), 11)
  200. self.assertEqual(D.metadata.get_max_max(), 13)
  201. start, end = D.get_absolute_time()
  202. self.assertEqual(start, datetime.datetime(2000, 12, 31))
  203. self.assertEqual(end, datetime.datetime(2001, 1, 6))
  204. self.assertEqual( D.check_temporal_topology(), True)
  205. self.assertEqual(D.get_granularity(), u'2 days')
  206. def test_temporal_condition_11(self):
  207. """Testing the temporal select operator with equal relations. """
  208. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  209. ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,r} td(E) == 2, E)', basename="r", overwrite=True)
  210. D = tgis.open_old_stds("R", type="strds")
  211. D.select()
  212. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  213. self.assertEqual(D.metadata.get_min_min(), 11)
  214. self.assertEqual(D.metadata.get_max_max(), 11)
  215. start, end = D.get_absolute_time()
  216. self.assertEqual(start, datetime.datetime(2000, 12, 31))
  217. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  218. self.assertEqual( D.check_temporal_topology(), True)
  219. self.assertEqual(D.get_granularity(), u'2 days')
  220. def test_temporal_condition_12(self):
  221. """Testing the temporal select operator with equal relations. """
  222. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  223. ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,|,r} td(E) == 2, E)', basename="r", overwrite=True)
  224. D = tgis.open_old_stds("R", type="strds")
  225. D.select()
  226. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  227. self.assertEqual(D.metadata.get_min_min(), 11)
  228. self.assertEqual(D.metadata.get_max_max(), 11)
  229. start, end = D.get_absolute_time()
  230. self.assertEqual(start, datetime.datetime(2000, 12, 31))
  231. self.assertEqual(end, datetime.datetime(2001, 1, 2))
  232. self.assertEqual( D.check_temporal_topology(), True)
  233. self.assertEqual(D.get_granularity(), u'2 days')
  234. def test_temporal_conditional_13(self):
  235. """Testing the hash operator function in conditional statement. """
  236. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  237. ta.parse(expression='R = if({equal|during},td(B) == 2 {&&,contains} td(A) == 1, A)', 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(), 4)
  242. self.assertEqual(D.metadata.get_min_min(), 1)
  243. self.assertEqual(D.metadata.get_max_max(), 4)
  244. start, end = D.get_absolute_time()
  245. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  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_condition_else_1(self):
  250. """Testing the temporal select operator with equal relations. """
  251. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  252. ta.parse(expression='R = if(start_date(A) <= "2001-01-03", A, D)', basename="r", overwrite=True)
  253. D = tgis.open_old_stds("R", type="strds")
  254. D.select()
  255. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  256. self.assertEqual(D.metadata.get_min_min(), 1)
  257. self.assertEqual(D.metadata.get_max_max(), 9)
  258. start, end = D.get_absolute_time()
  259. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  260. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  261. self.assertEqual( D.check_temporal_topology(), True)
  262. self.assertEqual(D.get_granularity(), u'1 day')
  263. def test_temporal_condition_else_2(self):
  264. """Testing the temporal select operator with equal relations. """
  265. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  266. ta.parse(expression='R = if(td(D) == 1 && start_date(A) >= "2001-01-04", A, D)', basename="r", overwrite=True)
  267. D = tgis.open_old_stds("R", type="strds")
  268. D.select()
  269. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  270. self.assertEqual(D.metadata.get_min_min(), 4)
  271. self.assertEqual(D.metadata.get_max_max(), 8)
  272. start, end = D.get_absolute_time()
  273. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  274. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  275. self.assertEqual( D.check_temporal_topology(), True)
  276. self.assertEqual(D.get_granularity(), u'1 day')
  277. def test_temporal_condition_else_3(self):
  278. """Testing the temporal select operator with equal relations. """
  279. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  280. ta.parse(expression='R = if({during},td(B) == 2 {&&,contains} start_date(D) >= "2001-01-04", A, D)', basename="r", overwrite=True)
  281. D = tgis.open_old_stds("R", type="strds")
  282. D.select()
  283. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  284. self.assertEqual(D.metadata.get_min_min(), 8)
  285. self.assertEqual(D.metadata.get_max_max(), 9)
  286. start, end = D.get_absolute_time()
  287. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  288. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  289. self.assertEqual( D.check_temporal_topology(), True)
  290. self.assertEqual(D.get_granularity(), u'1 day')
  291. def test_temporal_condition_else_4(self):
  292. """Testing the temporal select operator with equal relations. """
  293. ta = tgis.TemporalAlgebraParser(run = True, debug = True)
  294. ta.parse(expression='R = if({equal|over},start_date(B) <= "2001-01-01" {&&,over,|,r} td(E) == 2, E, B)', basename="r", overwrite=True)
  295. D = tgis.open_old_stds("R", type="strds")
  296. D.select()
  297. for map in D.get_registered_maps_as_objects():
  298. print(map.get_map_id())
  299. self.assertEqual(D.metadata.get_number_of_maps(), 3)
  300. self.assertEqual(D.metadata.get_min_min(), 5)
  301. self.assertEqual(D.metadata.get_max_max(), 11)
  302. start, end = D.get_absolute_time()
  303. self.assertEqual(start, datetime.datetime(2000, 12, 31))
  304. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  305. self.assertEqual( D.check_temporal_topology(), False)
  306. self.assertEqual(D.get_granularity(), u'2 days')
  307. if __name__ == '__main__':
  308. grass.gunittest.test()