From 3b2dd49af6c804ec011b745069a3b7d2bbb84749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Cabrero-Holgueras?= Date: Wed, 28 Aug 2024 13:24:21 +0000 Subject: [PATCH 1/2] fix: array comparison for multi dim arrays --- nada_numpy/array.py | 6 +- tests/nada-tests/src/array_comparison.py | 4 +- tests/nada-tests/tests/array_comparison.yaml | 84 ++++++++++---------- 3 files changed, 46 insertions(+), 48 deletions(-) diff --git a/nada_numpy/array.py b/nada_numpy/array.py index a3cdcd0..5fc81d6 100644 --- a/nada_numpy/array.py +++ b/nada_numpy/array.py @@ -20,7 +20,6 @@ public_rational, rational, secret_rational, sign) from nada_numpy.utils import copy_metadata - class NadaArray: # pylint:disable=too-many-public-methods """ Represents an array-like object with additional functionality. @@ -424,9 +423,8 @@ def __comparison_operator( if isinstance(value, np.ndarray): if len(self.inner) != len(value): raise ValueError("Arrays must have the same length") - return NadaArray( - np.array([operator(x, y) for x, y in zip(self.inner, value)]) - ) + vectorized_operator = np.vectorize(operator) + return NadaArray(vectorized_operator(self.inner, value)) raise ValueError(f"Unsupported type: {type(value)}") diff --git a/tests/nada-tests/src/array_comparison.py b/tests/nada-tests/src/array_comparison.py index f86a068..c8f1ff9 100644 --- a/tests/nada-tests/src/array_comparison.py +++ b/tests/nada-tests/src/array_comparison.py @@ -10,8 +10,8 @@ def nada_main(): parties = na.parties(2) - a = na.array([3], parties[0], "A", SecretInteger) - b = na.array([3], parties[1], "B", SecretInteger) + a = na.array([1, 3], parties[0], "A", SecretInteger) + b = na.array([1, 3], parties[1], "B", SecretInteger) c = Integer(1) d = a == b diff --git a/tests/nada-tests/tests/array_comparison.yaml b/tests/nada-tests/tests/array_comparison.yaml index 394a169..f8914d2 100644 --- a/tests/nada-tests/tests/array_comparison.yaml +++ b/tests/nada-tests/tests/array_comparison.yaml @@ -1,99 +1,99 @@ --- program: array_comparison inputs: - A_0: + A_0_0: SecretInteger: "1" - A_1: + A_0_1: SecretInteger: "100" - A_2: + A_0_2: SecretInteger: "0" - B_0: + B_0_0: SecretInteger: "8" - B_1: + B_0_1: SecretInteger: "101" - B_2: + B_0_2: SecretInteger: "0" expected_outputs: - my_output_1_0: + my_output_1_0_0: SecretBoolean: false - my_output_1_1: + my_output_1_0_1: SecretBoolean: false - my_output_1_2: + my_output_1_0_2: SecretBoolean: true - my_output_2_0: + my_output_2_0_0: SecretBoolean: true - my_output_2_1: + my_output_2_0_1: SecretBoolean: false - my_output_2_2: + my_output_2_0_2: SecretBoolean: false - my_output_3_0: + my_output_3_0_0: SecretBoolean: true - my_output_3_1: + my_output_3_0_1: SecretBoolean: true - my_output_3_2: + my_output_3_0_2: SecretBoolean: false - my_output_4_0: + my_output_4_0_0: SecretBoolean: false - my_output_4_1: + my_output_4_0_1: SecretBoolean: true - my_output_4_2: + my_output_4_0_2: SecretBoolean: true - my_output_5_0: + my_output_5_0_0: SecretBoolean: true - my_output_5_1: + my_output_5_0_1: SecretBoolean: true - my_output_5_2: + my_output_5_0_2: SecretBoolean: false - my_output_6_0: + my_output_6_0_0: SecretBoolean: false - my_output_6_1: + my_output_6_0_1: SecretBoolean: false - my_output_6_2: + my_output_6_0_2: SecretBoolean: true - my_output_7_0: + my_output_7_0_0: SecretBoolean: true - my_output_7_1: + my_output_7_0_1: SecretBoolean: true - my_output_7_2: + my_output_7_0_2: SecretBoolean: true - my_output_8_0: + my_output_8_0_0: SecretBoolean: true - my_output_8_1: + my_output_8_0_1: SecretBoolean: false - my_output_8_2: + my_output_8_0_2: SecretBoolean: true - my_output_9_0: + my_output_9_0_0: SecretBoolean: false - my_output_9_1: + my_output_9_0_1: SecretBoolean: false - my_output_9_2: + my_output_9_0_2: SecretBoolean: false - my_output_10_0: + my_output_10_0_0: SecretBoolean: false - my_output_10_1: + my_output_10_0_1: SecretBoolean: true - my_output_10_2: + my_output_10_0_2: SecretBoolean: false - my_output_11_0: + my_output_11_0_0: SecretBoolean: false - my_output_11_1: + my_output_11_0_1: SecretBoolean: false - my_output_11_2: + my_output_11_0_2: SecretBoolean: true - my_output_12_0: + my_output_12_0_0: SecretBoolean: true - my_output_12_1: + my_output_12_0_1: SecretBoolean: true - my_output_12_2: + my_output_12_0_2: SecretBoolean: false \ No newline at end of file From 47568c0cc2b83e0ec7d72d07eaead322bd59ca4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Cabrero-Holgueras?= Date: Wed, 28 Aug 2024 13:26:12 +0000 Subject: [PATCH 2/2] chore: bump version number --- poetry.lock | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index b09c321..1fb5ac6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -314,13 +314,13 @@ test = ["pytest (>=6)"] [[package]] name = "googleapis-common-protos" -version = "1.64.0" +version = "1.65.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis_common_protos-1.64.0-py2.py3-none-any.whl", hash = "sha256:d1bfc569f70ed2e96ccf06ead265c2cf42b5abfc817cda392e3835f3b67b5c59"}, - {file = "googleapis_common_protos-1.64.0.tar.gz", hash = "sha256:7d77ca6b7c0c38eb6b1bab3b4c9973acf57ce4f2a6d3a4136acba10bcbfb3025"}, + {file = "googleapis_common_protos-1.65.0-py2.py3-none-any.whl", hash = "sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63"}, + {file = "googleapis_common_protos-1.65.0.tar.gz", hash = "sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0"}, ] [package.dependencies] diff --git a/pyproject.toml b/pyproject.toml index e6ad20e..d4ba187 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "nada-numpy" -version = "0.4.1" +version = "0.4.2" description = "Nada-Numpy is a Python library designed for algebraic operations on NumPy-like array objects on top of Nada DSL and Nillion Network." authors = ["José Cabrero-Holgueras "] readme = "README.md"