set methods

This commit is contained in:
John Lancaster
2026-02-21 10:41:45 -06:00
parent 3676e2d2d8
commit ec32c8417d

View File

@@ -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)