types
This commit is contained in:
@@ -6,6 +6,8 @@ from typing import Generic, TypeVar
|
|||||||
|
|
||||||
from .set import DAGSet
|
from .set import DAGSet
|
||||||
|
|
||||||
|
type dictset = defaultdict[T, set[T]]
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
@@ -19,12 +21,15 @@ class DAG(Generic[T], MutableMapping[T, MutableSet[T]]):
|
|||||||
a guarded view that keeps reverse in sync.
|
a guarded view that keeps reverse in sync.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
_succ: dictset[T]
|
||||||
|
_pred: dictset[T]
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self._succ: defaultdict[T, set[T]] = defaultdict(set)
|
self._succ: dictset[T] = defaultdict(set)
|
||||||
self._pred: defaultdict[T, set[T]] = defaultdict(set)
|
self._pred: dictset[T] = defaultdict(set)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def reverse(self) -> defaultdict[T, set[T]]:
|
def reverse(self) -> dictset[T]:
|
||||||
return self._pred
|
return self._pred
|
||||||
|
|
||||||
# --- MutableMapping interface ---
|
# --- MutableMapping interface ---
|
||||||
@@ -78,10 +83,6 @@ class DAG(Generic[T], MutableMapping[T, MutableSet[T]]):
|
|||||||
self._succ[u].add(v)
|
self._succ[u].add(v)
|
||||||
self._pred[v].add(u)
|
self._pred[v].add(u)
|
||||||
|
|
||||||
# Touch keys so nodes appear if accessed later (optional but nice)
|
|
||||||
_ = self._succ[v]
|
|
||||||
_ = self._pred[u]
|
|
||||||
|
|
||||||
def remove_edge(self, u: T, v: T, *, missing_ok: bool = True) -> None:
|
def remove_edge(self, u: T, v: T, *, missing_ok: bool = True) -> None:
|
||||||
if v in self._succ.get(u, ()):
|
if v in self._succ.get(u, ()):
|
||||||
self._succ[u].remove(v)
|
self._succ[u].remove(v)
|
||||||
|
|||||||
Reference in New Issue
Block a user