From c03f16dc4c823f7a18340a45105dd40424cbe1bf Mon Sep 17 00:00:00 2001
From: MaximSmolskiy <MaximSmolskiy@users.noreply.github.com>
Date: Wed, 1 May 2024 18:58:38 +0000
Subject: [PATCH 1/4] updating DIRECTORY.md

---
 DIRECTORY.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/DIRECTORY.md b/DIRECTORY.md
index f6d6cb463faa..4a053a3f1b7f 100644
--- a/DIRECTORY.md
+++ b/DIRECTORY.md
@@ -773,6 +773,7 @@
   * [Inverse Of Matrix](matrix/inverse_of_matrix.py)
   * [Largest Square Area In Matrix](matrix/largest_square_area_in_matrix.py)
   * [Matrix Class](matrix/matrix_class.py)
+  * [Matrix Equalization](matrix/matrix_equalization.py)
   * [Matrix Multiplication Recursion](matrix/matrix_multiplication_recursion.py)
   * [Matrix Operation](matrix/matrix_operation.py)
   * [Max Area Of Island](matrix/max_area_of_island.py)

From b01a53b65e4d0392537ae8313a90e3661e478a67 Mon Sep 17 00:00:00 2001
From: MaximSmolskiy <mithridatus@mail.ru>
Date: Sun, 5 May 2024 01:28:17 +0300
Subject: [PATCH 2/4] Fix Gaussian elimination pivoting

---
 .../gaussian_elimination_pivoting.py          | 34 ++++++-------------
 1 file changed, 11 insertions(+), 23 deletions(-)

diff --git a/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py
index 2a86350e9fc6..298504a33944 100644
--- a/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py
+++ b/linear_algebra/src/gaussian_elimination_pivoting/gaussian_elimination_pivoting.py
@@ -32,40 +32,28 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray:
     >>> solution = solve_linear_system(np.column_stack((A, B)))
     >>> np.allclose(solution, np.array([2., 3., -1.]))
     True
-    >>> solve_linear_system(np.array([[0, 0], [0, 0]],  dtype=float))
-    array([nan, nan])
+    >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]],  dtype=float))
+    Traceback (most recent call last):
+        ...
+    ValueError: Matrix is not correct
     """
     ab = np.copy(matrix)
     num_of_rows = ab.shape[0]
     num_of_columns = ab.shape[1] - 1
     x_lst: list[float] = []
 
-    # Lead element search
-    for column_num in range(num_of_rows):
-        for i in range(column_num, num_of_columns):
-            if abs(ab[i][column_num]) > abs(ab[column_num][column_num]):
-                ab[[column_num, i]] = ab[[i, column_num]]
-                if ab[column_num, column_num] == 0.0:
-                    raise ValueError("Matrix is not correct")
-            else:
-                pass
-        if column_num != 0:
-            for i in range(column_num, num_of_rows):
-                ab[i, :] -= (
-                    ab[i, column_num - 1]
-                    / ab[column_num - 1, column_num - 1]
-                    * ab[column_num - 1, :]
-                )
+    assert num_of_rows == num_of_columns
 
-    # Upper triangular matrix
     for column_num in range(num_of_rows):
+        # Lead element search
         for i in range(column_num, num_of_columns):
             if abs(ab[i][column_num]) > abs(ab[column_num][column_num]):
                 ab[[column_num, i]] = ab[[i, column_num]]
-                if ab[column_num, column_num] == 0.0:
-                    raise ValueError("Matrix is not correct")
-            else:
-                pass
+
+        # Upper triangular matrix
+        if ab[column_num, column_num] == 0.0:
+            raise ValueError("Matrix is not correct")
+
         if column_num != 0:
             for i in range(column_num, num_of_rows):
                 ab[i, :] -= (

From 58d36d06a480081b80c8da1ad40ce866512b1b59 Mon Sep 17 00:00:00 2001
From: MaximSmolskiy <mithridatus@mail.ru>
Date: Sun, 22 Dec 2024 14:27:34 +0300
Subject: [PATCH 3/4] Fix review issues

---
 .../src/gaussian_elimination_pivoting.py          | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/linear_algebra/src/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting.py
index 027b1c6e098c..a2962c3fdbf4 100644
--- a/linear_algebra/src/gaussian_elimination_pivoting.py
+++ b/linear_algebra/src/gaussian_elimination_pivoting.py
@@ -22,17 +22,22 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray:
     >>> solution = solve_linear_system(np.column_stack((A, B)))
     >>> np.allclose(solution, np.array([2., 3., -1.]))
     True
-    >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]],  dtype=float))
+    >>> solve_linear_system(np.array([[0, 0, 0]], dtype=float))
     Traceback (most recent call last):
         ...
-    ValueError: Matrix is not correct
+    ValueError: Matrix is not square
+    >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]], dtype=float))
+    Traceback (most recent call last):
+        ...
+    ValueError: Matrix is singular
     """
     ab = np.copy(matrix)
     num_of_rows = ab.shape[0]
     num_of_columns = ab.shape[1] - 1
     x_lst: list[float] = []
 
-    assert num_of_rows == num_of_columns
+    if num_of_rows != num_of_columns:
+            raise ValueError("Matrix is not square")
 
     for column_num in range(num_of_rows):
         # Lead element search
@@ -41,8 +46,8 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray:
                 ab[[column_num, i]] = ab[[i, column_num]]
 
         # Upper triangular matrix
-        if ab[column_num, column_num] == 0.0:
-            raise ValueError("Matrix is not correct")
+        if abs(ab[column_num, column_num]) < 1e-8:
+            raise ValueError("Matrix is singular")
 
         if column_num != 0:
             for i in range(column_num, num_of_rows):

From f1d2a8cec9657a5f583eed4efc4daf91de135344 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Sun, 22 Dec 2024 11:28:06 +0000
Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci
---
 linear_algebra/src/gaussian_elimination_pivoting.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linear_algebra/src/gaussian_elimination_pivoting.py b/linear_algebra/src/gaussian_elimination_pivoting.py
index a2962c3fdbf4..efc1ddd64a2e 100644
--- a/linear_algebra/src/gaussian_elimination_pivoting.py
+++ b/linear_algebra/src/gaussian_elimination_pivoting.py
@@ -37,7 +37,7 @@ def solve_linear_system(matrix: np.ndarray) -> np.ndarray:
     x_lst: list[float] = []
 
     if num_of_rows != num_of_columns:
-            raise ValueError("Matrix is not square")
+        raise ValueError("Matrix is not square")
 
     for column_num in range(num_of_rows):
         # Lead element search