From 09c9317ad6f8da9affcff2e9226d083ecb14adc7 Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Fri, 22 Oct 2021 17:29:16 -0300 Subject: [PATCH 1/4] [mypy] Add/fix type annotations for linked queue in data_structures --- data_structures/queue/linked_queue.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/data_structures/queue/linked_queue.py b/data_structures/queue/linked_queue.py index 8526ad311ed0..d239e44274c0 100644 --- a/data_structures/queue/linked_queue.py +++ b/data_structures/queue/linked_queue.py @@ -1,11 +1,11 @@ """ A Queue using a linked list like structure """ -from typing import Any +from typing import Any, Optional class Node: def __init__(self, data: Any) -> None: - self.data = data - self.next = None + self.data: Any = data + self.next: Optional[Node] = None def __str__(self) -> str: return f"{self.data}" @@ -39,7 +39,8 @@ class LinkedQueue: """ def __init__(self) -> None: - self.front = self.rear = None + self.front: Optional[Node] = None + self.rear: Optional[Node] = None def __iter__(self): node = self.front @@ -87,7 +88,7 @@ def is_empty(self) -> bool: """ return len(self) == 0 - def put(self, item) -> None: + def put(self, item: Any) -> None: """ >>> queue = LinkedQueue() >>> queue.get() From 8f070aeed35ea5471cf4cdcbf71849ee65716560 Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Fri, 22 Oct 2021 18:08:23 -0300 Subject: [PATCH 2/4] add return type annotation to __iter__ --- data_structures/queue/linked_queue.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_structures/queue/linked_queue.py b/data_structures/queue/linked_queue.py index d239e44274c0..c822cecbd093 100644 --- a/data_structures/queue/linked_queue.py +++ b/data_structures/queue/linked_queue.py @@ -1,5 +1,5 @@ """ A Queue using a linked list like structure """ -from typing import Any, Optional +from typing import Any, Iterator, Optional class Node: @@ -42,7 +42,7 @@ def __init__(self) -> None: self.front: Optional[Node] = None self.rear: Optional[Node] = None - def __iter__(self): + def __iter__(self) -> Iterator[Any]: node = self.front while node: yield node.data From 6dbc9d085d6bf5e6c4f4b5713627d68d7a96c56e Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Sat, 23 Oct 2021 06:44:26 -0300 Subject: [PATCH 3/4] Add more readable syntax --- data_structures/queue/linked_queue.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/data_structures/queue/linked_queue.py b/data_structures/queue/linked_queue.py index c822cecbd093..21970e7df965 100644 --- a/data_structures/queue/linked_queue.py +++ b/data_structures/queue/linked_queue.py @@ -1,11 +1,13 @@ """ A Queue using a linked list like structure """ -from typing import Any, Iterator, Optional +from __future__ import annotations + +from typing import Any, Iterator class Node: def __init__(self, data: Any) -> None: self.data: Any = data - self.next: Optional[Node] = None + self.next: Node | None = None def __str__(self) -> str: return f"{self.data}" @@ -39,8 +41,8 @@ class LinkedQueue: """ def __init__(self) -> None: - self.front: Optional[Node] = None - self.rear: Optional[Node] = None + self.front: Node | None = None + self.rear: Node | None = None def __iter__(self) -> Iterator[Any]: node = self.front From 637463fe2b6e6ff374fa1fc032c1582c8e0bc920 Mon Sep 17 00:00:00 2001 From: Dylan Buchi Date: Sat, 23 Oct 2021 08:07:27 -0300 Subject: [PATCH 4/4] [mypy] Fix type annotations for double ended queue in data structures --- data_structures/queue/double_ended_queue.py | 29 +++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/data_structures/queue/double_ended_queue.py b/data_structures/queue/double_ended_queue.py index 36106d8bc0d9..8f985b14d2d3 100644 --- a/data_structures/queue/double_ended_queue.py +++ b/data_structures/queue/double_ended_queue.py @@ -1,6 +1,8 @@ """ Implementation of double ended queue. """ +from __future__ import annotations + from dataclasses import dataclass from typing import Any, Iterable @@ -51,8 +53,8 @@ class _Node: """ val: Any = None - next: "Deque._Node" = None - prev: "Deque._Node" = None + next: Deque._Node | None = None + prev: Deque._Node | None = None class _Iterator: """ @@ -66,10 +68,10 @@ class _Iterator: __slots__ = ["_cur"] - def __init__(self, cur: "Deque._Node") -> None: + def __init__(self, cur: Deque._Node | None) -> None: self._cur = cur - def __iter__(self) -> "Deque._Iterator": + def __iter__(self) -> Deque._Iterator: """ >>> our_deque = Deque([1, 2, 3]) >>> iterator = iter(our_deque) @@ -95,9 +97,10 @@ def __next__(self) -> Any: return val - def __init__(self, iterable: Iterable = None) -> None: - self._front = self._back = None - self._len = 0 + def __init__(self, iterable: Iterable[Any] | None = None) -> None: + self._front: Any = None + self._back: Any = None + self._len: int = 0 if iterable is not None: # append every value to the deque @@ -194,7 +197,7 @@ def appendleft(self, val: Any) -> None: # make sure there were no errors assert not self.is_empty(), "Error on appending value." - def extend(self, iter: Iterable) -> None: + def extend(self, iter: Iterable[Any]) -> None: """ Appends every value of iter to the end of the deque. Time complexity: O(n) @@ -226,7 +229,7 @@ def extend(self, iter: Iterable) -> None: for val in iter: self.append(val) - def extendleft(self, iter: Iterable) -> None: + def extendleft(self, iter: Iterable[Any]) -> None: """ Appends every value of iter to the beginning of the deque. Time complexity: O(n) @@ -379,7 +382,7 @@ def __len__(self) -> int: """ return self._len - def __eq__(self, other: "Deque") -> bool: + def __eq__(self, other: object) -> bool: """ Implements "==" operator. Returns if *self* is equal to *other*. Time complexity: O(n) @@ -406,6 +409,10 @@ def __eq__(self, other: "Deque") -> bool: >>> (our_deque_1 == our_deque_3) == (deque_collections_1 == deque_collections_3) True """ + + if not isinstance(other, Deque): + return NotImplemented + me = self._front oth = other._front @@ -422,7 +429,7 @@ def __eq__(self, other: "Deque") -> bool: return True - def __iter__(self) -> "_Iterator": + def __iter__(self) -> Deque._Iterator: """ Implements iteration. Time complexity: O(1)