1 from __future__
import absolute_import
3 from builtins
import range
4 from .Mixins
import _ConfigureComponent, PrintOptions
5 from .Mixins
import _Labelable, _Unlabelable
6 from .Mixins
import _ValidatingParameterListBase
7 from .ExceptionHandling
import *
8 from .OrderedSet
import OrderedSet
11 """Information relevant for when a hard dependency, 12 which uses the * operator, is found""" 18 """Denotes an object which can be placed in a sequence""" 29 return lookuptable[
id(self)]
31 raise KeyError(
"no "+
str(type(self))+
" with id "+
str(
id(self))+
" found")
32 def resolve(self, processDict,keepIfCannotResolve=False):
35 """Returns True if the object is an operator (e.g. *,+ or !) type""" 43 self._visitSubNodes(visitor)
46 collection.append(self)
48 return "A Sequenceable type" 51 if not isinstance(v,_Sequenceable):
54 msg +=
"%s only takes arguments of types which are allowed in a sequence, but was given:\n" %typename
56 msg +=
"\nPlease remove the problematic object from the argument list" 60 if not isinstance(v,_BooleanLogicSequenceable):
63 msg +=
"%s only takes arguments of types which are allowed in a boolean logic sequence, but was given:\n" %typename
65 msg +=
"\nPlease remove the problematic object from the argument list" 69 """Denotes an object which can be used in a boolean logic sequence""" 71 super(_BooleanLogicSequenceable,self).
__init__()
79 """Contains the operation of a boolean logic expression""" 90 if isinstance(left,_BooleanLogicExpression)
and left._op == self.
_op:
91 self._items.extend(left._items)
93 self._items.append(left)
94 if isinstance(right,_BooleanLogicExpression)
and right._op == self.
_op:
95 self._items.extend(right._items)
97 self._items.append(right)
110 if not isinstance(m,_BooleanLogicSequenceLeaf):
111 returnValue +=
'('+m.dumpSequencePython(options)+
')' 113 returnValue += m.dumpSequencePython(options)
117 if self.
_op == self.AND:
136 """Holds representation of the operations without having to use recursion. 137 Operations are added to the beginning of the list and their operands are 138 added to the end of the list, with the left added before the right 158 returnValue += sep+
str(m)
167 itemDump = item.dumpSequencePython(options)
169 returnValue += (separator + itemDump)
175 returnValue +=
'&'+m.dumpSequenceConfig()
180 def resolve(self, processDict,keepIfCannotResolve=False):
184 return self._collection.index(item)
186 self._collection.insert(index,item)
191 """Base class for classes which define a sequence of modules""" 193 self.__dict__[
"_isFrozen"] =
False 195 if (len(arg) > 1
and not isinstance(arg[1], Task))
or (len(arg) > 0
and not isinstance(arg[0],_Sequenceable)
and not isinstance(arg[0],Task)):
198 msg +=
"The %s constructor takes zero or one sequenceable argument followed by zero or more arguments of type Task. But the following types are given:\n" %typename
199 for item,i
in zip(arg, range(1,20)):
201 msg +=
" %i) %s \n" %(i, item._errorstr())
203 msg +=
" %i) Not sequenceable and not a Task\n" %(i)
204 if len(arg) > 1
and isinstance(arg[0],_Sequenceable)
and isinstance(arg[1], _Sequenceable):
205 msg +=
"Maybe you forgot to combine the sequenceable arguments via '*' or '+'." 208 if len(arg) > 0
and isinstance(arg[0], _Sequenceable):
210 arg[0]._appendToCollection(self._seq._collection)
220 if not isinstance(task, Task):
221 raise TypeError(
"associate only works with objects of type Task")
222 self._tasks.add(task)
228 self._placeImpl(name,proc)
231 if self.
_seq is None:
237 if self.
_seq is None:
244 return v.resultString()
247 if self.
_seq is not None:
248 s = self._seq.dumpSequenceConfig()
251 """Returns a string which is the python representation of the object""" 256 if self.
_seq is not None:
257 s =self._seq.dumpSequencePython(options)
258 associationContents = set()
261 associationContents.add(_Labelable.dumpSequencePython(task, options))
263 associationContents.add(task.dumpPythonNoNewline(options))
264 for iString
in sorted(associationContents):
268 if len(associationContents) > 254:
269 return 'cms.'+type(self).__name__+
'(*['+s+
'])' 270 return 'cms.'+type(self).__name__+
'('+s+
')' 272 """Returns a string which contains the python representation of just the internal sequence""" 275 return _Labelable.dumpSequencePython(self, options)
276 elif len(self.
_tasks) == 0:
277 if self.
_seq is None:
279 s = self._seq.dumpSequencePython(options)
285 """Returns a string which contains the old config language representation of just the internal sequence""" 288 return _Labelable.dumpSequenceConfig(self)
291 if self.
_seq is None:
293 return '('+self._seq.dumpSequenceConfig()+
')' 296 if self.
_seq is not None:
298 return "cms."+type(self).__name__+
'('+s+
')\n' 300 """Returns a set containing the names of all modules being used""" 308 return visitor.result()
310 returnValue =_ModuleSequenceType.__new__(type(self))
311 if self.
_seq is not None:
312 returnValue.__init__(self.
_seq)
314 returnValue.__init__()
318 """Returns a copy of the sequence which excludes those module in 'listOfModulesToExclude'""" 327 result = self.__new__(type(self))
328 result.__init__(v.result(self)[0], *v.result(self)[1])
338 return visitor.result()
340 self.
_seq = self._seq._clonesequence(lookuptable)
343 """Finds all instances of 'original' and substitutes 'replacement' for them. 344 Returns 'True' if a replacement occurs.""" 358 if isinstance(original,Task) != isinstance(replacement,Task):
359 raise TypeError(
"replace only works if both arguments are Tasks or neither")
363 self.
_seq = v.result(self)[0]
366 return v.didReplace()
368 """Returns the index at which the item is found or raises an exception""" 369 if self.
_seq is not None:
370 return self._seq.index(item)
371 raise ValueError(
str(item)+
" is not in the sequence")
373 """Inserts the item at the index specified""" 375 if self.
_seq is None:
377 self._seq.insert(index,item)
379 """Remove the first occurrence of 'something' (a sequence or a module) 380 Returns 'True' if the module has been removed, False if it was not found""" 394 self.
_seq = v.result(self)[0]
398 def resolve(self, processDict,keepIfCannotResolve=False):
399 if self.
_seq is not None:
400 self.
_seq = self._seq.resolve(processDict,keepIfCannotResolve)
402 task.resolve(processDict,keepIfCannotResolve)
405 if not name.startswith(
"_"):
406 raise AttributeError(
"You cannot set parameters for sequence like objects.")
408 self.__dict__[name] = value
423 parameterSet.addVString(
True, myname, decoratedList)
425 """Passes to visitor's 'enter' and 'leave' method each item describing the module sequence. 426 If the item contains 'sub' items then visitor will see those 'sub' items between the 427 item's 'enter' and 'leave' calls. 429 if self.
_seq is not None:
430 self._seq.visitNode(visitor)
437 """For ~ and - operators""" 440 if isinstance(operand, _ModuleSequenceType):
441 raise RuntimeError(
"This operator cannot accept a sequence")
442 if not isinstance(operand, _Sequenceable):
443 raise RuntimeError(
"This operator cannot accept a non sequenceable type")
446 return isinstance(self, type(other))
and self.
_operand==other._operand
448 return not self.
__eq__(other)
450 self._operand._findDependencies(knownDeps, presentDeps)
452 return type(self)(self._operand._clonesequence(lookuptable))
457 self._operand._replace(original, replacement)
459 if (self.
_operand == original):
return (
None,
True)
460 (self.
_operand, found) = self._operand._remove(original)
461 if self.
_operand ==
None:
return (
None,
True)
463 def resolve(self, processDict,keepIfCannotResolve=False):
464 self.
_operand = self._operand.resolve(processDict,keepIfCannotResolve)
469 self._operand.visitNode(visitor)
471 self._operand.decoration()
475 """Used in the expression tree for a sequence as a stand in for the '!' operator""" 477 super(_SequenceNegation,self).
__init__(operand)
481 return '!%s' %self._operand.dumpSequenceConfig()
483 if self._operand.isOperation():
484 return '~(%s)' %self._operand.dumpSequencePython(options)
485 return '~%s' %self._operand.dumpSequencePython(options)
490 """Used in the expression tree for a sequence as a stand in for the '-' operator""" 492 super(_SequenceIgnore,self).
__init__(operand)
496 return '-%s' %self._operand.dumpSequenceConfig()
498 return 'cms.ignore(%s)' %self._operand.dumpSequencePython(options)
503 """The EDFilter passed as an argument will be run but its filter value will be ignored 509 super(Path,self).
__init__(*arg,**argv)
511 proc._placePath(name,self)
515 super(EndPath,self).
__init__(*arg,**argv)
517 proc._placeEndPath(name,self)
521 super(Sequence,self).
__init__(*arg,**argv)
523 proc._placeSequence(name,self)
525 if id(self)
not in lookuptable:
528 if self.
_seq is not None:
529 clone = type(self)(self._seq._clonesequence(lookuptable))
532 lookuptable[
id(self)]=clone
533 lookuptable[
id(clone)]=clone
534 return lookuptable[
id(self)]
545 raise RuntimeError(
"The SequencePlaceholder "+self.
_name 546 +
" was never overridden")
547 def resolve(self, processDict,keepIfCannotResolve=False):
548 if not self.
_name in processDict:
550 if keepIfCannotResolve:
552 raise RuntimeError(
"The SequencePlaceholder "+self.
_name+
" cannot be resolved.\n Known keys are:"+
str(processDict.keys()))
553 o = processDict[self.
_name]
554 if not isinstance(o,_Sequenceable):
555 raise RuntimeError(
"The SequencePlaceholder "+self.
_name+
" refers to an object type which is not allowed to be on a sequence: "+
str(type(o)))
556 return o.resolve(processDict)
559 if id(self)
not in lookuptable:
562 clone = type(self)(self.
_name)
563 lookuptable[
id(self)]=clone
564 lookuptable[
id(clone)]=clone
565 return lookuptable[
id(self)]
567 returnValue =SequencePlaceholder.__new__(type(self))
568 returnValue.__init__(self.
_name)
571 return 'cms.SequencePlaceholder("%s")' %self.
_name 573 return 'cms.SequencePlaceholder("%s")'%self.
_name 575 result =
'cms.SequencePlaceholder(\"' 578 result += +self.
_name+
'\")\n' 586 theKeys =
list(argv.keys())
588 if len(theKeys) > 1
or theKeys[0] !=
"tasks":
589 raise RuntimeError(
"The Schedule constructor can only have one keyword argument after its Path and\nEndPath arguments and it must use the keyword 'tasks'")
590 taskList = argv[
"tasks"]
592 if isinstance(taskList,Task):
599 raise RuntimeError(
"The Schedule constructor argument with keyword 'tasks' must have a\nlist (or other iterable object) as its value")
608 if not isinstance(task, Task):
609 raise TypeError(
"The associate function in the class Schedule only works with arguments of type Task")
610 self._tasks.add(task)
613 return isinstance(item,Path)
or isinstance(item,EndPath)
616 aCopy = copy.copy(self)
620 process.setPartialSchedule_(self,label)
639 return visitor.result()
641 pathNames = [
'process.'+p.label_()
for p
in self]
643 s=
', '.
join(pathNames)
646 associationContents = set()
649 associationContents.add(_Labelable.dumpSequencePython(task, options))
651 associationContents.add(task.dumpPythonNoNewline(options))
653 for iString
in sorted(associationContents):
654 taskStrings.append(iString)
655 if taskStrings
and s:
656 return 'cms.Schedule(*[ ' + s +
' ], tasks=[' +
', '.
join(taskStrings) +
'])\n' 658 return 'cms.Schedule(*[ ' + s +
' ])\n' 660 return 'cms.Schedule(tasks=[' +
', '.
join(taskStrings) +
'])\n' 662 return 'cms.Schedule()\n' 673 if isinstance(visitee,Sequence):
674 self.deps.append(visitee)
685 if isinstance(visitee,Task):
686 self.deps.append(visitee)
704 self.l.append(visitee)
719 if isinstance(visitee, Task):
724 self.l.append(visitee)
728 if isinstance(visitee, Task):
742 if isinstance(visitee, Task):
747 self.l.append(visitee)
751 if isinstance(visitee, Task):
768 if self.
_mod is visitee:
784 """ takes a set as input""" 789 if isinstance(visitee, _Labelable):
790 self.l.add(visitee.label_())
792 if visitee._inProcess:
793 self.l.add(visitee.type_())
795 raise RuntimeError(
"Service not attached to process")
802 """ Expands the sequence into leafs and UnaryOperators """ 809 if isinstance(visitee, Task):
814 self.taskLeaves.append(visitee)
816 self.l.append(visitee)
819 if isinstance(visitee, Task):
822 if isinstance(visitee,_UnarySequenceOperator):
829 for el
in self.
l[1:]:
831 return self.
_type(seq, tsk)
833 return self.
_type(tsk)
839 returnValue += sep+
str(m)
845 returnValue += sep+
str(n)
853 """ Adds any '!' or '-' needed. Takes a list """ 865 if isinstance(visitee, Task):
870 if hasattr(visitee,
"_Labelable__label"):
873 error =
"An object in a sequence was not found in the process\n" 874 if hasattr(visitee,
"_filename"):
875 error +=
"From file " + visitee._filename
877 error +=
"Dump follows\n" + repr(visitee)
878 raise RuntimeError(error)
879 if isinstance(visitee,_BooleanLogicExpression):
880 self.l.append(self.
_decoration+visitee.operatorString())
881 if isinstance(visitee,_UnarySequenceOperator):
889 if isinstance(visitee, Task):
892 if isinstance(visitee,_BooleanLogicExpression):
900 """ Adds any '!' or '-' needed. Takes a list """ 914 if isinstance(visitee, Task):
918 self._leavesOnTasks.append(visitee)
921 if hasattr(visitee,
"_Labelable__label"):
924 error =
"An object in a sequence was not found in the process\n" 925 if hasattr(visitee,
"_filename"):
926 error +=
"From file " + visitee._filename
928 error +=
"Dump follows\n" + repr(visitee)
929 raise RuntimeError(error)
930 if isinstance(visitee,_BooleanLogicExpression):
931 self.l.append(self.
_decoration+visitee.operatorString())
932 if isinstance(visitee,_UnarySequenceOperator):
940 if isinstance(visitee, Task):
943 if isinstance(visitee,_BooleanLogicExpression):
951 """Traverses a Sequence and constructs a new sequence which does not contain modules from the specified list""" 955 self.__stack.append(
list())
965 self.
__stack[-1][-1]=[
None,
True]
966 elif isinstance(visitee, Sequence):
969 self.
__stack[-1][-1]=[
None,
True]
970 self.__stack.append(
list())
973 self.__stack.append(
list())
976 if not visitee.isLeaf():
988 nonNulls.append(c[0])
993 if len(nonNulls) == 0:
998 for n
in nonNulls[1:]:
1004 children = [x[0]
for x
in l ]
1005 if not isinstance(visitee,Sequence):
1006 node = visitee.__new__(type(visitee))
1007 node.__init__(*children)
1016 for i,c
in enumerate(p):
1021 if not visitee.isLeaf():
1025 for n
in (x[0]
for x
in self.
__stack[0]):
1039 """Traverses a Sequence and constructs a new sequence by applying the operator to each element of the sequence""" 1093 self.__stack.append(
list())
1100 if not visitee.isLeaf():
1106 raise RuntimeError(
"LogicError Empty stack in MutatingSequenceVisitor.\n" 1107 "This should never happen. Contact a Framework developer.")
1124 if not visitee.isLeaf():
1127 self.__stack.append(
list())
1132 if not visitee.isLeaf():
1138 if visitee.isLeaf():
1158 if c[0]
is not None:
1162 self.
__stack[-2][-1] = [
None,
True,
None]
1164 elif isinstance(visitee, _UnarySequenceOperator):
1165 node = visitee.__new__(type(visitee))
1166 node.__init__(contents[0][0])
1167 self.
__stack[-2][-1] = [node,
True,
None]
1169 elif isinstance(visitee, Task):
1172 if c[0]
is not None:
1173 nonNull.append(c[0])
1174 self.
__stack[-2][-1] = [
Task(*nonNull),
True,
None]
1175 elif isinstance(visitee, Sequence):
1181 if isinstance(c[0], Task):
1185 if c[2]
is not None:
1188 self.
__stack[-2][-1] = [seq,
True, tasks]
1193 if not visitee.isLeaf():
1198 if isinstance(visitedContainer, Task):
1200 for n
in (x[0]
for x
in self.
__stack[0]):
1210 if isinstance(c[0], Task):
1214 if c[2]
is not None:
1223 """Traverses a Sequence and constructs a new sequence which does not contain modules from the specified list""" 1225 class _RemoveFirstOperator(
object):
1229 def __call__(self,test):
1234 super(type(self),self).
__init__(_RemoveFirstOperator(moduleToRemove))
1240 """Traverses a Sequence and constructs a new sequence which does not contain the module specified""" 1242 class _ExcludeOperator(
object):
1243 def __init__(self,modulesToRemove):
1245 def __call__(self,test):
1246 if test
in modulesToRemove:
1249 super(type(self),self).
__init__(_ExcludeOperator(modulesToRemove))
1255 """Traverses a Sequence and constructs a new sequence which replaces a specified module with a different module""" 1257 class _ReplaceOperator(
object):
1261 def __call__(self,test):
1265 super(type(self),self).
__init__(_ReplaceOperator(target,replace))
1270 """Holds EDProducers, EDFilters, ESProducers, ESSources, Services, and Tasks. 1271 A Task can be associated with Sequences, Paths, EndPaths and the Schedule. 1272 An EDProducer or EDFilter will be enabled to run unscheduled if it is on 1273 a task associated with the Schedule or any scheduled Path or EndPath (directly 1274 or indirectly through Sequences) and not be on any scheduled Path or EndPath. 1275 ESSources, ESProducers, and Services will be enabled to run if they are on 1276 a Task associated with the Schedule or a scheduled Path or EndPath. In other 1277 cases, they will be enabled to run if and only if they are not on a Task attached 1286 if not name.startswith(
"_"):
1287 raise AttributeError(
"You cannot set parameters for Task objects.")
1289 self.__dict__[name] = value
1293 if not isinstance(item, _ConfigureComponent)
or not item._isTaskComponent():
1294 if not isinstance(item, TaskPlaceholder):
1295 raise RuntimeError(
"Adding an entry of type '" + type(item).__name__ +
"'to a Task.\n" 1296 "It is illegal to add this type to a Task.")
1297 self._collection.add(item)
1300 proc._placeTask(name,self)
1305 taskContents.add(_Labelable.dumpSequencePython(self, options))
1308 if isinstance(i, Task):
1309 i.fillContents(taskContents, options)
1311 taskContents.add(i.dumpSequencePython(options))
1318 """Returns a string which is the python representation of the object""" 1319 taskContents = set()
1321 if isinstance(i, Task):
1322 i.fillContents(taskContents, options)
1324 taskContents.add(i.dumpSequencePython(options))
1327 for item
in sorted(taskContents):
1332 if len(taskContents) > 255:
1333 return "cms.Task(*[" + s +
"])" 1334 return "cms.Task(" + s +
")" 1369 return "cms."+type(self).__name__+
'('+s+
')\n' 1372 """Returns a set containing the names of all modules being used""" 1380 return visitor.result()
1384 """Returns a copy of the sequence which excludes those module in 'listOfModulesToExclude'""" 1390 for i
in listOfModulesToExclude:
1391 if not i._isTaskComponent():
1392 raise TypeError(
"copyAndExclude can only exclude objects that can be placed on a Task")
1395 return Task(*v.result(self))
1406 """Finds all instances of 'original' and substitutes 'replacement' for them. 1407 Returns 'True' if a replacement occurs.""" 1415 if not original._isTaskComponent()
or (
not replacement
is None and not replacement._isTaskComponent()):
1416 raise TypeError(
"The Task replace function only works with objects that can be placed on a Task\n" + \
1417 " replace was called with original type = " +
str(type(original)) +
"\n" + \
1418 " and replacement type = " +
str(type(replacement)) +
"\n")
1423 self._collection.clear()
1424 self.
add(*v.result(self))
1425 return v.didReplace()
1428 """Remove the first occurrence of a module 1429 Returns 'True' if the module has been removed, False if it was not found""" 1440 if not something._isTaskComponent():
1441 raise TypeError(
"remove only works with objects that can be placed on a Task")
1445 self._collection.clear()
1446 self.
add(*v.result(self))
1447 return v.didRemove()
1449 def resolve(self, processDict,keepIfCannotResolve=False):
1452 if isinstance(i, Task)
or isinstance(i, TaskPlaceholder):
1453 temp.add(i.resolve(processDict,keepIfCannotResolve))
1471 raise RuntimeError(
"The TaskPlaceholder "+self.
_name 1472 +
" was never overridden")
1473 def resolve(self, processDict,keepIfCannotResolve=False):
1474 if not self.
_name in processDict:
1475 if keepIfCannotResolve:
1477 raise RuntimeError(
"The TaskPlaceholder "+self.
_name+
" cannot be resolved.\n Known keys are:"+
str(processDict.keys()))
1478 o = processDict[self.
_name]
1479 if not o._isTaskComponent():
1480 raise RuntimeError(
"The TaskPlaceholder "+self.
_name+
" refers to an object type which is not allowed to be on a task: "+
str(type(o)))
1481 if isinstance(o, Task):
1482 return o.resolve(processDict)
1485 returnValue =TaskPlaceholder.__new__(type(self))
1486 returnValue.__init__(self.
_name)
1489 return 'cms.TaskPlaceholder("%s")'%self.
_name 1491 result =
'cms.TaskPlaceholder(\"' 1493 result +=
'process.' 1494 result += +self.
_name+
'\")\n' 1496 if __name__==
"__main__":
1510 """Nothing to do """ 1516 self.assertEqual(p.dumpPython(
None),
"cms.Path(process.a&process.b)\n")
1519 p.visit(namesVisitor)
1520 self.assertEqual(l,[
'&',
'a',
'b',
'@'])
1522 self.assertEqual(p2.dumpPython(
None),
"cms.Path(process.a|process.b)\n")
1524 p2.visit(namesVisitor)
1525 self.assertEqual(l,[
'|',
'a',
'b',
'@'])
1528 p3 =
Path(a & b & c & d)
1529 self.assertEqual(p3.dumpPython(
None),
"cms.Path(process.a&process.b&process.c&process.d)\n")
1531 p3.visit(namesVisitor)
1532 self.assertEqual(l,[
'&',
'a',
'b',
'c',
'd',
'@'])
1533 p3 =
Path(((a & b) & c) & d)
1534 self.assertEqual(p3.dumpPython(
None),
"cms.Path(process.a&process.b&process.c&process.d)\n")
1535 p3 =
Path(a & (b & (c & d)))
1536 self.assertEqual(p3.dumpPython(
None),
"cms.Path(process.a&process.b&process.c&process.d)\n")
1537 p3 =
Path((a & b) & (c & d))
1538 self.assertEqual(p3.dumpPython(
None),
"cms.Path(process.a&process.b&process.c&process.d)\n")
1539 p3 =
Path(a & (b & c) & d)
1540 self.assertEqual(p3.dumpPython(
None),
"cms.Path(process.a&process.b&process.c&process.d)\n")
1541 p4 =
Path(a | b | c | d)
1542 self.assertEqual(p4.dumpPython(
None),
"cms.Path(process.a|process.b|process.c|process.d)\n")
1543 p5 =
Path(a | b & c & d )
1544 self.assertEqual(p5.dumpPython(
None),
"cms.Path(process.a|(process.b&process.c&process.d))\n")
1546 p5.visit(namesVisitor)
1547 self.assertEqual(l,[
'|',
'a',
'&',
'b',
'c',
'd',
'@',
'@'])
1548 p5 =
Path(a & b | c & d )
1549 self.assertEqual(p5.dumpPython(
None),
"cms.Path((process.a&process.b)|(process.c&process.d))\n")
1551 p5.visit(namesVisitor)
1552 self.assertEqual(l,[
'|',
'&',
'a',
'b',
'@',
'&',
'c',
'd',
'@',
'@'])
1553 p5 =
Path(a & (b | c) & d )
1554 self.assertEqual(p5.dumpPython(
None),
"cms.Path(process.a&(process.b|process.c)&process.d)\n")
1556 p5.visit(namesVisitor)
1557 self.assertEqual(l,[
'&',
'a',
'|',
'b',
'c',
'@',
'd',
'@'])
1558 p5 =
Path(a & b & c | d )
1559 self.assertEqual(p5.dumpPython(
None),
"cms.Path((process.a&process.b&process.c)|process.d)\n")
1561 p5.visit(namesVisitor)
1562 self.assertEqual(l,[
'|',
'&',
'a',
'b',
'c',
'@',
'd',
'@'])
1564 self.assertEqual(p6.dumpPython(
None),
"cms.Path(process.a&(~process.b))\n")
1566 p6.visit(namesVisitor)
1567 self.assertEqual(l,[
'&',
'a',
'!b',
'@'])
1569 self.assertEqual(p6.dumpPython(
None),
"cms.Path(process.a&(cms.ignore(process.b)))\n")
1571 p6.visit(namesVisitor)
1572 self.assertEqual(l,[
'&',
'a',
'-b',
'@'])
1574 self.assertEqual(p6.dumpPython(
None),
"cms.Path(~(process.a&process.b))\n")
1576 p6.visit(namesVisitor)
1577 self.assertEqual(l,[
'!&',
'a',
'b',
'@'])
1584 self.assertEqual(p.dumpPython(
None),
"cms.Path(process.a+process.b)\n")
1587 self.assertEqual(p2.dumpPython(
None),
"cms.Path(process.b+process.a)\n")
1591 self.assertEqual(p3.dumpPython(
None),
"cms.Path(process.c+process.a+process.b)\n")
1594 self.assertEqual(p4.dumpPython(
None),
"cms.Path(process.c+process.a+process.b)\n")
1597 self.assertEqual(p5.dumpPython(
None),
"cms.Path(process.a+cms.ignore(process.b))\n")
1600 self.assertEqual(p6.dumpPython(
None),
"cms.Path(process.c+process.a+process.b)\n")
1602 self.assertEqual(p7.dumpPython(
None),
"cms.Path(process.a+~process.b)\n")
1604 self.assertEqual(p8.dumpPython(
None),
"cms.Path(process.a+process.b+process.c)\n")
1608 p9 =
Path((a+b)*c, t1)
1609 self.assertEqual(p9.dumpPython(
None),
"cms.Path(process.a+process.b+process.c, cms.Task(process.a))\n")
1610 p10 =
Path((a+b)*c, t2, t1)
1611 self.assertEqual(p10.dumpPython(
None),
"cms.Path(process.a+process.b+process.c, cms.Task(process.a), cms.Task(process.b, process.c))\n")
1612 p11 =
Path(t1, t2, t3)
1613 self.assertEqual(p11.dumpPython(
None),
"cms.Path(cms.Task(), cms.Task(process.a), cms.Task(process.b, process.c))\n")
1619 p12 =
Path(a+b+s+c,t1)
1620 self.assertEqual(p12.dumpPython(
None),
"cms.Path(process.a+process.b+cms.Sequence(process.e, cms.Task(process.d, process.f))+process.c, cms.Task(process.a))\n")
1623 p.visit(namesVisitor)
1624 self.assertEqual(l, [
'a',
'b'])
1626 p5.visit(namesVisitor)
1627 self.assertEqual(l, [
'a',
'-b'])
1629 p7.visit(namesVisitor)
1630 self.assertEqual(l, [
'a',
'!b'])
1632 p10.visit(namesVisitor)
1633 self.assertEqual(l, [
'a',
'b',
'c'])
1635 p12.visit(namesVisitor)
1636 self.assertEqual(l, [
'a',
'b',
'e',
'c'])
1639 p8.visit(moduleVisitor)
1640 names = [m.label_()
for m
in l]
1641 self.assertEqual(names, [
'a',
'b',
'c'])
1647 self.assertEqual(p.dumpConfig(
None),
"{a&b}\n")
1650 self.assertEqual(p2.dumpConfig(
None),
"{b&a}\n")
1654 self.assertEqual(p3.dumpConfig(
None),
"{c&a&b}\n")
1657 self.assertEqual(p4.dumpConfig(
None),
"{c&a&b}\n")
1660 self.assertEqual(p5.dumpConfig(
None),
"{a&-b}\n")
1663 self.assertEqual(p6.dumpConfig(
None),
"{c&a&b}\n")
1665 self.assertEqual(p7.dumpConfig(
None),
"{a&!b}\n")
1667 self.assertEqual(p8.dumpConfig(
None),
"{a&b&c}\n")
1669 class TestVisitor(
object):
1670 def __init__(self, enters, leaves):
1673 def enter(self,visitee):
1675 if self.
_enters[0] != visitee:
1676 raise RuntimeError(
"wrong node ("+
str(visitee)+
") on 'enter'")
1679 def leave(self,visitee):
1680 if self.
_leaves[0] != visitee:
1681 raise RuntimeError(
"wrong node ("+
str(visitee)+
") on 'leave'\n expected ("+
str(self.
_leaves[0])+
")")
1688 t = TestVisitor(enters=[a,b],
1694 t = TestVisitor(enters=[a,b],
1708 p=
Path(multSC, t1, t2)
1713 expected = [a,b,f,g,e,d,e,d,c,d,e,d]
1718 expected = [f,g,e,d,e,d,d,e,d]
1719 self.assertEqual(expected,l)
1725 self.assertEqual(expected,l)
1728 t=TestVisitor(enters=[s,a,b,t3,f,g,t2,e,t1,d,t2,e,t1,d,c,t1,d,t2,e,t1,d],
1729 leaves=[a,b,f,g,e,d,t1,t2,t3,e,d,t1,t2,s,c,d,t1,e,d,t1,t2])
1734 t=TestVisitor(enters=[notA,a],leaves=[a,notA])
1751 p.visit(namesVisitor)
1752 self.assertEqual(l, [
'm1'])
1755 p.visit(namesVisitor)
1756 self.assertEqual(l, [
'm1',
'm2'])
1764 p.visit(namesVisitor)
1765 self.assertEqual(l, [
'm1',
'm2'])
1777 s1.visit(namesVisitor)
1778 self.assertEqual(l,[
'm1',
'!m2',
'm1',
'm2',
'-m2'])
1783 s3.visit(namesVisitor)
1784 self.assertEqual(l, [
'm2',
'm1',
'm2'])
1787 s3.visit(namesVisitor)
1788 self.assertEqual(l, [
'!m1',
'm1',
'!m1'])
1791 s3.replace(
ignore(m1), m2)
1793 s3.visit(namesVisitor)
1794 self.assertEqual(l, [
'm2',
'm1',
'm2'])
1795 s3.replace(m2,
ignore(m1))
1797 s3.visit(namesVisitor)
1798 self.assertEqual(l, [
'-m1',
'm1',
'-m1'])
1803 self.assertEqual(s4.dumpPython(
None),
"cms.Sequence(process.m2)\n")
1807 s1.visit(namesVisitor)
1808 self.assertEqual(l,[
'm1',
'!m3',
'm1',
'm3',
'-m3'])
1812 s3.visit(namesVisitor)
1813 self.assertEqual(l,[
'!m1',
'm1',
'm2'])
1816 s3.visit(namesVisitor)
1817 self.assertEqual(l,[
'!m1',
'm1'])
1824 s3.visit(namesVisitor)
1825 self.assertEqual(l,[
'm1',
'm2',
'm5',
'm4'])
1841 s3.visit(namesVisitor)
1842 self.assertEqual(l,[
'm1',
'm2',
'm5',
'm4'])
1845 self.assertTrue(s3.dumpPython(
None) ==
"cms.Sequence(cms.Sequence(process.m1+process.m2, cms.Task(process.m6))+process.m5+process.m4, cms.Task(process.m1, process.m9), cms.Task(process.m7))\n")
1848 self.assertTrue(s3.dumpPython(
None) ==
"cms.Sequence(process.m7+process.m2+process.m5+process.m4, cms.Task(process.m6), cms.Task(process.m7), cms.Task(process.m7, process.m9))\n")
1849 result = s3.replace(t7, t89)
1850 self.assertTrue(s3.dumpPython(
None) ==
"cms.Sequence(process.m7+process.m2+process.m5+process.m4, cms.Task(process.m6), cms.Task(process.m7, process.m9), cms.Task(process.m8, process.m9))\n")
1851 self.assertTrue(result)
1852 result = s3.replace(t7, t89)
1853 self.assertFalse(result)
1857 self.assertTrue(t1.dumpPython(
None) ==
"cms.Task()\n")
1861 self.assertTrue(t1.dumpPython(
None) ==
"cms.Task(process.m2)\n")
1863 t1 =
Task(m1,m2, m2)
1865 self.assertTrue(t1.dumpPython(
None) ==
"cms.Task(process.m1, process.m3)\n")
1870 self.assertTrue(t2.dumpPython(
None) ==
"cms.Task(process.m2, process.m3, process.m4)\n")
1875 self.assertTrue(t2.dumpPython(
None) ==
"cms.Task(process.m2, process.m3, process.m4)\n")
1880 self.assertTrue(t2.dumpPython(
None) ==
"cms.Task(process.m1, process.m3, process.m4)\n")
1886 self.assertTrue(t2.dumpPython(
None) ==
"cms.Task(process.m1, process.m3, process.m5)\n")
1894 self.assertEqual(s.index(m1),0)
1895 self.assertEqual(s.index(m2),1)
1896 self.assertEqual(s.index(m3),2)
1904 self.assertEqual(s.index(m1),0)
1905 self.assertEqual(s.index(m2),1)
1906 self.assertEqual(s.index(m3),2)
1910 self.assertEqual(s.index(m1),0)
1914 self.assertEqual(s.index(m1),0)
1928 p2 = p.expandAndClone()
1931 p2.visit(namesVisitor)
1932 self.assertEqual(l, [
'm1',
'!m2',
'm1',
'm2',
'-m2',
'!m1',
'm1',
'm2'])
1939 p2 = p.expandAndClone()
1941 p2.visit(namesVisitor)
1942 self.assertEqual(l, [
'm1',
'!m2',
'm1',
'm2',
'-m2',
'!m1',
'm1',
'm2'])
1943 self.assertTrue(p2.dumpPython(
None) ==
"cms.Path(process.m1+~process.m2+process.m1+process.m2+cms.ignore(process.m2)+~process.m1+process.m1+process.m2, cms.Task(process.m6))\n")
1950 p2 = p.expandAndClone()
1952 p2.visit(namesVisitor)
1953 self.assertEqual(l, [
'm1',
'!m2',
'm1',
'm2',
'-m2',
'!m1',
'm1',
'm2'])
1954 self.assertTrue(p2.dumpPython(
None) ==
"cms.Path(process.m1+~process.m2+process.m1+process.m2+cms.ignore(process.m2)+~process.m1+process.m1+process.m2, cms.Task(process.m6, process.m7, process.m8, process.m9))\n")
1958 s2 = s1.expandAndClone()
1960 s2.visit(namesVisitor)
1961 self.assertEqual(l, [])
1962 self.assertTrue(s2.dumpPython(
None) ==
"cms.Sequence(cms.Task(process.m1, process.m2, process.m3))\n")
1966 t3 = t2.expandAndClone()
1967 self.assertTrue(t3.dumpPython(
None) ==
"cms.Task(process.m1, process.m2, process.m3)\n")
1969 t5 = t4.expandAndClone()
1970 self.assertTrue(t5.dumpPython(
None) ==
"cms.Task()\n")
1984 p.visit(namesVisitor)
1985 self.assertEqual(l, [
'm1',
'!m2',
'm3',
'-m4'])
1989 l[:]=[]; s1.visit(namesVisitor); self.assertEqual(l,[
'm1'])
1990 self.assertEqual(s4.dumpPython(
None),
"cms.Sequence(process.m1)\n")
1993 l[:]=[]; s1.visit(namesVisitor); self.assertEqual(l,[
'm1'])
1994 self.assertEqual(s4.dumpPython(
None),
"cms.Sequence(process.m1)\n")
2006 d = {
'm1':m1 ,
'm2':m2,
'm3':m3,
's1':s1,
's2':s2}
2007 l[:] = []; s1.visit(namesVisitor); self.assertEqual(l,[
'm1',
'm2',
'!m3'])
2008 l[:] = []; s2.visit(namesVisitor); self.assertEqual(l,[
'm1',
'm1',
'm2',
'!m3'])
2010 l[:] = []; s1.visit(namesVisitor); self.assertEqual(l,[
'm1',
'!m3'])
2011 l[:] = []; s2.visit(namesVisitor); self.assertEqual(l,[
'm1',
'm1',
'!m3'])
2013 l[:] = []; s1.visit(namesVisitor); self.assertEqual(l,[
'm1',
'!m3'])
2014 l[:] = []; s2.visit(namesVisitor); self.assertEqual(l,[
'm1',
'm1'])
2016 l[:] = []; s1.visit(namesVisitor); self.assertEqual(l,[
'm1',
'm2',
'm1',
'm2'])
2018 l[:] = []; s1.visit(namesVisitor); self.assertEqual(l,[
'm1',
'm1',
'm2'])
2021 l[:] = []; s2.visit(namesVisitor); self.assertEqual(l,[
'm2',
'-m3',
'm1',
'm3',
'm3'])
2023 l[:] = []; s2.visit(namesVisitor); self.assertEqual(l,[
'm2',
'-m3',
'm3'])
2025 l[:] = []; s2.visit(namesVisitor); self.assertEqual(l,[
'm2',
'm3'])
2027 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m2+process.m3)\n")
2029 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m3)\n")
2031 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m2+process.m3)\n")
2033 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m3)\n")
2035 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m2+process.m3)\n")
2037 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m3)\n")
2039 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m2+process.m3)\n")
2041 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m3)\n")
2044 l[:]=[]; s1.visit(namesVisitor); self.assertEqual(l,[])
2045 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence()\n")
2048 l[:]=[]; s3.visit(namesVisitor); self.assertEqual(l,[])
2049 self.assertEqual(s3.dumpPython(
None),
"cms.Sequence()\n")
2053 l[:]=[]; s4.visit(namesVisitor); self.assertEqual(l,[])
2054 self.assertEqual(s4.dumpPython(
None),
"cms.Sequence()\n")
2057 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m2, cms.Task(process.m3))\n")
2060 self.assertEqual(s1.dumpPython(
None),
"cms.Sequence(process.m1+process.m2, cms.Task(process.m3), cms.Task(process.m4))\n")
2067 self.assertTrue(t3.dumpPython(
None) ==
"cms.Task(process.m1, process.t2)\n")
2069 self.assertTrue(t3.dumpPython(
None) ==
"cms.Task(process.m1, process.m2)\n")
2071 self.assertTrue(t3.dumpPython(
None) ==
"cms.Task(process.m2)\n")
2073 self.assertTrue(t3.dumpPython(
None) ==
"cms.Task()\n")
2081 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c)\n")
2083 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2084 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2085 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.d)\n")
2086 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c)\n")
2088 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2089 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2090 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.d)\n")
2091 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c)\n")
2093 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2094 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2095 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.d)\n")
2096 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c)\n")
2099 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.c+process.b+process.d)\n")
2100 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.c+process.a+process.d)\n")
2101 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence((process.a+process.b)+process.d)\n")
2102 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.c+(process.a+process.b))\n")
2103 self.assertEqual(s.copyAndExclude([a,b]).
dumpPython(
None),
"cms.Sequence(process.c+process.d)\n")
2104 s3 = s.copyAndExclude([c])
2106 self.assertEqual(s3.dumpPython(
None),
"cms.Sequence((process.b)+process.d)\n")
2107 s4 = s.copyAndExclude([a,b])
2110 s.visit(sequenceVisitor)
2111 self.assertEqual(len(seqs),1)
2113 s4.visit(sequenceVisitor)
2114 self.assertEqual(len(seqs),0)
2115 self.assertEqual(s4.dumpPython(
None),
"cms.Sequence(process.c+process.d)\n")
2121 s.visit(sequenceVisitor)
2122 self.assertTrue(seqs == [s2,s3])
2125 self.assertEqual(s.copyAndExclude([holder]).
dumpPython(
None),
"cms.Sequence(process.c+process.a+process.b+process.d)\n")
2128 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2129 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2130 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.d)\n")
2131 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence((process.a+process.b+process.c))\n")
2132 self.assertEqual(s.copyAndExclude([s2]).
dumpPython(
None),
"cms.Sequence(process.d)\n")
2135 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2136 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2137 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.d)\n")
2138 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence((process.a+process.b+process.c))\n")
2139 self.assertEqual(s.copyAndExclude([a,b,c]).
dumpPython(
None),
"cms.Sequence(process.d)\n")
2141 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2142 self.assertEqual(s.copyAndExclude([
ignore(a)]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2143 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(cms.ignore(process.a)+process.c+process.d)\n")
2144 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(cms.ignore(process.a)+process.b+process.d)\n")
2145 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(cms.ignore(process.a)+process.b+process.c)\n")
2147 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(cms.ignore(process.b)+process.c+process.d)\n")
2148 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2149 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+cms.ignore(process.b)+process.d)\n")
2150 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+cms.ignore(process.b)+process.c)\n")
2152 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+cms.ignore(process.d))\n")
2153 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+cms.ignore(process.d))\n")
2154 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+cms.ignore(process.d))\n")
2155 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c)\n")
2157 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+process.d)\n")
2158 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(~process.a+process.c+process.d)\n")
2159 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(~process.a+process.b+process.d)\n")
2160 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(~process.a+process.b+process.c)\n")
2162 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(~process.b+process.c+process.d)\n")
2163 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2164 self.assertEqual(s.copyAndExclude([~b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+process.d)\n")
2165 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+~process.b+process.d)\n")
2166 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+~process.b+process.c)\n")
2168 self.assertEqual(s.copyAndExclude([a]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+~process.d)\n")
2169 self.assertEqual(s.copyAndExclude([b]).
dumpPython(
None),
"cms.Sequence(process.a+process.c+~process.d)\n")
2170 self.assertEqual(s.copyAndExclude([c]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+~process.d)\n")
2171 self.assertEqual(s.copyAndExclude([d]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c)\n")
2172 self.assertEqual(s.copyAndExclude([a,b,c,d]).
dumpPython(
None),
"cms.Sequence()\n")
2180 self.assertEqual(s.copyAndExclude([a,h]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+~process.d, cms.Task(process.e, process.f, process.g))\n")
2181 self.assertEqual(s.copyAndExclude([a,h]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+~process.d, cms.Task(process.e, process.f, process.g))\n")
2182 self.assertEqual(s.copyAndExclude([a,e,h]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+~process.d, cms.Task(process.f, process.g))\n")
2183 self.assertEqual(s.copyAndExclude([a,e,f,g,h]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+~process.d)\n")
2184 self.assertEqual(s.copyAndExclude([a,b,c,d]).
dumpPython(
None),
"cms.Sequence(cms.Task(process.e, process.f, process.g, process.h))\n")
2185 self.assertEqual(s.copyAndExclude([t1]).
dumpPython(
None),
"cms.Sequence(process.a+process.b+process.c+~process.d, cms.Task(process.e, process.f, process.g))\n")
2188 s.visit(taskVisitor)
2189 self.assertEqual(len(taskList),3)
2190 s2 = s.copyAndExclude([g,h])
2192 s2.visit(taskVisitor)
2193 self.assertEqual(len(taskList),1)
2196 t2.visit(taskVisitor)
2197 self.assertEqual(taskList[0],t1)
2199 self.assertEqual(s3.copyAndExclude([a,h]).
dumpPython(
None),
"cms.Sequence(process.b+process.c+~process.d, cms.Task(process.e, process.f, process.g))\n")
2201 self.assertEqual(s4.copyAndExclude([a,b,c,d,e,f,g,h]).
dumpPython(
None),
"cms.Sequence()\n")
2205 t2 =
Task(g,t1,h,t11)
2206 t3 = t2.copyAndExclude([e,h])
2207 self.assertTrue(t3.dumpPython(
None) ==
"cms.Task(process.f, process.g, process.t11)\n")
2208 t4 = t2.copyAndExclude([e,f,g,h,a])
2209 self.assertTrue(t4.dumpPython(
None) ==
"cms.Task()\n")
2216 self.assertRaises(AttributeError,testRaise)
2219 self.assertRaises(TypeError,testRaise2)
2228 self.assertEqual(p1.dumpPython(
None),
"cms.Path(process.a+process.b+process.c)\n")
2229 self.assertEqual(p2.dumpPython(
None),
"cms.Path(process.a+process.e+process.c)\n")
2233 self.assertEqual(p1.dumpPython(
None),
"cms.Path(process.a+process.b+process.c+process.e)\n")
2234 self.assertEqual(p2.dumpPython(
None),
"cms.Path(process.a+process.b+process.c)\n")
2237 self.assertTrue(t1.dumpPython(
None) == t2.dumpPython(
None))
2238 t1Contents =
list(t1._collection)
2239 t2Contents =
list(t2._collection)
2240 self.assertTrue(
id(t1Contents[0]) ==
id(t2Contents[0]))
2241 self.assertTrue(
id(t1Contents[1]) ==
id(t2Contents[1]))
2242 self.assertTrue(
id(t1._collection) !=
id(t2._collection))
2244 from FWCore.ParameterSet.Types
import vstring
2248 def addVString(self,isTracked,label,value):
2249 self.
_dict[label]=value
2259 p.insertInto(ps,
"p",decoratedList)
2260 self.assertEqual(ps._dict, {
"p":vstring(
"a",
"b",
"c",
"d")})
2263 decoratedList[:] = []
2266 p.insertInto(ps,
"p",decoratedList)
2267 self.assertEqual(ps._dict, {
"p":vstring(
"a",
"b",
"c",
"d")})
def __init__(self, arg, argv)
def _postProcessFixup(self, lookuptable)
def _visitSubNodes(self, visitor)
def __init__(self, operand)
def dumpSequencePython(self, options=PrintOptions())
def replace(self, original, replacement)
def __init__(self, arg, argv)
def associate(self, tasks)
def _isTaskComponent(self)
def _isTaskComponent(self)
def dumpPython(self, options=PrintOptions())
def dumpSequencePython(self, options=PrintOptions())
def __init__(self, arg, argv)
def fillContents(self, taskContents, options=PrintOptions())
def dumpSequencePython(self, options=PrintOptions())
def _visitSubNodes(self, visitor)
def associate(self, tasks)
def _findDependencies(self, knownDeps, presentDeps)
def __init__(self, modulesToRemove)
def insertInto(self, parameterSet, myname)
def insertInto(self, parameterSet, myname, decoratedList)
def dumpSequenceConfig(self)
def dumpSequencePython(self, options=PrintOptions())
def _replace(self, original, replacement)
def _remove(self, original)
def visitNode(self, visitor)
def _clonesequence(self, lookuptable)
def dumpPython(self, options=PrintOptions())
def dumpSequencePython(self, options=PrintOptions())
def dumpSequencePython(self, options=PrintOptions())
def dumpPython(self, options=PrintOptions())
def __init__(self, moduleToRemove)
def insertInto(self, parameterSet, myname)
def resolve(self, processDict, keepIfCannotResolve=False)
def __init__(self, operand)
def __init__(self, modulesToRemove)
def nameInProcessDesc_(self, myname)
def _isTaskComponent(self)
def setLabel(self, label)
def _place(self, label, process)
def dumpSequenceConfig(self)
def _visitSubNodes(self, visitor)
def format_typename(object)
def resolve(self, processDict, keepIfCannotResolve=False)
def remove(self, something)
def _place(self, name, proc)
def format_outerframe(number)
def _visitSubNodes(self, visitor)
def dumpSequenceConfig(self)
def _clonesequence(self, lookuptable)
def _placeImpl(self, name, proc)
def testExpandAndClone(self)
def resolve(self, processDict, keepIfCannotResolve=False)
def dumpPython(self, options=PrintOptions())
def resolve(self, processDict, keepIfCannotResolve=False)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)
def __init__(self, arg, argv)
def dumpSequenceConfig(self)
def dumpSequenceConfig(self)
def dumpSequencePython(self, options=PrintOptions())
def __init__(self, operator)
def _placeImpl(self, name, proc)
def replace(self, original, replacement)
def dumpConfig(self, options)
def __init__(self, operand)
def __init__(self, arg, argv)
static std::string join(char **cmd)
def _appendToCollection(self, collection)
def __init__(self, op, left, right)
def copyAndExclude(self, listOfModulesToExclude)
def _appendToCollection(self, collection)
def resolve(self, processDict, keepIfCannotResolve=False)
def resolve(self, processDict, keepIfCannotResolve=False)
def dumpPython(self, options=PrintOptions())
def dumpPython(process, name)
def insert(self, index, item)
def result(self, visitedContainer)
def dumpPythonNoNewline(self, options=PrintOptions())
def _clonesequence(self, lookuptable)
def _placeImpl(self, name, proc)
def __setattr__(self, name, value)
def __setattr__(self, name, value)
def testCopyAndExclude(self)
def dumpPython(self, options=PrintOptions())
def __init__(self, items)
def _placeImpl(self, name, proc)
def __init__(self, target, replace)
def copyAndExclude(self, listOfModulesToExclude)
def _checkIfSequenceable(caller, v)
def visitNode(self, visitor)
def resolve(self, processDict, keepIfCannotResolve=False)
def insert(self, index, item)
def remove(self, something)
def __init__(self, sequenceName, depSet)
def _checkIfBooleanLogicSequenceable(caller, v)
def _clonesequence(self, lookuptable)
def testSequenceTypeChecks(self)
def __init__(self, seqList)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
def _place(self, name, proc)
def dumpPythonNoNewline(self, options=PrintOptions())