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 <92718421+e-stra...@users.noreply.github.com>
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()

Reply via email to