unittests_temporal_algebra.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  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. 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, w=0.0, t=1.0, b=0.0, res=10.0)
  21. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 1")
  22. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 2")
  23. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a3 = 3")
  24. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
  25. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
  26. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
  27. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="c1 = 7")
  28. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d1 = 8")
  29. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 9")
  30. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 10")
  31. cls.runModule(
  32. "r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99"
  33. )
  34. tgis.open_new_stds(
  35. name="A",
  36. type="strds",
  37. temporaltype="absolute",
  38. title="A",
  39. descr="A",
  40. semantic="field",
  41. overwrite=True,
  42. )
  43. tgis.open_new_stds(
  44. name="B",
  45. type="strds",
  46. temporaltype="absolute",
  47. title="B",
  48. descr="B",
  49. semantic="field",
  50. overwrite=True,
  51. )
  52. tgis.open_new_stds(
  53. name="C",
  54. type="strds",
  55. temporaltype="absolute",
  56. title="C",
  57. descr="C",
  58. semantic="field",
  59. overwrite=True,
  60. )
  61. tgis.open_new_stds(
  62. name="D",
  63. type="strds",
  64. temporaltype="absolute",
  65. title="D",
  66. descr="D",
  67. semantic="field",
  68. overwrite=True,
  69. )
  70. tgis.register_maps_in_space_time_dataset(
  71. type="raster",
  72. name="A",
  73. maps="a1,a2,a3,a4",
  74. start="2001-01-01",
  75. increment="1 day",
  76. interval=True,
  77. )
  78. tgis.register_maps_in_space_time_dataset(
  79. type="raster",
  80. name="B",
  81. maps="b1,b2",
  82. start="2001-01-01",
  83. increment="2 day",
  84. interval=True,
  85. )
  86. tgis.register_maps_in_space_time_dataset(
  87. type="raster",
  88. name="C",
  89. maps="c1",
  90. start="2001-01-02",
  91. increment="2 day",
  92. interval=True,
  93. )
  94. tgis.register_maps_in_space_time_dataset(
  95. type="raster",
  96. name="D",
  97. maps="d1,d2,d3",
  98. start="2001-01-03",
  99. increment="1 day",
  100. interval=True,
  101. )
  102. tgis.register_maps_in_space_time_dataset(
  103. type="raster",
  104. name=None,
  105. maps="singletmap",
  106. start="2001-01-03",
  107. end="2001-01-04",
  108. )
  109. def tearDown(self):
  110. self.runModule("t.remove", inputs="R", quiet=True)
  111. @classmethod
  112. def tearDownClass(cls):
  113. """Remove the temporary region"""
  114. cls.runModule("t.remove", flags="rf", inputs="A,B,C,D", quiet=True)
  115. cls.del_temp_region()
  116. def test_temporal_select1(self):
  117. """Testing the temporal select operator with equal relations."""
  118. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  119. ta.parse(expression="R = A : A", stdstype="strds", basename="r", overwrite=True)
  120. D = tgis.open_old_stds("R", type="strds")
  121. self.assertTrue(D.is_in_db())
  122. D.select()
  123. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  124. self.assertEqual(D.metadata.get_min_min(), 1)
  125. self.assertEqual(D.metadata.get_max_max(), 4)
  126. start, end = D.get_absolute_time()
  127. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  128. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  129. self.assertEqual(D.check_temporal_topology(), True)
  130. self.assertEqual(D.get_granularity(), "1 day")
  131. def test_temporal_select2(self):
  132. """Testing the temporal select operator with equal relations."""
  133. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  134. ta.parse(expression="R = A : D", stdstype="strds", basename="r", overwrite=True)
  135. D = tgis.open_old_stds("R", type="strds")
  136. self.assertTrue(D.is_in_db())
  137. D.select()
  138. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  139. self.assertEqual(D.metadata.get_min_min(), 3)
  140. self.assertEqual(D.metadata.get_max_max(), 4)
  141. start, end = D.get_absolute_time()
  142. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  143. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  144. self.assertEqual(D.check_temporal_topology(), True)
  145. self.assertEqual(D.get_granularity(), "1 day")
  146. def test_temporal_select3(self):
  147. """Testing the temporal select operator with equal relations."""
  148. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  149. ta.parse(
  150. expression="R = A !: D", stdstype="strds", basename="r", overwrite=True
  151. )
  152. D = tgis.open_old_stds("R", type="strds")
  153. self.assertTrue(D.is_in_db())
  154. D.select()
  155. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  156. self.assertEqual(D.metadata.get_min_min(), 1)
  157. self.assertEqual(D.metadata.get_max_max(), 2)
  158. start, end = D.get_absolute_time()
  159. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  160. self.assertEqual(end, datetime.datetime(2001, 1, 3))
  161. self.assertEqual(D.check_temporal_topology(), True)
  162. self.assertEqual(D.get_granularity(), "1 day")
  163. def test_temporal_select_operators1(self):
  164. """Testing the temporal select operator. Including temporal relations."""
  165. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  166. ta.parse(
  167. expression="R = A {:,during} C",
  168. stdstype="strds",
  169. basename="r",
  170. overwrite=True,
  171. )
  172. D = tgis.open_old_stds("R", type="strds")
  173. self.assertTrue(D.is_in_db())
  174. D.select()
  175. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  176. self.assertEqual(D.metadata.get_min_min(), 2)
  177. self.assertEqual(D.metadata.get_max_max(), 3)
  178. start, end = D.get_absolute_time()
  179. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  180. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  181. self.assertEqual(D.check_temporal_topology(), True)
  182. self.assertEqual(D.get_granularity(), "1 day")
  183. def test_temporal_select_operators2(self):
  184. """Testing the temporal select operator. Including temporal relations."""
  185. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  186. ta.parse(
  187. expression="R = A {:,equal|during} C",
  188. stdstype="strds",
  189. basename="r",
  190. overwrite=True,
  191. )
  192. D = tgis.open_old_stds("R", type="strds")
  193. self.assertTrue(D.is_in_db())
  194. D.select()
  195. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  196. self.assertEqual(D.metadata.get_min_min(), 2)
  197. self.assertEqual(D.metadata.get_max_max(), 3)
  198. start, end = D.get_absolute_time()
  199. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  200. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  201. self.assertEqual(D.check_temporal_topology(), True)
  202. self.assertEqual(D.get_granularity(), "1 day")
  203. def test_temporal_select_operators3(self):
  204. """Testing the temporal select operator. Including temporal relations
  205. and negation operation."""
  206. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  207. ta.parse(
  208. expression="R = A {!:,during} C",
  209. stdstype="strds",
  210. basename="r",
  211. overwrite=True,
  212. )
  213. D = tgis.open_old_stds("R", type="strds")
  214. self.assertTrue(D.is_in_db())
  215. D.select()
  216. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  217. self.assertEqual(D.metadata.get_min_min(), 1)
  218. self.assertEqual(D.metadata.get_max_max(), 4)
  219. start, end = D.get_absolute_time()
  220. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  221. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  222. self.assertEqual(D.check_temporal_topology(), True)
  223. self.assertEqual(D.get_granularity(), "1 day")
  224. def test_temporal_select_operators4(self):
  225. """Testing the temporal select operator. Including temporal relations and
  226. temporal operators."""
  227. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  228. ta.parse(
  229. expression="R = A {:,during,d} C",
  230. stdstype="strds",
  231. basename="r",
  232. overwrite=True,
  233. )
  234. D = tgis.open_old_stds("R", type="strds")
  235. self.assertTrue(D.is_in_db())
  236. D.select()
  237. maplist = D.get_registered_maps_as_objects()
  238. for map_i in maplist:
  239. start_map, end_map = map_i.get_absolute_time()
  240. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  241. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  242. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  243. self.assertEqual(D.metadata.get_min_min(), 2)
  244. self.assertEqual(D.metadata.get_max_max(), 3)
  245. start, end = D.get_absolute_time()
  246. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  247. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  248. self.assertEqual(D.check_temporal_topology(), False)
  249. self.assertEqual(D.get_granularity(), "2 days")
  250. def test_temporal_select_operators5(self):
  251. """Testing the temporal select operator. Including temporal relations and
  252. temporal operators."""
  253. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  254. ta.parse(
  255. expression="R = C {:,contains} A",
  256. stdstype="strds",
  257. basename="r",
  258. overwrite=True,
  259. )
  260. D = tgis.open_old_stds("R", type="strds")
  261. self.assertTrue(D.is_in_db())
  262. D.select()
  263. maplist = D.get_registered_maps_as_objects()
  264. for map_i in maplist:
  265. start_map, end_map = map_i.get_absolute_time()
  266. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  267. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  268. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  269. self.assertEqual(D.metadata.get_min_min(), 7)
  270. self.assertEqual(D.metadata.get_max_max(), 7)
  271. start, end = D.get_absolute_time()
  272. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  273. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  274. self.assertEqual(D.check_temporal_topology(), True)
  275. self.assertEqual(D.get_granularity(), "2 days")
  276. def test_temporal_extent1(self):
  277. """Testing the temporal extent operators."""
  278. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  279. ta.parse(
  280. expression="R = A {:,during,r} C",
  281. stdstype="strds",
  282. basename="r",
  283. overwrite=True,
  284. )
  285. D = tgis.open_old_stds("R", type="strds")
  286. self.assertTrue(D.is_in_db())
  287. D.select()
  288. maplist = D.get_registered_maps_as_objects()
  289. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  290. self.assertEqual(D.metadata.get_min_min(), 2)
  291. self.assertEqual(D.metadata.get_max_max(), 3)
  292. start, end = D.get_absolute_time()
  293. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  294. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  295. self.assertEqual(D.check_temporal_topology(), False)
  296. self.assertEqual(D.get_granularity(), "2 days")
  297. def test_temporal_extent2(self):
  298. """Testing the temporal extent operators."""
  299. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  300. ta.parse(
  301. expression="R = A {:,during,d} C",
  302. stdstype="strds",
  303. basename="r",
  304. overwrite=True,
  305. )
  306. D = tgis.open_old_stds("R", type="strds")
  307. self.assertTrue(D.is_in_db())
  308. D.select()
  309. maplist = D.get_registered_maps_as_objects()
  310. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  311. self.assertEqual(D.metadata.get_min_min(), 2)
  312. self.assertEqual(D.metadata.get_max_max(), 3)
  313. start, end = D.get_absolute_time()
  314. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  315. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  316. self.assertEqual(D.check_temporal_topology(), False)
  317. self.assertEqual(D.get_granularity(), "2 days")
  318. def test_temporal_extent3(self):
  319. """Testing the temporal extent operators."""
  320. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  321. ta.parse(
  322. expression="R = A {:,during,u} C",
  323. stdstype="strds",
  324. basename="r",
  325. overwrite=True,
  326. )
  327. D = tgis.open_old_stds("R", type="strds")
  328. self.assertTrue(D.is_in_db())
  329. D.select()
  330. maplist = D.get_registered_maps_as_objects()
  331. for map_i in maplist:
  332. start_map, end_map = map_i.get_absolute_time()
  333. self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
  334. self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
  335. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  336. self.assertEqual(D.metadata.get_min_min(), 2)
  337. self.assertEqual(D.metadata.get_max_max(), 3)
  338. start, end = D.get_absolute_time()
  339. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  340. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  341. self.assertEqual(D.check_temporal_topology(), False)
  342. self.assertEqual(D.get_granularity(), "2 days")
  343. def test_temporal_hash1(self):
  344. """Testing the hash function in conditional statement."""
  345. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  346. ta.parse(
  347. expression="R = if(A # D == 1, A)",
  348. stdstype="strds",
  349. basename="r",
  350. overwrite=True,
  351. )
  352. D = tgis.open_old_stds("R", type="strds")
  353. self.assertTrue(D.is_in_db())
  354. D.select()
  355. maplist = D.get_registered_maps_as_objects()
  356. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  357. self.assertEqual(D.metadata.get_min_min(), 3)
  358. self.assertEqual(D.metadata.get_max_max(), 4)
  359. start, end = D.get_absolute_time()
  360. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  361. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  362. self.assertEqual(D.check_temporal_topology(), True)
  363. self.assertEqual(D.get_granularity(), "1 day")
  364. def test_temporal_hash_operator1(self):
  365. """Testing the hash operator function in conditional statement."""
  366. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  367. ta.parse(
  368. expression="R = if(A {#,during} C == 1, A)",
  369. stdstype="strds",
  370. basename="r",
  371. overwrite=True,
  372. )
  373. D = tgis.open_old_stds("R", type="strds")
  374. self.assertTrue(D.is_in_db())
  375. D.select()
  376. maplist = D.get_registered_maps_as_objects()
  377. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  378. self.assertEqual(D.metadata.get_min_min(), 2)
  379. self.assertEqual(D.metadata.get_max_max(), 3)
  380. start, end = D.get_absolute_time()
  381. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  382. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  383. self.assertEqual(D.check_temporal_topology(), True)
  384. self.assertEqual(D.get_granularity(), "1 day")
  385. def test_temporal_hash_operator2(self):
  386. """Testing the hash operator function in conditional statement."""
  387. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  388. ta.parse(
  389. expression="R = if({during}, C {#,contains} A == 2, A)",
  390. stdstype="strds",
  391. basename="r",
  392. overwrite=True,
  393. )
  394. D = tgis.open_old_stds("R", type="strds")
  395. self.assertTrue(D.is_in_db())
  396. D.select()
  397. maplist = D.get_registered_maps_as_objects()
  398. self.assertEqual(D.metadata.get_number_of_maps(), 2)
  399. self.assertEqual(D.metadata.get_min_min(), 2)
  400. self.assertEqual(D.metadata.get_max_max(), 3)
  401. start, end = D.get_absolute_time()
  402. self.assertEqual(start, datetime.datetime(2001, 1, 2))
  403. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  404. self.assertEqual(D.check_temporal_topology(), True)
  405. self.assertEqual(D.get_granularity(), "1 day")
  406. def test_tmap_function1(self):
  407. """Testing the tmap function."""
  408. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  409. ta.parse(
  410. expression="R = tmap(singletmap)",
  411. stdstype="strds",
  412. basename="r",
  413. overwrite=True,
  414. )
  415. D = tgis.open_old_stds("R", type="strds")
  416. self.assertTrue(D.is_in_db())
  417. D.select()
  418. maplist = D.get_registered_maps_as_objects()
  419. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  420. self.assertEqual(D.metadata.get_min_min(), 99)
  421. self.assertEqual(D.metadata.get_max_max(), 99)
  422. start, end = D.get_absolute_time()
  423. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  424. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  425. self.assertEqual(D.check_temporal_topology(), True)
  426. self.assertEqual(D.get_granularity(), "1 day")
  427. def test_tmap_function2(self):
  428. """Testing the tmap function."""
  429. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  430. ta.parse(
  431. expression="R = A : tmap(singletmap)",
  432. stdstype="strds",
  433. basename="r",
  434. overwrite=True,
  435. )
  436. D = tgis.open_old_stds("R", type="strds")
  437. self.assertTrue(D.is_in_db())
  438. D.select()
  439. maplist = D.get_registered_maps_as_objects()
  440. self.assertEqual(D.metadata.get_number_of_maps(), 1)
  441. self.assertEqual(D.metadata.get_min_min(), 3)
  442. self.assertEqual(D.metadata.get_max_max(), 3)
  443. start, end = D.get_absolute_time()
  444. self.assertEqual(start, datetime.datetime(2001, 1, 3))
  445. self.assertEqual(end, datetime.datetime(2001, 1, 4))
  446. self.assertEqual(D.check_temporal_topology(), True)
  447. self.assertEqual(D.get_granularity(), "1 day")
  448. def test_merge_function1(self):
  449. """Testing the merge function."""
  450. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  451. ta.parse(
  452. expression="R = merge(A,D)", stdstype="strds", basename="r", overwrite=True
  453. )
  454. D = tgis.open_old_stds("R", type="strds")
  455. self.assertTrue(D.is_in_db())
  456. D.select()
  457. maplist = D.get_registered_maps_as_objects()
  458. self.assertEqual(D.metadata.get_number_of_maps(), 7)
  459. self.assertEqual(D.metadata.get_min_min(), 1)
  460. self.assertEqual(D.metadata.get_max_max(), 10)
  461. start, end = D.get_absolute_time()
  462. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  463. self.assertEqual(end, datetime.datetime(2001, 1, 6))
  464. self.assertEqual(D.check_temporal_topology(), False)
  465. self.assertEqual(D.get_granularity(), "1 day")
  466. def test_merge_function2(self):
  467. """Testing the merge function."""
  468. ta = tgis.TemporalAlgebraParser(run=True, debug=True)
  469. ta.parse(
  470. expression="R = merge(A, B {!:,contains} A)",
  471. stdstype="strds",
  472. basename="r",
  473. overwrite=True,
  474. )
  475. D = tgis.open_old_stds("R", type="strds")
  476. self.assertTrue(D.is_in_db())
  477. D.select()
  478. maplist = D.get_registered_maps_as_objects()
  479. self.assertEqual(D.metadata.get_number_of_maps(), 4)
  480. self.assertEqual(D.metadata.get_min_min(), 1)
  481. self.assertEqual(D.metadata.get_max_max(), 4)
  482. start, end = D.get_absolute_time()
  483. self.assertEqual(start, datetime.datetime(2001, 1, 1))
  484. self.assertEqual(end, datetime.datetime(2001, 1, 5))
  485. self.assertEqual(D.check_temporal_topology(), True)
  486. self.assertEqual(D.get_granularity(), "1 day")
  487. class TestTemporalAlgebraDryRun(TestCase):
  488. @classmethod
  489. def setUpClass(cls):
  490. """Initiate the temporal GIS and set the region"""
  491. tgis.init(True) # Raise on error instead of exit(1)
  492. cls.use_temp_region()
  493. cls.runModule("g.region", n=80.0, s=0.0, e=120.0, w=0.0, t=1.0, b=0.0, res=10.0)
  494. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 1")
  495. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 2")
  496. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a3 = 3")
  497. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
  498. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
  499. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
  500. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="c1 = 7")
  501. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d1 = 8")
  502. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 9")
  503. cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 10")
  504. cls.runModule(
  505. "r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99"
  506. )
  507. tgis.open_new_stds(
  508. name="A",
  509. type="strds",
  510. temporaltype="absolute",
  511. title="A",
  512. descr="A",
  513. semantic="field",
  514. overwrite=True,
  515. )
  516. tgis.open_new_stds(
  517. name="B",
  518. type="strds",
  519. temporaltype="absolute",
  520. title="B",
  521. descr="B",
  522. semantic="field",
  523. overwrite=True,
  524. )
  525. tgis.open_new_stds(
  526. name="C",
  527. type="strds",
  528. temporaltype="absolute",
  529. title="C",
  530. descr="C",
  531. semantic="field",
  532. overwrite=True,
  533. )
  534. tgis.open_new_stds(
  535. name="D",
  536. type="strds",
  537. temporaltype="absolute",
  538. title="D",
  539. descr="D",
  540. semantic="field",
  541. overwrite=True,
  542. )
  543. tgis.register_maps_in_space_time_dataset(
  544. type="raster",
  545. name="A",
  546. maps="a1,a2,a3,a4",
  547. start="2001-01-01",
  548. increment="1 day",
  549. interval=True,
  550. )
  551. tgis.register_maps_in_space_time_dataset(
  552. type="raster",
  553. name="B",
  554. maps="b1,b2",
  555. start="2001-01-01",
  556. increment="2 day",
  557. interval=True,
  558. )
  559. tgis.register_maps_in_space_time_dataset(
  560. type="raster",
  561. name="C",
  562. maps="c1",
  563. start="2001-01-02",
  564. increment="2 day",
  565. interval=True,
  566. )
  567. tgis.register_maps_in_space_time_dataset(
  568. type="raster",
  569. name="D",
  570. maps="d1,d2,d3",
  571. start="2001-01-03",
  572. increment="1 day",
  573. interval=True,
  574. )
  575. tgis.register_maps_in_space_time_dataset(
  576. type="raster",
  577. name=None,
  578. maps="singletmap",
  579. start="2001-01-03",
  580. end="2001-01-04",
  581. )
  582. @classmethod
  583. def tearDownClass(cls):
  584. """Remove the temporary region"""
  585. cls.runModule("t.remove", flags="rf", inputs="A,B,C,D", quiet=True)
  586. cls.del_temp_region()
  587. def test_merge_function1(self):
  588. """Testing the merge function."""
  589. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  590. pc = ta.parse(
  591. expression="R = merge(A, B {:,contains} A)",
  592. stdstype="strds",
  593. basename="r",
  594. overwrite=True,
  595. )
  596. self.assertEqual(len(pc["register"]), 6)
  597. self.assertEqual(pc["STDS"]["name"], "R")
  598. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  599. def test_merge_function2(self):
  600. """Testing the merge function."""
  601. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  602. pc = ta.parse(
  603. expression="R = merge(A, B {!:,contains} A)",
  604. stdstype="strds",
  605. basename="r",
  606. overwrite=True,
  607. )
  608. self.assertEqual(len(pc["register"]), 4)
  609. self.assertEqual(pc["STDS"]["name"], "R")
  610. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  611. def test_merge_function3(self):
  612. """Testing the merge function."""
  613. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  614. pc = ta.parse(
  615. expression="R = merge(A, D {!:,equal} A)",
  616. stdstype="strds",
  617. basename="r",
  618. overwrite=True,
  619. )
  620. self.assertEqual(len(pc["register"]), 5)
  621. self.assertEqual(pc["STDS"]["name"], "R")
  622. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  623. def test_shift1(self):
  624. """Testing the shift function."""
  625. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  626. pc = ta.parse(
  627. expression='R = tshift(A, "3 days")',
  628. stdstype="strds",
  629. basename="r",
  630. overwrite=True,
  631. )
  632. print(pc["register"])
  633. self.assertEqual(len(pc["register"]), 4)
  634. self.assertEqual(pc["STDS"]["name"], "R")
  635. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  636. def test_shift2(self):
  637. """Testing the shift function."""
  638. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  639. pc = ta.parse(
  640. expression='R = tshift(A, "2 days") {:,during,l} C',
  641. stdstype="strds",
  642. basename="r",
  643. overwrite=True,
  644. )
  645. print(pc["register"])
  646. self.assertEqual(len(pc["register"]), 1)
  647. self.assertEqual(pc["STDS"]["name"], "R")
  648. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  649. def test_buffer1(self):
  650. """Testing the shift function."""
  651. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  652. pc = ta.parse(
  653. expression='R = buff_t(A, "1 day") ',
  654. stdstype="strds",
  655. basename="r",
  656. overwrite=True,
  657. )
  658. print(pc["register"])
  659. self.assertEqual(len(pc["register"]), 4)
  660. self.assertEqual(pc["STDS"]["name"], "R")
  661. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  662. def test_buff2(self):
  663. """Testing the shift function."""
  664. ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
  665. pc = ta.parse(
  666. expression='R = buff_t(A, "1 day") {:,contains,l} C',
  667. stdstype="strds",
  668. basename="r",
  669. overwrite=True,
  670. )
  671. print(pc["register"])
  672. self.assertEqual(len(pc["register"]), 2)
  673. self.assertEqual(pc["STDS"]["name"], "R")
  674. self.assertEqual(pc["STDS"]["stdstype"], "strds")
  675. if __name__ == "__main__":
  676. test()