Source code for oemof.network.network.entity

# -*- coding: utf-8 -*-

"""This package contains the abstract entity classes used to model
energy systems.

SPDX-FileCopyrightText: Stephan Günther <>
SPDX-FileCopyrightText: Uwe Krien <krien@uni-bremen.de>
SPDX-FileCopyrightText: Simon Hilpert <>
SPDX-FileCopyrightText: Cord Kaldemeyer <>
SPDX-FileCopyrightText: Patrik Schönfeldt <patrik.schoenfeldt@dlr.de>

SPDX-License-Identifier: MIT
"""

from functools import total_ordering


[docs]@total_ordering class Entity: """Represents an Entity in an energy system graph. Abstract superclass of the general types of entities of an energy system graph, collecting attributes and operations common to all types of nodes. Users should neither instantiate nor subclass this, but use :class:`Component`, :class:`Bus`, :class:`Edge` or one of their subclasses instead. .. role:: python(code) :language: python Parameters ---------- label: `hashable`, optional Used as the string representation of this node. If this parameter is not an instance of :class:`str` it will be converted to a string and the result will be used as this node's :attr:`label`, which should be unique with respect to the other nodes in the energy system graph this node belongs to. If this parameter is not supplied, the string representation of this node will instead be generated based on this nodes `class` and `id`. custom_properties: `dict` This dictionary that can be used to store information that can be used to easily attach custom information to any Entity. """ def __init__(self, label, *, custom_properties=None): self._label = label if custom_properties is None: custom_properties = {} self.custom_properties = custom_properties def __eq__(self, other): return id(self) == id(other) def __lt__(self, other): return str(self) < str(other) def __hash__(self): return hash(self.label) def __str__(self): return str(self.label) def __repr__(self): return repr( "<{0.__module__}.{0.__name__}: {1!r}>".format( type(self), self.label ) ) @property def label(self): """ If this node was given a `label` on construction, this attribute holds the actual object passed as a parameter. Otherwise `node.label` is a synonym for `str(node)`. """ try: return self._label if self._label is not None else self._id_label except AttributeError: # Workaround for problems with pickle/dill return hash(self._id_label) @property def _id_label(self): return "<{} #0x{:x}>".format(type(self).__name__, id(self))