renames
This commit is contained in:
@@ -5,14 +5,14 @@ from collections.abc import Callable, Iterable, Iterator, MutableMapping
|
|||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from typing import Generic, TypeVar
|
from typing import Generic, TypeVar
|
||||||
|
|
||||||
from .set import DAGSet
|
from .set import DAGSetView
|
||||||
|
|
||||||
type dictset = defaultdict[T, set[T]]
|
type dictset = defaultdict[T, set[T]]
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
@dataclass(repr=False)
|
@dataclass(repr=False)
|
||||||
class DAG(Generic[T], MutableMapping[T, DAGSet[T]]):
|
class DAG(Generic[T], MutableMapping[T, DAGSetView[T]]):
|
||||||
"""
|
"""
|
||||||
DAG adjacency map:
|
DAG adjacency map:
|
||||||
- g[u] -> mutable set-like view of successors of u
|
- g[u] -> mutable set-like view of successors of u
|
||||||
@@ -34,8 +34,8 @@ class DAG(Generic[T], MutableMapping[T, DAGSet[T]]):
|
|||||||
|
|
||||||
# --- MutableMapping interface ---
|
# --- MutableMapping interface ---
|
||||||
|
|
||||||
def __getitem__(self, u: T) -> DAGSet[T]:
|
def __getitem__(self, u: T) -> DAGSetView[T]:
|
||||||
dagset = DAGSet(self._succ.get(u))
|
dagset = DAGSetView(self._succ.get(u))
|
||||||
|
|
||||||
def _on_add(v: T) -> None:
|
def _on_add(v: T) -> None:
|
||||||
self._succ[u] |= {v}
|
self._succ[u] |= {v}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from typing import Any, TypeVar
|
|||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
class DAGSet(MutableSet[T]):
|
class DAGSetView(MutableSet[T]):
|
||||||
"""
|
"""
|
||||||
A mutable set-like view onto DAG._succ[u], with reverse-index maintenance.
|
A mutable set-like view onto DAG._succ[u], with reverse-index maintenance.
|
||||||
|
|
||||||
@@ -17,6 +17,7 @@ class DAGSet(MutableSet[T]):
|
|||||||
- ^= (symmetric_difference_update)
|
- ^= (symmetric_difference_update)
|
||||||
Also supports += as an alias for update for ergonomic batching.
|
Also supports += as an alias for update for ergonomic batching.
|
||||||
"""
|
"""
|
||||||
|
_data: set[T]
|
||||||
|
|
||||||
on_add: Callable[[Any], None] | None = None
|
on_add: Callable[[Any], None] | None = None
|
||||||
on_remove: Callable[[Any], None] | None = None
|
on_remove: Callable[[Any], None] | None = None
|
||||||
@@ -57,7 +58,7 @@ class DAGSet(MutableSet[T]):
|
|||||||
|
|
||||||
# --- in-place operator support ---
|
# --- in-place operator support ---
|
||||||
|
|
||||||
def __ior__(self, other: Iterable[T]) -> DAGSet[T]:
|
def __ior__(self, other: Iterable[T]) -> DAGSetView[T]:
|
||||||
# a |= b => union update
|
# a |= b => union update
|
||||||
match other:
|
match other:
|
||||||
case str():
|
case str():
|
||||||
@@ -68,7 +69,7 @@ class DAGSet(MutableSet[T]):
|
|||||||
other = {other}
|
other = {other}
|
||||||
return super().__ior__(other)
|
return super().__ior__(other)
|
||||||
|
|
||||||
def __iadd__(self, other: Iterable[T]) -> DAGSet[T]:
|
def __iadd__(self, other: Iterable[T]) -> DAGSetView[T]:
|
||||||
# a += b => update/extend
|
# a += b => update/extend
|
||||||
match other:
|
match other:
|
||||||
case set():
|
case set():
|
||||||
@@ -81,7 +82,7 @@ class DAGSet(MutableSet[T]):
|
|||||||
self |= {other}
|
self |= {other}
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __isub__(self, other: Iterable[T]) -> DAGSet[T]:
|
def __isub__(self, other: Iterable[T]) -> DAGSetView[T]:
|
||||||
# a -= b => remove those in other
|
# a -= b => remove those in other
|
||||||
match other:
|
match other:
|
||||||
case str():
|
case str():
|
||||||
@@ -92,7 +93,7 @@ class DAGSet(MutableSet[T]):
|
|||||||
other = {other}
|
other = {other}
|
||||||
return super().__isub__(other)
|
return super().__isub__(other)
|
||||||
|
|
||||||
def __iand__(self, other: Iterable[T]) -> DAGSet[T]:
|
def __iand__(self, other: Iterable[T]) -> DAGSetView[T]:
|
||||||
# a &= b => keep only those also in other
|
# a &= b => keep only those also in other
|
||||||
match other:
|
match other:
|
||||||
case str():
|
case str():
|
||||||
@@ -103,7 +104,7 @@ class DAGSet(MutableSet[T]):
|
|||||||
other = {other}
|
other = {other}
|
||||||
return super().__iand__(other)
|
return super().__iand__(other)
|
||||||
|
|
||||||
def __ixor__(self, other: Iterable[T]) -> DAGSet[T]:
|
def __ixor__(self, other: Iterable[T]) -> DAGSetView[T]:
|
||||||
# a ^= b => symmetric difference update
|
# a ^= b => symmetric difference update
|
||||||
match other:
|
match other:
|
||||||
case str():
|
case str():
|
||||||
@@ -118,4 +119,4 @@ class DAGSet(MutableSet[T]):
|
|||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
item_str = ", ".join(repr(x) for x in self)
|
item_str = ", ".join(repr(x) for x in self)
|
||||||
return f"{{{item_str}}}"
|
return f"{self.__class__.__name__}{{{item_str}}}"
|
||||||
|
|||||||
Reference in New Issue
Block a user