The Gaudi Framework  v36r11 (bdb84f5f)
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 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 

◆ 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 276 of file _configurables.py.

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

◆ 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