CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
List of all members | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
Mixins._Parameterizable Class Reference
Inheritance diagram for Mixins._Parameterizable:
Mixins._TypedParameterizable Types.EDAlias Types.PSet Modules._Module Modules.ESPrefer Modules.ESProducer Modules.ESSource Modules.Looper Modules.Service Modules.Source Types.SecSource

Public Member Functions

def __delattr__
 
def __init__ (self, arg, kargs)
 
def __repr__ (self)
 
def __setattr__
 
def dumpPython
 
def getParameter (self, params)
 
def hasParameter (self, params)
 
def insertContentsInto (self, parameterSet)
 
def isFrozen (self)
 
def isModified (self)
 
def parameterNames_ (self)
 
def parameters_ (self)
 
def setIsFrozen (self)
 
def update_ (self, d)
 

Private Member Functions

def __addParameter
 
def __setParameters (self, parameters)
 
def __setParametersFromArg (self, arg)
 

Static Private Member Functions

def __raiseBadSetAttr
 

Private Attributes

 __validator
 
 _isFrozen
 
 _isModified
 

Detailed Description

Base class for classes which allow addition of _ParameterTypeBase data

Definition at line 169 of file Mixins.py.

Constructor & Destructor Documentation

◆ __init__()

def Mixins._Parameterizable.__init__ (   self,
  arg,
  kargs 
)

Definition at line 171 of file Mixins.py.

References Mixins._Parameterizable.__setParameters(), and Mixins._Parameterizable.__setParametersFromArg().

171  def __init__(self,*arg,**kargs):
172  self.__dict__['_Parameterizable__parameterNames'] = []
173  self.__dict__["_isFrozen"] = False
174  self.__dict__['_Parameterizable__validator'] = None
175  """The named arguments are the 'parameters' which are added as 'python attributes' to the object"""
176  if len(arg) != 0:
177  self.__setParametersFromArg(*arg)
178  self.__setParameters(kargs)
179  self._isModified = False
180 
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)

Member Function Documentation

◆ __addParameter()

def Mixins._Parameterizable.__addParameter (   self,
  name 
)
private

Definition at line 235 of file Mixins.py.

Referenced by Mixins._Parameterizable.__setattr__(), Modules.SwitchProducer.__setattr__(), Mixins._Parameterizable.__setParameters(), and Modules.SwitchProducer.__setParameters().

235  def __addParameter(self, name:str, value):
236  if name == 'allowAnyLabel_':
237  self.__validator = value
238  self._isModified = True
239  return
240  if not isinstance(value,_ParameterTypeBase):
241  if self.__validator is not None:
242  value = self.__validator.convert_(value)
243  else:
244  self.__raiseBadSetAttr(name)
245  if name in self.__dict__:
246  message = "Duplicate insert of member " + name
247  message += "\nThe original parameters are:\n"
248  message += self.dumpPython() + '\n'
249  raise ValueError(message)
250  self.__dict__[name]=value
251  self.__parameterNames.append(name)
252  self._isModified = True

◆ __delattr__()

def Mixins._Parameterizable.__delattr__ (   self,
  name 
)

Definition at line 312 of file Mixins.py.

References Mixins._ParameterTypeBase.isFrozen(), Mixins._Parameterizable.isFrozen(), and MatrixUtil.remove().

312  def __delattr__(self,name:str):
313  if self.isFrozen():
314  raise ValueError("Object already added to a process. It is read only now")
315  super(_Parameterizable,self).__delattr__(name)
316  self.__parameterNames.remove(name)
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:234

◆ __raiseBadSetAttr()

def Mixins._Parameterizable.__raiseBadSetAttr (   name)
staticprivate

Definition at line 318 of file Mixins.py.

318  def __raiseBadSetAttr(name:str):
319  raise TypeError(name+" does not already exist, so it can only be set to a CMS python configuration type")

◆ __repr__()

def Mixins._Parameterizable.__repr__ (   self,
  str 
)

◆ __setattr__()

def Mixins._Parameterizable.__setattr__ (   self,
  name 
)

