4 from __future__
import print_function
5 from __future__
import absolute_import
7 from .Options
import Options
13 from .Mixins
import PrintOptions,_ParameterTypeBase,_SimpleParameterTypeBase, _Parameterizable, _ConfigureComponent, _TypedParameterizable, _Labelable, _Unlabelable, _ValidatingListBase, _modifyParametersFromDict
16 from .Modules
import *
17 from .Modules
import _Module
18 from .SequenceTypes
import *
19 from .SequenceTypes
import _ModuleSequenceType, _Sequenceable
20 from .SequenceVisitors
import PathValidator, EndPathValidator, FinalPathValidator, ScheduleTaskValidator, NodeVisitor, CompositeVisitor, ModuleNamesFromGlobalsVisitor
21 from .MessageLogger
import MessageLogger
22 from .
import DictTypes
24 from .ExceptionHandling
import *
27 if sys.getrecursionlimit()<5000:
28 sys.setrecursionlimit(5000)
33 Configuration =
"{Configuration}" 34 UnavailableAccelerator =
"{UnavailableAccelerator}" 43 Raise an exception if called by special config files. This checks 44 the call or import stack for the importing file. An exception is raised if 45 the importing module is not in allowedPatterns and if it is called too deeply: 46 minLevel = 2: inclusion by top lvel cfg only 47 minLevel = 1: No inclusion allowed 48 allowedPatterns = ['Module1','Module2/SubModule1'] allows import 49 by any module in Module1 or Submodule1 55 ignorePatterns = [
'FWCore/ParameterSet/Config.py',
'FWCore/ParameterSet/python/Config.py',
'<string>',
'<frozen ']
56 CMSSWPath = [os.environ[
'CMSSW_BASE'],os.environ[
'CMSSW_RELEASE_BASE']]
60 for item
in inspect.stack():
64 for pattern
in CMSSWPath:
65 if item[1].
find(pattern) != -1:
68 if item[1].
find(
'/') == -1:
71 for pattern
in ignorePatterns:
72 if item[1].
find(pattern) != -1:
76 if inPath
and not ignore:
77 trueStack.append(item[1])
79 importedFile = trueStack[0]
81 if len(trueStack) > 1:
82 importedBy = trueStack[1]
84 for pattern
in allowedPatterns:
85 if importedBy.find(pattern) > -1:
88 if len(trueStack) <= minLevel:
91 raise ImportError(
"Inclusion of %s is allowed only by cfg or specified cfi files." 95 """Look inside the module and find the Processes it contains""" 99 if isinstance(module,dict):
100 if 'process' in module:
101 p = module[
'process']
104 if hasattr(module,
'process'):
105 if isinstance(module.process,Process):
106 process = module.process
108 raise RuntimeError(
"The attribute named 'process' does not inherit from the Process class")
110 raise RuntimeError(
"no 'process' attribute found in the module, please add one")
114 """Root class for a CMS configuration process""" 117 """The argument 'name' will be the name applied to this Process 118 Can optionally pass as additional arguments cms.Modifier instances 119 that will be used to modify the Process as it is built 121 self.__dict__[
'_Process__name'] = name
122 if not name.isalnum():
123 raise RuntimeError(
"Error: The process name is an empty string or contains non-alphanumeric characters")
124 self.__dict__[
'_Process__filters'] = {}
125 self.__dict__[
'_Process__producers'] = {}
126 self.__dict__[
'_Process__switchproducers'] = {}
127 self.__dict__[
'_Process__source'] =
None 128 self.__dict__[
'_Process__looper'] =
None 129 self.__dict__[
'_Process__subProcesses'] = []
130 self.__dict__[
'_Process__schedule'] =
None 131 self.__dict__[
'_Process__analyzers'] = {}
132 self.__dict__[
'_Process__outputmodules'] = {}
136 self.__dict__[
'_Process__sequences'] = {}
137 self.__dict__[
'_Process__tasks'] = {}
138 self.__dict__[
'_Process__conditionaltasks'] = {}
139 self.__dict__[
'_Process__services'] = {}
140 self.__dict__[
'_Process__essources'] = {}
141 self.__dict__[
'_Process__esproducers'] = {}
142 self.__dict__[
'_Process__esprefers'] = {}
143 self.__dict__[
'_Process__aliases'] = {}
144 self.__dict__[
'_Process__psets']={}
145 self.__dict__[
'_Process__vpsets']={}
146 self.__dict__[
'_cloneToObjectDict'] = {}
148 self.__dict__[
'_Process__InExtendCall'] =
False 149 self.__dict__[
'_Process__partialschedules'] = {}
151 self.__dict__[
'_Process__modifiers'] = Mods
152 self.__dict__[
'_Process__accelerators'] = {}
161 if Process._firstProcess:
162 Process._firstProcess =
False 165 for m
in self.__modifiers:
166 if not m._isChosen():
167 raise RuntimeError(
"The Process {} tried to redefine which Modifiers to use after another Process was already started".
format(name))
168 for m
in self.__modifiers:
173 _Module.__isStrict__ =
True 177 """Returns a string containing all the EDProducer labels separated by a blank""" 180 """Returns a string containing all the SwitchProducer labels separated by a blank""" 183 """Returns a string containing all the EDAnalyzer labels separated by a blank""" 186 """Returns a string containing all the EDFilter labels separated by a blank""" 189 """Returns a string containing all the Path names separated by a blank""" 196 Since cloneToObjectDict stores a hash of objects by their 197 id() it needs to be updated when unpickling to use the 198 new object id values instantiated during the unpickle. 201 self.__dict__.
update(pkldict)
203 for value
in self._cloneToObjectDict.
values():
204 tmpDict[
id(value)] = value
205 self.__dict__[
'_cloneToObjectDict'] = tmpDict
210 """returns a dict of the filters that have been added to the Process""" 212 filters = property(filters_, doc=
"dictionary containing the filters for the process")
216 if not name.isalnum():
217 raise RuntimeError(
"Error: The process name is an empty string or contains non-alphanumeric characters")
218 self.__dict__[
'_Process__name'] = name
219 process = property(name_,setName_, doc=
"name of the process")
221 """returns a dict of the producers that have been added to the Process""" 223 producers = property(producers_,doc=
"dictionary containing the producers for the process")
225 """returns a dict of the SwitchProducers that have been added to the Process""" 227 switchProducers = property(switchProducers_,doc=
"dictionary containing the SwitchProducers for the process")
229 """returns the source that has been added to the Process or None if none have been added""" 233 source = property(source_,setSource_,doc=
'the main source or None if not set')
235 """returns the looper that has been added to the Process or None if none have been added""" 239 looper = property(looper_,setLooper_,doc=
'the main looper or None if not set')
242 return untracked.PSet(numberOfThreads = untracked.uint32(1),
243 numberOfStreams = untracked.uint32(0),
244 numberOfConcurrentRuns = untracked.uint32(1),
245 numberOfConcurrentLuminosityBlocks = untracked.uint32(0),
246 eventSetup = untracked.PSet(
247 numberOfConcurrentIOVs = untracked.uint32(0),
248 forceNumberOfConcurrentIOVs = untracked.PSet(
249 allowAnyLabel_ = required.untracked.uint32
252 accelerators = untracked.vstring(
'*'),
253 wantSummary = untracked.bool(
False),
254 fileMode = untracked.string(
'FULLMERGE'),
255 forceEventSetupCacheClearOnNewRun = untracked.bool(
False),
256 throwIfIllegalParameter = untracked.bool(
True),
257 printDependencies = untracked.bool(
False),
258 deleteNonConsumedUnscheduledModules = untracked.bool(
True),
259 sizeOfStackForThreadsInKB = optional.untracked.uint32,
260 Rethrow = untracked.vstring(),
261 SkipEvent = untracked.vstring(),
262 FailPath = untracked.vstring(),
263 IgnoreCompletely = untracked.vstring(),
264 canDeleteEarly = untracked.vstring(),
265 holdsReferencesToDeleteEarly = untracked.VPSet(),
266 modulesToIgnoreForDeleteEarly = untracked.vstring(),
267 dumpOptions = untracked.bool(
False),
268 allowUnscheduled = obsolete.untracked.bool,
269 emptyRunLumiMode = obsolete.untracked.string,
270 makeTriggerResults = obsolete.untracked.bool,
274 if isinstance(opt,dict):
275 for k,v
in opt.items():
278 for p
in opt.parameters_():
279 setattr(newOpts, p, getattr(opt,p))
283 return untracked.PSet(input=optional.untracked.int32,
284 output=optional.untracked.allowed(int32,PSet))
287 if isinstance(ps,dict):
288 for k,v
in ps.items():
291 for p
in ps.parameters_():
292 setattr(newMax, p, getattr(ps,p))
296 return untracked.PSet(input=untracked.int32(-1))
298 """returns a list of the subProcesses that have been added to the Process""" 299 return self.__subProcesses
300 subProcesses = property(subProcesses_,doc=
'the SubProcesses that have been added to the Process')
302 """returns a dict of the analyzers that have been added to the Process""" 304 analyzers = property(analyzers_,doc=
"dictionary containing the analyzers for the process")
306 """returns a dict of the output modules that have been added to the Process""" 308 outputModules = property(outputModules_,doc=
"dictionary containing the output_modules for the process")
310 """returns a dict of the paths that have been added to the Process""" 312 paths = property(paths_,doc=
"dictionary containing the paths for the process")
314 """returns a dict of the endpaths that have been added to the Process""" 316 endpaths = property(endpaths_,doc=
"dictionary containing the endpaths for the process")
318 """returns a dict of the finalpaths that have been added to the Process""" 320 finalpaths = property(finalpaths_,doc=
"dictionary containing the finalpaths for the process")
322 """returns a dict of the sequences that have been added to the Process""" 324 sequences = property(sequences_,doc=
"dictionary containing the sequences for the process")
326 """returns a dict of the tasks that have been added to the Process""" 328 tasks = property(tasks_,doc=
"dictionary containing the tasks for the process")
330 """returns a dict of the conditionaltasks that have been added to the Process""" 332 conditionaltasks = property(conditionaltasks_,doc=
"dictionary containing the conditionatasks for the process")
334 """returns the schedule that has been added to the Process or None if none have been added""" 335 return self.__schedule
337 if label ==
"schedule":
340 self.
_place(label, sch, self.__partialschedules)
349 raise RuntimeError(
"The path at index "+
str(index)+
" in the Schedule was not attached to the process.")
350 self.__dict__[
'_Process__schedule'] = sch
351 schedule = property(schedule_,setSchedule_,doc=
'the schedule or None if not set')
353 """returns a dict of the services that have been added to the Process""" 355 services = property(services_,doc=
"dictionary containing the services for the process")
357 """returns a dict of the ProcessAccelerators that have been added to the Process""" 359 processAccelerators = property(processAccelerators_,doc=
"dictionary containing the ProcessAccelerators for the process")
361 """returns a dict of the esproducers that have been added to the Process""" 363 es_producers = property(es_producers_,doc=
"dictionary containing the es_producers for the process")
365 """returns a the es_sources that have been added to the Process""" 367 es_sources = property(es_sources_,doc=
"dictionary containing the es_sources for the process")
369 """returns a dict of the es_prefers that have been added to the Process""" 371 es_prefers = property(es_prefers_,doc=
"dictionary containing the es_prefers for the process")
373 """returns a dict of the aliases that have been added to the Process""" 375 aliases = property(aliases_,doc=
"dictionary containing the aliases for the process")
377 """returns a dict of the PSets that have been added to the Process""" 379 psets = property(psets_,doc=
"dictionary containing the PSets for the process")
381 """returns a dict of the VPSets that have been added to the Process""" 383 vpsets = property(vpsets_,doc=
"dictionary containing the PSets for the process")
386 """returns True if the Modifier is in used by this Process""" 388 for m
in self.__modifiers:
389 if m._isOrContains(mod):
394 if not object.hasLabel_() :
395 object.setLabel(newLabel)
397 if newLabel == object.label_() :
399 if newLabel
is None :
400 object.setLabel(
None)
402 if (hasattr(self, object.label_())
and id(getattr(self, object.label_())) ==
id(object)) :
403 msg100 =
"Attempting to change the label of an attribute of the Process\n" 404 msg101 =
"Old label = "+object.label_()+
" New label = "+newLabel+
"\n" 405 msg102 =
"Type = "+
str(type(object))+
"\n" 406 msg103 =
"Some possible solutions:\n" 407 msg104 =
" 1. Clone modules instead of using simple assignment. Cloning is\n" 408 msg105 =
" also preferred for other types when possible.\n" 409 msg106 =
" 2. Declare new names starting with an underscore if they are\n" 410 msg107 =
" for temporaries you do not want propagated into the Process. The\n" 411 msg108 =
" underscore tells \"from x import *\" and process.load not to import\n" 412 msg109 =
" the name.\n" 413 msg110 =
" 3. Reorganize so the assigment is not necessary. Giving a second\n" 414 msg111 =
" name to the same object usually causes confusion and problems.\n" 415 msg112 =
" 4. Compose Sequences: newName = cms.Sequence(oldName)\n" 416 raise ValueError(msg100+msg101+msg102+msg103+msg104+msg105+msg106+msg107+msg108+msg109+msg110+msg111+msg112)
417 object.setLabel(
None)
418 object.setLabel(newLabel)
422 if not name.replace(
'_',
'').isalnum():
423 raise ValueError(
'The label '+name+
' contains forbiden characters')
425 if name ==
'options':
427 if name ==
'maxEvents':
431 if name.startswith(
'_Process__'):
432 self.__dict__[name]=value
434 if not isinstance(value,_ConfigureComponent):
435 raise TypeError(
"can only assign labels to an object that inherits from '_ConfigureComponent'\n" 436 +
"an instance of "+
str(type(value))+
" will not work - requested label is "+name)
437 if not isinstance(value,_Labelable)
and not isinstance(value,Source)
and not isinstance(value,Looper)
and not isinstance(value,Schedule):
438 if name == value.type_():
439 if hasattr(self,name)
and (getattr(self,name)!=value):
446 raise TypeError(
"an instance of "+
str(type(value))+
" can not be assigned the label '"+name+
"'.\n"+
447 "Please either use the label '"+value.type_()+
" or use the 'add_' method instead.")
450 newValue =value.copy()
452 newValue._filename = value._filename
458 if not self.
_okToPlace(name, value, self.__dict__):
459 newFile=
'top level config' 460 if hasattr(value,
'_filename'):
461 newFile = value._filename
462 oldFile=
'top level config' 463 oldValue = getattr(self,name)
464 if hasattr(oldValue,
'_filename'):
465 oldFile = oldValue._filename
466 msg =
"Trying to override definition of process."+name
467 msg +=
"\n new object defined in: "+newFile
468 msg +=
"\n existing object defined in: "+oldFile
469 raise ValueError(msg)
471 if hasattr(self,name)
and not (getattr(self,name)==newValue):
475 if newValue._isTaskComponent():
476 if not self.__InExtendCall:
481 if not isinstance(newValue, Task):
483 newFile=
'top level config' 484 if hasattr(value,
'_filename'):
485 newFile = value._filename
486 oldFile=
'top level config' 487 oldValue = getattr(self,name)
488 if hasattr(oldValue,
'_filename'):
489 oldFile = oldValue._filename
490 msg1 =
"Trying to override definition of "+name+
" while it is used by the task " 491 msg2 =
"\n new object defined in: "+newFile
492 msg2 +=
"\n existing object defined in: "+oldFile
495 raise ValueError(msg1+s.label_()+msg2)
497 if isinstance(newValue, _Sequenceable)
or newValue._isTaskComponent()
or isinstance(newValue, ConditionalTask):
498 if not self.__InExtendCall:
499 if isinstance(newValue, ConditionalTask):
504 newFile=
'top level config' 505 if hasattr(value,
'_filename'):
506 newFile = value._filename
507 oldFile=
'top level config' 508 oldValue = getattr(self,name)
509 if hasattr(oldValue,
'_filename'):
510 oldFile = oldValue._filename
511 msg1 =
"Trying to override definition of "+name+
" while it is used by the " 512 msg2 =
"\n new object defined in: "+newFile
513 msg2 +=
"\n existing object defined in: "+oldFile
516 raise ValueError(msg1+
"sequence "+s.label_()+msg2)
519 raise ValueError(msg1+
"path "+s.label_()+msg2)
522 raise ValueError(msg1+
"endpath "+s.label_()+msg2)
525 raise ValueError(msg1+
"finalpath "+s.label_()+msg2)
528 if isinstance(newValue, EDAlias):
529 oldValue = getattr(self, name)
531 newFile=
'top level config' 532 if hasattr(value,
'_filename'):
533 newFile = value._filename
534 oldFile=
'top level config' 535 if hasattr(oldValue,
'_filename'):
536 oldFile = oldValue._filename
537 msg1 =
"Trying to override definition of "+name+
" with an EDAlias while it is used by the " 538 msg2 =
"\n new object defined in: "+newFile
539 msg2 +=
"\n existing object defined in: "+oldFile
542 raise ValueError(msg1+
"task "+s.label_()+msg2)
545 raise ValueError(msg1+
"sequence "+s.label_()+msg2)
548 raise ValueError(msg1+
"path "+s.label_()+msg2)
551 raise ValueError(msg1+
"endpath "+s.label_()+msg2)
554 raise ValueError(msg1+
"finalpath "+s.label_()+msg2)
556 if not self.__InExtendCall
and (Schedule._itemIsValid(newValue)
or isinstance(newValue, Task)):
560 self.__dict__[name]=newValue
561 if isinstance(newValue,_Labelable):
563 self._cloneToObjectDict[
id(value)] = newValue
564 self._cloneToObjectDict[
id(newValue)] = newValue
566 newValue._place(name,self)
568 """Given a container of sequences or tasks, find the first sequence or task 569 containing mod and return it. If none is found, return None""" 572 for seqOrTask
in seqsOrTasks.values():
581 if not hasattr(self,name):
582 raise KeyError(
'process does not know about '+name)
583 elif name.startswith(
'_Process__'):
584 raise ValueError(
'this attribute cannot be deleted')
589 if name
in reg: del reg[name]
591 obj = getattr(self,name)
592 if isinstance(obj,_Labelable):
594 if isinstance(obj,Service):
595 obj._inProcess =
False 599 obj = getattr(self,name)
601 if not isinstance(obj, Sequence)
and not isinstance(obj, Task)
and not isinstance(obj,ConditionalTask):
611 if obj._isTaskComponent():
615 if isinstance(obj, _Sequenceable)
or obj._isTaskComponent():
617 if Schedule._itemIsValid(obj)
or isinstance(obj, Task):
621 del self.__dict__[name]
626 """Similar to __delattr__ but we need different behavior when called from __setattr__""" 630 del self.__dict__[name]
635 """Allows addition of components that do not have to have a label, e.g. Services""" 636 if not isinstance(value,_ConfigureComponent):
638 if not isinstance(value,_Unlabelable):
642 newValue =value.copy()
646 newValue._place(
'',self)
649 if not self.__InExtendCall:
660 if d[name]._isModified:
671 if self.
__isStrict and isinstance(mod, _ModuleSequenceType):
672 d[name] = mod._postProcessFixup(self._cloneToObjectDict)
675 if isinstance(mod,_Labelable):
678 self.
_place(name, mod, self.__outputmodules)
680 self.
_place(name, mod, self.__producers)
682 self.
_place(name, mod, self.__switchproducers)
684 self.
_place(name, mod, self.__filters)
686 self.
_place(name, mod, self.__analyzers)
690 self.
_place(name, mod, self.__paths)
691 except ModuleCloneError
as msg:
693 raise Exception(
"%sThe module %s in path %s is unknown to the process %s." %(context, msg, name, self._Process__name))
697 self.
_place(name, mod, self.__endpaths)
698 except ModuleCloneError
as msg:
700 raise Exception(
"%sThe module %s in endpath %s is unknown to the process %s." %(context, msg, name, self._Process__name))
704 self.
_place(name, mod, self.__finalpaths)
705 except ModuleCloneError
as msg:
707 raise Exception(
"%sThe module %s in finalpath %s is unknown to the process %s." %(context, msg, name, self._Process__name))
710 self.
_place(name, mod, self.__sequences)
712 self.
_place(name, mod, self.__esproducers)
714 self.
_place(name, mod, self.__esprefers)
716 self.
_place(name, mod, self.__essources)
719 self.
_place(name, task, self.__tasks)
722 self.
_place(name, task, self.__conditionaltasks)
724 self.
_place(name, mod, self.__aliases)
726 self.
_place(name, mod, self.__psets)
728 self.
_place(name, mod, self.__vpsets)
730 """Allow the source to be referenced by 'source' or by type name""" 732 raise ValueError(
"The label '"+name+
"' can not be used for a Source. Only 'source' is allowed.")
733 if self.__dict__[
'_Process__source']
is not None :
734 del self.__dict__[self.__dict__[
'_Process__source'].type_()]
735 self.__dict__[
'_Process__source'] = mod
736 self.__dict__[mod.type_()] = mod
739 raise ValueError(
"The label '"+name+
"' can not be used for a Looper. Only 'looper' is allowed.")
740 self.__dict__[
'_Process__looper'] = mod
741 self.__dict__[mod.type_()] = mod
743 self.__dict__[
'_Process__subProcess'] = mod
744 self.__dict__[mod.type_()] = mod
746 self.__subProcesses.
append(mod)
748 self.
_place(typeName, mod, self.__services)
749 if typeName
in self.__dict__:
750 self.__dict__[typeName]._inProcess =
False 751 self.__dict__[typeName]=mod
753 self.
_place(typeName, mod, self.__accelerators)
754 self.__dict__[typeName]=mod
756 moduleName = moduleName.replace(
"/",
".")
757 module = __import__(moduleName)
758 self.
extend(sys.modules[moduleName])
760 """Look in other and find types that we can use""" 762 self.__dict__[
'_Process__InExtendCall'] =
True 765 tasksToAttach = dict()
767 for name
in dir(other):
769 if name.startswith(
'_'):
771 item = getattr(other,name)
772 if name ==
"source" or name ==
"looper":
776 elif isinstance(item,_ModuleSequenceType):
778 elif isinstance(item,Task)
or isinstance(item, ConditionalTask):
779 tasksToAttach[name] = item
780 elif isinstance(item,_Labelable):
782 if not item.hasLabel_() :
784 elif isinstance(item,Schedule):
786 elif isinstance(item,_Unlabelable):
788 elif isinstance(item,ProcessModifier):
790 elif isinstance(item,ProcessFragment):
794 for name,seq
in seqs.items():
795 if id(seq)
not in self._cloneToObjectDict:
798 newSeq = self._cloneToObjectDict[
id(seq)]
799 self.__dict__[name]=newSeq
802 newSeq._place(name,self)
804 for name, task
in tasksToAttach.items():
811 self.__dict__[
'_Process__InExtendCall'] =
False 815 for name,item
in items:
816 returnValue +=options.indentation()+typeName+
' '+name+
' = '+item.dumpConfig(options)
821 for name,item
in items:
822 returnValue +=options.indentation()+typeName+
' = '+item.dumpConfig(options)
827 for name,item
in items:
828 if name == item.type_():
830 returnValue +=options.indentation()+typeName+
' '+name+
' = '+item.dumpConfig(options)
834 """return a string containing the equivalent process defined using the old configuration language""" 835 config =
"process "+self.__name+
" = {\n" 888 config +=options.indentation()+item.configTypeName()+
' '+name+
' = '+item.configValue(options)
890 config +=options.indentation()+
'VPSet '+name+
' = '+item.configValue(options)
892 pathNames = [p.label_()
for p
in self.
schedule]
893 config +=options.indentation()+
'schedule = {'+
','.
join(pathNames)+
'}\n' 905 result +=options.indentation()+
'es_prefer '+item.targetLabel_()+
' = '+item.dumpConfig(options)
911 returnValue += item.dumpPython(options)+
'\n\n' 917 for name,item
in d.items():
918 returnValue +=
'process.'+name+
' = '+item.dumpPython(options)+
'\n\n' 920 for name,item
in sorted(d.items()):
921 returnValue +=
'process.'+name+
' = '+item.dumpPython(options)+
'\n\n' 928 dependencies = item.directDependencies()
929 for module_subfolder, module
in dependencies:
930 module = module +
'_cfi' 931 if options.useSubdirectories
and module_subfolder:
932 module = module_subfolder +
'.' + module
933 if options.targetDirectory
is not None:
934 if options.useSubdirectories
and subfolder:
935 module =
'..' + module
937 module =
'.' + module
938 code +=
'from ' + module +
' import *\n' 941 code += name +
' = ' + item.dumpPython(options)
942 parts[name] = subfolder, code
950 sequence.visit(visitor)
951 except Exception
as e:
952 raise RuntimeError(
"An entry in sequence {} has no label\n Seen entries: {}\n Error: {}".
format(label, l, e))
961 raise RuntimeError(
"An entry in task " + label +
' has not been attached to the process')
969 raise RuntimeError(
"An entry in task " + label +
' has not been attached to the process')
981 for label,item
in processDictionaryOfItems.items():
983 if isinstance(item, Task):
985 elif isinstance(item, ConditionalTask):
992 if isinstance(item, Task):
993 raise RuntimeError(
"Failed in a Task visitor. Probably " \
994 "a circular dependency discovered in Task with label " + label)
995 elif isinstance(item, ConditionalTask):
996 raise RuntimeError(
"Failed in a ConditionalTask visitor. Probably " \
997 "a circular dependency discovered in ConditionalTask with label " + label)
999 raise RuntimeError(
"Failed in a Sequence visitor. Probably a " \
1000 "circular dependency discovered in Sequence with label " + label)
1001 for containedItem
in containedItems:
1007 if containedItem.hasLabel_():
1008 testItem = processDictionaryOfItems.get(containedItem.label_())
1009 if testItem
is None or containedItem != testItem:
1010 if isinstance(item, Task):
1011 raise RuntimeError(
"Task has a label, but using its label to get an attribute" \
1012 " from the process yields a different object or None\n"+
1013 "label = " + containedItem.label_())
1014 if isinstance(item, ConditionalTask):
1015 raise RuntimeError(
"ConditionalTask has a label, but using its label to get an attribute" \
1016 " from the process yields a different object or None\n"+
1017 "label = " + containedItem.label_())
1019 raise RuntimeError(
"Sequence has a label, but using its label to get an attribute" \
1020 " from the process yields a different object or None\n"+
1021 "label = " + containedItem.label_())
1022 dependencies[label]=[dep.label_()
for dep
in containedItems
if dep.hasLabel_()]
1026 oldDeps = dict(dependencies)
1027 for label,deps
in oldDeps.items():
1029 returnValue[label]=processDictionaryOfItems[label]
1031 del dependencies[label]
1032 for lb2,deps2
in dependencies.items():
1033 while deps2.count(label):
1039 for name, value
in sorted(d.items()):
1040 result += value.dumpPythonAs(name,options)+
'\n' 1045 for name, value
in sorted(d.items()):
1046 result[name] = subfolder, value.dumpPythonAs(name, options) +
'\n' 1050 """return a string containing the equivalent process defined using python""" 1051 specialImportRegistry._reset()
1052 header =
"import FWCore.ParameterSet.Config as cms" 1053 result =
"process = cms.Process(\""+self.__name+
"\")\n\n" 1080 imports = specialImportRegistry.getSpecialImports()
1081 if len(imports) > 0:
1082 header +=
"\n" +
"\n".
join(imports)
1084 return header+result
1087 """return a map of file names to python configuration fragments""" 1088 specialImportRegistry._reset()
1090 options.isCfg =
False 1091 header =
"import FWCore.ParameterSet.Config as cms" 1096 result =
'process = cms.Process("' + self.__name +
'")\n\n' 1109 sys.stderr.write(
"error: subprocesses are not supported yet\n\n")
1126 if options.targetDirectory
is not None:
1127 files[options.targetDirectory +
'/__init__.py'] =
'' 1129 if options.useSubdirectories:
1130 for sub
in 'psets',
'modules',
'services',
'eventsetup',
'tasks',
'sequences',
'paths':
1131 if options.targetDirectory
is not None:
1132 sub = options.targetDirectory +
'/' + sub
1133 files[sub +
'/__init__.py'] =
'' 1136 parts = sorted(parts.items(), key =
lambda nsc: (nsc[1][0].lower()
if nsc[1][0]
else '', nsc[0].lower()))
1138 for (name, (subfolder, code))
in parts:
1139 filename = name +
'_cfi' 1140 if options.useSubdirectories
and subfolder:
1141 filename = subfolder +
'/' + filename
1142 if options.targetDirectory
is not None:
1143 filename = options.targetDirectory +
'/' + filename
1144 result +=
'process.load("%s")\n' % filename
1145 files[filename +
'.py'] = header +
'\n\n' + code
1148 options.isCfg =
True 1151 imports = specialImportRegistry.getSpecialImports()
1152 if len(imports) > 0:
1153 header +=
'\n' +
'\n'.
join(imports)
1154 files[
'-'] = header +
'\n\n' + result
1158 old = getattr(self,label)
1165 sequenceable._replaceIfHeldDirectly(old,new)
1167 sequenceable.replace(old,new)
1169 sequenceable.replace(old,new)
1171 sequenceable.replace(old,new)
1173 sequenceable.replace(old,new)
1175 old = getattr(self,label)
1177 task.replace(old, new)
1179 old = getattr(self,label)
1181 task.replace(old, new)
1185 old = getattr(self,label)
1187 task.replace(old, new)
1191 old = getattr(self,label)
1192 self.
schedule_()._replaceIfHeldDirectly(old, new)
1194 """ Replace the item with label 'label' by object 'new' in the process and all sequences/paths/tasks""" 1195 if not hasattr(self,label):
1196 raise LookupError(
"process has no item of label "+label)
1197 setattr(self,label,new)
1199 for name,value
in itemDict.items():
1200 value.insertInto(parameterSet, name)
1203 if not item ==
None:
1204 newlabel = item.nameInProcessDesc_(label)
1206 item.insertInto(parameterSet, newlabel)
1207 parameterSet.addVString(tracked, label, vitems)
1210 for name,value
in itemDict.items():
1211 value.appendToProcessDescList_(l, name)
1212 value.insertInto(parameterSet, name)
1215 parameterSet.addVString(tracked, label, l)
1217 modules = parameterSet.getVString(tracked, labelModules)
1218 aliases = parameterSet.getVString(tracked, labelAliases)
1219 accelerators = parameterSet.getVString(
False,
"@selected_accelerators")
1220 for name,value
in itemDict.items():
1221 value.appendToProcessDescLists_(modules, aliases, name)
1222 value.insertInto(parameterSet, name, accelerators)
1225 parameterSet.addVString(tracked, labelModules, modules)
1226 parameterSet.addVString(tracked, labelAliases, aliases)
1230 for value
in itemList:
1231 name = value.getProcessName()
1232 newLabel = value.nameInProcessDesc_(name)
1234 pset = value.getSubProcessPSet(parameterSet)
1235 subprocs.append(pset)
1238 parameterSet.addVString(tracked, label, l)
1239 parameterSet.addVPSet(
False,
"subProcesses",subprocs)
1247 for name
in self.
paths_():
1248 scheduledPaths.append(name)
1249 triggerPaths.append(name)
1251 scheduledPaths.append(name)
1252 endpaths.append(name)
1254 finalpaths.append(name)
1257 pathname = path.label_()
1259 endpaths.append(pathname)
1260 scheduledPaths.append(pathname)
1262 finalpaths.append(pathname)
1264 scheduledPaths.append(pathname)
1265 triggerPaths.append(pathname)
1267 task.resolve(self.__dict__)
1269 task.visit(scheduleTaskValidator)
1270 task.visit(nodeVisitor)
1272 endPathWithFinalPathModulesName =
"@finalPath" 1275 endpaths.append(endPathWithFinalPathModulesName)
1276 scheduledPaths.append(endPathWithFinalPathModulesName)
1278 modulesOnFinalPath = []
1279 for finalpathname
in finalpaths:
1281 iFinalPath.resolve(self.__dict__)
1282 finalpathValidator.setLabel(finalpathname)
1283 iFinalPath.visit(finalpathValidator)
1284 if finalpathValidator.filtersOnFinalpaths
or finalpathValidator.producersOnFinalpaths:
1285 names = [p.label_
for p
in finalpathValidator.filtersOnFinalpaths]
1286 names.extend( [p.label_
for p
in finalpathValidator.producersOnFinalpaths])
1287 raise RuntimeError(
"FinalPath %s has non OutputModules %s" % (finalpathname,
",".
join(names)))
1288 modulesOnFinalPath.extend(iFinalPath.moduleNames())
1289 for m
in modulesOnFinalPath:
1290 mod = getattr(self, m)
1291 setattr(mod,
"@onFinalPath", untracked.bool(
True))
1292 finalPathEndPath += mod
1294 processPSet.addVString(
True,
"@end_paths", endpaths)
1295 processPSet.addVString(
True,
"@paths", scheduledPaths)
1297 p = processPSet.newPSet()
1298 p.addVString(
True,
"@trigger_paths", triggerPaths)
1299 processPSet.addPSet(
True,
"@trigger_paths", p)
1305 condTaskModules = []
1307 pathCompositeVisitor =
CompositeVisitor(pathValidator, nodeVisitor, lister, condTaskVistor)
1308 endpathCompositeVisitor =
CompositeVisitor(endpathValidator, nodeVisitor, lister)
1309 for triggername
in triggerPaths:
1310 iPath = self.
paths_()[triggername]
1311 iPath.resolve(self.__dict__)
1312 pathValidator.setLabel(triggername)
1314 condTaskModules[:] = []
1315 iPath.visit(pathCompositeVisitor)
1317 decoratedList.append(
"#")
1318 l = list({x.label_()
for x
in condTaskModules})
1320 decoratedList.extend(l)
1321 decoratedList.append(
"@")
1322 iPath.insertInto(processPSet, triggername, decoratedList[:])
1323 for endpathname
in endpaths:
1324 if endpathname
is not endPathWithFinalPathModulesName:
1325 iEndPath = self.
endpaths_()[endpathname]
1327 iEndPath = finalPathEndPath
1328 iEndPath.resolve(self.__dict__)
1329 endpathValidator.setLabel(endpathname)
1331 iEndPath.visit(endpathCompositeVisitor)
1332 iEndPath.insertInto(processPSet, endpathname, decoratedList[:])
1333 processPSet.addVString(
False,
"@filters_on_endpaths", endpathValidator.filtersOnEndpaths)
1336 def resolve(self,keepUnresolvedSequencePlaceholders=False):
1338 x.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1340 x.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1342 x.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1345 task.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1347 def prune(self,verbose=False,keepUnresolvedSequencePlaceholders=False):
1348 """ Remove clutter from the process that we think is unnecessary: 1349 tracked PSets, VPSets and unused modules and sequences. If a Schedule has been set, then Paths and EndPaths 1350 not in the schedule will also be removed, along with an modules and sequences used only by 1351 those removed Paths and EndPaths. The keepUnresolvedSequencePlaceholders keeps also unresolved TaskPlaceholders.""" 1360 self.
resolve(keepUnresolvedSequencePlaceholders)
1362 unneededPaths = set()
1366 usedModules=set(self.
schedule_().moduleNames())
1368 schedNames = set(( x.label_()
for x
in self.
schedule_()))
1369 names = set(self.
paths)
1372 unneededPaths = names - schedNames
1373 for n
in unneededPaths:
1384 usedModules=set(temp.moduleNames())
1401 def removeUnneeded(seqOrTasks, allSequencesOrTasks):
1402 _keepSet = set(( s
for s
in seqOrTasks
if s.hasLabel_()))
1403 _availableSet = set(allSequencesOrTasks.values())
1404 _unneededSet = _availableSet-_keepSet
1405 _unneededLabels = []
1406 for s
in _unneededSet:
1407 _unneededLabels.append(s.label_())
1408 delattr(self,s.label_())
1409 return _unneededLabels
1410 unneededSeqLabels = removeUnneeded(seqs, self.
sequences)
1411 unneededTaskLabels = removeUnneeded(tasks, self.
tasks)
1413 print(
"prune removed the following:")
1414 print(
" modules:"+
",".
join(unneededModules))
1415 print(
" tasks:"+
",".
join(unneededTaskLabels))
1416 print(
" sequences:"+
",".
join(unneededSeqLabels))
1417 print(
" paths/endpaths/finalpaths:"+
",".
join(unneededPaths))
1419 moduleNames = set(d.keys())
1420 junk = moduleNames - scheduledNames
1426 """Used by the framework to convert python to C++ objects""" 1427 class ServiceInjectorAdaptor(
object):
1438 class TopLevelPSetAcessorAdaptor(
object):
1442 def __getattr__(self,attr):
1443 return getattr(self.
__ppset,attr)
1444 def getTopPSet_(self,label):
1448 def addPSet(self,tracked,name,ppset):
1449 return self.
__ppset.addPSet(tracked,name,self.__extractPSet(ppset))
1450 def addVPSet(self,tracked,name,vpset):
1451 return self.
__ppset.addVPSet(tracked,name,[self.__extractPSet(x)
for x
in vpset])
1452 def __extractPSet(self,pset):
1453 if isinstance(pset,TopLevelPSetAcessorAdaptor):
1458 processPSet.addString(
True,
"@process_name", self.
name_())
1461 all_modules.update(self.
filters_())
1464 adaptor = TopLevelPSetAcessorAdaptor(processPSet,self)
1477 all_modules_onTasksOrScheduled = { key:value
for key, value
in all_modules.items()
if value
in nodeVisitor.modules }
1478 self.
_insertManyInto(adaptor,
"@all_modules", all_modules_onTasksOrScheduled,
True)
1480 all_switches_onTasksOrScheduled = {key:value
for key, value
in all_switches.items()
if value
in nodeVisitor.modules }
1486 pTask.visit(processNodeVisitor)
1487 esProducersToEnable = {}
1489 if esProducer
in nodeVisitor.esProducers
or not (esProducer
in processNodeVisitor.esProducers):
1490 esProducersToEnable[esProducerName] = esProducer
1491 self.
_insertManyInto(adaptor,
"@all_esmodules", esProducersToEnable,
True)
1492 esSourcesToEnable = {}
1494 if esSource
in nodeVisitor.esSources
or not (esSource
in processNodeVisitor.esSources):
1495 esSourcesToEnable[esSourceName] = esSource
1496 self.
_insertManyInto(adaptor,
"@all_essources", esSourcesToEnable,
True)
1500 if serviceObject
in nodeVisitor.services
or not (serviceObject
in processNodeVisitor.services):
1501 serviceObject.insertInto(ServiceInjectorAdaptor(adaptor,services))
1502 adaptor.addVPSet(
False,
"services",services)
1514 allAccelerators = set([
"cpu"])
1515 availableAccelerators = set([
"cpu"])
1516 for acc
in self.__dict__[
'_Process__accelerators'].
values():
1517 allAccelerators.update(acc.labels())
1518 availableAccelerators.update(acc.enabledLabels())
1519 availableAccelerators = sorted(list(availableAccelerators))
1520 parameterSet.addVString(
False,
"@available_accelerators", availableAccelerators)
1523 selectedAccelerators = []
1524 if "*" in self.options.accelerators:
1525 if len(self.options.accelerators) >= 2:
1526 raise ValueError(
"process.options.accelerators may contain '*' only as the only element, now it has {} elements".
format(len(self.options.accelerators)))
1527 selectedAccelerators = availableAccelerators
1532 for pattern
in self.options.accelerators:
1533 acc = [a
for a
in availableAccelerators
if fnmatch.fnmatchcase(a, pattern)]
1535 if not any(fnmatch.fnmatchcase(a, pattern)
for a
in allAccelerators):
1536 invalid.append(pattern)
1538 resolved.update(acc)
1540 if len(invalid) != 0:
1541 raise ValueError(
"Invalid pattern{} of '{}' in process.options.accelerators, valid values are '{}' or a pattern matching some of them.".
format(
1542 "s" if len(invalid) > 2
else "",
1543 "', '".
join(invalid),
1544 "', '".
join(sorted(list(allAccelerators)))))
1545 selectedAccelerators = sorted(list(resolved))
1546 parameterSet.addVString(
False,
"@selected_accelerators", selectedAccelerators)
1549 moduleTypeResolver =
None 1550 moduleTypeResolverPlugin =
"" 1551 for acc
in self.__dict__[
'_Process__accelerators'].
values():
1552 resolver = acc.moduleTypeResolver(selectedAccelerators)
1553 if resolver
is not None:
1554 if moduleTypeResolver
is not None:
1555 raise RuntimeError(
"Module type resolver was already set to {} when {} tried to set it to {}. A job can have at most one ProcessAccelerator that sets module type resolver.".
format(
1556 moduleTypeResolver.__class__.__name__,
1557 acc.__class__.__name__,
1558 resolver.__class__.__name__))
1559 moduleTypeResolver = resolver
1560 if moduleTypeResolver
is not None:
1562 moduleTypeResolverPlugin = moduleTypeResolver.plugin()
1565 for modlist
in [self.producers_, self.filters_, self.analyzers_,
1566 self.es_producers_, self.es_sources_]:
1567 for module
in modlist().
values():
1568 moduleTypeResolver.setModuleVariant(module)
1570 parameterSet.addString(
False,
"@module_type_resolver", moduleTypeResolverPlugin)
1573 wrapped = ProcessForProcessAccelerator(self)
1574 for acc
in self.__dict__[
'_Process__accelerators'].
values():
1575 acc.apply(wrapped, selectedAccelerators)
1578 """Prefer this ES source or producer. The argument can 1579 either be an object label, e.g., 1580 process.prefer(process.juicerProducer) (not supported yet) 1581 or a name of an ESSource or ESProducer 1582 process.prefer("juicer") 1583 or a type of unnamed ESSource or ESProducer 1584 process.prefer("JuicerProducer") 1585 In addition, you can pass as a labelled arguments the name of the Record you wish to 1586 prefer where the type passed is a cms.vstring and that vstring can contain the 1587 name of the C++ types in the Record that are being preferred, e.g., 1588 #prefer all data in record 'OrangeRecord' from 'juicer' 1589 process.prefer("juicer", OrangeRecord=cms.vstring()) 1591 #prefer only "Orange" data in "OrangeRecord" from "juicer" 1592 process.prefer("juicer", OrangeRecord=cms.vstring("Orange")) 1594 #prefer only "Orange" data with label "ExtraPulp" in "OrangeRecord" from "juicer" 1595 ESPrefer("ESJuicerProd", OrangeRecord=cms.vstring("Orange/ExtraPulp")) 1598 if isinstance(esmodule, ESSource)
or isinstance(esmodule, ESProducer):
1599 raise RuntimeError(
"Syntax of process.prefer(process.esmodule) not supported yet")
1604 raise RuntimeError(
"Cannot resolve prefer for "+repr(esmodule))
1609 typ = d[esname].type_()
1618 for name, value
in d.items():
1619 if value.type_() == esname:
1621 raise RuntimeError(
"More than one ES module for "+esname)
1629 if isinstance(process, Process):
1631 elif isinstance(process, str):
1638 raise TypeError(
'a ProcessFragment can only be constructed from an existig Process or from process name')
1640 return [ x
for x
in dir(self.
__process)
if isinstance(getattr(self.
__process, x), _ConfigureComponent) ]
1642 if name ==
'_ProcessFragment__process':
1643 return object.__getattribute__(self,
'_ProcessFragment__process')
1647 if name ==
'_ProcessFragment__process':
1648 object.__setattr__(self, name, value)
1652 if name ==
'_ProcessFragment__process':
1659 """a dictionary with fixed keys""" 1661 raise AttributeError(
"An FilteredStream defintion cannot be modified after creation.")
1662 _blocked_attribute = property(_blocked_attribute)
1663 __setattr__ = __delitem__ = __setitem__ = clear = _blocked_attribute
1664 pop = popitem = setdefault = update = _blocked_attribute
1666 new = dict.__new__(cls)
1667 dict.__init__(new, *args, **kw)
1668 keys = sorted(kw.keys())
1669 if keys != [
'content',
'dataTier',
'name',
'paths',
'responsible',
'selectEvents']:
1670 raise ValueError(
"The needed parameters are: content, dataTier, name, paths, responsible, selectEvents")
1671 if not isinstance(kw[
'name'],str):
1672 raise ValueError(
"name must be of type string")
1673 if not isinstance(kw[
'content'], vstring)
and not isinstance(kw[
'content'],str):
1674 raise ValueError(
"content must be of type vstring or string")
1675 if not isinstance(kw[
'dataTier'], string):
1676 raise ValueError(
"dataTier must be of type string")
1677 if not isinstance(kw[
'selectEvents'], PSet):
1678 raise ValueError(
"selectEvents must be of type PSet")
1679 if not isinstance(kw[
'paths'],(tuple, Path)):
1680 raise ValueError(
"'paths' must be a tuple of paths")
1685 return "FilteredStream object: %s" %self[
"name"]
1690 """Allows embedding another process within a parent process. This allows one to 1691 chain processes together directly in one cmsRun job rather than having to run 1692 separate jobs that are connected via a temporary file. 1694 def __init__(self,process, SelectEvents = untracked.PSet(), outputCommands = untracked.vstring()):
1697 if not isinstance(process, Process):
1698 raise ValueError(
"the 'process' argument must be of type cms.Process")
1699 if not isinstance(SelectEvents,PSet):
1700 raise ValueError(
"the 'SelectEvents' argument must be of type cms.untracked.PSet")
1701 if not isinstance(outputCommands,vstring):
1702 raise ValueError(
"the 'outputCommands' argument must be of type cms.untracked.vstring")
1707 if self.
__process.MessageLogger
is not MessageLogger:
1708 print(
"""Warning: You have reconfigured service 1709 'edm::MessageLogger' in a subprocess. 1710 This service has already been configured. 1711 This particular service may not be reconfigured in a subprocess. 1712 The reconfiguration will be ignored.""")
1715 out =
"parentProcess"+
str(
hash(self))+
" = process\n" 1717 out +=
"childProcess = process\n" 1718 out +=
"process = parentProcess"+
str(
hash(self))+
"\n" 1734 process._placeSubProcess(
'subProcess',self)
1736 topPSet = parameterSet.newPSet()
1738 subProcessPSet = parameterSet.newPSet()
1741 subProcessPSet.addPSet(
False,
"process",topPSet)
1742 return subProcessPSet
1745 """Helper class for Modifier that takes key/value pairs and uses them to reset parameters of the object""" 1752 params[k] = getattr(obj,k)
1756 setattr(obj,k,params[k])
1762 raise KeyError(
"Unknown parameter name "+key+
" specified while calling Modifier")
1765 """A helper base class for _AndModifier, _InvertModifier, and _OrModifier to contain the common code""" 1771 Modifier._toModifyCheck(obj,func,**kw)
1772 if self._isChosen():
1773 Modifier._toModify(obj,func,**kw)
1776 Modifier._toReplaceWithCheck(toObj,fromObj)
1777 if self._isChosen():
1778 Modifier._toReplaceWith(toObj,fromObj)
1781 """This is used to create a ProcessModifer that can perform actions on the process as a whole. 1782 This takes as argument a callable object (e.g. function) that takes as its sole argument an instance of Process. 1783 In order to work, the value returned from this function must be assigned to a uniquely named variable.""" 1793 """A modifier which only applies if multiple Modifiers are chosen""" 1795 super(_AndModifier,self).
__init__(lhs, rhs)
1800 """A modifier which only applies if a Modifier is not chosen""" 1802 super(_InvertModifier,self).
__init__(lhs)
1807 """A modifier which only applies if at least one of multiple Modifiers is chosen""" 1809 super(_OrModifier,self).
__init__(lhs, rhs)
1815 """This class is used to define standard modifications to a Process. 1816 An instance of this class is declared to denote a specific modification,e.g. era2017 could 1817 reconfigure items in a process to match our expectation of running in 2017. Once declared, 1818 these Modifier instances are imported into a configuration and items that need to be modified 1819 are then associated with the Modifier and with the action to do the modification. 1820 The registered modifications will only occur if the Modifier was passed to 1821 the cms.Process' constructor. 1827 """This is used to create a ProcessModifer that can perform actions on the process as a whole. 1828 This takes as argument a callable object (e.g. function) that takes as its sole argument an instance of Process. 1829 In order to work, the value returned from this function must be assigned to a uniquely named variable. 1834 if func
is not None and len(kw) != 0:
1835 raise TypeError(
"toModify takes either two arguments or one argument and key/value pairs")
1837 """This is used to register an action to be performed on the specific object. Two different forms are allowed 1838 Form 1: A callable object (e.g. function) can be passed as the second. This callable object is expected to take one argument 1839 that will be the object passed in as the first argument. 1840 Form 2: A list of parameter name, value pairs can be passed 1841 mod.toModify(foo, fred=cms.int32(7), barney = cms.double(3.14)) 1842 This form can also be used to remove a parameter by passing the value of None 1843 #remove the parameter foo.fred 1844 mod.toModify(foo, fred = None) 1845 Additionally, parameters embedded within PSets can also be modified using a dictionary 1846 #change foo.fred.pebbles to 3 and foo.fred.friend to "barney" 1847 mod.toModify(foo, fred = dict(pebbles = 3, friend = "barney)) ) 1849 Modifier._toModifyCheck(obj,func,**kw)
1851 Modifier._toModify(obj,func,**kw)
1855 if func
is not None:
1862 if not isinstance(fromObj, type(toObj)):
1863 raise TypeError(
"toReplaceWith requires both arguments to be the same class type")
1865 """If the Modifier is chosen the internals of toObj will be associated with the internals of fromObj 1867 Modifier._toReplaceWithCheck(toObj,fromObj)
1869 Modifier._toReplaceWith(toObj,fromObj)
1873 if isinstance(fromObj,_ModuleSequenceType):
1874 toObj._seq = fromObj._seq
1875 toObj._tasks = fromObj._tasks
1876 elif isinstance(fromObj,Task):
1877 toObj._collection = fromObj._collection
1878 elif isinstance(fromObj,ConditionalTask):
1879 toObj._collection = fromObj._collection
1880 elif isinstance(fromObj,_Parameterizable):
1882 for p
in toObj.parameterNames_():
1884 for p
in fromObj.parameterNames_():
1885 setattr(toObj,p,getattr(fromObj,p))
1886 if isinstance(fromObj,_TypedParameterizable):
1887 toObj._TypedParameterizable__type = fromObj._TypedParameterizable__type
1890 raise TypeError(
"toReplaceWith does not work with type "+
str(type(toObj)))
1893 """Should only be called by cms.Process instances""" 1904 return self == other
1908 """A Modifier made up of a list of Modifiers 1914 """Should only be called by cms.Process instances 1915 applies list of accumulated changes to the process""" 1917 m._applyNewProcessModifiers(process)
1919 """Should only be called by cms.Process instances""" 1926 """Creates a new ModifierChain which is a copy of 1927 this ModifierChain but excludes any Modifier or 1928 ModifierChain in the list toExclude. 1929 The exclusion is done recursively down the chain. 1933 if m
not in toExclude:
1935 if isinstance(m,ModifierChain):
1936 s = m.__copyIfExclude(toExclude)
1952 if m._isOrContains(other):
1957 """A class used by a Modifier to affect an entire Process instance. 1958 When a Process 'loads' a module containing a ProcessModifier, that 1959 ProcessModifier will be applied to the Process if and only if the 1960 Modifier passed to the constructor has been chosen. 1973 """A class used to specify possible compute accelerators in a Process 1974 instance. It is intended to be derived for any 1975 accelerator/portability technology, and provides hooks such that a 1976 specific customization can be applied to the Process on a worker 1977 node at the point where the python configuration is serialized for C++. 1979 The customization must not change the configuration hash. To 1980 enforce this reuirement, the customization gets a 1981 ProcessForProcessAccelerator wrapper that gives access to only 1982 those parts of the configuration that can be changed. Nevertheless 1983 it would be good to have specific unit test for each deriving 1984 class to ensure that all combinations of the enabled accelerators 1985 give the same configuration hash. 1987 The deriving class must do its checks for hardware availability 1988 only in enabledLabels(), and possibly in apply() if any further 1989 fine-tuning is needed, because those two are the only functions 1990 that are guaranteed to be called at the worker node. 1995 proc._placeAccelerator(self.type_(), self)
1997 return type(self).__name__
1999 specialImportRegistry.registerUse(self)
2000 result = self.__class__.__name__+
"(" 2005 result +=
"\n"+res+
"\n" 2011 """Override if need to add any 'body' content to dumpPython(). Returns a string.""" 2014 """Override to return a list of strings for the accelerator labels.""" 2017 """Override to return a list of strings for the accelerator labels 2018 that are enabled in the system the job is being run on.""" 2021 """Override to return an object that implements "module type resolver" 2022 in python. The object should have the following methods 2023 - __init__(self, accelerators) 2024 * accelerators = list of selected accelerators 2026 * should return a string for the type resolver plugin name 2027 - setModuleVariant(self, module): 2028 * Called for each ED and ES module. Should act only if 2029 module.type_() contains the magic identifier 2031 At most one of the ProcessAccelerators in a job can return a 2036 """Override if need to customize the Process at worker node. The 2037 selected available accelerator labels are given in the 2038 'accelerators' argument (the patterns, e.g. '*' have been 2039 expanded to concrete labels). 2041 This function may touch only untracked parameters. 2046 """This class is inteded to wrap the Process object to constrain the 2047 available functionality for ProcessAccelerator.apply()""" 2052 if not isinstance(value, Service):
2053 raise TypeError(
"ProcessAccelerator.apply() can get only Services. Tried to get {} with label {}".
format(
str(type(value)), label))
2056 if label ==
"_ProcessForProcessAccelerator__process":
2059 if not isinstance(value, Service):
2060 raise TypeError(
"ProcessAccelerator.apply() can only set Services. Tried to set {} with label {}".
format(
str(type(value)), label))
2064 if not isinstance(value, Service):
2065 raise TypeError(
"ProcessAccelerator.apply() can delete only Services. Tried to del {} with label {}".
format(
str(type(value)), label))
2068 if not isinstance(value, Service):
2069 raise TypeError(
"ProcessAccelerator.apply() can only add Services. Tried to set {} with label {}".
format(
str(type(value)), label))
2075 return (
"test1" in accelerators, -10)
2077 return (
"test2" in accelerators, -9)
2079 if __name__==
"__main__":
2084 newString = ( x
for x
in newString.split(
'\n')
if len(x) > 0)
2085 oldString = [ x
for x
in oldString.split(
'\n')
if len(x) > 0]
2089 if oldStringLine >= len(oldString):
2092 if l == oldString[oldStringLine]:
2096 return "\n".
join( diff )
2099 """Has same interface as the C++ object that creates PSets 2104 self.
values[label]=(tracked,value)
2106 pair = self.
values[label]
2107 if pair[0] != tracked:
2108 raise Exception(
"Asked for %s parameter '%s', but it is %s" % (
"tracked" if tracked
else "untracked",
2110 "tracked" if pair[0]
else "untracked"))
2171 super(SwitchProducerTest,self).
__init__(
2173 test1 =
lambda accelerators: (
True, -10),
2174 test2 =
lambda accelerators: (
True, -9),
2175 test3 =
lambda accelerators: (
True, -8),
2176 test4 =
lambda accelerators: (
True, -7)
2178 specialImportRegistry.registerSpecialImportForType(SwitchProducerTest,
"from test import SwitchProducerTest")
2182 super(SwitchProducerTest2,self).
__init__(
2184 test1 = _switchproducer_test2_case1,
2185 test2 = _switchproducer_test2_case2,
2187 specialImportRegistry.registerSpecialImportForType(SwitchProducerTest2,
"from test import SwitchProducerTest2")
2193 if "test1" in accelerators:
2195 if "test2" in accelerators:
2198 raise EDMException(edm.errors.UnavailableAccelerator,
"Machine has no accelerators that Test supports (has {})".
format(
", ".
join(accelerators)))
2201 return "TestModuleTypeResolver" 2204 if "@test" in module.type_():
2206 if hasattr(module,
"test"):
2207 if hasattr(module.test,
"backend"):
2209 raise EDMException(edm.errors.UnavailableAccelerator,
"Module {} has the Test backend set explicitly, but its accelerator is not available for the job".
format(module.label_()))
2211 module.test.backend = untracked.string(defaultBackend)
2213 module.test = untracked.PSet(
2214 backend = untracked.string(defaultBackend)
2218 def __init__(self, enabled=["test1", "test2", "anothertest3"], moduleTypeResolverMaker=None):
2224 invalid = set(enabled).difference(set(self.
_labels))
2225 if len(invalid) > 0:
2226 raise Exception(
"Tried to enabled nonexistent test accelerators {}".
format(
",".
join(invalid)))
2229 result =
"{}enabled = [{}]".
format(options.indentation(),
2241 process.AcceleratorTestService =
Service(
"AcceleratorTestService")
2242 if hasattr(process,
"AcceleratorTestServiceRemove"):
2243 del process.AcceleratorTestServiceRemove
2244 specialImportRegistry.registerSpecialImportForType(ProcessAcceleratorTest,
"from test import ProcessAcceleratorTest")
2247 def __init__(self, enabled=["anothertest3", "anothertest4"], moduleTypeResolverMaker=None):
2253 invalid = set(enabled).difference(set(self.
_labels))
2254 if len(invalid) > 0:
2255 raise Exception(
"Tried to enabled nonexistent test accelerators {}".
format(
",".
join(invalid)))
2258 result =
"{}enabled = [{}]".
format(options.indentation(),
2271 specialImportRegistry.registerSpecialImportForType(ProcessAcceleratorTest2,
"from test import ProcessAcceleratorTest2")
2275 """Nothing to do """ 2279 self.assertEqual(len(p.parameterNames_()),0)
2281 self.assertTrue(
'a' in p.parameterNames_())
2282 self.assertEqual(p.a.value(), 1)
2284 self.assertEqual(p.a.value(), 10)
2286 self.assertEqual(p.a.value(), 1)
2287 self.assertFalse(p.a.isTracked())
2288 p.a = untracked.int32(1)
2289 self.assertEqual(p.a.value(), 1)
2290 self.assertFalse(p.a.isTracked())
2292 self.assertEqual(p.foo.value(), 10)
2293 self.assertEqual(p.bar.value(),1.0)
2294 self.assertFalse(p.bar.isTracked())
2295 self.assertRaises(TypeError,setattr,(p,
'c',1))
2297 self.assertEqual(p.a.foo.value(),10)
2298 self.assertEqual(p.a.bar.value(),1.0)
2300 self.assertEqual(p.b.fii.value(),1)
2301 self.assertFalse(p.b.isTracked())
2306 self.assertEqual(p.a.value(),11)
2308 self.assertEqual(p.a.value(),12)
2309 self.assertEqual(v.value(),12)
2315 self.assertNotEqual(p.b,other.b)
2320 self.assertTrue(
'a' in p.analyzers_() )
2321 self.assertTrue(
'a' in p.analyzers)
2322 p.add_(
Service(
"SomeService"))
2323 self.assertTrue(
'SomeService' in p.services_())
2324 self.assertEqual(p.SomeService.type_(),
"SomeService")
2326 self.assertTrue(
'Tracer' in p.services_())
2327 self.assertRaises(TypeError, setattr, *(p,
'b',
"this should fail"))
2328 self.assertRaises(TypeError, setattr, *(p,
'bad',
Service(
"MessageLogger")))
2329 self.assertRaises(ValueError, setattr, *(p,
'bad',
Source(
"PoolSource")))
2331 self.assertEqual(p.out.type_(),
'Outer')
2332 self.assertTrue(
'out' in p.outputModules_() )
2335 self.assertTrue(
'geom' in p.es_sources_())
2337 self.assertTrue(
'ConfigDB' in p.es_sources_())
2340 self.assertTrue(
'aliasfoo1' in p.aliases_())
2345 for name
in args.keys():
2346 self.__dict__[name]=args[name]
2365 self.assertEqual(p.a.type_(),
"MyAnalyzer")
2366 self.assertEqual(p.a.label_(),
"a")
2367 self.assertRaises(AttributeError,getattr,p,
'b')
2368 self.assertEqual(p.Full.type_(),
"Full")
2369 self.assertEqual(
str(p.c),
'a')
2370 self.assertEqual(
str(p.d),
'a')
2385 self.assertRaises(ValueError, p1.extend, z1)
2394 aaa=copy.deepcopy(a),
2395 s4=copy.deepcopy(s3),
2402 self.assertEqual(p2.s4.label_(),
"s4")
2404 self.assertRaises(ValueError, p2.s4.setLabel,
"foo")
2405 p2.s4.setLabel(
"s4")
2406 p2.s4.setLabel(
None)
2407 p2.s4.setLabel(
"foo")
2408 p2._Process__setObjectLabel(p2.s4,
"foo")
2409 p2._Process__setObjectLabel(p2.s4,
None)
2410 p2._Process__setObjectLabel(p2.s4,
"bar")
2417 self.assertRaises(ValueError, p.extend, FromArg(a =
EDProducer(
"YourProducer")))
2418 self.assertRaises(ValueError, p.extend, FromArg(a =
EDAlias()))
2419 self.assertRaises(ValueError, p.__setattr__,
"a",
EDAlias())
2425 self.assertRaises(ValueError, p.extend, FromArg(a =
EDProducer(
"YourProducer")))
2426 self.assertRaises(ValueError, p.extend, FromArg(a =
EDAlias()))
2427 self.assertRaises(ValueError, p.__setattr__,
"a",
EDAlias())
2433 self.assertRaises(ValueError, p.extend, FromArg(a =
EDProducer(
"YourProducer")))
2434 self.assertRaises(ValueError, p.extend, FromArg(a =
EDAlias()))
2435 self.assertRaises(ValueError, p.__setattr__,
"a",
EDAlias())
2439 """import FWCore.ParameterSet.Config as cms 2441 process = cms.Process("test") 2443 process.maxEvents = cms.untracked.PSet( 2444 input = cms.optional.untracked.int32, 2445 output = cms.optional.untracked.allowed(cms.int32,cms.PSet) 2448 process.maxLuminosityBlocks = cms.untracked.PSet( 2449 input = cms.untracked.int32(-1) 2452 process.options = cms.untracked.PSet( 2453 FailPath = cms.untracked.vstring(), 2454 IgnoreCompletely = cms.untracked.vstring(), 2455 Rethrow = cms.untracked.vstring(), 2456 SkipEvent = cms.untracked.vstring(), 2457 accelerators = cms.untracked.vstring('*'), 2458 allowUnscheduled = cms.obsolete.untracked.bool, 2459 canDeleteEarly = cms.untracked.vstring(), 2460 deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), 2461 dumpOptions = cms.untracked.bool(False), 2462 emptyRunLumiMode = cms.obsolete.untracked.string, 2463 eventSetup = cms.untracked.PSet( 2464 forceNumberOfConcurrentIOVs = cms.untracked.PSet( 2465 allowAnyLabel_=cms.required.untracked.uint32 2467 numberOfConcurrentIOVs = cms.untracked.uint32(0) 2469 fileMode = cms.untracked.string('FULLMERGE'), 2470 forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), 2471 holdsReferencesToDeleteEarly = cms.untracked.VPSet(), 2472 makeTriggerResults = cms.obsolete.untracked.bool, 2473 modulesToIgnoreForDeleteEarly = cms.untracked.vstring(), 2474 numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0), 2475 numberOfConcurrentRuns = cms.untracked.uint32(1), 2476 numberOfStreams = cms.untracked.uint32(0), 2477 numberOfThreads = cms.untracked.uint32(1), 2478 printDependencies = cms.untracked.bool(False), 2479 sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, 2480 throwIfIllegalParameter = cms.untracked.bool(True), 2481 wantSummary = cms.untracked.bool(False) 2484 process.MessageLogger = cms.Service("MessageLogger", 2485 cerr = cms.untracked.PSet( 2486 FwkReport = cms.untracked.PSet( 2487 limit = cms.untracked.int32(10000000), 2488 reportEvery = cms.untracked.int32(1) 2490 FwkSummary = cms.untracked.PSet( 2491 limit = cms.untracked.int32(10000000), 2492 reportEvery = cms.untracked.int32(1) 2494 INFO = cms.untracked.PSet( 2495 limit = cms.untracked.int32(0) 2497 Root_NoDictionary = cms.untracked.PSet( 2498 limit = cms.untracked.int32(0) 2500 default = cms.untracked.PSet( 2501 limit = cms.untracked.int32(10000000) 2503 enable = cms.untracked.bool(True), 2504 enableStatistics = cms.untracked.bool(False), 2505 lineLength = cms.optional.untracked.int32, 2506 noLineBreaks = cms.optional.untracked.bool, 2507 noTimeStamps = cms.untracked.bool(False), 2508 resetStatistics = cms.untracked.bool(False), 2509 statisticsThreshold = cms.untracked.string('WARNING'), 2510 threshold = cms.untracked.string('INFO'), 2511 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2512 limit = cms.optional.untracked.int32, 2513 reportEvery = cms.untracked.int32(1), 2514 timespan = cms.optional.untracked.int32 2517 cout = cms.untracked.PSet( 2518 enable = cms.untracked.bool(False), 2519 enableStatistics = cms.untracked.bool(False), 2520 lineLength = cms.optional.untracked.int32, 2521 noLineBreaks = cms.optional.untracked.bool, 2522 noTimeStamps = cms.optional.untracked.bool, 2523 resetStatistics = cms.untracked.bool(False), 2524 statisticsThreshold = cms.optional.untracked.string, 2525 threshold = cms.optional.untracked.string, 2526 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2527 limit = cms.optional.untracked.int32, 2528 reportEvery = cms.untracked.int32(1), 2529 timespan = cms.optional.untracked.int32 2532 debugModules = cms.untracked.vstring(), 2533 default = cms.untracked.PSet( 2534 limit = cms.optional.untracked.int32, 2535 lineLength = cms.untracked.int32(80), 2536 noLineBreaks = cms.untracked.bool(False), 2537 noTimeStamps = cms.untracked.bool(False), 2538 reportEvery = cms.untracked.int32(1), 2539 statisticsThreshold = cms.untracked.string('INFO'), 2540 threshold = cms.untracked.string('INFO'), 2541 timespan = cms.optional.untracked.int32, 2542 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2543 limit = cms.optional.untracked.int32, 2544 reportEvery = cms.untracked.int32(1), 2545 timespan = cms.optional.untracked.int32 2548 files = cms.untracked.PSet( 2549 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2550 enableStatistics = cms.untracked.bool(False), 2551 extension = cms.optional.untracked.string, 2552 filename = cms.optional.untracked.string, 2553 lineLength = cms.optional.untracked.int32, 2554 noLineBreaks = cms.optional.untracked.bool, 2555 noTimeStamps = cms.optional.untracked.bool, 2556 output = cms.optional.untracked.string, 2557 resetStatistics = cms.untracked.bool(False), 2558 statisticsThreshold = cms.optional.untracked.string, 2559 threshold = cms.optional.untracked.string, 2560 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2561 limit = cms.optional.untracked.int32, 2562 reportEvery = cms.untracked.int32(1), 2563 timespan = cms.optional.untracked.int32 2567 suppressDebug = cms.untracked.vstring(), 2568 suppressFwkInfo = cms.untracked.vstring(), 2569 suppressInfo = cms.untracked.vstring(), 2570 suppressWarning = cms.untracked.vstring(), 2571 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2572 limit = cms.optional.untracked.int32, 2573 reportEvery = cms.untracked.int32(1), 2574 timespan = cms.optional.untracked.int32 2589 """process.a = cms.EDAnalyzer("MyAnalyzer") 2590 process.s = cms.Sequence(process.a) 2591 process.r = cms.Sequence(process.s) 2592 process.p = cms.Path(process.a) 2593 process.p2 = cms.Path(process.s) 2594 process.schedule = cms.Schedule(*[ process.p2, process.p ])""")
2606 """process.a = cms.EDAnalyzer("MyAnalyzer") 2607 process.b = cms.EDAnalyzer("YourAnalyzer") 2608 process.r = cms.Sequence(process.a) 2609 process.s = cms.Sequence(process.r) 2610 process.p = cms.Path(process.a) 2611 process.p2 = cms.Path(process.r) 2612 process.schedule = cms.Schedule(*[ process.p2, process.p ])""")
2623 """process.a = cms.EDAnalyzer("MyAnalyzer") 2624 process.r = cms.Sequence((process.a)) 2625 process.p = cms.Path(process.a) 2626 process.p2 = cms.Path(process.r) 2627 process.schedule = cms.Schedule(*[ process.p2, process.p ])""")
2643 p.task3.add(p.task1)
2647 p.p2 =
Path(p.r, p.task1, p.task2)
2648 p.schedule =
Schedule(p.p2,p.p,tasks=[p.task3,p.task4, p.task5])
2651 """process.b = cms.EDProducer("bProducer") 2652 process.c = cms.EDProducer("cProducer") 2653 process.d = cms.EDProducer("dProducer") 2654 process.e = cms.EDProducer("eProducer") 2655 process.f = cms.EDProducer("fProducer") 2656 process.g = cms.EDProducer("gProducer") 2657 process.a = cms.EDAnalyzer("MyAnalyzer") 2658 process.task5 = cms.Task() 2659 process.task1 = cms.Task(process.task5) 2660 process.task3 = cms.Task(process.task1) 2661 process.task2 = cms.Task(process.c, process.task3) 2662 process.task4 = cms.Task(process.f, process.task2) 2663 process.r = cms.Sequence((process.a)) 2664 process.p = cms.Path(process.a) 2665 process.p2 = cms.Path(process.r, process.task1, process.task2) 2666 process.schedule = cms.Schedule(*[ process.p2, process.p ], tasks=[process.task3, process.task4, process.task5])""")
2683 p.p2 =
Path(p.r, p.task1, p.task2)
2684 p.schedule =
Schedule(p.p2,p.p,tasks=[p.task5])
2687 """process.b = cms.EDProducer("bProducer") 2688 process.c = cms.EDProducer("cProducer") 2689 process.d = cms.EDProducer("dProducer") 2690 process.e = cms.EDProducer("eProducer") 2691 process.f = cms.EDProducer("fProducer") 2692 process.g = cms.EDProducer("gProducer") 2693 process.a = cms.EDAnalyzer("MyAnalyzer") 2694 process.task5 = cms.Task() 2695 process.task3 = cms.Task() 2696 process.task2 = cms.ConditionalTask(process.c, process.task3) 2697 process.task1 = cms.ConditionalTask(process.task5) 2698 process.r = cms.Sequence((process.a)) 2699 process.p = cms.Path(process.a) 2700 process.p2 = cms.Path(process.r, process.task1, process.task2) 2701 process.schedule = cms.Schedule(*[ process.p2, process.p ], tasks=[process.task5])""")
2708 p.task1 =
Task(p.d, p.e)
2709 task2 =
Task(p.f, p.g)
2710 p.schedule =
Schedule(tasks=[p.task1,task2])
2713 """process.d = cms.EDProducer("dProducer") 2714 process.e = cms.EDProducer("eProducer") 2715 process.f = cms.EDProducer("fProducer") 2716 process.g = cms.EDProducer("gProducer") 2717 process.task1 = cms.Task(process.d, process.e) 2718 process.schedule = cms.Schedule(tasks=[cms.Task(process.f, process.g), process.task1])""")
2724 """process.schedule = cms.Schedule()""")
2733 d=process.dumpPython()
2735 """process.a = cms.EDProducer("A") 2736 process.s2 = cms.Sequence(process.a)""")
2746 d=process.dumpPython()
2748 """process.a = cms.EDProducer("A") 2749 process.s2 = cms.Sequence(process.a+(process.a+process.a))""")
2775 p.p =
Path(p.c+s+p.a)
2776 p.p2 =
Path(p.c+p.s4+p.a, p.ct1)
2782 self.assertTrue(visitor1.modules == set([old,old2,p.b,p.c]))
2784 p.globalReplace(
"a",new)
2785 p.globalReplace(
"d",new2)
2788 self.assertTrue(visitor2.modules == set([new,new2,p.b,p.c]))
2789 self.assertEqual(p.p.dumpPython()[:-1],
"cms.Path(process.c+process.a+process.b+process.a, cms.Task(process.d))")
2791 p.p2.visit(visitor_p2)
2792 self.assertTrue(visitor_p2.modules == set([new,new2,p.b,p.c]))
2793 self.assertEqual(p.p2.dumpPython()[:-1],
"cms.Path(process.c+process.s4+process.a, process.ct1)")
2795 p.e3.visit(visitor3)
2796 self.assertTrue(visitor3.modules == set([new,new2,p.b,p.c]))
2798 p.s4.visit(visitor4)
2799 self.assertTrue(visitor4.modules == set([new,new2,p.b]))
2800 self.assertEqual(p.s4.dumpPython()[:-1],
"cms.Sequence(process.a+process.b, cms.Task(process.d), process.ct1)")
2802 p.t1.visit(visitor5)
2803 self.assertTrue(visitor5.modules == set([new2]))
2805 listOfTasks = list(p.schedule._tasks)
2806 listOfTasks[0].visit(visitor6)
2807 self.assertTrue(visitor6.modules == set([new2]))
2809 p.ct1.visit(visitor7)
2810 self.assertTrue(visitor7.modules == set([new2]))
2812 listOfConditionalTasks = list(p.conditionaltasks.values())
2813 listOfConditionalTasks[0].visit(visitor8)
2814 self.assertTrue(visitor8.modules == set([new2]))
2818 p.schedule =
Schedule(p.p, p.p2, p.e3, tasks=[p.t1])
2819 self.assertEqual(p.schedule.dumpPython()[:-1],
"cms.Schedule(*[ process.p, process.p2, process.e3 ], tasks=[process.t1])")
2821 self.assertEqual(p.schedule.dumpPython()[:-1],
"cms.Schedule(*[ process.p, process.p2, process.e3 ], tasks=[process.t1])")
2823 self.assertEqual(p.schedule.dumpPython()[:-1],
"cms.Schedule(*[ process.p, process.p2, process.e3 ], tasks=[process.t1])")
2825 self.assertEqual(p.schedule.dumpPython()[:-1],
"cms.Schedule(*[ process.p, process.p2, process.e3 ], tasks=[process.t1])")
2833 self.assertEqual(
str(p.s),
'a+b')
2834 self.assertEqual(p.s.label_(),
's')
2835 path =
Path(p.c+p.s)
2836 self.assertEqual(
str(path),
'c+a+b')
2837 p._validateSequence(path,
'p1')
2839 p2 =
Path(p.c+p.s*notInProcess)
2840 self.assertRaises(RuntimeError, p._validateSequence, p2,
'p2')
2850 self.assertRaises(ValueError, p.__setattr__,
"y", testseq)
2854 self.assertFalse(service._inProcess)
2857 self.assertTrue(service._inProcess)
2859 process.d = service2
2860 self.assertFalse(service._inProcess)
2861 self.assertTrue(service2._inProcess)
2863 self.assertFalse(service2._inProcess)
2877 service3 =
Service(
"d", v = untracked.uint32(3))
2883 testTask1 =
Task(edproducer, edfilter)
2884 self.assertRaises(RuntimeError, testTask1.add, edanalyzer)
2885 testTask1.add(essource, service)
2886 testTask1.add(essource, esproducer)
2887 testTask1.add(testTask2)
2888 coll = testTask1._collection
2889 self.assertTrue(edproducer
in coll)
2890 self.assertTrue(edfilter
in coll)
2891 self.assertTrue(service
in coll)
2892 self.assertTrue(essource
in coll)
2893 self.assertTrue(esproducer
in coll)
2894 self.assertTrue(testTask2
in coll)
2895 self.assertTrue(len(coll) == 6)
2896 self.assertTrue(len(testTask2._collection) == 0)
2900 taskContents.append(i)
2901 self.assertTrue(taskContents == [edproducer, edfilter, essource, service, esproducer, testTask2])
2906 process.mproducer = edproducer
2907 process.mproducer2 = edproducer2
2908 process.mfilter = edfilter
2909 process.messource = essource
2910 process.mesproducer = esproducer
2913 testTask3 =
Task(edproducer, edproducer2)
2914 testTask1.add(testTask3)
2915 process.myTask1 = testTask1
2922 testTask1.visit(visitor)
2923 self.assertTrue(l == set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
2924 l2 = testTask1.moduleNames
2925 self.assertTrue(l == set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
2927 testTask4 =
Task(edproducer3)
2929 self.assertRaises(RuntimeError, testTask4.visit, visitor)
2931 process.myTask4 = testTask4
2932 self.assertTrue(
False)
2933 except RuntimeError:
2936 testTask5 =
Task(service3)
2938 self.assertRaises(RuntimeError, testTask5.visit, visitor)
2940 process.myTask5 = testTask5
2941 self.assertTrue(
False)
2942 except RuntimeError:
2945 process.d = service3
2946 process.myTask5 = testTask5
2949 expectedDict = {
'myTask1' : testTask1,
'myTask5' : testTask5 }
2951 self.assertTrue(process.tasks == expectedFixedDict)
2952 self.assertTrue(process.tasks[
'myTask1'] == testTask1)
2953 self.assertTrue(process.myTask1 == testTask1)
2957 process.mproducer2 = edproducer4
2961 testTask1.visit(visitor1)
2962 l.sort(key=
lambda mod: mod.__str__())
2963 expectedList = sorted([edproducer,essource,esproducer,service,edfilter,edproducer,edproducer4],key=
lambda mod: mod.__str__())
2964 self.assertTrue(expectedList == l)
2965 process.myTask6 =
Task()
2966 process.myTask7 =
Task()
2967 process.mproducer8 = edproducer8
2968 process.myTask8 =
Task(process.mproducer8)
2969 process.myTask6.add(process.myTask7)
2970 process.myTask7.add(process.myTask8)
2971 process.myTask1.add(process.myTask6)
2972 process.myTask8.add(process.myTask5)
2974 testDict = process._itemsInDependencyOrder(process.tasks)
2975 expectedLabels = [
"myTask5",
"myTask8",
"myTask7",
"myTask6",
"myTask1"]
2976 expectedTasks = [process.myTask5, process.myTask8, process.myTask7, process.myTask6, process.myTask1]
2978 for testLabel, testTask
in testDict.items():
2979 self.assertTrue(testLabel == expectedLabels[index])
2980 self.assertTrue(testTask == expectedTasks[index])
2986 expectedPythonDump =
'cms.Task(process.d, process.mesproducer, process.messource, process.mfilter, process.mproducer, process.mproducer2, process.myTask6)\n' 2987 self.assertTrue(pythonDump == expectedPythonDump)
2989 process.myTask5 =
Task()
2990 process.myTask100 =
Task()
2991 process.mproducer9 = edproducer9
2992 sequence1 =
Sequence(process.mproducer8, process.myTask1, process.myTask5, testTask2, testTask3)
2993 sequence2 =
Sequence(process.mproducer8 + process.mproducer9)
2994 process.sequence3 =
Sequence((process.mproducer8 + process.mfilter))
2996 process.path1 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+sequence4)
2997 process.path1.associate(process.myTask1, process.myTask5, testTask2, testTask3)
2998 process.path11 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+ sequence4,process.myTask1, process.myTask5, testTask2, testTask3, process.myTask100)
2999 process.path2 =
Path(process.mproducer)
3000 process.path3 =
Path(process.mproducer9+process.mproducer8,testTask2)
3002 self.assertTrue(process.path1.dumpPython(
PrintOptions()) ==
'cms.Path(process.mproducer+process.mproducer8+cms.Sequence(process.mproducer8, cms.Task(), cms.Task(process.None, process.mproducer), process.myTask1, process.myTask5)+(process.mproducer8+process.mproducer9)+process.sequence3, cms.Task(), cms.Task(process.None, process.mproducer), process.myTask1, process.myTask5)\n')
3004 self.assertTrue(process.path11.dumpPython(
PrintOptions()) ==
'cms.Path(process.mproducer+process.mproducer8+cms.Sequence(process.mproducer8, cms.Task(), cms.Task(process.None, process.mproducer), process.myTask1, process.myTask5)+(process.mproducer8+process.mproducer9)+process.sequence3, cms.Task(), cms.Task(process.None, process.mproducer), process.myTask1, process.myTask100, process.myTask5)\n')
3009 process.path1.visit(nameVisitor)
3010 self.assertTrue(l == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3011 self.assertTrue(process.path1.moduleNames() == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3015 process.path21 = process.path11.copy()
3016 process.path21.replace(process.mproducer, process.mproducer10)
3018 self.assertTrue(process.path11.dumpPython(
PrintOptions()) ==
'cms.Path(process.mproducer+process.mproducer8+cms.Sequence(process.mproducer8, cms.Task(), cms.Task(process.None, process.mproducer), process.myTask1, process.myTask5)+(process.mproducer8+process.mproducer9)+process.sequence3, cms.Task(), cms.Task(process.None, process.mproducer), process.myTask1, process.myTask100, process.myTask5)\n')
3027 self.assertTrue(process.path21.dumpPython(
PrintOptions()) ==
'cms.Path(process.mproducer10+process.mproducer8+process.mproducer8+(process.mproducer8+process.mproducer9)+process.sequence3, cms.Task(), cms.Task(process.None, process.mproducer10), cms.Task(process.d, process.mesproducer, process.messource, process.mfilter, process.mproducer10, process.mproducer2, process.mproducer8, process.myTask5), process.myTask100, process.myTask5)\n')
3029 process.path22 = process.path21.copyAndExclude([process.d, process.mesproducer, process.mfilter])
3030 self.assertTrue(process.path22.dumpPython(
PrintOptions()) ==
'cms.Path(process.mproducer10+process.mproducer8+process.mproducer8+(process.mproducer8+process.mproducer9)+process.mproducer8, cms.Task(), cms.Task(process.None, process.mproducer10), cms.Task(process.messource, process.mproducer10, process.mproducer2, process.mproducer8, process.myTask5), process.myTask100, process.myTask5)\n')
3032 process.path23 = process.path22.copyAndExclude([process.messource, process.mproducer10])
3033 self.assertTrue(process.path23.dumpPython(
PrintOptions()) ==
'cms.Path(process.mproducer8+process.mproducer8+(process.mproducer8+process.mproducer9)+process.mproducer8, cms.Task(), cms.Task(process.None), cms.Task(process.mproducer2, process.mproducer8, process.myTask5), process.myTask100, process.myTask5)\n')
3042 process.path24 =
Path(process.a+process.b+process.c+process.d)
3043 process.path25 = process.path24.copyAndExclude([process.a,process.b,process.c])
3044 self.assertTrue(process.path25.dumpPython() ==
'cms.Path(process.d)\n')
3049 process.path200.replace(process.c,process.b)
3050 process.path200.replace(process.e,process.f)
3051 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.b, cms.Task(process.f))\n")
3052 process.path200.replace(process.b,process.c)
3053 process.path200.replace(process.f,process.e)
3054 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.c, cms.Task(process.e))\n")
3055 process.path200.replace(process.c,process.a)
3056 process.path200.replace(process.e,process.g)
3057 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.a, cms.Task(process.g))\n")
3058 process.path200.replace(process.a,process.c)
3059 process.path200.replace(process.g,process.e)
3060 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.c, cms.Task(process.e))\n")
3074 service3 =
Service(
"d", v = untracked.uint32(3))
3082 self.assertRaises(RuntimeError, testTask1.add, edanalyzer)
3083 testTask1.add(essource, service)
3084 testTask1.add(essource, esproducer)
3085 testTask1.add(testTask2)
3086 testTask1.add(testCTask2)
3087 coll = testTask1._collection
3088 self.assertTrue(edproducer
in coll)
3089 self.assertTrue(edfilter
in coll)
3090 self.assertTrue(service
in coll)
3091 self.assertTrue(essource
in coll)
3092 self.assertTrue(esproducer
in coll)
3093 self.assertTrue(testTask2
in coll)
3094 self.assertTrue(testCTask2
in coll)
3095 self.assertTrue(len(coll) == 7)
3096 self.assertTrue(len(testTask2._collection) == 0)
3100 taskContents.append(i)
3101 self.assertEqual(taskContents, [edproducer, edfilter, essource, service, esproducer, testTask2, testCTask2])
3106 process.mproducer = edproducer
3107 process.mproducer2 = edproducer2
3108 process.mfilter = edfilter
3109 process.messource = essource
3110 process.mesproducer = esproducer
3114 testTask1.add(testTask3)
3115 process.myTask1 = testTask1
3122 testTask1.visit(visitor)
3123 self.assertEqual(l, set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
3124 l2 = testTask1.moduleNames()
3125 self.assertEqual(l2, set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
3129 self.assertRaises(RuntimeError, testTask4.visit, visitor)
3131 process.myTask4 = testTask4
3132 self.assertTrue(
False)
3133 except RuntimeError:
3138 self.assertRaises(RuntimeError, testTask5.visit, visitor)
3140 process.myTask5 = testTask5
3141 self.assertTrue(
False)
3142 except RuntimeError:
3145 process.d = service3
3146 process.myTask5 = testTask5
3149 expectedDict = {
'myTask1' : testTask1,
'myTask5' : testTask5 }
3151 self.assertEqual(process.conditionaltasks, expectedFixedDict)
3152 self.assertEqual(process.conditionaltasks[
'myTask1'], testTask1)
3153 self.assertEqual(process.myTask1, testTask1)
3157 process.mproducer2 = edproducer4
3161 testTask1.visit(visitor1)
3162 l.sort(key=
lambda mod: mod.__str__())
3163 expectedList = sorted([edproducer,essource,esproducer,service,edfilter,edproducer,edproducer4],key=
lambda mod: mod.__str__())
3164 self.assertEqual(expectedList, l)
3167 process.mproducer8 = edproducer8
3169 process.myTask6.add(process.myTask7)
3170 process.myTask7.add(process.myTask8)
3171 process.myTask1.add(process.myTask6)
3172 process.myTask8.add(process.myTask5)
3173 self.assertEqual(process.myTask8.dumpPython(),
"cms.ConditionalTask(process.mproducer8, process.myTask5)\n")
3175 testDict = process._itemsInDependencyOrder(process.conditionaltasks)
3176 expectedLabels = [
"myTask5",
"myTask8",
"myTask7",
"myTask6",
"myTask1"]
3177 expectedTasks = [process.myTask5, process.myTask8, process.myTask7, process.myTask6, process.myTask1]
3179 for testLabel, testTask
in testDict.items():
3180 self.assertEqual(testLabel, expectedLabels[index])
3181 self.assertEqual(testTask, expectedTasks[index])
3187 expectedPythonDump =
'cms.ConditionalTask(process.d, process.mesproducer, process.messource, process.mfilter, process.mproducer, process.mproducer2, process.myTask6)\n' 3188 self.assertEqual(pythonDump, expectedPythonDump)
3191 self.assertEqual(process.myTask8.dumpPython(),
"cms.ConditionalTask(process.mproducer8, process.myTask5)\n")
3193 process.mproducer9 = edproducer9
3194 sequence1 =
Sequence(process.mproducer8, process.myTask1, process.myTask5, testTask2, testTask3)
3195 sequence2 =
Sequence(process.mproducer8 + process.mproducer9)
3196 process.sequence3 =
Sequence((process.mproducer8 + process.mfilter))
3198 process.path1 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+sequence4)
3199 process.path1.associate(process.myTask1, process.myTask5, testTask2, testTask3)
3200 process.path11 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+ sequence4,process.myTask1, process.myTask5, testTask2, testTask3, process.myTask100)
3201 process.path2 =
Path(process.mproducer)
3202 process.path3 =
Path(process.mproducer9+process.mproducer8,testTask2)
3204 self.assertEqual(process.path1.dumpPython(
PrintOptions()),
'cms.Path(process.mproducer+process.mproducer8+cms.Sequence(process.mproducer8, cms.ConditionalTask(process.None, process.mproducer), cms.Task(), process.myTask1, process.myTask5)+(process.mproducer8+process.mproducer9)+process.sequence3, cms.ConditionalTask(process.None, process.mproducer), cms.Task(), process.myTask1, process.myTask5)\n')
3206 self.assertEqual(process.path11.dumpPython(
PrintOptions()),
'cms.Path(process.mproducer+process.mproducer8+cms.Sequence(process.mproducer8, cms.ConditionalTask(process.None, process.mproducer), cms.Task(), process.myTask1, process.myTask5)+(process.mproducer8+process.mproducer9)+process.sequence3, cms.ConditionalTask(process.None, process.mproducer), cms.Task(), process.myTask1, process.myTask100, process.myTask5)\n')
3211 process.path1.visit(nameVisitor)
3212 self.assertTrue(l == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3213 self.assertTrue(process.path1.moduleNames() == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3217 process.path21 = process.path11.copy()
3218 process.path21.replace(process.mproducer, process.mproducer10)
3220 self.assertEqual(process.path11.dumpPython(
PrintOptions()),
'cms.Path(process.mproducer+process.mproducer8+cms.Sequence(process.mproducer8, cms.ConditionalTask(process.None, process.mproducer), cms.Task(), process.myTask1, process.myTask5)+(process.mproducer8+process.mproducer9)+process.sequence3, cms.ConditionalTask(process.None, process.mproducer), cms.Task(), process.myTask1, process.myTask100, process.myTask5)\n')
3229 self.assertEqual(process.path21.dumpPython(
PrintOptions()),
'cms.Path(process.mproducer10+process.mproducer8+process.mproducer8+(process.mproducer8+process.mproducer9)+process.sequence3, cms.ConditionalTask(process.None, process.mproducer10), cms.ConditionalTask(process.d, process.mesproducer, process.messource, process.mfilter, process.mproducer10, process.mproducer2, process.mproducer8, process.myTask5), cms.Task(), process.myTask100, process.myTask5)\n')
3231 process.path22 = process.path21.copyAndExclude([process.d, process.mesproducer, process.mfilter])
3232 self.assertEqual(process.path22.dumpPython(
PrintOptions()),
'cms.Path(process.mproducer10+process.mproducer8+process.mproducer8+(process.mproducer8+process.mproducer9)+process.mproducer8, cms.ConditionalTask(process.None, process.mproducer10), cms.ConditionalTask(process.messource, process.mproducer10, process.mproducer2, process.mproducer8, process.myTask5), cms.Task(), process.myTask100, process.myTask5)\n')
3234 process.path23 = process.path22.copyAndExclude([process.messource, process.mproducer10])
3235 self.assertEqual(process.path23.dumpPython(
PrintOptions()),
'cms.Path(process.mproducer8+process.mproducer8+(process.mproducer8+process.mproducer9)+process.mproducer8, cms.ConditionalTask(process.None), cms.ConditionalTask(process.mproducer2, process.mproducer8, process.myTask5), cms.Task(), process.myTask100, process.myTask5)\n')
3244 process.fillProcessDesc(p)
3245 self.assertEqual(p.values[
"@all_modules"], (
True, [
'b',
'b2',
'b3']))
3246 self.assertEqual(p.values[
"@paths"], (
True, [
'p']))
3247 self.assertEqual(p.values[
"p"], (
True, [
'b',
'#',
'b2',
'b3',
'@']))
3258 self.assertEqual(
str(path),
'a+b+c')
3259 path =
Path(p.a*p.b+p.c)
3260 self.assertEqual(
str(path),
'a+b+c')
3263 path =
Path(p.a+ p.b*p.c)
3264 self.assertEqual(
str(path),
'a+b+c')
3265 path =
Path(p.a*(p.b+p.c))
3266 self.assertEqual(
str(path),
'a+b+c')
3267 path =
Path(p.a*(p.b+~p.c))
3269 self.assertEqual(
str(path),
'a+b+~c')
3271 self.assertRaises(TypeError,Path,p.es)
3274 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path()\n')
3277 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a)\n')
3280 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(cms.Task())\n')
3283 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.Task())\n')
3288 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.Task(), process.t1)\n')
3291 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(cms.ConditionalTask())\n')
3294 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.ConditionalTask())\n')
3299 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.Task(), process.t1)\n')
3309 self.assertEqual(
str(path),
'a+b+c')
3311 self.assertEqual(
str(path),
'a+b+c')
3313 self.assertEqual(
str(path),
'a+b+c')
3315 self.assertEqual(
str(path),
'a+b+c')
3317 self.assertRaises(TypeError,FinalPath,p.es)
3320 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.FinalPath()\n')
3323 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.FinalPath(process.a)\n')
3325 self.assertRaises(TypeError, FinalPath,
Task())
3326 self.assertRaises(TypeError, FinalPath, p.a,
Task())
3330 self.assertRaises(TypeError, FinalPath, p.a, p.t1,
Task(), p.t1)
3334 self.assertRaises(TypeError, FinalPath, p.a, p.t1,
ConditionalTask(), p.t1)
3338 self.assertEqual(p.t.dumpPython(
PrintOptions()),
'cms.FinalPath(process.a)\n')
3349 p.path =
Path(p.a*p.b)
3350 lookuptable = {
id(a): p.a,
id(b): p.b}
3354 self.assertEqual(
str(path),
str(p.path))
3376 path =
Path(a * c * seq1, task1, ctask1)
3378 self.assertTrue(path.contains(a))
3379 self.assertFalse(path.contains(b))
3380 self.assertTrue(path.contains(c))
3381 self.assertFalse(path.contains(d))
3382 self.assertTrue(path.contains(e))
3383 self.assertFalse(path.contains(f))
3384 self.assertTrue(path.contains(g))
3385 self.assertTrue(path.contains(h))
3388 self.assertFalse(endpath.contains(b))
3389 self.assertTrue(endpath.contains(i))
3392 self.assertFalse(seq.contains(b))
3393 self.assertTrue(seq.contains(c))
3396 task =
Task(j, k, task2)
3397 self.assertFalse(task.contains(b))
3398 self.assertTrue(task.contains(j))
3399 self.assertTrue(task.contains(k))
3400 self.assertTrue(task.contains(l))
3404 sch =
Schedule(path, path2, tasks=[task,task3])
3405 self.assertFalse(sch.contains(b))
3406 self.assertTrue(sch.contains(a))
3407 self.assertTrue(sch.contains(c))
3408 self.assertTrue(sch.contains(e))
3409 self.assertTrue(sch.contains(g))
3410 self.assertTrue(sch.contains(n))
3411 self.assertTrue(sch.contains(j))
3412 self.assertTrue(sch.contains(k))
3413 self.assertTrue(sch.contains(l))
3414 self.assertTrue(sch.contains(m))
3418 self.assertFalse(ctask.contains(b))
3419 self.assertTrue(ctask.contains(j))
3420 self.assertTrue(ctask.contains(k))
3421 self.assertTrue(ctask.contains(l))
3422 self.assertTrue(ctask.contains(g))
3435 self.assertEqual(s[0],p.path1)
3436 self.assertEqual(s[1],p.path2)
3438 self.assertTrue(
'b' in p.schedule.moduleNames())
3439 self.assertTrue(hasattr(p,
'b'))
3440 self.assertTrue(hasattr(p,
'c'))
3441 self.assertTrue(hasattr(p,
'd'))
3442 self.assertTrue(hasattr(p,
'path1'))
3443 self.assertTrue(hasattr(p,
'path2'))
3444 self.assertTrue(hasattr(p,
'path3'))
3446 self.assertTrue(
'b' in p.schedule.moduleNames())
3447 self.assertTrue(hasattr(p,
'b'))
3448 self.assertTrue(
not hasattr(p,
'c'))
3449 self.assertTrue(
not hasattr(p,
'd'))
3450 self.assertTrue(hasattr(p,
'path1'))
3451 self.assertTrue(hasattr(p,
'path2'))
3452 self.assertTrue(
not hasattr(p,
'path3'))
3454 self.assertTrue(len(p.schedule._tasks) == 0)
3468 p.task2 =
Task(p.f, p.Tracer)
3469 s =
Schedule(p.path1,p.path2,tasks=[p.task1,p.task2,p.task1])
3470 self.assertEqual(s[0],p.path1)
3471 self.assertEqual(s[1],p.path2)
3472 self.assertTrue(len(s._tasks) == 2)
3473 self.assertTrue(p.task1
in s._tasks)
3474 self.assertTrue(p.task2
in s._tasks)
3475 listOfTasks = list(s._tasks)
3476 self.assertTrue(len(listOfTasks) == 2)
3477 self.assertTrue(p.task1 == listOfTasks[0])
3478 self.assertTrue(p.task2 == listOfTasks[1])
3480 self.assertTrue(
'b' in p.schedule.moduleNames())
3485 process2.path1 =
Path(process2.a)
3486 process2.task1 =
Task(process2.e)
3487 process2.schedule =
Schedule(process2.path1,tasks=process2.task1)
3488 listOfTasks = list(process2.schedule._tasks)
3489 self.assertTrue(listOfTasks[0] == process2.task1)
3493 self.assertEqual(s2[0],p.path1)
3494 self.assertEqual(s2[1],p.path2)
3495 self.assertTrue(len(s2._tasks) == 2)
3496 self.assertTrue(p.task1
in s2._tasks)
3497 self.assertTrue(p.task2
in s2._tasks)
3498 listOfTasks = list(s2._tasks)
3499 self.assertTrue(len(listOfTasks) == 2)
3500 self.assertTrue(p.task1 == listOfTasks[0])
3501 self.assertTrue(p.task2 == listOfTasks[1])
3503 names = s.moduleNames()
3504 self.assertTrue(names == set([
'a',
'b',
'e',
'Tracer',
'f']))
3510 self.assertRaises(RuntimeError,
lambda : p.setSchedule_(s) )
3519 self.assertTrue(
'a' in s.moduleNames())
3520 self.assertTrue(
'b' in s.moduleNames())
3521 self.assertTrue(
'c' in s.moduleNames())
3525 self.assertTrue(
'a' in s.moduleNames())
3526 self.assertTrue(
'b' in s.moduleNames())
3527 self.assertTrue(
'c' in s.moduleNames())
3536 self.assertTrue(p.schedule
is None)
3539 self.assertEqual(pths[keys[0]],p.path1)
3540 self.assertEqual(pths[keys[1]],p.path2)
3542 self.assertTrue(hasattr(p,
'a'))
3543 self.assertTrue(hasattr(p,
'b'))
3544 self.assertTrue(
not hasattr(p,
'c'))
3545 self.assertTrue(hasattr(p,
'path1'))
3546 self.assertTrue(hasattr(p,
'path2'))
3555 self.assertTrue(p.schedule
is None)
3558 self.assertEqual(pths[keys[1]],p.path1)
3559 self.assertEqual(pths[keys[0]],p.path2)
3566 self.assertEqual(p.modu.a.value(),1)
3567 self.assertEqual(p.modu.b.value(),2)
3572 self.assertTrue(
not a.isModified())
3574 self.assertTrue(a.isModified())
3576 self.assertEqual(p.a.a1.value(), 1)
3580 self.assertEqual(p.a.a1.value(), 2)
3589 self.assertRaises(ValueError, EDProducer,
'C', ps1, ps2)
3590 self.assertRaises(ValueError, EDProducer,
'C', ps1, a=
int32(3))
3594 self.assertEqual(p.options.numberOfThreads.value(),1)
3595 p.options.numberOfThreads = 8
3596 self.assertEqual(p.options.numberOfThreads.value(),8)
3598 self.assertEqual(p.options.numberOfThreads.value(),1)
3599 p.options = dict(numberOfStreams =2,
3601 self.assertEqual(p.options.numberOfThreads.value(),2)
3602 self.assertEqual(p.options.numberOfStreams.value(),2)
3606 p.maxEvents.input = 10
3607 self.assertEqual(p.maxEvents.input.value(),10)
3609 p.maxEvents.output = 10
3610 self.assertEqual(p.maxEvents.output.value(),10)
3612 p.maxEvents.output =
PSet(out=untracked.int32(10))
3613 self.assertEqual(p.maxEvents.output.out.value(), 10)
3615 p.maxEvents = untracked.PSet(input = untracked.int32(5))
3616 self.assertEqual(p.maxEvents.input.value(), 5)
3625 p.bars.foos =
'Foosball' 3626 self.assertEqual(p.bars.foos,
InputTag(
'Foosball'))
3627 p.p =
Path(p.foos*p.bars)
3629 p.add_(
Service(
"MessageLogger"))
3635 p.prefer(
"ForceSource")
3638 """process.juicer = cms.ESProducer("JuicerProducer") 3639 process.ForceSource = cms.ESSource("ForceSource") 3640 process.prefer("ForceSource") 3641 process.prefer("juicer")""")
3642 p.prefer(
"juicer",fooRcd=
vstring(
"Foo"))
3644 """process.juicer = cms.ESProducer("JuicerProducer") 3645 process.ForceSource = cms.ESSource("ForceSource") 3646 process.prefer("ForceSource") 3647 process.prefer("juicer", 3648 fooRcd = cms.vstring('Foo') 3663 self.assertEqual(process.m.p.i.value(), 4)
3673 subProcess.p =
Path(subProcess.a)
3674 subProcess.add_(
Service(
"Foo"))
3675 process.addSubProcess(
SubProcess(subProcess))
3676 d = process.dumpPython()
3677 equalD =
"""parentProcess = process 3678 process.a = cms.EDProducer("A") 3679 process.Foo = cms.Service("Foo") 3680 process.p = cms.Path(process.a) 3681 childProcess = process 3682 process = parentProcess 3683 process.addSubProcess(cms.SubProcess(process = childProcess, SelectEvents = cms.untracked.PSet( 3684 ), outputCommands = cms.untracked.vstring()))""" 3685 equalD = equalD.replace(
"parentProcess",
"parentProcess"+
str(
hash(process.subProcesses_()[0])))
3693 messageLoggerSplit =
'process.MessageLogger = cms.Service' 3695 childProcess =
Process(
'Child')
3696 del childProcess.MessageLogger
3697 combinedDump = parentDumpSplit[0] + childProcess.dumpPython() + messageLoggerSplit + parentDumpSplit[1]
3698 self.assertEqual(
_lineDiff(d, combinedDump), equalD)
3700 process.fillProcessDesc(p)
3701 self.assertEqual((
True,[
'a']),p.values[
"subProcesses"][1][0].values[
"process"][1].values[
'@all_modules'])
3702 self.assertEqual((
True,[
'p']),p.values[
"subProcesses"][1][0].values[
"process"][1].values[
'@paths'])
3703 self.assertEqual({
'@service_type':(
True,
'Foo')}, p.values[
"subProcesses"][1][0].values[
"process"][1].values[
"services"][1][0].values)
3713 proc.fillProcessDesc(p)
3714 self.assertEqual((
True,1),p.values[
"ref"][1].values[
"a"])
3715 self.assertEqual((
True,1),p.values[
"ref3"][1].values[
"a"])
3716 self.assertEqual((
True,1),p.values[
"ref2"][1].values[
"a"])
3717 self.assertEqual((
True,1),p.values[
"ref2"][1].values[
"b"][1].values[
"a"])
3718 self.assertEqual((
True,1),p.values[
"ref4"][1][0].values[
"a"])
3719 self.assertEqual((
True,1),p.values[
"ref4"][1][1].values[
"a"])
3728 self.assertEqual(proc.sp.label_(),
"sp")
3729 self.assertEqual(proc.sp.test1.label_(),
"sp@test1")
3730 self.assertEqual(proc.sp.test2.label_(),
"sp@test2")
3733 proc.s =
Sequence(proc.a + proc.sp)
3734 proc.t =
Task(proc.a, proc.sp)
3736 proc.p.associate(proc.t)
3738 proc.fillProcessDesc(p)
3739 self.assertEqual((
True,
"EDProducer"), p.values[
"sp"][1].values[
"@module_edm_type"])
3740 self.assertEqual((
True,
"SwitchProducer"), p.values[
"sp"][1].values[
"@module_type"])
3741 self.assertEqual((
True,
"sp"), p.values[
"sp"][1].values[
"@module_label"])
3742 all_cases = copy.deepcopy(p.values[
"sp"][1].values[
"@all_cases"])
3744 self.assertEqual((
True, [
"sp@test1",
"sp@test2"]), all_cases)
3745 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
3746 self.assertEqual([
"a",
"sp",
"sp@test1",
"sp@test2"], p.values[
"@all_modules"][1])
3747 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test1"][1].values[
"@module_edm_type"])
3748 self.assertEqual((
True,
"Bar"), p.values[
"sp@test1"][1].values[
"@module_type"])
3749 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test2"][1].values[
"@module_edm_type"])
3750 self.assertEqual((
True,
"Foo"), p.values[
"sp@test2"][1].values[
"@module_type"])
3751 dump = proc.dumpPython()
3752 self.assertEqual(dump.find(
'@'), -1)
3753 self.assertEqual(specialImportRegistry.getSpecialImports(), [
"from test import SwitchProducerTest"])
3754 self.assertTrue(dump.find(
"\nfrom test import SwitchProducerTest\n") != -1)
3763 proc.s =
Sequence(proc.a + proc.sp)
3764 proc.t =
Task(proc.a, proc.sp)
3766 proc.p.associate(proc.t)
3768 proc.fillProcessDesc(p)
3769 self.assertEqual((
True,
"EDProducer"), p.values[
"sp"][1].values[
"@module_edm_type"])
3770 self.assertEqual((
True,
"SwitchProducer"), p.values[
"sp"][1].values[
"@module_type"])
3771 self.assertEqual((
True,
"sp"), p.values[
"sp"][1].values[
"@module_label"])
3772 all_cases = copy.deepcopy(p.values[
"sp"][1].values[
"@all_cases"])
3774 self.assertEqual((
True, [
"sp@test1",
"sp@test2"]), all_cases)
3775 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
3776 self.assertEqual([
"a",
"sp",
"sp@test2"], p.values[
"@all_modules"][1])
3777 self.assertEqual([
"sp@test1"], p.values[
"@all_aliases"][1])
3778 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test2"][1].values[
"@module_edm_type"])
3779 self.assertEqual((
True,
"Foo"), p.values[
"sp@test2"][1].values[
"@module_type"])
3780 self.assertEqual((
True,
"EDAlias"), p.values[
"sp@test1"][1].values[
"@module_edm_type"])
3781 self.assertEqual((
True,
"Bar"), p.values[
"sp@test1"][1].values[
"a"][1][0].values[
"type"])
3790 proc.s =
Sequence(proc.a + proc.sp)
3791 proc.t =
Task(proc.a, proc.sp)
3793 proc.p.associate(proc.t)
3795 proc.fillProcessDesc(p)
3796 self.assertEqual((
True,
"EDProducer"), p.values[
"sp"][1].values[
"@module_edm_type"])
3797 self.assertEqual((
True,
"SwitchProducer"), p.values[
"sp"][1].values[
"@module_type"])
3798 self.assertEqual((
True,
"sp"), p.values[
"sp"][1].values[
"@module_label"])
3799 self.assertEqual((
True, [
"sp@test1",
"sp@test2"]), p.values[
"sp"][1].values[
"@all_cases"])
3800 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
3801 self.assertEqual([
"a",
"sp",
"sp@test1"], p.values[
"@all_modules"][1])
3802 self.assertEqual([
"sp@test2"], p.values[
"@all_aliases"][1])
3803 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test1"][1].values[
"@module_edm_type"])
3804 self.assertEqual((
True,
"Foo"), p.values[
"sp@test1"][1].values[
"@module_type"])
3805 self.assertEqual((
True,
"EDAlias"), p.values[
"sp@test2"][1].values[
"@module_edm_type"])
3806 self.assertEqual((
True,
"Bar"), p.values[
"sp@test2"][1].values[
"a"][1][0].values[
"type"])
3817 proc.spp = proc.spct.clone()
3820 proc.p =
Path(proc.a, proc.ct)
3821 proc.pp =
Path(proc.a + proc.spp)
3823 proc.fillProcessDesc(p)
3824 self.assertEqual([
"a",
"spct",
"spct@test1",
"spct@test2",
"spp",
"spp@test1",
"spp@test2"], p.values[
"@all_modules"][1])
3825 self.assertEqual([
"a",
"#",
"spct",
"spct@test1",
"spct@test2",
"@"], p.values[
"p"][1])
3826 self.assertEqual([
"a",
"spp",
"#",
"spp@test1",
"spp@test2",
"@"], p.values[
"pp"][1])
3841 p.t3 =
Task(p.g, p.t1)
3845 p.path1 =
Path(p.a, p.t3, p.ct3)
3847 self.assertTrue(p.schedule
is None)
3850 self.assertEqual(pths[keys[0]],p.path1)
3851 self.assertEqual(pths[keys[1]],p.path2)
3853 p.pset2 = untracked.PSet(parA =
string(
"pset2"))
3855 p.vpset2 = untracked.VPSet()
3857 self.assertTrue(hasattr(p,
'a'))
3858 self.assertTrue(hasattr(p,
'b'))
3859 self.assertTrue(
not hasattr(p,
'c'))
3860 self.assertTrue(
not hasattr(p,
'd'))
3861 self.assertTrue(hasattr(p,
'e'))
3862 self.assertTrue(
not hasattr(p,
'f'))
3863 self.assertTrue(hasattr(p,
'g'))
3864 self.assertTrue(hasattr(p,
'h'))
3865 self.assertTrue(
not hasattr(p,
's'))
3866 self.assertTrue(hasattr(p,
't1'))
3867 self.assertTrue(
not hasattr(p,
't2'))
3868 self.assertTrue(hasattr(p,
't3'))
3869 self.assertTrue(hasattr(p,
'path1'))
3870 self.assertTrue(hasattr(p,
'path2'))
3900 p.path1 =
Path(p.a, p.t3, p.ct3)
3902 p.path3 =
Path(p.b+p.s2)
3903 p.path4 =
Path(p.b+p.s3)
3904 p.schedule =
Schedule(p.path1,p.path2,p.path3)
3905 p.schedule.associate(p.t4)
3908 self.assertEqual(pths[keys[0]],p.path1)
3909 self.assertEqual(pths[keys[1]],p.path2)
3911 self.assertTrue(hasattr(p,
'a'))
3912 self.assertTrue(hasattr(p,
'b'))
3913 self.assertTrue(
not hasattr(p,
'c'))
3914 self.assertTrue(
not hasattr(p,
'd'))
3915 self.assertTrue(
not hasattr(p,
'e'))
3916 self.assertTrue(
not hasattr(p,
'f'))
3917 self.assertTrue(hasattr(p,
'g'))
3918 self.assertTrue(hasattr(p,
'h'))
3919 self.assertTrue(hasattr(p,
'i'))
3920 self.assertTrue(hasattr(p,
'j'))
3921 self.assertTrue(hasattr(p,
'k'))
3922 self.assertTrue(
not hasattr(p,
'l'))
3923 self.assertTrue(
not hasattr(p,
't1'))
3924 self.assertTrue(hasattr(p,
't2'))
3925 self.assertTrue(hasattr(p,
't3'))
3926 self.assertTrue(hasattr(p,
't4'))
3927 self.assertTrue(
not hasattr(p,
'ct1'))
3928 self.assertTrue(hasattr(p,
'ct2'))
3929 self.assertTrue(hasattr(p,
'ct3'))
3930 self.assertTrue(
not hasattr(p,
'ct4'))
3931 self.assertTrue(
not hasattr(p,
's'))
3932 self.assertTrue(hasattr(p,
's2'))
3933 self.assertTrue(
not hasattr(p,
's3'))
3934 self.assertTrue(hasattr(p,
'path1'))
3935 self.assertTrue(hasattr(p,
'path2'))
3936 self.assertTrue(hasattr(p,
'path3'))
3937 self.assertTrue(
not hasattr(p,
'path4'))
3945 self.assertTrue(hasattr(p,
'a'))
3946 self.assertTrue(hasattr(p,
'b'))
3947 self.assertTrue(hasattr(p,
's'))
3948 self.assertTrue(hasattr(p,
'pth'))
3954 p.prune(keepUnresolvedSequencePlaceholders=
True)
3955 self.assertTrue(hasattr(p,
'b'))
3956 self.assertTrue(hasattr(p,
's'))
3957 self.assertTrue(hasattr(p,
'pth'))
3958 self.assertEqual(p.s.dumpPython(),
'cms.Sequence(cms.SequencePlaceholder("a")+process.b)\n')
3966 self.assertTrue(hasattr(p,
'a'))
3967 self.assertTrue(hasattr(p,
'b'))
3968 self.assertTrue(hasattr(p,
's'))
3969 self.assertTrue(hasattr(p,
'pth'))
3977 self.assertTrue(hasattr(p,
'a'))
3978 self.assertTrue(hasattr(p,
'b'))
3979 self.assertTrue(hasattr(p,
's'))
3980 self.assertTrue(hasattr(p,
'pth'))
3986 p.prune(keepUnresolvedSequencePlaceholders=
True)
3987 self.assertTrue(hasattr(p,
'b'))
3988 self.assertTrue(hasattr(p,
's'))
3989 self.assertTrue(hasattr(p,
'pth'))
3990 self.assertEqual(p.s.dumpPython(),
'cms.Task(cms.TaskPlaceholder("a"), process.b)\n')
3998 p.path1 =
Path(p.b, p.t2, p.t3)
4001 p.endpath1 =
EndPath(p.b, p.t5)
4005 p.schedule =
Schedule(p.path1, p.endpath1,tasks=[p.t7,p.t8])
4015 """process.a = cms.EDProducer("ma") 4016 process.c = cms.EDProducer("mc") 4017 process.d = cms.EDProducer("md") 4018 process.e = cms.EDProducer("me") 4019 process.f = cms.EDProducer("mf") 4020 process.g = cms.EDProducer("mg") 4021 process.h = cms.EDProducer("mh") 4022 process.i = cms.EDProducer("mi") 4023 process.j = cms.EDProducer("mj") 4024 process.b = cms.EDAnalyzer("mb") 4025 process.t1 = cms.Task(cms.TaskPlaceholder("c")) 4026 process.t2 = cms.Task(cms.TaskPlaceholder("d"), process.a, process.t1) 4027 process.t3 = cms.Task(cms.TaskPlaceholder("e")) 4028 process.t5 = cms.Task(cms.TaskPlaceholder("g"), cms.TaskPlaceholder("t4"), process.a) 4029 process.t4 = cms.Task(cms.TaskPlaceholder("f")) 4030 process.t6 = cms.Task(cms.TaskPlaceholder("h")) 4031 process.t7 = cms.Task(cms.TaskPlaceholder("i"), process.a, process.t6) 4032 process.t8 = cms.Task(cms.TaskPlaceholder("j")) 4033 process.path1 = cms.Path(process.b, process.t2, process.t3) 4034 process.endpath1 = cms.EndPath(process.b, process.t5) 4035 process.schedule = cms.Schedule(*[ process.path1, process.endpath1 ], tasks=[process.t7, process.t8])""")
4038 """process.a = cms.EDProducer("ma") 4039 process.c = cms.EDProducer("mc") 4040 process.d = cms.EDProducer("md") 4041 process.e = cms.EDProducer("me") 4042 process.f = cms.EDProducer("mf") 4043 process.g = cms.EDProducer("mg") 4044 process.h = cms.EDProducer("mh") 4045 process.i = cms.EDProducer("mi") 4046 process.j = cms.EDProducer("mj") 4047 process.b = cms.EDAnalyzer("mb") 4048 process.t1 = cms.Task(process.c) 4049 process.t2 = cms.Task(process.a, process.d, process.t1) 4050 process.t3 = cms.Task(process.e) 4051 process.t4 = cms.Task(process.f) 4052 process.t6 = cms.Task(process.h) 4053 process.t7 = cms.Task(process.a, process.i, process.t6) 4054 process.t8 = cms.Task(process.j) 4055 process.t5 = cms.Task(process.a, process.g, process.t4) 4056 process.path1 = cms.Path(process.b, process.t2, process.t3) 4057 process.endpath1 = cms.EndPath(process.b, process.t5) 4058 process.schedule = cms.Schedule(*[ process.path1, process.endpath1 ], tasks=[process.t7, process.t8])""")
4066 p.path1 =
Path(p.b, p.t2, p.t3)
4069 p.path2 =
Path(p.b, p.t5)
4070 p.schedule =
Schedule(p.path1, p.path2)
4080 """process.a = cms.EDProducer("ma") 4081 process.c = cms.EDProducer("mc") 4082 process.d = cms.EDProducer("md") 4083 process.e = cms.EDProducer("me") 4084 process.f = cms.EDProducer("mf") 4085 process.g = cms.EDProducer("mg") 4086 process.h = cms.EDProducer("mh") 4087 process.i = cms.EDProducer("mi") 4088 process.j = cms.EDProducer("mj") 4089 process.b = cms.EDAnalyzer("mb") 4090 process.t1 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("c")) 4091 process.t2 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("d"), process.a, process.t1) 4092 process.t3 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("e")) 4093 process.t5 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("g"), cms.ConditionalTaskPlaceholder("t4"), process.a) 4094 process.t4 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("f")) 4095 process.path1 = cms.Path(process.b, process.t2, process.t3) 4096 process.path2 = cms.Path(process.b, process.t5) 4097 process.schedule = cms.Schedule(*[ process.path1, process.path2 ])""")
4100 """process.a = cms.EDProducer("ma") 4101 process.c = cms.EDProducer("mc") 4102 process.d = cms.EDProducer("md") 4103 process.e = cms.EDProducer("me") 4104 process.f = cms.EDProducer("mf") 4105 process.g = cms.EDProducer("mg") 4106 process.h = cms.EDProducer("mh") 4107 process.i = cms.EDProducer("mi") 4108 process.j = cms.EDProducer("mj") 4109 process.b = cms.EDAnalyzer("mb") 4110 process.t1 = cms.ConditionalTask(process.c) 4111 process.t2 = cms.ConditionalTask(process.a, process.d, process.t1) 4112 process.t3 = cms.ConditionalTask(process.e) 4113 process.t4 = cms.ConditionalTask(process.f) 4114 process.t5 = cms.ConditionalTask(process.a, process.g, process.t4) 4115 process.path1 = cms.Path(process.b, process.t2, process.t3) 4116 process.path2 = cms.Path(process.b, process.t5) 4117 process.schedule = cms.Schedule(*[ process.path1, process.path2 ])""")
4133 p.t1 =
Task(p.g, p.h, p.i)
4134 t2 =
Task(p.g, p.h, p.i)
4142 p.path1 =
Path(p.a+p.f+p.s,t2,ct2)
4144 p.path3 =
Path(ct3, p.ct4)
4147 p.schedule =
Schedule(p.path2, p.path3, p.endpath2, tasks=[t3, p.t4])
4148 self.assertTrue(hasattr(p,
'f'))
4149 self.assertTrue(hasattr(p,
'g'))
4150 self.assertTrue(hasattr(p,
'i'))
4155 self.assertFalse(hasattr(p,
'f'))
4156 self.assertFalse(hasattr(p,
'g'))
4157 self.assertEqual(p.t1.dumpPython(),
'cms.Task(process.h)\n')
4158 self.assertEqual(p.ct1.dumpPython(),
'cms.ConditionalTask(process.h)\n')
4159 self.assertEqual(p.s.dumpPython(),
'cms.Sequence(process.d)\n')
4160 self.assertEqual(p.path1.dumpPython(),
'cms.Path(process.a+process.s, cms.ConditionalTask(process.h), cms.Task(process.h))\n')
4161 self.assertEqual(p.endpath1.dumpPython(),
'cms.EndPath(process.b)\n')
4162 self.assertEqual(p.path3.dumpPython(),
'cms.Path(cms.ConditionalTask(process.h), process.ct4)\n')
4164 self.assertEqual(p.path1.dumpPython(),
'cms.Path(process.a+(process.d), cms.ConditionalTask(process.h), cms.Task(process.h))\n')
4165 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(*[ process.path2, process.path3, process.endpath2 ], tasks=[cms.Task(process.h), process.t4])\n')
4167 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(*[ process.path3, process.endpath2 ], tasks=[cms.Task(process.h), process.t4])\n')
4169 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(*[ process.endpath2 ], tasks=[cms.Task(process.h), process.t4])\n')
4171 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(tasks=[cms.Task(process.h), process.t4])\n')
4173 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(tasks=[cms.Task(process.h)])\n')
4176 Process._firstProcess =
True 4178 self.assertRaises(RuntimeError,
lambda:
Process(
"test2", m1))
4180 Process._firstProcess =
True 4185 m1.toModify(p.a,_mod_fred)
4186 self.assertEqual(p.a.fred.value(),2)
4188 m1.toModify(p.b, wilma = 2)
4189 self.assertEqual(p.b.wilma.value(),2)
4190 self.assertTrue(p.isUsingModifier(m1))
4193 Process._firstProcess =
True 4196 m1.toModify(p.a,_mod_fred)
4198 m1.toModify(p.b, wilma = 2)
4199 self.assertEqual(p.a.fred.value(),1)
4200 self.assertEqual(p.b.wilma.value(),1)
4201 self.assertEqual(p.isUsingModifier(m1),
False)
4204 Process._firstProcess =
True 4207 m1.toModify(p.a, fred =
int32(2))
4208 p.b = p.a.clone(wilma =
int32(3))
4209 self.assertEqual(p.a.fred.value(),2)
4210 self.assertEqual(p.a.wilma.value(),1)
4211 self.assertEqual(p.b.fred.value(),2)
4212 self.assertEqual(p.b.wilma.value(),3)
4215 Process._firstProcess =
True 4218 m1.toModify(p.a, fred =
None, fintstones = dict(fred =
None))
4219 self.assertEqual(hasattr(p.a,
"fred"),
False)
4220 self.assertEqual(hasattr(p.a.fintstones,
"fred"),
False)
4221 self.assertEqual(p.a.wilma.value(),1)
4224 Process._firstProcess =
True 4227 m1.toModify(p.a, wilma =
int32(2))
4228 self.assertEqual(p.a.fred.value(), 1)
4229 self.assertEqual(p.a.wilma.value(),2)
4232 Process._firstProcess =
True 4235 m1.toModify(p.a, flintstones = dict(fred =
int32(2)))
4236 self.assertEqual(p.a.flintstones.fred.value(),2)
4237 self.assertEqual(p.a.flintstones.wilma.value(),1)
4240 Process._firstProcess =
True 4243 self.assertRaises(KeyError,
lambda: m1.toModify(p.a, flintstones = dict(imnothere = dict(wilma=2))))
4244 self.assertRaises(KeyError,
lambda: m1.toModify(p.a, foo = 1))
4247 Process._firstProcess =
True 4250 m1.toModify(p.a, flintstones = {1:dict(wilma =
int32(2))})
4251 self.assertEqual(p.a.flintstones[0].fred.value(),1)
4252 self.assertEqual(p.a.flintstones[1].wilma.value(),2)
4255 Process._firstProcess =
True 4258 m1.toModify(p.a, fred = {1:7})
4259 self.assertEqual(p.a.fred[0],1)
4260 self.assertEqual(p.a.fred[1],7)
4261 self.assertEqual(p.a.fred[2],3)
4264 Process._firstProcess =
True 4268 try: m1.toModify(p.a, fred = {5:7})
4269 except IndexError
as e: raised =
True 4270 self.assertEqual(raised,
True)
4273 Process._firstProcess =
True 4277 try: m1.toModify(p.a, flintstones = dict(bogus =
int32(37)))
4278 except TypeError
as e: raised =
True 4279 self.assertEqual(raised,
True)
4283 class ProcModifierMod(
object):
4289 testMod = DummyMod()
4291 self.assertTrue(hasattr(p,
"a"))
4293 Process._firstProcess =
True 4295 testProcMod = ProcModifierMod(m1,_rem_a)
4297 p.extend(testProcMod)
4298 self.assertTrue(
not hasattr(p,
"a"))
4302 Process._firstProcess =
True 4304 self.assertTrue(p.isUsingModifier(m1))
4305 self.assertTrue(p.isUsingModifier(mc))
4306 testMod = DummyMod()
4308 m1.toModify(p.b, fred =
int32(3))
4310 testProcMod = ProcModifierMod(m1,_rem_a)
4311 p.extend(testProcMod)
4312 self.assertTrue(
not hasattr(p,
"a"))
4313 self.assertEqual(p.b.fred.value(),3)
4318 mclone = mc.copyAndExclude([m2])
4319 self.assertTrue(
not mclone._isOrContains(m2))
4320 self.assertTrue(mclone._isOrContains(m1))
4323 mclone = mc2.copyAndExclude([m2])
4324 self.assertTrue(
not mclone._isOrContains(m2))
4325 self.assertTrue(mclone._isOrContains(m1))
4326 self.assertTrue(mclone._isOrContains(m3))
4330 Process._firstProcess =
True 4333 (m1 & m2).toModify(p.a, fred =
int32(2))
4334 self.assertRaises(TypeError,
lambda: (m1 & m2).toModify(p.a, 1, wilma=2))
4335 self.assertEqual(p.a.fred, 1)
4338 Process._firstProcess =
True 4341 (m1 & m2).toModify(p.a, fred =
int32(2))
4342 self.assertEqual(p.a.fred, 2)
4346 Process._firstProcess =
True 4349 (m1 & m2 & m3).toModify(p.a, fred =
int32(2))
4350 self.assertEqual(p.a.fred, 2)
4351 (m1 & (m2 & m3)).toModify(p.a, fred =
int32(3))
4352 self.assertEqual(p.a.fred, 3)
4353 ((m1 & m2) & m3).toModify(p.a, fred =
int32(4))
4354 self.assertEqual(p.a.fred, 4)
4358 Process._firstProcess =
True 4361 (~m1).toModify(p.a, fred=2)
4362 self.assertEqual(p.a.fred, 1)
4363 (~m2).toModify(p.a, wilma=2)
4364 self.assertEqual(p.a.wilma, 2)
4365 self.assertRaises(TypeError,
lambda: (~m1).toModify(p.a, 1, wilma=2))
4366 self.assertRaises(TypeError,
lambda: (~m2).toModify(p.a, 1, wilma=2))
4371 Process._firstProcess =
True 4374 (m1 | m2).toModify(p.a, fred=2)
4375 self.assertEqual(p.a.fred, 2)
4376 (m1 | m2 | m3).toModify(p.a, fred=3)
4377 self.assertEqual(p.a.fred, 3)
4378 (m3 | m2 | m1).toModify(p.a, fred=4)
4379 self.assertEqual(p.a.fred, 4)
4380 ((m1 | m2) | m3).toModify(p.a, fred=5)
4381 self.assertEqual(p.a.fred, 5)
4382 (m1 | (m2 | m3)).toModify(p.a, fred=6)
4383 self.assertEqual(p.a.fred, 6)
4384 (m2 | m3).toModify(p.a, fred=7)
4385 self.assertEqual(p.a.fred, 6)
4386 self.assertRaises(TypeError,
lambda: (m1 | m2).toModify(p.a, 1, wilma=2))
4387 self.assertRaises(TypeError,
lambda: (m2 | m3).toModify(p.a, 1, wilma=2))
4393 Process._firstProcess =
True 4396 (m1 & ~m2).toModify(p.a, fred=2)
4397 self.assertEqual(p.a.fred, 1)
4398 (m1 & ~m3).toModify(p.a, fred=2)
4399 self.assertEqual(p.a.fred, 2)
4400 (m1 | ~m2).toModify(p.a, fred=3)
4401 self.assertEqual(p.a.fred, 3)
4402 (~m1 | ~m2).toModify(p.a, fred=4)
4403 self.assertEqual(p.a.fred, 3)
4404 (~m3 & ~m4).toModify(p.a, fred=4)
4405 self.assertEqual(p.a.fred, 4)
4406 ((m1 & m3) | ~m4).toModify(p.a, fred=5)
4407 self.assertEqual(p.a.fred, 5)
4410 Process._firstProcess =
True 4414 self.assertRaises(TypeError,
lambda: m1.toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4422 m1.toReplaceWith(p.s,
Sequence(p.a+p.b, p.td))
4423 self.assertEqual(p.a.wilma.value(),3)
4424 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4425 self.assertEqual(hasattr(p,
"fred"),
False)
4426 self.assertTrue(p.s.dumpPython() ==
"cms.Sequence(process.a+process.b, process.td)\n")
4428 m1.toReplaceWith(p.td,
Task(p.e))
4429 self.assertTrue(p.td._collection ==
OrderedSet([p.e]))
4439 m1.toReplaceWith(p.s,
Sequence(p.a+p.b, p.td))
4440 self.assertEqual(p.a.wilma.value(),3)
4441 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4442 self.assertEqual(hasattr(p,
"fred"),
False)
4443 self.assertTrue(p.s.dumpPython() ==
"cms.Sequence(process.a+process.b, process.td)\n")
4446 self.assertTrue(p.td._collection ==
OrderedSet([p.e]))
4449 Process._firstProcess =
True 4453 self.assertEqual(p.a.type_(),
"MyAnalyzer")
4459 Process._firstProcess =
True 4462 self.assertRaises(TypeError,
lambda: (m1 & m2).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4463 self.assertRaises(TypeError,
lambda: (m3 & m4).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4464 self.assertRaises(TypeError,
lambda: (~m3).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4465 self.assertRaises(TypeError,
lambda: (~m1).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4466 self.assertRaises(TypeError,
lambda: (m1 | m3).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4467 self.assertRaises(TypeError,
lambda: (m3 | m4).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4468 (m1 & m2).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer1"))
4469 self.assertEqual(p.a.type_(),
"YourAnalyzer1")
4470 (m1 & m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer2"))
4471 self.assertEqual(p.a.type_(),
"YourAnalyzer1")
4472 (~m1).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer2"))
4473 self.assertEqual(p.a.type_(),
"YourAnalyzer1")
4474 (~m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer2"))
4475 self.assertEqual(p.a.type_(),
"YourAnalyzer2")
4476 (m1 | m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer3"))
4477 self.assertEqual(p.a.type_(),
"YourAnalyzer3")
4478 (m3 | m4).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer4"))
4479 self.assertEqual(p.a.type_(),
"YourAnalyzer3")
4484 Process._firstProcess =
True 4488 (m1 & m2).toModify(p.a, fred = 2).toModify(p.b, betty = 3)
4489 self.assertEqual(p.a.fred, 2)
4490 self.assertEqual(p.a.wilma, 1)
4491 self.assertEqual(p.b.barney, 1)
4492 self.assertEqual(p.b.betty, 3)
4493 (m1 | m3).toModify(p.a, wilma = 4).toModify(p.b, barney = 5)
4494 self.assertEqual(p.a.fred, 2)
4495 self.assertEqual(p.a.wilma, 4)
4496 self.assertEqual(p.b.barney, 5)
4497 self.assertEqual(p.b.betty, 3)
4498 (m2 & ~m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer")).toModify(p.b, barney = 6)
4499 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4500 self.assertEqual(p.b.barney, 6)
4501 self.assertEqual(p.b.betty, 3)
4502 (m1 & ~m3).toModify(p.a, param=
int32(42)).toReplaceWith(p.b,
EDProducer(
"YourProducer"))
4503 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4504 self.assertEqual(p.a.param, 42)
4505 self.assertEqual(p.b.type_(),
"YourProducer")
4512 m.toModify(a, foo2 = {0: dict(type =
"Foo3")})
4513 self.assertEqual(a.foo2[0].type,
"Foo3")
4516 self.assertEqual(a.foo2[0].type,
"Foo3")
4517 self.assertEqual(a.foo4[0].type,
"Foo4")
4519 m.toModify(a, foo2 =
None)
4520 self.assertFalse(hasattr(a,
"foo2"))
4521 self.assertEqual(a.foo4[0].type,
"Foo4")
4524 self.assertFalse(hasattr(a,
"foo2"))
4525 self.assertFalse(hasattr(a,
"foo4"))
4526 self.assertTrue(hasattr(a,
"bar"))
4527 self.assertEqual(a.bar[0].type,
"Bar")
4540 test1 = dict(a = 4, b = dict(c =
None)),
4541 test2 = dict(aa = 15, bb = dict(cc = 45, dd =
string(
"foo"))))
4542 self.assertEqual(sp.test1.a.value(), 4)
4543 self.assertEqual(sp.test1.b.hasParameter(
"c"),
False)
4544 self.assertEqual(sp.test2.aa.value(), 15)
4545 self.assertEqual(sp.test2.bb.cc.value(), 45)
4546 self.assertEqual(sp.test2.bb.dd.value(),
"foo")
4549 self.assertEqual(sp.test1.type_(),
"Fred")
4550 self.assertEqual(sp.test1.x.value(), 42)
4551 self.assertRaises(TypeError,
lambda: m.toReplaceWith(sp.test1,
EDAnalyzer(
"Foo")))
4554 self.assertEqual(sp.test2.type_(),
"Xyzzy")
4555 self.assertEqual(sp.test2.x.value(), 24)
4556 self.assertRaises(TypeError,
lambda: m.toModify(sp, test2 =
EDAnalyzer(
"Foo")))
4559 self.assertEqual(sp.test3.type_(),
"Wilma")
4560 self.assertEqual(sp.test3.y.value(), 24)
4561 self.assertRaises(TypeError,
lambda: m.toModify(sp, test4 =
EDAnalyzer(
"Foo")))
4563 m.toModify(sp, test2 =
None)
4564 self.assertEqual(hasattr(sp,
"test2"),
False)
4567 self.assertTrue(hasattr(sp.test2,
"foo"))
4570 self.assertTrue(hasattr(sp.test2,
"bar"))
4573 self.assertTrue(hasattr(sp.test2,
"xyzzy"))
4575 self.assertRaises(TypeError,
lambda: m.toReplaceWith(sp.test2,
EDProducer(
"Foo")))
4581 p.maxEvents.input = 10
4582 p.options.numberOfThreads = 4
4583 p.maxLuminosityBlocks.input = 2
4585 self.assertEqual(p.maxEvents.input.value(),10)
4586 self.assertEqual(p.options.numberOfThreads.value(), 4)
4587 self.assertEqual(p.maxLuminosityBlocks.input.value(),2)
4593 self.assertTrue(hasattr(p,
'fltr'))
4597 p.TestService =
Service(
"TestService")
4598 self.assertTrue(hasattr(proc,
"TestService"))
4599 self.assertEqual(proc.TestService.type_(),
"TestService")
4600 self.assertRaises(TypeError, setattr, p,
"a",
EDProducer(
"Foo"))
4601 p.add_(
Service(
"TestServiceTwo"))
4602 self.assertTrue(hasattr(proc,
"TestServiceTwo"))
4603 self.assertEqual(proc.TestServiceTwo.type_(),
"TestServiceTwo")
4604 p.TestService.foo = untracked.uint32(42)
4605 self.assertEqual(proc.TestService.foo.value(), 42)
4607 self.assertRaises(TypeError, getattr, p,
"mod")
4611 proc.fillProcessDesc(p)
4612 self.assertTrue([
"cpu"], p.values[
"@available_accelerators"][1])
4613 self.assertFalse(p.values[
"@selected_accelerators"][0])
4614 self.assertTrue([
"cpu"], p.values[
"@selected_accelerators"][1])
4615 self.assertFalse(p.values[
"@module_type_resolver"][0])
4616 self.assertEqual(
"", p.values[
"@module_type_resolver"][1])
4621 del proc.MessageLogger
4623 self.assertEqual(proc.dumpPython(),
4624 """import FWCore.ParameterSet.Config as cms 4625 from test import ProcessAcceleratorTest 4627 process = cms.Process("TEST") 4629 process.maxEvents = cms.untracked.PSet( 4630 input = cms.optional.untracked.int32, 4631 output = cms.optional.untracked.allowed(cms.int32,cms.PSet) 4634 process.maxLuminosityBlocks = cms.untracked.PSet( 4635 input = cms.untracked.int32(-1) 4638 process.options = cms.untracked.PSet( 4639 FailPath = cms.untracked.vstring(), 4640 IgnoreCompletely = cms.untracked.vstring(), 4641 Rethrow = cms.untracked.vstring(), 4642 SkipEvent = cms.untracked.vstring(), 4643 accelerators = cms.untracked.vstring('*'), 4644 allowUnscheduled = cms.obsolete.untracked.bool, 4645 canDeleteEarly = cms.untracked.vstring(), 4646 deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), 4647 dumpOptions = cms.untracked.bool(False), 4648 emptyRunLumiMode = cms.obsolete.untracked.string, 4649 eventSetup = cms.untracked.PSet( 4650 forceNumberOfConcurrentIOVs = cms.untracked.PSet( 4651 allowAnyLabel_=cms.required.untracked.uint32 4653 numberOfConcurrentIOVs = cms.untracked.uint32(0) 4655 fileMode = cms.untracked.string('FULLMERGE'), 4656 forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), 4657 holdsReferencesToDeleteEarly = cms.untracked.VPSet(), 4658 makeTriggerResults = cms.obsolete.untracked.bool, 4659 modulesToIgnoreForDeleteEarly = cms.untracked.vstring(), 4660 numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0), 4661 numberOfConcurrentRuns = cms.untracked.uint32(1), 4662 numberOfStreams = cms.untracked.uint32(0), 4663 numberOfThreads = cms.untracked.uint32(1), 4664 printDependencies = cms.untracked.bool(False), 4665 sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, 4666 throwIfIllegalParameter = cms.untracked.bool(True), 4667 wantSummary = cms.untracked.bool(False) 4670 process.ProcessAcceleratorTest = ProcessAcceleratorTest( 4671 enabled = ['test1', 'test2', 'anothertest3'] 4677 proc.fillProcessDesc(p)
4678 self.assertEqual([
"*"], p.values[
"options"][1].values[
"accelerators"][1])
4679 self.assertFalse(p.values[
"options"][1].values[
"accelerators"][0])
4680 self.assertTrue([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@selected_accelerators"][1])
4681 self.assertEqual(
"AcceleratorTestService", p.values[
"services"][1][0].values[
"@service_type"][1])
4682 self.assertFalse(p.values[
"@available_accelerators"][0])
4683 self.assertTrue([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4684 self.assertFalse(p.values[
"@module_type_resolver"][0])
4685 self.assertEqual(
"", p.values[
"@module_type_resolver"][1])
4689 proc.add_(
Service(
"AcceleratorTestServiceRemove"))
4691 proc.fillProcessDesc(p)
4692 services = [x.values[
"@service_type"][1]
for x
in p.values[
"services"][1]]
4693 self.assertTrue(
"AcceleratorTestService" in services)
4694 self.assertFalse(
"AcceleratorTestServiceRemove" in services)
4699 proc.fillProcessDesc(p)
4700 self.assertEqual([
"cpu",
"test1"], p.values[
"@selected_accelerators"][1])
4701 self.assertEqual([
"cpu",
"test1"], p.values[
"@available_accelerators"][1])
4705 proc.options.accelerators = [
"test2"]
4707 proc.fillProcessDesc(p)
4708 self.assertEqual([
"test2"], p.values[
"@selected_accelerators"][1])
4709 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4713 proc.options.accelerators = [
"test*"]
4714 proc.fillProcessDesc(p)
4715 self.assertEqual([
"test1",
"test2"], p.values[
"@selected_accelerators"][1])
4716 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4720 proc.options.accelerators = [
"test2"]
4722 proc.fillProcessDesc(p)
4723 self.assertEqual([], p.values[
"@selected_accelerators"][1])
4724 self.assertEqual([
"cpu",
"test1"], p.values[
"@available_accelerators"][1])
4728 proc.options.accelerators = [
"cpu*"]
4730 proc.fillProcessDesc(p)
4731 self.assertEqual([
"cpu"], p.values[
"@selected_accelerators"][1])
4732 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4736 proc.options.accelerators = [
"test3"]
4738 self.assertRaises(ValueError, proc.fillProcessDesc, p)
4742 proc.options.accelerators = [
"*",
"test1"]
4744 self.assertRaises(ValueError, proc.fillProcessDesc, p)
4750 proc.fillProcessDesc(p)
4751 self.assertEqual([
"anothertest3",
"anothertest4",
"cpu",
"test1",
"test2"], p.values[
"@selected_accelerators"][1])
4752 self.assertEqual([
"anothertest3",
"anothertest4",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4757 proc.options.accelerators = [
"*test3",
"c*"]
4759 proc.fillProcessDesc(p)
4760 self.assertEqual([
"anothertest3",
"cpu"], p.values[
"@selected_accelerators"][1])
4761 self.assertEqual([
"anothertest3",
"anothertest4",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4771 proc.p =
Path(proc.sp)
4773 proc.fillProcessDesc(p)
4774 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
4784 proc.p =
Path(proc.sp)
4786 proc.fillProcessDesc(p)
4787 self.assertEqual((
False,
"sp@test1"), p.values[
"sp"][1].values[
"@chosen_case"])
4791 proc.options.accelerators = [
"test1"]
4798 proc.p =
Path(proc.sp)
4800 proc.fillProcessDesc(p)
4801 self.assertEqual((
False,
"sp@test1"), p.values[
"sp"][1].values[
"@chosen_case"])
4805 proc.options.accelerators = [
"test*"]
4812 proc.p =
Path(proc.sp)
4814 proc.fillProcessDesc(p)
4815 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
4819 proc.options.accelerators = [
"anothertest3"]
4826 proc.p =
Path(proc.sp)
4828 self.assertRaises(RuntimeError, proc.fillProcessDesc, p)
4834 proc.normalProducer =
EDProducer(
"FooProducer")
4835 proc.testProducer =
EDProducer(
"BarProducer@test")
4836 proc.test2Producer =
EDProducer(
"BarProducer@test", test=untracked.PSet(backend=untracked.string(
"test2_backend")))
4837 proc.testAnalyzer =
EDAnalyzer(
"Analyzer@test")
4839 proc.testESProducer =
ESProducer(
"ESProducer@test")
4840 proc.testESSource =
ESSource(
"ESSource@test")
4841 proc.p =
Path(proc.normalProducer+proc.testProducer+proc.test2Producer+proc.testAnalyzer+proc.testFilter)
4843 proc.fillProcessDesc(p)
4844 self.assertEqual(
"TestModuleTypeResolver", p.values[
"@module_type_resolver"][1])
4845 self.assertEqual(
"FooProducer", p.values[
"normalProducer"][1].values[
"@module_type"][1])
4846 self.assertEqual(len(list(
filter(
lambda x:
not "@" in x, p.values[
"normalProducer"][1].values.keys()))), 0)
4847 self.assertEqual(
"BarProducer@test", p.values[
"testProducer"][1].values[
"@module_type"][1])
4848 self.assertEqual(
False, p.values[
"testProducer"][1].values[
"test"][0])
4849 self.assertEqual(
False, p.values[
"testProducer"][1].values[
"test"][1].values[
"backend"][0])
4850 self.assertEqual(
"test1_backend", p.values[
"testProducer"][1].values[
"test"][1].values[
"backend"][1])
4851 self.assertEqual(
"BarProducer@test", p.values[
"test2Producer"][1].values[
"@module_type"][1])
4852 self.assertEqual(
"test2_backend", p.values[
"test2Producer"][1].values[
"test"][1].values[
"backend"][1])
4853 self.assertEqual(
"Analyzer@test", p.values[
"testAnalyzer"][1].values[
"@module_type"][1])
4854 self.assertEqual(
"test1_backend", p.values[
"testAnalyzer"][1].values[
"test"][1].values[
"backend"][1])
4855 self.assertEqual(
"Filter@test", p.values[
"testFilter"][1].values[
"@module_type"][1])
4856 self.assertEqual(
"test1_backend", p.values[
"testFilter"][1].values[
"test"][1].values[
"backend"][1])
4857 self.assertEqual(
"ESProducer@test", p.values[
"ESProducer@test@testESProducer"][1].values[
"@module_type"][1])
4858 self.assertEqual(
"test1_backend", p.values[
"ESProducer@test@testESProducer"][1].values[
"test"][1].values[
"backend"][1])
4859 self.assertEqual(
"ESSource@test", p.values[
"ESSource@test@testESSource"][1].values[
"@module_type"][1])
4860 self.assertEqual(
"test1_backend", p.values[
"ESSource@test@testESSource"][1].values[
"test"][1].values[
"backend"][1])
4866 proc.options.accelerators = []
4867 self.assertRaises(EDMException, proc.fillProcessDesc, p)
4872 proc.options.accelerators = [
"test1"]
4873 proc.test2Producer =
EDProducer(
"BarProducer@test", test=untracked.PSet(backend=untracked.string(
"test2_backend")))
4874 proc.p =
Path(proc.test2Producer)
4875 self.assertRaises(EDMException, proc.fillProcessDesc, p)
4884 self.assertRaises(RuntimeError, proc.fillProcessDesc, p)
4895 proc.p =
Path(proc.sp)
4896 pkl = pickle.dumps(proc)
4897 unpkl = pickle.loads(pkl)
4899 unpkl.fillProcessDesc(p)
4900 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
4901 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4902 unpkl = pickle.loads(pkl)
4903 unpkl.ProcessAcceleratorTest.setEnabled([
"test1"])
4905 unpkl.fillProcessDesc(p)
4906 self.assertEqual((
False,
"sp@test1"), p.values[
"sp"][1].values[
"@chosen_case"])
4907 self.assertEqual([
"cpu",
"test1"], p.values[
"@available_accelerators"][1])
def __setstate__(self, pkldict)
def conditionaltasks_(self)
def addVString(self, tracked, label, value)
def testProcessAccelerator(self)
def _dumpConfigOptionallyNamedList(self, items, typeName, options)
def testConditionalTaskPlaceholder(self)
def addEventRange(self, tracked, label, value)
def __init__(self, lhs, rhs)
def __init__(self, enabled=["anothertest3", anothertest4, moduleTypeResolverMaker=None)
def __getattribute__(self, name)
def _place(self, label, process)
def testServiceInProcess(self)
def _dumpConfigUnnamedList(self, items, typeName, options)
def _placeAnalyzer(self, name, mod)
def addString(self, tracked, label, value)
def __findFirstUsingModule(self, seqsOrTasks, mod)
def _pruneModules(self, d, scheduledNames)
def _modifyParametersFromDict(params, newParams, errorRaiser, keyDepth="")
def _placeESPrefer(self, name, mod)
def __init__(self, process)
def __updateMaxEvents(self, ps)
def _placeSwitchProducer(self, name, mod)
def _insertPaths(self, processPSet, nodeVisitor)
def apply(self, process, accelerators)
def _placeESProducer(self, name, mod)
def _splitPythonList(self, subfolder, d, options)
bool any(const std::vector< T > &v, const T &what)
def addVESInputTag(self, tracked, label, value)
def _switchproducer_test2_case2(accelerators)
def _placeSequence(self, name, mod)
def __init__(self, dataset, job_number, job_id, job_name, isDA, isMC, applyBOWS, applyEXTRACOND, extraconditions, runboundary, lumilist, intlumi, maxevents, gt, allFromGT, alignmentDB, alignmentTAG, apeDB, apeTAG, bowDB, bowTAG, vertextype, tracktype, refittertype, ttrhtype, applyruncontrol, ptcut, CMSSW_dir, the_dir)
def _validateSequence(self, sequence, label)
def __getattr__(self, attr)
def setStrict(self, value)
def addDouble(self, tracked, label, value)
def dumpPythonImpl(self, options)
def moduleTypeResolver(self, accelerators)
def _findPreferred(self, esname, d, args, kargs)
def apply(self, process, accelerators)
def __init__(self, kargs)
def apply(self, process, accelerators)
def _insertOneInto(self, parameterSet, label, item, tracked)
def __setattr__(self, label, value)
def __updateOptions(self, opt)
def __delattr__(self, name)
def _placePath(self, name, mod)
def addVUInt64(self, tracked, label, value)
def _placeEndPath(self, name, mod)
def testProcessForProcessAccelerator(self)
def __init__(self, name, Mods)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
def testTypedParameterizable(self)
def addUInt64(self, tracked, label, value)
def _itemsInDependencyOrder(self, processDictionaryOfItems)
def addVPSet(self, tracked, label, value)
def nameInProcessDesc_(self, label)
def __init__(self, accelerators)
def _lineDiff(newString, oldString)
def dumpPythonImpl(self, options)
def format_outerframe(number)
def __init__(self, args, kw)
def load(self, moduleName)
def _raiseUnknownKey(key)
def _insertSubProcessesInto(self, parameterSet, label, itemList, tracked)
def addUInt32(self, tracked, label, value)
def __init__(self, error, message)
def _dumpConfigESPrefers(self, options)
def __setattr__(self, name, value)
def setLooper_(self, lpr)
def setSource_(self, src)
def __init__(self, process)
def extend(self, other, items=())
def _okToPlace(self, name, mod, d)
def __getattr__(self, label)
def _replaceInTasks(self, label, new)
def addVInt32(self, tracked, label, value)
def _placeFilter(self, name, mod)
def handleProcessAccelerators(self, parameterSet)
def addVInputTag(self, tracked, label, value)
def _applyNewProcessModifiers(self, process)
def addLuminosityBlockID(self, tracked, label, value)
def addESInputTag(self, tracked, label, value)
def __delattr__(self, label)
def __new__(cls, args, kw)
def toModify(self, obj, func=None, kw)
def setEnabled(self, enabled)
def __setattr__(self, name, value)
def _placeESSource(self, name, mod)
def addVInt64(self, tracked, label, value)
def addVEventID(self, tracked, label, value)
def setEnabled(self, enabled)
def toModify(self, obj, func=None, kw)
def testGlobalReplace(self)
def testSwitchProducer(self)
def getVString(self, tracked, label)
def moduleTypeResolver(self, accelerators)
def defaultMaxLuminosityBlocks_()
def testProcessFragment(self)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def toReplaceWith(self, toObj, fromObj)
def _placeOutputModule(self, name, mod)
def addFileInPath(self, tracked, label, value)
def _placeSource(self, name, mod)
def __init__(self, lhs, rhs=None)
def _dumpPythonSubProcesses(self, l, options)
def _insertSwitchProducersInto(self, parameterSet, labelModules, labelAliases, itemDict, tracked)
def moduleTypeResolver(self, accelerators)
def checkImportPermission(minLevel=2, allowedPatterns=[])
def _toModify(obj, func, kw)
def __init__(self, modifier, func)
def _toReplaceWith(toObj, fromObj)
def _toModifyCheck(obj, func, kw)
def isUsingModifier(self, mod)
def dumpPython(self, options=PrintOptions())
def __copyIfExclude(self, toExclude)
def split(sequence, size)
def _validateTask(self, task, label)
def testParameterizable(self)
def _placeSubProcess(self, name, mod)
def __init__(self, enabled=["test1", test2, anothertest3, moduleTypeResolverMaker=None)
def setPartialSchedule_(self, sch, label)
def addPSet(self, tracked, label, value)
def testProcessDumpPython(self)
def _placeService(self, typeName, mod)
def resolve(self, keepUnresolvedSequencePlaceholders=False)
def _switchproducer_test2_case1(accelerators)
static std::string join(char **cmd)
def _isOrContains(self, other)
def getSubProcessPSet(self, parameterSet)
def _validateConditionalTask(self, task, label)
def copyAndExclude(self, toExclude)
def addVUInt32(self, tracked, label, value)
def addVEventRange(self, tracked, label, value)
def _splitPython(self, subfolder, d, options)
def __init__(self, lhs, rhs)
def _placeAccelerator(self, typeName, mod)
def dumpPython(process, name)
def __setObjectLabel(self, object, newLabel)
def testConditionalTask(self)
def _delHelper(self, name)
def _placeAlias(self, name, mod)
def dumpPython(self, options=PrintOptions())
def _replaceInSequences(self, label, new)
def setSchedule_(self, sch)
def dumpPython(self, options=PrintOptions())
def _toReplaceWithCheck(toObj, fromObj)
def switchProducerNames(self)
def toReplaceWith(self, toObj, fromObj)
def _placeProducer(self, name, mod)
def prefer(self, esmodule, args, kargs)
def __delattr__(self, name)
def _dumpConfigNamedList(self, items, typeName, options)
void add(std::map< std::string, TH1 *> &h, TH1 *hist)
def addInputTag(self, tracked, label, value)
def _insertManyInto(self, parameterSet, label, itemDict, tracked)
def dumpConfig(self, options=PrintOptions())
def testCloneSequence(self)
def _placeTask(self, name, task)
def makeProcessModifier(self, func)
def addSubProcess(self, mod)
def switchProducers_(self)
def _placePSet(self, name, mod)
def _placeFinalPath(self, name, mod)
def _isOrContains(self, other)
def addInt64(self, tracked, label, value)
def addService(process, multirun=False)
def _place(self, name, mod, d)
def testProcessExtend(self)
def _dumpPythonList(self, d, options)
def __insertValue(self, tracked, label, value)
def splitPython(self, options=PrintOptions())
def __init__(self, kargs)
def setModuleVariant(self, module)
def __getValue(self, tracked, label)
def _place(self, name, proc)
def _placeVPSet(self, name, mod)
def processAccelerators_(self)
def globalReplace(self, label, new)
def addBool(self, tracked, label, value)
def addEventID(self, tracked, label, value)
def _placeLooper(self, name, mod)
def testImplicitSchedule(self)
def prune(self, verbose=False, keepUnresolvedSequencePlaceholders=False)
def addVDouble(self, tracked, label, value)
def _insertInto(self, parameterSet, itemDict)
def _delattrFromSetattr(self, name)
def _replaceInConditionalTasks(self, label, new)
def makeProcessModifier(self, func)
def __init__(self, process, SelectEvents=untracked.PSet(), outputCommands=untracked.vstring())
def _placeConditionalTask(self, name, task)
def _replaceInScheduleDirectly(self, label, new)
def __init__(self, chainedModifiers)
def testTaskPlaceholder(self)
def _replaceInSchedule(self, label, new)
def dumpPythonImpl(self, options)
def _dumpPython(self, d, options)
def addInt32(self, tracked, label, value)
def fillProcessDesc(self, processPSet)
def testProcessInsertion(self)