Skip to content

Commit ba9d78f

Browse files
authored
refactor(autojac): Revamp OrderedSet (#375)
* Change OrderedSet to compose with OrderedDict instead of inheritting from it * Replace string type hint by future annotations import
1 parent 0174765 commit ba9d78f

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed
Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,44 @@
1+
from __future__ import annotations
2+
13
from collections import OrderedDict
2-
from collections.abc import Hashable, Iterable, MutableSet
4+
from collections.abc import Hashable, Iterable, Iterator, MutableSet
35
from typing import TypeVar
46

5-
_KeyType = TypeVar("_KeyType", bound=Hashable)
7+
_T = TypeVar("_T", bound=Hashable)
68

79

8-
class OrderedSet(OrderedDict[_KeyType, None], MutableSet[_KeyType]):
10+
class OrderedSet(MutableSet[_T]):
911
"""Ordered collection of distinct elements."""
1012

11-
def __init__(self, elements: Iterable[_KeyType]):
12-
super().__init__([(element, None) for element in elements])
13+
def __init__(self, elements: Iterable[_T]):
14+
super().__init__()
15+
self.ordered_dict = OrderedDict[_T, None]([(element, None) for element in elements])
1316

14-
def difference_update(self, elements: set[_KeyType]) -> None:
17+
def difference_update(self, elements: set[_T]) -> None:
1518
"""Removes all specified elements from the OrderedSet."""
1619

1720
for element in elements:
1821
self.discard(element)
1922

20-
def add(self, element: _KeyType) -> None:
23+
def add(self, element: _T) -> None:
2124
"""Adds the specified element to the OrderedSet."""
2225

23-
self[element] = None
26+
self.ordered_dict[element] = None
2427

25-
def __add__(self, other: "OrderedSet[_KeyType]") -> "OrderedSet[_KeyType]":
28+
def __add__(self, other: OrderedSet[_T]) -> OrderedSet[_T]:
2629
"""Creates a new OrderedSet with the elements of self followed by the elements of other."""
2730

2831
return OrderedSet([*self, *other])
2932

30-
def discard(self, value: _KeyType) -> None:
33+
def discard(self, value: _T) -> None:
3134
if value in self:
32-
del self[value]
35+
del self.ordered_dict[value]
36+
37+
def __iter__(self) -> Iterator[_T]:
38+
return self.ordered_dict.__iter__()
39+
40+
def __len__(self) -> int:
41+
return len(self.ordered_dict)
42+
43+
def __contains__(self, element: object) -> bool:
44+
return element in self.ordered_dict

0 commit comments

Comments
 (0)