Source code for j5.types

"""Useful datatypes that aren't available in the standard lib."""
from typing import Generator, Generic, Iterator, List, Mapping, TypeVar, Union

T = TypeVar("T")
U = TypeVar("U")


[docs]class ImmutableDict(Generic[T, U]): """A dictionary whose elements cannot be set.""" def __init__(self, members: Mapping[T, U]): self._members = members def __repr__(self) -> str: return f"ImmutableDict({self._members!r})" def __getitem__(self, index: T) -> U: """Get an member using list notation.""" return self._members[index] def __iter__(self) -> Iterator[U]: """Iterate over the members of the group.""" return iter(self._members.values()) def __len__(self) -> int: """Get the number of members in the group.""" return len(self._members)
[docs]class ImmutableList(Generic[T]): """A list whose items cannot be set.""" def __init__(self, members: Union[List[T], Generator[T, None, None]]): self._members: List[T] = list(members) def __repr__(self) -> str: return f"ImmutableList({self._members!r})" def __getitem__(self, index: int) -> T: """Get an member using list notation.""" return self._members[index] def __iter__(self) -> Iterator[T]: """Iterate over the members of the group.""" return iter(self._members) def __len__(self) -> int: """Get the number of members in the group.""" return len(self._members)