Definition at line 272 of file Mixins.py.

References Mixins._Parameterizable.__addParameter(), Mixins._ParameterTypeBase._isModified, Mixins._SimpleParameterTypeBase._isModified, Mixins._Parameterizable._isModified, Mixins._ParameterTypeBase.dumpPython(), Mixins.UsingBlock.dumpPython(), Mixins._Parameterizable.dumpPython(), Config.Process.dumpPython(), Config.SubProcess.dumpPython(), Config.ProcessAccelerator.dumpPython(), Mixins._ParameterTypeBase.isFrozen(), Mixins._Parameterizable.isFrozen(), and reco::JetExtendedAssociation.setValue().

Referenced by GenObject.GenObject.setValue().

272  def __setattr__(self,name:str,value):
273  #since labels are not supposed to have underscores at the beginning
274  # I will assume that if we have such then we are setting an internal variable
275  if self.isFrozen() and not (name in ["_Labelable__label","_isFrozen"] or name.startswith('_')):
276  message = "Object already added to a process. It is read only now\n"
277  message += " %s = %s" %(name, value)
278  message += "\nThe original parameters are:\n"
279  message += self.dumpPython() + '\n'
280  raise ValueError(message)
281  # underscored names bypass checking for _ParameterTypeBase
282  if name[0]=='_':
283  super(_Parameterizable,self).__setattr__(name,value)
284  elif not name in self.__dict__:
285  self.__addParameter(name, value)
286  self._isModified = True
287  else:
288  # handle the case where users just replace with a value, a = 12, rather than a = cms.int32(12)
289  if isinstance(value,_ParameterTypeBase):
290  self.__dict__[name] = self.__dict__[name]._checkAndReturnValueWithType(value)
291  else:
292  self.__dict__[name].setValue(value)
293  self._isModified = True
bool setValue(Container &, const reco::JetBaseRef &, const JetExtendedData &)
associate jet with value. Returns false and associate nothing if jet is already associated ...

◆ __setParameters()

def Mixins._Parameterizable.__setParameters (   self,
  parameters 
)
private

Definition at line 263 of file Mixins.py.

References Mixins._Parameterizable.__addParameter(), and Mixins._Parameterizable.__validator.

Referenced by Mixins._Parameterizable.__init__(), and Mixins._Parameterizable.__setParametersFromArg().

263  def __setParameters(self,parameters):
264  v = None
265  for name,value in parameters.items():
266  if name == 'allowAnyLabel_':
267  v = value
268  continue
269  self.__addParameter(name, value)
270  if v is not None:
271  self.__validator=v

◆ __setParametersFromArg()

def Mixins._Parameterizable.__setParametersFromArg (   self,
  arg 
)
private

Definition at line 253 of file Mixins.py.

References Mixins._Parameterizable.__setParameters().

Referenced by Mixins._Parameterizable.__init__().

253  def __setParametersFromArg(self, *arg):
254  for block in arg:
255  # Allow __PSet for testing
256  if type(block).__name__ not in ["PSet", "__PSet", "dict"]:
257  raise ValueError("Only PSets can be passed as unnamed argument blocks. This is a "+type(block).__name__)
258  if isinstance(block,dict):
259  self.__setParameters(block)
260  else:
261  self.__setParameters(block.parameters_())
262 

◆ dumpPython()

def Mixins._Parameterizable.dumpPython (   self,
  options 
)

Definition at line 320 of file Mixins.py.

References Mixins._Parameterizable.__validator, join(), and Mixins._Parameterizable.parameterNames_().

Referenced by Modules.SwitchProducer.__addParameter(), Types._AllowedParameterTypes.__init__(), Mixins._Parameterizable.__repr__(), Mixins._Parameterizable.__setattr__(), and Modules.SwitchProducer.__setattr__().

