[ILibraryView] child_order shouldn't leak graphlib.CycleErrror
This commit is contained in:
parent
09a95a6608
commit
ae314cce93
2 changed files with 28 additions and 2 deletions
|
|
@ -22,7 +22,7 @@ import copy
|
|||
from pprint import pformat
|
||||
from collections import defaultdict
|
||||
from abc import ABCMeta, abstractmethod
|
||||
from graphlib import TopologicalSorter
|
||||
from graphlib import TopologicalSorter, CycleError
|
||||
|
||||
import numpy
|
||||
from numpy.typing import ArrayLike, NDArray
|
||||
|
|
@ -618,7 +618,13 @@ class ILibraryView(Mapping[str, 'Pattern'], metaclass=ABCMeta):
|
|||
Return:
|
||||
Topologically sorted list of pattern names.
|
||||
"""
|
||||
return cast('list[str]', list(TopologicalSorter(self.child_graph(dangling=dangling)).static_order()))
|
||||
try:
|
||||
return cast('list[str]', list(TopologicalSorter(self.child_graph(dangling=dangling)).static_order()))
|
||||
except CycleError as exc:
|
||||
cycle = exc.args[1] if len(exc.args) > 1 else None
|
||||
if cycle is None:
|
||||
raise LibraryError('Cycle found while building child order') from exc
|
||||
raise LibraryError(f'Cycle found while building child order: {cycle}') from exc
|
||||
|
||||
def find_refs_local(
|
||||
self,
|
||||
|
|
|
|||
|
|
@ -293,6 +293,26 @@ def test_library_subtree() -> None:
|
|||
assert "c" not in sub
|
||||
|
||||
|
||||
def test_library_child_order_cycle_raises_library_error() -> None:
|
||||
lib = Library()
|
||||
lib["a"] = Pattern()
|
||||
lib["a"].ref("b")
|
||||
lib["b"] = Pattern()
|
||||
lib["b"].ref("a")
|
||||
|
||||
with pytest.raises(LibraryError, match="Cycle found while building child order"):
|
||||
lib.child_order()
|
||||
|
||||
|
||||
def test_library_find_refs_global_cycle_raises_library_error() -> None:
|
||||
lib = Library()
|
||||
lib["a"] = Pattern()
|
||||
lib["a"].ref("a")
|
||||
|
||||
with pytest.raises(LibraryError, match="Cycle found while building child order"):
|
||||
lib.find_refs_global("a")
|
||||
|
||||
|
||||
def test_library_get_name() -> None:
|
||||
lib = Library()
|
||||
lib["cell"] = Pattern()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue