From 87291d473c490a778acb65535b0b8d76b34215bd Mon Sep 17 00:00:00 2001 From: Saksham Chawla <51916697+saksham-chawla@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:20:37 +0530 Subject: [PATCH 1/8] Update heap_generic.py --- data_structures/heap/heap_generic.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index 553cb94518c4..d09d0f9b32bd 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -4,7 +4,7 @@ class Heap: accordingly. """ - def __init__(self, key=None): + def __init__(self, key: int| None = None) -> None: # Stores actual heap items. self.arr = list() # Stores indexes of each item for supporting updates and deletion. @@ -15,21 +15,21 @@ def __init__(self, key=None): # will be done. self.key = key or (lambda x: x) - def _parent(self, i): + def _parent(self, i: int) -> int | None: """Returns parent index of given index if exists else None""" return int((i - 1) / 2) if i > 0 else None - def _left(self, i): + def _left(self, i: int) -> int | None: """Returns left-child-index of given index if exists else None""" left = int(2 * i + 1) return left if 0 < left < self.size else None - def _right(self, i): + def _right(self, i: int) -> int | None: """Returns right-child-index of given index if exists else None""" right = int(2 * i + 2) return right if 0 < right < self.size else None - def _swap(self, i, j): + def _swap(self, i: int, j: int) -> None: """Performs changes required for swapping two elements in the heap""" # First update the indexes of the items in index map. self.pos_map[self.arr[i][0]], self.pos_map[self.arr[j][0]] = ( @@ -39,11 +39,11 @@ def _swap(self, i, j): # Then swap the items in the list. self.arr[i], self.arr[j] = self.arr[j], self.arr[i] - def _cmp(self, i, j): + def _cmp(self, i: int, j: int) -> bool: """Compares the two items using default comparison""" return self.arr[i][1] < self.arr[j][1] - def _get_valid_parent(self, i): + def _get_valid_parent(self, i: int) -> int: """ Returns index of valid parent as per desired ordering among given index and both it's children @@ -59,21 +59,21 @@ def _get_valid_parent(self, i): return valid_parent - def _heapify_up(self, index): + def _heapify_up(self, index: int) -> None: """Fixes the heap in upward direction of given index""" parent = self._parent(index) while parent is not None and not self._cmp(index, parent): self._swap(index, parent) index, parent = parent, self._parent(parent) - def _heapify_down(self, index): + def _heapify_down(self, index: int) -> None: """Fixes the heap in downward direction of given index""" valid_parent = self._get_valid_parent(index) while valid_parent != index: self._swap(index, valid_parent) index, valid_parent = valid_parent, self._get_valid_parent(valid_parent) - def update_item(self, item, item_value): + def update_item(self, item: int, item_value: int) -> None: """Updates given item value in heap if present""" if item not in self.pos_map: return @@ -84,7 +84,7 @@ def update_item(self, item, item_value): self._heapify_up(index) self._heapify_down(index) - def delete_item(self, item): + def delete_item(self, item: int) -> None: """Deletes given item from heap if present""" if item not in self.pos_map: return @@ -99,7 +99,7 @@ def delete_item(self, item): self._heapify_up(index) self._heapify_down(index) - def insert_item(self, item, item_value): + def insert_item(self, item: int, item_value: int) -> None: """Inserts given item with given value in heap""" arr_len = len(self.arr) if arr_len == self.size: @@ -110,11 +110,11 @@ def insert_item(self, item, item_value): self.size += 1 self._heapify_up(self.size - 1) - def get_top(self): + def get_top(self) -> int | None: """Returns top item tuple (Calculated value, item) from heap if present""" return self.arr[0] if self.size else None - def extract_top(self): + def extract_top(self) -> tuple: """ Return top item tuple (Calculated value, item) from heap and removes it as well if present From 307978396d0b85ca7b440e41c2dd3b55208118f7 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 11:51:55 +0000 Subject: [PATCH 2/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/heap/heap_generic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index d09d0f9b32bd..275d49c9e287 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -4,7 +4,7 @@ class Heap: accordingly. """ - def __init__(self, key: int| None = None) -> None: + def __init__(self, key: int | None = None) -> None: # Stores actual heap items. self.arr = list() # Stores indexes of each item for supporting updates and deletion. From 1da74a62d658f9bbef5d59c1d82a7972ac5f3ccc Mon Sep 17 00:00:00 2001 From: Saksham Chawla <51916697+saksham-chawla@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:25:01 +0530 Subject: [PATCH 3/8] Update heap_generic.py --- data_structures/heap/heap_generic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index 275d49c9e287..66f04d898c24 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -6,9 +6,9 @@ class Heap: def __init__(self, key: int | None = None) -> None: # Stores actual heap items. - self.arr = list() + self.arr: list = list() # Stores indexes of each item for supporting updates and deletion. - self.pos_map = {} + self.pos_map: dict = {} # Stores current size of heap. self.size = 0 # Stores function used to evaluate the score of an item on which basis ordering From 38036b100697c232de371d42d7c38fe0c399c904 Mon Sep 17 00:00:00 2001 From: Saksham Chawla <51916697+saksham-chawla@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:28:15 +0530 Subject: [PATCH 4/8] Update heap_generic.py --- data_structures/heap/heap_generic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index 66f04d898c24..15469fe8ba1a 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -114,7 +114,7 @@ def get_top(self) -> int | None: """Returns top item tuple (Calculated value, item) from heap if present""" return self.arr[0] if self.size else None - def extract_top(self) -> tuple: + def extract_top(self) -> int | None: """ Return top item tuple (Calculated value, item) from heap and removes it as well if present From b6301682af93af461a13185dbf87d34afd1c73c0 Mon Sep 17 00:00:00 2001 From: Saksham Chawla <51916697+saksham-chawla@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:31:33 +0530 Subject: [PATCH 5/8] Update heap_generic.py --- data_structures/heap/heap_generic.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index 15469fe8ba1a..219d051bdf9f 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -110,11 +110,11 @@ def insert_item(self, item: int, item_value: int) -> None: self.size += 1 self._heapify_up(self.size - 1) - def get_top(self) -> int | None: + def get_top(self) -> tuple | None: """Returns top item tuple (Calculated value, item) from heap if present""" return self.arr[0] if self.size else None - def extract_top(self) -> int | None: + def extract_top(self) -> tuple | None: """ Return top item tuple (Calculated value, item) from heap and removes it as well if present From e1b9579026b150d983b8ba0a90e296609af056db Mon Sep 17 00:00:00 2001 From: Saksham Chawla <51916697+saksham-chawla@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:35:08 +0530 Subject: [PATCH 6/8] Update heap_generic.py --- data_structures/heap/heap_generic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index 219d051bdf9f..4a9287d98f30 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -4,7 +4,7 @@ class Heap: accordingly. """ - def __init__(self, key: int | None = None) -> None: + def __init__(self, key=None) -> None: # Stores actual heap items. self.arr: list = list() # Stores indexes of each item for supporting updates and deletion. From 9eefc674e7868afcb8b90256825a4617734dab4a Mon Sep 17 00:00:00 2001 From: Saksham Chawla <51916697+saksham-chawla@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:37:10 +0530 Subject: [PATCH 7/8] Update heap_generic.py --- data_structures/heap/heap_generic.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index 4a9287d98f30..dc206bc09f46 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -1,10 +1,12 @@ +from typing import Callable + class Heap: """ A generic Heap class, can be used as min or max by passing the key function accordingly. """ - def __init__(self, key=None) -> None: + def __init__(self, key: Callable | None =None) -> None: # Stores actual heap items. self.arr: list = list() # Stores indexes of each item for supporting updates and deletion. From b3a7617ff2c408fd1370e36d8780afeaf7257b60 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:08:05 +0000 Subject: [PATCH 8/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/heap/heap_generic.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/data_structures/heap/heap_generic.py b/data_structures/heap/heap_generic.py index dc206bc09f46..e7831cd45b43 100644 --- a/data_structures/heap/heap_generic.py +++ b/data_structures/heap/heap_generic.py @@ -1,4 +1,5 @@ -from typing import Callable +from collections.abc import Callable + class Heap: """ @@ -6,7 +7,7 @@ class Heap: accordingly. """ - def __init__(self, key: Callable | None =None) -> None: + def __init__(self, key: Callable | None = None) -> None: # Stores actual heap items. self.arr: list = list() # Stores indexes of each item for supporting updates and deletion.