[GRASS-user] Practical examples for t.select

nik at nikosalexandris.net nik at nikosalexandris.net
Thu Apr 15 07:44:21 PDT 2021


Dear all,

would anyone be so kind to provide a simple example with a 
`t.rast.algebra` expression that involves

- the if() conditional call and the inverse selection operator, ie.: 
{!:,equal}
- if() and {!:,equal,r}


I cannot find a way to build a valid expression that includes both of 
these.

The following works:
```
t.rast.algebra expression='test = if({equal}, A1 >= -30, A2)' base=test 
nprocs=40
```

However, adding the inverse selection operator, won't do:
```
t.rast.algebra expression='test = if({!:,equal}, A1 >= -30, A2)' 
base=test3 nprocs=40 --o
Traceback (most recent call last):
   File "/osgeo/grass/dist.x86_64-pc-linux-gnu/scripts/t.rast.algebra", 
line 132, in <module>
     sys.exit(main())
   File "/osgeo/grass/dist.x86_64-pc-linux-gnu/scripts/t.rast.algebra", 
line 124, in main
     pc = p.parse(expression, basename, grass.script.overwrite())
   File 
"/osgeo/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/temporal_raster_algebra.py", 
line 110, in parse
     self.parser.parse(expression)
   File 
"/home/nik/code/miniconda3/envs/py385/lib/python3.8/site-packages/ply/yacc.py", 
line 333, in parse
     return self.parseopt_notrack(input, lexer, debug, tracking, 
tokenfunc)
   File 
"/home/nik/code/miniconda3/envs/py385/lib/python3.8/site-packages/ply/yacc.py", 
line 1201, in parseopt_notrack
     tok = call_errorfunc(self.errorfunc, errtoken, self)
   File 
"/home/nik/code/miniconda3/envs/py385/lib/python3.8/site-packages/ply/yacc.py", 
line 192, in call_errorfunc
     r = errorfunc(token)
   File 
"/osgeo/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/temporal_algebra.py", 
line 3042, in p_error
     raise SyntaxError("syntax error on line %d, position %i token %s 
near '%s' expression '%s'" %
SyntaxError: syntax error on line 1, position 11 token T_SELECT_OPERATOR 
near '{!:,equal}' expression 'test = if({!:,equal}, A1 >= -30, A2)'
```

Even the theoretically equivalent expression (to the first one) won't 
do:
```
→ t.rast.algebra expression='test = if({:,equal}, A1 >= -30, A2)' --o 
base=test3 nprocs=40
Traceback (most recent call last):
   File "/osgeo/grass/dist.x86_64-pc-linux-gnu/scripts/t.rast.algebra", 
line 132, in <module>
     sys.exit(main())
   File "/osgeo/grass/dist.x86_64-pc-linux-gnu/scripts/t.rast.algebra", 
line 124, in main
     pc = p.parse(expression, basename, grass.script.overwrite())
   File 
"/osgeo/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/temporal_raster_algebra.py", 
line 110, in parse
     self.parser.parse(expression)
   File 
"/home/nik/code/miniconda3/envs/py385/lib/python3.8/site-packages/ply/yacc.py", 
line 333, in parse
     return self.parseopt_notrack(input, lexer, debug, tracking, 
tokenfunc)
   File 
"/home/nik/code/miniconda3/envs/py385/lib/python3.8/site-packages/ply/yacc.py", 
line 1201, in parseopt_notrack
     tok = call_errorfunc(self.errorfunc, errtoken, self)
   File 
"/home/nik/code/miniconda3/envs/py385/lib/python3.8/site-packages/ply/yacc.py", 
line 192, in call_errorfunc
     r = errorfunc(token)
   File 
"/osgeo/grass/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/temporal_algebra.py", 
line 3042, in p_error
     raise SyntaxError("syntax error on line %d, position %i token %s 
near '%s' expression '%s'" %
SyntaxError: syntax error on line 1, position 11 token T_SELECT_OPERATOR 
near '{:,equal}' expression 'test3 = if({:,equal}, A1 >= -30, A2)'
```


More information about the grass-user mailing list