Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-10 08:39:07

0001 __author__ = "retmas"
0002 
0003 from snakemake.parser import Rule, RuleKeywordState
0004 from snakemake.workflow import Workflow
0005 
0006 
0007 def scatter(self, value):
0008     def decorate(rule_info):
0009         rule_info.scatter = value
0010         return rule_info
0011 
0012     return decorate
0013 
0014 
0015 class Scatter(RuleKeywordState):
0016     @property
0017     def keyword(self):
0018         return "scatter"
0019 
0020 
0021 def loop(self, value):
0022     def decorate(rule_info):
0023         rule_info.loop = value
0024         return rule_info
0025 
0026     return decorate
0027 
0028 
0029 class Loop(RuleKeywordState):
0030     @property
0031     def keyword(self):
0032         return "loop"
0033 
0034 
0035 def condition(self, value):
0036     def decorate(rule_info):
0037         rule_info.condition = value
0038         return rule_info
0039 
0040     return decorate
0041 
0042 
0043 class Condition(RuleKeywordState):
0044     @property
0045     def keyword(self):
0046         return "when"
0047 
0048 
0049 _rule_properties = dict(scatter=Scatter, loop=Loop, when=Condition)
0050 
0051 
0052 def inject():
0053     Rule.subautomata.update(**_rule_properties)
0054     setattr(Workflow, "scatter", scatter)
0055     setattr(Workflow, "loop", loop)
0056     setattr(Workflow, "when", condition)
0057     rule = getattr(Workflow, "rule")
0058 
0059     def rule_new(self, name=None, lineno=None, snakefile=None, checkpoint=False):
0060         decorate = rule(self, name, lineno, snakefile, checkpoint)
0061 
0062         def decorate_new(rule_info):
0063             rule_obj = self.get_rule(name)
0064             if getattr(rule_info, "scatter", None):
0065                 rule_obj.scatter = rule_info.scatter
0066             if getattr(rule_info, "loop", None):
0067                 rule_obj.loop = rule_info.loop
0068             if getattr(rule_info, "condition", None):
0069                 rule_obj.condition = rule_info.condition
0070             return decorate(rule_info)
0071 
0072         return decorate_new
0073 
0074     setattr(Workflow, "rule", rule_new)