CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
SequenceTypes._ModuleSequenceType Class Reference
Inheritance diagram for SequenceTypes._ModuleSequenceType:
Mixins._ConfigureComponent Mixins._Labelable SequenceTypes.EndPath SequenceTypes.Path SequenceTypes.Sequence

Public Member Functions

def __iadd__ (self, rhs)
 
def __imul__ (self, rhs)
 
def __init__ (self, arg, argv)
 
def __repr__ (self)
 
def __setattr__ (self, name, value)
 
def __str__ (self)
 
def associate (self, tasks)
 
def contains (self, mod)
 
def copy (self)
 
def copyAndExclude (self, listOfModulesToExclude)
 
def dumpConfig (self, options)
 
def dumpPython (self, options=PrintOptions())
 
def dumpPythonNoNewline (self, options=PrintOptions())
 
def dumpSequenceConfig (self)
 
def dumpSequencePython (self, options=PrintOptions())
 
def expandAndClone (self)
 
def index (self, item)
 
def insert (self, index, item)
 
def insertInto (self, parameterSet, myname, decoratedList)
 
def isFrozen (self)
 
def moduleNames (self)
 
def nameInProcessDesc_ (self, myname)
 
def remove (self, something)
 
def replace (self, original, replacement)
 
def resolve (self, processDict, keepIfCannotResolve=False)
 
def setIsFrozen (self)
 
def visit (self, visitor)
 
- Public Member Functions inherited from Mixins._Labelable
def __str__ (self)
 
def dumpSequenceConfig (self)
 
def dumpSequencePython (self, options=PrintOptions())
 
def hasLabel_ (self)
 
def label (self)
 
def label_ (self)
 
def setLabel (self, label)
 

Private Member Functions

def _place (self, name, proc)
 
def _postProcessFixup (self, lookuptable)
 

Private Attributes

 _isFrozen
 
 _isModified
 
 _seq
 
 _tasks
 

Detailed Description

Base class for classes which define a sequence of modules

Definition at line 190 of file SequenceTypes.py.

Constructor & Destructor Documentation

def SequenceTypes._ModuleSequenceType.__init__ (   self,
  arg,
  argv 
)

Definition at line 192 of file SequenceTypes.py.

192  def __init__(self,*arg, **argv):
193  self.__dict__["_isFrozen"] = False
194  self._seq = None
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)):
196  typename = format_typename(self)
197  msg = format_outerframe(2)
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)):
200  try:
201  msg += " %i) %s \n" %(i, item._errorstr())
202  except:
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 '+'."
206  raise TypeError(msg)
207  tasks = arg
208  if len(arg) > 0 and isinstance(arg[0], _Sequenceable):
209  self._seq = _SequenceCollection()
210  arg[0]._appendToCollection(self._seq._collection)
211  tasks = arg[1:]
212  self._isModified = False
213 
215 
216  if len(tasks) > 0:
217  self.associate(*tasks)
def format_typename(object)
def format_outerframe(number)
OutputIterator zip(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp)

Member Function Documentation

def SequenceTypes._ModuleSequenceType.__iadd__ (   self,
  rhs 
)

Definition at line 235 of file SequenceTypes.py.

References SequenceTypes._checkIfSequenceable(), and SequenceTypes._ModuleSequenceType._seq.

235  def __iadd__(self,rhs):
236  _checkIfSequenceable(self, rhs)
237  if self._seq is None:
238  self.__dict__["_seq"] = _SequenceCollection()
239  self._seq += rhs
240  return self
def _checkIfSequenceable(caller, v)
def SequenceTypes._ModuleSequenceType.__imul__ (   self,
  rhs 
)

Definition at line 229 of file SequenceTypes.py.

References SequenceTypes._checkIfSequenceable(), and SequenceTypes._ModuleSequenceType._seq.

