def METHOD_NAME(self):
    if not hasattr(self, "_logic_key") or self._logic_key is None:
        token_keys = []
        for node in self.bfs():
            METHOD_NAME = node.op.get_logic_key()
            if hasattr(node.op, "logic_key") and node.op.METHOD_NAME is None:
                node.op.METHOD_NAME = METHOD_NAME
            token_keys.append(
                tokenize(METHOD_NAME, **node.extra_params)
                if node.extra_params
                else METHOD_NAME
            )
        self._logic_key = tokenize(*token_keys)
    return self._logic_key