def _add_dependency(self, ctx, called_node_, called_ctx):
        # called_node_ is an MDFNodeBase
        called_node = cython.declare(MDFNode)
        called_node = called_node_

        node_state = self._get_state(ctx)

        if (called_node, called_ctx._id_obj) in node_state.add_dependency_cache:
            return

        # add the called node to this node's callees
        node_state.callees.setdefault(called_ctx._id_obj, set()).add(called_node)

        # add this node to the called nodes callers
        called_state = called_node._get_state(called_ctx)
        called_state.callers.setdefault(ctx._id_obj, set()).add(self)

        if _trace_enabled:
            _logger.info("Updated dependency: %s[%s] -> %s[%s]" % (
                                                           self.name,
                                                           ctx,
                                                           called_node.name,
                                                           called_ctx))

        # don't add this dependency again
        node_state.add_dependency_cache.add((called_node, called_ctx._id_obj))

        self._clear_dependency_cache(ctx)
cdef implementation of py:func:`MDFNode.add_dependency`
dataset/ETHPy150Open manahl/mdf/mdf/nodes.py/MDFNode._add_dependency