Имя текущего правила в Snakemake

Я работаю со Snakemake и не могу найти способ получить доступ к названию текущего правила.

Например, есть ли способ получить такой доступ:

rule job1:
    input: check_inputs(rules.current.name)
    output: ...

Это может быть очень полезно, когда функция check_inputs более или менее одинакова для всех правил.

Конечно, я сделал это, и это работает:

rule job1:
    input: check_inputs("job1")
    output: ...

Тем не менее, мне было интересно, существует ли более «способ Snakemaker» для получения имени текущего правила, чтобы каждый раз не писать/жестко кодировать имя правила.

Любая помощь или предложение будут высоко оценены.

--- EDIT1 ---
Имя правила доступно через {rules.myrule.name} только в том случае, если input и output операторы анализируются змейкой. Таким образом, использование {rules.myrule.name} невозможно в определении input/output.

Идея состоит в том, чтобы иметь быстрый доступ к имени текущего правила, например, {rules.current}, потому что {rules.myrule.name} также повторяется.


person glihm    schedule 05.12.2016    source источник


Ответы (2)


(Редактировать: предложил обходной путь)

{rule}может использоваться для имени правила во время команд shell:/run:. Как сказал оп, это не работает в input/output:. Однако текущий шаблон является рабочим

myrule = "foo"
rule foo:
    output: touch(myrule + ".ok")
    shell:
        'echo "I am {rule}, making {output}"'

В приведенном выше примере вводить переменную myrule не нужно, поскольку она используется только один раз. Но это имеет больше смысла, когда вы хотите использовать имя правила несколько раз в различных директивах змейки. И это также облегчает создание шаблонов правил.

person gutorm    schedule 04.12.2019
comment
Спасибо за обходной путь @gutorm. Было бы неплохо иметь эту функцию для параметра log... - person mrhd; 19.05.2020

Я думал, что rule.name должен работать, но похоже, что это просто rule, который, однако, не может использоваться во всех контекстах: см. https://bitbucket.org/snakemake/snakemake/issues/199/rule-name.-невозможно-доступ-по-правилу-в

Андреас

person Andreas    schedule 05.12.2016
comment
Спасибо за ваш ответ. Нет, это не работает. rule.name определяется при анализе ввода и вывода змейкой. Я проверил объект «Правила» (который содержит все правила и их атрибуты), и он появляется только после определения вывода. Но спасибо за проблему, которую вы связали, я создам новую для этого. За исключением случаев, когда кто-то другой нашел для этого трюк. - person glihm; 06.12.2016
comment
Только что столкнулся именно с этой проблемой. По-прежнему невозможно получить доступ к имени правила перед блоком запуска/оболочки. Теперь есть проблема с отслеживанием Github: github.com/snakemake/snakemake/issues/156 - person mrhd; 19.05.2020