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)):
564 self.__dict__[name]=newValue
565 if isinstance(newValue,_Labelable):
567 self._cloneToObjectDict[
id(value)] = newValue
568 self._cloneToObjectDict[
id(newValue)] = newValue
570 newValue._place(name,self)
572 """Given a container of sequences or tasks, find the first sequence or task 573 containing mod and return it. If none is found, return None""" 576 for seqOrTask
in seqsOrTasks.values():
585 if not hasattr(self,name):
586 raise KeyError(
'process does not know about '+name)
587 elif name.startswith(
'_Process__'):
588 raise ValueError(
'this attribute cannot be deleted')
593 if name
in reg: del reg[name]
595 obj = getattr(self,name)
596 if isinstance(obj,_Labelable):
598 if isinstance(obj,Service):
599 obj._inProcess =
False 603 obj = getattr(self,name)
605 if not isinstance(obj, Sequence)
and not isinstance(obj, Task)
and not isinstance(obj,ConditionalTask):
615 if obj._isTaskComponent():
619 if isinstance(obj, _Sequenceable)
or obj._isTaskComponent():
621 if Schedule._itemIsValid(obj)
or isinstance(obj, Task):
625 del self.__dict__[name]
630 """Similar to __delattr__ but we need different behavior when called from __setattr__""" 634 del self.__dict__[name]
639 """Allows addition of components that do not have to have a label, e.g. Services""" 640 if not isinstance(value,_ConfigureComponent):
642 if not isinstance(value,_Unlabelable):
646 newValue =value.copy()
650 newValue._place(
'',self)
653 if not self.__InExtendCall:
664 if d[name]._isModified:
675 if self.
__isStrict and isinstance(mod, _ModuleSequenceType):
676 d[name] = mod._postProcessFixup(self._cloneToObjectDict)
679 if isinstance(mod,_Labelable):
682 self.
_place(name, mod, self.__outputmodules)
684 self.
_place(name, mod, self.__producers)
686 self.
_place(name, mod, self.__switchproducers)
688 self.
_place(name, mod, self.__filters)
690 self.
_place(name, mod, self.__analyzers)
694 self.
_place(name, mod, self.__paths)
695 except ModuleCloneError
as msg:
697 raise Exception(
"%sThe module %s in path %s is unknown to the process %s." %(context, msg, name, self._Process__name))
701 self.
_place(name, mod, self.__endpaths)
702 except ModuleCloneError
as msg:
704 raise Exception(
"%sThe module %s in endpath %s is unknown to the process %s." %(context, msg, name, self._Process__name))
708 self.
_place(name, mod, self.__finalpaths)
709 except ModuleCloneError
as msg:
711 raise Exception(
"%sThe module %s in finalpath %s is unknown to the process %s." %(context, msg, name, self._Process__name))
714 self.
_place(name, mod, self.__sequences)
716 self.
_place(name, mod, self.__esproducers)
718 self.
_place(name, mod, self.__esprefers)
720 self.
_place(name, mod, self.__essources)
723 self.
_place(name, task, self.__tasks)
726 self.
_place(name, task, self.__conditionaltasks)
728 self.
_place(name, mod, self.__aliases)
730 self.
_place(name, mod, self.__psets)
732 self.
_place(name, mod, self.__vpsets)
734 """Allow the source to be referenced by 'source' or by type name""" 736 raise ValueError(
"The label '"+name+
"' can not be used for a Source. Only 'source' is allowed.")
737 if self.__dict__[
'_Process__source']
is not None :
738 del self.__dict__[self.__dict__[
'_Process__source'].type_()]
739 self.__dict__[
'_Process__source'] = mod
740 self.__dict__[mod.type_()] = mod
743 raise ValueError(
"The label '"+name+
"' can not be used for a Looper. Only 'looper' is allowed.")
744 self.__dict__[
'_Process__looper'] = mod
745 self.__dict__[mod.type_()] = mod
747 self.__dict__[
'_Process__subProcess'] = mod
748 self.__dict__[mod.type_()] = mod
750 self.__subProcesses.
append(mod)
752 self.
_place(typeName, mod, self.__services)
753 if typeName
in self.__dict__:
754 self.__dict__[typeName]._inProcess =
False 755 self.__dict__[typeName]=mod
757 self.
_place(typeName, mod, self.__accelerators)
758 self.__dict__[typeName]=mod
760 moduleName = moduleName.replace(
"/",
".")
761 module = __import__(moduleName)
762 self.
extend(sys.modules[moduleName])
764 """Look in other and find types that we can use""" 766 self.__dict__[
'_Process__InExtendCall'] =
True 769 tasksToAttach = dict()
771 for name
in dir(other):
773 if name.startswith(
'_'):
775 item = getattr(other,name)
776 if name ==
"source" or name ==
"looper":
780 elif isinstance(item,_ModuleSequenceType):
782 elif isinstance(item,Task)
or isinstance(item, ConditionalTask):
783 tasksToAttach[name] = item
784 elif isinstance(item,_Labelable):
786 if not item.hasLabel_() :
788 elif isinstance(item,Schedule):
790 elif isinstance(item,_Unlabelable):
792 elif isinstance(item,ProcessModifier):
794 elif isinstance(item,ProcessFragment):
798 for name,seq
in seqs.items():
799 if id(seq)
not in self._cloneToObjectDict:
802 newSeq = self._cloneToObjectDict[
id(seq)]
803 self.__dict__[name]=newSeq
806 newSeq._place(name,self)
808 for name, task
in tasksToAttach.items():
815 self.__dict__[
'_Process__InExtendCall'] =
False 819 for name,item
in items:
820 returnValue +=options.indentation()+typeName+
' '+name+
' = '+item.dumpConfig(options)
825 for name,item
in items:
826 returnValue +=options.indentation()+typeName+
' = '+item.dumpConfig(options)
831 for name,item
in items:
832 if name == item.type_():
834 returnValue +=options.indentation()+typeName+
' '+name+
' = '+item.dumpConfig(options)
838 """return a string containing the equivalent process defined using the old configuration language""" 839 config =
"process "+self.__name+
" = {\n" 892 config +=options.indentation()+item.configTypeName()+
' '+name+
' = '+item.configValue(options)
894 config +=options.indentation()+
'VPSet '+name+
' = '+item.configValue(options)
896 pathNames = [p.label_()
for p
in self.
schedule]
897 config +=options.indentation()+
'schedule = {'+
','.
join(pathNames)+
'}\n' 909 result +=options.indentation()+
'es_prefer '+item.targetLabel_()+
' = '+item.dumpConfig(options)
915 returnValue += item.dumpPython(options)+
'\n\n' 921 for name,item
in d.items():
922 returnValue +=
'process.'+name+
' = '+item.dumpPython(options)+
'\n\n' 924 for name,item
in sorted(d.items()):
925 returnValue +=
'process.'+name+
' = '+item.dumpPython(options)+
'\n\n' 932 dependencies = item.directDependencies()
933 for module_subfolder, module
in dependencies:
934 module = module +
'_cfi' 935 if options.useSubdirectories
and module_subfolder:
936 module = module_subfolder +
'.' + module
937 if options.targetDirectory
is not None:
938 if options.useSubdirectories
and subfolder:
939 module =
'..' + module
941 module =
'.' + module
942 code +=
'from ' + module +
' import *\n' 945 code += name +
' = ' + item.dumpPython(options)
946 parts[name] = subfolder, code
954 sequence.visit(visitor)
955 except Exception
as e:
956 raise RuntimeError(
"An entry in sequence {} has no label\n Seen entries: {}\n Error: {}".
format(label, l, e))
965 raise RuntimeError(
"An entry in task " + label +
' has not been attached to the process')
973 raise RuntimeError(
"An entry in task " + label +
' has not been attached to the process')
985 for label,item
in processDictionaryOfItems.items():
987 if isinstance(item, Task):
989 elif isinstance(item, ConditionalTask):
996 if isinstance(item, Task):
997 raise RuntimeError(
"Failed in a Task visitor. Probably " \
998 "a circular dependency discovered in Task with label " + label)
999 elif isinstance(item, ConditionalTask):
1000 raise RuntimeError(
"Failed in a ConditionalTask visitor. Probably " \
1001 "a circular dependency discovered in ConditionalTask with label " + label)
1003 raise RuntimeError(
"Failed in a Sequence visitor. Probably a " \
1004 "circular dependency discovered in Sequence with label " + label)
1005 for containedItem
in containedItems:
1011 if containedItem.hasLabel_():
1012 testItem = processDictionaryOfItems.get(containedItem.label_())
1013 if testItem
is None or containedItem != testItem:
1014 if isinstance(item, Task):
1015 raise RuntimeError(
"Task 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_())
1018 if isinstance(item, ConditionalTask):
1019 raise RuntimeError(
"ConditionalTask 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_())
1023 raise RuntimeError(
"Sequence has a label, but using its label to get an attribute" \
1024 " from the process yields a different object or None\n"+
1025 "label = " + containedItem.label_())
1026 dependencies[label]=[dep.label_()
for dep
in containedItems
if dep.hasLabel_()]
1030 oldDeps = dict(dependencies)
1031 for label,deps
in oldDeps.items():
1033 returnValue[label]=processDictionaryOfItems[label]
1035 del dependencies[label]
1036 for lb2,deps2
in dependencies.items():
1037 while deps2.count(label):
1043 for name, value
in sorted(d.items()):
1044 result += value.dumpPythonAs(name,options)+
'\n' 1049 for name, value
in sorted(d.items()):
1050 result[name] = subfolder, value.dumpPythonAs(name, options) +
'\n' 1054 """return a string containing the equivalent process defined using python""" 1055 specialImportRegistry._reset()
1056 header =
"import FWCore.ParameterSet.Config as cms" 1057 result =
"process = cms.Process(\""+self.__name+
"\")\n\n" 1084 imports = specialImportRegistry.getSpecialImports()
1085 if len(imports) > 0:
1086 header +=
"\n" +
"\n".
join(imports)
1088 return header+result
1091 """return a map of file names to python configuration fragments""" 1092 specialImportRegistry._reset()
1094 options.isCfg =
False 1095 header =
"import FWCore.ParameterSet.Config as cms" 1100 result =
'process = cms.Process("' + self.__name +
'")\n\n' 1113 sys.stderr.write(
"error: subprocesses are not supported yet\n\n")
1130 if options.targetDirectory
is not None:
1131 files[options.targetDirectory +
'/__init__.py'] =
'' 1133 if options.useSubdirectories:
1134 for sub
in 'psets',
'modules',
'services',
'eventsetup',
'tasks',
'sequences',
'paths':
1135 if options.targetDirectory
is not None:
1136 sub = options.targetDirectory +
'/' + sub
1137 files[sub +
'/__init__.py'] =
'' 1140 parts = sorted(parts.items(), key =
lambda nsc: (nsc[1][0].lower()
if nsc[1][0]
else '', nsc[0].lower()))
1142 for (name, (subfolder, code))
in parts:
1143 filename = name +
'_cfi' 1144 if options.useSubdirectories
and subfolder:
1145 filename = subfolder +
'/' + filename
1146 if options.targetDirectory
is not None:
1147 filename = options.targetDirectory +
'/' + filename
1148 result +=
'process.load("%s")\n' % filename
1149 files[filename +
'.py'] = header +
'\n\n' + code
1152 options.isCfg =
True 1155 imports = specialImportRegistry.getSpecialImports()
1156 if len(imports) > 0:
1157 header +=
'\n' +
'\n'.
join(imports)
1158 files[
'-'] = header +
'\n\n' + result
1162 old = getattr(self,label)
1169 sequenceable._replaceIfHeldDirectly(old,new)
1171 sequenceable.replace(old,new)
1173 sequenceable.replace(old,new)
1175 sequenceable.replace(old,new)
1177 sequenceable.replace(old,new)
1179 old = getattr(self,label)
1181 task.replace(old, new)
1183 old = getattr(self,label)
1185 task.replace(old, new)
1189 old = getattr(self,label)
1191 task.replace(old, new)
1195 old = getattr(self,label)
1196 self.
schedule_()._replaceIfHeldDirectly(old, new)
1198 """ Replace the item with label 'label' by object 'new' in the process and all sequences/paths/tasks""" 1199 if not hasattr(self,label):
1200 raise LookupError(
"process has no item of label "+label)
1201 setattr(self,label,new)
1203 for name,value
in itemDict.items():
1204 value.insertInto(parameterSet, name)
1207 if not item ==
None:
1208 newlabel = item.nameInProcessDesc_(label)
1210 item.insertInto(parameterSet, newlabel)
1211 parameterSet.addVString(tracked, label, vitems)
1214 for name,value
in itemDict.items():
1215 value.appendToProcessDescList_(l, name)
1216 value.insertInto(parameterSet, name)
1219 parameterSet.addVString(tracked, label, l)
1221 modules = parameterSet.getVString(tracked, labelModules)
1222 aliases = parameterSet.getVString(tracked, labelAliases)
1223 accelerators = parameterSet.getVString(
False,
"@selected_accelerators")
1224 for name,value
in itemDict.items():
1225 value.appendToProcessDescLists_(modules, aliases, name)
1226 value.insertInto(parameterSet, name, accelerators)
1229 parameterSet.addVString(tracked, labelModules, modules)
1230 parameterSet.addVString(tracked, labelAliases, aliases)
1234 for value
in itemList:
1235 name = value.getProcessName()
1236 newLabel = value.nameInProcessDesc_(name)
1238 pset = value.getSubProcessPSet(parameterSet)
1239 subprocs.append(pset)
1242 parameterSet.addVString(tracked, label, l)
1243 parameterSet.addVPSet(
False,
"subProcesses",subprocs)
1251 for name
in self.
paths_():
1252 scheduledPaths.append(name)
1253 triggerPaths.append(name)
1255 scheduledPaths.append(name)
1256 endpaths.append(name)
1258 finalpaths.append(name)
1261 pathname = path.label_()
1263 endpaths.append(pathname)
1264 scheduledPaths.append(pathname)
1266 finalpaths.append(pathname)
1268 scheduledPaths.append(pathname)
1269 triggerPaths.append(pathname)
1271 task.resolve(self.__dict__)
1273 task.visit(scheduleTaskValidator)
1274 task.visit(nodeVisitor)
1276 endPathWithFinalPathModulesName =
"@finalPath" 1279 endpaths.append(endPathWithFinalPathModulesName)
1280 scheduledPaths.append(endPathWithFinalPathModulesName)
1282 modulesOnFinalPath = []
1283 for finalpathname
in finalpaths:
1285 iFinalPath.resolve(self.__dict__)
1286 finalpathValidator.setLabel(finalpathname)
1287 iFinalPath.visit(finalpathValidator)
1288 if finalpathValidator.filtersOnFinalpaths
or finalpathValidator.producersOnFinalpaths:
1289 names = [p.label_
for p
in finalpathValidator.filtersOnFinalpaths]
1290 names.extend( [p.label_
for p
in finalpathValidator.producersOnFinalpaths])
1291 raise RuntimeError(
"FinalPath %s has non OutputModules %s" % (finalpathname,
",".
join(names)))
1292 modulesOnFinalPath.extend(iFinalPath.moduleNames())
1293 for m
in modulesOnFinalPath:
1294 mod = getattr(self, m)
1295 setattr(mod,
"@onFinalPath", untracked.bool(
True))
1296 finalPathEndPath += mod
1298 processPSet.addVString(
True,
"@end_paths", endpaths)
1299 processPSet.addVString(
True,
"@paths", scheduledPaths)
1301 p = processPSet.newPSet()
1302 p.addVString(
True,
"@trigger_paths", triggerPaths)
1303 processPSet.addPSet(
True,
"@trigger_paths", p)
1309 condTaskModules = []
1311 pathCompositeVisitor =
CompositeVisitor(pathValidator, nodeVisitor, lister, condTaskVistor)
1312 endpathCompositeVisitor =
CompositeVisitor(endpathValidator, nodeVisitor, lister)
1313 for triggername
in triggerPaths:
1314 iPath = self.
paths_()[triggername]
1315 iPath.resolve(self.__dict__)
1316 pathValidator.setLabel(triggername)
1318 condTaskModules[:] = []
1319 iPath.visit(pathCompositeVisitor)
1321 decoratedList.append(
"#")
1322 l = list({x.label_()
for x
in condTaskModules})
1324 decoratedList.extend(l)
1325 decoratedList.append(
"@")
1326 iPath.insertInto(processPSet, triggername, decoratedList[:])
1327 for endpathname
in endpaths:
1328 if endpathname
is not endPathWithFinalPathModulesName:
1329 iEndPath = self.
endpaths_()[endpathname]
1331 iEndPath = finalPathEndPath
1332 iEndPath.resolve(self.__dict__)
1333 endpathValidator.setLabel(endpathname)
1335 iEndPath.visit(endpathCompositeVisitor)
1336 iEndPath.insertInto(processPSet, endpathname, decoratedList[:])
1337 processPSet.addVString(
False,
"@filters_on_endpaths", endpathValidator.filtersOnEndpaths)
1340 def resolve(self,keepUnresolvedSequencePlaceholders=False):
1342 x.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1344 x.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1346 x.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1349 task.resolve(self.__dict__,keepUnresolvedSequencePlaceholders)
1351 def prune(self,verbose=False,keepUnresolvedSequencePlaceholders=False):
1352 """ Remove clutter from the process that we think is unnecessary: 1353 tracked PSets, VPSets and unused modules and sequences. If a Schedule has been set, then Paths and EndPaths 1354 not in the schedule will also be removed, along with an modules and sequences used only by 1355 those removed Paths and EndPaths. The keepUnresolvedSequencePlaceholders keeps also unresolved TaskPlaceholders.""" 1364 self.
resolve(keepUnresolvedSequencePlaceholders)
1366 unneededPaths = set()
1370 usedModules=set(self.
schedule_().moduleNames())
1372 schedNames = set(( x.label_()
for x
in self.
schedule_()))
1373 names = set(self.
paths)
1376 unneededPaths = names - schedNames
1377 for n
in unneededPaths:
1388 usedModules=set(temp.moduleNames())
1405 def removeUnneeded(seqOrTasks, allSequencesOrTasks):
1406 _keepSet = set(( s
for s
in seqOrTasks
if s.hasLabel_()))
1407 _availableSet = set(allSequencesOrTasks.values())
1408 _unneededSet = _availableSet-_keepSet
1409 _unneededLabels = []
1410 for s
in _unneededSet:
1411 _unneededLabels.append(s.label_())
1412 delattr(self,s.label_())
1413 return _unneededLabels
1414 unneededSeqLabels = removeUnneeded(seqs, self.
sequences)
1415 unneededTaskLabels = removeUnneeded(tasks, self.
tasks)
1417 print(
"prune removed the following:")
1418 print(
" modules:"+
",".
join(unneededModules))
1419 print(
" tasks:"+
",".
join(unneededTaskLabels))
1420 print(
" sequences:"+
",".
join(unneededSeqLabels))
1421 print(
" paths/endpaths/finalpaths:"+
",".
join(unneededPaths))
1423 moduleNames = set(d.keys())
1424 junk = moduleNames - scheduledNames
1430 """Used by the framework to convert python to C++ objects""" 1431 class ServiceInjectorAdaptor(
object):
1442 class TopLevelPSetAcessorAdaptor(
object):
1446 def __getattr__(self,attr):
1447 return getattr(self.
__ppset,attr)
1448 def getTopPSet_(self,label):
1452 def addPSet(self,tracked,name,ppset):
1453 return self.
__ppset.addPSet(tracked,name,self.__extractPSet(ppset))
1454 def addVPSet(self,tracked,name,vpset):
1455 return self.
__ppset.addVPSet(tracked,name,[self.__extractPSet(x)
for x
in vpset])
1456 def __extractPSet(self,pset):
1457 if isinstance(pset,TopLevelPSetAcessorAdaptor):
1462 processPSet.addString(
True,
"@process_name", self.
name_())
1465 all_modules.update(self.
filters_())
1468 adaptor = TopLevelPSetAcessorAdaptor(processPSet,self)
1481 all_modules_onTasksOrScheduled = { key:value
for key, value
in all_modules.items()
if value
in nodeVisitor.modules }
1482 self.
_insertManyInto(adaptor,
"@all_modules", all_modules_onTasksOrScheduled,
True)
1484 all_switches_onTasksOrScheduled = {key:value
for key, value
in all_switches.items()
if value
in nodeVisitor.modules }
1490 pTask.visit(processNodeVisitor)
1491 esProducersToEnable = {}
1493 if esProducer
in nodeVisitor.esProducers
or not (esProducer
in processNodeVisitor.esProducers):
1494 esProducersToEnable[esProducerName] = esProducer
1495 self.
_insertManyInto(adaptor,
"@all_esmodules", esProducersToEnable,
True)
1496 esSourcesToEnable = {}
1498 if esSource
in nodeVisitor.esSources
or not (esSource
in processNodeVisitor.esSources):
1499 esSourcesToEnable[esSourceName] = esSource
1500 self.
_insertManyInto(adaptor,
"@all_essources", esSourcesToEnable,
True)
1504 if serviceObject
in nodeVisitor.services
or not (serviceObject
in processNodeVisitor.services):
1505 serviceObject.insertInto(ServiceInjectorAdaptor(adaptor,services))
1506 adaptor.addVPSet(
False,
"services",services)
1518 allAccelerators = set([
"cpu"])
1519 availableAccelerators = set([
"cpu"])
1520 for acc
in self.__dict__[
'_Process__accelerators'].
values():
1521 allAccelerators.update(acc.labels())
1522 availableAccelerators.update(acc.enabledLabels())
1523 availableAccelerators = sorted(list(availableAccelerators))
1524 parameterSet.addVString(
False,
"@available_accelerators", availableAccelerators)
1527 selectedAccelerators = []
1528 if "*" in self.options.accelerators:
1529 if len(self.options.accelerators) >= 2:
1530 raise ValueError(
"process.options.accelerators may contain '*' only as the only element, now it has {} elements".
format(len(self.options.accelerators)))
1531 selectedAccelerators = availableAccelerators
1536 for pattern
in self.options.accelerators:
1537 acc = [a
for a
in availableAccelerators
if fnmatch.fnmatchcase(a, pattern)]
1539 if not any(fnmatch.fnmatchcase(a, pattern)
for a
in allAccelerators):
1540 invalid.append(pattern)
1542 resolved.update(acc)
1544 if len(invalid) != 0:
1545 raise ValueError(
"Invalid pattern{} of '{}' in process.options.accelerators, valid values are '{}' or a pattern matching some of them.".
format(
1546 "s" if len(invalid) > 2
else "",
1547 "', '".
join(invalid),
1548 "', '".
join(sorted(list(allAccelerators)))))
1549 selectedAccelerators = sorted(list(resolved))
1550 parameterSet.addVString(
False,
"@selected_accelerators", selectedAccelerators)
1553 moduleTypeResolver =
None 1554 moduleTypeResolverPlugin =
"" 1555 for acc
in self.__dict__[
'_Process__accelerators'].
values():
1556 resolver = acc.moduleTypeResolver(selectedAccelerators)
1557 if resolver
is not None:
1558 if moduleTypeResolver
is not None:
1559 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(
1560 moduleTypeResolver.__class__.__name__,
1561 acc.__class__.__name__,
1562 resolver.__class__.__name__))
1563 moduleTypeResolver = resolver
1564 if moduleTypeResolver
is not None:
1566 moduleTypeResolverPlugin = moduleTypeResolver.plugin()
1569 for modlist
in [self.producers_, self.filters_, self.analyzers_,
1570 self.es_producers_, self.es_sources_]:
1571 for module
in modlist().
values():
1572 moduleTypeResolver.setModuleVariant(module)
1574 parameterSet.addString(
False,
"@module_type_resolver", moduleTypeResolverPlugin)
1577 wrapped = ProcessForProcessAccelerator(self)
1578 for acc
in self.__dict__[
'_Process__accelerators'].
values():
1579 acc.apply(wrapped, selectedAccelerators)
1582 """Prefer this ES source or producer. The argument can 1583 either be an object label, e.g., 1584 process.prefer(process.juicerProducer) (not supported yet) 1585 or a name of an ESSource or ESProducer 1586 process.prefer("juicer") 1587 or a type of unnamed ESSource or ESProducer 1588 process.prefer("JuicerProducer") 1589 In addition, you can pass as a labelled arguments the name of the Record you wish to 1590 prefer where the type passed is a cms.vstring and that vstring can contain the 1591 name of the C++ types in the Record that are being preferred, e.g., 1592 #prefer all data in record 'OrangeRecord' from 'juicer' 1593 process.prefer("juicer", OrangeRecord=cms.vstring()) 1595 #prefer only "Orange" data in "OrangeRecord" from "juicer" 1596 process.prefer("juicer", OrangeRecord=cms.vstring("Orange")) 1598 #prefer only "Orange" data with label "ExtraPulp" in "OrangeRecord" from "juicer" 1599 ESPrefer("ESJuicerProd", OrangeRecord=cms.vstring("Orange/ExtraPulp")) 1602 if isinstance(esmodule, ESSource)
or isinstance(esmodule, ESProducer):
1603 raise RuntimeError(
"Syntax of process.prefer(process.esmodule) not supported yet")
1608 raise RuntimeError(
"Cannot resolve prefer for "+repr(esmodule))
1613 typ = d[esname].type_()
1622 for name, value
in d.items():
1623 if value.type_() == esname:
1625 raise RuntimeError(
"More than one ES module for "+esname)
1633 if isinstance(process, Process):
1635 elif isinstance(process, str):
1642 raise TypeError(
'a ProcessFragment can only be constructed from an existig Process or from process name')
1644 return [ x
for x
in dir(self.
__process)
if isinstance(getattr(self.
__process, x), _ConfigureComponent) ]
1646 if name ==
'_ProcessFragment__process':
1647 return object.__getattribute__(self,
'_ProcessFragment__process')
1651 if name ==
'_ProcessFragment__process':
1652 object.__setattr__(self, name, value)
1656 if name ==
'_ProcessFragment__process':
1663 """a dictionary with fixed keys""" 1665 raise AttributeError(
"An FilteredStream defintion cannot be modified after creation.")
1666 _blocked_attribute = property(_blocked_attribute)
1667 __setattr__ = __delitem__ = __setitem__ = clear = _blocked_attribute
1668 pop = popitem = setdefault = update = _blocked_attribute
1670 new = dict.__new__(cls)
1671 dict.__init__(new, *args, **kw)
1672 keys = sorted(kw.keys())
1673 if keys != [
'content',
'dataTier',
'name',
'paths',
'responsible',
'selectEvents']:
1674 raise ValueError(
"The needed parameters are: content, dataTier, name, paths, responsible, selectEvents")
1675 if not isinstance(kw[
'name'],str):
1676 raise ValueError(
"name must be of type string")
1677 if not isinstance(kw[
'content'], vstring)
and not isinstance(kw[
'content'],str):
1678 raise ValueError(
"content must be of type vstring or string")
1679 if not isinstance(kw[
'dataTier'], string):
1680 raise ValueError(
"dataTier must be of type string")
1681 if not isinstance(kw[
'selectEvents'], PSet):
1682 raise ValueError(
"selectEvents must be of type PSet")
1683 if not isinstance(kw[
'paths'],(tuple, Path)):
1684 raise ValueError(
"'paths' must be a tuple of paths")
1689 return "FilteredStream object: %s" %self[
"name"]
1694 """Allows embedding another process within a parent process. This allows one to 1695 chain processes together directly in one cmsRun job rather than having to run 1696 separate jobs that are connected via a temporary file. 1698 def __init__(self,process, SelectEvents = untracked.PSet(), outputCommands = untracked.vstring()):
1701 if not isinstance(process, Process):
1702 raise ValueError(
"the 'process' argument must be of type cms.Process")
1703 if not isinstance(SelectEvents,PSet):
1704 raise ValueError(
"the 'SelectEvents' argument must be of type cms.untracked.PSet")
1705 if not isinstance(outputCommands,vstring):
1706 raise ValueError(
"the 'outputCommands' argument must be of type cms.untracked.vstring")
1711 if self.
__process.MessageLogger
is not MessageLogger:
1712 print(
"""Warning: You have reconfigured service 1713 'edm::MessageLogger' in a subprocess. 1714 This service has already been configured. 1715 This particular service may not be reconfigured in a subprocess. 1716 The reconfiguration will be ignored.""")
1719 out =
"parentProcess"+
str(
hash(self))+
" = process\n" 1721 out +=
"childProcess = process\n" 1722 out +=
"process = parentProcess"+
str(
hash(self))+
"\n" 1738 process._placeSubProcess(
'subProcess',self)
1740 topPSet = parameterSet.newPSet()
1742 subProcessPSet = parameterSet.newPSet()
1745 subProcessPSet.addPSet(
False,
"process",topPSet)
1746 return subProcessPSet
1749 """Helper class for Modifier that takes key/value pairs and uses them to reset parameters of the object""" 1756 params[k] = getattr(obj,k)
1760 setattr(obj,k,params[k])
1766 raise KeyError(
"Unknown parameter name "+key+
" specified while calling Modifier")
1769 """A helper base class for _AndModifier, _InvertModifier, and _OrModifier to contain the common code""" 1775 Modifier._toModifyCheck(obj,func,**kw)
1776 if self._isChosen():
1777 Modifier._toModify(obj,func,**kw)
1780 Modifier._toReplaceWithCheck(toObj,fromObj)
1781 if self._isChosen():
1782 Modifier._toReplaceWith(toObj,fromObj)
1785 """This is used to create a ProcessModifer that can perform actions on the process as a whole. 1786 This takes as argument a callable object (e.g. function) that takes as its sole argument an instance of Process. 1787 In order to work, the value returned from this function must be assigned to a uniquely named variable.""" 1797 """A modifier which only applies if multiple Modifiers are chosen""" 1799 super(_AndModifier,self).
__init__(lhs, rhs)
1804 """A modifier which only applies if a Modifier is not chosen""" 1806 super(_InvertModifier,self).
__init__(lhs)
1811 """A modifier which only applies if at least one of multiple Modifiers is chosen""" 1813 super(_OrModifier,self).
__init__(lhs, rhs)
1819 """This class is used to define standard modifications to a Process. 1820 An instance of this class is declared to denote a specific modification,e.g. era2017 could 1821 reconfigure items in a process to match our expectation of running in 2017. Once declared, 1822 these Modifier instances are imported into a configuration and items that need to be modified 1823 are then associated with the Modifier and with the action to do the modification. 1824 The registered modifications will only occur if the Modifier was passed to 1825 the cms.Process' constructor. 1831 """This is used to create a ProcessModifer that can perform actions on the process as a whole. 1832 This takes as argument a callable object (e.g. function) that takes as its sole argument an instance of Process. 1833 In order to work, the value returned from this function must be assigned to a uniquely named variable. 1838 if func
is not None and len(kw) != 0:
1839 raise TypeError(
"toModify takes either two arguments or one argument and key/value pairs")
1841 """This is used to register an action to be performed on the specific object. Two different forms are allowed 1842 Form 1: A callable object (e.g. function) can be passed as the second. This callable object is expected to take one argument 1843 that will be the object passed in as the first argument. 1844 Form 2: A list of parameter name, value pairs can be passed 1845 mod.toModify(foo, fred=cms.int32(7), barney = cms.double(3.14)) 1846 This form can also be used to remove a parameter by passing the value of None 1847 #remove the parameter foo.fred 1848 mod.toModify(foo, fred = None) 1849 Additionally, parameters embedded within PSets can also be modified using a dictionary 1850 #change foo.fred.pebbles to 3 and foo.fred.friend to "barney" 1851 mod.toModify(foo, fred = dict(pebbles = 3, friend = "barney)) ) 1853 Modifier._toModifyCheck(obj,func,**kw)
1855 Modifier._toModify(obj,func,**kw)
1859 if func
is not None:
1866 if not isinstance(fromObj, type(toObj)):
1867 raise TypeError(
"toReplaceWith requires both arguments to be the same class type")
1869 """If the Modifier is chosen the internals of toObj will be associated with the internals of fromObj 1871 Modifier._toReplaceWithCheck(toObj,fromObj)
1873 Modifier._toReplaceWith(toObj,fromObj)
1877 if isinstance(fromObj,_ModuleSequenceType):
1878 toObj._seq = fromObj._seq
1879 toObj._tasks = fromObj._tasks
1880 elif isinstance(fromObj,Task):
1881 toObj._collection = fromObj._collection
1882 elif isinstance(fromObj,ConditionalTask):
1883 toObj._collection = fromObj._collection
1884 elif isinstance(fromObj,_Parameterizable):
1886 for p
in toObj.parameterNames_():
1888 for p
in fromObj.parameterNames_():
1889 setattr(toObj,p,getattr(fromObj,p))
1890 if isinstance(fromObj,_TypedParameterizable):
1891 toObj._TypedParameterizable__type = fromObj._TypedParameterizable__type
1894 raise TypeError(
"toReplaceWith does not work with type "+
str(type(toObj)))
1897 """Should only be called by cms.Process instances""" 1908 return self == other
1912 """A Modifier made up of a list of Modifiers 1918 """Should only be called by cms.Process instances 1919 applies list of accumulated changes to the process""" 1921 m._applyNewProcessModifiers(process)
1923 """Should only be called by cms.Process instances""" 1930 """Creates a new ModifierChain which is a copy of 1931 this ModifierChain but excludes any Modifier or 1932 ModifierChain in the list toExclude. 1933 The exclusion is done recursively down the chain. 1937 if m
not in toExclude:
1939 if isinstance(m,ModifierChain):
1940 s = m.__copyIfExclude(toExclude)
1956 if m._isOrContains(other):
1961 """A class used by a Modifier to affect an entire Process instance. 1962 When a Process 'loads' a module containing a ProcessModifier, that 1963 ProcessModifier will be applied to the Process if and only if the 1964 Modifier passed to the constructor has been chosen. 1977 """A class used to specify possible compute accelerators in a Process 1978 instance. It is intended to be derived for any 1979 accelerator/portability technology, and provides hooks such that a 1980 specific customization can be applied to the Process on a worker 1981 node at the point where the python configuration is serialized for C++. 1983 The customization must not change the configuration hash. To 1984 enforce this reuirement, the customization gets a 1985 ProcessForProcessAccelerator wrapper that gives access to only 1986 those parts of the configuration that can be changed. Nevertheless 1987 it would be good to have specific unit test for each deriving 1988 class to ensure that all combinations of the enabled accelerators 1989 give the same configuration hash. 1991 The deriving class must do its checks for hardware availability 1992 only in enabledLabels(), and possibly in apply() if any further 1993 fine-tuning is needed, because those two are the only functions 1994 that are guaranteed to be called at the worker node. 1999 proc._placeAccelerator(self.type_(), self)
2001 return type(self).__name__
2003 specialImportRegistry.registerUse(self)
2004 result = self.__class__.__name__+
"(" 2009 result +=
"\n"+res+
"\n" 2015 """Override if need to add any 'body' content to dumpPython(). Returns a string.""" 2018 """Override to return a list of strings for the accelerator labels.""" 2021 """Override to return a list of strings for the accelerator labels 2022 that are enabled in the system the job is being run on.""" 2025 """Override to return an object that implements "module type resolver" 2026 in python. The object should have the following methods 2027 - __init__(self, accelerators) 2028 * accelerators = list of selected accelerators 2030 * should return a string for the type resolver plugin name 2031 - setModuleVariant(self, module): 2032 * Called for each ED and ES module. Should act only if 2033 module.type_() contains the magic identifier 2035 At most one of the ProcessAccelerators in a job can return a 2040 """Override if need to customize the Process at worker node. The 2041 selected available accelerator labels are given in the 2042 'accelerators' argument (the patterns, e.g. '*' have been 2043 expanded to concrete labels). 2045 This function may touch only untracked parameters. 2050 """This class is inteded to wrap the Process object to constrain the 2051 available functionality for ProcessAccelerator.apply()""" 2056 if not isinstance(value, Service):
2057 raise TypeError(
"ProcessAccelerator.apply() can get only Services. Tried to get {} with label {}".
format(
str(type(value)), label))
2060 if label ==
"_ProcessForProcessAccelerator__process":
2063 if not isinstance(value, Service):
2064 raise TypeError(
"ProcessAccelerator.apply() can only set Services. Tried to set {} with label {}".
format(
str(type(value)), label))
2068 if not isinstance(value, Service):
2069 raise TypeError(
"ProcessAccelerator.apply() can delete only Services. Tried to del {} with label {}".
format(
str(type(value)), label))
2072 if not isinstance(value, Service):
2073 raise TypeError(
"ProcessAccelerator.apply() can only add Services. Tried to set {} with label {}".
format(
str(type(value)), label))
2079 return (
"test1" in accelerators, -10)
2081 return (
"test2" in accelerators, -9)
2083 if __name__==
"__main__":
2088 newString = ( x
for x
in newString.split(
'\n')
if len(x) > 0)
2089 oldString = [ x
for x
in oldString.split(
'\n')
if len(x) > 0]
2093 if oldStringLine >= len(oldString):
2096 if l == oldString[oldStringLine]:
2100 return "\n".
join( diff )
2103 """Has same interface as the C++ object that creates PSets 2108 self.
values[label]=(tracked,value)
2110 pair = self.
values[label]
2111 if pair[0] != tracked:
2112 raise Exception(
"Asked for %s parameter '%s', but it is %s" % (
"tracked" if tracked
else "untracked",
2114 "tracked" if pair[0]
else "untracked"))
2175 super(SwitchProducerTest,self).
__init__(
2177 test1 =
lambda accelerators: (
True, -10),
2178 test2 =
lambda accelerators: (
True, -9),
2179 test3 =
lambda accelerators: (
True, -8),
2180 test4 =
lambda accelerators: (
True, -7)
2182 specialImportRegistry.registerSpecialImportForType(SwitchProducerTest,
"from test import SwitchProducerTest")
2186 super(SwitchProducerTest2,self).
__init__(
2188 test1 = _switchproducer_test2_case1,
2189 test2 = _switchproducer_test2_case2,
2191 specialImportRegistry.registerSpecialImportForType(SwitchProducerTest2,
"from test import SwitchProducerTest2")
2197 if "test1" in accelerators:
2199 if "test2" in accelerators:
2202 raise EDMException(edm.errors.UnavailableAccelerator,
"Machine has no accelerators that Test supports (has {})".
format(
", ".
join(accelerators)))
2205 return "TestModuleTypeResolver" 2208 if "@test" in module.type_():
2210 if hasattr(module,
"test"):
2211 if hasattr(module.test,
"backend"):
2213 raise EDMException(edm.errors.UnavailableAccelerator,
"Module {} has the Test backend set explicitly, but its accelerator is not available for the job".
format(module.label_()))
2215 module.test.backend = untracked.string(defaultBackend)
2217 module.test = untracked.PSet(
2218 backend = untracked.string(defaultBackend)
2222 def __init__(self, enabled=["test1", "test2", "anothertest3"], moduleTypeResolverMaker=None):
2228 invalid = set(enabled).difference(set(self.
_labels))
2229 if len(invalid) > 0:
2230 raise Exception(
"Tried to enabled nonexistent test accelerators {}".
format(
",".
join(invalid)))
2233 result =
"{}enabled = [{}]".
format(options.indentation(),
2245 process.AcceleratorTestService =
Service(
"AcceleratorTestService")
2246 if hasattr(process,
"AcceleratorTestServiceRemove"):
2247 del process.AcceleratorTestServiceRemove
2248 specialImportRegistry.registerSpecialImportForType(ProcessAcceleratorTest,
"from test import ProcessAcceleratorTest")
2251 def __init__(self, enabled=["anothertest3", "anothertest4"], moduleTypeResolverMaker=None):
2257 invalid = set(enabled).difference(set(self.
_labels))
2258 if len(invalid) > 0:
2259 raise Exception(
"Tried to enabled nonexistent test accelerators {}".
format(
",".
join(invalid)))
2262 result =
"{}enabled = [{}]".
format(options.indentation(),
2275 specialImportRegistry.registerSpecialImportForType(ProcessAcceleratorTest2,
"from test import ProcessAcceleratorTest2")
2279 """Nothing to do """ 2283 self.assertEqual(len(p.parameterNames_()),0)
2285 self.assertTrue(
'a' in p.parameterNames_())
2286 self.assertEqual(p.a.value(), 1)
2288 self.assertEqual(p.a.value(), 10)
2290 self.assertEqual(p.a.value(), 1)
2291 self.assertFalse(p.a.isTracked())
2292 p.a = untracked.int32(1)
2293 self.assertEqual(p.a.value(), 1)
2294 self.assertFalse(p.a.isTracked())
2296 self.assertEqual(p.foo.value(), 10)
2297 self.assertEqual(p.bar.value(),1.0)
2298 self.assertFalse(p.bar.isTracked())
2299 self.assertRaises(TypeError,setattr,(p,
'c',1))
2301 self.assertEqual(p.a.foo.value(),10)
2302 self.assertEqual(p.a.bar.value(),1.0)
2304 self.assertEqual(p.b.fii.value(),1)
2305 self.assertFalse(p.b.isTracked())
2310 self.assertEqual(p.a.value(),11)
2312 self.assertEqual(p.a.value(),12)
2313 self.assertEqual(v.value(),12)
2319 self.assertNotEqual(p.b,other.b)
2324 self.assertTrue(
'a' in p.analyzers_() )
2325 self.assertTrue(
'a' in p.analyzers)
2326 p.add_(
Service(
"SomeService"))
2327 self.assertTrue(
'SomeService' in p.services_())
2328 self.assertEqual(p.SomeService.type_(),
"SomeService")
2330 self.assertTrue(
'Tracer' in p.services_())
2331 self.assertRaises(TypeError, setattr, *(p,
'b',
"this should fail"))
2332 self.assertRaises(TypeError, setattr, *(p,
'bad',
Service(
"MessageLogger")))
2333 self.assertRaises(ValueError, setattr, *(p,
'bad',
Source(
"PoolSource")))
2335 self.assertEqual(p.out.type_(),
'Outer')
2336 self.assertTrue(
'out' in p.outputModules_() )
2339 self.assertTrue(
'geom' in p.es_sources_())
2341 self.assertTrue(
'ConfigDB' in p.es_sources_())
2344 self.assertTrue(
'aliasfoo1' in p.aliases_())
2349 for name
in args.keys():
2350 self.__dict__[name]=args[name]
2369 self.assertEqual(p.a.type_(),
"MyAnalyzer")
2370 self.assertEqual(p.a.label_(),
"a")
2371 self.assertRaises(AttributeError,getattr,p,
'b')
2372 self.assertEqual(p.Full.type_(),
"Full")
2373 self.assertEqual(
str(p.c),
'a')
2374 self.assertEqual(
str(p.d),
'a')
2389 self.assertRaises(ValueError, p1.extend, z1)
2398 aaa=copy.deepcopy(a),
2399 s4=copy.deepcopy(s3),
2406 self.assertEqual(p2.s4.label_(),
"s4")
2408 self.assertRaises(ValueError, p2.s4.setLabel,
"foo")
2409 p2.s4.setLabel(
"s4")
2410 p2.s4.setLabel(
None)
2411 p2.s4.setLabel(
"foo")
2412 p2._Process__setObjectLabel(p2.s4,
"foo")
2413 p2._Process__setObjectLabel(p2.s4,
None)
2414 p2._Process__setObjectLabel(p2.s4,
"bar")
2421 self.assertRaises(ValueError, p.extend, FromArg(a =
EDProducer(
"YourProducer")))
2422 self.assertRaises(ValueError, p.extend, FromArg(a =
EDAlias()))
2423 self.assertRaises(ValueError, p.__setattr__,
"a",
EDAlias())
2429 self.assertRaises(ValueError, p.extend, FromArg(a =
EDProducer(
"YourProducer")))
2430 self.assertRaises(ValueError, p.extend, FromArg(a =
EDAlias()))
2431 self.assertRaises(ValueError, p.__setattr__,
"a",
EDAlias())
2437 self.assertRaises(ValueError, p.extend, FromArg(a =
EDProducer(
"YourProducer")))
2438 self.assertRaises(ValueError, p.extend, FromArg(a =
EDAlias()))
2439 self.assertRaises(ValueError, p.__setattr__,
"a",
EDAlias())
2443 """import FWCore.ParameterSet.Config as cms 2445 process = cms.Process("test") 2447 process.maxEvents = cms.untracked.PSet( 2448 input = cms.optional.untracked.int32, 2449 output = cms.optional.untracked.allowed(cms.int32,cms.PSet) 2452 process.maxLuminosityBlocks = cms.untracked.PSet( 2453 input = cms.untracked.int32(-1) 2456 process.options = cms.untracked.PSet( 2457 FailPath = cms.untracked.vstring(), 2458 IgnoreCompletely = cms.untracked.vstring(), 2459 Rethrow = cms.untracked.vstring(), 2460 SkipEvent = cms.untracked.vstring(), 2461 accelerators = cms.untracked.vstring('*'), 2462 allowUnscheduled = cms.obsolete.untracked.bool, 2463 canDeleteEarly = cms.untracked.vstring(), 2464 deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), 2465 dumpOptions = cms.untracked.bool(False), 2466 emptyRunLumiMode = cms.obsolete.untracked.string, 2467 eventSetup = cms.untracked.PSet( 2468 forceNumberOfConcurrentIOVs = cms.untracked.PSet( 2469 allowAnyLabel_=cms.required.untracked.uint32 2471 numberOfConcurrentIOVs = cms.untracked.uint32(0) 2473 fileMode = cms.untracked.string('FULLMERGE'), 2474 forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), 2475 holdsReferencesToDeleteEarly = cms.untracked.VPSet(), 2476 makeTriggerResults = cms.obsolete.untracked.bool, 2477 modulesToIgnoreForDeleteEarly = cms.untracked.vstring(), 2478 numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0), 2479 numberOfConcurrentRuns = cms.untracked.uint32(1), 2480 numberOfStreams = cms.untracked.uint32(0), 2481 numberOfThreads = cms.untracked.uint32(1), 2482 printDependencies = cms.untracked.bool(False), 2483 sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, 2484 throwIfIllegalParameter = cms.untracked.bool(True), 2485 wantSummary = cms.untracked.bool(False) 2488 process.MessageLogger = cms.Service("MessageLogger", 2489 cerr = cms.untracked.PSet( 2490 FwkReport = cms.untracked.PSet( 2491 limit = cms.untracked.int32(10000000), 2492 reportEvery = cms.untracked.int32(1) 2494 FwkSummary = cms.untracked.PSet( 2495 limit = cms.untracked.int32(10000000), 2496 reportEvery = cms.untracked.int32(1) 2498 INFO = cms.untracked.PSet( 2499 limit = cms.untracked.int32(0) 2501 Root_NoDictionary = cms.untracked.PSet( 2502 limit = cms.untracked.int32(0) 2504 default = cms.untracked.PSet( 2505 limit = cms.untracked.int32(10000000) 2507 enable = cms.untracked.bool(True), 2508 enableStatistics = cms.untracked.bool(False), 2509 lineLength = cms.optional.untracked.int32, 2510 noLineBreaks = cms.optional.untracked.bool, 2511 noTimeStamps = cms.untracked.bool(False), 2512 resetStatistics = cms.untracked.bool(False), 2513 statisticsThreshold = cms.untracked.string('WARNING'), 2514 threshold = cms.untracked.string('INFO'), 2515 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2516 limit = cms.optional.untracked.int32, 2517 reportEvery = cms.untracked.int32(1), 2518 timespan = cms.optional.untracked.int32 2521 cout = cms.untracked.PSet( 2522 enable = cms.untracked.bool(False), 2523 enableStatistics = cms.untracked.bool(False), 2524 lineLength = cms.optional.untracked.int32, 2525 noLineBreaks = cms.optional.untracked.bool, 2526 noTimeStamps = cms.optional.untracked.bool, 2527 resetStatistics = cms.untracked.bool(False), 2528 statisticsThreshold = cms.optional.untracked.string, 2529 threshold = cms.optional.untracked.string, 2530 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2531 limit = cms.optional.untracked.int32, 2532 reportEvery = cms.untracked.int32(1), 2533 timespan = cms.optional.untracked.int32 2536 debugModules = cms.untracked.vstring(), 2537 default = cms.untracked.PSet( 2538 limit = cms.optional.untracked.int32, 2539 lineLength = cms.untracked.int32(80), 2540 noLineBreaks = cms.untracked.bool(False), 2541 noTimeStamps = cms.untracked.bool(False), 2542 reportEvery = cms.untracked.int32(1), 2543 statisticsThreshold = cms.untracked.string('INFO'), 2544 threshold = cms.untracked.string('INFO'), 2545 timespan = cms.optional.untracked.int32, 2546 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2547 limit = cms.optional.untracked.int32, 2548 reportEvery = cms.untracked.int32(1), 2549 timespan = cms.optional.untracked.int32 2552 files = cms.untracked.PSet( 2553 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2554 enableStatistics = cms.untracked.bool(False), 2555 extension = cms.optional.untracked.string, 2556 filename = cms.optional.untracked.string, 2557 lineLength = cms.optional.untracked.int32, 2558 noLineBreaks = cms.optional.untracked.bool, 2559 noTimeStamps = cms.optional.untracked.bool, 2560 output = cms.optional.untracked.string, 2561 resetStatistics = cms.untracked.bool(False), 2562 statisticsThreshold = cms.optional.untracked.string, 2563 threshold = cms.optional.untracked.string, 2564 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2565 limit = cms.optional.untracked.int32, 2566 reportEvery = cms.untracked.int32(1), 2567 timespan = cms.optional.untracked.int32 2571 suppressDebug = cms.untracked.vstring(), 2572 suppressFwkInfo = cms.untracked.vstring(), 2573 suppressInfo = cms.untracked.vstring(), 2574 suppressWarning = cms.untracked.vstring(), 2575 allowAnyLabel_=cms.optional.untracked.PSetTemplate( 2576 limit = cms.optional.untracked.int32, 2577 reportEvery = cms.untracked.int32(1), 2578 timespan = cms.optional.untracked.int32 2593 """process.a = cms.EDAnalyzer("MyAnalyzer") 2594 process.s = cms.Sequence(process.a) 2595 process.r = cms.Sequence(process.s) 2596 process.p = cms.Path(process.a) 2597 process.p2 = cms.Path(process.s) 2598 process.schedule = cms.Schedule(*[ process.p2, process.p ])""")
2610 """process.a = cms.EDAnalyzer("MyAnalyzer") 2611 process.b = cms.EDAnalyzer("YourAnalyzer") 2612 process.r = cms.Sequence(process.a) 2613 process.s = cms.Sequence(process.r) 2614 process.p = cms.Path(process.a) 2615 process.p2 = cms.Path(process.r) 2616 process.schedule = cms.Schedule(*[ process.p2, process.p ])""")
2627 """process.a = cms.EDAnalyzer("MyAnalyzer") 2628 process.r = cms.Sequence((process.a)) 2629 process.p = cms.Path(process.a) 2630 process.p2 = cms.Path(process.r) 2631 process.schedule = cms.Schedule(*[ process.p2, process.p ])""")
2647 p.task3.add(p.task1)
2651 p.p2 =
Path(p.r, p.task1, p.task2)
2652 p.schedule =
Schedule(p.p2,p.p,tasks=[p.task3,p.task4, p.task5])
2655 """process.b = cms.EDProducer("bProducer") 2656 process.c = cms.EDProducer("cProducer") 2657 process.d = cms.EDProducer("dProducer") 2658 process.e = cms.EDProducer("eProducer") 2659 process.f = cms.EDProducer("fProducer") 2660 process.g = cms.EDProducer("gProducer") 2661 process.a = cms.EDAnalyzer("MyAnalyzer") 2662 process.task5 = cms.Task() 2663 process.task1 = cms.Task(process.task5) 2664 process.task3 = cms.Task(process.task1) 2665 process.task2 = cms.Task(process.c, process.task3) 2666 process.task4 = cms.Task(process.f, process.task2) 2667 process.r = cms.Sequence((process.a)) 2668 process.p = cms.Path(process.a) 2669 process.p2 = cms.Path(process.r, process.task1, process.task2) 2670 process.schedule = cms.Schedule(*[ process.p2, process.p ], tasks=[process.task3, process.task4, process.task5])""")
2687 p.p2 =
Path(p.r, p.task1, p.task2)
2688 p.schedule =
Schedule(p.p2,p.p,tasks=[p.task5])
2691 """process.b = cms.EDProducer("bProducer") 2692 process.c = cms.EDProducer("cProducer") 2693 process.d = cms.EDProducer("dProducer") 2694 process.e = cms.EDProducer("eProducer") 2695 process.f = cms.EDProducer("fProducer") 2696 process.g = cms.EDProducer("gProducer") 2697 process.a = cms.EDAnalyzer("MyAnalyzer") 2698 process.task5 = cms.Task() 2699 process.task3 = cms.Task() 2700 process.task2 = cms.ConditionalTask(process.c, process.task3) 2701 process.task1 = cms.ConditionalTask(process.task5) 2702 process.r = cms.Sequence((process.a)) 2703 process.p = cms.Path(process.a) 2704 process.p2 = cms.Path(process.r, process.task1, process.task2) 2705 process.schedule = cms.Schedule(*[ process.p2, process.p ], tasks=[process.task5])""")
2712 p.task1 =
Task(p.d, p.e)
2713 task2 =
Task(p.f, p.g)
2714 p.schedule =
Schedule(tasks=[p.task1,task2])
2717 """process.d = cms.EDProducer("dProducer") 2718 process.e = cms.EDProducer("eProducer") 2719 process.f = cms.EDProducer("fProducer") 2720 process.g = cms.EDProducer("gProducer") 2721 process.task1 = cms.Task(process.d, process.e) 2722 process.schedule = cms.Schedule(tasks=[cms.Task(process.f, process.g), process.task1])""")
2728 """process.schedule = cms.Schedule()""")
2737 d=process.dumpPython()
2739 """process.a = cms.EDProducer("A") 2740 process.s2 = cms.Sequence(process.a)""")
2750 d=process.dumpPython()
2752 """process.a = cms.EDProducer("A") 2753 process.s2 = cms.Sequence(process.a+(process.a+process.a))""")
2779 p.p =
Path(p.c+s+p.a)
2780 p.p2 =
Path(p.c+p.s4+p.a, p.ct1)
2786 self.assertTrue(visitor1.modules == set([old,old2,p.b,p.c]))
2788 p.globalReplace(
"a",new)
2789 p.globalReplace(
"d",new2)
2792 self.assertTrue(visitor2.modules == set([new,new2,p.b,p.c]))
2793 self.assertEqual(p.p.dumpPython()[:-1],
"cms.Path(process.c+process.a+process.b+process.a, cms.Task(process.d))")
2795 p.p2.visit(visitor_p2)
2796 self.assertTrue(visitor_p2.modules == set([new,new2,p.b,p.c]))
2797 self.assertEqual(p.p2.dumpPython()[:-1],
"cms.Path(process.c+process.s4+process.a, process.ct1)")
2799 p.e3.visit(visitor3)
2800 self.assertTrue(visitor3.modules == set([new,new2,p.b,p.c]))
2802 p.s4.visit(visitor4)
2803 self.assertTrue(visitor4.modules == set([new,new2,p.b]))
2804 self.assertEqual(p.s4.dumpPython()[:-1],
"cms.Sequence(process.a+process.b, cms.Task(process.d), process.ct1)")
2806 p.t1.visit(visitor5)
2807 self.assertTrue(visitor5.modules == set([new2]))
2809 listOfTasks = list(p.schedule._tasks)
2810 listOfTasks[0].visit(visitor6)
2811 self.assertTrue(visitor6.modules == set([new2]))
2813 p.ct1.visit(visitor7)
2814 self.assertTrue(visitor7.modules == set([new2]))
2816 listOfConditionalTasks = list(p.conditionaltasks.values())
2817 listOfConditionalTasks[0].visit(visitor8)
2818 self.assertTrue(visitor8.modules == set([new2]))
2822 p.schedule =
Schedule(p.p, p.p2, p.e3, tasks=[p.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])")
2827 self.assertEqual(p.schedule.dumpPython()[:-1],
"cms.Schedule(*[ process.p, process.p2, process.e3 ], tasks=[process.t1])")
2829 self.assertEqual(p.schedule.dumpPython()[:-1],
"cms.Schedule(*[ process.p, process.p2, process.e3 ], tasks=[process.t1])")
2837 self.assertEqual(
str(p.s),
'a+b')
2838 self.assertEqual(p.s.label_(),
's')
2839 path =
Path(p.c+p.s)
2840 self.assertEqual(
str(path),
'c+a+b')
2841 p._validateSequence(path,
'p1')
2843 p2 =
Path(p.c+p.s*notInProcess)
2844 self.assertRaises(RuntimeError, p._validateSequence, p2,
'p2')
2854 self.assertRaises(ValueError, p.__setattr__,
"y", testseq)
2858 self.assertFalse(service._inProcess)
2861 self.assertTrue(service._inProcess)
2863 process.d = service2
2864 self.assertFalse(service._inProcess)
2865 self.assertTrue(service2._inProcess)
2867 self.assertFalse(service2._inProcess)
2881 service3 =
Service(
"d", v = untracked.uint32(3))
2887 testTask1 =
Task(edproducer, edfilter)
2888 self.assertRaises(RuntimeError, testTask1.add, edanalyzer)
2889 testTask1.add(essource, service)
2890 testTask1.add(essource, esproducer)
2891 testTask1.add(testTask2)
2892 coll = testTask1._collection
2893 self.assertTrue(edproducer
in coll)
2894 self.assertTrue(edfilter
in coll)
2895 self.assertTrue(service
in coll)
2896 self.assertTrue(essource
in coll)
2897 self.assertTrue(esproducer
in coll)
2898 self.assertTrue(testTask2
in coll)
2899 self.assertTrue(len(coll) == 6)
2900 self.assertTrue(len(testTask2._collection) == 0)
2904 taskContents.append(i)
2905 self.assertTrue(taskContents == [edproducer, edfilter, essource, service, esproducer, testTask2])
2910 process.mproducer = edproducer
2911 process.mproducer2 = edproducer2
2912 process.mfilter = edfilter
2913 process.messource = essource
2914 process.mesproducer = esproducer
2917 testTask3 =
Task(edproducer, edproducer2)
2918 testTask1.add(testTask3)
2919 process.myTask1 = testTask1
2926 testTask1.visit(visitor)
2927 self.assertTrue(l == set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
2928 l2 = testTask1.moduleNames
2929 self.assertTrue(l == set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
2931 testTask4 =
Task(edproducer3)
2933 self.assertRaises(RuntimeError, testTask4.visit, visitor)
2935 process.myTask4 = testTask4
2936 self.assertTrue(
False)
2937 except RuntimeError:
2940 testTask5 =
Task(service3)
2942 self.assertRaises(RuntimeError, testTask5.visit, visitor)
2944 process.myTask5 = testTask5
2945 self.assertTrue(
False)
2946 except RuntimeError:
2949 process.d = service3
2950 process.myTask5 = testTask5
2953 expectedDict = {
'myTask1' : testTask1,
'myTask5' : testTask5 }
2955 self.assertTrue(process.tasks == expectedFixedDict)
2956 self.assertTrue(process.tasks[
'myTask1'] == testTask1)
2957 self.assertTrue(process.myTask1 == testTask1)
2961 process.mproducer2 = edproducer4
2965 testTask1.visit(visitor1)
2966 l.sort(key=
lambda mod: mod.__str__())
2967 expectedList = sorted([edproducer,essource,esproducer,service,edfilter,edproducer,edproducer4],key=
lambda mod: mod.__str__())
2968 self.assertTrue(expectedList == l)
2969 process.myTask6 =
Task()
2970 process.myTask7 =
Task()
2971 process.mproducer8 = edproducer8
2972 process.myTask8 =
Task(process.mproducer8)
2973 process.myTask6.add(process.myTask7)
2974 process.myTask7.add(process.myTask8)
2975 process.myTask1.add(process.myTask6)
2976 process.myTask8.add(process.myTask5)
2978 testDict = process._itemsInDependencyOrder(process.tasks)
2979 expectedLabels = [
"myTask5",
"myTask8",
"myTask7",
"myTask6",
"myTask1"]
2980 expectedTasks = [process.myTask5, process.myTask8, process.myTask7, process.myTask6, process.myTask1]
2982 for testLabel, testTask
in testDict.items():
2983 self.assertTrue(testLabel == expectedLabels[index])
2984 self.assertTrue(testTask == expectedTasks[index])
2990 expectedPythonDump =
'cms.Task(process.d, process.mesproducer, process.messource, process.mfilter, process.mproducer, process.mproducer2, process.myTask6)\n' 2991 self.assertTrue(pythonDump == expectedPythonDump)
2993 process.myTask5 =
Task()
2994 process.myTask100 =
Task()
2995 process.mproducer9 = edproducer9
2996 sequence1 =
Sequence(process.mproducer8, process.myTask1, process.myTask5, testTask2, testTask3)
2997 sequence2 =
Sequence(process.mproducer8 + process.mproducer9)
2998 process.sequence3 =
Sequence((process.mproducer8 + process.mfilter))
3000 process.path1 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+sequence4)
3001 process.path1.associate(process.myTask1, process.myTask5, testTask2, testTask3)
3002 process.path11 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+ sequence4,process.myTask1, process.myTask5, testTask2, testTask3, process.myTask100)
3003 process.path2 =
Path(process.mproducer)
3004 process.path3 =
Path(process.mproducer9+process.mproducer8,testTask2)
3006 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')
3008 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')
3013 process.path1.visit(nameVisitor)
3014 self.assertTrue(l == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3015 self.assertTrue(process.path1.moduleNames() == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3019 process.path21 = process.path11.copy()
3020 process.path21.replace(process.mproducer, process.mproducer10)
3022 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')
3031 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')
3033 process.path22 = process.path21.copyAndExclude([process.d, process.mesproducer, process.mfilter])
3034 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')
3036 process.path23 = process.path22.copyAndExclude([process.messource, process.mproducer10])
3037 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')
3046 process.path24 =
Path(process.a+process.b+process.c+process.d)
3047 process.path25 = process.path24.copyAndExclude([process.a,process.b,process.c])
3048 self.assertTrue(process.path25.dumpPython() ==
'cms.Path(process.d)\n')
3053 process.path200.replace(process.c,process.b)
3054 process.path200.replace(process.e,process.f)
3055 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.b, cms.Task(process.f))\n")
3056 process.path200.replace(process.b,process.c)
3057 process.path200.replace(process.f,process.e)
3058 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.c, cms.Task(process.e))\n")
3059 process.path200.replace(process.c,process.a)
3060 process.path200.replace(process.e,process.g)
3061 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.a, cms.Task(process.g))\n")
3062 process.path200.replace(process.a,process.c)
3063 process.path200.replace(process.g,process.e)
3064 self.assertEqual(process.path200.dumpPython(),
"cms.EndPath(process.c, cms.Task(process.e))\n")
3078 service3 =
Service(
"d", v = untracked.uint32(3))
3086 self.assertRaises(RuntimeError, testTask1.add, edanalyzer)
3087 testTask1.add(essource, service)
3088 testTask1.add(essource, esproducer)
3089 testTask1.add(testTask2)
3090 testTask1.add(testCTask2)
3091 coll = testTask1._collection
3092 self.assertTrue(edproducer
in coll)
3093 self.assertTrue(edfilter
in coll)
3094 self.assertTrue(service
in coll)
3095 self.assertTrue(essource
in coll)
3096 self.assertTrue(esproducer
in coll)
3097 self.assertTrue(testTask2
in coll)
3098 self.assertTrue(testCTask2
in coll)
3099 self.assertTrue(len(coll) == 7)
3100 self.assertTrue(len(testTask2._collection) == 0)
3104 taskContents.append(i)
3105 self.assertEqual(taskContents, [edproducer, edfilter, essource, service, esproducer, testTask2, testCTask2])
3110 process.mproducer = edproducer
3111 process.mproducer2 = edproducer2
3112 process.mfilter = edfilter
3113 process.messource = essource
3114 process.mesproducer = esproducer
3118 testTask1.add(testTask3)
3119 process.myTask1 = testTask1
3126 testTask1.visit(visitor)
3127 self.assertEqual(l, set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
3128 l2 = testTask1.moduleNames()
3129 self.assertEqual(l2, set([
'mesproducer',
'mproducer',
'mproducer2',
'mfilter',
'd',
'messource']))
3133 self.assertRaises(RuntimeError, testTask4.visit, visitor)
3135 process.myTask4 = testTask4
3136 self.assertTrue(
False)
3137 except RuntimeError:
3142 self.assertRaises(RuntimeError, testTask5.visit, visitor)
3144 process.myTask5 = testTask5
3145 self.assertTrue(
False)
3146 except RuntimeError:
3149 process.d = service3
3150 process.myTask5 = testTask5
3153 expectedDict = {
'myTask1' : testTask1,
'myTask5' : testTask5 }
3155 self.assertEqual(process.conditionaltasks, expectedFixedDict)
3156 self.assertEqual(process.conditionaltasks[
'myTask1'], testTask1)
3157 self.assertEqual(process.myTask1, testTask1)
3161 process.mproducer2 = edproducer4
3165 testTask1.visit(visitor1)
3166 l.sort(key=
lambda mod: mod.__str__())
3167 expectedList = sorted([edproducer,essource,esproducer,service,edfilter,edproducer,edproducer4],key=
lambda mod: mod.__str__())
3168 self.assertEqual(expectedList, l)
3171 process.mproducer8 = edproducer8
3173 process.myTask6.add(process.myTask7)
3174 process.myTask7.add(process.myTask8)
3175 process.myTask1.add(process.myTask6)
3176 process.myTask8.add(process.myTask5)
3177 self.assertEqual(process.myTask8.dumpPython(),
"cms.ConditionalTask(process.mproducer8, process.myTask5)\n")
3179 testDict = process._itemsInDependencyOrder(process.conditionaltasks)
3180 expectedLabels = [
"myTask5",
"myTask8",
"myTask7",
"myTask6",
"myTask1"]
3181 expectedTasks = [process.myTask5, process.myTask8, process.myTask7, process.myTask6, process.myTask1]
3183 for testLabel, testTask
in testDict.items():
3184 self.assertEqual(testLabel, expectedLabels[index])
3185 self.assertEqual(testTask, expectedTasks[index])
3191 expectedPythonDump =
'cms.ConditionalTask(process.d, process.mesproducer, process.messource, process.mfilter, process.mproducer, process.mproducer2, process.myTask6)\n' 3192 self.assertEqual(pythonDump, expectedPythonDump)
3195 self.assertEqual(process.myTask8.dumpPython(),
"cms.ConditionalTask(process.mproducer8, process.myTask5)\n")
3197 process.mproducer9 = edproducer9
3198 sequence1 =
Sequence(process.mproducer8, process.myTask1, process.myTask5, testTask2, testTask3)
3199 sequence2 =
Sequence(process.mproducer8 + process.mproducer9)
3200 process.sequence3 =
Sequence((process.mproducer8 + process.mfilter))
3202 process.path1 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+sequence4)
3203 process.path1.associate(process.myTask1, process.myTask5, testTask2, testTask3)
3204 process.path11 =
Path(process.mproducer+process.mproducer8+sequence1+sequence2+process.sequence3+ sequence4,process.myTask1, process.myTask5, testTask2, testTask3, process.myTask100)
3205 process.path2 =
Path(process.mproducer)
3206 process.path3 =
Path(process.mproducer9+process.mproducer8,testTask2)
3208 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')
3210 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')
3215 process.path1.visit(nameVisitor)
3216 self.assertTrue(l == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3217 self.assertTrue(process.path1.moduleNames() == set([
'mproducer',
'd',
'mesproducer',
None,
'mproducer9',
'mproducer8',
'messource',
'mproducer2',
'mfilter']))
3221 process.path21 = process.path11.copy()
3222 process.path21.replace(process.mproducer, process.mproducer10)
3224 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')
3233 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')
3235 process.path22 = process.path21.copyAndExclude([process.d, process.mesproducer, process.mfilter])
3236 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')
3238 process.path23 = process.path22.copyAndExclude([process.messource, process.mproducer10])
3239 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')
3248 process.fillProcessDesc(p)
3249 self.assertEqual(p.values[
"@all_modules"], (
True, [
'b',
'b2',
'b3']))
3250 self.assertEqual(p.values[
"@paths"], (
True, [
'p']))
3251 self.assertEqual(p.values[
"p"], (
True, [
'b',
'#',
'b2',
'b3',
'@']))
3262 self.assertEqual(
str(path),
'a+b+c')
3263 path =
Path(p.a*p.b+p.c)
3264 self.assertEqual(
str(path),
'a+b+c')
3267 path =
Path(p.a+ p.b*p.c)
3268 self.assertEqual(
str(path),
'a+b+c')
3269 path =
Path(p.a*(p.b+p.c))
3270 self.assertEqual(
str(path),
'a+b+c')
3271 path =
Path(p.a*(p.b+~p.c))
3273 self.assertEqual(
str(path),
'a+b+~c')
3275 self.assertRaises(TypeError,Path,p.es)
3278 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path()\n')
3281 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a)\n')
3284 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(cms.Task())\n')
3287 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.Task())\n')
3292 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.Task(), process.t1)\n')
3295 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(cms.ConditionalTask())\n')
3298 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.ConditionalTask())\n')
3303 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.Path(process.a, cms.Task(), process.t1)\n')
3313 self.assertEqual(
str(path),
'a+b+c')
3315 self.assertEqual(
str(path),
'a+b+c')
3317 self.assertEqual(
str(path),
'a+b+c')
3319 self.assertEqual(
str(path),
'a+b+c')
3321 self.assertRaises(TypeError,FinalPath,p.es)
3324 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.FinalPath()\n')
3327 self.assertEqual(t.dumpPython(
PrintOptions()),
'cms.FinalPath(process.a)\n')
3329 self.assertRaises(TypeError, FinalPath,
Task())
3330 self.assertRaises(TypeError, FinalPath, p.a,
Task())
3334 self.assertRaises(TypeError, FinalPath, p.a, p.t1,
Task(), p.t1)
3338 self.assertRaises(TypeError, FinalPath, p.a, p.t1,
ConditionalTask(), p.t1)
3342 self.assertEqual(p.t.dumpPython(
PrintOptions()),
'cms.FinalPath(process.a)\n')
3353 p.path =
Path(p.a*p.b)
3354 lookuptable = {
id(a): p.a,
id(b): p.b}
3358 self.assertEqual(
str(path),
str(p.path))
3380 path =
Path(a * c * seq1, task1, ctask1)
3382 self.assertTrue(path.contains(a))
3383 self.assertFalse(path.contains(b))
3384 self.assertTrue(path.contains(c))
3385 self.assertFalse(path.contains(d))
3386 self.assertTrue(path.contains(e))
3387 self.assertFalse(path.contains(f))
3388 self.assertTrue(path.contains(g))
3389 self.assertTrue(path.contains(h))
3392 self.assertFalse(endpath.contains(b))
3393 self.assertTrue(endpath.contains(i))
3396 self.assertFalse(seq.contains(b))
3397 self.assertTrue(seq.contains(c))
3400 task =
Task(j, k, task2)
3401 self.assertFalse(task.contains(b))
3402 self.assertTrue(task.contains(j))
3403 self.assertTrue(task.contains(k))
3404 self.assertTrue(task.contains(l))
3408 sch =
Schedule(path, path2, tasks=[task,task3])
3409 self.assertFalse(sch.contains(b))
3410 self.assertTrue(sch.contains(a))
3411 self.assertTrue(sch.contains(c))
3412 self.assertTrue(sch.contains(e))
3413 self.assertTrue(sch.contains(g))
3414 self.assertTrue(sch.contains(n))
3415 self.assertTrue(sch.contains(j))
3416 self.assertTrue(sch.contains(k))
3417 self.assertTrue(sch.contains(l))
3418 self.assertTrue(sch.contains(m))
3422 self.assertFalse(ctask.contains(b))
3423 self.assertTrue(ctask.contains(j))
3424 self.assertTrue(ctask.contains(k))
3425 self.assertTrue(ctask.contains(l))
3426 self.assertTrue(ctask.contains(g))
3439 self.assertEqual(s[0],p.path1)
3440 self.assertEqual(s[1],p.path2)
3442 self.assertTrue(
'b' in p.schedule.moduleNames())
3443 self.assertTrue(hasattr(p,
'b'))
3444 self.assertTrue(hasattr(p,
'c'))
3445 self.assertTrue(hasattr(p,
'd'))
3446 self.assertTrue(hasattr(p,
'path1'))
3447 self.assertTrue(hasattr(p,
'path2'))
3448 self.assertTrue(hasattr(p,
'path3'))
3450 self.assertTrue(
'b' in p.schedule.moduleNames())
3451 self.assertTrue(hasattr(p,
'b'))
3452 self.assertTrue(
not hasattr(p,
'c'))
3453 self.assertTrue(
not hasattr(p,
'd'))
3454 self.assertTrue(hasattr(p,
'path1'))
3455 self.assertTrue(hasattr(p,
'path2'))
3456 self.assertTrue(
not hasattr(p,
'path3'))
3458 self.assertTrue(len(p.schedule._tasks) == 0)
3472 p.task2 =
Task(p.f, p.Tracer)
3473 s =
Schedule(p.path1,p.path2,tasks=[p.task1,p.task2,p.task1])
3474 self.assertEqual(s[0],p.path1)
3475 self.assertEqual(s[1],p.path2)
3476 self.assertTrue(len(s._tasks) == 2)
3477 self.assertTrue(p.task1
in s._tasks)
3478 self.assertTrue(p.task2
in s._tasks)
3479 listOfTasks = list(s._tasks)
3480 self.assertTrue(len(listOfTasks) == 2)
3481 self.assertTrue(p.task1 == listOfTasks[0])
3482 self.assertTrue(p.task2 == listOfTasks[1])
3484 self.assertTrue(
'b' in p.schedule.moduleNames())
3489 process2.path1 =
Path(process2.a)
3490 process2.task1 =
Task(process2.e)
3491 process2.schedule =
Schedule(process2.path1,tasks=process2.task1)
3492 listOfTasks = list(process2.schedule._tasks)
3493 self.assertTrue(listOfTasks[0] == process2.task1)
3497 self.assertEqual(s2[0],p.path1)
3498 self.assertEqual(s2[1],p.path2)
3499 self.assertTrue(len(s2._tasks) == 2)
3500 self.assertTrue(p.task1
in s2._tasks)
3501 self.assertTrue(p.task2
in s2._tasks)
3502 listOfTasks = list(s2._tasks)
3503 self.assertTrue(len(listOfTasks) == 2)
3504 self.assertTrue(p.task1 == listOfTasks[0])
3505 self.assertTrue(p.task2 == listOfTasks[1])
3507 names = s.moduleNames()
3508 self.assertTrue(names == set([
'a',
'b',
'e',
'Tracer',
'f']))
3514 self.assertRaises(RuntimeError,
lambda : p.setSchedule_(s) )
3523 self.assertTrue(
'a' in s.moduleNames())
3524 self.assertTrue(
'b' in s.moduleNames())
3525 self.assertTrue(
'c' in s.moduleNames())
3529 self.assertTrue(
'a' in s.moduleNames())
3530 self.assertTrue(
'b' in s.moduleNames())
3531 self.assertTrue(
'c' in s.moduleNames())
3540 self.assertTrue(p.schedule
is None)
3543 self.assertEqual(pths[keys[0]],p.path1)
3544 self.assertEqual(pths[keys[1]],p.path2)
3546 self.assertTrue(hasattr(p,
'a'))
3547 self.assertTrue(hasattr(p,
'b'))
3548 self.assertTrue(
not hasattr(p,
'c'))
3549 self.assertTrue(hasattr(p,
'path1'))
3550 self.assertTrue(hasattr(p,
'path2'))
3559 self.assertTrue(p.schedule
is None)
3562 self.assertEqual(pths[keys[1]],p.path1)
3563 self.assertEqual(pths[keys[0]],p.path2)
3570 self.assertEqual(p.modu.a.value(),1)
3571 self.assertEqual(p.modu.b.value(),2)
3576 self.assertTrue(
not a.isModified())
3578 self.assertTrue(a.isModified())
3580 self.assertEqual(p.a.a1.value(), 1)
3584 self.assertEqual(p.a.a1.value(), 2)
3593 self.assertRaises(ValueError, EDProducer,
'C', ps1, ps2)
3594 self.assertRaises(ValueError, EDProducer,
'C', ps1, a=
int32(3))
3598 self.assertEqual(p.options.numberOfThreads.value(),1)
3599 p.options.numberOfThreads = 8
3600 self.assertEqual(p.options.numberOfThreads.value(),8)
3602 self.assertEqual(p.options.numberOfThreads.value(),1)
3603 p.options = dict(numberOfStreams =2,
3605 self.assertEqual(p.options.numberOfThreads.value(),2)
3606 self.assertEqual(p.options.numberOfStreams.value(),2)
3608 self.assertRaises(TypeError, setattr, p,
'options', untracked.PSet(numberOfThreads =
int32(-1)))
3609 p.options = untracked.PSet(numberOfThreads = untracked.uint32(4))
3610 self.assertEqual(p.options.numberOfThreads.value(), 4)
3614 p.maxEvents.input = 10
3615 self.assertEqual(p.maxEvents.input.value(),10)
3617 p.maxEvents.output = 10
3618 self.assertEqual(p.maxEvents.output.value(),10)
3620 p.maxEvents.output =
PSet(out=untracked.int32(10))
3621 self.assertEqual(p.maxEvents.output.out.value(), 10)
3623 p.maxEvents = untracked.PSet(input = untracked.int32(5))
3624 self.assertEqual(p.maxEvents.input.value(), 5)
3626 self.assertRaises(TypeError, setattr, p,
'maxEvents', untracked.PSet(input = untracked.uint32(1)))
3627 p.maxEvents = untracked.PSet(input = untracked.int32(1))
3628 self.assertEqual(p.maxEvents.input.value(), 1)
3636 p.bars.foos =
'Foosball' 3637 self.assertEqual(p.bars.foos,
InputTag(
'Foosball'))
3638 p.p =
Path(p.foos*p.bars)
3640 p.add_(
Service(
"MessageLogger"))
3646 p.prefer(
"ForceSource")
3649 """process.juicer = cms.ESProducer("JuicerProducer") 3650 process.ForceSource = cms.ESSource("ForceSource") 3651 process.prefer("ForceSource") 3652 process.prefer("juicer")""")
3653 p.prefer(
"juicer",fooRcd=
vstring(
"Foo"))
3655 """process.juicer = cms.ESProducer("JuicerProducer") 3656 process.ForceSource = cms.ESSource("ForceSource") 3657 process.prefer("ForceSource") 3658 process.prefer("juicer", 3659 fooRcd = cms.vstring('Foo') 3674 self.assertEqual(process.m.p.i.value(), 4)
3684 subProcess.p =
Path(subProcess.a)
3685 subProcess.add_(
Service(
"Foo"))
3686 process.addSubProcess(
SubProcess(subProcess))
3687 d = process.dumpPython()
3688 equalD =
"""parentProcess = process 3689 process.a = cms.EDProducer("A") 3690 process.Foo = cms.Service("Foo") 3691 process.p = cms.Path(process.a) 3692 childProcess = process 3693 process = parentProcess 3694 process.addSubProcess(cms.SubProcess(process = childProcess, SelectEvents = cms.untracked.PSet( 3695 ), outputCommands = cms.untracked.vstring()))""" 3696 equalD = equalD.replace(
"parentProcess",
"parentProcess"+
str(
hash(process.subProcesses_()[0])))
3704 messageLoggerSplit =
'process.MessageLogger = cms.Service' 3706 childProcess =
Process(
'Child')
3707 del childProcess.MessageLogger
3708 combinedDump = parentDumpSplit[0] + childProcess.dumpPython() + messageLoggerSplit + parentDumpSplit[1]
3709 self.assertEqual(
_lineDiff(d, combinedDump), equalD)
3711 process.fillProcessDesc(p)
3712 self.assertEqual((
True,[
'a']),p.values[
"subProcesses"][1][0].values[
"process"][1].values[
'@all_modules'])
3713 self.assertEqual((
True,[
'p']),p.values[
"subProcesses"][1][0].values[
"process"][1].values[
'@paths'])
3714 self.assertEqual({
'@service_type':(
True,
'Foo')}, p.values[
"subProcesses"][1][0].values[
"process"][1].values[
"services"][1][0].values)
3724 proc.fillProcessDesc(p)
3725 self.assertEqual((
True,1),p.values[
"ref"][1].values[
"a"])
3726 self.assertEqual((
True,1),p.values[
"ref3"][1].values[
"a"])
3727 self.assertEqual((
True,1),p.values[
"ref2"][1].values[
"a"])
3728 self.assertEqual((
True,1),p.values[
"ref2"][1].values[
"b"][1].values[
"a"])
3729 self.assertEqual((
True,1),p.values[
"ref4"][1][0].values[
"a"])
3730 self.assertEqual((
True,1),p.values[
"ref4"][1][1].values[
"a"])
3739 self.assertEqual(proc.sp.label_(),
"sp")
3740 self.assertEqual(proc.sp.test1.label_(),
"sp@test1")
3741 self.assertEqual(proc.sp.test2.label_(),
"sp@test2")
3744 proc.s =
Sequence(proc.a + proc.sp)
3745 proc.t =
Task(proc.a, proc.sp)
3747 proc.p.associate(proc.t)
3749 proc.fillProcessDesc(p)
3750 self.assertEqual((
True,
"EDProducer"), p.values[
"sp"][1].values[
"@module_edm_type"])
3751 self.assertEqual((
True,
"SwitchProducer"), p.values[
"sp"][1].values[
"@module_type"])
3752 self.assertEqual((
True,
"sp"), p.values[
"sp"][1].values[
"@module_label"])
3753 all_cases = copy.deepcopy(p.values[
"sp"][1].values[
"@all_cases"])
3755 self.assertEqual((
True, [
"sp@test1",
"sp@test2"]), all_cases)
3756 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
3757 self.assertEqual([
"a",
"sp",
"sp@test1",
"sp@test2"], p.values[
"@all_modules"][1])
3758 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test1"][1].values[
"@module_edm_type"])
3759 self.assertEqual((
True,
"Bar"), p.values[
"sp@test1"][1].values[
"@module_type"])
3760 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test2"][1].values[
"@module_edm_type"])
3761 self.assertEqual((
True,
"Foo"), p.values[
"sp@test2"][1].values[
"@module_type"])
3762 dump = proc.dumpPython()
3763 self.assertEqual(dump.find(
'@'), -1)
3764 self.assertEqual(specialImportRegistry.getSpecialImports(), [
"from test import SwitchProducerTest"])
3765 self.assertTrue(dump.find(
"\nfrom test import SwitchProducerTest\n") != -1)
3774 proc.s =
Sequence(proc.a + proc.sp)
3775 proc.t =
Task(proc.a, proc.sp)
3777 proc.p.associate(proc.t)
3779 proc.fillProcessDesc(p)
3780 self.assertEqual((
True,
"EDProducer"), p.values[
"sp"][1].values[
"@module_edm_type"])
3781 self.assertEqual((
True,
"SwitchProducer"), p.values[
"sp"][1].values[
"@module_type"])
3782 self.assertEqual((
True,
"sp"), p.values[
"sp"][1].values[
"@module_label"])
3783 all_cases = copy.deepcopy(p.values[
"sp"][1].values[
"@all_cases"])
3785 self.assertEqual((
True, [
"sp@test1",
"sp@test2"]), all_cases)
3786 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
3787 self.assertEqual([
"a",
"sp",
"sp@test2"], p.values[
"@all_modules"][1])
3788 self.assertEqual([
"sp@test1"], p.values[
"@all_aliases"][1])
3789 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test2"][1].values[
"@module_edm_type"])
3790 self.assertEqual((
True,
"Foo"), p.values[
"sp@test2"][1].values[
"@module_type"])
3791 self.assertEqual((
True,
"EDAlias"), p.values[
"sp@test1"][1].values[
"@module_edm_type"])
3792 self.assertEqual((
True,
"Bar"), p.values[
"sp@test1"][1].values[
"a"][1][0].values[
"type"])
3801 proc.s =
Sequence(proc.a + proc.sp)
3802 proc.t =
Task(proc.a, proc.sp)
3804 proc.p.associate(proc.t)
3806 proc.fillProcessDesc(p)
3807 self.assertEqual((
True,
"EDProducer"), p.values[
"sp"][1].values[
"@module_edm_type"])
3808 self.assertEqual((
True,
"SwitchProducer"), p.values[
"sp"][1].values[
"@module_type"])
3809 self.assertEqual((
True,
"sp"), p.values[
"sp"][1].values[
"@module_label"])
3810 self.assertEqual((
True, [
"sp@test1",
"sp@test2"]), p.values[
"sp"][1].values[
"@all_cases"])
3811 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
3812 self.assertEqual([
"a",
"sp",
"sp@test1"], p.values[
"@all_modules"][1])
3813 self.assertEqual([
"sp@test2"], p.values[
"@all_aliases"][1])
3814 self.assertEqual((
True,
"EDProducer"), p.values[
"sp@test1"][1].values[
"@module_edm_type"])
3815 self.assertEqual((
True,
"Foo"), p.values[
"sp@test1"][1].values[
"@module_type"])
3816 self.assertEqual((
True,
"EDAlias"), p.values[
"sp@test2"][1].values[
"@module_edm_type"])
3817 self.assertEqual((
True,
"Bar"), p.values[
"sp@test2"][1].values[
"a"][1][0].values[
"type"])
3828 proc.spp = proc.spct.clone()
3831 proc.p =
Path(proc.a, proc.ct)
3832 proc.pp =
Path(proc.a + proc.spp)
3834 proc.fillProcessDesc(p)
3835 self.assertEqual([
"a",
"spct",
"spct@test1",
"spct@test2",
"spp",
"spp@test1",
"spp@test2"], p.values[
"@all_modules"][1])
3836 self.assertEqual([
"a",
"#",
"spct",
"spct@test1",
"spct@test2",
"@"], p.values[
"p"][1])
3837 self.assertEqual([
"a",
"spp",
"#",
"spp@test1",
"spp@test2",
"@"], p.values[
"pp"][1])
3852 p.t3 =
Task(p.g, p.t1)
3856 p.path1 =
Path(p.a, p.t3, p.ct3)
3858 self.assertTrue(p.schedule
is None)
3861 self.assertEqual(pths[keys[0]],p.path1)
3862 self.assertEqual(pths[keys[1]],p.path2)
3864 p.pset2 = untracked.PSet(parA =
string(
"pset2"))
3866 p.vpset2 = untracked.VPSet()
3868 self.assertTrue(hasattr(p,
'a'))
3869 self.assertTrue(hasattr(p,
'b'))
3870 self.assertTrue(
not hasattr(p,
'c'))
3871 self.assertTrue(
not hasattr(p,
'd'))
3872 self.assertTrue(hasattr(p,
'e'))
3873 self.assertTrue(
not hasattr(p,
'f'))
3874 self.assertTrue(hasattr(p,
'g'))
3875 self.assertTrue(hasattr(p,
'h'))
3876 self.assertTrue(
not hasattr(p,
's'))
3877 self.assertTrue(hasattr(p,
't1'))
3878 self.assertTrue(
not hasattr(p,
't2'))
3879 self.assertTrue(hasattr(p,
't3'))
3880 self.assertTrue(hasattr(p,
'path1'))
3881 self.assertTrue(hasattr(p,
'path2'))
3911 p.path1 =
Path(p.a, p.t3, p.ct3)
3913 p.path3 =
Path(p.b+p.s2)
3914 p.path4 =
Path(p.b+p.s3)
3915 p.schedule =
Schedule(p.path1,p.path2,p.path3)
3916 p.schedule.associate(p.t4)
3919 self.assertEqual(pths[keys[0]],p.path1)
3920 self.assertEqual(pths[keys[1]],p.path2)
3922 self.assertTrue(hasattr(p,
'a'))
3923 self.assertTrue(hasattr(p,
'b'))
3924 self.assertTrue(
not hasattr(p,
'c'))
3925 self.assertTrue(
not hasattr(p,
'd'))
3926 self.assertTrue(
not hasattr(p,
'e'))
3927 self.assertTrue(
not hasattr(p,
'f'))
3928 self.assertTrue(hasattr(p,
'g'))
3929 self.assertTrue(hasattr(p,
'h'))
3930 self.assertTrue(hasattr(p,
'i'))
3931 self.assertTrue(hasattr(p,
'j'))
3932 self.assertTrue(hasattr(p,
'k'))
3933 self.assertTrue(
not hasattr(p,
'l'))
3934 self.assertTrue(
not hasattr(p,
't1'))
3935 self.assertTrue(hasattr(p,
't2'))
3936 self.assertTrue(hasattr(p,
't3'))
3937 self.assertTrue(hasattr(p,
't4'))
3938 self.assertTrue(
not hasattr(p,
'ct1'))
3939 self.assertTrue(hasattr(p,
'ct2'))
3940 self.assertTrue(hasattr(p,
'ct3'))
3941 self.assertTrue(
not hasattr(p,
'ct4'))
3942 self.assertTrue(
not hasattr(p,
's'))
3943 self.assertTrue(hasattr(p,
's2'))
3944 self.assertTrue(
not hasattr(p,
's3'))
3945 self.assertTrue(hasattr(p,
'path1'))
3946 self.assertTrue(hasattr(p,
'path2'))
3947 self.assertTrue(hasattr(p,
'path3'))
3948 self.assertTrue(
not hasattr(p,
'path4'))
3956 self.assertTrue(hasattr(p,
'a'))
3957 self.assertTrue(hasattr(p,
'b'))
3958 self.assertTrue(hasattr(p,
's'))
3959 self.assertTrue(hasattr(p,
'pth'))
3965 p.prune(keepUnresolvedSequencePlaceholders=
True)
3966 self.assertTrue(hasattr(p,
'b'))
3967 self.assertTrue(hasattr(p,
's'))
3968 self.assertTrue(hasattr(p,
'pth'))
3969 self.assertEqual(p.s.dumpPython(),
'cms.Sequence(cms.SequencePlaceholder("a")+process.b)\n')
3977 self.assertTrue(hasattr(p,
'a'))
3978 self.assertTrue(hasattr(p,
'b'))
3979 self.assertTrue(hasattr(p,
's'))
3980 self.assertTrue(hasattr(p,
'pth'))
3988 self.assertTrue(hasattr(p,
'a'))
3989 self.assertTrue(hasattr(p,
'b'))
3990 self.assertTrue(hasattr(p,
's'))
3991 self.assertTrue(hasattr(p,
'pth'))
3997 p.prune(keepUnresolvedSequencePlaceholders=
True)
3998 self.assertTrue(hasattr(p,
'b'))
3999 self.assertTrue(hasattr(p,
's'))
4000 self.assertTrue(hasattr(p,
'pth'))
4001 self.assertEqual(p.s.dumpPython(),
'cms.Task(cms.TaskPlaceholder("a"), process.b)\n')
4009 p.path1 =
Path(p.b, p.t2, p.t3)
4012 p.endpath1 =
EndPath(p.b, p.t5)
4016 p.schedule =
Schedule(p.path1, p.endpath1,tasks=[p.t7,p.t8])
4026 """process.a = cms.EDProducer("ma") 4027 process.c = cms.EDProducer("mc") 4028 process.d = cms.EDProducer("md") 4029 process.e = cms.EDProducer("me") 4030 process.f = cms.EDProducer("mf") 4031 process.g = cms.EDProducer("mg") 4032 process.h = cms.EDProducer("mh") 4033 process.i = cms.EDProducer("mi") 4034 process.j = cms.EDProducer("mj") 4035 process.b = cms.EDAnalyzer("mb") 4036 process.t1 = cms.Task(cms.TaskPlaceholder("c")) 4037 process.t2 = cms.Task(cms.TaskPlaceholder("d"), process.a, process.t1) 4038 process.t3 = cms.Task(cms.TaskPlaceholder("e")) 4039 process.t5 = cms.Task(cms.TaskPlaceholder("g"), cms.TaskPlaceholder("t4"), process.a) 4040 process.t4 = cms.Task(cms.TaskPlaceholder("f")) 4041 process.t6 = cms.Task(cms.TaskPlaceholder("h")) 4042 process.t7 = cms.Task(cms.TaskPlaceholder("i"), process.a, process.t6) 4043 process.t8 = cms.Task(cms.TaskPlaceholder("j")) 4044 process.path1 = cms.Path(process.b, process.t2, process.t3) 4045 process.endpath1 = cms.EndPath(process.b, process.t5) 4046 process.schedule = cms.Schedule(*[ process.path1, process.endpath1 ], tasks=[process.t7, process.t8])""")
4049 """process.a = cms.EDProducer("ma") 4050 process.c = cms.EDProducer("mc") 4051 process.d = cms.EDProducer("md") 4052 process.e = cms.EDProducer("me") 4053 process.f = cms.EDProducer("mf") 4054 process.g = cms.EDProducer("mg") 4055 process.h = cms.EDProducer("mh") 4056 process.i = cms.EDProducer("mi") 4057 process.j = cms.EDProducer("mj") 4058 process.b = cms.EDAnalyzer("mb") 4059 process.t1 = cms.Task(process.c) 4060 process.t2 = cms.Task(process.a, process.d, process.t1) 4061 process.t3 = cms.Task(process.e) 4062 process.t4 = cms.Task(process.f) 4063 process.t6 = cms.Task(process.h) 4064 process.t7 = cms.Task(process.a, process.i, process.t6) 4065 process.t8 = cms.Task(process.j) 4066 process.t5 = cms.Task(process.a, process.g, process.t4) 4067 process.path1 = cms.Path(process.b, process.t2, process.t3) 4068 process.endpath1 = cms.EndPath(process.b, process.t5) 4069 process.schedule = cms.Schedule(*[ process.path1, process.endpath1 ], tasks=[process.t7, process.t8])""")
4077 p.path1 =
Path(p.b, p.t2, p.t3)
4080 p.path2 =
Path(p.b, p.t5)
4081 p.schedule =
Schedule(p.path1, p.path2)
4091 """process.a = cms.EDProducer("ma") 4092 process.c = cms.EDProducer("mc") 4093 process.d = cms.EDProducer("md") 4094 process.e = cms.EDProducer("me") 4095 process.f = cms.EDProducer("mf") 4096 process.g = cms.EDProducer("mg") 4097 process.h = cms.EDProducer("mh") 4098 process.i = cms.EDProducer("mi") 4099 process.j = cms.EDProducer("mj") 4100 process.b = cms.EDAnalyzer("mb") 4101 process.t1 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("c")) 4102 process.t2 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("d"), process.a, process.t1) 4103 process.t3 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("e")) 4104 process.t5 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("g"), cms.ConditionalTaskPlaceholder("t4"), process.a) 4105 process.t4 = cms.ConditionalTask(cms.ConditionalTaskPlaceholder("f")) 4106 process.path1 = cms.Path(process.b, process.t2, process.t3) 4107 process.path2 = cms.Path(process.b, process.t5) 4108 process.schedule = cms.Schedule(*[ process.path1, process.path2 ])""")
4111 """process.a = cms.EDProducer("ma") 4112 process.c = cms.EDProducer("mc") 4113 process.d = cms.EDProducer("md") 4114 process.e = cms.EDProducer("me") 4115 process.f = cms.EDProducer("mf") 4116 process.g = cms.EDProducer("mg") 4117 process.h = cms.EDProducer("mh") 4118 process.i = cms.EDProducer("mi") 4119 process.j = cms.EDProducer("mj") 4120 process.b = cms.EDAnalyzer("mb") 4121 process.t1 = cms.ConditionalTask(process.c) 4122 process.t2 = cms.ConditionalTask(process.a, process.d, process.t1) 4123 process.t3 = cms.ConditionalTask(process.e) 4124 process.t4 = cms.ConditionalTask(process.f) 4125 process.t5 = cms.ConditionalTask(process.a, process.g, process.t4) 4126 process.path1 = cms.Path(process.b, process.t2, process.t3) 4127 process.path2 = cms.Path(process.b, process.t5) 4128 process.schedule = cms.Schedule(*[ process.path1, process.path2 ])""")
4144 p.t1 =
Task(p.g, p.h, p.i)
4145 t2 =
Task(p.g, p.h, p.i)
4153 p.path1 =
Path(p.a+p.f+p.s,t2,ct2)
4155 p.path3 =
Path(ct3, p.ct4)
4158 p.schedule =
Schedule(p.path2, p.path3, p.endpath2, tasks=[t3, p.t4])
4159 self.assertTrue(hasattr(p,
'f'))
4160 self.assertTrue(hasattr(p,
'g'))
4161 self.assertTrue(hasattr(p,
'i'))
4166 self.assertFalse(hasattr(p,
'f'))
4167 self.assertFalse(hasattr(p,
'g'))
4168 self.assertEqual(p.t1.dumpPython(),
'cms.Task(process.h)\n')
4169 self.assertEqual(p.ct1.dumpPython(),
'cms.ConditionalTask(process.h)\n')
4170 self.assertEqual(p.s.dumpPython(),
'cms.Sequence(process.d)\n')
4171 self.assertEqual(p.path1.dumpPython(),
'cms.Path(process.a+process.s, cms.ConditionalTask(process.h), cms.Task(process.h))\n')
4172 self.assertEqual(p.endpath1.dumpPython(),
'cms.EndPath(process.b)\n')
4173 self.assertEqual(p.path3.dumpPython(),
'cms.Path(cms.ConditionalTask(process.h), process.ct4)\n')
4175 self.assertEqual(p.path1.dumpPython(),
'cms.Path(process.a+(process.d), cms.ConditionalTask(process.h), cms.Task(process.h))\n')
4176 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(*[ process.path2, process.path3, process.endpath2 ], tasks=[cms.Task(process.h), process.t4])\n')
4178 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(*[ process.path3, process.endpath2 ], tasks=[cms.Task(process.h), process.t4])\n')
4180 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(*[ process.endpath2 ], tasks=[cms.Task(process.h), process.t4])\n')
4182 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(tasks=[cms.Task(process.h), process.t4])\n')
4184 self.assertEqual(p.schedule_().
dumpPython(),
'cms.Schedule(tasks=[cms.Task(process.h)])\n')
4187 Process._firstProcess =
True 4189 self.assertRaises(RuntimeError,
lambda:
Process(
"test2", m1))
4191 Process._firstProcess =
True 4196 m1.toModify(p.a,_mod_fred)
4197 self.assertEqual(p.a.fred.value(),2)
4199 m1.toModify(p.b, wilma = 2)
4200 self.assertEqual(p.b.wilma.value(),2)
4201 self.assertTrue(p.isUsingModifier(m1))
4204 Process._firstProcess =
True 4207 m1.toModify(p.a,_mod_fred)
4209 m1.toModify(p.b, wilma = 2)
4210 self.assertEqual(p.a.fred.value(),1)
4211 self.assertEqual(p.b.wilma.value(),1)
4212 self.assertEqual(p.isUsingModifier(m1),
False)
4215 Process._firstProcess =
True 4218 m1.toModify(p.a, fred =
int32(2))
4219 p.b = p.a.clone(wilma =
int32(3))
4220 self.assertEqual(p.a.fred.value(),2)
4221 self.assertEqual(p.a.wilma.value(),1)
4222 self.assertEqual(p.b.fred.value(),2)
4223 self.assertEqual(p.b.wilma.value(),3)
4226 Process._firstProcess =
True 4229 m1.toModify(p.a, fred =
None, fintstones = dict(fred =
None))
4230 self.assertEqual(hasattr(p.a,
"fred"),
False)
4231 self.assertEqual(hasattr(p.a.fintstones,
"fred"),
False)
4232 self.assertEqual(p.a.wilma.value(),1)
4235 Process._firstProcess =
True 4238 m1.toModify(p.a, wilma =
int32(2))
4239 self.assertEqual(p.a.fred.value(), 1)
4240 self.assertEqual(p.a.wilma.value(),2)
4243 Process._firstProcess =
True 4246 m1.toModify(p.a, flintstones = dict(fred =
int32(2)))
4247 self.assertEqual(p.a.flintstones.fred.value(),2)
4248 self.assertEqual(p.a.flintstones.wilma.value(),1)
4251 Process._firstProcess =
True 4254 self.assertRaises(KeyError,
lambda: m1.toModify(p.a, flintstones = dict(imnothere = dict(wilma=2))))
4255 self.assertRaises(KeyError,
lambda: m1.toModify(p.a, foo = 1))
4258 Process._firstProcess =
True 4261 m1.toModify(p.a, flintstones = {1:dict(wilma =
int32(2))})
4262 self.assertEqual(p.a.flintstones[0].fred.value(),1)
4263 self.assertEqual(p.a.flintstones[1].wilma.value(),2)
4266 Process._firstProcess =
True 4269 m1.toModify(p.a, fred = {1:7})
4270 self.assertEqual(p.a.fred[0],1)
4271 self.assertEqual(p.a.fred[1],7)
4272 self.assertEqual(p.a.fred[2],3)
4275 Process._firstProcess =
True 4279 try: m1.toModify(p.a, fred = {5:7})
4280 except IndexError
as e: raised =
True 4281 self.assertEqual(raised,
True)
4284 Process._firstProcess =
True 4288 try: m1.toModify(p.a, flintstones = dict(bogus =
int32(37)))
4289 except TypeError
as e: raised =
True 4290 self.assertEqual(raised,
True)
4294 class ProcModifierMod(
object):
4300 testMod = DummyMod()
4302 self.assertTrue(hasattr(p,
"a"))
4304 Process._firstProcess =
True 4306 testProcMod = ProcModifierMod(m1,_rem_a)
4308 p.extend(testProcMod)
4309 self.assertTrue(
not hasattr(p,
"a"))
4313 Process._firstProcess =
True 4315 self.assertTrue(p.isUsingModifier(m1))
4316 self.assertTrue(p.isUsingModifier(mc))
4317 testMod = DummyMod()
4319 m1.toModify(p.b, fred =
int32(3))
4321 testProcMod = ProcModifierMod(m1,_rem_a)
4322 p.extend(testProcMod)
4323 self.assertTrue(
not hasattr(p,
"a"))
4324 self.assertEqual(p.b.fred.value(),3)
4329 mclone = mc.copyAndExclude([m2])
4330 self.assertTrue(
not mclone._isOrContains(m2))
4331 self.assertTrue(mclone._isOrContains(m1))
4334 mclone = mc2.copyAndExclude([m2])
4335 self.assertTrue(
not mclone._isOrContains(m2))
4336 self.assertTrue(mclone._isOrContains(m1))
4337 self.assertTrue(mclone._isOrContains(m3))
4341 Process._firstProcess =
True 4344 (m1 & m2).toModify(p.a, fred =
int32(2))
4345 self.assertRaises(TypeError,
lambda: (m1 & m2).toModify(p.a, 1, wilma=2))
4346 self.assertEqual(p.a.fred, 1)
4349 Process._firstProcess =
True 4352 (m1 & m2).toModify(p.a, fred =
int32(2))
4353 self.assertEqual(p.a.fred, 2)
4357 Process._firstProcess =
True 4360 (m1 & m2 & m3).toModify(p.a, fred =
int32(2))
4361 self.assertEqual(p.a.fred, 2)
4362 (m1 & (m2 & m3)).toModify(p.a, fred =
int32(3))
4363 self.assertEqual(p.a.fred, 3)
4364 ((m1 & m2) & m3).toModify(p.a, fred =
int32(4))
4365 self.assertEqual(p.a.fred, 4)
4369 Process._firstProcess =
True 4372 (~m1).toModify(p.a, fred=2)
4373 self.assertEqual(p.a.fred, 1)
4374 (~m2).toModify(p.a, wilma=2)
4375 self.assertEqual(p.a.wilma, 2)
4376 self.assertRaises(TypeError,
lambda: (~m1).toModify(p.a, 1, wilma=2))
4377 self.assertRaises(TypeError,
lambda: (~m2).toModify(p.a, 1, wilma=2))
4382 Process._firstProcess =
True 4385 (m1 | m2).toModify(p.a, fred=2)
4386 self.assertEqual(p.a.fred, 2)
4387 (m1 | m2 | m3).toModify(p.a, fred=3)
4388 self.assertEqual(p.a.fred, 3)
4389 (m3 | m2 | m1).toModify(p.a, fred=4)
4390 self.assertEqual(p.a.fred, 4)
4391 ((m1 | m2) | m3).toModify(p.a, fred=5)
4392 self.assertEqual(p.a.fred, 5)
4393 (m1 | (m2 | m3)).toModify(p.a, fred=6)
4394 self.assertEqual(p.a.fred, 6)
4395 (m2 | m3).toModify(p.a, fred=7)
4396 self.assertEqual(p.a.fred, 6)
4397 self.assertRaises(TypeError,
lambda: (m1 | m2).toModify(p.a, 1, wilma=2))
4398 self.assertRaises(TypeError,
lambda: (m2 | m3).toModify(p.a, 1, wilma=2))
4404 Process._firstProcess =
True 4407 (m1 & ~m2).toModify(p.a, fred=2)
4408 self.assertEqual(p.a.fred, 1)
4409 (m1 & ~m3).toModify(p.a, fred=2)
4410 self.assertEqual(p.a.fred, 2)
4411 (m1 | ~m2).toModify(p.a, fred=3)
4412 self.assertEqual(p.a.fred, 3)
4413 (~m1 | ~m2).toModify(p.a, fred=4)
4414 self.assertEqual(p.a.fred, 3)
4415 (~m3 & ~m4).toModify(p.a, fred=4)
4416 self.assertEqual(p.a.fred, 4)
4417 ((m1 & m3) | ~m4).toModify(p.a, fred=5)
4418 self.assertEqual(p.a.fred, 5)
4421 Process._firstProcess =
True 4425 self.assertRaises(TypeError,
lambda: m1.toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4433 m1.toReplaceWith(p.s,
Sequence(p.a+p.b, p.td))
4434 self.assertEqual(p.a.wilma.value(),3)
4435 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4436 self.assertEqual(hasattr(p,
"fred"),
False)
4437 self.assertTrue(p.s.dumpPython() ==
"cms.Sequence(process.a+process.b, process.td)\n")
4439 m1.toReplaceWith(p.td,
Task(p.e))
4440 self.assertTrue(p.td._collection ==
OrderedSet([p.e]))
4450 m1.toReplaceWith(p.s,
Sequence(p.a+p.b, p.td))
4451 self.assertEqual(p.a.wilma.value(),3)
4452 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4453 self.assertEqual(hasattr(p,
"fred"),
False)
4454 self.assertTrue(p.s.dumpPython() ==
"cms.Sequence(process.a+process.b, process.td)\n")
4457 self.assertTrue(p.td._collection ==
OrderedSet([p.e]))
4460 Process._firstProcess =
True 4464 self.assertEqual(p.a.type_(),
"MyAnalyzer")
4470 Process._firstProcess =
True 4473 self.assertRaises(TypeError,
lambda: (m1 & m2).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4474 self.assertRaises(TypeError,
lambda: (m3 & m4).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4475 self.assertRaises(TypeError,
lambda: (~m3).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4476 self.assertRaises(TypeError,
lambda: (~m1).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4477 self.assertRaises(TypeError,
lambda: (m1 | m3).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4478 self.assertRaises(TypeError,
lambda: (m3 | m4).toReplaceWith(p.a,
EDProducer(
"YourProducer")))
4479 (m1 & m2).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer1"))
4480 self.assertEqual(p.a.type_(),
"YourAnalyzer1")
4481 (m1 & m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer2"))
4482 self.assertEqual(p.a.type_(),
"YourAnalyzer1")
4483 (~m1).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer2"))
4484 self.assertEqual(p.a.type_(),
"YourAnalyzer1")
4485 (~m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer2"))
4486 self.assertEqual(p.a.type_(),
"YourAnalyzer2")
4487 (m1 | m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer3"))
4488 self.assertEqual(p.a.type_(),
"YourAnalyzer3")
4489 (m3 | m4).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer4"))
4490 self.assertEqual(p.a.type_(),
"YourAnalyzer3")
4495 Process._firstProcess =
True 4499 (m1 & m2).toModify(p.a, fred = 2).toModify(p.b, betty = 3)
4500 self.assertEqual(p.a.fred, 2)
4501 self.assertEqual(p.a.wilma, 1)
4502 self.assertEqual(p.b.barney, 1)
4503 self.assertEqual(p.b.betty, 3)
4504 (m1 | m3).toModify(p.a, wilma = 4).toModify(p.b, barney = 5)
4505 self.assertEqual(p.a.fred, 2)
4506 self.assertEqual(p.a.wilma, 4)
4507 self.assertEqual(p.b.barney, 5)
4508 self.assertEqual(p.b.betty, 3)
4509 (m2 & ~m3).toReplaceWith(p.a,
EDAnalyzer(
"YourAnalyzer")).toModify(p.b, barney = 6)
4510 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4511 self.assertEqual(p.b.barney, 6)
4512 self.assertEqual(p.b.betty, 3)
4513 (m1 & ~m3).toModify(p.a, param=
int32(42)).toReplaceWith(p.b,
EDProducer(
"YourProducer"))
4514 self.assertEqual(p.a.type_(),
"YourAnalyzer")
4515 self.assertEqual(p.a.param, 42)
4516 self.assertEqual(p.b.type_(),
"YourProducer")
4523 m.toModify(a, foo2 = {0: dict(type =
"Foo3")})
4524 self.assertEqual(a.foo2[0].type,
"Foo3")
4527 self.assertEqual(a.foo2[0].type,
"Foo3")
4528 self.assertEqual(a.foo4[0].type,
"Foo4")
4530 m.toModify(a, foo2 =
None)
4531 self.assertFalse(hasattr(a,
"foo2"))
4532 self.assertEqual(a.foo4[0].type,
"Foo4")
4535 self.assertFalse(hasattr(a,
"foo2"))
4536 self.assertFalse(hasattr(a,
"foo4"))
4537 self.assertTrue(hasattr(a,
"bar"))
4538 self.assertEqual(a.bar[0].type,
"Bar")
4551 test1 = dict(a = 4, b = dict(c =
None)),
4552 test2 = dict(aa = 15, bb = dict(cc = 45, dd =
string(
"foo"))))
4553 self.assertEqual(sp.test1.a.value(), 4)
4554 self.assertEqual(sp.test1.b.hasParameter(
"c"),
False)
4555 self.assertEqual(sp.test2.aa.value(), 15)
4556 self.assertEqual(sp.test2.bb.cc.value(), 45)
4557 self.assertEqual(sp.test2.bb.dd.value(),
"foo")
4560 self.assertEqual(sp.test1.type_(),
"Fred")
4561 self.assertEqual(sp.test1.x.value(), 42)
4562 self.assertRaises(TypeError,
lambda: m.toReplaceWith(sp.test1,
EDAnalyzer(
"Foo")))
4565 self.assertEqual(sp.test2.type_(),
"Xyzzy")
4566 self.assertEqual(sp.test2.x.value(), 24)
4567 self.assertRaises(TypeError,
lambda: m.toModify(sp, test2 =
EDAnalyzer(
"Foo")))
4570 self.assertEqual(sp.test3.type_(),
"Wilma")
4571 self.assertEqual(sp.test3.y.value(), 24)
4572 self.assertRaises(TypeError,
lambda: m.toModify(sp, test4 =
EDAnalyzer(
"Foo")))
4574 m.toModify(sp, test2 =
None)
4575 self.assertEqual(hasattr(sp,
"test2"),
False)
4578 self.assertTrue(hasattr(sp.test2,
"foo"))
4581 self.assertTrue(hasattr(sp.test2,
"bar"))
4584 self.assertTrue(hasattr(sp.test2,
"xyzzy"))
4586 self.assertRaises(TypeError,
lambda: m.toReplaceWith(sp.test2,
EDProducer(
"Foo")))
4592 p.maxEvents.input = 10
4593 p.options.numberOfThreads = 4
4594 p.maxLuminosityBlocks.input = 2
4596 self.assertEqual(p.maxEvents.input.value(),10)
4597 self.assertEqual(p.options.numberOfThreads.value(), 4)
4598 self.assertEqual(p.maxLuminosityBlocks.input.value(),2)
4604 self.assertTrue(hasattr(p,
'fltr'))
4608 p.TestService =
Service(
"TestService")
4609 self.assertTrue(hasattr(proc,
"TestService"))
4610 self.assertEqual(proc.TestService.type_(),
"TestService")
4611 self.assertRaises(TypeError, setattr, p,
"a",
EDProducer(
"Foo"))
4612 p.add_(
Service(
"TestServiceTwo"))
4613 self.assertTrue(hasattr(proc,
"TestServiceTwo"))
4614 self.assertEqual(proc.TestServiceTwo.type_(),
"TestServiceTwo")
4615 p.TestService.foo = untracked.uint32(42)
4616 self.assertEqual(proc.TestService.foo.value(), 42)
4618 self.assertRaises(TypeError, getattr, p,
"mod")
4622 proc.fillProcessDesc(p)
4623 self.assertTrue([
"cpu"], p.values[
"@available_accelerators"][1])
4624 self.assertFalse(p.values[
"@selected_accelerators"][0])
4625 self.assertTrue([
"cpu"], p.values[
"@selected_accelerators"][1])
4626 self.assertFalse(p.values[
"@module_type_resolver"][0])
4627 self.assertEqual(
"", p.values[
"@module_type_resolver"][1])
4632 del proc.MessageLogger
4634 self.assertEqual(proc.dumpPython(),
4635 """import FWCore.ParameterSet.Config as cms 4636 from test import ProcessAcceleratorTest 4638 process = cms.Process("TEST") 4640 process.maxEvents = cms.untracked.PSet( 4641 input = cms.optional.untracked.int32, 4642 output = cms.optional.untracked.allowed(cms.int32,cms.PSet) 4645 process.maxLuminosityBlocks = cms.untracked.PSet( 4646 input = cms.untracked.int32(-1) 4649 process.options = cms.untracked.PSet( 4650 FailPath = cms.untracked.vstring(), 4651 IgnoreCompletely = cms.untracked.vstring(), 4652 Rethrow = cms.untracked.vstring(), 4653 SkipEvent = cms.untracked.vstring(), 4654 accelerators = cms.untracked.vstring('*'), 4655 allowUnscheduled = cms.obsolete.untracked.bool, 4656 canDeleteEarly = cms.untracked.vstring(), 4657 deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), 4658 dumpOptions = cms.untracked.bool(False), 4659 emptyRunLumiMode = cms.obsolete.untracked.string, 4660 eventSetup = cms.untracked.PSet( 4661 forceNumberOfConcurrentIOVs = cms.untracked.PSet( 4662 allowAnyLabel_=cms.required.untracked.uint32 4664 numberOfConcurrentIOVs = cms.untracked.uint32(0) 4666 fileMode = cms.untracked.string('FULLMERGE'), 4667 forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), 4668 holdsReferencesToDeleteEarly = cms.untracked.VPSet(), 4669 makeTriggerResults = cms.obsolete.untracked.bool, 4670 modulesToIgnoreForDeleteEarly = cms.untracked.vstring(), 4671 numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0), 4672 numberOfConcurrentRuns = cms.untracked.uint32(1), 4673 numberOfStreams = cms.untracked.uint32(0), 4674 numberOfThreads = cms.untracked.uint32(1), 4675 printDependencies = cms.untracked.bool(False), 4676 sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, 4677 throwIfIllegalParameter = cms.untracked.bool(True), 4678 wantSummary = cms.untracked.bool(False) 4681 process.ProcessAcceleratorTest = ProcessAcceleratorTest( 4682 enabled = ['test1', 'test2', 'anothertest3'] 4688 proc.fillProcessDesc(p)
4689 self.assertEqual([
"*"], p.values[
"options"][1].values[
"accelerators"][1])
4690 self.assertFalse(p.values[
"options"][1].values[
"accelerators"][0])
4691 self.assertTrue([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@selected_accelerators"][1])
4692 self.assertEqual(
"AcceleratorTestService", p.values[
"services"][1][0].values[
"@service_type"][1])
4693 self.assertFalse(p.values[
"@available_accelerators"][0])
4694 self.assertTrue([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4695 self.assertFalse(p.values[
"@module_type_resolver"][0])
4696 self.assertEqual(
"", p.values[
"@module_type_resolver"][1])
4700 proc.add_(
Service(
"AcceleratorTestServiceRemove"))
4702 proc.fillProcessDesc(p)
4703 services = [x.values[
"@service_type"][1]
for x
in p.values[
"services"][1]]
4704 self.assertTrue(
"AcceleratorTestService" in services)
4705 self.assertFalse(
"AcceleratorTestServiceRemove" in services)
4710 proc.fillProcessDesc(p)
4711 self.assertEqual([
"cpu",
"test1"], p.values[
"@selected_accelerators"][1])
4712 self.assertEqual([
"cpu",
"test1"], p.values[
"@available_accelerators"][1])
4716 proc.options.accelerators = [
"test2"]
4718 proc.fillProcessDesc(p)
4719 self.assertEqual([
"test2"], p.values[
"@selected_accelerators"][1])
4720 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4724 proc.options.accelerators = [
"test*"]
4725 proc.fillProcessDesc(p)
4726 self.assertEqual([
"test1",
"test2"], p.values[
"@selected_accelerators"][1])
4727 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4731 proc.options.accelerators = [
"test2"]
4733 proc.fillProcessDesc(p)
4734 self.assertEqual([], p.values[
"@selected_accelerators"][1])
4735 self.assertEqual([
"cpu",
"test1"], p.values[
"@available_accelerators"][1])
4739 proc.options.accelerators = [
"cpu*"]
4741 proc.fillProcessDesc(p)
4742 self.assertEqual([
"cpu"], p.values[
"@selected_accelerators"][1])
4743 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4747 proc.options.accelerators = [
"test3"]
4749 self.assertRaises(ValueError, proc.fillProcessDesc, p)
4753 proc.options.accelerators = [
"*",
"test1"]
4755 self.assertRaises(ValueError, proc.fillProcessDesc, p)
4761 proc.fillProcessDesc(p)
4762 self.assertEqual([
"anothertest3",
"anothertest4",
"cpu",
"test1",
"test2"], p.values[
"@selected_accelerators"][1])
4763 self.assertEqual([
"anothertest3",
"anothertest4",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4768 proc.options.accelerators = [
"*test3",
"c*"]
4770 proc.fillProcessDesc(p)
4771 self.assertEqual([
"anothertest3",
"cpu"], p.values[
"@selected_accelerators"][1])
4772 self.assertEqual([
"anothertest3",
"anothertest4",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4782 proc.p =
Path(proc.sp)
4784 proc.fillProcessDesc(p)
4785 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
4795 proc.p =
Path(proc.sp)
4797 proc.fillProcessDesc(p)
4798 self.assertEqual((
False,
"sp@test1"), p.values[
"sp"][1].values[
"@chosen_case"])
4802 proc.options.accelerators = [
"test1"]
4809 proc.p =
Path(proc.sp)
4811 proc.fillProcessDesc(p)
4812 self.assertEqual((
False,
"sp@test1"), p.values[
"sp"][1].values[
"@chosen_case"])
4816 proc.options.accelerators = [
"test*"]
4823 proc.p =
Path(proc.sp)
4825 proc.fillProcessDesc(p)
4826 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
4830 proc.options.accelerators = [
"anothertest3"]
4837 proc.p =
Path(proc.sp)
4839 self.assertRaises(RuntimeError, proc.fillProcessDesc, p)
4845 proc.normalProducer =
EDProducer(
"FooProducer")
4846 proc.testProducer =
EDProducer(
"BarProducer@test")
4847 proc.test2Producer =
EDProducer(
"BarProducer@test", test=untracked.PSet(backend=untracked.string(
"test2_backend")))
4848 proc.testAnalyzer =
EDAnalyzer(
"Analyzer@test")
4850 proc.testESProducer =
ESProducer(
"ESProducer@test")
4851 proc.testESSource =
ESSource(
"ESSource@test")
4852 proc.p =
Path(proc.normalProducer+proc.testProducer+proc.test2Producer+proc.testAnalyzer+proc.testFilter)
4854 proc.fillProcessDesc(p)
4855 self.assertEqual(
"TestModuleTypeResolver", p.values[
"@module_type_resolver"][1])
4856 self.assertEqual(
"FooProducer", p.values[
"normalProducer"][1].values[
"@module_type"][1])
4857 self.assertEqual(len(list(
filter(
lambda x:
not "@" in x, p.values[
"normalProducer"][1].values.keys()))), 0)
4858 self.assertEqual(
"BarProducer@test", p.values[
"testProducer"][1].values[
"@module_type"][1])
4859 self.assertEqual(
False, p.values[
"testProducer"][1].values[
"test"][0])
4860 self.assertEqual(
False, p.values[
"testProducer"][1].values[
"test"][1].values[
"backend"][0])
4861 self.assertEqual(
"test1_backend", p.values[
"testProducer"][1].values[
"test"][1].values[
"backend"][1])
4862 self.assertEqual(
"BarProducer@test", p.values[
"test2Producer"][1].values[
"@module_type"][1])
4863 self.assertEqual(
"test2_backend", p.values[
"test2Producer"][1].values[
"test"][1].values[
"backend"][1])
4864 self.assertEqual(
"Analyzer@test", p.values[
"testAnalyzer"][1].values[
"@module_type"][1])
4865 self.assertEqual(
"test1_backend", p.values[
"testAnalyzer"][1].values[
"test"][1].values[
"backend"][1])
4866 self.assertEqual(
"Filter@test", p.values[
"testFilter"][1].values[
"@module_type"][1])
4867 self.assertEqual(
"test1_backend", p.values[
"testFilter"][1].values[
"test"][1].values[
"backend"][1])
4868 self.assertEqual(
"ESProducer@test", p.values[
"ESProducer@test@testESProducer"][1].values[
"@module_type"][1])
4869 self.assertEqual(
"test1_backend", p.values[
"ESProducer@test@testESProducer"][1].values[
"test"][1].values[
"backend"][1])
4870 self.assertEqual(
"ESSource@test", p.values[
"ESSource@test@testESSource"][1].values[
"@module_type"][1])
4871 self.assertEqual(
"test1_backend", p.values[
"ESSource@test@testESSource"][1].values[
"test"][1].values[
"backend"][1])
4877 proc.options.accelerators = []
4878 self.assertRaises(EDMException, proc.fillProcessDesc, p)
4883 proc.options.accelerators = [
"test1"]
4884 proc.test2Producer =
EDProducer(
"BarProducer@test", test=untracked.PSet(backend=untracked.string(
"test2_backend")))
4885 proc.p =
Path(proc.test2Producer)
4886 self.assertRaises(EDMException, proc.fillProcessDesc, p)
4895 self.assertRaises(RuntimeError, proc.fillProcessDesc, p)
4906 proc.p =
Path(proc.sp)
4907 pkl = pickle.dumps(proc)
4908 unpkl = pickle.loads(pkl)
4910 unpkl.fillProcessDesc(p)
4911 self.assertEqual((
False,
"sp@test2"), p.values[
"sp"][1].values[
"@chosen_case"])
4912 self.assertEqual([
"anothertest3",
"cpu",
"test1",
"test2"], p.values[
"@available_accelerators"][1])
4913 unpkl = pickle.loads(pkl)
4914 unpkl.ProcessAcceleratorTest.setEnabled([
"test1"])
4916 unpkl.fillProcessDesc(p)
4917 self.assertEqual((
False,
"sp@test1"), p.values[
"sp"][1].values[
"@chosen_case"])
4918 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 __injectValidValue(self, name, value, newValue=None)
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)