From 53446602196b3e62cb274ff4f9719d1880db11e8 Mon Sep 17 00:00:00 2001 From: mhostetter Date: Tue, 1 Feb 2022 13:08:24 -0500 Subject: [PATCH] Add unit tests for `galois.prod()` with polynomials --- scripts/generate_field_test_vectors.py | 15 ++++++++++++++- tests/polys/conftest.py | 13 +++++++++++++ tests/polys/data/GF(109987^4)/prod.pkl | Bin 0 -> 10369 bytes tests/polys/data/GF(2)/prod.pkl | Bin 0 -> 2063 bytes tests/polys/data/GF(2147483647)/prod.pkl | Bin 0 -> 4369 bytes tests/polys/data/GF(2^100)/prod.pkl | Bin 0 -> 13095 bytes tests/polys/data/GF(2^2)/prod.pkl | Bin 0 -> 2075 bytes tests/polys/data/GF(2^3)/prod.pkl | Bin 0 -> 2066 bytes tests/polys/data/GF(2^32)/prod.pkl | Bin 0 -> 4938 bytes tests/polys/data/GF(2^8)/prod.pkl | Bin 0 -> 2058 bytes tests/polys/data/GF(2^8, 283, 19)/prod.pkl | Bin 0 -> 1575 bytes tests/polys/data/GF(31)/prod.pkl | Bin 0 -> 2291 bytes tests/polys/data/GF(3191)/prod.pkl | Bin 0 -> 3086 bytes .../data/GF(36893488147419103183)/prod.pkl | Bin 0 -> 10023 bytes tests/polys/data/GF(5)/prod.pkl | Bin 0 -> 1902 bytes tests/polys/data/GF(7)/prod.pkl | Bin 0 -> 2010 bytes tests/polys/data/GF(7^3)/prod.pkl | Bin 0 -> 2404 bytes tests/polys/data/GF(7^3, 643, 244)/prod.pkl | Bin 0 -> 2402 bytes tests/polys/test_arithmetic_functions.py | 18 ++++++++++++++++++ 19 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 tests/polys/data/GF(109987^4)/prod.pkl create mode 100644 tests/polys/data/GF(2)/prod.pkl create mode 100644 tests/polys/data/GF(2147483647)/prod.pkl create mode 100644 tests/polys/data/GF(2^100)/prod.pkl create mode 100644 tests/polys/data/GF(2^2)/prod.pkl create mode 100644 tests/polys/data/GF(2^3)/prod.pkl create mode 100644 tests/polys/data/GF(2^32)/prod.pkl create mode 100644 tests/polys/data/GF(2^8)/prod.pkl create mode 100644 tests/polys/data/GF(2^8, 283, 19)/prod.pkl create mode 100644 tests/polys/data/GF(31)/prod.pkl create mode 100644 tests/polys/data/GF(3191)/prod.pkl create mode 100644 tests/polys/data/GF(36893488147419103183)/prod.pkl create mode 100644 tests/polys/data/GF(5)/prod.pkl create mode 100644 tests/polys/data/GF(7)/prod.pkl create mode 100644 tests/polys/data/GF(7^3)/prod.pkl create mode 100644 tests/polys/data/GF(7^3, 643, 244)/prod.pkl diff --git a/scripts/generate_field_test_vectors.py b/scripts/generate_field_test_vectors.py index 7cc77e6cc..2aae4a65a 100644 --- a/scripts/generate_field_test_vectors.py +++ b/scripts/generate_field_test_vectors.py @@ -14,7 +14,7 @@ import sage import numpy as np -from sage.all import GF, PolynomialRing, log, matrix, vector, xgcd, lcm +from sage.all import GF, PolynomialRing, log, matrix, vector, xgcd, lcm, prod FIELD = None RING = None @@ -684,6 +684,19 @@ def make_luts(field, sub_folder, seed, sparse=False): d = {"X": X, "Z": Z} save_pickle(d, folder, "lcm.pkl") + set_seed(seed + 403) + X = [] + Z = [] + for i in range(20): + XX = [random_coeffs(0, order, MIN_COEFFS, MAX_COEFFS) for i in range(random.randint(2, 5))] + X.append(XX) + xx = [list_to_poly(XXi) for XXi in XX] + z = prod(xx) + z = poly_to_list(z) + Z.append(z) + d = {"X": X, "Z": Z} + save_pickle(d, folder, "prod.pkl") + if __name__ == "__main__": field = GF(2, modulus="primitive", repr="int") diff --git a/tests/polys/conftest.py b/tests/polys/conftest.py index f921ac2c9..6e5504c44 100644 --- a/tests/polys/conftest.py +++ b/tests/polys/conftest.py @@ -210,3 +210,16 @@ def poly_lcm(field_folder): d["X"] = [[galois.Poly(p, field=GF) for p in X] for X in d["X"]] d["Z"] = [galois.Poly(p, field=GF) for p in d["Z"]] return d + + +@pytest.fixture(scope="session") +def poly_prod(field_folder): + GF, folder = field_folder + folder = convert_folder(folder) + with open(os.path.join(folder, "prod.pkl"), "rb") as f: + print(f"Loading {f}...") + d = pickle.load(f) + d["GF"] = GF + d["X"] = [[galois.Poly(p, field=GF) for p in X] for X in d["X"]] + d["Z"] = [galois.Poly(p, field=GF) for p in d["Z"]] + return d diff --git a/tests/polys/data/GF(109987^4)/prod.pkl b/tests/polys/data/GF(109987^4)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..6a750685013a25dad63842c762e73b8ea7e1af04 GIT binary patch literal 10369 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 literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2)/prod.pkl b/tests/polys/data/GF(2)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..d04f748634152036487dd9e31ad80dc4f18eae9b GIT binary patch literal 2063 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 literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^100)/prod.pkl b/tests/polys/data/GF(2^100)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..a67d3f9db329cfbcece85bbd542c72081648222b GIT binary patch literal 13095 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 literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^2)/prod.pkl b/tests/polys/data/GF(2^2)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..651eaee141b1fc2a2ea967e640f2f0b2794b4c4e GIT binary patch literal 2075 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 V)4dChp(Exo*Gl6!m6|%D-v3MFBmw{c literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^8, 283, 19)/prod.pkl b/tests/polys/data/GF(2^8, 283, 19)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..86d9cc0abd5419b41717913a0d7a22b25cfbf50e GIT binary patch literal 1575 zcmX|>4NTQ#6vl(-rUnrcD-4yA;z~x&SSDI%N^|@iS{X$O#PUupbS`z?^6U0th~AOr zb$+C&jY^a9dt_NT6_t{irba+Ub*DfrCBrC3_54qFe|9(i@B2RIoacScbKXGAs$|bK z_O~G94Msf`Dhzq;M|+9><7YK*GKhFGc-H6p|CA+kP(^?3-^L7H(l&Jlk7pC}=*vYC z8O=&JAc^Y;@dA_R;t~x`9>#DBPw*fywwlR&rOM)cb~2P^u2M*SB%T~4C)z4>2sIf+ zySe9a*)kMxmL~}_j2#Z4j1p(pDRh!#(hSnb>q;ADp9sdf3DQZn(*XTgNE7EtuyqB4 z^}US?Wb+C6?9h3l8e-symd*Iw0Ix{RCEJ1bF?b$5sU=9NYUR4HBpzc5IecZcgTivsnlyM{9aExz-+KtCBU6jz<#W*f*;SFG;7%ik)wc`wz zD1Nn(uVNWBPCae1b-6gN{Uo)@S*q9XRKzvY86n;wZsrcvf0^!j zDVn85u7>c8c02Wg%w~-|pQrYwTE_EIXt!>+hR=w%ov_}Rqq=py-Y5?Z8q^+4vXfSI zutCq~pQuQjl~#YZ<6%$^)82Hq$<|?d~-7X17!eVYXATM literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(31)/prod.pkl b/tests/polys/data/GF(31)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..19fbeb877071cf43549b4a5808afeadea566795f GIT binary patch literal 2291 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 C?26L> literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(36893488147419103183)/prod.pkl b/tests/polys/data/GF(36893488147419103183)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..4627689bbcb3a84fee23fe35fdfd6f4b9964a214 GIT binary patch literal 10023 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 literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(5)/prod.pkl b/tests/polys/data/GF(5)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..4f15da880bb76494741dcd0c0c30dd776d8f6327 GIT binary patch literal 1902 zcmZXU&5aaM421hnB9%FjNGE`h_JGiYuty{U*yE5d{_3+IAhvf#-OqNps_dSh*RSuN zw*38gJwEm?ueaC3|NFT2y0+)r>%P9#*?rY@)+2Xkg|`Zyxj&yA6RCnaIqoZYd!joK zXCMyBR`ONpd^o+*2>`A%_^%c1s2?&@c`QV5KrCv>IzsU13aFi&to*Zb&&o#1mb zHWBjWQtY@(gmWT%C!afj+qohetir zUcO{u+Lp{yN@;w|gsACTei7^%S&MDe87Q;_Dgz zS~E1ba79wIZYM&+cLtf9C%-Y7ulq7lPRijGA3NL*=b|_#%``X#nLBz+e`>+kZsXLd z#QNzwcIlEh)Y_3}6oJ7G>62Ycdpp5^xYCpFR`Dkz?#CREGZmCF=3iRO%cU9B4;9)`?uGR*GGQ$Wxv<+*l+cD)|>U?s9>$P+D&{D9lKAvhlQ-?zE;krO2;d+ z|Jz$Cy22A29>UlS}*lC zxYq7dtBS!t8CI83ZGZfwW1WnA?V^6?JIzR7Qh~ zg-ob8kdoNaAM<>Q&50Q^yO=wf2yl~^xXzDLDJz|CT_q$be`O?oIT-{v(C*5E3Oj;i za^}Q@S7mn(e(CDLCH$c*@lISKd{PUZu-UhkF~%D$72{5qtz{`aH;e7)NG&zkL*pP} zWGoel66;yAnDlA=V{b6Q+cUA>&rSe&sz;wmzuca7WmG!3o?WQMVG~g!)OnQ1T-S{B zPR|A0m8F;blaCR!2?P-En4KUFfy>cv27NC+rnUOR#rA@K~AN^DG~sC*x|3CY-u zey&>ND?}&K46oYo&>_Q-TCszPb2zcFPVHGI>KTD3k*g7-lbvykS{b_F#I(n+&dSeq z);$kI;a&LywVn8o(SxY3VaKCWRO>NqO>|KellHgyMvqxpN6O{vhko&_-zpY=R0zJ| z$UtS!S${Jv(IV?~pKKe&IHxD&rYfn<4OQlsSGwogdKc$>PC=dNr3)1)M0t+TD-$vK S$cc8aPS4E_uBQL^_4PlF`IOB7 literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(7^3)/prod.pkl b/tests/polys/data/GF(7^3)/prod.pkl new file mode 100644 index 0000000000000000000000000000000000000000..0e194c6b9f36e50999666d6e09acc3dd690eaf75 GIT binary patch literal 2404 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 literal 0 HcmV?d00001 diff --git a/tests/polys/test_arithmetic_functions.py b/tests/polys/test_arithmetic_functions.py index d380f45a5..510a358ba 100644 --- a/tests/polys/test_arithmetic_functions.py +++ b/tests/polys/test_arithmetic_functions.py @@ -73,3 +73,21 @@ def test_lcm(poly_lcm): assert z == Z[i] assert isinstance(z, galois.Poly) + + +def test_prod_exceptions(): + with pytest.raises(ValueError): + a = galois.Poly.Random(5) + b = galois.Poly.Random(4, field=galois.GF(3)) + c = galois.Poly.Random(3) + galois.prod(a, b, c) + + +def test_prod(poly_prod): + GF, X, Z = poly_prod["GF"], poly_prod["X"], poly_prod["Z"] + for i in range(len(X)): + x = X[i] + z = galois.prod(*x) + + assert z == Z[i] + assert isinstance(z, galois.Poly)