Есть ли способ получить имя правила в Rules в Snakemake при использовании директивы name?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ получить имя правила в Rules в Snakemake при использовании директивы name?

Сообщение Anonymous »

Версия Snakemake:
❯ snakemake --version
8.20.6

Неожиданное поведение
rule all:
input:
"test2"

rule:
name: "test",
output:
"test",
shell:
"touch {output} "

rule:
name: "test2",
input: rules.test.output,
# input: rules._rules["2"].output,
output:
"test2",
shell:
"touch {output} "

Приведенный выше код вызовет ошибку:
❯ snakemake -n
WorkflowError in file /path/to/Snakefile, line 14:
Rule test is not defined in this workflow. Available rules: all, 2

Хотя я могу получить доступ к выходным данным с помощью Rules._rules["2"].output, этот подход кажется неподходящим, поскольку число "2" можно изменить.
p>
Вопрос
Есть ли способ получить доступ к Rules.test.output или достичь аналогичных целей?
Обновление
Я обнаружил, что могу писать, как показано ниже, это работает! Но я не уверен, есть ли в этом опасность. Может кто-нибудь дать мне совет?
rule all:
input:
"test2"

rule a:
name: "test",
output:
"test",
shell:
"touch {output} "

rule b:
name: "test2",
input: rules.a.output,
output:
"test2",
shell:
"touch {output} "

журнал:
Building DAG of jobs...
Using shell: /usr/bin/bash
Provided cores: 16
Rules claiming more threads will be scaled down.
Job stats:
job count
----- -------
all 1
test 1
test2 1
total 3

Select jobs to execute...
Execute 1 jobs...

[Sat Oct 12 14:33:20 2024]
localrule test:
output: test
jobid: 2
reason: Missing output files: test
resources: tmpdir=/tmp

touch test
[Sat Oct 12 14:33:20 2024]
Finished job 2.
1 of 3 steps (33%) done
Select jobs to execute...
Execute 1 jobs...

[Sat Oct 12 14:33:20 2024]
localrule test2:
input: test
output: test2
jobid: 1
reason: Missing output files: test2; Input files updated by another job: test
resources: tmpdir=/tmp

touch test2
[Sat Oct 12 14:33:20 2024]
Finished job 1.
2 of 3 steps (67%) done
Select jobs to execute...
Execute 1 jobs...

[Sat Oct 12 14:33:20 2024]
localrule all:
input: test2
jobid: 0
reason: Input files updated by another job: test2
resources: tmpdir=/tmp

[Sat Oct 12 14:33:20 2024]
Finished job 0.
3 of 3 steps (100%) done
Complete log: .snakemake/log/2024-10-12T143320.208718.snakemake.log


Подробнее здесь: https://stackoverflow.com/questions/790 ... e-in-rules
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»