From ed4c92d98af4b96605a0463bc94143b9c771a7cd Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Mon, 8 Nov 2021 23:48:30 +0530 Subject: [PATCH] [mypy] Type annotations for graphs directory (#5798) * Type annotations for `breadth_first_search.py` * Type annotations for `breadth_first_search_2.py` * Remove from excluded in mypy.ini * Add doctest.testmod() * Type annotations for `graphs/check_cycle.py` * Type annotations for `graphs/greedy_min_vertex_cover.py` * Remove from excluded in mypy.ini --- graphs/breadth_first_search.py | 2 +- graphs/breadth_first_search_2.py | 5 ++++- graphs/check_cycle.py | 6 ++---- graphs/greedy_min_vertex_cover.py | 9 ++++----- mypy.ini | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/graphs/breadth_first_search.py b/graphs/breadth_first_search.py index 9264f57b4..171d3875f 100644 --- a/graphs/breadth_first_search.py +++ b/graphs/breadth_first_search.py @@ -53,7 +53,7 @@ class Graph: visited = set() # create a first in first out queue to store all the vertices for BFS - queue = Queue() + queue: Queue = Queue() # mark the source node as visited and enqueue it visited.add(start_vertex) diff --git a/graphs/breadth_first_search_2.py b/graphs/breadth_first_search_2.py index 4c8b69faf..2f060a90d 100644 --- a/graphs/breadth_first_search_2.py +++ b/graphs/breadth_first_search_2.py @@ -32,7 +32,7 @@ def breadth_first_search(graph: dict, start: str) -> set[str]: 'ABCDEF' """ explored = {start} - queue = Queue() + queue: Queue = Queue() queue.put(start) while not queue.empty(): v = queue.get() @@ -44,4 +44,7 @@ def breadth_first_search(graph: dict, start: str) -> set[str]: if __name__ == "__main__": + import doctest + + doctest.testmod() print(breadth_first_search(G, "A")) diff --git a/graphs/check_cycle.py b/graphs/check_cycle.py index 71d42b468..dcc864988 100644 --- a/graphs/check_cycle.py +++ b/graphs/check_cycle.py @@ -6,16 +6,15 @@ Program to check if a cycle is present in a given graph def check_cycle(graph: dict) -> bool: """ Returns True if graph is cyclic else False - >>> check_cycle(graph={0:[], 1:[0, 3], 2:[0, 4], 3:[5], 4:[5], 5:[]}) False >>> check_cycle(graph={0:[1, 2], 1:[2], 2:[0, 3], 3:[3]}) True """ # Keep track of visited nodes - visited = set() + visited: set[int] = set() # To detect a back edge, keep track of vertices currently in the recursion stack - rec_stk = set() + rec_stk: set[int] = set() for node in graph: if node not in visited: if depth_first_search(graph, node, visited, rec_stk): @@ -27,7 +26,6 @@ def depth_first_search(graph: dict, vertex: int, visited: set, rec_stk: set) -> """ Recur for all neighbours. If any neighbour is visited and in rec_stk then graph is cyclic. - >>> graph = {0:[], 1:[0, 3], 2:[0, 4], 3:[5], 4:[5], 5:[]} >>> vertex, visited, rec_stk = 0, set(), set() >>> depth_first_search(graph, vertex, visited, rec_stk) diff --git a/graphs/greedy_min_vertex_cover.py b/graphs/greedy_min_vertex_cover.py index 056c5b89b..cdef69141 100644 --- a/graphs/greedy_min_vertex_cover.py +++ b/graphs/greedy_min_vertex_cover.py @@ -2,7 +2,6 @@ * Author: Manuel Di Lullo (https://github.com/manueldilullo) * Description: Approximization algorithm for minimum vertex cover problem. Greedy Approach. Uses graphs represented with an adjacency list - URL: https://mathworld.wolfram.com/MinimumVertexCover.html URL: https://cs.stackexchange.com/questions/129017/greedy-algorithm-for-vertex-cover """ @@ -10,7 +9,7 @@ URL: https://cs.stackexchange.com/questions/129017/greedy-algorithm-for-vertex-c import heapq -def greedy_min_vertex_cover(graph: dict) -> set: +def greedy_min_vertex_cover(graph: dict) -> set[int]: """ Greedy APX Algorithm for min Vertex Cover @input: graph (graph stored in an adjacency list where each vertex @@ -21,7 +20,7 @@ def greedy_min_vertex_cover(graph: dict) -> set: {0, 1, 2, 4} """ # queue used to store nodes and their rank - queue = [] + queue: list[list] = [] # for each node and his adjacency list add them and the rank of the node to queue # using heapq module the queue will be filled like a Priority Queue @@ -61,5 +60,5 @@ if __name__ == "__main__": doctest.testmod() - # graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]} - # print(f"Minimum vertex cover:\n{greedy_min_vertex_cover(graph)}") + graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]} + print(f"Minimum vertex cover:\n{greedy_min_vertex_cover(graph)}") diff --git a/mypy.ini b/mypy.ini index 429c6804d..ce7c262ab 100644 --- a/mypy.ini +++ b/mypy.ini @@ -2,4 +2,4 @@ ignore_missing_imports = True install_types = True non_interactive = True -exclude = (graphs/breadth_first_search.py|graphs/breadth_first_search_2.py|graphs/check_cycle.py|graphs/greedy_min_vertex_cover.py|matrix_operation.py|other/least_recently_used.py|other/lfu_cache.py|other/lru_cache.py|searches/simulated_annealing.py|searches/ternary_search.py) +exclude = (matrix_operation.py|other/least_recently_used.py|other/lfu_cache.py|other/lru_cache.py|searches/simulated_annealing.py|searches/ternary_search.py)