320  def dumpPython(self, options:PrintOptions=PrintOptions()) -> str:
321  specialImportRegistry.registerUse(self)
322  sortedNames = sorted(self.parameterNames_())
323  if len(sortedNames) > 200:
324  #Too many parameters for a python function call
325  # The solution is to create a temporary dictionary which
326  # is constructed by concatenating long lists (with maximum
327  # 200 entries each) together.
328  # This looks like
329  # **dict( [(...,...), ...] + [...] + ... )
330  others = []
331  usings = []
332  for name in sortedNames:
333  param = self.__dict__[name]
334  # we don't want minuses in names
335  name2 = name.replace('-','_')
336  options.indent()
337  #_UsingNodes don't get assigned variables
338  if name.startswith("using_"):
339  usings.append(options.indentation()+param.dumpPython(options))
340  else:
341  others.append((name2, param.dumpPython(options)))
342  options.unindent()
343 
344  resultList = ',\n'.join(usings)
345  longOthers = options.indentation()+"**dict(\n"
346  options.indent()
347  longOthers += options.indentation()+"[\n"
348  entriesInList = 0
349  options.indent()
350  for n,v in others:
351  entriesInList +=1
352  if entriesInList > 200:
353  #need to start a new list
354  options.unindent()
355  longOthers += options.indentation()+"] +\n"+options.indentation()+"[\n"
356  entriesInList = 0
357  options.indent()
358  longOthers += options.indentation()+'("'+n+'" , '+v+' ),\n'
359 
360  longOthers += options.indentation()+"]\n"
361  options.unindent()
362  longOthers +=options.indentation()+")\n"
363  options.unindent()
364  ret = []
365  if resultList:
366  ret.append(resultList)
367  if longOthers:
368  ret.append(longOthers)
369  return ",\n".join(ret)
370  #Standard case, small number of parameters
371  others = []
372  usings = []
373  for name in sortedNames:
374  param = self.__dict__[name]
375  # we don't want minuses in names
376  name2 = name.replace('-','_')
377  options.indent()
378  #_UsingNodes don't get assigned variables
379  if name.startswith("using_"):
380  usings.append(options.indentation()+param.dumpPython(options))
381  else:
382  others.append(options.indentation()+name2+' = '+param.dumpPython(options))
383  options.unindent()
384  # usings need to go first
385  resultList = usings
386  resultList.extend(others)
387  if self.__validator is not None:
388  options.indent()
389  resultList.append(options.indentation()+"allowAnyLabel_="+self.__validator.dumpPython(options))
390  options.unindent()
391  return ',\n'.join(resultList)+'\n'
static std::string join(char **cmd)
Definition: RemoteFile.cc:21
def dumpPython(process, name)

◆ getParameter()

def Mixins._Parameterizable.getParameter (   self,
  params 
)
_getParameter_

Retrieve the specified parameter from the PSet Provided
given the attribute chain

returns None if not found

Definition at line 208 of file Mixins.py.

Referenced by Mixins._Parameterizable.hasParameter().

208  def getParameter(self, params):
209  """
210  _getParameter_
211 
212  Retrieve the specified parameter from the PSet Provided
213  given the attribute chain
214 
215  returns None if not found
216  """
217  lastParam = self
218  # Don't accidentally iterate over letters in a string
219  if type(params).__name__ == 'str':
220  return getattr(self, params, None)
221  for param in params:
222  lastParam = getattr(lastParam, param, None)
223  if lastParam == None:
224  return None
225  return lastParam
226 

◆ hasParameter()

def Mixins._Parameterizable.hasParameter (   self,
  params,
  bool 
)
_hasParameter_

check that pset provided has the attribute chain
specified.

Eg, if params is [ 'attr1', 'attr2', 'attr3' ]
check for pset.attr1.attr2.attr3

returns True if parameter exists, False if not

Definition at line 194 of file Mixins.py.

References DropBoxMetadata::Parameters.getParameter(), Args.getParameter(), QIE8Simulator.getParameter(), AbsElectronicODERHS.getParameter(), SiStripLorentzAngleCalibration.getParameter(), SiPixelLorentzAngleCalibration.getParameter(), IntegratedCalibrationBase.getParameter(), SiStripBackplaneCalibration.getParameter(), edm::ParameterSet.getParameter(), and Mixins._Parameterizable.getParameter().

