The Gaudi Framework  v36r12 (27a178af)
GaudiConfig2._configurables.Configurable Class Reference
Inheritance diagram for GaudiConfig2._configurables.Configurable:
Collaboration diagram for GaudiConfig2._configurables.Configurable:

Public Member Functions

def __init__ (self, name=None, **kwargs)
 
def getInstance (cls, name)
 
def name (self)
 
def name (self, value)
 
def name (self)
 
def __repr__ (self)
 
def __getstate__ (self)
 
def __setstate__ (self, state)
 
def __opt_value__ (self)
 
def __opt_properties__ (self, explicit_defaults=False)
 
def is_property_set (self, propname)
 
def getGaudiType (cls)
 
def getType (cls)
 
def getName (self)
 
def getFullJobOptName (self)
 
def toStringProperty (self)
 
def getDefaultProperties (cls)
 
def getDefaultProperty (cls, name)
 
def clone (self, newname=None)
 
def merge (self, other)
 

Public Attributes

 name
 

Static Public Attributes

dictionary instances = {}
 

Private Attributes

 _name
 
 _properties
 
 __cpp_type__
 

Detailed Description

Base class for all configurable instances.

Definition at line 145 of file _configurables.py.

Constructor & Destructor Documentation

◆ __init__()

def GaudiConfig2._configurables.Configurable.__init__ (   self,
  name = None,
**  kwargs 
)

Definition at line 152 of file _configurables.py.

152  def __init__(self, name=None, **kwargs):
153  self._name = None
154  self._properties = {}
155  if "parent" in kwargs:
156  parent = kwargs.pop("parent")
157  if isinstance(parent, basestring if sys.version_info[0] == 2 else str):
158  parent = self.instances[parent]
159  if not name:
160  raise TypeError("name is needed when a parent is specified")
161  name = "{}.{}".format(parent.name, name)
162  if name:
163  self.name = name
164  elif not _GLOBAL_INSTANCES:
165  self.name = self.__cpp_type__
166  for key, value in kwargs.items():
167  setattr(self, key, value)
168 

Member Function Documentation

◆ __getstate__()

def GaudiConfig2._configurables.Configurable.__getstate__ (   self)

Definition at line 220 of file _configurables.py.

220  def __getstate__(self):
221  state = {"properties": self._properties}
222  try:
223  state["name"] = self.name
224  except AttributeError:
225  pass # no name
226  return state
227 

◆ __opt_properties__()

def GaudiConfig2._configurables.Configurable.__opt_properties__ (   self,
  explicit_defaults = False 
)

Definition at line 238 of file _configurables.py.

238  def __opt_properties__(self, explicit_defaults=False):
239  name = self.name
240  out = {}
241  for p in self._descriptors.values():
242  if explicit_defaults or p.__is_set__(self, type(self)):
243  out[".".join([name, p.name])] = opt_repr(
244  p.__opt_value__(self, type(self))
245  )
246  return out
247 

◆ __opt_value__()

def GaudiConfig2._configurables.Configurable.__opt_value__ (   self)

Definition at line 233 of file _configurables.py.

233  def __opt_value__(self):
234  if self.__cpp_type__ == self.name:
235  return self.__cpp_type__
236  return "{}/{}".format(self.__cpp_type__, self.name)
237 

◆ __repr__()

def GaudiConfig2._configurables.Configurable.__repr__ (   self)

Definition at line 211 of file _configurables.py.

211  def __repr__(self):
212  args = []
213  try:
214  args.append(repr(self.name))
215  except AttributeError:
216  pass # no name
217  args.extend("{}={!r}".format(*item) for item in self._properties.items())
218  return "{}({})".format(type(self).__name__, ", ".join(args))
219 

◆ __setstate__()

def GaudiConfig2._configurables.Configurable.__setstate__ (   self,
  state 
)

Definition at line 228 of file _configurables.py.

228  def __setstate__(self, state):
229  self._name = None
230  self.name = state.get("name")
231  self._properties = state["properties"]
232 

◆ clone()

def GaudiConfig2._configurables.Configurable.clone (   self,
  newname = None 
)
Clone instance with all its properties.

Definition at line 276 of file _configurables.py.

276  def clone(self, newname=None):
277  """Clone instance with all its properties."""
278  return self.__class__(newname, **self._properties)
279 

◆ getDefaultProperties()

def GaudiConfig2._configurables.Configurable.getDefaultProperties (   cls)

Definition at line 269 of file _configurables.py.

269  def getDefaultProperties(cls):
270  return {k: v.default for k, v in cls._descriptors.items()}
271 

◆ getDefaultProperty()

def GaudiConfig2._configurables.Configurable.getDefaultProperty (   cls,
  name 
)

Definition at line 273 of file _configurables.py.

273  def getDefaultProperty(cls, name):
274  return cls._descriptors[name].default
275 

◆ getFullJobOptName()

def GaudiConfig2._configurables.Configurable.getFullJobOptName (   self)

Definition at line 262 of file _configurables.py.

262  def getFullJobOptName(self):
263  return "{}/{}".format(self.__cpp_type__, self.name)
264 

◆ getGaudiType()

def GaudiConfig2._configurables.Configurable.getGaudiType (   cls)

Definition at line 252 of file _configurables.py.

252  def getGaudiType(cls):
253  return cls.__component_type__
254 

◆ getInstance()

def GaudiConfig2._configurables.Configurable.getInstance (   cls,
  name 
)

Definition at line 170 of file _configurables.py.

170  def getInstance(cls, name):
171  return cls.instances.get(name) or cls(name)
172 

◆ getName()

def GaudiConfig2._configurables.Configurable.getName (   self)

Definition at line 259 of file _configurables.py.

259  def getName(self):
260  return self.name
261 

◆ getType()

def GaudiConfig2._configurables.Configurable.getType (   cls)

Definition at line 256 of file _configurables.py.

256  def getType(cls):
257  return cls.__cpp_type__
258 

◆ is_property_set()

def GaudiConfig2._configurables.Configurable.is_property_set (   self,
  propname 
)

Definition at line 248 of file _configurables.py.

248  def is_property_set(self, propname):
249  return self._descriptors[propname].__is_set__(self, type(self))
250 

◆ merge()

def GaudiConfig2._configurables.Configurable.merge (   self,
  other 
)
Merge the properties of the other instance into the current one.

The two instances have to be of the same type, have the same name
(or both unnamed) and the settings must be mergable (according to
their semantics).

Definition at line 280 of file _configurables.py.

280  def merge(self, other):
281  """
282  Merge the properties of the other instance into the current one.
283 
284  The two instances have to be of the same type, have the same name
285  (or both unnamed) and the settings must be mergable (according to
286  their semantics).
287  """
288  if self is other:
289  return self
290  if type(self) is not type(other):
291  raise TypeError(
292  "cannot merge instance of {} into an instance of {}".format(
293  type(other).__name__, type(self).__name__
294  )
295  )
296  if hasattr(self, "name") != hasattr(other, "name"):
297  raise ValueError("cannot merge a named configurable with an unnamed one")
298  if hasattr(self, "name") and (self.name != other.name):
299  raise ValueError(
300  "cannot merge configurables with different names ({} and {})".format(
301  self.name, other.name
302  )
303  )
304 
305  for name in other._properties:
306  if (
307  name in self._properties
308  and self._properties[name] == other._properties[name]
309  ):
310  continue
311  try:
312  setattr(
313  self,
314  name,
315  self._descriptors[name].__merge__(
316  self, type(self), getattr(other, name)
317  ),
318  )
319  except ValueError as err:
320  raise ValueError(
321  "conflicting settings for property {} of {}: {}".format(
322  name,
323  self.name if hasattr(self, "name") else type(self).__name__,
324  str(err),
325  )
326  )
327 
328  return self
329 
330 

◆ name() [1/3]

def GaudiConfig2._configurables.Configurable.name (   self)

Definition at line 174 of file _configurables.py.

174  def name(self):
175  if not self._name:
176  raise AttributeError(
177  "{!r} instance was not named yet".format(type(self).__name__)
178  )
179  return self._name
180 

◆ name() [2/3]

def GaudiConfig2._configurables.Configurable.name (   self)

Definition at line 203 of file _configurables.py.

203  def name(self):
204  if _GLOBAL_INSTANCES:
205  # check if it was set
206  del self.instances[self.name]
207  self._name = None
208  else:
209  raise TypeError("name attribute cannot be deleted")
210 

◆ name() [3/3]

def GaudiConfig2._configurables.Configurable.name (   self,
  value 
)

Definition at line 182 of file _configurables.py.

182  def name(self, value):
183  if value == self._name:
184  return # it's already the name of the instance, nothing to do
185  if (
186  not isinstance(value, basestring if sys.version_info[0] == 2 else str)
187  or not value
188  ):
189  raise TypeError(
190  "expected string, got {} instead".format(type(value).__name__)
191  )
192  if _GLOBAL_INSTANCES:
193  if value in self.instances:
194  raise ValueError("name {!r} already used".format(value))
195  if self._name in self.instances:
196  del self.instances[self._name]
197  self._name = value
198  self.instances[value] = self
199  else:
200  self._name = value
201 

◆ toStringProperty()

def GaudiConfig2._configurables.Configurable.toStringProperty (   self)

Definition at line 265 of file _configurables.py.

265  def toStringProperty(self):
266  return "{}/{}".format(self.__cpp_type__, self.name)
267 

Member Data Documentation

◆ __cpp_type__

GaudiConfig2._configurables.Configurable.__cpp_type__
private

Definition at line 234 of file _configurables.py.

◆ _name

GaudiConfig2._configurables.Configurable._name
private

Definition at line 153 of file _configurables.py.

◆ _properties

GaudiConfig2._configurables.Configurable._properties
private

Definition at line 154 of file _configurables.py.

◆ instances

dictionary GaudiConfig2._configurables.Configurable.instances = {}
static

Definition at line 150 of file _configurables.py.

◆ name

GaudiConfig2._configurables.Configurable.name

Definition at line 163 of file _configurables.py.


The documentation for this class was generated from the following file:
Gaudi::Functional::details::get
auto get(const Handle &handle, const Algo &, const EventContext &) -> decltype(details::deref(handle.get()))
Definition: FunctionalDetails.h:444
TimingHistograms.name
name
Definition: TimingHistograms.py:25
GaudiPython.HistoUtils.__repr__
__repr__
Definition: HistoUtils.py:536
GaudiConfig2._configurables.opt_repr
def opt_repr(value)
Definition: _configurables.py:125
format
GAUDI_API std::string format(const char *,...)
MsgStream format utility "a la sprintf(...)".
Definition: MsgStream.cpp:119
gaudirun.type
type
Definition: gaudirun.py:160
merge
int merge(const char *target, const char *source, bool fixup=false, bool dbg=true)
Definition: merge.C:430
Gaudi.CommonGaudiConfigurables.cls
cls
Definition: CommonGaudiConfigurables.py:44
GaudiPython.Pythonizations.items
items
Definition: Pythonizations.py:546