diff options
| author | J08nY | 2025-03-31 10:58:19 +0200 |
|---|---|---|
| committer | J08nY | 2025-04-16 12:25:07 +0200 |
| commit | 085bf291c2c1c339b5271058a528c7b03b189971 (patch) | |
| tree | 6951b668f4d2ada8ffadc82b7b4259b58e7635c6 /epare/formulas.ipynb | |
| parent | 4a2d92951d2c68240f02d7b21ab187a5b38271d3 (diff) | |
| download | ECTester-085bf291c2c1c339b5271058a528c7b03b189971.tar.gz ECTester-085bf291c2c1c339b5271058a528c7b03b189971.tar.zst ECTester-085bf291c2c1c339b5271058a528c7b03b189971.zip | |
Diffstat (limited to 'epare/formulas.ipynb')
| -rw-r--r-- | epare/formulas.ipynb | 559 |
1 files changed, 559 insertions, 0 deletions
diff --git a/epare/formulas.ipynb b/epare/formulas.ipynb new file mode 100644 index 0000000..e63d295 --- /dev/null +++ b/epare/formulas.ipynb @@ -0,0 +1,559 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "672213e3-f426-4113-b5b6-304002474ce3", + "metadata": {}, + "source": [ + "# Formula analysis" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "09d92ba3-ede4-40c3-a061-a9c328e26fb5", + "metadata": {}, + "outputs": [], + "source": [ + "import io\n", + "import json\n", + "\n", + "from pprint import pprint\n", + "import tabulate\n", + "from IPython.display import HTML, display\n", + "\n", + "from pyecsca.ec.params import load_params_ecgen\n", + "from pyecsca.ec.coordinates import AffineCoordinateModel\n", + "from pyecsca.ec.model import ShortWeierstrassModel\n", + "from pyecsca.ec.point import Point\n", + "from pyecsca.ec.mod import mod\n", + "from pyecsca.ec.error import UnsatisfiedAssumptionError\n", + "from pyecsca.misc.cfg import TemporaryConfig" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5155a3ab-fd65-4add-ac3d-413de337c849", + "metadata": {}, + "outputs": [], + "source": [ + "model = ShortWeierstrassModel()\n", + "affine_coords = AffineCoordinateModel(model)\n", + "\n", + "curve_data = b\"\"\"[{\n", + " \"field\": {\n", + " \"p\": \"0x57880ae612d14d33afd0c965938ac1ba44824036cea5d4a1699a9f44000fb273\"\n", + " },\n", + " \"a\": \"0x55d376d1fbcc919da841bb13352d4e419ac85a100fb806014bed884db5916399\",\n", + " \"b\": \"0x21e27f7a065039ee59fd6b12c33d96709642aa6ac3738bd4f66fc663c79a19f8\",\n", + " \"order\": \"0x57880ae612d14d33afd0c965938ac1b91f16808ee875095bafed41e136ca7bfe\",\n", + " \"subgroups\": [\n", + " {\n", + " \"x\": \"0x407d5c52d9ad6f25bd7ff25f07804b4e4ebd4f5c992eafeb8c92e33f81e73b85\",\n", + " \"y\": \"0x4b92eefcfa7c5e295c7e649801b83649156974064a8649f9a94f915754bd2183\",\n", + " \"order\": \"0x57880ae612d14d33afd0c965938ac1b91f16808ee875095bafed41e136ca7bfe\",\n", + " \"cofactor\": \"0x1\",\n", + " \"points\": [\n", + " {\n", + " \"x\": \"0x2571326cc99fe050bfe1a6a02ea635c56504e49d122152fd281761748a0501d9\",\n", + " \"y\": \"0x0000000000000000000000000000000000000000000000000000000000000000\",\n", + " \"order\": \"0x2\"\n", + " },\n", + " {\n", + " \"x\": \"0x266a5c5927e4f6feec30a9f3e2acb535657f365e1a24c1bb0b0d9158a7668639\",\n", + " \"y\": \"0x49c431e2a2704efb4b193e0fa26c60f815eaf195f712befd53b7bafb72b98488\",\n", + " \"order\": \"0x2bc405730968a699d7e864b2c9c560dc8f8b4047743a84add7f6a0f09b653dff\"\n", + " }\n", + " ]\n", + " }\n", + " ]\n", + "}]\"\"\"\n", + "curve_json = json.loads(curve_data)[0]\n", + "p = int(curve_json[\"field\"][\"p\"], 16)\n", + "order2_aff = Point(affine_coords,\n", + " x=mod(int(curve_json[\"subgroups\"][0][\"points\"][0][\"x\"], 16), p),\n", + " y=mod(int(curve_json[\"subgroups\"][0][\"points\"][0][\"y\"], 16), p))\n", + "orderbig_aff = Point(affine_coords,\n", + " x=mod(int(curve_json[\"subgroups\"][0][\"points\"][1][\"x\"], 16), p),\n", + " y=mod(int(curve_json[\"subgroups\"][0][\"points\"][1][\"y\"], 16), p))\n", + "\n", + "def allzero(pt):\n", + " return all(value == 0 for value in pt.coords.values())\n", + "\n", + "def affine(pt):\n", + " try:\n", + " pt.to_affine()\n", + " except Exception:\n", + " return False\n", + " return True\n", + "\n", + "def on_curve(curve, pt):\n", + " try:\n", + " return curve.is_on_curve(pt)\n", + " except Exception:\n", + " return False\n", + "\n", + "def eval_test(expected, out, curve):\n", + " return (expected.equals_homog(out) if expected is not None else \"Undefined\", allzero(out), affine(out), on_curve(curve, out), out)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e045a4cf-97db-4a2f-a191-582987f6473d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Skipping jacobian-3, unsatisfied assumption\n", + "Skipping jacobian-0, unsatisfied assumption\n", + "Skipping projective-1, unsatisfied assumption\n", + "Skipping projective-3, unsatisfied assumption\n", + "Skipping w12-0, unsatisfied assumption\n", + "Skipping xyzz-3, unsatisfied assumption\n" + ] + } + ], + "source": [ + "results_add = {}\n", + "results_dbl = {}\n", + "\n", + "with TemporaryConfig() as cfg:\n", + " cfg.ec.unsatisfied_formula_assumption_action = \"ignore\"\n", + " for coords_name, coords in model.coordinates.items():\n", + " try:\n", + " params = load_params_ecgen(io.BytesIO(curve_data), coords_name, infty=False)\n", + " except UnsatisfiedAssumptionError:\n", + " print(f\"Skipping {coords_name}, unsatisfied assumption\")\n", + " continue\n", + " results_add[coords_name] = {}\n", + " results_dbl[coords_name] = {}\n", + " infty = params.curve.neutral\n", + " order2 = order2_aff.to_model(coords, params.curve)\n", + " orderbig = orderbig_aff.to_model(coords, params.curve)\n", + " orderbig_neg = params.curve.affine_negate(orderbig_aff).to_model(coords, params.curve)\n", + " orderbig2 = params.curve.affine_double(orderbig_aff).to_model(coords, params.curve)\n", + " zeros = Point(coords, **{var: mod(0, p) for var in coords.variables})\n", + "\n", + " adds = set(formula for formula in coords.formulas.values() if formula.shortname == \"add\")\n", + " dbls = set(formula for formula in coords.formulas.values() if formula.shortname == \"dbl\")\n", + " for add in adds:\n", + " res = {}\n", + " results_add[coords_name][add.name] = res\n", + " # P + P = ?\n", + " PpP = add(p, orderbig, orderbig, **params.curve.parameters)[0]\n", + " # P + infty = ?\n", + " PpInfty = add(p, orderbig, infty, **params.curve.parameters)[0]\n", + " InftypP = add(p, infty, orderbig, **params.curve.parameters)[0]\n", + " # ord2 + ord2 = ?\n", + " O2pO2 = add(p, order2, order2, **params.curve.parameters)[0]\n", + " # P + Q = infty\n", + " EqInfty1 = add(p, orderbig, orderbig_neg, **params.curve.parameters)[0]\n", + " EqInfty2 = add(p, orderbig_neg, orderbig, **params.curve.parameters)[0]\n", + " # P + zeros = ?\n", + " PpZeros = add(p, orderbig, zeros, **params.curve.parameters)[0]\n", + " ZerospP = add(p, zeros, orderbig, **params.curve.parameters)[0]\n", + " res[\"PpP\"] = eval_test(orderbig2, PpP, params.curve)\n", + " res[\"PpInfty\"] = eval_test(orderbig, PpInfty, params.curve)\n", + " res[\"InftypP\"] = eval_test(orderbig, InftypP, params.curve)\n", + " res[\"O2pO2\"] = eval_test(infty, O2pO2, params.curve)\n", + " res[\"EqInfty1\"] = eval_test(infty, EqInfty1, params.curve)\n", + " res[\"EqInfty2\"] = eval_test(infty, EqInfty2, params.curve)\n", + " res[\"PpZeros\"] = eval_test(None, PpZeros, params.curve)\n", + " res[\"ZerospP\"] = eval_test(None, ZerospP, params.curve)\n", + " for dbl in dbls:\n", + " res = {}\n", + " results_dbl[coords_name][dbl.name] = res\n", + " O2twice = dbl(p, order2, **params.curve.parameters)[0]\n", + " Inftytwice = dbl(p, infty, **params.curve.parameters)[0]\n", + " Zerostwice = dbl(p, zeros, **params.curve.parameters)[0]\n", + " res[\"O2twice\"] = eval_test(infty, O2twice, params.curve)\n", + " res[\"Inftytwice\"] = eval_test(infty, Inftytwice, params.curve)\n", + " res[\"Zerostwice\"] = eval_test(None, Zerostwice, params.curve)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "d0928c16-9688-4d65-a559-5895d1b7c85b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<table>\n", + "<thead>\n", + "<tr><th>Formula </th><th>Test </th><th>Correct? </th><th>Zeros? </th><th>Affine? </th><th>On curve? </th></tr>\n", + "</thead>\n", + "<tbody>\n", + "<tr><td>add-2007-bl </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>add-2007-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2002-bj </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>add-2002-bj </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2002-bj </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2002-bj </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2002-bj </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2002-bj </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2002-bj </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2002-bj </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>PpInfty </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>InftypP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2015-rcb </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-1998-cmo</td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>PpP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>InftypP </td><td>True </td><td>False </td><td>True </td><td>True </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>O2pO2 </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2015-rcb </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>add-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2009-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2009-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2009-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2008-s </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2008-s </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2008-s </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2008-s </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-s </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2008-s </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2008-s </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2008-s </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2008-s </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>InftypP </td><td>False </td><td>False </td><td>False </td><td>False </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>zadd-2007-m </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2001-b </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2001-b </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2001-b </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2001-b </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2001-b </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2001-b </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2001-b </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2001-b </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-cmo-2</td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1986-cc </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1986-cc </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1986-cc </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1986-cc </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1986-cc </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1986-cc </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1986-cc </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1986-cc </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2004-hmv </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-g </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-g </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2008-g </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-g </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd-2008-g </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2008-g </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd-2008-g </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd-2008-g </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>InftypP </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mmadd-2007-bl </td><td>ZerospP </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>PpInfty </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>PpZeros </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>add-1998-hnm </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd </td><td>PpP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd </td><td>PpInfty </td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd </td><td>InftypP </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd </td><td>O2pO2 </td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>madd </td><td>EqInfty1</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd </td><td>EqInfty2</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>madd </td><td>PpZeros </td><td>Undefined </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>madd </td><td>ZerospP </td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "</tbody>\n", + "</table>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = [[\"Formula\", \"Test\", \"Correct?\", \"Zeros?\", \"Affine?\", \"On curve?\"]]\n", + "test_filter = None\n", + "for vals in results_add.values():\n", + " for name, formula in vals.items():\n", + " for k, v in formula.items():\n", + " if test_filter is None or k in test_filter:\n", + " table.append((name, k, v[0], v[1], v[2], v[3]))\n", + "display(HTML(tabulate.tabulate(table, tablefmt=\"html\", headers=\"firstrow\")))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2d74db05-0606-4e54-87e0-c7fe0cbb5519", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<table>\n", + "<thead>\n", + "<tr><th>Formula </th><th>Test </th><th>Correct? </th><th>Zeros? </th><th>Affine? </th><th>On curve? </th></tr>\n", + "</thead>\n", + "<tbody>\n", + "<tr><td>mdbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mdbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mdbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2015-rcb </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2015-rcb </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2015-rcb </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo </td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>False </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2009-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2009-bl </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2009-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mdbl-2009-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mdbl-2009-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mdbl-2009-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mdbl-2008-s-1 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mdbl-2008-s-1 </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mdbl-2008-s-1 </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2008-s-1 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2008-s-1 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2008-s-1 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1986-cc </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1986-cc </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1986-cc </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2007-bl </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-cmo-2</td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-1998-hnm </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-hnm </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-1998-hnm </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>mdbl-2007-bl </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>mdbl-2007-bl </td><td>Inftytwice</td><td>False </td><td>False </td><td>True </td><td>False </td></tr>\n", + "<tr><td>mdbl-2007-bl </td><td>Zerostwice</td><td>Undefined </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj-3 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj-3 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj-3 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2002-bj </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2002-it-2 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-it-2 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-it-2 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2002-it </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-it </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-it </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "<tr><td>dbl-2002-bj-2 </td><td>O2twice </td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj-2 </td><td>Inftytwice</td><td>True </td><td>False </td><td>False </td><td>True </td></tr>\n", + "<tr><td>dbl-2002-bj-2 </td><td>Zerostwice</td><td>Undefined </td><td>True </td><td>False </td><td>False </td></tr>\n", + "</tbody>\n", + "</table>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "table = [[\"Formula\", \"Test\", \"Correct?\", \"Zeros?\", \"Affine?\", \"On curve?\"]]\n", + "test_filter = None\n", + "for vals in results_dbl.values():\n", + " for name, formula in vals.items():\n", + " for k, v in formula.items():\n", + " if test_filter is None or k in test_filter:\n", + " table.append((name, k, v[0], v[1], v[2], v[3]))\n", + "display(HTML(tabulate.tabulate(table, tablefmt=\"html\", headers=\"firstrow\")))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9194ed95-4aeb-4aeb-bf8f-b8e0c1f1f987", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} |
