Search code examples
pythonpython-3.xlistsnakemake

Reserved name in Snakemake?


I use Snakemake version 7.12.1 and I get the following error while trying to execute a pipeline:

AttributeError: invalid name for input, output, wildcard, params or log: pop is reserved for internal use

I normally use the word pop as the wildcard for population with no issue. After the raised error, I made it changed to another word and it looks like the error is gone. Would someone confirm that pop is now a reserved name or there is another explanation for? I checked the snakemake manual and there is no any related notification.


Solution

  • Would someone confirm that pop is now a reserved name or there is another explanation for?

    Yes, pop is reserved because internally some processes use .pop method to remove items from the directives.

    Internally, the directives (input/output/etc) are stored as a Namedlist which inherits methods from the list. So almost all the methods defined for list (and Namedlist) will trigger this error, e.g. remove, reverse. There are two hard-coded whitelisted exceptions: index and sort.

    This change has been added a couple of years ago, so you must have been running a much older snakemake version.

    Here's a small Snakefile for testing:

    rule all:
        input: 'test.txt'
        
    rule test:
        output:
            # this will err
            pop = 'test.txt'
        shell: 'echo {output}'