[GRASS-dev] Use 'from=' parameter in python script

Dear all,

how can I use the 'from' parameter in a python script? The following

from_range=0,255
to_range=0,511
cls.runModule('r.rescale', input=band, output=output_map_name,
                        from=from_range, to=to_range, overwrite=True)

causes expectedly

SyntaxError: invalid syntax

Nikos

On Wed, Mar 21, 2018 at 7:57 PM, Nikos Alexandris <nik@nikosalexandris.net> wrote:

how can I use the ‘from’ parameter in a python script? The following

from_range=0,255
to_range=0,511
cls.runModule('r.rescale', input=band, output=output_map_name,
from=from_range, to=to_range, overwrite=True)

causes expectedly

SyntaxError: invalid syntax

Try from_. I’m not sure at this point if it works in a gunittest (which you seem to be using).

Vaclav

Le Jeudi 22 mars 2018, Vaclav Petras a écrit :

On Wed, Mar 21, 2018 at 7:57 PM, Nikos Alexandris <nik@nikosalexandris.net>
wrote:
>
> how can I use the 'from' parameter in a python script? The following
> ```
> from_range=0,255
> to_range=0,511
> cls.runModule('r.rescale', input=band, output=output_map_name,
> from=from_range, to=to_range, overwrite=True)
> ```
>
> causes expectedly
> ```
> SyntaxError: invalid syntax
> ```

Try `from_`. I'm not sure at this point if it works in a gunittest (which
you seem to be using).

Vaclav

I already tried that and it does not work. Yes, trying to build tests for the "new" i.rgb.his.

Thank you, Nikos

--
Envoyé depuis mon Jolla

Nikos Alexandris wrote:

>
> how can I use the 'from' parameter in a python script? The following
> ```
> from_range=0,255
> to_range=0,511
> cls.runModule('r.rescale', input=band, output=output_map_name,
> from=from_range, to=to_range, overwrite=True)
> ```
>
> causes expectedly
> ```
> SyntaxError: invalid syntax
> ```

Vaclav Petras a écrit :

Try `from_`. I'm not sure at this point if it works in a gunittest (which
you seem to be using).

Vaclav

Nikos:

I already tried that and it does not work. Yes, trying to build tests for the "new" i.rgb.his.

Thank you, Nikos

Note to self: `r.rescale` works fine without the `from` parameter. The actual
minimum and the maximum values, of the `input` map are always used.

Thinking about: what would be a use case where the `from` values would need
to be user defined, which implies they would need to differ from the
map's actual minimum and maximum?

If I didn't miss anything, `grep` finds only 1 use of `r.rescale` within
a script. It is the addon `grass7/raster/r.mblend/r.mblend.py`, in line
270.

Nikos

On Thu, Mar 22, 2018 at 8:21 AM, Nikos Alexandris
<nik@nikosalexandris.net> wrote:
...

If I didn't miss anything, `grep` finds only 1 use of `r.rescale` within

FYI - you can find that best with "ag - the silver searcher" since you
can restrict the search to a programming language, here --python:

a script. It is the addon `grass7/raster/r.mblend/r.mblend.py`, in line
270.

# core
ag --python r.rescale
gui/wxpython/iscatt/controllers.py
323: "(e. g. using r.rescale) below recommended
threshold.\n\n"

# software/grass-addons/grass7/
ag --python r.rescale
raster/r.mblend/r.mblend.py
207: gscript.run_command('r.rescale', input=dist_high, output=weights,

So: confirmed.

Markus

[all deleted]

In the same script,

import grass.script as g
from grass.gunittest.case import TestCase

and

rescale_output = g.read_command('r.rescale', overwrite=True, verbose=True,
        input=band, output=output_map_name, to=to_range)
print rescale_output

cls.runModule('r.rescale', overwrite=True, verbose=True,
        input=band, output=output_map_name, to=to_range)

the former will print the output of `r.rescale`, the latter will not.

Is there a way to get the output of `runModule`, while building a test suite?
And avoid using a `grass.script` function?

Is the purpose of `expecting_stdout=False` in `runModule()` to test if a
module emits something to stdout? [0]

Thanks, Nikos

[0] https://grass.osgeo.org/grass74/manuals/libpython/_modules/gunittest/case.html#TestCase.runModule.

On Thu, Mar 22, 2018 at 5:36 AM, Nikos Alexandris <nik@nikosalexandris.net>
wrote:

rescale_output = g.read_command('r.rescale', overwrite=True, verbose=True,
       input=band, output=output_map_name, to=to_range)
print rescale_output

cls.runModule('r.rescale', overwrite=True, verbose=True,
       input=band, output=output_map_name, to=to_range)
```

the former will print the output of `r.rescale`, the latter will not.

Is there a way to get the output of `runModule`, while building a test
suite?

It's a PyGRASS module, so just access `module.outputs.stdout` afterwards.
Please extend the documentation if needed.

Is the purpose of `expecting_stdout=False` in `runModule()` to test if a

module emits something to stdout? [0]

Yes. It's for cases like when r.univar prints nothing when raster map
contains NULLs only (or region is outside its extent).

HTH,
Vaclav