# Principled Programming / Tim Teitelbaum / Chapter 18. from typing import NoReturn class HashSet[E]: """Generic HashSet using set.""" _A: set[E] # ArrayList elements are in A[0..size-1] # Constructor. def __init__(self, m: int = 20) -> None: if m < 0: raise ValueError("Capacity must be non-negative int") self._A = set[E]() # Iteration def __iter__(self): self._iterator = iter(self._A) return self def __next__(self): return next(self._iterator) # Size. def size(self) -> int: return len(self._A) def is_empty(self) -> bool: return len(self._A) == 0 # Access. def get(self, k: int) -> NoReturn: assert False, "get not supported" def set(self, k: int, v: E) -> NoReturn: assert False, "set not supported" # Insertion / Deletion. def add(self, v: E, k: int = -1) -> None: self._A.add(v) def remove(self, k: int) -> NoReturn: assert False, "remove by index not supported" def remove_by_value(self, v: E) -> bool: try: self._A.remove(v) return True except ValueError: return False # Capacity. def ensure_capacity(self, min_capacity: int) -> None: pass # Membership. def index_of(self, v: E) -> NoReturn: assert False, "index_of not supported" def contains(self, v: E) -> bool: print("self._A:", self._A) return v in self._A