[GRASS-SVN] r73791 - in grass/trunk/scripts: . r.mapcalc.simple r.mapcalc.simple/testsuite
svn_grass at osgeo.org
svn_grass at osgeo.org
Mon Dec 10 22:28:51 PST 2018
Author: neteler
Date: 2018-12-10 22:28:51 -0800 (Mon, 10 Dec 2018)
New Revision: 73791
Added:
grass/trunk/scripts/r.mapcalc.simple/
grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.html
grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.py
grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalcsimple.py
Removed:
grass/trunk/scripts/r.mapcalc.simple/r.mapcalculator.html
grass/trunk/scripts/r.mapcalc.simple/r.mapcalculator.py
grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalculator.py
Modified:
grass/trunk/scripts/Makefile
grass/trunk/scripts/r.mapcalc.simple/Makefile
Log:
r.mapcalc.simple: added from https://svn.osgeo.org/grass/sandbox/wenzeslaus/r.mapcalculator as r.mapcalc.simple (trac #3431)
Modified: grass/trunk/scripts/Makefile
===================================================================
--- grass/trunk/scripts/Makefile 2018-12-11 02:56:25 UTC (rev 73790)
+++ grass/trunk/scripts/Makefile 2018-12-11 06:28:51 UTC (rev 73791)
@@ -40,6 +40,7 @@
r.in.aster \
r.in.srtm \
r.in.wms \
+ r.mapcalc.simple \
r.mask \
r.out.xyz \
r.pack \
Modified: grass/trunk/scripts/r.mapcalc.simple/Makefile
===================================================================
--- sandbox/wenzeslaus/r.mapcalculator/Makefile 2018-12-11 02:56:25 UTC (rev 73790)
+++ grass/trunk/scripts/r.mapcalc.simple/Makefile 2018-12-11 06:28:51 UTC (rev 73791)
@@ -1,6 +1,6 @@
MODULE_TOPDIR = ../..
-PGM = r.mapcalculator
+PGM = r.mapcalc.simple
include $(MODULE_TOPDIR)/include/Make/Script.make
Copied: grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.html (from rev 73790, sandbox/wenzeslaus/r.mapcalculator/r.mapcalculator.html)
===================================================================
--- grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.html (rev 0)
+++ grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.html 2018-12-11 06:28:51 UTC (rev 73791)
@@ -0,0 +1,121 @@
+<h2>DESCRIPTION</h2>
+
+<em>r.mapcalc.simple</em> provides a wrapper to <em>r.mapcalc</em>.
+Up to 6 maps can be combined using simple expressions.
+
+<p>
+The general syntax for the <b>expression</b> follows
+<em><a href="r.mapcalc.html">r.mapcalc</a></em> expression format,
+for example, <tt>A + B</tt> or <tt>exp(A + B)</tt> are valid.
+The variables A, B, ..., F represent raster maps which are provided
+as options <b>a</b>, <b>b</b>, ..., <b>f</b>.
+
+<p>
+The result name, i.e. the output raster map, is provided using the
+option <b>output</b> and, unlike <em>r.mapcalc</em> it is not part
+of the expression.
+
+<p>
+This module is meant for convenience (for users and programmers) while
+the <em>r.mapcalc</em> module is a better choice for more complex
+expressions and advanced usage.
+
+
+<h2>NOTES</h2>
+
+Differences to <em>r.mapcalc</em> module:
+
+<ul>
+ <li>The input raster map names and the output map raster name are
+ separate from the expression (formula) which uses generic
+ variable names (A, B, C, ...).
+ <li>The output raster name is not included in the expression.
+ <li>The expression is expected to be a single short one liner
+ without the function <tt>eval()</tt>.
+</ul>
+
+Differences to <em>r.mapcalc.simple</em> module in GRASS GIS 5 and 6:
+
+<ul>
+ <li>The primary purpose is not being a GUI front end to
+ <em>r.mapcalc</em>, but a wrapper which allows easy building of
+ interfaces to <em>r.mapcalc</em> (including GUIs).
+ <li>Whitespace (most notably spaces) are allowed
+ (in the same way as for <em>r.mapcalc</em>).
+ <li>The variable names are case-insensitive to allow the original
+ uppercase as well as lowercase as in option names
+ (unless the <b>-c</b> flag is used).
+ <li>Option names for each map are just one letter (not amap, etc.).
+ <li>Output option name is <b>output</b> as for other modules
+ (not outfile).
+ <li>Raster map names can be optionally quoted (the <b>-q</b> flag).
+ <li>There is no expert mode
+ (which was just running <em>r.mapcalc</em>).
+ <li>The <b>expression</b> option is first, so it is possible to
+ omit its name in the command line
+ (just like with <em>r.mapcalc</em>).
+ <li>Overwriting of outputs is done in the same way as with other
+ modules, so there is no flag to not overwrite outputs.
+</ul>
+
+
+<h2>EXAMPLES</h2>
+
+
+<h3>Basic examples</h3>
+
+<div class="code"><pre>
+r.mapcalc.simple expression="0" output=zeros
+r.mapcalc.simple expression="1" output=ones
+r.mapcalc.simple expression="2" output=twos
+</pre></div>
+
+<div class="code"><pre>
+r.mapcalc.simple expression="A + B + C" a=zeros b=ones c=twos output=result1
+</pre></div>
+
+<div class="code"><pre>
+r.mapcalc.simple expression="(A * B) / 2 + 3 * C" a=zeros b=ones c=twos output=result2
+</pre></div>
+
+
+<h3>Example expressions</h3>
+
+Addition:
+
+<div class="code"><pre>
+A + B
+</pre></div>
+
+No spaces around operators are not recommended for readability,
+but allowed in the expression:
+
+<div class="code"><pre>
+A+B
+</pre></div>
+
+More complex expression with a function:
+
+<p>
+<div class="code"><pre>
+exp(A+C)+(B-2)*7
+</pre></div>
+
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.mapcalc.html">r.mapcalc</a>,
+<a href="r3.mapcalc.html">r3.mapcalc</a>,
+<a href="t.rast.mapcalc.html">t.rast.mapcalc</a>,
+<a href="g.region.html">g.region</a>
+</em>
+
+
+<h2>AUTHORS</h2>
+
+Vaclav Petras, <a href="https://geospatial.ncsu.edu/geoforall/">NCSU GeoForAll Lab</a><br>
+Michael Barton, Arizona State University (updated to GRASS 5.7)<br>
+R. Brunzema (original 5.0 Bash version)
+
+<p><i>Last changed: $Date$</i>
Copied: grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.py (from rev 73790, sandbox/wenzeslaus/r.mapcalculator/r.mapcalculator.py)
===================================================================
--- grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.py (rev 0)
+++ grass/trunk/scripts/r.mapcalc.simple/r.mapcalc.simple.py 2018-12-11 06:28:51 UTC (rev 73791)
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+
+"""
+MODULE: r.mapcalc.simple
+
+AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
+ R. Brunzema <r.brunzema web de> (original 5.0 version)
+ Michael Barton <michael.barton asu edu> (update to GRASS 5.7)
+ Huidae Cho <grass4u gmail com> (removed bashism)
+
+PURPOSE: Provides wrapper friendly wrapper to r.mapcalc
+
+COPYRIGHT: (C) 2018 by Vaclav Petras and 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.
+"""
+
+#%module
+#% description: Calculate new raster map from a r.mapcalc expression
+#% keyword: raster
+#% keyword: algebra
+#%end
+#%option
+#% key: expression
+#% type: string
+#% description: Formula (e.g. A-B or A*C+B)
+#% required : yes
+#%end
+#%option G_OPT_R_INPUT
+#% key: a
+#% description: A
+#% required : no
+#%end
+#%option G_OPT_R_INPUT
+#% key: b
+#% description: B
+#% required : no
+#%end
+#%option G_OPT_R_INPUT
+#% key: c
+#% description: C
+#% required : no
+#%end
+#%option G_OPT_R_INPUT
+#% key: d
+#% description: D
+#% required : no
+#%end
+#%option G_OPT_R_INPUT
+#% key: e
+#% description: E
+#% required : no
+#%end
+#%option G_OPT_R_INPUT
+#% key: f
+#% description: F
+#% required : no
+#%end
+#%option
+#% key: output
+#% description: Name for output raster map
+#% required : yes
+#%end
+#%option
+#% key: seed
+#% type: integer
+#% required: no
+#% multiple: no
+#% description: Seed for rand() function
+#%end
+#%flag
+#% key: s
+#% description: Generate random seed (result is non-deterministic)
+#%end
+#%flag
+#% key: q
+#% description: Quote the map names
+#%end
+#%flag
+#% key: c
+#% description: Case sensitive variable names
+#%end
+
+import sys
+import re
+
+import grass.script as gs
+
+
+def name_quote(name):
+ return '"{}"'.format(name)
+
+
+def main():
+ options, flags = gs.parser()
+ expr = options['expression']
+ if not expr:
+ gs.fatal(_("The expression is an empty string"))
+ output = options['output']
+ quote = flags['q']
+ re_flags = 0
+ if flags['c']:
+ re_flags = re.IGNORECASE
+
+ if quote:
+ output = name_quote(output)
+
+ seed = None
+ if options['seed']:
+ seed = options['seed']
+ elif flags['s']:
+ seed = 'auto'
+
+ variables = []
+ for key in "ABCDEF":
+ name = options[key.lower()]
+ if name:
+ if quote:
+ name = name_quote(name)
+ variables.append((key, name))
+
+ for key, name in variables:
+ find = r'([^a-zA-Z0-9]|^){key}([^a-zA-Z0-9]|$)'.format(key=key)
+ replace = r'\1{}\2'.format(name)
+ # we need to do the substitution twice because we are matching
+ # also the char before and after which fails when there is only
+ # one char between the two usages of the same var (e.g. A*A)
+ expr = re.sub(find, replace, expr, flags=re_flags)
+ expr = re.sub(find, replace, expr, flags=re_flags)
+
+ expr = '{lhs} = {rhs}'.format(lhs=output, rhs=expr)
+ gs.verbose(_("Expression: {}").format(expr))
+ gs.mapcalc(expr, seed=seed)
+ # g.message -e "Calculating $GIS_OPT_OUTFILE. Try expert mode."
+
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
+
Deleted: grass/trunk/scripts/r.mapcalc.simple/r.mapcalculator.html
===================================================================
--- sandbox/wenzeslaus/r.mapcalculator/r.mapcalculator.html 2018-12-11 02:56:25 UTC (rev 73790)
+++ grass/trunk/scripts/r.mapcalc.simple/r.mapcalculator.html 2018-12-11 06:28:51 UTC (rev 73791)
@@ -1,121 +0,0 @@
-<h2>DESCRIPTION</h2>
-
-<em>r.mapcalculator</em> provides a wrapper to <em>r.mapcalc</em>.
-Up to 6 maps can be combined using simple expressions.
-
-<p>
-The general syntax for the <b>expression</b> follows
-<em><a href="r.mapcalc.html">r.mapcalc</a></em> expression format,
-for example, <tt>A + B</tt> or <tt>exp(A + B)</tt> are valid.
-The variables A, B, ..., F represent raster maps which are provided
-as options <b>a</b>, <b>b</b>, ..., <b>f</b>.
-
-<p>
-The result name, i.e. the output raster map, is provided using the
-option <b>output</b> and, unlike <em>r.mapcalc</em> it is not part
-of the expression.
-
-<p>
-This module is meant for convenience (for users and programmers) while
-the <em>r.mapcalc</em> module is a better choice for more complex
-expressions and advanced usage.
-
-
-<h2>NOTES</h2>
-
-Differences to <em>r.mapcalc</em> module:
-
-<ul>
- <li>The input raster map names and the output map raster name are
- separate from the expression (formula) which uses generic
- variable names (A, B, C, ...).
- <li>The output raster name is not included in the expression.
- <li>The expression is expected to be a single short one liner
- without the function <tt>eval()</tt>.
-</ul>
-
-Differences to <em>r.mapcalculator</em> module in GRASS GIS 5 and 6:
-
-<ul>
- <li>The primary purpose is not being a GUI front end to
- <em>r.mapcalc</em>, but a wrapper which allows easy building of
- interfaces to <em>r.mapcalc</em> (including GUIs).
- <li>Whitespace (most notably spaces) are allowed
- (in the same way as for <em>r.mapcalc</em>).
- <li>The variable names are case-insensitive to allow the original
- uppercase as well as lowercase as in option names
- (unless the <b>-c</b> flag is used).
- <li>Option names for each map are just one letter (not amap, etc.).
- <li>Output option name is <b>output</b> as for other modules
- (not outfile).
- <li>Raster map names can be optionally quoted (the <b>-q</b> flag).
- <li>There is no expert mode
- (which was just running <em>r.mapcalc</em>).
- <li>The <b>expression</b> option is first, so it is possible to
- omit its name in the command line
- (just like with <em>r.mapcalc</em>).
- <li>Overwriting of outputs is done in the same way as with other
- modules, so there is no flag to not overwrite outputs.
-</ul>
-
-
-<h2>EXAMPLES</h2>
-
-
-<h3>Basic examples</h3>
-
-<div class="code"><pre>
-r.mapcalculator expression="0" output=zeros
-r.mapcalculator expression="1" output=ones
-r.mapcalculator expression="2" output=twos
-</pre></div>
-
-<div class="code"><pre>
-r.mapcalculator expression="A + B + C" a=zeros b=ones c=twos output=result1
-</pre></div>
-
-<div class="code"><pre>
-r.mapcalculator expression="(A * B) / 2 + 3 * C" a=zeros b=ones c=twos output=result2
-</pre></div>
-
-
-<h3>Example expressions</h3>
-
-Addition:
-
-<div class="code"><pre>
-A + B
-</pre></div>
-
-No spaces around operators are not recommended for readability,
-but allowed in the expression:
-
-<div class="code"><pre>
-A+B
-</pre></div>
-
-More complex expression with a function:
-
-<p>
-<div class="code"><pre>
-exp(A+C)+(B-2)*7
-</pre></div>
-
-
-<h2>SEE ALSO</h2>
-
-<em>
-<a href="r.mapcalc.html">r.mapcalc</a>,
-<a href="r3.mapcalc.html">r3.mapcalc</a>,
-<a href="t.rast.mapcalc.html">t.rast.mapcalc</a>,
-<a href="g.region.html">g.region</a>
-</em>
-
-
-<h2>AUTHORS</h2>
-
-Vaclav Petras, <a href="https://geospatial.ncsu.edu/geoforall/">NCSU GeoForAll Lab</a><br>
-R. Brunzema (original 5.0 Bash version)<br>
-Michael Barton, Arizona State University (updated to GRASS 5.7)
-
-<p><i>Last changed: $Date$</i>
Deleted: grass/trunk/scripts/r.mapcalc.simple/r.mapcalculator.py
===================================================================
--- sandbox/wenzeslaus/r.mapcalculator/r.mapcalculator.py 2018-12-11 02:56:25 UTC (rev 73790)
+++ grass/trunk/scripts/r.mapcalc.simple/r.mapcalculator.py 2018-12-11 06:28:51 UTC (rev 73791)
@@ -1,143 +0,0 @@
-#!/usr/bin/env python
-
-"""
-MODULE: r.mapcalculator
-
-AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
- R. Brunzema <r.brunzema web de> (original 5.0 version)
- Michael Barton <michael.barton asu edu> (update to GRASS 5.7)
- Huidae Cho <grass4u gmail com> (removed bashism)
-
-PURPOSE: Provides wrapper friendly wrapper to r.mapcalc
-
-COPYRIGHT: (C) 2018 by Vaclav Petras and 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.
-"""
-
-#%module
-#% description: Calculate new raster map from a r.mapcalc expression
-#% keyword: raster
-#% keyword: algebra
-#%end
-#%option
-#% key: expression
-#% type: string
-#% description: Formula (e.g. A-B or A*C+B)
-#% required : yes
-#%end
-#%option G_OPT_R_INPUT
-#% key: a
-#% description: A
-#% required : no
-#%end
-#%option G_OPT_R_INPUT
-#% key: b
-#% description: B
-#% required : no
-#%end
-#%option G_OPT_R_INPUT
-#% key: c
-#% description: C
-#% required : no
-#%end
-#%option G_OPT_R_INPUT
-#% key: d
-#% description: D
-#% required : no
-#%end
-#%option G_OPT_R_INPUT
-#% key: e
-#% description: E
-#% required : no
-#%end
-#%option G_OPT_R_INPUT
-#% key: f
-#% description: F
-#% required : no
-#%end
-#%option
-#% key: output
-#% description: Name for output raster map
-#% required : yes
-#%end
-#%option
-#% key: seed
-#% type: integer
-#% required: no
-#% multiple: no
-#% description: Seed for rand() function
-#%end
-#%flag
-#% key: s
-#% description: Generate random seed (result is non-deterministic)
-#%end
-#%flag
-#% key: q
-#% description: Quote the map names
-#%end
-#%flag
-#% key: c
-#% description: Case sensitive variable names
-#%end
-
-import sys
-import re
-
-import grass.script as gs
-
-
-def name_quote(name):
- return '"{}"'.format(name)
-
-
-def main():
- options, flags = gs.parser()
- expr = options['expression']
- if not expr:
- gs.fatal(_("The expression is an empty string"))
- output = options['output']
- quote = flags['q']
- re_flags = 0
- if flags['c']:
- re_flags = re.IGNORECASE
-
- if quote:
- output = name_quote(output)
-
- seed = None
- if options['seed']:
- seed = options['seed']
- elif flags['s']:
- seed = 'auto'
-
- variables = []
- for key in "ABCDEF":
- name = options[key.lower()]
- if name:
- if quote:
- name = name_quote(name)
- variables.append((key, name))
-
- for key, name in variables:
- find = r'([^a-zA-Z0-9]|^){key}([^a-zA-Z0-9]|$)'.format(key=key)
- replace = r'\1{}\2'.format(name)
- # we need to do the substitution twice because we are matching
- # also the char before and after which fails when there is only
- # one char between the two usages of the same var (e.g. A*A)
- expr = re.sub(find, replace, expr, flags=re_flags)
- expr = re.sub(find, replace, expr, flags=re_flags)
-
- expr = '{lhs} = {rhs}'.format(lhs=output, rhs=expr)
- gs.verbose(_("Expression: {}").format(expr))
- gs.mapcalc(expr, seed=seed)
- # g.message -e "Calculating $GIS_OPT_OUTFILE. Try expert mode."
-
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main())
-
Copied: grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalcsimple.py (from rev 73790, sandbox/wenzeslaus/r.mapcalculator/testsuite/test_rmapcalculator.py)
===================================================================
--- grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalcsimple.py (rev 0)
+++ grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalcsimple.py 2018-12-11 06:28:51 UTC (rev 73791)
@@ -0,0 +1,49 @@
+"""
+Name: r.mapcalc.simple test
+Purpose: Tests r.mapcalc.simple and its flags/options.
+
+Author: Markus Neteler
+Copyright: (C) 2018 by Markus Neteler and the GRASS Development Team
+Licence: This program is free software under the GNU General Public
+ License (>=v2). Read the file COPYING that comes with GRASS
+ for details.
+"""
+from grass.gunittest.case import TestCase
+
+class TestReport(TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ """Use temporary region settings"""
+ map_input = 'elevation'
+ cls.runModule("g.region", raster=map_input)
+ cls.use_temp_region()
+
+ @classmethod
+ def tearDownClass(cls):
+ map_output1 = 'test1'
+ map_output2 = 'test2'
+ cls.runModule("g.remove", flags='f', type='raster', name=map_output1)
+ cls.runModule("g.remove", flags='f', type='raster', name=map_output2)
+ cls.del_temp_region()
+
+ def test_rmapcalcsimple(self):
+ """Testing r.mapcalc.simple"""
+ map_input = 'elevation'
+ map_output1 = 'test1'
+ map_output2 = 'test2'
+
+ # test 1
+ self.assertModule('r.mapcalc.simple', expression='0', output=map_output1)
+ self.assertRasterMinMax(map=map_output1, refmin=0, refmax=0,
+ msg="Result must be 0 for all pixels")
+
+ # test 2
+ formula='if(%s > 2000, 1, 0)' % map_input # expected to be 0
+ self.assertModule('r.mapcalc.simple', expression=formula, output=map_output2)
+ self.assertRasterMinMax(map=map_output2, refmin=0, refmax=0,
+ msg="Result must be 0 for all pixels")
+
+if __name__ == '__main__':
+ from grass.gunittest.main import test
+ test()
Deleted: grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalculator.py
===================================================================
--- sandbox/wenzeslaus/r.mapcalculator/testsuite/test_rmapcalculator.py 2018-12-11 02:56:25 UTC (rev 73790)
+++ grass/trunk/scripts/r.mapcalc.simple/testsuite/test_rmapcalculator.py 2018-12-11 06:28:51 UTC (rev 73791)
@@ -1,49 +0,0 @@
-"""
-Name: r.mapcalculator test
-Purpose: Tests r.mapcalculator and its flags/options.
-
-Author: Markus Neteler
-Copyright: (C) 2018 by Markus Neteler and the GRASS Development Team
-Licence: This program is free software under the GNU General Public
- License (>=v2). Read the file COPYING that comes with GRASS
- for details.
-"""
-from grass.gunittest.case import TestCase
-
-class TestReport(TestCase):
-
- @classmethod
- def setUpClass(cls):
- """Use temporary region settings"""
- map_input = 'elevation'
- cls.runModule("g.region", raster=map_input)
- cls.use_temp_region()
-
- @classmethod
- def tearDownClass(cls):
- map_output1 = 'test1'
- map_output2 = 'test2'
- cls.runModule("g.remove", flags='f', type='raster', name=map_output1)
- cls.runModule("g.remove", flags='f', type='raster', name=map_output2)
- cls.del_temp_region()
-
- def test_rmapcalculator(self):
- """Testing r.mapcalculator"""
- map_input = 'elevation'
- map_output1 = 'test1'
- map_output2 = 'test2'
-
- # test 1
- self.assertModule('r.mapcalculator', expression='0', output=map_output1)
- self.assertRasterMinMax(map=map_output1, refmin=0, refmax=0,
- msg="Result must be 0 for all pixels")
-
- # test 2
- formula='if(%s > 2000, 1, 0)' % map_input # expected to be 0
- self.assertModule('r.mapcalculator', expression=formula, output=map_output2)
- self.assertRasterMinMax(map=map_output2, refmin=0, refmax=0,
- msg="Result must be 0 for all pixels")
-
-if __name__ == '__main__':
- from grass.gunittest.main import test
- test()
More information about the grass-commit
mailing list