This is an automated email from the ASF dual-hosted git repository. baunsgaard pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/systemds.git
commit 8aab7f5dc5dc125dce971978403428027e37dc60 Author: baunsgaard <[email protected]> AuthorDate: Tue Sep 14 14:39:14 2021 +0200 [SYSTEMDS-3131] Python API node strings --- src/main/python/systemds/operator/nodes/frame.py | 3 + src/main/python/systemds/operator/nodes/list.py | 2 + .../python/systemds/operator/nodes/list_access.py | 5 +- src/main/python/systemds/operator/nodes/matrix.py | 7 ++- .../python/systemds/operator/nodes/multi_return.py | 5 +- src/main/python/systemds/operator/nodes/scalar.py | 6 +- src/main/python/systemds/operator/nodes/source.py | 3 + src/main/python/tests/basics/__init__.py | 20 +++++++ src/main/python/tests/basics/test___str__.py | 66 ++++++++++++++++++++++ 9 files changed, 112 insertions(+), 5 deletions(-) diff --git a/src/main/python/systemds/operator/nodes/frame.py b/src/main/python/systemds/operator/nodes/frame.py index 25f1b81..6551332 100644 --- a/src/main/python/systemds/operator/nodes/frame.py +++ b/src/main/python/systemds/operator/nodes/frame.py @@ -132,3 +132,6 @@ class Frame(OperationNode): :return: The Frame containing the replaced values """ return Frame(self.sds_context, "replace", named_input_nodes={"target": self, "pattern": f"'{pattern}'", "replacement":f"'{replacement}'"}) + + def __str__(self): + return "FrameNode" \ No newline at end of file diff --git a/src/main/python/systemds/operator/nodes/list.py b/src/main/python/systemds/operator/nodes/list.py index 90e2e90..09455a3 100644 --- a/src/main/python/systemds/operator/nodes/list.py +++ b/src/main/python/systemds/operator/nodes/list.py @@ -84,3 +84,5 @@ class List(OperationNode): def compute(self, verbose: bool = False, lineage: bool = False) -> Union[np.array]: return super().compute(verbose, lineage) + def __str__(self): + return "ListNode" diff --git a/src/main/python/systemds/operator/nodes/list_access.py b/src/main/python/systemds/operator/nodes/list_access.py index 869377f..10d51f5 100644 --- a/src/main/python/systemds/operator/nodes/list_access.py +++ b/src/main/python/systemds/operator/nodes/list_access.py @@ -60,4 +60,7 @@ class ListAccess(OperationNode): ent = self._list_source[self._key] res = Scalar(self.sds_context, "as.scalar", [ent]) self._list_source._outputs[self._key] = res - return res \ No newline at end of file + return res + + def __str__(self): + return "ListAccessNode" \ No newline at end of file diff --git a/src/main/python/systemds/operator/nodes/matrix.py b/src/main/python/systemds/operator/nodes/matrix.py index f205b4d..f90218b 100644 --- a/src/main/python/systemds/operator/nodes/matrix.py +++ b/src/main/python/systemds/operator/nodes/matrix.py @@ -335,7 +335,7 @@ class Matrix(OperationNode): return Matrix(self.sds_context, 'order', [], named_input_nodes=named_input_nodes) - def to_string(self, **kwargs: Dict[str, VALID_INPUT_TYPES]) -> 'Matrix': + def to_string(self, **kwargs: Dict[str, VALID_INPUT_TYPES]) -> 'Scalar': """ Converts the input to a string representation. :return: `Scalar` containing the string. """ @@ -359,4 +359,7 @@ class Matrix(OperationNode): """ Replace all values with replacement value """ - return Matrix(self.sds_context, "replace", named_input_nodes={"target": self, "pattern": pattern, "replacement":replacement}) \ No newline at end of file + return Matrix(self.sds_context, "replace", named_input_nodes={"target": self, "pattern": pattern, "replacement":replacement}) + + def __str__(self): + return "MatrixNode" diff --git a/src/main/python/systemds/operator/nodes/multi_return.py b/src/main/python/systemds/operator/nodes/multi_return.py index c14a7b0..90b2de5 100644 --- a/src/main/python/systemds/operator/nodes/multi_return.py +++ b/src/main/python/systemds/operator/nodes/multi_return.py @@ -82,4 +82,7 @@ class MultiReturn(OperationNode): return result_var def __iter__(self): - return iter(self._outputs) \ No newline at end of file + return iter(self._outputs) + + def __str__(self): + return "MultiReturnNode" diff --git a/src/main/python/systemds/operator/nodes/scalar.py b/src/main/python/systemds/operator/nodes/scalar.py index cd27d30..5078ac0 100644 --- a/src/main/python/systemds/operator/nodes/scalar.py +++ b/src/main/python/systemds/operator/nodes/scalar.py @@ -218,8 +218,12 @@ class Scalar(OperationNode): """ return Scalar(self.sds_context, 'tanh', [self]) - def to_string(self, **kwargs: Dict[str, VALID_INPUT_TYPES]) -> 'OperationNode': + def to_string(self, **kwargs: Dict[str, VALID_INPUT_TYPES]) -> 'Scalar': """ Converts the input to a string representation. :return: `Scalar` containing the string. """ return Scalar(self.sds_context, 'toString', [self], named_input_nodes=kwargs, output_type=OutputType.STRING) + + def __str__(self): + return "ScalarNode" + diff --git a/src/main/python/systemds/operator/nodes/source.py b/src/main/python/systemds/operator/nodes/source.py index 8008c9b..d027209 100644 --- a/src/main/python/systemds/operator/nodes/source.py +++ b/src/main/python/systemds/operator/nodes/source.py @@ -197,3 +197,6 @@ class Source(OperationNode): def compute(self, verbose: bool = False, lineage: bool = False): raise Exception("Invalid invocation of source from script") + + def __str__(self): + return "SourceNode" diff --git a/src/main/python/tests/basics/__init__.py b/src/main/python/tests/basics/__init__.py new file mode 100644 index 0000000..e66abb4 --- /dev/null +++ b/src/main/python/tests/basics/__init__.py @@ -0,0 +1,20 @@ +# ------------------------------------------------------------- +# +# 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. +# +# ------------------------------------------------------------- diff --git a/src/main/python/tests/basics/test___str__.py b/src/main/python/tests/basics/test___str__.py new file mode 100644 index 0000000..7e2010d --- /dev/null +++ b/src/main/python/tests/basics/test___str__.py @@ -0,0 +1,66 @@ +# ------------------------------------------------------------- +# +# 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 + +from systemds.context import SystemDSContext + + +class Test__str__(unittest.TestCase): + + sds: SystemDSContext = None + + @classmethod + def setUpClass(cls): + cls.sds = SystemDSContext() + + @classmethod + def tearDownClass(cls): + cls.sds.close() + + def test_1(self): + self.assertTrue("MatrixNode" in str(self.sds.full([1, 2], 3))) + + def test_2(self): + self.assertTrue("ScalarNode" in str(self.sds.scalar(3))) + + def test_3(self): + self.assertTrue("ScalarNode" in str(self.sds.scalar("Hi"))) + + def test_4(self): + self.assertTrue("ScalarNode" in str( + self.sds.full([1, 2], 3).to_string())) + + def test_5(self): + self.assertTrue("ListNode" in str(self.sds.list( + self.sds.rand(1, 2, 3, 4), self.sds.scalar(4)))) + + def test_6(self): + self.assertTrue("MatrixNode" in str(self.sds.list( + self.sds.rand(1, 2, 3, 4), self.sds.scalar(4))[0])) + + def test_7(self): + self.assertTrue("ScalarNode" in str(self.sds.list( + self.sds.rand(1, 2, 3, 4), self.sds.scalar(4))[1])) + + +if __name__ == "__main__": + unittest.main(exit=False)
