From 2647e5cda8875a234a829675865565e109cf9fa0 Mon Sep 17 00:00:00 2001 From: IsxImattI Date: Sun, 10 Nov 2024 23:50:02 +0100 Subject: [PATCH 1/8] Implemented doctests for geometry-related classes --- geometry/geometry.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/geometry/geometry.py b/geometry/geometry.py index 9e353dee17a7..71d6abdcae81 100644 --- a/geometry/geometry.py +++ b/geometry/geometry.py @@ -48,6 +48,18 @@ class Side: Side(length=5, angle=Angle(degrees=45.6), next_side=None) >>> Side(5, Angle(45.6), Side(1, Angle(2))) # doctest: +ELLIPSIS Side(length=5, angle=Angle(degrees=45.6), next_side=Side(length=1, angle=Angle(d... + >>> Side(-1) + Traceback (most recent call last): + ... + TypeError: length must be a positive numeric value. + >>> Side(5, None) + Traceback (most recent call last): + ... + TypeError: angle must be an Angle object. + >>> Side(5, Angle(90), "Invalid next_side") + Traceback (most recent call last): + ... + TypeError: next_side must be a Side or None. """ length: float @@ -162,6 +174,19 @@ class Polygon: >>> Polygon() Polygon(sides=[]) + >>> polygon = Polygon() + >>> polygon.add_side(Side(5)).get_side(0) + Side(length=5, angle=Angle(degrees=90), next_side=None) + >>> polygon.get_side(1) + Traceback (most recent call last): + ... + IndexError: list index out of range + >>> polygon.set_side(0, Side(10)).get_side(0) + Side(length=10, angle=Angle(degrees=90), next_side=None) + >>> polygon.set_side(1, Side(10)) + Traceback (most recent call last): + ... + IndexError: list assignment index out of range """ sides: list[Side] = field(default_factory=list) @@ -207,6 +232,10 @@ class Rectangle(Polygon): 30 >>> rectangle_one.area() 50 + >>> Rectangle(-5, 10) + Traceback (most recent call last): + ... + TypeError: length must be a positive numeric value. """ def __init__(self, short_side_length: float, long_side_length: float) -> None: @@ -254,6 +283,5 @@ def perimeter(self) -> float: def area(self) -> float: return super().area() - if __name__ == "__main__": __import__("doctest").testmod() From 556cd599187496a8933098a5c47665b1d6e173c1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:55:30 +0000 Subject: [PATCH 2/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- geometry/geometry.py | 1 + 1 file changed, 1 insertion(+) diff --git a/geometry/geometry.py b/geometry/geometry.py index 71d6abdcae81..a0be8eb3befc 100644 --- a/geometry/geometry.py +++ b/geometry/geometry.py @@ -283,5 +283,6 @@ def perimeter(self) -> float: def area(self) -> float: return super().area() + if __name__ == "__main__": __import__("doctest").testmod() From 46eb13ed7e7f2e34d05745c4cd022b630bcec8c3 Mon Sep 17 00:00:00 2001 From: IsxImattI Date: Mon, 11 Nov 2024 00:10:50 +0100 Subject: [PATCH 3/8] Removed unused noqa directive --- data_structures/arrays/sudoku_solver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py index a8157a520c97..bcf1c2cca12b 100644 --- a/data_structures/arrays/sudoku_solver.py +++ b/data_structures/arrays/sudoku_solver.py @@ -23,7 +23,7 @@ def cross(items_a, items_b): + [cross(rs, cs) for rs in ("ABC", "DEF", "GHI") for cs in ("123", "456", "789")] ) units = {s: [u for u in unitlist if s in u] for s in squares} -peers = {s: set(sum(units[s], [])) - {s} for s in squares} # noqa: RUF017 +peers = {s: set(sum(units[s], [])) - {s} for s in squares} def test(): From 54f02a4e2c741ba56fc6c7e172e2a66f330ada1d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:12:20 +0000 Subject: [PATCH 4/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/sudoku_solver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py index bcf1c2cca12b..a12700f6e022 100644 --- a/data_structures/arrays/sudoku_solver.py +++ b/data_structures/arrays/sudoku_solver.py @@ -23,7 +23,7 @@ def cross(items_a, items_b): + [cross(rs, cs) for rs in ("ABC", "DEF", "GHI") for cs in ("123", "456", "789")] ) units = {s: [u for u in unitlist if s in u] for s in squares} -peers = {s: set(sum(units[s], [])) - {s} for s in squares} +peers = {s: set(sum(units[s], [])) - {s} for s in squares} def test(): From 3237e166ebd963ceba571a08a2c34befdbd82675 Mon Sep 17 00:00:00 2001 From: IsxImattI Date: Mon, 11 Nov 2024 00:15:49 +0100 Subject: [PATCH 5/8] refactored sudoku_solver.py --- data_structures/arrays/sudoku_solver.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py index bcf1c2cca12b..3d0e1d2fae88 100644 --- a/data_structures/arrays/sudoku_solver.py +++ b/data_structures/arrays/sudoku_solver.py @@ -23,7 +23,7 @@ def cross(items_a, items_b): + [cross(rs, cs) for rs in ("ABC", "DEF", "GHI") for cs in ("123", "456", "789")] ) units = {s: [u for u in unitlist if s in u] for s in squares} -peers = {s: set(sum(units[s], [])) - {s} for s in squares} +peers = {s: set(x for u in units[s] for x in u) - {s} for s in squares} def test(): @@ -172,7 +172,7 @@ def unitsolved(unit): def from_file(filename, sep="\n"): "Parse a file into a list of strings, separated by sep." - return open(filename).read().strip().split(sep) # noqa: SIM115 + return open(filename).read().strip().split(sep) def random_puzzle(assignments=17): From 466d9925b217f5354d9c5ddcb32bc99bcfb5b8c5 Mon Sep 17 00:00:00 2001 From: IsxImattI Date: Mon, 11 Nov 2024 00:18:55 +0100 Subject: [PATCH 6/8] refactored sudoku_solver.py --- data_structures/arrays/sudoku_solver.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py index 3d0e1d2fae88..1b2eb0f6f6a5 100644 --- a/data_structures/arrays/sudoku_solver.py +++ b/data_structures/arrays/sudoku_solver.py @@ -23,8 +23,7 @@ def cross(items_a, items_b): + [cross(rs, cs) for rs in ("ABC", "DEF", "GHI") for cs in ("123", "456", "789")] ) units = {s: [u for u in unitlist if s in u] for s in squares} -peers = {s: set(x for u in units[s] for x in u) - {s} for s in squares} - +peers = {s: {x for u in units[s] for x in u} - {s} for s in squares} def test(): "A set of unit tests." From ff1e77342c1f999cfabd3b274e9054d27bdccbcc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:19:30 +0000 Subject: [PATCH 7/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- data_structures/arrays/sudoku_solver.py | 1 + 1 file changed, 1 insertion(+) diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py index 1b2eb0f6f6a5..7603428ff80d 100644 --- a/data_structures/arrays/sudoku_solver.py +++ b/data_structures/arrays/sudoku_solver.py @@ -25,6 +25,7 @@ def cross(items_a, items_b): units = {s: [u for u in unitlist if s in u] for s in squares} peers = {s: {x for u in units[s] for x in u} - {s} for s in squares} + def test(): "A set of unit tests." assert len(squares) == 81 From f176dd002784adc1a65a47ffddaea8a7fca073b3 Mon Sep 17 00:00:00 2001 From: IsxImattI Date: Mon, 11 Nov 2024 00:23:37 +0100 Subject: [PATCH 8/8] context manager for file handling changed too in from_file function --- data_structures/arrays/sudoku_solver.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data_structures/arrays/sudoku_solver.py b/data_structures/arrays/sudoku_solver.py index 1b2eb0f6f6a5..81cc2ee13c46 100644 --- a/data_structures/arrays/sudoku_solver.py +++ b/data_structures/arrays/sudoku_solver.py @@ -171,7 +171,8 @@ def unitsolved(unit): def from_file(filename, sep="\n"): "Parse a file into a list of strings, separated by sep." - return open(filename).read().strip().split(sep) + with open(filename) as file: + return file.read().strip().split(sep) def random_puzzle(assignments=17):