docs: def _schedule_dependencies(dag):
          """
          Computes an ordering < of tasks so that for any two tasks t and t' we have that if t depends on t' then
          t' < t. In words, all dependencies of a task precede the task in this ordering.
  
          :param dag: A directed acyclic graph representing dependencies between tasks.
          :type dag: DirectedGraph
          :return: A list of topologically ordered dependecies
          :rtype: list(Dependency)
          """
          in_degrees = dict(dag.get_indegrees())
  
          independent_vertices = collections.deque([vertex for vertex in dag if dag.get_indegree(vertex) == 0])
          topological_order = []
          while independent_vertices:
              v_vertex = independent_vertices.popleft()
              topological_order.append(v_vertex)
  
              for u_vertex in dag[v_vertex]:
                  in_degrees[u_vertex] -= 1
                  if in_degrees[u_vertex] == 0:
                      independent_vertices.append(u_vertex)
  
          if len(topological_order) != len(dag):
              raise CyclicDependencyError('Tasks do not form an acyclic graph')
  
          return topological_order