test_shift.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. """Test t.shift
  2. (C) 2015 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 os
  9. import grass.pygrass.modules as pymod
  10. import grass.temporal as tgis
  11. from grass.gunittest.case import TestCase
  12. from grass.gunittest.gmodules import SimpleModule
  13. class TestShiftAbsoluteSTRDS(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()
  19. cls.use_temp_region()
  20. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  21. cls.runModule("r.mapcalc", expression="a1 = 100", overwrite=True)
  22. cls.runModule("r.mapcalc", expression="a2 = 200", overwrite=True)
  23. cls.runModule("r.mapcalc", expression="a3 = 300", overwrite=True)
  24. cls.runModule("r.mapcalc", expression="a4 = 400", overwrite=True)
  25. cls.runModule(
  26. "t.create",
  27. type="strds",
  28. temporaltype="absolute",
  29. output="A",
  30. title="A test",
  31. description="A test",
  32. overwrite=True,
  33. )
  34. cls.runModule(
  35. "t.register",
  36. type="raster",
  37. input="A",
  38. maps="a1,a2,a3,a4",
  39. start="2001-01-01",
  40. increment="14 days",
  41. overwrite=True,
  42. )
  43. @classmethod
  44. def tearDownClass(cls):
  45. """Remove the temporary region"""
  46. cls.del_temp_region()
  47. cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
  48. def test_1(self):
  49. A = tgis.open_old_stds("A", type="strds")
  50. A.select()
  51. self.assertEqual(A.get_map_time(), "point")
  52. start, end = A.get_temporal_extent_as_tuple()
  53. self.assertEqual(start.year, 2001)
  54. self.assertEqual(start.month, 1)
  55. self.assertEqual(start.day, 1)
  56. self.assertModule("t.shift", input="A", granularity="1 day", type="strds")
  57. A.select()
  58. start, end = A.get_temporal_extent_as_tuple()
  59. self.assertEqual(start.year, 2001)
  60. self.assertEqual(start.month, 1)
  61. self.assertEqual(start.day, 2)
  62. self.assertModule("t.shift", input="A", granularity="-1 day", type="strds")
  63. A.select()
  64. start, end = A.get_temporal_extent_as_tuple()
  65. self.assertEqual(start.year, 2001)
  66. self.assertEqual(start.month, 1)
  67. self.assertEqual(start.day, 1)
  68. self.assertModule("t.shift", input="A", granularity="-1 year", type="strds")
  69. A.select()
  70. start, end = A.get_temporal_extent_as_tuple()
  71. self.assertEqual(start.year, 2000)
  72. self.assertEqual(start.month, 1)
  73. self.assertEqual(start.day, 1)
  74. self.assertModule("t.shift", input="A", granularity="6 month", type="strds")
  75. A.select()
  76. start, end = A.get_temporal_extent_as_tuple()
  77. self.assertEqual(start.year, 2000)
  78. self.assertEqual(start.month, 7)
  79. self.assertEqual(start.day, 1)
  80. self.assertModule("t.shift", input="A", granularity="1 hour", type="strds")
  81. A.select()
  82. start, end = A.get_temporal_extent_as_tuple()
  83. self.assertEqual(start.year, 2000)
  84. self.assertEqual(start.month, 7)
  85. self.assertEqual(start.day, 1)
  86. self.assertEqual(start.hour, 1)
  87. self.assertModule(
  88. "t.shift", input="A", granularity="-3630 seconds", type="strds"
  89. )
  90. A.select()
  91. start, end = A.get_temporal_extent_as_tuple()
  92. self.assertEqual(start.year, 2000)
  93. self.assertEqual(start.month, 6)
  94. self.assertEqual(start.day, 30)
  95. self.assertEqual(start.hour, 23)
  96. self.assertEqual(start.minute, 59)
  97. self.assertEqual(start.second, 30)
  98. class TestShiftRelativeSTRDS(TestCase):
  99. @classmethod
  100. def setUpClass(cls):
  101. """Initiate the temporal GIS and set the region"""
  102. os.putenv("GRASS_OVERWRITE", "1")
  103. tgis.init()
  104. cls.use_temp_region()
  105. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  106. cls.runModule("r.mapcalc", expression="a1 = 100", overwrite=True)
  107. cls.runModule("r.mapcalc", expression="a2 = 200", overwrite=True)
  108. cls.runModule("r.mapcalc", expression="a3 = 300", overwrite=True)
  109. cls.runModule("r.mapcalc", expression="a4 = 400", overwrite=True)
  110. cls.runModule(
  111. "t.create",
  112. type="strds",
  113. temporaltype="relative",
  114. output="A",
  115. title="A test",
  116. description="A test",
  117. overwrite=True,
  118. )
  119. cls.runModule(
  120. "t.register",
  121. type="raster",
  122. input="A",
  123. maps="a1,a2,a3,a4",
  124. start="0",
  125. increment="14",
  126. unit="days",
  127. overwrite=True,
  128. )
  129. @classmethod
  130. def tearDownClass(cls):
  131. """Remove the temporary region"""
  132. cls.del_temp_region()
  133. cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
  134. def test_1(self):
  135. A = tgis.open_old_stds("A", type="strds")
  136. A.select()
  137. self.assertEqual(A.get_map_time(), "point")
  138. start, end = A.get_temporal_extent_as_tuple()
  139. self.assertEqual(start, 0)
  140. self.assertModule("t.shift", input="A", granularity="1", type="strds")
  141. A.select()
  142. start, end = A.get_temporal_extent_as_tuple()
  143. self.assertEqual(start, 1)
  144. class TestShiftAbsoluteSTR3DS(TestCase):
  145. @classmethod
  146. def setUpClass(cls):
  147. """Initiate the temporal GIS and set the region"""
  148. os.putenv("GRASS_OVERWRITE", "1")
  149. tgis.init()
  150. cls.use_temp_region()
  151. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  152. cls.runModule("r3.mapcalc", expression="a1 = 100", overwrite=True)
  153. cls.runModule("r3.mapcalc", expression="a2 = 200", overwrite=True)
  154. cls.runModule("r3.mapcalc", expression="a3 = 300", overwrite=True)
  155. cls.runModule("r3.mapcalc", expression="a4 = 400", overwrite=True)
  156. cls.runModule(
  157. "t.create",
  158. type="str3ds",
  159. temporaltype="absolute",
  160. output="A",
  161. title="A test",
  162. description="A test",
  163. overwrite=True,
  164. )
  165. cls.runModule(
  166. "t.register",
  167. type="raster_3d",
  168. input="A",
  169. maps="a1,a2,a3,a4",
  170. start="2001-01-01",
  171. increment="14 days",
  172. overwrite=True,
  173. )
  174. @classmethod
  175. def tearDownClass(cls):
  176. """Remove the temporary region"""
  177. cls.del_temp_region()
  178. cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
  179. def test_1(self):
  180. A = tgis.open_old_stds("A", type="str3ds")
  181. A.select()
  182. self.assertEqual(A.get_map_time(), "point")
  183. start, end = A.get_temporal_extent_as_tuple()
  184. self.assertEqual(start.year, 2001)
  185. self.assertEqual(start.month, 1)
  186. self.assertEqual(start.day, 1)
  187. self.assertModule("t.shift", input="A", granularity="1 day", type="str3ds")
  188. A.select()
  189. start, end = A.get_temporal_extent_as_tuple()
  190. self.assertEqual(start.year, 2001)
  191. self.assertEqual(start.month, 1)
  192. self.assertEqual(start.day, 2)
  193. self.assertModule("t.shift", input="A", granularity="-1 day", type="str3ds")
  194. A.select()
  195. start, end = A.get_temporal_extent_as_tuple()
  196. self.assertEqual(start.year, 2001)
  197. self.assertEqual(start.month, 1)
  198. self.assertEqual(start.day, 1)
  199. self.assertModule("t.shift", input="A", granularity="-1 year", type="str3ds")
  200. A.select()
  201. start, end = A.get_temporal_extent_as_tuple()
  202. self.assertEqual(start.year, 2000)
  203. self.assertEqual(start.month, 1)
  204. self.assertEqual(start.day, 1)
  205. self.assertModule("t.shift", input="A", granularity="6 month", type="str3ds")
  206. A.select()
  207. start, end = A.get_temporal_extent_as_tuple()
  208. self.assertEqual(start.year, 2000)
  209. self.assertEqual(start.month, 7)
  210. self.assertEqual(start.day, 1)
  211. self.assertModule("t.shift", input="A", granularity="1 hour", type="str3ds")
  212. A.select()
  213. start, end = A.get_temporal_extent_as_tuple()
  214. self.assertEqual(start.year, 2000)
  215. self.assertEqual(start.month, 7)
  216. self.assertEqual(start.day, 1)
  217. self.assertEqual(start.hour, 1)
  218. self.assertModule(
  219. "t.shift", input="A", granularity="-3630 seconds", type="str3ds"
  220. )
  221. A.select()
  222. start, end = A.get_temporal_extent_as_tuple()
  223. self.assertEqual(start.year, 2000)
  224. self.assertEqual(start.month, 6)
  225. self.assertEqual(start.day, 30)
  226. self.assertEqual(start.hour, 23)
  227. self.assertEqual(start.minute, 59)
  228. self.assertEqual(start.second, 30)
  229. class TestShiftRelativeSTR3DS(TestCase):
  230. @classmethod
  231. def setUpClass(cls):
  232. os.putenv("GRASS_OVERWRITE", "1")
  233. tgis.init()
  234. cls.use_temp_region()
  235. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  236. cls.runModule("r3.mapcalc", expression="a1 = 100", overwrite=True)
  237. cls.runModule("r3.mapcalc", expression="a2 = 200", overwrite=True)
  238. cls.runModule("r3.mapcalc", expression="a3 = 300", overwrite=True)
  239. cls.runModule("r3.mapcalc", expression="a4 = 400", overwrite=True)
  240. cls.runModule(
  241. "t.create",
  242. type="str3ds",
  243. temporaltype="relative",
  244. output="A",
  245. title="A test",
  246. description="A test",
  247. overwrite=True,
  248. )
  249. cls.runModule(
  250. "t.register",
  251. type="raster_3d",
  252. input="A",
  253. maps="a1,a2,a3,a4",
  254. start="0",
  255. increment="14",
  256. unit="days",
  257. overwrite=True,
  258. )
  259. @classmethod
  260. def tearDownClass(cls):
  261. """Remove the temporary region"""
  262. cls.del_temp_region()
  263. cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
  264. def test_1(self):
  265. A = tgis.open_old_stds("A", type="str3ds")
  266. A.select()
  267. self.assertEqual(A.get_map_time(), "point")
  268. start, end = A.get_temporal_extent_as_tuple()
  269. self.assertEqual(start, 0)
  270. self.assertModule("t.shift", input="A", granularity="1", type="str3ds")
  271. A.select()
  272. start, end = A.get_temporal_extent_as_tuple()
  273. self.assertEqual(start, 1)
  274. class TestShiftAbsoluteSTVDS(TestCase):
  275. @classmethod
  276. def setUpClass(cls):
  277. """Initiate the temporal GIS and set the region"""
  278. os.putenv("GRASS_OVERWRITE", "1")
  279. tgis.init()
  280. cls.use_temp_region()
  281. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  282. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a1")
  283. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a2")
  284. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a3")
  285. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a4")
  286. cls.runModule(
  287. "t.create",
  288. type="stvds",
  289. temporaltype="absolute",
  290. output="A",
  291. title="A test",
  292. description="A test",
  293. overwrite=True,
  294. )
  295. cls.runModule(
  296. "t.register",
  297. type="vector",
  298. input="A",
  299. maps="a1,a2,a3,a4",
  300. flags="i",
  301. start="2001-01-01",
  302. increment="14 days",
  303. overwrite=True,
  304. )
  305. @classmethod
  306. def tearDownClass(cls):
  307. """Remove the temporary region"""
  308. cls.del_temp_region()
  309. cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
  310. def test_1(self):
  311. A = tgis.open_old_stds("A", type="stvds")
  312. A.select()
  313. self.assertEqual(A.get_map_time(), "interval")
  314. start, end = A.get_temporal_extent_as_tuple()
  315. self.assertEqual(start.year, 2001)
  316. self.assertEqual(start.month, 1)
  317. self.assertEqual(start.day, 1)
  318. self.assertModule("t.shift", input="A", granularity="1 day", type="stvds")
  319. A.select()
  320. start, end = A.get_temporal_extent_as_tuple()
  321. self.assertEqual(start.year, 2001)
  322. self.assertEqual(start.month, 1)
  323. self.assertEqual(start.day, 2)
  324. self.assertModule("t.shift", input="A", granularity="-1 day", type="stvds")
  325. A.select()
  326. start, end = A.get_temporal_extent_as_tuple()
  327. self.assertEqual(start.year, 2001)
  328. self.assertEqual(start.month, 1)
  329. self.assertEqual(start.day, 1)
  330. self.assertModule("t.shift", input="A", granularity="-1 year", type="stvds")
  331. A.select()
  332. start, end = A.get_temporal_extent_as_tuple()
  333. self.assertEqual(start.year, 2000)
  334. self.assertEqual(start.month, 1)
  335. self.assertEqual(start.day, 1)
  336. self.assertModule("t.shift", input="A", granularity="6 month", type="stvds")
  337. A.select()
  338. start, end = A.get_temporal_extent_as_tuple()
  339. self.assertEqual(start.year, 2000)
  340. self.assertEqual(start.month, 7)
  341. self.assertEqual(start.day, 1)
  342. self.assertModule("t.shift", input="A", granularity="1 hour", type="stvds")
  343. A.select()
  344. start, end = A.get_temporal_extent_as_tuple()
  345. self.assertEqual(start.year, 2000)
  346. self.assertEqual(start.month, 7)
  347. self.assertEqual(start.day, 1)
  348. self.assertEqual(start.hour, 1)
  349. self.assertModule(
  350. "t.shift", input="A", granularity="-3630 seconds", type="stvds"
  351. )
  352. A.select()
  353. start, end = A.get_temporal_extent_as_tuple()
  354. self.assertEqual(start.year, 2000)
  355. self.assertEqual(start.month, 6)
  356. self.assertEqual(start.day, 30)
  357. self.assertEqual(start.hour, 23)
  358. self.assertEqual(start.minute, 59)
  359. self.assertEqual(start.second, 30)
  360. class TestShiftRelativeSTVDS(TestCase):
  361. @classmethod
  362. def setUpClass(cls):
  363. """Initiate the temporal GIS and set the region"""
  364. os.putenv("GRASS_OVERWRITE", "1")
  365. tgis.init()
  366. cls.use_temp_region()
  367. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  368. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a1")
  369. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a2")
  370. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a3")
  371. cls.runModule("v.random", quiet=True, npoints=20, seed=1, output="a4")
  372. cls.runModule(
  373. "t.create",
  374. type="stvds",
  375. temporaltype="relative",
  376. output="A",
  377. title="A test",
  378. description="A test",
  379. overwrite=True,
  380. )
  381. cls.runModule(
  382. "t.register",
  383. type="vector",
  384. input="A",
  385. maps="a1,a2,a3,a4",
  386. start="0",
  387. flags="i",
  388. increment="14",
  389. unit="days",
  390. overwrite=True,
  391. )
  392. @classmethod
  393. def tearDownClass(cls):
  394. """Remove the temporary region"""
  395. cls.del_temp_region()
  396. cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
  397. def test_1(self):
  398. A = tgis.open_old_stds("A", type="stvds")
  399. A.select()
  400. self.assertEqual(A.get_map_time(), "interval")
  401. start, end = A.get_temporal_extent_as_tuple()
  402. self.assertEqual(start, 0)
  403. self.assertModule("t.shift", input="A", granularity="1", type="stvds")
  404. A.select()
  405. start, end = A.get_temporal_extent_as_tuple()
  406. self.assertEqual(start, 1)
  407. class TestShiftAbsoluteError(TestCase):
  408. @classmethod
  409. def setUpClass(cls):
  410. """Initiate the temporal GIS and set the region"""
  411. os.putenv("GRASS_OVERWRITE", "1")
  412. tgis.init()
  413. cls.use_temp_region()
  414. cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
  415. cls.runModule("r.mapcalc", expression="a1 = 100", overwrite=True)
  416. cls.runModule("r.mapcalc", expression="a2 = 200", overwrite=True)
  417. cls.runModule("r.mapcalc", expression="a3 = 300", overwrite=True)
  418. cls.runModule("r.mapcalc", expression="a4 = 400", overwrite=True)
  419. cls.runModule(
  420. "t.create",
  421. type="strds",
  422. temporaltype="relative",
  423. output="A",
  424. title="A test",
  425. description="A test",
  426. overwrite=True,
  427. )
  428. cls.runModule(
  429. "t.register",
  430. type="raster",
  431. input="A",
  432. maps="a1,a2,a3,a4",
  433. start="0",
  434. increment="14",
  435. unit="days",
  436. overwrite=True,
  437. )
  438. @classmethod
  439. def tearDownClass(cls):
  440. """Remove the temporary region"""
  441. cls.del_temp_region()
  442. cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
  443. def test_1(self):
  444. pass
  445. # self.assterModuleFail()
  446. if __name__ == "__main__":
  447. from grass.gunittest.main import test
  448. test()