unittests_temporal_conditionals.py 18 KB

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