# -------------------------------------------------------------
#
# 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.
#
# -------------------------------------------------------------

# Autogenerated By   : src/main/python/generator/generator.py
import unittest, contextlib, io


class TestLM(unittest.TestCase):
    def test_lm(self):
        # Example test case provided in python the code block
        buf = io.StringIO()
        with contextlib.redirect_stdout(buf):
            import numpy as np
            from systemds.context import SystemDSContext
            from systemds.operator.algorithm import lm

            np.random.seed(0)
            features = np.random.rand(10, 15)
            y = np.random.rand(10, 1)

            with SystemDSContext() as sds:
                weights = lm(sds.from_numpy(features), sds.from_numpy(y)).compute()
                print(weights)

            expected = """[[-0.11538199]
 [-0.20386541]
 [-0.39956034]
 [ 1.04078623]
 [ 0.43270839]
 [ 0.18954599]
 [ 0.49858969]
 [-0.26812763]
 [ 0.09961844]
 [-0.57000751]
 [-0.43386048]
 [ 0.55358873]
 [-0.54638565]
 [ 0.2205885 ]
 [ 0.37957689]]"""
        self.assertEqual(buf.getvalue().strip(), expected)


if __name__ == '__main__':
    unittest.main()
