提交 24e7ed3b authored 作者: Frederic Bastien's avatar Frederic Bastien 提交者: Reyhane Askari

Simplify the optimization I did.

上级 40230f91
...@@ -654,9 +654,8 @@ class FunctionGraph(utils.object2): ...@@ -654,9 +654,8 @@ class FunctionGraph(utils.object2):
take care of computing dependencies by itself. take care of computing dependencies by itself.
""" """
ords = OrderedDict()
assert isinstance(self._features, list) assert isinstance(self._features, list)
non_empty_ordering = 0 all_orderings = []
for feature in self._features: for feature in self._features:
if hasattr(feature, 'orderings'): if hasattr(feature, 'orderings'):
...@@ -667,34 +666,23 @@ class FunctionGraph(utils.object2): ...@@ -667,34 +666,23 @@ class FunctionGraph(utils.object2):
". Nondeterministic object is " + ". Nondeterministic object is " +
str(orderings)) str(orderings))
if len(orderings) > 0: if len(orderings) > 0:
non_empty_ordering += 1 all_orderings.append(orderings)
# If we get only 1 ordering, we reuse it directly. for node, prereqs in iteritems(orderings):
if non_empty_ordering == 1: if not isinstance(prereqs, (list, OrderedSet)):
ords = orderings raise TypeError(
for node, prereqs in iteritems(orderings): "prereqs must be a type with a "
if not isinstance(prereqs, (list, OrderedSet)): "deterministic iteration order, or toposort "
raise TypeError( " will be non-deterministic.")
"prereqs must be a type with a " if len(all_orderings) == 1:
"deterministic iteration order, or toposort " # If there is only 1 ordering, we reuse it directly.
" will be non-deterministic.") return all_orderings[0]
# If we get more then 1 orderings, we need to else:
# combine them. # If there is more than 1 ordering, combine them.
elif non_empty_ordering == 2: ords = OrderedDict()
ords = OrderedDict() for orderings in all_orderings:
if non_empty_ordering > 1: for node, prereqs in iteritems(orderings):
for node, prereqs in iteritems(orderings): ords.setdefault(node, []).extend(prereqs)
if not isinstance(prereqs, (list, OrderedSet)): return ords
raise TypeError(
"prereqs must be a type with a "
"deterministic iteration order, or toposort "
" will be non-deterministic.")
ords.setdefault(node, []).extend(prereqs)
if non_empty_ordering > 1:
# eliminate duplicate prereqs if there is more then one
# empty ordering
for (node, prereqs) in iteritems(ords):
ords[node] = list(OrderedSet(prereqs))
return ords
def check_integrity(self): def check_integrity(self):
""" """
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论