test_raster_algebra.py 32 KB

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