From a502381c1a3e2d205a13af5f6b7167c7c96b01d4 Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Sat, 21 Feb 2026 00:01:00 -0600 Subject: [PATCH] types --- src/daglib/dag.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/daglib/dag.py b/src/daglib/dag.py index 21240bc..5503844 100644 --- a/src/daglib/dag.py +++ b/src/daglib/dag.py @@ -6,6 +6,8 @@ from typing import Generic, TypeVar from .set import DAGSet +type dictset = defaultdict[T, set[T]] + T = TypeVar("T") @@ -19,12 +21,15 @@ class DAG(Generic[T], MutableMapping[T, MutableSet[T]]): a guarded view that keeps reverse in sync. """ + _succ: dictset[T] + _pred: dictset[T] + def __init__(self) -> None: - self._succ: defaultdict[T, set[T]] = defaultdict(set) - self._pred: defaultdict[T, set[T]] = defaultdict(set) + self._succ: dictset[T] = defaultdict(set) + self._pred: dictset[T] = defaultdict(set) @property - def reverse(self) -> defaultdict[T, set[T]]: + def reverse(self) -> dictset[T]: return self._pred # --- MutableMapping interface --- @@ -78,10 +83,6 @@ class DAG(Generic[T], MutableMapping[T, MutableSet[T]]): self._succ[u].add(v) 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: if v in self._succ.get(u, ()): self._succ[u].remove(v)