From f5ed22755397c5d5d9826b6a78c4cf39886782ca Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 2 Apr 2024 19:59:41 +0300 Subject: [PATCH 01/10] Enable ruff RUF005 rule --- data_structures/binary_tree/binary_search_tree.py | 2 +- dynamic_programming/subset_generation.py | 2 +- maths/odd_sieve.py | 2 +- pyproject.toml | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/data_structures/binary_tree/binary_search_tree.py b/data_structures/binary_tree/binary_search_tree.py index 090e3e25fe6d..32194ddc2043 100644 --- a/data_structures/binary_tree/binary_search_tree.py +++ b/data_structures/binary_tree/binary_search_tree.py @@ -336,7 +336,7 @@ def inorder(curr_node: Node | None) -> list[Node]: """ node_list = [] if curr_node is not None: - node_list = inorder(curr_node.left) + [curr_node] + inorder(curr_node.right) + node_list = [*inorder(curr_node.left), curr_node, *inorder(curr_node.right)] return node_list diff --git a/dynamic_programming/subset_generation.py b/dynamic_programming/subset_generation.py index 1be412b9374d..d490bca737ba 100644 --- a/dynamic_programming/subset_generation.py +++ b/dynamic_programming/subset_generation.py @@ -45,7 +45,7 @@ def subset_combinations(elements: list[int], n: int) -> list: for i in range(1, r + 1): for j in range(i, 0, -1): for prev_combination in dp[j - 1]: - dp[j].append(tuple(prev_combination) + (elements[i - 1],)) + dp[j].append((*prev_combination, elements[i - 1])) try: return sorted(dp[n]) diff --git a/maths/odd_sieve.py b/maths/odd_sieve.py index 60e92921a94c..06605ca54296 100644 --- a/maths/odd_sieve.py +++ b/maths/odd_sieve.py @@ -33,7 +33,7 @@ def odd_sieve(num: int) -> list[int]: 0, ceil((num - i_squared) / (i << 1)) ) - return [2] + list(compress(range(3, num, 2), sieve)) + return [2, *list(compress(range(3, num, 2), sieve))] if __name__ == "__main__": diff --git a/pyproject.toml b/pyproject.toml index 65a0754d678c..3a012203afa2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,10 @@ lint.ignore = [ # `ruff rule S101` for a description of that rule "PLW2901", # PLW2901: Redefined loop variable -- FIX ME "PT011", # `pytest.raises(Exception)` is too broad, set the `match` parameter or use a more specific exception "PT018", # Assertion should be broken down into multiple parts - "RUF00", # Ambiguous unicode character and other rules + "RUF001", # String contains ambiguous {}. Did you mean {}? + "RUF002", # Docstring contains ambiguous {}. Did you mean {}? + "RUF003", # Comment contains ambiguous {}. Did you mean {}? + "RUF007", # Prefer itertools.pairwise() over zip() when iterating over successive pairs "S101", # Use of `assert` detected -- DO NOT FIX "S113", # Probable use of requests call without timeout -- FIX ME "S311", # Standard pseudo-random generators are not suitable for cryptographic purposes -- FIX ME From ce75a040213ae2c5e4eed5b25f120c9dfb300954 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 2 Apr 2024 20:07:33 +0300 Subject: [PATCH 02/10] Enable ruff RUF007 rule --- data_structures/linked_list/skip_list.py | 3 ++- pyproject.toml | 1 - sorts/bead_sort.py | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/data_structures/linked_list/skip_list.py b/data_structures/linked_list/skip_list.py index 88d3e0daddf0..13e9a94a8698 100644 --- a/data_structures/linked_list/skip_list.py +++ b/data_structures/linked_list/skip_list.py @@ -5,6 +5,7 @@ from __future__ import annotations +from itertools import pairwise from random import random from typing import Generic, TypeVar @@ -389,7 +390,7 @@ def traverse_keys(node): def test_iter_always_yields_sorted_values(): def is_sorted(lst): - return all(next_item >= item for item, next_item in zip(lst, lst[1:])) + return all(next_item >= item for item, next_item in pairwise(lst)) skip_list = SkipList() for i in range(10): diff --git a/pyproject.toml b/pyproject.toml index 3a012203afa2..e82f43e3df87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,6 @@ lint.ignore = [ # `ruff rule S101` for a description of that rule "RUF001", # String contains ambiguous {}. Did you mean {}? "RUF002", # Docstring contains ambiguous {}. Did you mean {}? "RUF003", # Comment contains ambiguous {}. Did you mean {}? - "RUF007", # Prefer itertools.pairwise() over zip() when iterating over successive pairs "S101", # Use of `assert` detected -- DO NOT FIX "S113", # Probable use of requests call without timeout -- FIX ME "S311", # Standard pseudo-random generators are not suitable for cryptographic purposes -- FIX ME diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index e51173643d81..51133f7a2a64 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -3,6 +3,8 @@ https://en.wikipedia.org/wiki/Bead_sort """ +from itertools import pairwise + def bead_sort(sequence: list) -> list: """ @@ -31,7 +33,7 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): + for i, (rod_upper, rod_lower) in enumerate(pairwise(sequence)): if rod_upper > rod_lower: sequence[i] -= rod_upper - rod_lower sequence[i + 1] += rod_upper - rod_lower From 331c027fad615cd65719024fd802e289c5302d1d Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 2 Apr 2024 22:40:42 +0300 Subject: [PATCH 03/10] Fix --- sorts/bead_sort.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 51133f7a2a64..8ce0619fd573 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -3,8 +3,6 @@ https://en.wikipedia.org/wiki/Bead_sort """ -from itertools import pairwise - def bead_sort(sequence: list) -> list: """ @@ -33,7 +31,7 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i, (rod_upper, rod_lower) in enumerate(pairwise(sequence)): + for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): # noqa: RUF007 if rod_upper > rod_lower: sequence[i] -= rod_upper - rod_lower sequence[i + 1] += rod_upper - rod_lower From 0135da15a07f425838019c6deceb54980f26d472 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 2 Apr 2024 22:47:01 +0300 Subject: [PATCH 04/10] Fix --- sorts/bead_sort.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 8ce0619fd573..d00a4ad64564 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -31,10 +31,9 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): # noqa: RUF007 - if rod_upper > rod_lower: - sequence[i] -= rod_upper - rod_lower - sequence[i + 1] += rod_upper - rod_lower + for i in range(len(sequence)): + if sequence[i] > sequence[i + 1]: + sequence[i], sequence[i + 1] = sequence[i + 1], sequence[i] return sequence From bc2225df45b60e509c64c1184a3a2788b4c83dc1 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 2 Apr 2024 22:47:27 +0300 Subject: [PATCH 05/10] Fix --- sorts/bead_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index d00a4ad64564..6f33d129d8c4 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -31,7 +31,7 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i in range(len(sequence)): + for i in range(len(sequence) - 1): if sequence[i] > sequence[i + 1]: sequence[i], sequence[i + 1] = sequence[i + 1], sequence[i] return sequence From 2c1816bf102eeec5aa39cb2f1806afb64b672d14 Mon Sep 17 00:00:00 2001 From: Maxim Smolskiy Date: Tue, 9 Apr 2024 01:57:38 +0300 Subject: [PATCH 06/10] Update sorts/bead_sort.py Co-authored-by: Christian Clauss --- sorts/bead_sort.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 6f33d129d8c4..2e6fa516140e 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -31,9 +31,9 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i in range(len(sequence) - 1): - if sequence[i] > sequence[i + 1]: - sequence[i], sequence[i + 1] = sequence[i + 1], sequence[i] + for i, (rod_upper, rod_lower) in enumerate(pairwise(sequence)): + if rod_upper > rod_lower: + sequence[i], sequence[i + 1] = rod_lower, rod_upper return sequence From b10e5632e4479c2117c8b67113b5aa6545f127aa Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 9 Apr 2024 02:00:34 +0300 Subject: [PATCH 07/10] Update sorts/bead_sort.py --- sorts/bead_sort.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 2e6fa516140e..abc3f81abb96 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -3,6 +3,8 @@ https://en.wikipedia.org/wiki/Bead_sort """ +from itertools import pairwise + def bead_sort(sequence: list) -> list: """ From 0e2024540d238bd28ac00a4921139c03a74fd2c5 Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 9 Apr 2024 02:07:13 +0300 Subject: [PATCH 08/10] Revert "Update sorts/bead_sort.py" This reverts commit b10e5632e4479c2117c8b67113b5aa6545f127aa. --- sorts/bead_sort.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index abc3f81abb96..2e6fa516140e 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -3,8 +3,6 @@ https://en.wikipedia.org/wiki/Bead_sort """ -from itertools import pairwise - def bead_sort(sequence: list) -> list: """ From 33f4a498980179b8685be08f8a6e9e580210bc8d Mon Sep 17 00:00:00 2001 From: MaximSmolskiy Date: Tue, 9 Apr 2024 02:07:39 +0300 Subject: [PATCH 09/10] Revert "Update sorts/bead_sort.py" This reverts commit 2c1816bf102eeec5aa39cb2f1806afb64b672d14. --- sorts/bead_sort.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 2e6fa516140e..6f33d129d8c4 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -31,9 +31,9 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i, (rod_upper, rod_lower) in enumerate(pairwise(sequence)): - if rod_upper > rod_lower: - sequence[i], sequence[i + 1] = rod_lower, rod_upper + for i in range(len(sequence) - 1): + if sequence[i] > sequence[i + 1]: + sequence[i], sequence[i + 1] = sequence[i + 1], sequence[i] return sequence From 04d853ab9d0fb199af95f23e3b227d1ca24cd66f Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sat, 20 Apr 2024 16:16:29 +0200 Subject: [PATCH 10/10] Update sorts/bead_sort.py --- sorts/bead_sort.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sorts/bead_sort.py b/sorts/bead_sort.py index 6f33d129d8c4..8ce0619fd573 100644 --- a/sorts/bead_sort.py +++ b/sorts/bead_sort.py @@ -31,9 +31,10 @@ def bead_sort(sequence: list) -> list: if any(not isinstance(x, int) or x < 0 for x in sequence): raise TypeError("Sequence must be list of non-negative integers") for _ in range(len(sequence)): - for i in range(len(sequence) - 1): - if sequence[i] > sequence[i + 1]: - sequence[i], sequence[i + 1] = sequence[i + 1], sequence[i] + for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])): # noqa: RUF007 + if rod_upper > rod_lower: + sequence[i] -= rod_upper - rod_lower + sequence[i + 1] += rod_upper - rod_lower return sequence