From 085bf291c2c1c339b5271058a528c7b03b189971 Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 31 Mar 2025 10:58:19 +0200 Subject: Explore formula behavior. --- epare/formulas.ipynb | 559 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 559 insertions(+) create mode 100644 epare/formulas.ipynb 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": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Formula Test Correct? Zeros? Affine? On curve?
add-2007-bl PpP True False True True
add-2007-bl PpInfty False True False False
add-2007-bl InftypP False True False False
add-2007-bl O2pO2 True False False True
add-2007-bl EqInfty1True False False True
add-2007-bl EqInfty2True False False True
add-2007-bl PpZeros Undefined True False False
add-2007-bl ZerospP Undefined True False False
add-2002-bj PpP True False True True
add-2002-bj PpInfty False True False False
add-2002-bj InftypP False True False False
add-2002-bj O2pO2 True False False True
add-2002-bj EqInfty1True False False True
add-2002-bj EqInfty2True False False True
add-2002-bj PpZeros Undefined True False False
add-2002-bj ZerospP Undefined True False False
add-2015-rcb PpP True False True True
add-2015-rcb PpInfty True False True True
add-2015-rcb InftypP True False True True
add-2015-rcb O2pO2 True False False True
add-2015-rcb EqInfty1True False False True
add-2015-rcb EqInfty2True False False True
add-2015-rcb PpZeros Undefined True False False
add-2015-rcb ZerospP Undefined True False False
mmadd-1998-cmoPpP False True False False
mmadd-1998-cmoPpInfty False False True False
mmadd-1998-cmoInftypP False False True False
mmadd-1998-cmoO2pO2 False True False False
mmadd-1998-cmoEqInfty1True False False True
mmadd-1998-cmoEqInfty2True False False True
mmadd-1998-cmoPpZeros Undefined False True False
mmadd-1998-cmoZerospP Undefined False True False
add-1998-cmo PpP False True False False
add-1998-cmo PpInfty False True False False
add-1998-cmo InftypP False True False False
add-1998-cmo O2pO2 False True False False
add-1998-cmo EqInfty1True False False True
add-1998-cmo EqInfty2True False False True
add-1998-cmo PpZeros Undefined True False False
add-1998-cmo ZerospP Undefined True False False
madd-1998-cmo PpP False True False False
madd-1998-cmo PpInfty False False True False
madd-1998-cmo InftypP False True False False
madd-1998-cmo O2pO2 False True False False
madd-1998-cmo EqInfty1True False False True
madd-1998-cmo EqInfty2True False False True
madd-1998-cmo PpZeros Undefined False True False
madd-1998-cmo ZerospP Undefined True False False
madd-2015-rcb PpP True False True True
madd-2015-rcb PpInfty False False True False
madd-2015-rcb InftypP True False True True
madd-2015-rcb O2pO2 True False False True
madd-2015-rcb EqInfty1True False False True
madd-2015-rcb EqInfty2True False False True
madd-2015-rcb PpZeros Undefined False True False
madd-2015-rcb ZerospP Undefined True False False
add-1998-cmo-2PpP False True False False
add-1998-cmo-2PpInfty False True False False
add-1998-cmo-2InftypP False True False False
add-1998-cmo-2O2pO2 False True False False
add-1998-cmo-2EqInfty1True False False True
add-1998-cmo-2EqInfty2True False False True
add-1998-cmo-2PpZeros Undefined True False False
add-1998-cmo-2ZerospP Undefined True False False
mmadd-2009-bl PpP False True False False
mmadd-2009-bl PpInfty False False True False
mmadd-2009-bl InftypP False False True False
mmadd-2009-bl O2pO2 False True False False
mmadd-2009-bl EqInfty1True False False True
mmadd-2009-bl EqInfty2True False False True
mmadd-2009-bl PpZeros Undefined False True False
mmadd-2009-bl ZerospP Undefined False True False
add-2009-bl PpP False True False False
add-2009-bl PpInfty False True False False
add-2009-bl InftypP False True False False
add-2009-bl O2pO2 False True False False
add-2009-bl EqInfty1True False False True
add-2009-bl EqInfty2True False False True
add-2009-bl PpZeros Undefined True False False
add-2009-bl ZerospP Undefined True False False
madd-2009-bl PpP False True False False
madd-2009-bl PpInfty False False True False
madd-2009-bl InftypP False True False False
madd-2009-bl O2pO2 False True False False
madd-2009-bl EqInfty1True False False True
madd-2009-bl EqInfty2True False False True
madd-2009-bl PpZeros Undefined False True False
madd-2009-bl ZerospP Undefined True False False
add-1998-cmo-2PpP False True False False
add-1998-cmo-2PpInfty False True False False
add-1998-cmo-2InftypP False True False False
add-1998-cmo-2O2pO2 False True False False
add-1998-cmo-2EqInfty1True False False True
add-1998-cmo-2EqInfty2True False False True
add-1998-cmo-2PpZeros Undefined True False False
add-1998-cmo-2ZerospP Undefined True False False
add-2008-s PpP False True False False
add-2008-s PpInfty False True False False
add-2008-s InftypP False True False False
add-2008-s O2pO2 False True False False
add-2008-s EqInfty1True False False True
add-2008-s EqInfty2True False False True
add-2008-s PpZeros Undefined True False False
add-2008-s ZerospP Undefined True False False
madd-2008-s PpP False True False False
madd-2008-s PpInfty False False True False
madd-2008-s InftypP False True False False
madd-2008-s O2pO2 False True False False
madd-2008-s EqInfty1True False False True
madd-2008-s EqInfty2True False False True
madd-2008-s PpZeros Undefined False True False
madd-2008-s ZerospP Undefined True False False
mmadd-2008-s PpP False True False False
mmadd-2008-s PpInfty False False True False
mmadd-2008-s InftypP False False True False
mmadd-2008-s O2pO2 False True False False
mmadd-2008-s EqInfty1True False False True
mmadd-2008-s EqInfty2True False False True
mmadd-2008-s PpZeros Undefined False True False
mmadd-2008-s ZerospP Undefined False True False
madd-2007-bl PpP False True False False
madd-2007-bl PpInfty False False True False
madd-2007-bl InftypP False True False False
madd-2007-bl O2pO2 False True False False
madd-2007-bl EqInfty1True False False True
madd-2007-bl EqInfty2True False False True
madd-2007-bl PpZeros Undefined False True False
madd-2007-bl ZerospP Undefined True False False
add-1998-cmo PpP False True False False
add-1998-cmo PpInfty False True False False
add-1998-cmo InftypP False True False False
add-1998-cmo O2pO2 False True False False
add-1998-cmo EqInfty1True False False True
add-1998-cmo EqInfty2True False False True
add-1998-cmo PpZeros Undefined True False False
add-1998-cmo ZerospP Undefined True False False
zadd-2007-m PpP False True False False
zadd-2007-m PpInfty False False True False
zadd-2007-m InftypP False False False False
zadd-2007-m O2pO2 False True False False
zadd-2007-m EqInfty1True False False True
zadd-2007-m EqInfty2True False False True
zadd-2007-m PpZeros Undefined False True False
zadd-2007-m ZerospP Undefined False False False
add-2001-b PpP False True False False
add-2001-b PpInfty False True False False
add-2001-b InftypP False True False False
add-2001-b O2pO2 False True False False
add-2001-b EqInfty1True False False True
add-2001-b EqInfty2True False False True
add-2001-b PpZeros Undefined True False False
add-2001-b ZerospP Undefined True False False
add-1998-cmo-2PpP False True False False
add-1998-cmo-2PpInfty False True False False
add-1998-cmo-2InftypP False True False False
add-1998-cmo-2O2pO2 False True False False
add-1998-cmo-2EqInfty1True False False True
add-1998-cmo-2EqInfty2True False False True
add-1998-cmo-2PpZeros Undefined True False False
add-1998-cmo-2ZerospP Undefined True False False
add-1986-cc PpP False True False False
add-1986-cc PpInfty False True False False
add-1986-cc InftypP False True False False
add-1986-cc O2pO2 False True False False
add-1986-cc EqInfty1True False False True
add-1986-cc EqInfty2True False False True
add-1986-cc PpZeros Undefined True False False
add-1986-cc ZerospP Undefined True False False
madd-2004-hmv PpP False True False False
madd-2004-hmv PpInfty False False True False
madd-2004-hmv InftypP False True False False
madd-2004-hmv O2pO2 False True False False
madd-2004-hmv EqInfty1True False False True
madd-2004-hmv EqInfty2True False False True
madd-2004-hmv PpZeros Undefined False True False
madd-2004-hmv ZerospP Undefined True False False
add-2007-bl PpP False True False False
add-2007-bl PpInfty False True False False
add-2007-bl InftypP False True False False
add-2007-bl O2pO2 False True False False
add-2007-bl EqInfty1True False False True
add-2007-bl EqInfty2True False False True
add-2007-bl PpZeros Undefined True False False
add-2007-bl ZerospP Undefined True False False
madd-2008-g PpP False True False False
madd-2008-g PpInfty False False True False
madd-2008-g InftypP False True False False
madd-2008-g O2pO2 False True False False
madd-2008-g EqInfty1True False False True
madd-2008-g EqInfty2True False False True
madd-2008-g PpZeros Undefined False True False
madd-2008-g ZerospP Undefined True False False
mmadd-2007-bl PpP False True False False
mmadd-2007-bl PpInfty False False True False
mmadd-2007-bl InftypP False False True False
mmadd-2007-bl O2pO2 False True False False
mmadd-2007-bl EqInfty1True False False True
mmadd-2007-bl EqInfty2True False False True
mmadd-2007-bl PpZeros Undefined False True False
mmadd-2007-bl ZerospP Undefined False True False
add-1998-hnm PpP False True False False
add-1998-hnm PpInfty False True False False
add-1998-hnm InftypP False True False False
add-1998-hnm O2pO2 False True False False
add-1998-hnm EqInfty1True False False True
add-1998-hnm EqInfty2True False False True
add-1998-hnm PpZeros Undefined True False False
add-1998-hnm ZerospP Undefined True False False
madd PpP False True False False
madd PpInfty False False True False
madd InftypP False True False False
madd O2pO2 False True False False
madd EqInfty1True False False True
madd EqInfty2True False False True
madd PpZeros Undefined False True False
madd ZerospP Undefined True False False
" + ], + "text/plain": [ + "" + ] + }, + "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": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
Formula Test Correct? Zeros? Affine? On curve?
mdbl-2007-bl O2twice True False False True
mdbl-2007-bl InftytwiceFalse False True False
mdbl-2007-bl ZerostwiceUndefined False False True
dbl-2015-rcb O2twice True False False True
dbl-2015-rcb InftytwiceTrue False False True
dbl-2015-rcb ZerostwiceUndefined True False False
dbl-1998-cmo O2twice True False False True
dbl-1998-cmo InftytwiceFalse True False False
dbl-1998-cmo ZerostwiceUndefined True False False
dbl-2007-bl O2twice True False False True
dbl-2007-bl InftytwiceFalse True False False
dbl-2007-bl ZerostwiceUndefined True False False
dbl-1998-cmo-2O2twice True False False True
dbl-1998-cmo-2InftytwiceFalse True False False
dbl-1998-cmo-2ZerostwiceUndefined True False False
dbl-2009-bl O2twice True False False True
dbl-2009-bl InftytwiceTrue False False True
dbl-2009-bl ZerostwiceUndefined True False False
mdbl-2009-bl O2twice True False False True
mdbl-2009-bl InftytwiceFalse False True False
mdbl-2009-bl ZerostwiceUndefined True False False
dbl-1998-cmo-2O2twice True False False True
dbl-1998-cmo-2InftytwiceTrue False False True
dbl-1998-cmo-2ZerostwiceUndefined True False False
mdbl-2008-s-1 O2twice True False False True
mdbl-2008-s-1 InftytwiceFalse False True False
mdbl-2008-s-1 ZerostwiceUndefined False False True
dbl-2008-s-1 O2twice True False False True
dbl-2008-s-1 InftytwiceTrue False False True
dbl-2008-s-1 ZerostwiceUndefined True False False
dbl-1998-cmo O2twice True False False True
dbl-1998-cmo InftytwiceTrue False False True
dbl-1998-cmo ZerostwiceUndefined True False False
dbl-1986-cc O2twice True False False True
dbl-1986-cc InftytwiceTrue False False True
dbl-1986-cc ZerostwiceUndefined True False False
dbl-2007-bl O2twice True False False True
dbl-2007-bl InftytwiceTrue False False True
dbl-2007-bl ZerostwiceUndefined True False False
dbl-1998-cmo-2O2twice True False False True
dbl-1998-cmo-2InftytwiceTrue False False True
dbl-1998-cmo-2ZerostwiceUndefined True False False
dbl-1998-hnm O2twice True False False True
dbl-1998-hnm InftytwiceTrue False False True
dbl-1998-hnm ZerostwiceUndefined True False False
mdbl-2007-bl O2twice True False False True
mdbl-2007-bl InftytwiceFalse False True False
mdbl-2007-bl ZerostwiceUndefined False False True
dbl-2002-bj-3 O2twice True False False True
dbl-2002-bj-3 InftytwiceTrue False False True
dbl-2002-bj-3 ZerostwiceUndefined True False False
dbl-2002-bj O2twice True False False True
dbl-2002-bj InftytwiceTrue False False True
dbl-2002-bj ZerostwiceUndefined True False False
dbl-2002-it-2 O2twice True False False True
dbl-2002-it-2 InftytwiceTrue False False True
dbl-2002-it-2 ZerostwiceUndefined True False False
dbl-2002-it O2twice True False False True
dbl-2002-it InftytwiceTrue False False True
dbl-2002-it ZerostwiceUndefined True False False
dbl-2002-bj-2 O2twice True False False True
dbl-2002-bj-2 InftytwiceTrue False False True
dbl-2002-bj-2 ZerostwiceUndefined True False False
" + ], + "text/plain": [ + "" + ] + }, + "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 +} -- cgit v1.2.3-70-g09d2