[GRASS-dev] pygrass: how to use GridModule with a module that has a 'width' parameter

Moritz Lennert mlennert at club.worldonline.be
Thu Mar 8 06:22:13 PST 2018


On 08/03/18 15:18, Vaclav Petras wrote:
> 
> 
> On Tue, Mar 6, 2018 at 8:59 AM, Moritz Lennert 
> <mlennert at club.worldonline.be <mailto:mlennert at club.worldonline.be>> wrote:
> 
>     Hi,
> 
>     I'm trying to run the i.zc module in parallel on several tiles. I
>     use this syntax
> 
>          if options['tile_width']:
>              parallel = True
>              width = int(options['tile_width'])
>              height = int(options['tile_height'])
>              overlap = int(options['overlap'])
> 
>          processes = int(options['processes'])
> 
> 
> 
>     kwargs = {'input' : inputraster,
>                'output' : temp_edge_map,
>                'width' : int(options['zc_width']),
>                'threshold' : float(options['zc_threshold']),
>                'quiet' : True}
> 
>     if parallel:
>         grd = GridModule('i.zc',
>                          width=width,
>                          height=height,
>                          overlap=overlap,
>                          processes=processes,
>                          split=False,
>                          **kwargs)
> 
> 
>     However, this fails (understandably) with
> 
>     TypeError: type object got multiple values for keyword argument 'width'
> 
>     Is there a way to work around this name conflict ? Do I have to
>     define my own class derived from GridModule to change the parameter
>     names ?
> 
> 
> Try `width_` instead of `width` for the module parameter. This is how 
> grass.script works (mostly to avoid conflicts with Python keywords 
> namely lambda), but without checking the code, I don't know if PyGRASS 
> has this implemented.

It doesn't. I tried width_ for both the i.zc parameter and the 
GridModule parameter. Neither were accepted as valid parameters.

Moritz


More information about the grass-dev mailing list