From 528658fb3ce785facf37bc82770f26ec079f23fb Mon Sep 17 00:00:00 2001 From: You Song Hou Date: Tue, 15 Oct 2024 21:11:58 -0400 Subject: [PATCH 1/2] add Matrix scan Nada example and test --- nada-project.toml | 6 ++++- src/matrix_scan.py | 52 +++++++++++++++++++++++++++++++++++++ tests/matrix_scan_test.yaml | 42 ++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/matrix_scan.py create mode 100644 tests/matrix_scan_test.yaml diff --git a/nada-project.toml b/nada-project.toml index a69c87a..3f0a876 100644 --- a/nada-project.toml +++ b/nada-project.toml @@ -252,4 +252,8 @@ prime_size = 128 [[programs]] path = "src/auction_can_tie.py" name = "auction_can_tie" -prime_size = 128 \ No newline at end of file +prime_size = 128 + +[[programs]] +path = "src/matrix_scan.py" +prime_size = 128 diff --git a/src/matrix_scan.py b/src/matrix_scan.py new file mode 100644 index 0000000..622b792 --- /dev/null +++ b/src/matrix_scan.py @@ -0,0 +1,52 @@ +from nada_dsl import * +import nada_numpy as na + +# Return the all coordinates where the value excists +def find_number_present_in_list(array: List[List[SecretInteger]], value: SecretInteger) -> List[List[Integer]]: + result = [] + for i in range(len(array)): + for j in range(len(array[i])): + coordinate = [] + # Get the coordinate[x, y]. If no match, set the coordinate to [-1, -1] + x = (value == array[i][j]).if_else(Integer(i), Integer(-1)) + y = (value == array[i][j]).if_else(Integer(j), Integer(-1)) + result.append([x, y]) + + return result + +def nada_main(): + num_row = 3 + row = na.parties(num_row) + + target_number = Party(name="target") + target_number = SecretInteger(Input(name="target_number", party=target_number)) + + # Create the matrix + matrix: list[list[SecretInteger]] = [] + + # Get the user inputs for the first row and add it to the matrix + matrix_row_1 = [] + for i in range(num_row): + matrix_row_1.append( + SecretInteger(Input(name="row_0_" + str(i), party=row[i])) + ) + matrix.append(matrix_row_1) + + # Get the user inputs for the second row and add it to the matrix + matrix_row_2 = [] + for i in range(num_row): + matrix_row_2.append( + SecretInteger(Input(name="row_1_" + str(i), party=row[i])) + ) + matrix.append(matrix_row_2) + + # Scan a matrix for a specific value + value_excists = find_number_present_in_list(matrix, target_number) + + outputs = [] + + for i in range(len(value_excists)): + outputs.append(Output(value_excists[i][0], "value_excists_" + str(i) + "_x", party=row[0])) + outputs.append(Output(value_excists[i][1], "value_excists_" + str(i) + "_y", party=row[0])) + + return outputs \ No newline at end of file diff --git a/tests/matrix_scan_test.yaml b/tests/matrix_scan_test.yaml new file mode 100644 index 0000000..ecc7ff1 --- /dev/null +++ b/tests/matrix_scan_test.yaml @@ -0,0 +1,42 @@ +--- +program: matrix_scan +inputs: + row_0_0: + SecretInteger: "1" + row_0_1: + SecretInteger: "2" + row_0_2: + SecretInteger: "3" + row_1_0: + SecretInteger: "2" + row_1_1: + SecretInteger: "1" + row_1_2: + SecretInteger: "3" + target_number: + SecretInteger: "3" +expected_outputs: + value_excists_0_x: + SecretInteger: "-1" + value_excists_0_y: + SecretInteger: "-1" + value_excists_1_x: + SecretInteger: "-1" + value_excists_1_y: + SecretInteger: "-1" + value_excists_2_x: + SecretInteger: "0" + value_excists_2_y: + SecretInteger: "2" + value_excists_3_x: + SecretInteger: "-1" + value_excists_3_y: + SecretInteger: "-1" + value_excists_4_x: + SecretInteger: "-1" + value_excists_4_y: + SecretInteger: "-1" + value_excists_5_x: + SecretInteger: "1" + value_excists_5_y: + SecretInteger: "2" \ No newline at end of file From 67fcf608aa66092238bd122f00e25a99f8b9d9b2 Mon Sep 17 00:00:00 2001 From: You Song Hou Date: Wed, 16 Oct 2024 20:02:32 -0400 Subject: [PATCH 2/2] update the toml file --- nada-project.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/nada-project.toml b/nada-project.toml index 3f0a876..85bcdff 100644 --- a/nada-project.toml +++ b/nada-project.toml @@ -256,4 +256,5 @@ prime_size = 128 [[programs]] path = "src/matrix_scan.py" +name = "matrix_scan" prime_size = 128