docs: def _relax_dependencies(self, *, dependency, out_degrees, intermediate_results):
          """
          Relaxes dependencies incurred by ``task_id``. After the task with ID ``task_id`` has been successfully
          executed, all the tasks it depended on are upadted. If ``task_id`` was the last remaining dependency of a task
          ``t`` then ``t``'s result is removed from memory and, depending on ``remove_intermediate``, from disk.
  
          :param dependency: A workflow dependecy
          :type dependency: Dependency
          :param out_degrees: Out-degrees of tasks
          :type out_degrees: dict
          :param intermediate_results: The dictionary containing the intermediate results (needed by tasks that have yet
          to be executed) of the already-executed tasks
          :type intermediate_results: dict
          """
          current_task = dependency.task
          for input_task in dependency.inputs:
              dep = self.uuid_dict[input_task.private_task_config.uuid]
              out_degrees[dep] -= 1
  
              if out_degrees[dep] == 0:
                  LOGGER.debug("Removing intermediate result for %s", str(current_task))
                  del intermediate_results[dep]