229  def __imul__(self,rhs):
230  _checkIfSequenceable(self, rhs)
231  if self._seq is None:
232  self.__dict__["_seq"] = _SequenceCollection()
233  self._seq+=rhs
234  return self
def _checkIfSequenceable(caller, v)
def SequenceTypes._ModuleSequenceType.__repr__ (   self)

Definition at line 294 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and str.

294  def __repr__(self):
295  s = ''
296  if self._seq is not None:
297  s = str(self._seq)
298  return "cms."+type(self).__name__+'('+s+')\n'
#define str(s)
def SequenceTypes._ModuleSequenceType.__setattr__ (   self,
  name,
  value 
)

Definition at line 404 of file SequenceTypes.py.

Referenced by GenObject.GenObject.setValue().

404  def __setattr__(self,name,value):
405  if not name.startswith("_"):
406  raise AttributeError("You cannot set parameters for sequence like objects.")
407  else:
408  self.__dict__[name] = value
def __setattr__(self, name, value)
def SequenceTypes._ModuleSequenceType.__str__ (   self)

Definition at line 241 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType.visit().

241  def __str__(self):
242  v = ExpandVisitor(type(self))
243  self.visit(v)
244  return v.resultString()
def SequenceTypes._ModuleSequenceType._place (   self,
  name,
  proc 
)
private
def SequenceTypes._ModuleSequenceType._postProcessFixup (   self,
  lookuptable 
)
private

Definition at line 339 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq.

339  def _postProcessFixup(self,lookuptable):
340  self._seq = self._seq._clonesequence(lookuptable)
341  return self
def _postProcessFixup(self, lookuptable)
def SequenceTypes._ModuleSequenceType.associate (   self,
  tasks 
)

Definition at line 218 of file SequenceTypes.py.

Referenced by SequenceTypes._ModuleSequenceType.remove(), and SequenceTypes._ModuleSequenceType.replace().

218  def associate(self,*tasks):
219  for task in tasks:
220  if not isinstance(task, Task):
221  raise TypeError("associate only works with objects of type Task")
222  self._tasks.add(task)
def SequenceTypes._ModuleSequenceType.contains (   self,
  mod 
)

Definition at line 305 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType.visit().

Referenced by LumiList.LumiList.__contains__().

305  def contains(self, mod):
306  visitor = ContainsModuleVisitor(mod)
307  self.visit(visitor)
308  return visitor.result()
def SequenceTypes._ModuleSequenceType.copy (   self)

Definition at line 309 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and SequenceTypes._ModuleSequenceType._tasks.

309  def copy(self):
310  returnValue =_ModuleSequenceType.__new__(type(self))
311  if self._seq is not None:
312  returnValue.__init__(self._seq)
313  else:
314  returnValue.__init__()
315  returnValue._tasks = OrderedSet(self._tasks)
316  return returnValue
def SequenceTypes._ModuleSequenceType.copyAndExclude (   self,
  listOfModulesToExclude 
)
Returns a copy of the sequence which excludes those module in 'listOfModulesToExclude'

Definition at line 317 of file SequenceTypes.py.

References frozendict.frozendict.__new__(), genericValidation.ValidationMetaClass.__new__(), DictTypes.SortedAndFixedKeysDict.__new__(), DictTypes.FixedKeysDict.__new__(), BeautifulSoup.NavigableString.__new__(), Config.FilteredStream.__new__(), and SequenceTypes._ModuleSequenceType.visit().

317  def copyAndExclude(self,listOfModulesToExclude):
318  """Returns a copy of the sequence which excludes those module in 'listOfModulesToExclude'"""
319  # You can exclude instances of these types EDProducer, EDFilter, OutputModule,
320  # EDAnalyzer, ESSource, ESProducer, Service, Sequence, SequencePlaceholder, Task,
321  # _SequenceNegation, and _SequenceIgnore.
322  # Mostly this is very intuitive, but there are some complications in cases
323  # where objects that contain other objects are involved. See the comments
324  # for the _MutatingSequenceVisitor.
325  v = _CopyAndExcludeSequenceVisitor(listOfModulesToExclude)
326  self.visit(v)
327  result = self.__new__(type(self))
328  result.__init__(v.result(self)[0], *v.result(self)[1])
329  return result
def copyAndExclude(self, listOfModulesToExclude)
def SequenceTypes._ModuleSequenceType.dumpConfig (   self,
  options 
)

