13from .JetDefinition
import JetInputExternal, JetInputConstit, JetModifier, JetInputConstitSeq
21 """ Retrieve recursively all dependencies described by str aliases (from modifiers, ghosts, etc..) within jetdef0.
22 The aliases are converted in to proper config objects (like JetModifier, JetInputConstit,...) and are collected into
23 a cloned version of jetdef0.
25 The cloned version is returned and contains all the necessary information to build the actual C++ tools and algs.
26 (in particular, the _prereqDic and _prereqOrder internal members of the clone are filled).
27 The cloned version also has its member '._cflags' set to the given config flags (might be used to instantiate the dependencies).
28 If jetdef0.context=='default' than the cloned version has its context set according to flags
32 jetdef = jetdef0.clone()
33 jetdef._cflags = flags
34 jetdef._contextDic = flags.Jet.Context[jetdef0.context]
38 jetdef._prereqDic[
'input:'+jetdef.inputdef.name] = jetdef.inputdef
39 jetdef._prereqOrder.append(
'input:'+jetdef.inputdef.name)
41 for g
in jetdef.extrainputs:
43 jetdef._prereqDic[
'input:'+g] = gInstance
44 jetdef._prereqOrder.append(
'input:'+g)
46 for g
in jetdef.ghostdefs:
48 jetdef._prereqDic[
'input:'+g] = gInstance
49 jetdef._prereqOrder.append(
'input:'+g)
50 jetdef._prereqDic[
'ghost:'+g] = gInstance
51 jetdef._prereqOrder.append(
'ghost:'+g)
53 for mod
in jetdef.modifiers:
55 jetdef._prereqDic[
'mod:'+mod] = modInstance
56 jetdef._prereqOrder.append(
'mod:'+mod)
59 jetdef._prereqOrder[:] = list(dict.fromkeys(jetdef._prereqOrder) )
89 """convert a string alias to a full config object, either a JetInputConstitSeq or a JetInputExternal according to the alias.
91 This also recursively translate all aliases which are dependencies of this alias. All these dependencies are
92 collected into the 'parentjetdef' (JetDefinition ).
94 if canBeConstit==false, the alias is not searched amongst known JetInputConstitSeq (in stdConstitDic),
99 if isinstance(alias, JetInputConstit):
102 if isinstance(alias, JetInputExternal):
109 from .StandardJetConstits
import stdConstitDic, stdInputExtDic
111 if canBeConstit
and alias
in stdConstitDic:
114 elif alias
in stdInputExtDic :
118 raise Exception(f
"Could not match a known jet input definition for '{alias}' ")
121 """Recursively translate all aliases appearing in the prereqs of constitseq into proper config objects.
122 All are collected into the parentjetdef for which this JetInputConstitSeq is being configured.
123 Then instantiates all aliases for JetConstitModifier
127 constitseq = constitseq.clone()
129 from .StandardJetConstits
import stdInputExtDic, stdContitModifDic
131 stdInputExtDic.setdefault( constitseq.inputname,
JetInputExternal( constitseq.inputname, constitseq.basetype) )
136 if callable(constitseq.inputname):
137 constitseq.prereqs += [
'ext'+constitseq.inputname(parentjetdef)]
139 constitseq.prereqs += [
'extinput:'+constitseq.inputname]
141 if isinstance( constitseq, JetInputConstitSeq):
143 for mod
in constitseq.modifiers:
144 modInstance = stdContitModifDic[ mod ].clone()
145 parentjetdef._prereqDic[f
'cmod:{mod}'] = modInstance
153 """Recursively translate all aliases appearing in the prereqs of jetinputext into proper config objects.
154 All are collected into the parentjetdef for which this JetInputConstitSeq is being configured.
157 jetinputext = jetinputext.clone()
161 if callable(jetinputext.prereqs):
163 jetinputext.prereqs = jetinputext.prereqs(parentjetdef)
165 jetinputext.prereqs = [ prereq(parentjetdef)
if callable(prereq)
167 for prereq
in jetinputext.prereqs ]
170 for prereq
in jetinputext.prereqs :
171 reqInstance = parentjetdef._prereqDic.get( prereq,
None)
172 if reqInstance
is None:
173 reqType , inputkey = prereq.split(
':')
175 canBeConstit = (reqType !=
"extinput") )
176 parentjetdef._prereqDic[prereq] = reqInstance
177 parentjetdef._prereqOrder.append(prereq)
196 """return a JetModifier config object corresponding to alias, also recursively translating all aliases in the dependencies of this JetModifier."""
197 if isinstance(alias, JetModifier):
202 modL = alias.split(
":")
204 modspec =
':'.join(modL[1:])
207 from .StandardJetMods
import stdJetModifiers
208 moddef = stdJetModifiers[modkey].clone( modspec = modspec)
211 if callable(moddef.prereqs):
212 moddef.prereqs = moddef.prereqs( modspec, parentjetdef )
214 for prereq
in moddef.prereqs:
215 str_prereq = prereq(parentjetdef)
if callable(prereq)
else prereq
216 reqInstance = parentjetdef._prereqDic.get( str_prereq,
None)
217 if reqInstance
is None:
218 reqInstance =
prereqToDef(str_prereq, parentjetdef)
220 if str_prereq.startswith(
'ghost:'):
222 prereqN = str_prereq.split(
':')[1]
223 parentjetdef._prereqOrder.append(
'input:'+prereqN)
224 parentjetdef._prereqDic[
'input:'+prereqN] = reqInstance
226 parentjetdef._prereqOrder.append(str_prereq)
227 parentjetdef._prereqDic[str_prereq] = reqInstance