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)