Skip to content

Commit 30fdf8c

Browse files
committed
Merge branch 'master' into fix-gaussian_elimination_pivoting
2 parents b01a53b + e6790b5 commit 30fdf8c

File tree

66 files changed

+714
-440
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+714
-440
lines changed

.pre-commit-config.yaml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,20 @@ repos:
1616
- id: auto-walrus
1717

1818
- repo: https://github.com/astral-sh/ruff-pre-commit
19-
rev: v0.4.2
19+
rev: v0.5.7
2020
hooks:
2121
- id: ruff
2222
- id: ruff-format
2323

2424
- repo: https://github.com/codespell-project/codespell
25-
rev: v2.2.6
25+
rev: v2.3.0
2626
hooks:
2727
- id: codespell
2828
additional_dependencies:
2929
- tomli
3030

3131
- repo: https://github.com/tox-dev/pyproject-fmt
32-
rev: "1.8.0"
32+
rev: "2.2.1"
3333
hooks:
3434
- id: pyproject-fmt
3535

@@ -42,15 +42,16 @@ repos:
4242
pass_filenames: false
4343

4444
- repo: https://github.com/abravalheri/validate-pyproject
45-
rev: v0.16
45+
rev: v0.18
4646
hooks:
4747
- id: validate-pyproject
4848

4949
- repo: https://github.com/pre-commit/mirrors-mypy
50-
rev: v1.10.0
50+
rev: v1.11.1
5151
hooks:
5252
- id: mypy
5353
args:
54+
- --explicit-package-bases
5455
- --ignore-missing-imports
5556
- --install-types # See mirrors-mypy README.md
5657
- --non-interactive

DIRECTORY.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -540,8 +540,7 @@
540540
* [Lu Decomposition](linear_algebra/lu_decomposition.py)
541541
* Src
542542
* [Conjugate Gradient](linear_algebra/src/conjugate_gradient.py)
543-
* Gaussian Elimination Pivoting
544-
* [Gaussian Elimination Pivoting](linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py)
543+
* [Gaussian Elimination Pivoting](linear_algebra/src/gaussian_elimination_pivoting.py)
545544
* [Lib](linear_algebra/src/lib.py)
546545
* [Polynom For Points](linear_algebra/src/polynom_for_points.py)
547546
* [Power Iteration](linear_algebra/src/power_iteration.py)
@@ -661,7 +660,6 @@
661660
* [Manhattan Distance](maths/manhattan_distance.py)
662661
* [Matrix Exponentiation](maths/matrix_exponentiation.py)
663662
* [Max Sum Sliding Window](maths/max_sum_sliding_window.py)
664-
* [Median Of Two Arrays](maths/median_of_two_arrays.py)
665663
* [Minkowski Distance](maths/minkowski_distance.py)
666664
* [Mobius Function](maths/mobius_function.py)
667665
* [Modular Division](maths/modular_division.py)
@@ -864,6 +862,7 @@
864862
* [Newtons Second Law Of Motion](physics/newtons_second_law_of_motion.py)
865863
* [Photoelectric Effect](physics/photoelectric_effect.py)
866864
* [Potential Energy](physics/potential_energy.py)
865+
* [Rainfall Intensity](physics/rainfall_intensity.py)
867866
* [Reynolds Number](physics/reynolds_number.py)
868867
* [Rms Speed Of Molecule](physics/rms_speed_of_molecule.py)
869868
* [Shear Stress](physics/shear_stress.py)
@@ -1260,6 +1259,7 @@
12601259
* [Can String Be Rearranged As Palindrome](strings/can_string_be_rearranged_as_palindrome.py)
12611260
* [Capitalize](strings/capitalize.py)
12621261
* [Check Anagrams](strings/check_anagrams.py)
1262+
* [Count Vowels](strings/count_vowels.py)
12631263
* [Credit Card Validator](strings/credit_card_validator.py)
12641264
* [Damerau Levenshtein Distance](strings/damerau_levenshtein_distance.py)
12651265
* [Detecting English Programmatically](strings/detecting_english_programmatically.py)

audio_filters/show_response.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from abc import abstractmethod
34
from math import pi
45
from typing import Protocol
56

@@ -8,14 +9,14 @@
89

910

1011
class FilterType(Protocol):
12+
@abstractmethod
1113
def process(self, sample: float) -> float:
1214
"""
1315
Calculate y[n]
1416
1517
>>> issubclass(FilterType, Protocol)
1618
True
1719
"""
18-
return 0.0
1920

2021