Definition at line 245 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq.

245  def dumpConfig(self, options):
246  s = ''
247  if self._seq is not None:
248  s = self._seq.dumpSequenceConfig()
249  return '{'+s+'}\n'
def SequenceTypes._ModuleSequenceType.dumpPython (   self,
  options = PrintOptions() 
)
Returns a string which is the python representation of the object

Definition at line 250 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType.dumpPythonNoNewline().

250  def dumpPython(self, options=PrintOptions()):
251  """Returns a string which is the python representation of the object"""
252  s = self.dumpPythonNoNewline(options)
253  return s + "\n"
def dumpPythonNoNewline(self, options=PrintOptions())
def dumpPython(self, options=PrintOptions())
def SequenceTypes._ModuleSequenceType.dumpPythonNoNewline (   self,
  options = PrintOptions() 
)

Definition at line 254 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and SequenceTypes._ModuleSequenceType._tasks.

Referenced by SequenceTypes._ModuleSequenceType.dumpPython(), SequenceTypes.Task.dumpPython(), and SequenceTypes._ModuleSequenceType.dumpSequencePython().

254  def dumpPythonNoNewline(self, options=PrintOptions()):
255  s=''
256  if self._seq is not None:
257  s =self._seq.dumpSequencePython(options)
258  associationContents = set()
259  for task in self._tasks:
260  if task.hasLabel_():
261  associationContents.add(_Labelable.dumpSequencePython(task, options))
262  else:
263  associationContents.add(task.dumpPythonNoNewline(options))
264  for iString in sorted(associationContents):
265  if s:
266  s += ", "
267  s += iString
268  if len(associationContents) > 254:
269  return 'cms.'+type(self).__name__+'(*['+s+'])'
270  return 'cms.'+type(self).__name__+'('+s+')'
def dumpPythonNoNewline(self, options=PrintOptions())
def SequenceTypes._ModuleSequenceType.dumpSequenceConfig (   self)
Returns a string which contains the old config language representation of just the internal sequence

Definition at line 284 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and Mixins._Labelable.hasLabel_().

285  """Returns a string which contains the old config language representation of just the internal sequence"""
286  # only dump the label, if possible
287  if self.hasLabel_():
288  return _Labelable.dumpSequenceConfig(self)
289  else:
290  # dump it verbose
291  if self._seq is None:
292  return ''
293  return '('+self._seq.dumpSequenceConfig()+')'
def hasLabel_(self)
Definition: Mixins.py:493
def SequenceTypes._ModuleSequenceType.dumpSequencePython (   self,
  options = PrintOptions() 
)
Returns a string which contains the python representation of just the internal sequence

Definition at line 271 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, SequenceTypes._ModuleSequenceType._tasks, SequenceTypes._ModuleSequenceType.dumpPythonNoNewline(), and Mixins._Labelable.hasLabel_().

271  def dumpSequencePython(self, options=PrintOptions()):
272  """Returns a string which contains the python representation of just the internal sequence"""
273  # only dump the label, if possible
274  if self.hasLabel_():
275  return _Labelable.dumpSequencePython(self, options)
276  elif len(self._tasks) == 0:
277  if self._seq is None:
278  return ''
279  s = self._seq.dumpSequencePython(options)
280  if s:
281  return '('+s+')'
282  return ''
283  return self.dumpPythonNoNewline(options)
def dumpSequencePython(self, options=PrintOptions())
def dumpPythonNoNewline(self, options=PrintOptions())
def hasLabel_(self)
Definition: Mixins.py:493
def SequenceTypes._ModuleSequenceType.expandAndClone (   self)

Definition at line 330 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType.visit().

