commit b201730dfbe2ddc57691962631cd1842c20b2f21 Author: hoffmeisterda104361 Date: Tue Oct 20 15:47:27 2026 +0200 initial commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/MatrixMania.iml b/.idea/MatrixMania.iml new file mode 100644 index 0000000..51bcf32 --- /dev/null +++ b/.idea/MatrixMania.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ac7205c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..55c2805 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..af58f81 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,4 @@ +## Code Conventions +- max line length: 88 characters +- follow PEP 8 +- after creating code: execute "ruff check --fix" \ No newline at end of file diff --git a/compute.py b/compute.py new file mode 100644 index 0000000..6a29c61 --- /dev/null +++ b/compute.py @@ -0,0 +1,125 @@ +"""Utility module providing basic matrix operations. + +Functions +--------- +- :func:`matmul` – Multiply two matrices. +- :func:`transpose` – Transpose a matrix. +- :func:`rotate` – Rotate a matrix 90° clockwise. + +All functions work on nested Python lists and perform basic +validation before operation. +""" + +from __future__ import annotations + +Matrix = list[list[float]] + +def main(): + a = [[1, 2, 3], [4, 5, 6]] + b = [[7, 8], [10, 11], [12, 13]] + print(matmul(a,b)) + print(rotate(a)) + print(transpose(a)) + +def matmul(a: Matrix, b: Matrix) -> Matrix: + """Return the product of two matrices. + + Parameters + ---------- + a: Matrix + Left‑hand matrix (shape ``m × n``). + b: Matrix + Right‑hand matrix (shape ``n × p``). + + Returns + ------- + Matrix + Resulting matrix of shape ``m × p``. + + Raises + ------ + ValueError + If the inner dimensions of the matrices do not match, or if + either argument is empty. + """ + if not a or not a[0] or not b or not b[0]: + raise ValueError("Input matrices must be non‑empty") + + n_cols_a = len(a[0]) + n_rows_b = len(b) + if n_cols_a != n_rows_b: + raise ValueError( + f"Inner dimensions must agree for matrix multiplication: " + f"{len(a)}×{n_cols_a} and {n_rows_b}×{len(b[0])}" + ) + + m = len(a) + p = len(b[0]) + result: Matrix = [[0.0 for _ in range(p)] for _ in range(m)] + + for i in range(m): + for j in range(p): + total = 0.0 + for k in range(n_cols_a): + total += a[i][k] * b[k][j] + result[i][j] = total + return result + + +def transpose(matrix: Matrix) -> Matrix: + """Return the transpose of a matrix. + + Parameters + ---------- + matrix: Matrix + A matrix represented as a list of row lists. + + Returns + ------- + Matrix + The transposed matrix. + + Raises + ------ + ValueError + If the matrix is empty or rows are not of equal length. + """ + if not matrix or not matrix[0]: + raise ValueError("Input matrix must be non‑empty") + + row_length = len(matrix[0]) + for row in matrix: + if len(row) != row_length: + raise ValueError("All rows in the matrix must have the same length") + + return [list(col) for col in zip(*matrix)] + + +def rotate(matrix: Matrix) -> Matrix: + """Return the matrix rotated 90 degrees clockwise. + + This is equivalent to transposing the matrix and then reversing + each row. + + Parameters + ---------- + matrix: Matrix + A matrix represented as a list of row lists. + + Returns + ------- + Matrix + The rotated matrix. + + Raises + ------ + ValueError + If the matrix is empty or rows are not of equal length. + """ + transposed = transpose(matrix) + return [list(reversed(row)) for row in transposed] + +if __name__ == "__main__": + main() + +"""End of module""" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..46e3b47 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[project] +name = "matrixmania" +version = "0.1.0" \ No newline at end of file