194  def hasParameter(self, params) -> bool:
195  """
196  _hasParameter_
197 
198  check that pset provided has the attribute chain
199  specified.
200 
201  Eg, if params is [ 'attr1', 'attr2', 'attr3' ]
202  check for pset.attr1.attr2.attr3
203 
204  returns True if parameter exists, False if not
205  """
206  return (self.getParameter(params) != None)
207 

◆ insertContentsInto()

def Mixins._Parameterizable.insertContentsInto (   self,
  parameterSet 
)

Definition at line 394 of file Mixins.py.

References Mixins._Parameterizable.parameterNames_().

Referenced by Modules.Service.insertInto(), Mixins._TypedParameterizable.insertInto(), and Types.PSet.insertInto().

394  def insertContentsInto(self, parameterSet):
395  for name in self.parameterNames_():
396  param = getattr(self,name)
397  param.insertInto(parameterSet, name)
398 
399 

◆ isFrozen()

def Mixins._Parameterizable.isFrozen (   self,
  bool 
)

Definition at line 306 of file Mixins.py.

References Mixins._ParameterTypeBase._isFrozen, and Mixins._Parameterizable._isFrozen.

Referenced by Mixins._Parameterizable.__delattr__(), Mixins._Parameterizable.__setattr__(), and Modules.SwitchProducer.__setattr__().

306  def isFrozen(self) -> bool:
307  return self._isFrozen

◆ isModified()

def Mixins._Parameterizable.isModified (   self,
  bool 
)

Definition at line 184 of file Mixins.py.

References Mixins._ParameterTypeBase._isModified, Mixins._SimpleParameterTypeBase._isModified, Mixins._Parameterizable._isModified, and Mixins._Parameterizable.parameterNames_().

184  def isModified(self) -> bool:
185  if self._isModified:
186  return True
187  for name in self.parameterNames_():
188  param = self.__dict__[name]
189  if isinstance(param, _Parameterizable) and param.isModified():
190  self._isModified = True
191  return True
192  return False
193 

◆ parameterNames_()

def Mixins._Parameterizable.parameterNames_ (   self)

◆ parameters_()

def Mixins._Parameterizable.parameters_ (   self)
Returns a dictionary of copies of the user-set parameters

Definition at line 227 of file Mixins.py.

References Mixins._Parameterizable.parameterNames_().

Referenced by Mixins._TypedParameterizable.clone(), Types.PSet.clone(), Types.EDAlias.clone(), and Mixins._TypedParameterizable.copy().

227  def parameters_(self):
228  """Returns a dictionary of copies of the user-set parameters"""
229  import copy
230  result = dict()
231  for name in self.parameterNames_():
232  result[name]=copy.deepcopy(self.__dict__[name])
233  return result
234 

◆ setIsFrozen()

def Mixins._Parameterizable.setIsFrozen (   self)

Definition at line 308 of file Mixins.py.

Referenced by Modules._Module.__init__().

308  def setIsFrozen(self):
309  self._isFrozen = True
310  for name in self.parameterNames_():
311  self.__dict__[name].setIsFrozen()

◆ update_()

def Mixins._Parameterizable.update_ (   self,
  d 
)
"Takes a PSet or dict and adds the entries as parameters. Already existing parameters will be overwritten.

Definition at line 294 of file Mixins.py.

References mps_monitormerge.items.

294  def update_(self, d):
295  """"Takes a PSet or dict and adds the entries as parameters. Already existing parameters will be overwritten.
296  """
297  if type(d).__name__ not in ["PSet", "__PSet", "dict"]:
298  raise ValueError("Only PSets or dicts can be passed to update_. This is a "+type(d).__name__)
299 
300  items = d.items() if isinstance(d, dict) else d.parameters_().items()
301  for k,v in items:
302  setattr(self, k, v)
303 
304 
305 

Member Data Documentation

◆ __validator

Mixins._Parameterizable.__validator
private

◆ _isFrozen

Mixins._Parameterizable._isFrozen
private

◆ _isModified

Mixins._Parameterizable._isModified
private