other i functions

This commit is contained in:
John Lancaster
2026-02-21 00:22:39 -06:00
parent bfdd295ac5
commit ba32d355e0

View File

@@ -50,9 +50,10 @@ class DAGSet(MutableSet[T]):
self.on_add(v) self.on_add(v)
def discard(self, v: T) -> None: def discard(self, v: T) -> None:
self._data.discard(v) if v in self._data:
if self.on_remove: self._data.discard(v)
self.on_remove(v) if self.on_remove:
self.on_remove(v)
# --- in-place operator support --- # --- in-place operator support ---
@@ -69,22 +70,38 @@ 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]) -> DAGSet[T]:
# # a -= b => remove those in other # a -= b => remove those in other
# match other: match other:
# case set(): case str():
# self -= other other = {other}
# case _: case Iterable():
# self -= set(other) other = set(other)
# return self case _:
other = {other}
return super().__isub__(other)
# def __iand__(self, other: Iterable[T]) -> DAGSet[T]: def __iand__(self, other: Iterable[T]) -> DAGSet[T]:
# # a &= b => keep only those also in other # a &= b => keep only those also in other
# return self match other:
case str():
other = {other}
case Iterable():
other = set(other)
case _:
other = {other}
return super().__iand__(other)
# def __ixor__(self, other: Iterable[T]) -> DAGSet[T]: def __ixor__(self, other: Iterable[T]) -> DAGSet[T]:
# # a ^= b => symmetric difference update # a ^= b => symmetric difference update
# return self match other:
case str():
other = {other}
case Iterable():
other = set(other)
case _:
other = {other}
return super().__ixor__(other)
# --- nice repr for debugging --- # --- nice repr for debugging ---