[GRASS-SVN] r62703 - in grass/trunk/temporal: t.rast.algebra t.rast.algebra/testsuite t.rast.extract/testsuite t.rast3d.algebra t.rast3d.algebra/testsuite t.rast3d.extract/testsuite
svn_grass at osgeo.org
svn_grass at osgeo.org
Tue Nov 11 04:31:11 PST 2014
Author: huhabla
Date: 2014-11-11 04:31:11 -0800 (Tue, 11 Nov 2014)
New Revision: 62703
Added:
grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py
grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py
grass/trunk/temporal/t.rast3d.extract/testsuite/test_extract.py
Modified:
grass/trunk/temporal/t.rast.algebra/t.rast.algebra.py
grass/trunk/temporal/t.rast.extract/testsuite/test_extract.py
grass/trunk/temporal/t.rast3d.algebra/t.rast3d.algebra.py
grass/trunk/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py
Log:
temporal modules: More tests; enabled temporal granularity algebra in t.rast3d.algebra
Modified: grass/trunk/temporal/t.rast.algebra/t.rast.algebra.py
===================================================================
--- grass/trunk/temporal/t.rast.algebra/t.rast.algebra.py 2014-11-11 11:31:02 UTC (rev 62702)
+++ grass/trunk/temporal/t.rast.algebra/t.rast.algebra.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -87,7 +87,8 @@
p = tgis.TemporalRasterAlgebraParser(run = True, debug=False, spatial = spatial, nprocs = nprocs, register_null = register_null)
if granularity:
- p.setup_common_granularity(expression=expression, lexer = tgis.TemporalRasterAlgebraLexer())
+ if not p.setup_common_granularity(expression=expression, lexer = tgis.TemporalRasterAlgebraLexer()):
+ grass.script.fatal(_("Unable to process the expression in granularity algebra mode"))
p.parse(expression, basename, grass.script.overwrite())
Added: grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py
===================================================================
--- grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py (rev 0)
+++ grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -0,0 +1,42 @@
+"""
+(C) 2013 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+
+import datetime
+import os
+import grass.script
+import grass.temporal as tgis
+import grass.gunittest as gunittest
+
+class TestTRastAlgebraFails(gunittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ """Initiate the temporal GIS and set the region
+ """
+ cls.use_temp_region()
+ cls.runModule("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
+ cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+ @classmethod
+ def tearDownClass(cls):
+ """Remove the temporary region
+ """
+ cls.del_temp_region()
+
+ def test_error_handling(self):
+ # Syntax error
+ self.assertModuleFail("t.rast.algebra", expression="R == A {+,equal| precedes| follows,l} B", basename="r")
+ # No STRDS
+ self.assertModuleFail("t.rast.algebra", expression="R = NoSTRDS + NoSTRDS", basename="r")
+ # No basename
+ self.assertModuleFail("t.rast.algebra", expression="R = A + B")
+
+
+if __name__ == '__main__':
+ gunittest.test()
Added: grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py
===================================================================
--- grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py (rev 0)
+++ grass/trunk/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -0,0 +1,63 @@
+"""
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert and Thomas Leppelt
+"""
+
+import datetime
+import os
+import grass.script
+import grass.temporal as tgis
+import grass.gunittest as gunittest
+
+class TestTRastAlgebraGranularityFails(gunittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ """Initiate the temporal GIS and set the region
+ """
+ os.putenv("GRASS_OVERWRITE", "1")
+ tgis.init(True) # Raise on error instead of exit(1)
+ cls.use_temp_region()
+ 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)
+
+ cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 7")
+ cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 8")
+
+
+ tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
+ title="A", descr="A", semantic="field", overwrite=True)
+
+ tgis.register_maps_in_space_time_dataset(type="rast", name="A", maps="a1",
+ start="2001-02-01", end="2001-04-01", interval=True)
+ tgis.register_maps_in_space_time_dataset(type="rast", name="A", maps="a2",
+ start="2001-03-01", end="2001-05-01", interval=True)
+
+ @classmethod
+ def tearDownClass(cls):
+ """Remove the temporary region
+ """
+ cls.runModule("t.remove", flags="rf", inputs="A", quiet=True)
+ cls.runModule("t.unregister", maps="singletmap", quiet=True)
+ cls.del_temp_region()
+
+ def test_error_handling(self):
+ # Syntax error
+ self.assertModuleFail("t.rast.algebra", flags="g", expression="R = A {+,equal| precedes| follows,l A", basename="r")
+ # Syntax error
+ self.assertModuleFail("t.rast.algebra", flags="g", expression="R = A {+,equal| precedes| follows,l} A", basename="r")
+ # Syntax error
+ self.assertModuleFail("t.rast.algebra", flags="g", expression="R == A + A", basename="r")
+ # No STRDS
+ self.assertModuleFail("t.rast.algebra", flags="g", expression="R = NoSTRDS + NoSTRDS", basename="r")
+ # No basename
+ self.assertModuleFail("t.rast.algebra", flags="g", expression="R = A + A")
+ # Invalid temporal topology
+ self.assertModuleFail("t.rast.algebra", flags="g", expression="R = A + A", basename="r")
+
+if __name__ == '__main__':
+ gunittest.test()
Modified: grass/trunk/temporal/t.rast.extract/testsuite/test_extract.py
===================================================================
--- grass/trunk/temporal/t.rast.extract/testsuite/test_extract.py 2014-11-11 11:31:02 UTC (rev 62702)
+++ grass/trunk/temporal/t.rast.extract/testsuite/test_extract.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -17,7 +17,7 @@
@classmethod
def setUpClass(cls):
- """!Initiate the temporal GIS and set the region
+ """Initiate the temporal GIS and set the region
"""
cls.use_temp_region()
cls.runModule("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
@@ -25,7 +25,7 @@
@classmethod
def tearDownClass(cls):
- """!Remove the temporary region
+ """Remove the temporary region
"""
cls.del_temp_region()
@@ -151,7 +151,7 @@
@classmethod
def setUpClass(cls):
- """!Initiate the temporal GIS and set the region
+ """Initiate the temporal GIS and set the region
"""
cls.use_temp_region()
cls.runModule("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
@@ -159,7 +159,7 @@
@classmethod
def tearDownClass(cls):
- """!Remove the temporary region
+ """Remove the temporary region
"""
cls.del_temp_region()
Modified: grass/trunk/temporal/t.rast3d.algebra/t.rast3d.algebra.py
===================================================================
--- grass/trunk/temporal/t.rast3d.algebra/t.rast3d.algebra.py 2014-11-11 11:31:02 UTC (rev 62702)
+++ grass/trunk/temporal/t.rast3d.algebra/t.rast3d.algebra.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -56,7 +56,12 @@
#% description: Register Null maps
#%end
+#%flag
+#% key: g
+#% description: Use granularity sampling instead of the temporal topology approach
+#%end
+
import grass.script
import grass.temporal as tgis
import sys
@@ -67,6 +72,7 @@
nprocs = options["nprocs"]
spatial = flags["s"]
register_null = flags["n"]
+ granularity = flags["g"]
# Check for PLY istallation
try:
@@ -79,6 +85,11 @@
tgis.init(True)
p = tgis.TemporalRaster3DAlgebraParser(run = True, debug=False, spatial = spatial, nprocs = nprocs, register_null = register_null)
+
+ if granularity:
+ if not p.setup_common_granularity(expression=expression, stdstype = 'str3ds', lexer = tgis.TemporalRasterAlgebraLexer()):
+ grass.script.fatal(_("Unable to process the expression in granularity algebra mode"))
+
p.parse(expression, basename, grass.script.overwrite())
if __name__ == "__main__":
Modified: grass/trunk/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py
===================================================================
--- grass/trunk/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py 2014-11-11 11:31:02 UTC (rev 62702)
+++ grass/trunk/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -77,6 +77,49 @@
self.assertEqual(start, datetime.datetime(2001, 1, 2))
self.assertEqual(end, datetime.datetime(2001, 1, 4))
+ def test_temporal_neighbors_granularity(self):
+ """Simple temporal neighborhood computation test with granularity algebra"""
+
+ self.assertModule("t.rast3d.algebra", flags="g", expression='D = A[0,0,0,-1] + A[0,0,0,1]',
+ basename="d")
+
+ D = tgis.open_old_stds("D", type="str3ds")
+
+ self.assertEqual(D.metadata.get_number_of_maps(), 2)
+ self.assertEqual(D.metadata.get_min_min(), 4) # 1 + 3
+ self.assertEqual(D.metadata.get_max_max(), 6) # 2 + 4
+ start, end = D.get_absolute_time()
+ self.assertEqual(start, datetime.datetime(2001, 1, 2))
+ self.assertEqual(end, datetime.datetime(2001, 1, 4))
+
+
+class TestTRast3dAlgebraFails(gunittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ """Set the region
+ """
+ cls.use_temp_region()
+ cls.runModule("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
+ cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+ @classmethod
+ def tearDownClass(cls):
+ """Remove the temporary region
+ """
+ cls.del_temp_region()
+
+ def test_error_handling(self):
+ # Syntax error
+ self.assertModuleFail("t.rast3d.algebra", expression="R = A {+,equal| precedes| follows,l B", basename="r")
+ # Granularity syntax error
+ self.assertModuleFail("t.rast3d.algebra", flags="g", expression="R = A {+,equal| precedes| follows,l} B", basename="r")
+ # No STRDS
+ self.assertModuleFail("t.rast3d.algebra", expression="R = NoSTR3DS + NoSTR3DS", basename="r")
+ # No basename
+ self.assertModuleFail("t.rast3d.algebra", expression="R = A + B")
+
+
if __name__ == '__main__':
grass.gunittest.test()
Added: grass/trunk/temporal/t.rast3d.extract/testsuite/test_extract.py
===================================================================
--- grass/trunk/temporal/t.rast3d.extract/testsuite/test_extract.py (rev 0)
+++ grass/trunk/temporal/t.rast3d.extract/testsuite/test_extract.py 2014-11-11 12:31:11 UTC (rev 62703)
@@ -0,0 +1,146 @@
+"""Test t.rast3d.extract
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+
+import grass.pygrass.modules as pymod
+import subprocess
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestRaster3dExtraction(TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ """Initiate the temporal GIS and set the region
+ """
+ cls.use_temp_region()
+ cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+ @classmethod
+ def tearDownClass(cls):
+ """Remove the temporary region
+ """
+ cls.del_temp_region()
+
+ def setUp(self):
+ """Create input data for transient groundwater flow computation
+ """
+ # Use always the current mapset as temporal database
+ self.runModule("r3.mapcalc", expression="a1 = 100", overwrite=True)
+ self.runModule("r3.mapcalc", expression="a2 = 200", overwrite=True)
+ self.runModule("r3.mapcalc", expression="a3 = 300", overwrite=True)
+ self.runModule("r3.mapcalc", expression="a4 = 400", overwrite=True)
+ self.runModule("r3.mapcalc", expression="a5 = 500", overwrite=True)
+ self.runModule("r3.mapcalc", expression="a6 = 600", overwrite=True)
+
+ self.runModule("t.create", type="str3ds", temporaltype="absolute",
+ output="A", title="A test", description="A test", overwrite=True)
+ self.runModule("t.register", flags="i", type="rast3d", input="A",
+ maps="a1,a2,a3,a4,a5,a6",
+ start="2001-01-01", increment="3 months", overwrite=True)
+
+ def tearDown(self):
+ """Remove generated data"""
+ self.runModule("t.remove", flags="rf", type="str3ds",
+ inputs="A,B")
+
+ def test_selection(self):
+ """Perform a simple selection by datetime"""
+ self.assertModule("t.rast3d.extract", input="A", output="B",
+ where="start_time > '2001-06-01'")
+
+ #self.assertModule("t.info", flags="g", input="B")
+
+ tinfo_string="""start_time=2001-07-01 00:00:00
+ end_time=2002-07-01 00:00:00
+ granularity=3 months
+ map_time=interval
+ aggregation_type=None
+ number_of_maps=4
+ min_min=300.0
+ min_max=600.0
+ max_min=300.0
+ max_max=600.0"""
+
+ info = SimpleModule("t.info", flags="g", type="str3ds", input="B")
+ self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+ def test_selection_and_expression(self):
+ """Perform a selection by datetime and a r3.mapcalc expression"""
+ self.assertModule("t.rast3d.extract", input="A", output="B",
+ where="start_time > '2001-06-01'",
+ expression=" if(A > 400, A, null())",
+ basename="b", nprocs=2, overwrite=True)
+
+ #self.assertModule("t.info", flags="g", input="B")
+
+ tinfo_string="""start_time=2002-01-01 00:00:00
+ end_time=2002-07-01 00:00:00
+ granularity=3 months
+ map_time=interval
+ aggregation_type=None
+ number_of_maps=2
+ min_min=500.0
+ min_max=600.0
+ max_min=500.0
+ max_max=600.0"""
+
+ info = SimpleModule("t.info", flags="g", type="str3ds", input="B")
+ self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+ def test_expression_with_empty_maps(self):
+ """Perform r3.mapcalc expression and register empty maps"""
+ self.assertModule("t.rast3d.extract", flags="n", input="A", output="B",
+ expression=" if(A > 400, A, null())",
+ basename="b", nprocs=2, overwrite=True)
+
+ #self.assertModule("t.info", flags="g", input="B")
+
+ tinfo_string="""start_time=2001-01-01 00:00:00
+ end_time=2002-07-01 00:00:00
+ granularity=3 months
+ map_time=interval
+ aggregation_type=None
+ number_of_maps=6
+ min_min=500.0
+ min_max=600.0
+ max_min=500.0
+ max_max=600.0"""
+
+ info = SimpleModule("t.info", flags="g", type="str3ds", input="B")
+ self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+class TestRaster3dExtractionFails(TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ """Initiate the temporal GIS and set the region
+ """
+ cls.use_temp_region()
+ cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+ @classmethod
+ def tearDownClass(cls):
+ """Remove the temporary region
+ """
+ cls.del_temp_region()
+
+ def test_error_handling(self):
+ """Perform r3.mapcalc expression and register empty maps"""
+ # No input
+ self.assertModuleFail("t.rast3d.extract", output="B", basename="b")
+ # No output
+ self.assertModuleFail("t.rast3d.extract", input="A", basename="b")
+ # No basename
+ self.assertModuleFail("t.rast3d.extract", input="A", output="B",
+ expression=" if(A > 400, A, null())")
+
+if __name__ == '__main__':
+ from grass.gunittest.main import test
+ test()
More information about the grass-commit
mailing list