更新中间文件时防止规则重新运行

Prevent rules from rerunning when intermediate file is updated

假设我的 snakemake 文件中有两个规则

  1. 第一条规则获取远程文件并制作一个临时本地副本
  2. 第二个规则使用本地文件并执行昂贵的任务

现在假设我 运行 这条管道要完成,我想添加第三条规则并重新 运行 管道。

  1. 第三条规则使用相同的本地文件并执行不同的任务

有什么方法可以 运行 这个更新的管道而不需要重新 运行 规则 #2?问题是,当我尝试完成规则 #3 时,规则 #1 被触发,然后规则 #2 想要重新 运行 因为中间本地文件已更新。

我知道存在使用 touchancient 等技术,但我不确定它们如何或是否可以在这里应用。有没有办法将规则 #1 专门标记为 not 进行更新?

ancient 中包装规则 2 和 3 的输入文件应该可以防止它们对文件更新做出反应。像这样:

rule a:
     output: 'a.txt'
     shell: 'curl some_url > {output}'

rule b:
     input: ancient('a.txt')
     # do something

rule c:
     input: ancient('a.txt')
     # do something