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()