330  def expandAndClone(self):
331  # Name of this function is not very good. It makes a shallow copy with all
332  # the subTasks and subSequences flattened out (removed), but keeping all the
333  # modules that were in those subSequences and subTasks as well as the top level
334  # ones. Note this will also remove placeholders so one should probably
335  # call resolve before using this if the sequence contains any placeholders.
336  visitor = ExpandVisitor(type(self))
337  self.visit(visitor)
338  return visitor.result()
def SequenceTypes._ModuleSequenceType.index (   self,
  item 
)
Returns the index at which the item is found or raises an exception

Definition at line 367 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and str.

Referenced by BeautifulSoup.PageElement.insert().

367  def index(self,item):
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")
#define str(s)
def SequenceTypes._ModuleSequenceType.insert (   self,
  index,
  item 
)
Inserts the item at the index specified

Definition at line 372 of file SequenceTypes.py.

References SequenceTypes._checkIfSequenceable(), and SequenceTypes._ModuleSequenceType._seq.

372  def insert(self,index,item):
373  """Inserts the item at the index specified"""
374  _checkIfSequenceable(self, item)
375  if self._seq is None:
376  self.__dict__["_seq"] = _SequenceCollection()
377  self._seq.insert(index,item)
def insert(self, index, item)
def _checkIfSequenceable(caller, v)
def SequenceTypes._ModuleSequenceType.insertInto (   self,
  parameterSet,
  myname,
  decoratedList 
)

Definition at line 422 of file SequenceTypes.py.

422  def insertInto(self, parameterSet, myname, decoratedList):
423  parameterSet.addVString(True, myname, decoratedList)
def insertInto(self, parameterSet, myname, decoratedList)
def SequenceTypes._ModuleSequenceType.isFrozen (   self)
def SequenceTypes._ModuleSequenceType.moduleNames (   self)
Returns a set containing the names of all modules being used

Definition at line 299 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType.visit().

299  def moduleNames(self):
300  """Returns a set containing the names of all modules being used"""
301  result = set()
302  visitor = NodeNameVisitor(result)
303  self.visit(visitor)
304  return result
def SequenceTypes._ModuleSequenceType.nameInProcessDesc_ (   self,
  myname 
)
def SequenceTypes._ModuleSequenceType.remove (   self,
  something 
)
Remove the first occurrence of 'something' (a sequence or a module)
   Returns 'True' if the module has been removed, False if it was not found

Definition at line 378 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, SegmentToTrackAssociator.associate(), HTrackAssociator.associate(), TrackAssociatorByHitsImpl.associate, SequenceTypes._ModuleSequenceType.associate(), and SequenceTypes._ModuleSequenceType.visit().