2122
def get_bounds(

backtracking/all_permutations.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,42 @@ def create_state_space_tree(
2323
Creates a state space tree to iterate through each branch using DFS.
2424
We know that each state has exactly len(sequence) - index children.
2525
It terminates when it reaches the end of the given sequence.
26+
27+
:param sequence: The input sequence for which permutations are generated.
28+
:param current_sequence: The current permutation being built.
29+
:param index: The current index in the sequence.
30+
:param index_used: list to track which elements are used in permutation.
31+
32+
Example 1:
33+
>>> sequence = [1, 2, 3]
34+
>>> current_sequence = []
35+
>>> index_used = [False, False, False]
36+
>>> create_state_space_tree(sequence, current_sequence, 0, index_used)
37+
[1, 2, 3]
38+
[1, 3, 2]
39+
[2, 1, 3]
40+
[2, 3, 1]
41+
[3, 1, 2]
42+
[3, 2, 1]
43+
44+
Example 2:
45+
>>> sequence = ["A", "B", "C"]
46+
>>> current_sequence = []
47+
>>> index_used = [False, False, False]
48+
>>> create_state_space_tree(sequence, current_sequence, 0, index_used)
49+
['A', 'B', 'C']
50+
['A', 'C', 'B']
51+
['B', 'A', 'C']
52+
['B', 'C', 'A']
53+
['C', 'A', 'B']
54+
['C', 'B', 'A']
55+
56+
Example 3:
57+
>>> sequence = [1]
58+
>>> current_sequence = []
59+
>>> index_used = [False]
60+
>>> create_state_space_tree(sequence, current_sequence, 0, index_used)
61+
[1]
2662
"""
2763

2864
if index == len(sequence):

backtracking/all_subsequences.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,56 @@ def create_state_space_tree(
2222
Creates a state space tree to iterate through each branch using DFS.
2323
We know that each state has exactly two children.
2424
It terminates when it reaches the end of the given sequence.
25+
26+
:param sequence: The input sequence for which subsequences are generated.
27+
:param current_subsequence: The current subsequence being built.
28+
:param index: The current index in the sequence.
29+
30+
Example:
31+
>>> sequence = [3, 2, 1]
32+
>>> current_subsequence = []
33+
>>> create_state_space_tree(sequence, current_subsequence, 0)
34+
[]
35+
[1]
36+
[2]
37+
[2, 1]
38+
[3]
39+
[3, 1]
40+
[3, 2]
41+
[3, 2, 1]
42+
43+
>>> sequence = ["A", "B"]
44+
>>> current_subsequence = []
45+
>>> create_state_space_tree(sequence, current_subsequence, 0)
46+
[]
47+
['B']
48+
['A']
49+
['A', 'B']
50+
51+
>>> sequence = []
52+
>>> current_subsequence = []
53+
>>> create_state_space_tree(sequence, current_subsequence, 0)
54+
[]
55+
56+
>>> sequence = [1, 2, 3, 4]
57+
>>> current_subsequence = []
58+
>>> create_state_space_tree(sequence, current_subsequence, 0)
59+
[]
60+
[4]
61+
[3]
62+
[3, 4]
63+
[2]
64+
[2, 4]
65+
[2, 3]
66+
[2, 3, 4]
67+
[1]
68+
[1, 4]
69+
[1, 3]
70+
[1, 3, 4]
71+
[1, 2]
72+
[1, 2, 4]
73+
[1, 2, 3]
74+
[1, 2, 3, 4]
2575
"""
2676

2777
if index == len(sequence):
@@ -35,7 +85,7 @@ def create_state_space_tree(
3585

3686

3787
if __name__ == "__main__":
38-
seq: list[Any] = [3, 1, 2, 4]
88+
seq: list[Any] = [1, 2, 3]
3989
generate_all_subsequences(seq)
4090

4191
seq.clear()

backtracking/knight_tour.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ def get_valid_pos(position: tuple[int, int], n: int) -> list[tuple[int, int]]:
2424
]
2525
permissible_positions = []
2626

27-
for position in positions:
28-
y_test, x_test = position
27+
for inner_position in positions:
28+
y_test, x_test = inner_position
2929
if 0 <= y_test < n and 0 <= x_test < n:
30-
permissible_positions.append(position)
30+
permissible_positions.append(inner_position)
3131

3232
return permissible_positions
3333

bit_manipulation/binary_and_operator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def binary_and(a: int, b: int) -> str:
2626
>>> binary_and(0, 1.1)
2727
Traceback (most recent call last):
2828
...
29-
TypeError: 'float' object cannot be interpreted as an integer
29+
ValueError: Unknown format code 'b' for object of type 'float'
3030
>>> binary_and("0", "1")
3131
Traceback (most recent call last):
3232
...
@@ -35,8 +35,8 @@ def binary_and(a: int, b: int) -> str:
3535
if a < 0 or b < 0:
3636
raise ValueError("the value of both inputs must be positive")
3737

38-
a_binary = str(bin(a))[2:] # remove the leading "0b"
39-
b_binary = str(bin(b))[2:] # remove the leading "0b"
38+
a_binary = format(a, "b")
39+
b_binary = format(b, "b")
4040

4141
max_len = max(len(a_binary), len(b_binary))
4242

computer_vision/haralick_descriptors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ def transform(
141141

142142
center_x, center_y = (x // 2 for x in kernel.shape)
143143

144-
# Use padded image when applying convolotion
144+
# Use padded image when applying convolution
145145
# to not go out of bounds of the original the image
146146
transformed = np.zeros(image.shape, dtype=np.uint8)
147147
padded = np.pad(image, 1, "constant", constant_values=constant)

conversions/weight_conversion.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,12 @@ def weight_conversion(from_type: str, to_type: str, value: float) -> float:
297297
1.660540199e-23
298298
>>> weight_conversion("atomic-mass-unit","atomic-mass-unit",2)
299299
1.999999998903455
300+
>>> weight_conversion("slug", "kilogram", 1)
301+
Traceback (most recent call last):
302+
...
303+
ValueError: Invalid 'from_type' or 'to_type' value: 'slug', 'kilogram'
304+
Supported values are: kilogram, gram, milligram, metric-ton, long-ton, short-ton, \
305+
pound, stone, ounce, carrat, atomic-mass-unit
300306
"""
301307
if to_type not in KILOGRAM_CHART or from_type not in WEIGHT_TYPE_CHART:
302308
msg = (

data_structures/binary_tree/is_sorted.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ def is_sorted(self) -> bool:
8080
"""
8181
if self.left and (self.data < self.left.data or not self.left.is_sorted):
8282
return False
83-
if self.right and (self.data > self.right.data or not self.right.is_sorted):
84-
return False
85-
return True
83+
return not (
84+
self.right and (self.data > self.right.data or not self.right.is_sorted)
85+
)
8686

8787

8888
if __name__ == "__main__":

0 commit comments

Comments
 (0)