unittests_temporal_algebra.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  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. self.assertTrue(D.is_in_db())
  66. D.select()
  67. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  68. self.assertEqual(D.metadata.get_min_min(), 1)
  69. self.assertEqual(D.metadata.get_max_max(), 4)
  70. start, end = D.get_absolute_time()
  71. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  72. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  73. self.assertEqual( D.check_temporal_topology(), True)
  74. self.assertEqual(D.get_granularity(), u'1 day')
  75. def test_temporal_select2(self):
  76. """Testing the temporal select operator with equal relations. """
  77. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  78. ta.parse(expression="R = A : D", stdstype = 'strds', basename="r", overwrite=True)
  79. D = tgis.open_old_stds("R", type="strds")
  80. self.assertTrue(D.is_in_db())
  81. D.select()
  82. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  83. self.assertEqual(D.metadata.get_min_min(), 3)
  84. self.assertEqual(D.metadata.get_max_max(), 4)
  85. start, end = D.get_absolute_time()
  86. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  87. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  88. self.assertEqual( D.check_temporal_topology(), True)
  89. self.assertEqual(D.get_granularity(), u'1 day')
  90. def test_temporal_select3(self):
  91. """Testing the temporal select operator with equal relations. """
  92. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  93. ta.parse(expression="R = A !: D", stdstype = 'strds', basename="r", overwrite=True)
  94. D = tgis.open_old_stds("R", type="strds")
  95. self.assertTrue(D.is_in_db())
  96. D.select()
  97. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  98. self.assertEqual(D.metadata.get_min_min(), 1)
  99. self.assertEqual(D.metadata.get_max_max(), 2)
  100. start, end = D.get_absolute_time()
  101. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  102. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  103. self.assertEqual( D.check_temporal_topology(), True)
  104. self.assertEqual(D.get_granularity(), u'1 day')
  105. def test_temporal_select_operators1(self):
  106. """Testing the temporal select operator. Including temporal relations. """
  107. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  108. ta.parse(expression="R = A {:,during} C", stdstype = 'strds', basename="r", overwrite=True)
  109. D = tgis.open_old_stds("R", type="strds")
  110. self.assertTrue(D.is_in_db())
  111. D.select()
  112. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  113. self.assertEqual(D.metadata.get_min_min(), 2)
  114. self.assertEqual(D.metadata.get_max_max(), 3)
  115. start, end = D.get_absolute_time()
  116. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  117. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  118. self.assertEqual( D.check_temporal_topology(), True)
  119. self.assertEqual(D.get_granularity(), u'1 day')
  120. def test_temporal_select_operators2(self):
  121. """Testing the temporal select operator. Including temporal relations. """
  122. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  123. ta.parse(expression="R = A {:,equal|during} C", stdstype = 'strds', basename="r", overwrite=True)
  124. D = tgis.open_old_stds("R", type="strds")
  125. self.assertTrue(D.is_in_db())
  126. D.select()
  127. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  128. self.assertEqual(D.metadata.get_min_min(), 2)
  129. self.assertEqual(D.metadata.get_max_max(), 3)
  130. start, end = D.get_absolute_time()
  131. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  132. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  133. self.assertEqual( D.check_temporal_topology(), True)
  134. self.assertEqual(D.get_granularity(), u'1 day')
  135. def test_temporal_select_operators3(self):
  136. """Testing the temporal select operator. Including temporal relations
  137. and negation operation. """
  138. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  139. ta.parse(expression="R = A {!:,during} C", stdstype = 'strds', basename="r", overwrite=True)
  140. D = tgis.open_old_stds("R", type="strds")
  141. self.assertTrue(D.is_in_db())
  142. D.select()
  143. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  144. self.assertEqual(D.metadata.get_min_min(), 1)
  145. self.assertEqual(D.metadata.get_max_max(), 4)
  146. start, end = D.get_absolute_time()
  147. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  148. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  149. self.assertEqual( D.check_temporal_topology(), True)
  150. self.assertEqual(D.get_granularity(), u'1 day')
  151. def test_temporal_select_operators4(self):
  152. """Testing the temporal select operator. Including temporal relations and
  153. temporal operators. """
  154. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  155. ta.parse(expression="R = A {:,during,d} C", stdstype = 'strds', basename="r", overwrite=True)
  156. D = tgis.open_old_stds("R", type="strds")
  157. self.assertTrue(D.is_in_db())
  158. D.select()
  159. maplist = D.get_registered_maps_as_objects()
  160. for map_i in maplist:
  161. start_map, end_map = map_i.get_absolute_time()
  162. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  163. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  164. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  165. self.assertEqual(D.metadata.get_min_min(), 2)
  166. self.assertEqual(D.metadata.get_max_max(), 3)
  167. start, end = D.get_absolute_time()
  168. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  169. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  170. self.assertEqual( D.check_temporal_topology(), False)
  171. self.assertEqual(D.get_granularity(), u'2 days')
  172. def test_temporal_select_operators5(self):
  173. """Testing the temporal select operator. Including temporal relations and
  174. temporal operators. """
  175. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  176. ta.parse(expression="R = C {:,contains} A", stdstype = 'strds', basename="r", overwrite=True)
  177. D = tgis.open_old_stds("R", type="strds")
  178. self.assertTrue(D.is_in_db())
  179. D.select()
  180. maplist = D.get_registered_maps_as_objects()
  181. for map_i in maplist:
  182. start_map, end_map = map_i.get_absolute_time()
  183. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  184. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  185. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  186. self.assertEqual(D.metadata.get_min_min(), 7)
  187. self.assertEqual(D.metadata.get_max_max(), 7)
  188. start, end = D.get_absolute_time()
  189. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  190. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  191. self.assertEqual( D.check_temporal_topology(), True)
  192. self.assertEqual(D.get_granularity(), u'2 days')
  193. def test_temporal_extent1(self):
  194. """Testing the temporal extent operators. """
  195. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  196. ta.parse(expression="R = A {:,during,r} C", stdstype = 'strds', basename="r", overwrite=True)
  197. D = tgis.open_old_stds("R", type="strds")
  198. self.assertTrue(D.is_in_db())
  199. D.select()
  200. maplist = D.get_registered_maps_as_objects()
  201. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  202. self.assertEqual(D.metadata.get_min_min(), 2)
  203. self.assertEqual(D.metadata.get_max_max(), 3)
  204. start, end = D.get_absolute_time()
  205. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  206. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  207. self.assertEqual( D.check_temporal_topology(), False)
  208. self.assertEqual(D.get_granularity(), u'2 days')
  209. def test_temporal_extent2(self):
  210. """Testing the temporal extent operators. """
  211. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  212. ta.parse(expression="R = A {:,during,d} C", stdstype = 'strds', basename="r", overwrite=True)
  213. D = tgis.open_old_stds("R", type="strds")
  214. self.assertTrue(D.is_in_db())
  215. D.select()
  216. maplist = D.get_registered_maps_as_objects()
  217. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  218. self.assertEqual(D.metadata.get_min_min(), 2)
  219. self.assertEqual(D.metadata.get_max_max(), 3)
  220. start, end = D.get_absolute_time()
  221. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  222. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  223. self.assertEqual( D.check_temporal_topology(), False)
  224. self.assertEqual(D.get_granularity(), u'2 days')
  225. def test_temporal_extent3(self):
  226. """Testing the temporal extent operators. """
  227. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  228. ta.parse(expression="R = A {:,during,u} C", stdstype = 'strds', basename="r", overwrite=True)
  229. D = tgis.open_old_stds("R", type="strds")
  230. self.assertTrue(D.is_in_db())
  231. D.select()
  232. maplist = D.get_registered_maps_as_objects()
  233. for map_i in maplist:
  234. start_map, end_map = map_i.get_absolute_time()
  235. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  236. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  237. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  238. self.assertEqual(D.metadata.get_min_min(), 2)
  239. self.assertEqual(D.metadata.get_max_max(), 3)
  240. start, end = D.get_absolute_time()
  241. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  242. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  243. self.assertEqual( D.check_temporal_topology(), False)
  244. self.assertEqual(D.get_granularity(), u'2 days')
  245. def test_temporal_hash1(self):
  246. """Testing the hash function in conditional statement. """
  247. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  248. ta.parse(expression="R = if(A # D == 1, A)", stdstype = 'strds', basename="r", overwrite=True)
  249. D = tgis.open_old_stds("R", type="strds")
  250. self.assertTrue(D.is_in_db())
  251. D.select()
  252. maplist = D.get_registered_maps_as_objects()
  253. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  254. self.assertEqual(D.metadata.get_min_min(), 3)
  255. self.assertEqual(D.metadata.get_max_max(), 4)
  256. start, end = D.get_absolute_time()
  257. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  258. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  259. self.assertEqual( D.check_temporal_topology(), True)
  260. self.assertEqual(D.get_granularity(), u'1 day')
  261. def test_temporal_hash_operator1(self):
  262. """Testing the hash operator function in conditional statement. """
  263. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  264. ta.parse(expression="R = if(A {#,during} C == 1, A)", stdstype = 'strds',
  265. basename="r", overwrite=True)
  266. D = tgis.open_old_stds("R", type="strds")
  267. self.assertTrue(D.is_in_db())
  268. D.select()
  269. maplist = D.get_registered_maps_as_objects()
  270. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  271. self.assertEqual(D.metadata.get_min_min(), 2)
  272. self.assertEqual(D.metadata.get_max_max(), 3)
  273. start, end = D.get_absolute_time()
  274. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  275. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  276. self.assertEqual( D.check_temporal_topology(), True)
  277. self.assertEqual(D.get_granularity(), u'1 day')
  278. def test_temporal_hash_operator2(self):
  279. """Testing the hash operator function in conditional statement. """
  280. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  281. ta.parse(expression="R = if({during}, C {#,contains} A == 2, A)",
  282. stdstype = 'strds', basename="r", overwrite=True)
  283. D = tgis.open_old_stds("R", type="strds")
  284. self.assertTrue(D.is_in_db())
  285. D.select()
  286. maplist = D.get_registered_maps_as_objects()
  287. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  288. self.assertEqual(D.metadata.get_min_min(), 2)
  289. self.assertEqual(D.metadata.get_max_max(), 3)
  290. start, end = D.get_absolute_time()
  291. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  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_function1(self):
  296. """Testing the tmap function. """
  297. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  298. ta.parse(expression='R = tmap(singletmap)', stdstype = 'strds', basename="r", overwrite=True)
  299. D = tgis.open_old_stds("R", type="strds")
  300. self.assertTrue(D.is_in_db())
  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(), 99)
  305. self.assertEqual(D.metadata.get_max_max(), 99)
  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_tmap_function2(self):
  312. """Testing the tmap function. """
  313. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  314. ta.parse(expression='R = A : tmap(singletmap)', stdstype = 'strds', basename="r", overwrite=True)
  315. D = tgis.open_old_stds("R", type="strds")
  316. self.assertTrue(D.is_in_db())
  317. D.select()
  318. maplist = D.get_registered_maps_as_objects()
  319. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  320. self.assertEqual(D.metadata.get_min_min(), 3)
  321. self.assertEqual(D.metadata.get_max_max(), 3)
  322. start, end = D.get_absolute_time()
  323. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  324. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  325. self.assertEqual( D.check_temporal_topology(), True)
  326. self.assertEqual(D.get_granularity(), u'1 day')
  327. def test_merge_function1(self):
  328. """Testing the merge function. """
  329. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  330. ta.parse(expression='R = merge(A,D)', stdstype = 'strds', basename="r", overwrite=True)
  331. D = tgis.open_old_stds("R", type="strds")
  332. self.assertTrue(D.is_in_db())
  333. D.select()
  334. maplist = D.get_registered_maps_as_objects()
  335. self.assertEqual(D.metadata.get_number_of_maps(), 7)
  336. self.assertEqual(D.metadata.get_min_min(), 1)
  337. self.assertEqual(D.metadata.get_max_max(), 10)
  338. start, end = D.get_absolute_time()
  339. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  340. self.assertEqual(end, datetime.datetime(2001, 1, 6))
  341. self.assertEqual( D.check_temporal_topology(), False)
  342. self.assertEqual(D.get_granularity(), u'1 day')
  343. def test_merge_function2(self):
  344. """Testing the merge function. """
  345. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  346. ta.parse(expression='R = merge(A, B {!:,contains} A)', stdstype = 'strds', basename="r", overwrite=True)
  347. D = tgis.open_old_stds("R", type="strds")
  348. self.assertTrue(D.is_in_db())
  349. D.select()
  350. maplist = D.get_registered_maps_as_objects()
  351. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  352. self.assertEqual(D.metadata.get_min_min(), 1)
  353. self.assertEqual(D.metadata.get_max_max(), 4)
  354. start, end = D.get_absolute_time()
  355. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  356. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  357. self.assertEqual( D.check_temporal_topology(), True)
  358. self.assertEqual(D.get_granularity(), u'1 day')
  359. class TestTemporalAlgebraDryRun(TestCase):
  360. @classmethod
  361. def setUpClass(cls):
  362. """Initiate the temporal GIS and set the region
  363. """
  364. tgis.init(True) # Raise on error instead of exit(1)
  365. cls.use_temp_region()
  366. cls.runModule("g.region", n=80.0, s=0.0, e=120.0,
  367. w=0.0, t=1.0, b=0.0, res=10.0)
  368. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 1")
  369. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 2")
  370. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a3 = 3")
  371. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
  372. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
  373. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
  374. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="c1 = 7")
  375. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d1 = 8")
  376. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 9")
  377. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 10")
  378. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99")
  379. tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
  380. title="A", descr="A", semantic="field", overwrite=True)
  381. tgis.open_new_stds(name="B", type="strds", temporaltype="absolute",
  382. title="B", descr="B", semantic="field", overwrite=True)
  383. tgis.open_new_stds(name="C", type="strds", temporaltype="absolute",
  384. title="C", descr="C", semantic="field", overwrite=True)
  385. tgis.open_new_stds(name="D", type="strds", temporaltype="absolute",
  386. title="D", descr="D", semantic="field", overwrite=True)
  387. tgis.register_maps_in_space_time_dataset(type="raster", name="A", maps="a1,a2,a3,a4",
  388. start="2001-01-01", increment="1 day", interval=True)
  389. tgis.register_maps_in_space_time_dataset(type="raster", name="B", maps="b1,b2",
  390. start="2001-01-01", increment="2 day", interval=True)
  391. tgis.register_maps_in_space_time_dataset(type="raster", name="C", maps="c1",
  392. start="2001-01-02", increment="2 day", interval=True)
  393. tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
  394. start="2001-01-03", increment="1 day", interval=True)
  395. tgis.register_maps_in_space_time_dataset(type="raster", name=None, maps="singletmap",
  396. start="2001-01-03", end="2001-01-04")
  397. @classmethod
  398. def tearDownClass(cls):
  399. """Remove the temporary region
  400. """
  401. cls.runModule("t.remove", flags="rf", inputs="A,B,C,D", quiet=True)
  402. cls.del_temp_region()
  403. def test_merge_function1(self):
  404. """Testing the merge function. """
  405. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  406. pc = ta.parse(expression='R = merge(A, B {:,contains} A)',
  407. stdstype = 'strds', basename="r",
  408. overwrite=True)
  409. self.assertEqual(len(pc["register"]), 6)
  410. self.assertEqual(pc["STDS"]["name"], "R")
  411. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  412. def test_merge_function2(self):
  413. """Testing the merge function. """
  414. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  415. pc = ta.parse(expression='R = merge(A, B {!:,contains} A)',
  416. stdstype = 'strds', basename="r",
  417. overwrite=True)
  418. self.assertEqual(len(pc["register"]), 4)
  419. self.assertEqual(pc["STDS"]["name"], "R")
  420. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  421. def test_merge_function3(self):
  422. """Testing the merge function. """
  423. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  424. pc = ta.parse(expression='R = merge(A, D {!:,equal} A)',
  425. stdstype = 'strds', basename="r",
  426. overwrite=True)
  427. self.assertEqual(len(pc["register"]), 5)
  428. self.assertEqual(pc["STDS"]["name"], "R")
  429. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  430. def test_shift1(self):
  431. """Testing the shift function. """
  432. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  433. pc = ta.parse(expression='R = tshift(A, "3 days")',
  434. stdstype = 'strds', basename="r",
  435. overwrite=True)
  436. print(pc["register"])
  437. self.assertEqual(len(pc["register"]), 4)
  438. self.assertEqual(pc["STDS"]["name"], "R")
  439. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  440. def test_shift2(self):
  441. """Testing the shift function. """
  442. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  443. pc = ta.parse(expression='R = tshift(A, "2 days") {:,during,l} C',
  444. stdstype = 'strds', basename="r",
  445. overwrite=True)
  446. print(pc["register"])
  447. self.assertEqual(len(pc["register"]), 1)
  448. self.assertEqual(pc["STDS"]["name"], "R")
  449. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  450. def test_buffer1(self):
  451. """Testing the shift function. """
  452. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  453. pc = ta.parse(expression='R = buff_t(A, "1 day") ',
  454. stdstype = 'strds', basename="r",
  455. overwrite=True)
  456. print(pc["register"])
  457. self.assertEqual(len(pc["register"]), 4)
  458. self.assertEqual(pc["STDS"]["name"], "R")
  459. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  460. def test_buff2(self):
  461. """Testing the shift function. """
  462. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  463. pc = ta.parse(expression='R = buff_t(A, "1 day") {:,contains,l} C',
  464. stdstype = 'strds', basename="r",
  465. overwrite=True)
  466. print(pc["register"])
  467. self.assertEqual(len(pc["register"]), 2)
  468. self.assertEqual(pc["STDS"]["name"], "R")
  469. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  470. if __name__ == '__main__':
  471. test()