From 7e8a688588e153ed7fd01307c2d9c56566f38c6c Mon Sep 17 00:00:00 2001 From: mhostetter Date: Mon, 7 Nov 2022 14:41:51 -0500 Subject: [PATCH] Make `lagrange_poly()` unit tests more robust --- scripts/generate_field_test_vectors.py | 19 +++++++ tests/polys/conftest.py | 10 ++++ .../polys/data/GF(109987^4)/lagrange_poly.pkl | Bin 0 -> 1329 bytes tests/polys/data/GF(2)/lagrange_poly.pkl | Bin 0 -> 439 bytes .../data/GF(2147483647)/lagrange_poly.pkl | Bin 0 -> 967 bytes tests/polys/data/GF(2^100)/lagrange_poly.pkl | Bin 0 -> 1693 bytes tests/polys/data/GF(2^2)/lagrange_poly.pkl | Bin 0 -> 546 bytes tests/polys/data/GF(2^3)/lagrange_poly.pkl | Bin 0 -> 769 bytes tests/polys/data/GF(2^32)/lagrange_poly.pkl | Bin 0 -> 989 bytes tests/polys/data/GF(2^8)/lagrange_poly.pkl | Bin 0 -> 877 bytes .../data/GF(2^8, 283, 19)/lagrange_poly.pkl | Bin 0 -> 877 bytes tests/polys/data/GF(31)/lagrange_poly.pkl | Bin 0 -> 877 bytes tests/polys/data/GF(3191)/lagrange_poly.pkl | Bin 0 -> 906 bytes .../lagrange_poly.pkl | Bin 0 -> 1306 bytes tests/polys/data/GF(5)/lagrange_poly.pkl | Bin 0 -> 607 bytes tests/polys/data/GF(7)/lagrange_poly.pkl | Bin 0 -> 715 bytes tests/polys/data/GF(7^3)/lagrange_poly.pkl | Bin 0 -> 887 bytes .../data/GF(7^3, 643, 244)/lagrange_poly.pkl | Bin 0 -> 887 bytes tests/polys/test_lagrange_poly.py | 49 ++++-------------- 19 files changed, 38 insertions(+), 40 deletions(-) create mode 100644 tests/polys/data/GF(109987^4)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2147483647)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2^100)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2^2)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2^3)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2^32)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2^8)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(2^8, 283, 19)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(31)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(3191)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(36893488147419103183)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(5)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(7)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(7^3)/lagrange_poly.pkl create mode 100644 tests/polys/data/GF(7^3, 643, 244)/lagrange_poly.pkl diff --git a/scripts/generate_field_test_vectors.py b/scripts/generate_field_test_vectors.py index 9b3305a50..020dd40fa 100644 --- a/scripts/generate_field_test_vectors.py +++ b/scripts/generate_field_test_vectors.py @@ -964,6 +964,25 @@ def make_luts(field, sub_folder, seed, sparse=False): d = {"X": X, "Y": Y, "Z": Z} save_pickle(d, folder, "crt.pkl") + set_seed(seed + 406) + X = [0,]*3 # The x values + Y = [0,]*3 # The y values + Z = [0,]*3 # The lagrange polynomial + for i in range(3): + N = min(10, order) + if dtype == object: + x = randint_matrix(0, order, (N,)) + else: + x = np.array(random.sample(range(0, order), N), dtype=dtype) + y = randint_matrix(0, order, (N,)) + points = [(F(x[i]), F(y[i])) for i in range(N)] + z = RING.lagrange_polynomial(points) + X[i] = x + Y[i] = y + Z[i] = poly_to_list(z) + d = {"X": X, "Y": Y, "Z": Z} + save_pickle(d, folder, "lagrange_poly.pkl") + ############################################################################### # Special polynomials ############################################################################### diff --git a/tests/polys/conftest.py b/tests/polys/conftest.py index b402fe58d..62ecec357 100644 --- a/tests/polys/conftest.py +++ b/tests/polys/conftest.py @@ -208,6 +208,16 @@ def poly_modular_power(field_folder): return d +@pytest.fixture(scope="session") +def poly_lagrange_poly(field_folder): + GF, d = read_pickle(field_folder, "lagrange_poly.pkl") + d["GF"] = GF + d["X"] = [GF(X) for X in d["X"]] + d["Y"] = [GF(Y) for Y in d["Y"]] + d["Z"] = [galois.Poly(p, field=GF) for p in d["Z"]] + return d + + ############################################################################### # Fixtures for special polynomials ############################################################################### diff --git a/tests/polys/data/GF(109987^4)/lagrange_poly.pkl b/tests/polys/data/GF(109987^4)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..466dc1d64eb9bd16fc2d99ac0e45d24cfb920648 GIT binary patch literal 1329 zcmah|X;4#F6wV5H1kq9`%YcCzRw>|AOGszPu$3j1APh@@h>$!Di!6~;p;8fu$Rh}t zM@OIqDNc{niT{F2DP(Q^ zTXEX^Lt-ils$!~`rZq3t`>%DwZ8N>uqC(SM=zB7TJnz0?Ib1l<1XN7a=}c9YSGYcuer2VDW36Y6?aRe5}krG^1o-NYC%-R~{kygK!$} zcapGM0qhz$W0&lVMY4q?mk*zEPce=`8HQJl_a?FnH$kZmu!prD6uG(o#Azp=pF_R%i@;C}wy@ro;Z zXMlI&kvYG1DC!MaYX+4Q`PysozYV%N)&CG(op1qm0pIwgL!^NT^vZ8~SUUf%LjtX! zcXTSQ#f0Smd;W$@?^B&Gj)3dqL4I5p4_z0KS39{8Y)20Zf#Jp8as93gsw_CH>4%pMZ&n7wd)_u zGl{C%Ocv_Z=>j2dTrgO4*1!w!sjd5(n-{J=Bw{pGhsNTiZ-6_7xW=x0x71bG2US)l r@OpjC+7MJV4>h!w__!BB_$v8ZV}4RWG!ST1vtt}e^RHwSl{)_eWAYO| literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2)/lagrange_poly.pkl b/tests/polys/data/GF(2)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..48bdeee12bb358b94f46e6ae44b2c81de4d0604c GIT binary patch literal 439 zcmZo*nYxCN0Ss!VX!I~fOo;_jqIspc1(kZq`9-OExurQJnTbV3iIr1&c;bsvlk@Y6 zONvU9OQuYo(!&Z?IHiX@F9o7x@)U1|)+x@6NmJUV1WnQKX7pxiosz-U!g#xMmaoWYvG0Wv*<3)yTT ss;ExwVT=TMovl0r#K@dqf26e7?{bOa)pM$|tM1=-HEKl&#hkA1k?x%YhUS*!TYxJW>s zW+LZ>B}C&R++?e@*cCc6$0}-VMr)0h32$; zgb_H1N?1*9l0qV9gpAZd4F0@CZ?#)k+~QZ0N;*4seiiY;bfQ+PVcYl64@O`m)t#z> zo+Y^oQ#nNLAhf(c>MAs08C>q*|hq|#g4NNbtOTpVTl?u%x8Vg)| zmItui5^06G5OXw(yRwz82=KT!6QI%KX@JD;rjrmTuoXl5F>f#!zRbkJ-CoWF=e%DN zp`x!+KzH?g)WpGb@^~_2Nhiv|Y!~Ok*l3C#Ry;@jVKZ%tgTBFA8SrF483W(nC8}B0 GruYL1K_@)` literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^100)/lagrange_poly.pkl b/tests/polys/data/GF(2^100)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..fe51f9965a47efeee640d280d91cfa4e6a0520f0 GIT binary patch literal 1693 zcmai!dpuNW7{_Or8N)j6%A!RiTTv4QRP zm6C~e3MFNgOBAU@(nYS-(CmZ#WB=ODALo4D&+|Ud`~5x7@4SZzIaws!;={&txOgwj z4?c!Zy)uXdQBlib}hX=-DTuJ|MD&-&}A~KvsiNvxoE^%=q#uZ}(Ep5rh z>~SfWC4MiKin(Gs_IP`V6fBs;B?d*tGN}tGBF=_b+R>$`C>I}(IXOAm3E^3M*_%dU zd((gcMY0{jtUN+UA@$m44@#lPBPZnx=c_#)C<)4^#Zcr}XQC~0f=I(OHLppc$hc~T z{P!*D8560gEkB`%;doR25YD`Mw)8ny8b#LlTSXmcXeE@r2zdgf`bXb6$cF8zn5!U$ zL)53_K=7^EFMBCJI}So+bdY2I=j_OoGie8hqtS~SBafcWc=z@vC3#dxC09&UhP z&jR$zTO!JLjYdEF`E7ux(RD^kk#2N2kG#49N^z1}&3nI&9UGOYUnBBEXkmko_9}{l zlM0R!0|%Qv*V$)b7isCW%5qnx%#0S zVQ59gyy8~+SF7`dL$e?$^$+$K^F1+z#`bC=EkIMbc<%*2{%^;NiiVs-Csro72<#Mq z78^b3p_VqBQMu`~0`NSRQ!^oZS6aS!8DdPJu)t}T_};W4IZTqy_zPxgS4BX7V36 z8n)wqXcJ;8)zh3KzS{PbY%?U&K9i32WLisEaso`jf%^>)Me$_))<2Ux5e6D)E}AT4 zQm4Euq-Ov&r)xh=Y;zDbE!f=O4bZ4Tl|zP`_Oexuv2~DJ?$yp@+CL`{=RMy6Wz@{} z60AHR*5dA))6g9QXA|GPf(l-CH_I7vSsq%wHyF$!sZi^7I(Bu~Q)i;~n zl)2u3ogejd7Xt|&J$gTAq@Z{u;YMe`=umU7vB|XTV+gMbKvCp$soB}g(;;g+#qi(` zKK&JkU>2aYp5;k~+_Qu>3iCnG#eTkVln8Z^tn+!V%}Gt)M)@PJbs*t8Z8TY$cX+Je zF8xkM?m^@Y7o>N600iaFzJoDRmt5&o^+rfJRGEsVu#J0Krt% AfdBvi literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^2)/lagrange_poly.pkl b/tests/polys/data/GF(2^2)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..f5f153a9ff477cd457858a5819fa0ef40a50e866 GIT binary patch literal 546 zcma)(u?oU45QdYqRS_paTpgV{JGi+S=-{M+NLvFHw3V0+9R!!6LN?Fm)ue4e3Kf%Z zcaZz;{!6a*Ye-PBE-;pO2^-}Gae6#uZkTZ99@B%^`<(k3$ljK-Fp1BCr=fr+NT)~y z*^YN*$`dHcVTJ>^!2-qwIjVev0 zGG%cUS(OKs7CBKzcZ<5;z4~8toigQq)24@^>smC;Bwp#KYSvJvO%+r9KMi&2zX=T0 bb0rc zqM;Kx-6xVutM!m_A|nnomn-_9JDM74CI>1Lr`Julx4uMeZs_> z!3K78`>V#YTPGjh#62f&W>!bVistHjX1g@ p9!}`dpAbJLG1>@|@|OHY*83v%#cXT-Qzq$ss`q+Z@>bTi*)OR4h0_24 literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^32)/lagrange_poly.pkl b/tests/polys/data/GF(2^32)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..2a1491ba57b5ceae8c20079284dc5f8977944692 GIT binary patch literal 989 zcmaLVdq`7J7y$5lwOb)(q*)gx_9f$RF%H2T0V%L3!qWX3N}^QDX_#V`cnO!5?7lVEkX~3Q6r$gz!QKRf z633PL291C09)hl(&(-vUGd(Xwpybq6Ie4TsiGA+T9IyiM)Z(fT^gmvf1(vHjC&3nL z+b$5BmX%V{gV3GS;@{q^P1X2;{#KBsi_X)7=XtYLU~oaM5iI;^mk;t++A_fOUq`jz zh})q7u%SI87@T)siUjwrcD2Bn?bS23_BLeOt1Q{oGUd0DAdcJSg@Wxnj?-ZMf+PS; zIL+Gxx7R)og8ElUJ|I-1HDm-F-T(I(v$%NJ!&~r1XC)WZKU$9h=`Qgc zIM`Sh3-bBnYjp?CScDmd+yD5h$|}8 zJ>boI_XEMvw16~l=jjLbulxH&BjJmhE{5W*4jTv*ZM^8jP)@}TI|SO!uW~^mPRVuj z&So?nrCYZ7G1QkV?@9vMJuW=SP=-ePS%PL~i)3UO!BEGfm)A_V;u8%7vJqa9p@;rc zT!vbDa$%W3W)qVf)ZslQVyM;`{LGYi*s=OOy8^25>7!7ot%E&siz>-rsH)ti2LxK^ h%_LDsM~)axZ-mRx>lU>YYCP*{jX3Mot~9OU{sB{WLSz5{ literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(2^8)/lagrange_poly.pkl b/tests/polys/data/GF(2^8)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..3e56b877e08549c7d0f13cb111cfc3b80db5411b GIT binary patch literal 877 zcmaLVJ4?e*6bJCcwkovp_Cb@k%gUZ_i11gbd%H6RyJsJb{z& z0J1Tx?2>!U*~#v|a~m|OO(W|X9>Es;hW2P9h*w|Je%226)moEopq;`$a-%k(N3u|31tq5F|P0|dr2gB zndKhcnNagN$$X?MImXr9_FacAj&mp!n*K3{bs|CKST!&+)b2?*hZ=l=kMI&+ziyOZ62d-E98mXI|C&)^ZXt8F5lfJOKQRoJ;2l7t2>TJQndy?-E{hqv$v zUPH5*q>Ewm)BV539b}KdW4H|iumYmOowh0pL1dZ7JxVMiCu9W@T}l143BAqNdojY_mi4auBOQ;J@xX~e_yP7&Ip YqBTEA-{hh-3eq~AQiTfSlO)am3j(&bQvd(} literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(31)/lagrange_poly.pkl b/tests/polys/data/GF(31)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..3de3960304f9996eba66de722dee6fdf362d4fa2 GIT binary patch literal 877 zcma))%TK~U5XQSedC5b-qJntl#My&4ZcajsCp9sKN0XAsBegwnAn`(!WN(arukM!l z5-t*(roYVYbiVm!_apN?N;}E3=B`$c{9@qEt`6 z?@<_!Bi^xglSJ0J`DCB6V{$g!S0n!92kw%h;)a8)b|=wl>DymY(;MD??RV2!-SS{C zxcf0r@*yYU(YAkI-1p>M2pdA_)j5~=L|75lg)L!0$fj)I26@|EP(19dZq!PW)fA$7 zRpOfPQiyJ{5<|5u@&D93$wsfJ29Kw*uY`Hwnea+z)qJgTkbD)KQ|oEvyt4Yvi8gBm6XPi64{HB`sB9(pqqeYO)dFQq9% u6>=#>9ebn6qpEM$8&sw&mCU+F1@o7~%zlq@A=5NZ-}^q_^S;kB6Ux%K9LPOmyxe8&yvu{aw38aj z#Ee19jHR3byRXNxdNSONc3Y+~m>#h$$FTV#chww`yPzG!A>F2op0QEi8 zkKv&b{5sTEkZ|^29=G7-JIOgDw+0Vy=(j=r00}ODw}Zq>;q~uCAEEXRPj|p6Bv}F# z0ye`FC-w#Rle)qH literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(36893488147419103183)/lagrange_poly.pkl b/tests/polys/data/GF(36893488147419103183)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..6ced2b1877b43f01ebfbe2e91ac22014953c11c7 GIT binary patch literal 1306 zcmaizdoWyg6vy{sxmRO728maKC`Lu8%1|?vh9t(Ot3nY}SeC8qZjkj@R=v6*zigha zNR73qR6SM`G?~a#tHNZ1N>OwqWvHO_+^+HLv8FTqtGR#N`SC$B(k=bsQJ5-=L>hT>S9btG8hcM zEqGKfx)+~ho(B(z=m=D_XytEJVu;`w=BMnDTnhsXtTWBexgE9)=+|1X5P4b@2{@#Y zkznhQbpg=gdWevgbB>Q8yqOc6xGy1158;hPzpvk7P@onpD?f)7#*s;>pSvY=9#@2)O6INF{%w6YO0QZJihs56scLdDp_cs1u zveg?<%kD5eGw+8`&~Lqbq{Q=jl?x&ybm1r;o2c1Oq=M4O_=2^xHzz zMl>S(RN|U}U=o6R0$hB;D`AF-HcM)zgv*`9SjY~tgLyLw_$)0D25dM1Z zVy+aEf(YH%ce3j3{Y!w;a-kyij@wbdfzjF6)y8TO?2XB#YTHn5=L+<69iG!*O75Gy z@tE2LM!LND=^*ITgB%j23&XvDYaPWj?OoNgFz;?&wwz;l-wP2`A??7cikd=D`tuV# zKbp&f08qN2se1{d6{I4fVk<+&)or6P0PB~3yU@MTRY`f16?{ItC&aow z(-+}s5{IaXqt87NA?OzTQqRoGgGNd-yLyp_{CDuAZrSf{y}?sMc$B%4nC?Cpgow^W zxv}P*7x$o2K9sSPZ=72MXq7f#Ru{hC6K2xy{i~@jjcfAn8HH`1k?OB`S*I6K^60}s zn8rEIXrL+kM=gYBM)0d^a{Tup!dtYd7?|+532FPZfUyStug4G`d8J4p^0y2`xM|YI z4B>%vGelq#v#WzIlycC;WQ*~$dheG5vTt*XkGLtGP*^Ils6ldWmK`?)nHAh8>h$xf zZ@}Emv&~j<&QB&GD)ez(dD=6BAZlLv$9uJFwND{hLY@0 Zwi?mRaVdd((-$iZ7SBRN6c#JR=^rKiBa{FD literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(5)/lagrange_poly.pkl b/tests/polys/data/GF(5)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..8884420dbd89ab4793f80fb17df29783d8d1de52 GIT binary patch literal 607 zcmb7>KMTSz5XF=JQ4uG>@6f5UgPWUy4&tDKh}J+0S|z4K2f;;D$maQZHEDYw0YTG} z*Q57de%GG8=fol9Izgc56c$=~S-v|IVZ0YS+~r%Du7p?>pgK#z<9&9NB9A3JK>1}O zsAjgQS{}g21%`ADR~SRUDDy9nG?c%Q#eo}(llI|$tKPbb4j_u6(Mzv#V?@IGJ`CK7 ziPUVwt7{ZmKY(se{G?@0P1>Jlc6EyFMi-`I+HWbg+h#H;T+x~Ngx{I$6lDC53CYog micF}#O@?k{v9+FTZYI;W{;Mu?%+9egwO3Xit1gH0JbVMlY=Kq) literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(7)/lagrange_poly.pkl b/tests/polys/data/GF(7)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..b9657c8eec1057f513a0f7c415905f5b028a43ca GIT binary patch literal 715 zcma)2v1-FG5S8r6DWy}P|B%UZhHlv^@X)C(l#)0C2NEZ!^5CJ+CA0x;x%^N5td%T1 z2!@0Rb5A(6waQn`(k!N0Pg}BgA6k{``qSv9 zG_)rxxbEgZE z8Jg`T7g)Wf|~1q*6@Hq`swFRQ{MJe=#&SNE#Q z@>jp|^Pb@q2+u&|f$)BvXRv_%888cGysU}|!GcGy(FJeR#ZA2VO}I}cQpilElDU|v UkV#zDy?pF4X}G%@pHWTz589N3X#fBK literal 0 HcmV?d00001 diff --git a/tests/polys/data/GF(7^3)/lagrange_poly.pkl b/tests/polys/data/GF(7^3)/lagrange_poly.pkl new file mode 100644 index 0000000000000000000000000000000000000000..11d458cc536231c6a3f29bdc932f12e9a2eb8945 GIT binary patch literal 887 zcmaKqyGsK>5XNs4qai4W5X7j3Xb~TrAc~3#f}rBCNl+0Lf_ZolAurAg7*VkB3D-GR z!Nyk9&cfbO{0}T_M6j?F8@+kW z>E4wK@fCalbt8g;JD2te1Q(jiA8=!bAz%JEC+9yilXG9E}B@Y{*P=u`4eN?VZB5OJ0jmtt3hiBYg2 z3IW5P*J@SS`ovRQ6|JTd^%^WDlF4M^#~k*9Bu!*n@tqmwG}_QWefg7ztvqK__w!V)9o2q2~_3aEY|Db7x)3jz$SPC_IA5QmJcp~w27B4;sIzK z`T}(Kl!CV0WP=@8SNH!Oqo_6su7TgEl7h}b2f<}90D6$udygB)cHLxXw~G+;JeUT@ zP<;W~{SSJ(b&&1u$#s3fx_fVT&|7es0w=(C#BrjB)`^;vZ!>d}LihAZgFMdo0OP}q tQnDGOFm)+Pb-LlxjMn)aqX#;&Bd