From 32d8fdec74dbf8297155aeddef8c0931ee1d460b Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 14:16:20 +0530 Subject: [PATCH 1/9] Update ternary_search.py --- searches/ternary_search.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/searches/ternary_search.py b/searches/ternary_search.py index 01e437723473..f6371574d690 100644 --- a/searches/ternary_search.py +++ b/searches/ternary_search.py @@ -89,8 +89,8 @@ def ite_ternary_search(array: list[int], target: int) -> int: if right - left < precision: return lin_search(left, right, array, target) - one_third = (left + right) / 3 + 1 - two_third = 2 * (left + right) / 3 + 1 + one_third = (left + right) // 3 + 1 + two_third = 2 * (left + right) // 3 + 1 if array[one_third] == target: return one_third @@ -138,8 +138,8 @@ def rec_ternary_search(left: int, right: int, array: list[int], target: int) -> if left < right: if right - left < precision: return lin_search(left, right, array, target) - one_third = (left + right) / 3 + 1 - two_third = 2 * (left + right) / 3 + 1 + one_third = (left + right) // 3 + 1 + two_third = 2 * (left + right) // 3 + 1 if array[one_third] == target: return one_third From 0ef0aacfa340c32e7b37213848a661bbffe20d09 Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 14:16:44 +0530 Subject: [PATCH 2/9] Update mypy.ini --- mypy.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy.ini b/mypy.ini index ce7c262ab059..94fb125fb124 100644 --- a/mypy.ini +++ b/mypy.ini @@ -2,4 +2,4 @@ ignore_missing_imports = True install_types = True non_interactive = True -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) +exclude = (matrix_operation.py|other/least_recently_used.py|other/lfu_cache.py|other/lru_cache.py) From 0e63812f0fe86140d57e7b5784535376c69ade67 Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 14:48:08 +0530 Subject: [PATCH 3/9] Update simulated_annealing.py --- searches/simulated_annealing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/searches/simulated_annealing.py b/searches/simulated_annealing.py index 2aa980be7748..00b6d31cb623 100644 --- a/searches/simulated_annealing.py +++ b/searches/simulated_annealing.py @@ -3,7 +3,7 @@ import random from .hill_climbing import SearchProblem - +from typing import Any def simulated_annealing( search_prob, @@ -16,7 +16,7 @@ def simulated_annealing( start_temperate: float = 100, rate_of_decrease: float = 0.01, threshold_temp: float = 1, -) -> SearchProblem: +) -> Any: """ Implementation of the simulated annealing algorithm. We start with a given state, find all its neighbors. Pick a random neighbor, if that neighbor improves the From a556dfce0cf7a0bc91936f2a736f19629c5d6e7d Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 14:49:13 +0530 Subject: [PATCH 4/9] Update ternary_search.py --- searches/ternary_search.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/searches/ternary_search.py b/searches/ternary_search.py index f6371574d690..9830cce36000 100644 --- a/searches/ternary_search.py +++ b/searches/ternary_search.py @@ -157,6 +157,10 @@ def rec_ternary_search(left: int, right: int, array: list[int], target: int) -> if __name__ == "__main__": + import doctest + + doctest.testmod() + user_input = input("Enter numbers separated by comma:\n").strip() collection = [int(item.strip()) for item in user_input.split(",")] assert collection == sorted(collection), f"List must be ordered.\n{collection}." From e9b75e3cdade7f62903a39456ba305814551df05 Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 14:53:27 +0530 Subject: [PATCH 5/9] formatting --- searches/simulated_annealing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/searches/simulated_annealing.py b/searches/simulated_annealing.py index 00b6d31cb623..f25eb394a9ec 100644 --- a/searches/simulated_annealing.py +++ b/searches/simulated_annealing.py @@ -5,6 +5,7 @@ from .hill_climbing import SearchProblem from typing import Any + def simulated_annealing( search_prob, find_max: bool = True, From 1605dfc32331f7ce6deb1ab14d8d1275a1ec658f Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 14:56:12 +0530 Subject: [PATCH 6/9] formatting --- searches/simulated_annealing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/searches/simulated_annealing.py b/searches/simulated_annealing.py index f25eb394a9ec..ad29559f1b8d 100644 --- a/searches/simulated_annealing.py +++ b/searches/simulated_annealing.py @@ -1,9 +1,9 @@ # https://en.wikipedia.org/wiki/Simulated_annealing import math import random +from typing import Any from .hill_climbing import SearchProblem -from typing import Any def simulated_annealing( From 99215e6d5ba4004d6ebad38080cf9e460f5467af Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 21:01:57 +0530 Subject: [PATCH 7/9] Update matrix_operation.py --- matrix/matrix_operation.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index dca01f9c3183..62e69ba4377b 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -3,6 +3,7 @@ """ from __future__ import annotations +from typing import Optional def add(*matrix_s: list[list]) -> list[list]: @@ -18,6 +19,7 @@ def add(*matrix_s: list[list]) -> list[list]: for i in matrix_s[1:]: _verify_matrix_sizes(matrix_s[0], i) return [[sum(t) for t in zip(*m)] for m in zip(*matrix_s)] + return [] def subtract(matrix_a: list[list], matrix_b: list[list]) -> list[list]: @@ -33,9 +35,10 @@ def subtract(matrix_a: list[list], matrix_b: list[list]) -> list[list]: and _verify_matrix_sizes(matrix_a, matrix_b) ): return [[i - j for i, j in zip(*m)] for m in zip(matrix_a, matrix_b)] + return [] -def scalar_multiply(matrix: list[list], n: int) -> list[list]: +def scalar_multiply(matrix: list[list], n: int | float) -> list[list]: """ >>> scalar_multiply([[1,2],[3,4]],5) [[5, 10], [15, 20]] @@ -79,7 +82,7 @@ def identity(n: int) -> list[list]: return [[int(row == column) for column in range(n)] for row in range(n)] -def transpose(matrix: list[list], return_map: bool = True) -> list[list]: +def transpose(matrix: list[list], return_map: bool = True) -> list[list] | map[list]: """ >>> transpose([[1,2],[3,4]]) # doctest: +ELLIPSIS list[list]: return map(list, zip(*matrix)) else: return list(map(list, zip(*matrix))) + return [] def minor(matrix: list[list], row: int, column: int) -> list[list]: @@ -102,7 +106,7 @@ def minor(matrix: list[list], row: int, column: int) -> list[list]: return [row[:column] + row[column + 1 :] for row in minor] -def determinant(matrix: list[list]) -> int: +def determinant(matrix: list[list]) -> int | float: """ >>> determinant([[1, 2], [3, 4]]) -2 @@ -118,7 +122,7 @@ def determinant(matrix: list[list]) -> int: ) -def inverse(matrix: list[list]) -> list[list]: +def inverse(matrix: list[list]) -> Optional[list[list]]: """ >>> inverse([[1, 2], [3, 4]]) [[-2.0, 1.0], [1.5, -0.5]] @@ -138,21 +142,20 @@ def inverse(matrix: list[list]) -> list[list]: [x * (-1) ** (row + col) for col, x in enumerate(matrix_minor[row])] for row in range(len(matrix)) ] - adjugate = transpose(cofactors) + adjugate = list(transpose(cofactors)) return scalar_multiply(adjugate, 1 / det) def _check_not_integer(matrix: list[list]) -> bool: if not isinstance(matrix, int) and not isinstance(matrix[0], int): return True - raise TypeError("Expected a matrix, got int/list instead") + return False - -def _shape(matrix: list[list]) -> list: +def _shape(matrix: list[list]) -> tuple: return len(matrix), len(matrix[0]) -def _verify_matrix_sizes(matrix_a: list[list], matrix_b: list[list]) -> tuple[list]: +def _verify_matrix_sizes(matrix_a: list[list], matrix_b: list[list]) -> tuple[tuple, tuple]: shape = _shape(matrix_a) + _shape(matrix_b) if shape[0] != shape[3] or shape[1] != shape[2]: raise ValueError( From faeef756b29c658a3148bfddf3eb8dae8bb79077 Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 21:12:13 +0530 Subject: [PATCH 8/9] Update matrix_operation.py --- matrix/matrix_operation.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index 62e69ba4377b..0ff4eb8ec431 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -1,9 +1,10 @@ + + """ Functions for 2D matrix operations """ from __future__ import annotations -from typing import Optional def add(*matrix_s: list[list]) -> list[list]: @@ -19,7 +20,6 @@ def add(*matrix_s: list[list]) -> list[list]: for i in matrix_s[1:]: _verify_matrix_sizes(matrix_s[0], i) return [[sum(t) for t in zip(*m)] for m in zip(*matrix_s)] - return [] def subtract(matrix_a: list[list], matrix_b: list[list]) -> list[list]: @@ -35,10 +35,9 @@ def subtract(matrix_a: list[list], matrix_b: list[list]) -> list[list]: and _verify_matrix_sizes(matrix_a, matrix_b) ): return [[i - j for i, j in zip(*m)] for m in zip(matrix_a, matrix_b)] - return [] -def scalar_multiply(matrix: list[list], n: int | float) -> list[list]: +def scalar_multiply(matrix: list[list], n: int) -> list[list]: """ >>> scalar_multiply([[1,2],[3,4]],5) [[5, 10], [15, 20]] @@ -82,7 +81,7 @@ def identity(n: int) -> list[list]: return [[int(row == column) for column in range(n)] for row in range(n)] -def transpose(matrix: list[list], return_map: bool = True) -> list[list] | map[list]: +def transpose(matrix: list[list], return_map: bool = True) -> list[list]: """ >>> transpose([[1,2],[3,4]]) # doctest: +ELLIPSIS list[list] | map[l return map(list, zip(*matrix)) else: return list(map(list, zip(*matrix))) - return [] def minor(matrix: list[list], row: int, column: int) -> list[list]: @@ -106,7 +104,7 @@ def minor(matrix: list[list], row: int, column: int) -> list[list]: return [row[:column] + row[column + 1 :] for row in minor] -def determinant(matrix: list[list]) -> int | float: +def determinant(matrix: list[list]) -> int: """ >>> determinant([[1, 2], [3, 4]]) -2 @@ -122,7 +120,7 @@ def determinant(matrix: list[list]) -> int | float: ) -def inverse(matrix: list[list]) -> Optional[list[list]]: +def inverse(matrix: list[list]) -> list[list]: """ >>> inverse([[1, 2], [3, 4]]) [[-2.0, 1.0], [1.5, -0.5]] @@ -142,20 +140,21 @@ def inverse(matrix: list[list]) -> Optional[list[list]]: [x * (-1) ** (row + col) for col, x in enumerate(matrix_minor[row])] for row in range(len(matrix)) ] - adjugate = list(transpose(cofactors)) + adjugate = transpose(cofactors) return scalar_multiply(adjugate, 1 / det) def _check_not_integer(matrix: list[list]) -> bool: if not isinstance(matrix, int) and not isinstance(matrix[0], int): return True - return False + raise TypeError("Expected a matrix, got int/list instead") + -def _shape(matrix: list[list]) -> tuple: +def _shape(matrix: list[list]) -> list: return len(matrix), len(matrix[0]) -def _verify_matrix_sizes(matrix_a: list[list], matrix_b: list[list]) -> tuple[tuple, tuple]: +def _verify_matrix_sizes(matrix_a: list[list], matrix_b: list[list]) -> tuple[list]: shape = _shape(matrix_a) + _shape(matrix_b) if shape[0] != shape[3] or shape[1] != shape[2]: raise ValueError( From 9845c12dd5bf1294dbaacbba6c7beb7b765bd83d Mon Sep 17 00:00:00 2001 From: Rohan R Bharadwaj Date: Tue, 9 Nov 2021 21:12:35 +0530 Subject: [PATCH 9/9] Update matrix_operation.py --- matrix/matrix_operation.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index 0ff4eb8ec431..dca01f9c3183 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -1,5 +1,3 @@ - - """ Functions for 2D matrix operations """