set methods
This commit is contained in:
@@ -11,6 +11,7 @@ type dictset = defaultdict[T, set[T]]
|
|||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
@dataclass(repr=False)
|
@dataclass(repr=False)
|
||||||
class DAG(Generic[T], MutableMapping[T, DAGSetView[T]]):
|
class DAG(Generic[T], MutableMapping[T, DAGSetView[T]]):
|
||||||
"""
|
"""
|
||||||
@@ -53,22 +54,25 @@ class DAG(Generic[T], MutableMapping[T, DAGSetView[T]]):
|
|||||||
dagset.on_remove = _on_remove
|
dagset.on_remove = _on_remove
|
||||||
return dagset
|
return dagset
|
||||||
|
|
||||||
def __setitem__(self, u: T, vs: Iterable[T]) -> None:
|
def __setitem__(self, u: T, value: Iterable[T]) -> None:
|
||||||
match vs:
|
match value:
|
||||||
case set():
|
case set() as vs:
|
||||||
self._succ[u] |= vs
|
self.__setmultiple__(u, vs)
|
||||||
for v in vs:
|
case str() as v:
|
||||||
|
self.__setsingle__(u, v)
|
||||||
|
case Iterable() as vs:
|
||||||
|
self.__setmultiple__(u, vs)
|
||||||
|
case _ as v:
|
||||||
|
self.__setsingle__(u, v)
|
||||||
|
|
||||||
|
def __setsingle__(self, u: T, v: T) -> None:
|
||||||
|
self._succ[u] |= {v}
|
||||||
self._pred[v] |= {u}
|
self._pred[v] |= {u}
|
||||||
case str():
|
|
||||||
self._succ[u] |= {vs}
|
def __setmultiple__(self, u: T, vs: Iterable[T]) -> None:
|
||||||
self._pred[vs] |= {u}
|
|
||||||
case Iterable():
|
|
||||||
self._succ[u] |= set(vs)
|
self._succ[u] |= set(vs)
|
||||||
for v in vs:
|
for v in vs:
|
||||||
self._pred[v] |= {u}
|
self._pred[v] |= {u}
|
||||||
case _:
|
|
||||||
self._succ[u] |= {vs}
|
|
||||||
self._pred[vs] |= {u}
|
|
||||||
|
|
||||||
def __delitem__(self, u: T) -> None:
|
def __delitem__(self, u: T) -> None:
|
||||||
self.discard_node(u)
|
self.discard_node(u)
|
||||||
|
|||||||
Reference in New Issue
Block a user