[GRASS-dev] [GRASS GIS] #3682: t.rast.algebra: Error wrong type of input

#3682: t.rast.algebra: Error wrong type of input
----------------------------+-------------------------
Reporter: veroandreo | Owner: grass-dev@…
     Type: defect | Status: new
Priority: normal | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Keywords: t.rast.algebra | CPU: Unspecified
Platform: Unspecified |
----------------------------+-------------------------
When running any expression with G7:t.rast.algebra in trunk, I get ERROR:
Wrong type of input. Here's how to reproduce:

{{{
for map in `seq 1 10` ; do r.mapcalc "prueba_${map} = ${map}" ; done
t.create output=A type=strds temporaltype=absolute title="test"
description="test"
t.register input=A maps=`g.list rast pat=prueba* sep=, map=.`
start="2000-01-01" increment="1 months" -i

t.rast.algebra expression="test = (A[1] - A[0]) / 2" basename=test
suffix=gran
t.rast.algebra expression="test = A * 2" basename=test suffix=gran
}}}

Both algebra commands yield the following error:

{{{
ERROR: Wrong type of input A
Traceback (most recent call last):
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/scripts/t.rast.algebra", line 132, in <module>
     sys.exit(main())
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/scripts/t.rast.algebra", line 124, in main
     pc = p.parse(expression, basename, grass.script.overwrite())
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_raster_algebra.py", line 112, in
parse
     self.parser.parse(expression)
   File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 331, in parse
     return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
   File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 1118, in
parseopt_notrack
     p.callable(pslice)
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_raster_algebra.py", line 137, in
p_ts_neighbour_operation
     maplist = self.check_stds(t[1])
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_algebra.py", line 1226, in
check_stds
     self.msgr.fatal(_("Wrong type of input " + str(input)))
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/pygrass/messages/__init__.py", line 269, in fatal
     raise FatalError(message)
grass.exceptions.FatalError: Wrong type of input A
}}}

Is this related to the python3 encoding issues? It works fine in 76
relbranch.

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: new
  Priority: normal | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------
Changes (by neteler):

* keywords: t.rast.algebra => t.rast.algebra, python3

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:1&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: new
  Priority: major | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------
Changes (by veroandreo):

* priority: normal => major

Comment:

Increasing to major since the error makes it impossible to use
G7:t.rast.algebra in trunk

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:2&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: new
  Priority: major | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------
Description changed by neteler:

Old description:

When running any expression with G7:t.rast.algebra in trunk, I get ERROR:
Wrong type of input. Here's how to reproduce:

{{{
for map in `seq 1 10` ; do r.mapcalc "prueba_${map} = ${map}" ; done
t.create output=A type=strds temporaltype=absolute title="test"
description="test"
t.register input=A maps=`g.list rast pat=prueba* sep=, map=.`
start="2000-01-01" increment="1 months" -i

t.rast.algebra expression="test = (A[1] - A[0]) / 2" basename=test
suffix=gran
t.rast.algebra expression="test = A * 2" basename=test suffix=gran
}}}

Both algebra commands yield the following error:

{{{
ERROR: Wrong type of input A
Traceback (most recent call last):
  File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/scripts/t.rast.algebra", line 132, in <module>
    sys.exit(main())
  File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/scripts/t.rast.algebra", line 124, in main
    pc = p.parse(expression, basename, grass.script.overwrite())
  File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_raster_algebra.py", line 112, in
parse
    self.parser.parse(expression)
  File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 331, in parse
    return self.parseopt_notrack(input, lexer, debug, tracking,
tokenfunc)
  File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 1118, in
parseopt_notrack
    p.callable(pslice)
  File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_raster_algebra.py", line 137, in
p_ts_neighbour_operation
    maplist = self.check_stds(t[1])
  File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_algebra.py", line 1226, in
check_stds
    self.msgr.fatal(_("Wrong type of input " + str(input)))
  File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/pygrass/messages/__init__.py", line 269, in fatal
    raise FatalError(message)
grass.exceptions.FatalError: Wrong type of input A
}}}

Is this related to the python3 encoding issues? It works fine in 76
relbranch.

New description:

When running any expression with G7:t.rast.algebra in trunk, I get ERROR:
Wrong type of input. Here's how to reproduce:

{{{
# NC location:
g.region raster=elevation -p
for map in `seq 1 10` ; do r.mapcalc "prueba_${map} = ${map}" ; done
t.create output=A type=strds temporaltype=absolute title="test"
description="test"
t.register input=A maps=`g.list rast pat=prueba* sep=, map=.`
start="2000-01-01" increment="1 months" -i

t.rast.algebra expression="test = (A[1] - A[0]) / 2" basename=test
suffix=gran
t.rast.algebra expression="test = A * 2" basename=test suffix=gran
}}}

Both algebra commands yield the following error:

{{{
ERROR: Wrong type of input A
Traceback (most recent call last):
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/scripts/t.rast.algebra", line 132, in <module>
     sys.exit(main())
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/scripts/t.rast.algebra", line 124, in main
     pc = p.parse(expression, basename, grass.script.overwrite())
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_raster_algebra.py", line 112, in
parse
     self.parser.parse(expression)
   File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 331, in parse
     return self.parseopt_notrack(input, lexer, debug, tracking, tokenfunc)
   File "/usr/lib/python2.7/site-packages/ply/yacc.py", line 1118, in
parseopt_notrack
     p.callable(pslice)
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_raster_algebra.py", line 137, in
p_ts_neighbour_operation
     maplist = self.check_stds(t[1])
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/temporal_algebra.py", line 1226, in
check_stds
     self.msgr.fatal(_("Wrong type of input " + str(input)))
   File "/home/veroandreo/software/grass7_trunk/dist.x86_64-pc-linux-
gnu/etc/python/grass/pygrass/messages/__init__.py", line 269, in fatal
     raise FatalError(message)
grass.exceptions.FatalError: Wrong type of input A
}}}

Is this related to the python3 encoding issues? It works fine in 76
relbranch.

--

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:3&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: new
  Priority: major | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------

Comment (by neteler):

I tried to test with Python3 (to see if that works at least) but got stuck
due to #3704

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:4&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: new
  Priority: major | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------

Comment (by neteler):

I tested this again in a virtualenv-3 (see
[https://trac.osgeo.org/grass/wiki/Python3Support#Howtotest here]) and got
stuck with

{{{
ctypes.ArgumentError: argument 1: <class 'TypeError'>: expected LP_c_char
instance, got bytes
}}}

.. an encoding issue?

Full test:

{{{
GRASS 7.7.svn (nc_spm_08_grass7):~ > t.create output=A type=strds
temporaltype=absolute title="test" description="test"
Process Process-2:
Traceback (most recent call last):
   File "/usr/lib64/python3.7/multiprocessing/process.py", line 297, in
_bootstrap
     self.run()
   File "/usr/lib64/python3.7/multiprocessing/process.py", line 99, in run
     self._target(*self._args, **self._kwargs)
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/c_libraries_interface.py", line 959, in
c_library_server
     functions[data[0]](lock, conn, data)
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/c_libraries_interface.py", line 241, in
_get_driver_name
     drstring = libtgis.tgis_get_mapset_driver_name(mapset)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: expected LP_c_char
instance, got bytes
WARNING:root:Needed to restart the libgis server, caller: Server check
thread
Traceback (most recent call last):
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/etc/python/grass/pygrass/rpc/base.py", line 161, in safe_receive
     ret = self.client_conn.recv()
   File "/usr/lib64/python3.7/multiprocessing/connection.py", line 250, in
recv
     buf = self._recv_bytes()
   File "/usr/lib64/python3.7/multiprocessing/connection.py", line 407, in
_recv_bytes
     buf = self._recv(4)
   File "/usr/lib64/python3.7/multiprocessing/connection.py", line 383, in
_recv
     raise EOFError
EOFError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/scripts/t.create", line 92, in <module>
     main()
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/scripts/t.create", line 85, in main
     tgis.init()
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/core.py", line 571, in init
     driver_string = ciface.get_driver_name()
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/etc/python/grass/temporal/c_libraries_interface.py", line 1487, in
get_driver_name
     return self.safe_receive("get_driver_name")
   File "/home/mneteler/software/grass77/dist.x86_64-pc-linux-
gnu/etc/python/grass/pygrass/rpc/base.py", line 168, in safe_receive
     raise FatalError("Exception raised: " + str(e) + " Message: " +
message)
grass.exceptions.FatalError: Exception raised: Message: get_driver_name
WARNING:root:Needed to restart the libgis server, caller: Server check
thread
}}}

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:5&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: new
  Priority: major | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------

Comment (by veroandreo):

Temporal algebra seems to be working again after r73903

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:6&gt;
GRASS GIS <https://grass.osgeo.org>

#3682: t.rast.algebra: Error wrong type of input
--------------------------+-------------------------------------
  Reporter: veroandreo | Owner: grass-dev@…
      Type: defect | Status: closed
  Priority: major | Milestone: 7.8.0
Component: Temporal | Version: svn-trunk
Resolution: fixed | Keywords: t.rast.algebra, python3
       CPU: Unspecified | Platform: Unspecified
--------------------------+-------------------------------------
Changes (by veroandreo):

* status: new => closed
* resolution: => fixed

Comment:

Closing since functionality has been restored after r73903.

--
Ticket URL: <https://trac.osgeo.org/grass/ticket/3682#comment:7&gt;
GRASS GIS <https://grass.osgeo.org>