From ad217c66165898d62b76cc89ba09c2d7049b6448 Mon Sep 17 00:00:00 2001
From: quant12345 <kamil246@mail.ru>
Date: Fri, 29 Sep 2023 17:50:16 +0500
Subject: [PATCH 1/3] Replacing the generator with numpy vector operations from
 lu_decomposition.

---
 arithmetic_analysis/lu_decomposition.py | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arithmetic_analysis/lu_decomposition.py b/arithmetic_analysis/lu_decomposition.py
index eaabce5449c5..094b20abfecc 100644
--- a/arithmetic_analysis/lu_decomposition.py
+++ b/arithmetic_analysis/lu_decomposition.py
@@ -88,15 +88,19 @@ def lower_upper_decomposition(table: np.ndarray) -> tuple[np.ndarray, np.ndarray
 
     lower = np.zeros((rows, columns))
     upper = np.zeros((rows, columns))
+
+    # in 'total', the necessary data is extracted through slices
+    # and the sum of the products is obtained.
+
     for i in range(columns):
         for j in range(i):
-            total = sum(lower[i][k] * upper[k][j] for k in range(j))
+            total = np.sum(lower[i, :i] * upper[:i, j])
             if upper[j][j] == 0:
                 raise ArithmeticError("No LU decomposition exists")
             lower[i][j] = (table[i][j] - total) / upper[j][j]
         lower[i][i] = 1
         for j in range(i, columns):
-            total = sum(lower[i][k] * upper[k][j] for k in range(j))
+            total = np.sum(lower[i, :i] * upper[:i, j])
             upper[i][j] = table[i][j] - total
     return lower, upper
 

From 07dfc067e475f36ddce1549f33197f15f65f59d1 Mon Sep 17 00:00:00 2001
From: quant12345 <kamil246@mail.ru>
Date: Fri, 29 Sep 2023 17:53:57 +0500
Subject: [PATCH 2/3] Revert "Replacing the generator with numpy vector
 operations from lu_decomposition."

This reverts commit ad217c66165898d62b76cc89ba09c2d7049b6448.
---
 arithmetic_analysis/lu_decomposition.py | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/arithmetic_analysis/lu_decomposition.py b/arithmetic_analysis/lu_decomposition.py
index 094b20abfecc..eaabce5449c5 100644
--- a/arithmetic_analysis/lu_decomposition.py
+++ b/arithmetic_analysis/lu_decomposition.py
@@ -88,19 +88,15 @@ def lower_upper_decomposition(table: np.ndarray) -> tuple[np.ndarray, np.ndarray
 
     lower = np.zeros((rows, columns))
     upper = np.zeros((rows, columns))
-
-    # in 'total', the necessary data is extracted through slices
-    # and the sum of the products is obtained.
-
     for i in range(columns):
         for j in range(i):
-            total = np.sum(lower[i, :i] * upper[:i, j])
+            total = sum(lower[i][k] * upper[k][j] for k in range(j))
             if upper[j][j] == 0:
                 raise ArithmeticError("No LU decomposition exists")
             lower[i][j] = (table[i][j] - total) / upper[j][j]
         lower[i][i] = 1
         for j in range(i, columns):
-            total = np.sum(lower[i, :i] * upper[:i, j])
+            total = sum(lower[i][k] * upper[k][j] for k in range(j))
             upper[i][j] = table[i][j] - total
     return lower, upper
 

From ef1fc19b046fe3b27ae8964dfb7b00b2c2f446db Mon Sep 17 00:00:00 2001
From: quant12345 <kamil246@mail.ru>
Date: Thu, 5 Oct 2023 16:59:41 +0500
Subject: [PATCH 3/3] Added type annotation.

---
 maths/karatsuba.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/maths/karatsuba.py b/maths/karatsuba.py
index 4bf4aecdc068..3d29e31d2107 100644
--- a/maths/karatsuba.py
+++ b/maths/karatsuba.py
@@ -1,7 +1,7 @@
 """ Multiply two numbers using Karatsuba algorithm """
 
 
-def karatsuba(a, b):
+def karatsuba(a: int, b: int) -> int:
     """
     >>> karatsuba(15463, 23489) == 15463 * 23489
     True