378  def remove(self, something):
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"""
381  # You can remove instances of these types EDProducer, EDFilter, OutputModule,
382  # EDAnalyzer, ESSource, ESProducer, Service, Sequence, SequencePlaceholder, Task,
383  # _SequenceNegation, and _SequenceIgnore.
384  # Mostly this is very intuitive, but there are some complications in cases
385  # where objects that contain other objects are involved. See the comments
386  # for the _MutatingSequenceVisitor.
387  #
388  # Works very similar to copyAndExclude, there are 2 differences. This changes
389  # the object itself instead of making a copy and second it only removes
390  # the first instance of the argument instead of all of them.
392  self.visit(v)
393  if v.didRemove():
394  self._seq = v.result(self)[0]
395  self._tasks.clear()
396  self.associate(*v.result(self)[1])
397  return v.didRemove()
def SequenceTypes._ModuleSequenceType.replace (   self,
  original,
  replacement 
)
Finds all instances of 'original' and substitutes 'replacement' for them.
   Returns 'True' if a replacement occurs.

Definition at line 342 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, SegmentToTrackAssociator.associate(), HTrackAssociator.associate(), TrackAssociatorByHitsImpl.associate, SequenceTypes._ModuleSequenceType.associate(), and SequenceTypes._ModuleSequenceType.visit().

342  def replace(self, original, replacement):
343  """Finds all instances of 'original' and substitutes 'replacement' for them.
344  Returns 'True' if a replacement occurs."""
345  # This works for either argument being of type EDProducer, EDFilter, OutputModule,
346  # EDAnalyzer, ESProducer, ESSource, Service, Sequence, SequencePlaceHolder,
347  # Task, _SequenceNegation, _SequenceIgnore. Although it will fail with a
348  # raised exception if the replacement actually hits a case where a
349  # non-Sequenceable object is placed in the sequenced part of a Sequence
350  # or a type not allowed on a Task is put on a Task.
351  # There is one special case where we need an explicit check to prevent
352  # the algorithm from getting confused, either both or neither can be Tasks
353  #
354  # Mostly this is very intuitive, but there are some complications in cases
355  # where objects that contain other objects are involved. See the comments
356  # for the _MutatingSequenceVisitor.
357 
358  if isinstance(original,Task) != isinstance(replacement,Task):
359  raise TypeError("replace only works if both arguments are Tasks or neither")
360  v = _CopyAndReplaceSequenceVisitor(original,replacement)
361  self.visit(v)
362  if v.didReplace():
363  self._seq = v.result(self)[0]
364  self._tasks.clear()
365  self.associate(*v.result(self)[1])
366  return v.didReplace()
def replace(self, original, replacement)
def SequenceTypes._ModuleSequenceType.resolve (   self,
  processDict,
  keepIfCannotResolve = False 
)

Definition at line 398 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and SequenceTypes._ModuleSequenceType._tasks.

398  def resolve(self, processDict,keepIfCannotResolve=False):
399  if self._seq is not None:
400  self._seq = self._seq.resolve(processDict,keepIfCannotResolve)
401  for task in self._tasks:
402  task.resolve(processDict,keepIfCannotResolve)
403  return self
def resolve(self, processDict, keepIfCannotResolve=False)
def SequenceTypes._ModuleSequenceType.setIsFrozen (   self)
def SequenceTypes._ModuleSequenceType.visit (   self,
  visitor 
)
Passes to visitor's 'enter' and 'leave' method each item describing the module sequence.
If the item contains 'sub' items then visitor will see those 'sub' items between the
item's 'enter' and 'leave' calls.

Definition at line 424 of file SequenceTypes.py.

References SequenceTypes._ModuleSequenceType._seq, and SequenceTypes._ModuleSequenceType._tasks.

Referenced by SequenceTypes._ModuleSequenceType.__str__(), SequenceTypes.Task.__str__(), SequenceTypes.Sequence._visitSubNodes(), SequenceTypes._ModuleSequenceType.contains(), SequenceTypes.Task.contains(), SequenceTypes._ModuleSequenceType.copyAndExclude(), SequenceTypes.Task.copyAndExclude(), SequenceTypes._ModuleSequenceType.expandAndClone(), SequenceTypes.Task.expandAndClone(), SequenceTypes._ModuleSequenceType.moduleNames(), SequenceTypes.Task.moduleNames(), SequenceTypes._ModuleSequenceType.remove(), SequenceTypes.Task.remove(), SequenceTypes._ModuleSequenceType.replace(), and SequenceTypes.Task.replace().

424  def visit(self,visitor):
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.
428  """
429  if self._seq is not None:
430  self._seq.visitNode(visitor)
431  for item in self._tasks:
432  visitor.enter(item)
433  item.visit(visitor)
434  visitor.leave(item)
435 

Member Data Documentation

SequenceTypes._ModuleSequenceType._isFrozen
private

Definition at line 226 of file SequenceTypes.py.

Referenced by SequenceTypes._ModuleSequenceType.isFrozen().

SequenceTypes._ModuleSequenceType._isModified
private

Definition at line 212 of file SequenceTypes.py.

SequenceTypes._ModuleSequenceType._seq
private
SequenceTypes._ModuleSequenceType._tasks
private