This is an automated email from the ASF dual-hosted git repository.
baunsgaard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/systemds.git
The following commit(s) were added to refs/heads/main by this push:
new f190880920 [SystemDS-3755] Python API Builtin inv
f190880920 is described below
commit f190880920730b72c041a7e494dca635daa3cdee
Author: e-strauss <[email protected]>
AuthorDate: Wed Sep 4 19:28:39 2024 +0200
[SystemDS-3755] Python API Builtin inv
Closes #2096
---
src/main/python/systemds/operator/nodes/matrix.py | 7 +++
src/main/python/tests/matrix/test_inv.py | 52 +++++++++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/src/main/python/systemds/operator/nodes/matrix.py
b/src/main/python/systemds/operator/nodes/matrix.py
index d8132829ae..672c40c796 100644
--- a/src/main/python/systemds/operator/nodes/matrix.py
+++ b/src/main/python/systemds/operator/nodes/matrix.py
@@ -687,5 +687,12 @@ class Matrix(OperationNode):
},
)
+ def inv(self) -> "Matrix":
+ """ Computes the inverse of a squared matrix.
+
+ :return: The Matrix representing the result of this operation
+ """
+ return Matrix(self.sds_context, "inv", [self])
+
def __str__(self):
return "MatrixNode"
diff --git a/src/main/python/tests/matrix/test_inv.py
b/src/main/python/tests/matrix/test_inv.py
new file mode 100644
index 0000000000..801c22dfd2
--- /dev/null
+++ b/src/main/python/tests/matrix/test_inv.py
@@ -0,0 +1,52 @@
+# -------------------------------------------------------------
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# -------------------------------------------------------------
+
+import unittest
+import numpy as np
+from systemds.context import SystemDSContext
+
+np.random.seed(7)
+m = np.random.random((10, 10))
+
+
+class TestINV(unittest.TestCase):
+ def setUp(self):
+ self.sds = SystemDSContext()
+
+ def tearDown(self):
+ self.sds.close()
+
+ def test_diag_basic(self):
+ input_matrix = np.array([[2, 0], [0, 6]])
+ sds_input = self.sds.from_numpy(input_matrix)
+ sds_result = sds_input.inv().compute()
+ np_result = np.linalg.inv(input_matrix)
+ assert np.allclose(sds_result, np_result, 1e-9)
+
+ def test_diag_random(self):
+ sds_input = self.sds.from_numpy(m)
+ sds_result = sds_input.inv().compute()
+ np_result = np.linalg.inv(m)
+ assert np.allclose(sds_result, np_result, 1e-9)
+
+
+if __name__ == "__main__":
+ unittest.main()