aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJ08nY2024-01-18 13:59:53 +0100
committerJ08nY2024-01-18 13:59:53 +0100
commit27eb06e6d68ec9a154e73182c6aaeb50832b8abd (patch)
tree3df1246cb0f852b8dab30a9f07d5c25022e24acc
parent2fc60bd45b3779c4e2fa3c9295e0d6f84e663af6 (diff)
downloadpyecsca-notebook-27eb06e6d68ec9a154e73182c6aaeb50832b8abd.tar.gz
pyecsca-notebook-27eb06e6d68ec9a154e73182c6aaeb50832b8abd.tar.zst
pyecsca-notebook-27eb06e6d68ec9a154e73182c6aaeb50832b8abd.zip
Revert "Add tikz bar generation"
This reverts commit 2fc60bd45b3779c4e2fa3c9295e0d6f84e663af6.
-rw-r--r--re/zvp.ipynb2706
1 files changed, 2158 insertions, 548 deletions
diff --git a/re/zvp.ipynb b/re/zvp.ipynb
index 4edc087..e3e607e 100644
--- a/re/zvp.ipynb
+++ b/re/zvp.ipynb
@@ -10,7 +10,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 1,
"id": "17a9e580-5f1e-45c9-8afd-fc35e833b0b0",
"metadata": {},
"outputs": [],
@@ -25,76 +25,126 @@
"from IPython.display import HTML, display\n",
"from tqdm.notebook import tqdm\n",
"from anytree import RenderTree\n",
+ "from concurrent.futures import ProcessPoolExecutor, as_completed\n",
"\n",
"from pyecsca.ec.model import ShortWeierstrassModel\n",
"from pyecsca.ec.coordinates import AffineCoordinateModel\n",
"from pyecsca.ec.curve import EllipticCurve\n",
"from pyecsca.ec.params import DomainParameters, load_params_ecgen\n",
- "from pyecsca.ec.formula import FormulaAction\n",
- "from pyecsca.ec.formula.fake import FakeAdditionFormula, FakeDoublingFormula, FakePoint\n",
+ "from pyecsca.ec.formula import FormulaAction, AdditionFormula, DoublingFormula\n",
"from pyecsca.ec.point import Point\n",
- "from pyecsca.ec.mod import Mod, gcd\n",
+ "from pyecsca.ec.mod import Mod, gcd, SymbolicMod\n",
"from pyecsca.sca.re.tree import build_distinguishing_tree\n",
"from pyecsca.sca.re.rpa import MultipleContext\n",
"from pyecsca.sca.re.zvp import zvp_points, compute_factor_set\n",
"from pyecsca.ec.context import DefaultContext, local\n",
"from pyecsca.ec.mult import LTRMultiplier, AccumulationOrder\n",
"from pyecsca.misc.cfg import getconfig\n",
- "from pyecsca.ec.error import NonInvertibleError\n",
- "from pyecsca.sca.re.zvp import unroll_formula, compute_factor_set, zvp_points"
+ "from pyecsca.ec.error import NonInvertibleError, UnsatisfiedAssumptionError\n",
+ "from pyecsca.sca.re.zvp import unroll_formula, compute_factor_set, zvp_points, addition_chain, precomp_zvp_points"
]
},
{
"cell_type": "code",
- "execution_count": 15,
- "id": "d8ea0c4d-86e1-46af-ac20-569e6ef5439d",
+ "execution_count": 2,
+ "id": "c2240ed4-5279-487a-ad90-f6a6798f403c",
"metadata": {},
"outputs": [],
"source": [
- "cfg = getconfig()\n",
- "cfg.ec.mod_implementation = \"gmp\""
+ "# TODO: Maybe combine with EPA?\n",
+ "# TODO: Maybe extend oracle with number or position?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "60547b40-9b8e-409b-8b7e-b3dc266c01d4",
+ "metadata": {},
+ "source": [
+ "## Exploration\n",
+ "First lets explore the behavior of addition formulas. The following two cells pick a coordinate model along with some formulas and symbolically unroll a scalar multiplication."
]
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 3,
"id": "8de124f1-9498-4e55-8b7f-1bd291ccf3fe",
"metadata": {},
"outputs": [],
"source": [
"model = ShortWeierstrassModel()\n",
"coordsaff = AffineCoordinateModel(model)\n",
- "coords = model.coordinates[\"projective\"]\n",
- "add = coords.formulas[\"add-2007-bl\"]\n",
- "dbl = coords.formulas[\"dbl-2007-bl\"]\n",
- "neg = coords.formulas[\"neg\"]\n",
+ "which = \"jacobian\"\n",
+ "coords = model.coordinates[which]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "2193ab53-9dc9-4ba4-89d3-e331e5cc20de",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "getconfig().ec.mod_implementation = \"symbolic\"\n",
+ "x, y, z = symbols(\"x y z\")\n",
"\n",
"# A 64-bit prime order curve for testing things out\n",
"p = 0xc50de883f0e7b167\n",
- "a = Mod(0x4833d7aa73fa6694, p)\n",
- "b = Mod(0xa6c44a61c5323f6a, p)\n",
- "gx = Mod(0x5fd1f7d38d4f2333, p)\n",
- "gy = Mod(0x21f43957d7e20ceb, p)\n",
+ "field = FF(p)\n",
+ "a = SymbolicMod(Poly(0x4833d7aa73fa6694, x, y, z, domain=field), p)\n",
+ "b = SymbolicMod(Poly(0xa6c44a61c5323f6a, x, y, z, domain=field), p)\n",
+ "gx = SymbolicMod(Poly(0x5fd1f7d38d4f2333, x, y, z, domain=field), p)\n",
+ "gy = SymbolicMod(Poly(0x21f43957d7e20ceb, x, y, z, domain=field), p)\n",
"n = 0xc50de885003b80eb\n",
"h = 1\n",
"\n",
- "field = FF(p)\n",
- "\n",
"infty = Point(coords, X=Mod(0, p), Y=Mod(1, p), Z=Mod(0, p))\n",
"g = Point(coords, X=gx, Y=gy, Z=Mod(1, p))\n",
"\n",
"curve = EllipticCurve(model, coords, p, infty, dict(a=a,b=b))\n",
- "params = DomainParameters(curve, g, n, h)"
+ "params = DomainParameters(curve, g, n, h)\n",
+ "\n",
+ "\n",
+ "add = coords.formulas[\"add-2007-bl\"]\n",
+ "dbl = coords.formulas[\"dbl-2007-bl\"]\n",
+ "mult = LTRMultiplier(add, dbl, None, False, AccumulationOrder.PeqRP, True, True)\n",
+ "\n",
+ "\n",
+ "point = Point(coords,\n",
+ " X=SymbolicMod(Poly(x, x, y, z, domain=field), params.curve.prime),\n",
+ " Y=SymbolicMod(Poly(y, x, y, z, domain=field), params.curve.prime),\n",
+ " Z=SymbolicMod(Poly(z, x, y, z, domain=field), params.curve.prime))\n",
+ "mult.init(params, point)\n",
+ "res = mult.multiply(5)"
]
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 5,
+ "id": "d8ea0c4d-86e1-46af-ac20-569e6ef5439d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cfg = getconfig()\n",
+ "cfg.ec.mod_implementation = \"gmp\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c3b3ae94-242b-4f36-81e3-e8a64b5af33c",
+ "metadata": {},
+ "source": [
+ "## Reverse-engineering\n",
+ "Now, lets look at using the ZVP attack for reverse-engineering. First pick 10 random curves and one curve with `a = 0`. These curves are not special in any way and just serve to randomize the process, as the existence of ZVP points for a given intermediate value polynomial depends on the curve."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
"id": "0252f8fa-012c-453c-ba23-b40f9686fcce",
"metadata": {},
"outputs": [],
"source": [
- "curves = list(map(lambda spec: load_params_ecgen(io.BytesIO(spec.encode()), \"projective\"), [\n",
+ "curves = list(map(lambda spec: load_params_ecgen(io.BytesIO(spec.encode()), \"affine\"), [\n",
" \"\"\"[{\"field\":{\"p\":\"0xa7ec3617d4166b2d\"},\"a\":\"0x372994d9d680a83b\",\"b\":\"0xa0a2bf719d8e68c5\",\"order\":\"0xa7ec3618be1dab55\",\"subgroups\":[{\"x\":\"0x1ef15756946a5b6d\",\"y\":\"0x2ca9658f7ab9a558\",\"order\":\"0xa7ec3618be1dab55\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x1ef15756946a5b6d\",\"y\":\"0x2ca9658f7ab9a558\",\"order\":\"0xa7ec3618be1dab55\"}]}]}]\"\"\",\n",
" \"\"\"[{\"field\":{\"p\":\"0xa42c1467a1ed04f3\"},\"a\":\"0x55d07340a4572f2d\",\"b\":\"0x0a938c37dfb0b6d5\",\"order\":\"0xa42c14689284d3a7\",\"subgroups\":[{\"x\":\"0x8633981c83ed43a2\",\"y\":\"0x7b5374e9d7997199\",\"order\":\"0xa42c14689284d3a7\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x8633981c83ed43a2\",\"y\":\"0x7b5374e9d7997199\",\"order\":\"0xa42c14689284d3a7\"}]}]}]\"\"\",\n",
" \"\"\"[{\"field\":{\"p\":\"0xea0d9cead19016ab\"},\"a\":\"0xcbbfe501c4ef6d92\",\"b\":\"0x5762de777a6d9178\",\"order\":\"0xea0d9cea8cd2c857\",\"subgroups\":[{\"x\":\"0xe7daa3e061c3111b\",\"y\":\"0x56ee59a6845c5e93\",\"order\":\"0xea0d9cea8cd2c857\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0xe7daa3e061c3111b\",\"y\":\"0x56ee59a6845c5e93\",\"order\":\"0xea0d9cea8cd2c857\"}]}]}]\"\"\",\n",
@@ -105,487 +155,1234 @@
" \"\"\"[{\"field\":{\"p\":\"0xd47ec1d03a62686d\"},\"a\":\"0xd00a3ee0f5c86b02\",\"b\":\"0x457a5b6c47db38d8\",\"order\":\"0xd47ec1d107db7d6f\",\"subgroups\":[{\"x\":\"0x41ebc3b763f3cd1b\",\"y\":\"0x3d6925f214620e0c\",\"order\":\"0xd47ec1d107db7d6f\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x41ebc3b763f3cd1b\",\"y\":\"0x3d6925f214620e0c\",\"order\":\"0xd47ec1d107db7d6f\"}]}]}]\"\"\",\n",
" \"\"\"[{\"field\":{\"p\":\"0xb1c9115c6f40d755\"},\"a\":\"0x79d3ceefafc44ce9\",\"b\":\"0x8316af84264df42b\",\"order\":\"0xb1c9115d17f84a45\",\"subgroups\":[{\"x\":\"0x8b0a274089b53fe5\",\"y\":\"0x3508d33c4beba5ad\",\"order\":\"0xb1c9115d17f84a45\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x8b0a274089b53fe5\",\"y\":\"0x3508d33c4beba5ad\",\"order\":\"0xb1c9115d17f84a45\"}]}]}]\"\"\",\n",
" \"\"\"[{\"field\":{\"p\":\"0x8f738fda18cd5dff\"},\"a\":\"0x4747f2f9b8628cbf\",\"b\":\"0x586cdb9378a1389f\",\"order\":\"0x8f738fd8fc7ebed3\",\"subgroups\":[{\"x\":\"0x7ad306c73b64c1b5\",\"y\":\"0x69e3ca555190da4b\",\"order\":\"0x8f738fd8fc7ebed3\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x7ad306c73b64c1b5\",\"y\":\"0x69e3ca555190da4b\",\"order\":\"0x8f738fd8fc7ebed3\"}]}]}]\"\"\",\n",
+ " \"\"\"[{\"field\":{\"p\":\"0xcfef393139c3007f\"},\"a\":\"0xcfef393139c3007e\",\"b\":\"0x950312812acb155f\",\"order\":\"0xcfef39320179387b\",\"subgroups\":[{\"x\":\"0xae2d2f58ca5b5cf7\",\"y\":\"0xc3a4bf3a1dc10005\",\"order\":\"0xcfef39320179387b\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0xae2d2f58ca5b5cf7\",\"y\":\"0xc3a4bf3a1dc10005\",\"order\":\"0xcfef39320179387b\"}]}]}]\"\"\",\n",
+ " \"\"\"[{\"field\":{\"p\":\"0x8d79ca36cee026a7\"},\"a\":\"0x8d79ca36cee026a4\",\"b\":\"0x0478c1f80ce2c9c6\",\"order\":\"0x8d79ca35a428c76f\",\"subgroups\":[{\"x\":\"0x2e94a3e38f8b345e\",\"y\":\"0x83e6c6f0cb8f69c4\",\"order\":\"0x8d79ca35a428c76f\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x2e94a3e38f8b345e\",\"y\":\"0x83e6c6f0cb8f69c4\",\"order\":\"0x8d79ca35a428c76f\"}]}]}]\"\"\",\n",
" \"\"\"[{\"field\":{\"p\":\"0xceaf446a53f14bc1\"},\"a\":\"0x0000000000000000\",\"b\":\"0x326539376260f173\",\"order\":\"0xceaf446aae275419\",\"subgroups\":[{\"x\":\"0x98fe44948c3f8678\",\"y\":\"0x3d440ee959a912d7\",\"order\":\"0xceaf446aae275419\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x98fe44948c3f8678\",\"y\":\"0x3d440ee959a912d7\",\"order\":\"0xceaf446aae275419\"}]}]}]\"\"\",\n",
- " \"\"\"[{\"field\":{\"p\":\"0x9d9119957f02fe3f\"},\"a\":\"0x0106903196d88df9\",\"b\":\"0x0000000000000000\",\"order\":\"0x9d9119957f02fe40\",\"subgroups\":[{\"x\":\"0x191a36b9cd81de96\",\"y\":\"0x10f2c6bded391aa9\",\"order\":\"0x9d9119957f02fe40\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x0000000000000000\",\"y\":\"0x0000000000000000\",\"order\":\"0x2\"},{\"x\":\"0x95913fae9065da0f\",\"y\":\"0x5eeddeee7152d6fb\",\"order\":\"0x276446655fc0bf9\"}]}]}]\"\"\"\n",
+ " #\"\"\"[{\"field\":{\"p\":\"0x9d9119957f02fe3f\"},\"a\":\"0x0106903196d88df9\",\"b\":\"0x0000000000000000\",\"order\":\"0x9d9119957f02fe40\",\"subgroups\":[{\"x\":\"0x191a36b9cd81de96\",\"y\":\"0x10f2c6bded391aa9\",\"order\":\"0x9d9119957f02fe40\",\"cofactor\":\"0x1\",\"points\":[{\"x\":\"0x0000000000000000\",\"y\":\"0x0000000000000000\",\"order\":\"0x2\"},{\"x\":\"0x95913fae9065da0f\",\"y\":\"0x5eeddeee7152d6fb\",\"order\":\"0x276446655fc0bf9\"}]}]}]\"\"\"\n",
"]))"
]
},
{
- "cell_type": "code",
- "execution_count": 18,
- "id": "e65c4ab0-a9fa-479b-b109-67968fd67c1c",
+ "cell_type": "markdown",
+ "id": "4276de4c-78f4-4cdb-b60e-8c24eabfa00d",
"metadata": {},
- "outputs": [],
"source": [
- "def simulated_oracle(scalar, affine_point, real_coord_name=\"projective\", real_add_name=\"add-2007-bl\", real_dbl_name=\"dbl-2007-bl\"):\n",
- " real_coords = model.coordinates[real_coord_name]\n",
- " real_add = real_coords.formulas[real_add_name]\n",
- " real_dbl = real_coords.formulas[real_dbl_name]\n",
- " real_mult = LTRMultiplier(real_add, real_dbl, None, False, AccumulationOrder.PeqPR, True, True)\n",
- " point = affine_point.to_model(params.curve.coordinate_model, params.curve)\n",
- " with local(DefaultContext()) as ctx:\n",
- " real_mult.init(params, point)\n",
- " real_mult.multiply(scalar)\n",
- "\n",
- " trace = []\n",
- "\n",
- " def callback(action):\n",
- " if isinstance(action, FormulaAction):\n",
- " for intermediate in action.op_results:\n",
- " trace.append(intermediate.value)\n",
- " ctx.actions.walk(callback)\n",
- " return any(int(value) == 0 for value in trace)"
+ "First lets fix a scalar, go over the curves and compute the addition chain to obtain information about which multiples of the input point will go into the formulas."
]
},
{
"cell_type": "code",
- "execution_count": 19,
- "id": "d0ef1628-3d87-40be-95a0-3045bb1ee4aa",
+ "execution_count": 7,
+ "id": "7ab00a5c-2873-40c0-a81c-873350897e46",
"metadata": {},
"outputs": [],
"source": [
- "adds = list(filter(lambda formula: formula.name.startswith(\"add-1998-cmo-2\"), coords.formulas.values()))\n",
- "dbls = list(filter(lambda formula: formula.name.startswith(\"dbl-1998-cmo-2\"), coords.formulas.values()))\n",
- "formula_pairs = list(product(adds, dbls))\n",
+ "scalar = 123456789\n",
"\n",
- "# Compute all of the factor sets, and adjust those for dbl to the right index.\n",
- "add_fsets = {add: compute_factor_set(add) for add in adds}\n",
- "dbl_fsets = {}\n",
- "for dbl in dbls:\n",
- " fset = compute_factor_set(dbl)\n",
- " dbl2_fset = set()\n",
- " for poly in fset:\n",
- " pl = poly.copy()\n",
- " for symbol in poly.free_symbols:\n",
- " original = str(symbol)\n",
- " if original.endswith(\"1\"):\n",
- " new = original.replace(\"1\", \"2\")\n",
- " pl = pl.subs(original, new)\n",
- " dbl2_fset.add(pl)\n",
- " dbl_fsets[dbl] = dbl2_fset"
+ "chains = []\n",
+ "for i, params in enumerate(curves):\n",
+ " chain = addition_chain(scalar, params, LTRMultiplier, lambda add,dbl: LTRMultiplier(add, dbl, None, False, AccumulationOrder.PeqRP, True, True))\n",
+ " chains.append(chain)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "12646534-8ca5-48c1-a4ae-1ad62575821f",
+ "metadata": {},
+ "source": [
+ "Now, lets compute the sets of ZVP points, going over all coordinate systems and all of their formulas (that fit the scalar multiplier) and store them into the `point_chains`. These items form individual distinct entries of the distinguishing table."
]
},
{
"cell_type": "code",
- "execution_count": 20,
- "id": "b7c7b341-5b15-44fb-b9cf-462b64e7536e",
+ "execution_count": 8,
+ "id": "91bc36bb-80e8-41d8-8612-7f9e24bdf278",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "2cec3fa269ce4baba711b0f681122ce9",
+ "model_id": "1632e60f52e54563a2243cf3d179da3b",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
- "Compute ZVP points: 0%| | 0/12 [00:00<?, ?it/s]"
+ "Compute: 0%| | 0/745 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "da4a0c580bbc416784a905615e90f3dd",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Compute ZVP points for adds: 0%| | 0/1 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
+ }
+ ],
+ "source": [
+ "bound = 5\n",
+ "chain_bound = 5\n",
+ "\n",
+ "formula_classes = [AdditionFormula, DoublingFormula]\n",
+ "point_chains = {}\n",
+ "with ProcessPoolExecutor(max_workers=14) as pool:\n",
+ " futures = []\n",
+ " args = []\n",
+ " for coord_name, coords in model.coordinates.items():\n",
+ " for chain, affine_params in zip(chains, curves):\n",
+ " try:\n",
+ " params = affine_params.to_coords(coords)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " continue\n",
+ " formula_groups = [list(filter(lambda formula: isinstance(formula, formula_class), coords.formulas.values())) for formula_class in formula_classes]\n",
+ "\n",
+ " for formula_group, formula_class in zip(formula_groups, formula_classes):\n",
+ " for formula in formula_group:\n",
+ " futures.append(pool.submit(precomp_zvp_points, chain[:chain_bound], {formula_class.shortname: formula}, params, bound))\n",
+ " args.append((coords, formula, affine_params))\n",
+ " for future in tqdm(as_completed(futures), desc=\"Compute\", total=len(futures)):\n",
+ " j = futures.index(future)\n",
+ " point_chains[args[j]] = future.result()\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "55cb5e3c-b1f1-443f-9d5f-269de6eb59ec",
+ "metadata": {},
+ "source": [
+ "Now, accumulate the rows of the distinguishing table to create the distinguishing map `point_map`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "b7c7b341-5b15-44fb-b9cf-462b64e7536e",
+ "metadata": {},
+ "outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "15e1f780bbee4c0db44d1b67fa4f01ad",
+ "model_id": "7bc93ed3bb94436e9fc5d20f86c83cb0",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
- " 0%| | 0/28 [00:00<?, ?it/s]"
+ "Accumulate for coord systems: 0%| | 0/11 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
- },
+ }
+ ],
+ "source": [
+ "point_map = {}\n",
+ "for coord_name, coords in tqdm(model.coordinates.items(), desc=\"Accumulate for coord systems\"):\n",
+ " formula_groups = [list(filter(lambda formula: isinstance(formula, formula_class) and (formula.name.startswith(\"add\") or formula.name.startswith(\"dbl\")), coords.formulas.values())) for formula_class in formula_classes]\n",
+ " formula_combinations = list(product(*formula_groups))\n",
+ " for formulas in formula_combinations:\n",
+ " points = set()\n",
+ " for formula in formulas:\n",
+ " for chain, affine_params in zip(chains, curves):\n",
+ " try:\n",
+ " params = affine_params.to_coords(coords)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " continue\n",
+ " point_chain = point_chains[(coords, formula, affine_params)]\n",
+ " for step in point_chain:\n",
+ " for poly, poly_points in step.items():\n",
+ " for point in poly_points:\n",
+ " points.add((point, affine_params))\n",
+ " point_map[formulas] = points\n",
+ "all_points = set().union(*point_map.values())"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2718285c-913c-4d46-b3bc-db8c7ef1f9ee",
+ "metadata": {},
+ "source": [
+ "We now have a distinguishing map so we can build the tree and visualize it."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "8afea2a8-49a1-4969-a19e-9e17e26fb1e8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "tree = build_distinguishing_tree(point_map)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "49ee4c6f",
+ "metadata": {},
+ "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "shortw/projective/add-1998-cmo-2\n",
- "shortw/projective/add-1998-cmo-2\n"
+ "4, 37, 4, 27, 2, 4, 12, 17, 4, 6, 2, 67, 1, 4, 2, 8, 2, 6, 1, 3, 4, 1, 6, 3, 3, 6, 2, 4, "
]
- },
+ }
+ ],
+ "source": [
+ "def print_leaf_sizes(tree):\n",
+ " leaves = []\n",
+ " nodes = [tree]\n",
+ " while nodes:\n",
+ " new_nodes = []\n",
+ " for node in nodes:\n",
+ " if node.children:\n",
+ " new_nodes.extend(node.children)\n",
+ " else:\n",
+ " leaves.append(node)\n",
+ " nodes = new_nodes \n",
+ " leaf_sizes = [len(leaf.cfgs) for leaf in leaves]\n",
+ " print(sorted(leaf_sizes))\n",
+ "\n",
+ "print_leaf_sizes(tree)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "ab09b767-71ca-4d28-abf0-532307efefbd",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
{
- "ename": "TypeError",
- "evalue": "unhashable type: 'dict'",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[20], line 35\u001b[0m\n\u001b[1;32m 33\u001b[0m \u001b[39mfor\u001b[39;00m op, k \u001b[39min\u001b[39;00m tqdm(chain, leave\u001b[39m=\u001b[39m\u001b[39mFalse\u001b[39;00m):\n\u001b[1;32m 34\u001b[0m \u001b[39mprint\u001b[39m(add)\n\u001b[0;32m---> 35\u001b[0m \u001b[39mif\u001b[39;00m op \u001b[39m==\u001b[39m \u001b[39m\"\u001b[39m\u001b[39madd\u001b[39m\u001b[39m\"\u001b[39m \u001b[39mand\u001b[39;00m (add, k, params) \u001b[39mnot\u001b[39;49;00m \u001b[39min\u001b[39;49;00m point_sets:\n\u001b[1;32m 36\u001b[0m points \u001b[39m=\u001b[39m \u001b[39mset\u001b[39m()\n\u001b[1;32m 37\u001b[0m \u001b[39mfor\u001b[39;00m poly \u001b[39min\u001b[39;00m add_fset:\n",
- "File \u001b[0;32m~/piecka/pyecsca/pyecsca/ec/params.py:71\u001b[0m, in \u001b[0;36mDomainParameters.__hash__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__hash__\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[0;32m---> 71\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mhash\u001b[39;49m((\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcurve, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mgenerator, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49morder, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcofactor))\n",
- "File \u001b[0;32m~/piecka/pyecsca/pyecsca/ec/curve.py:346\u001b[0m, in \u001b[0;36mEllipticCurve.__hash__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 345\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__hash__\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[0;32m--> 346\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mhash\u001b[39;49m((\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mmodel, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcoordinate_model, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mprime, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mparameters))\n",
- "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'dict'"
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[x=7523181643117586774, y=861591372171155399]\n",
+ "DomainParameters(EllipticCurve)\n",
+ "├── [x=4173724707785958223, y=6577250203972113290]\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=198756535338419930, y=10649610515976041289]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2015-rcb\n",
+ "│ │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2015-rcb\n",
+ "│ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2016-rcb\n",
+ "│ │ └── [x=710459779677453253, y=8718793080546575443]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ └── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo\n",
+ "│ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/xyzz/add-2008-s, shortw/xyzz/dbl-2008-s-1\n",
+ "│ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-2009-bl\n",
+ "│ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-1998-cmo-2\n",
+ "│ │ shortw/modified/add-2009-bl, shortw/modified/dbl-2009-bl\n",
+ "│ │ shortw/modified/add-2009-bl, shortw/modified/dbl-1998-cmo-2\n",
+ "│ └── [x=161110322234615011, y=6188535790273537383]\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=7018390556762767964, y=8234992169006142300]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2016-rcb\n",
+ "│ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl\n",
+ "│ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo\n",
+ "│ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl\n",
+ "│ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo\n",
+ "│ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-1\n",
+ "│ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-2\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2001-b\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2001-b\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2001-b\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "└── [x=3271642899270608132, y=4094231858049384691]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=8462011093657406711, y=9385955884972991198]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=3909394990548410378, y=1271934111897046201]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=198756535338419930, y=10649610515976041289]\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective/add-2002-bj, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ └── shortw/projective/add-2002-bj, shortw/projective/dbl-2007-bl\n",
+ " │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo\n",
+ " │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2007-bl\n",
+ " │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo\n",
+ " │ │ └── [x=9280663850407308169, y=3970590255664920732]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=710459779677453253, y=8718793080546575443]\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ │ └── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo\n",
+ " │ │ └── [x=710459779677453253, y=8718793080546575443]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ └── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo\n",
+ " │ └── [x=3760330877114905034, y=14518154872986670897]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=9185172264551501167, y=1489984362467478237]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=5290749974607723184, y=9066658054269062673]\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ │ └── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ └── [x=9023895164928322279, y=3383060556063092686]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ └── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo\n",
+ " │ └── [x=9023895164928322279, y=11600196812807098545]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=8976497402921340665, y=14893197716203064256]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective/add-2016-rcb, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2016-rcb\n",
+ " │ │ └── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2015-rcb\n",
+ " │ └── [x=8976497402921340665, y=14893197716203064256]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/projective/add-2016-rcb, shortw/projective/dbl-2007-bl\n",
+ " │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo\n",
+ " │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2007-bl\n",
+ " │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo\n",
+ " │ └── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo\n",
+ " └── [x=3261882760552750749, y=5224146365954570556]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=161110322234615011, y=6188535790273537383]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=6741014024306303479, y=8089192144272372943]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=7018390556762767964, y=8234992169006142300]\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ │ └── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ └── [x=7018390556762767964, y=8234992169006142300]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ └── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2016-rcb\n",
+ " │ └── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo\n",
+ " └── [x=8583585759655994824, y=5121594309025134149]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2004-hmv\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2001-b\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " └── [x=9023895164928322279, y=3383060556063092686]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2015-rcb\n",
+ " └── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1986-cc\n",
+ " shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-hnm\n",
+ " shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2007-bl\n",
+ " shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo\n",
+ " shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-alnr\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1986-cc\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-hnm\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2007-bl\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-alnr\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1986-cc\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-hnm\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2007-bl\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-alnr\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1986-cc\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-hnm\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2007-bl\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-alnr\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1986-cc\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-hnm\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2007-bl\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-alnr\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1986-cc\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-hnm\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2007-bl\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo\n",
+ " shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-alnr\n",
+ " shortw/w12-0/add-2010-cln, shortw/w12-0/dbl-2010-cln\n",
+ " shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2007-bl\n",
+ " shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo\n",
+ " shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2007-bl\n",
+ " shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo-2\n",
+ " shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2007-bl\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2004-hmv\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2001-b\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2007-bl\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2004-hmv\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2001-b\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc-2\n"
]
}
],
"source": [
- "scalar = 123456789\n",
- "bound = 25\n",
- "\n",
- "chains = []\n",
- "for i, params in enumerate(curves):\n",
- " fake_add = FakeAdditionFormula(params.curve.coordinate_model)\n",
- " fake_dbl = FakeDoublingFormula(params.curve.coordinate_model)\n",
- " fake_mult = LTRMultiplier(fake_add, fake_dbl, None, False, AccumulationOrder.PeqPR, True, True)\n",
- " fake_mult.init(params, FakePoint(params.curve.coordinate_model))\n",
- " \n",
- " with local(MultipleContext()) as mctx:\n",
- " fake_mult.multiply(scalar)\n",
- "\n",
- " chain = []\n",
- "\n",
- " for point, parents in mctx.parents.items():\n",
- " if not parents:\n",
- " continue\n",
- " k = mctx.points[parents[0]]\n",
- " # TODO: look at this k computation\n",
- " if len(parents) == 2:\n",
- " if k > bound:\n",
- " continue\n",
- " chain.append((\"add\", k))\n",
- " else:\n",
- " chain.append((\"dbl\", k))\n",
- " chains.append(chain)\n",
- "\n",
- "point_sets = {}\n",
- "for chain, params in tqdm(zip(chains, curves), desc=\"Compute ZVP points\", total=len(chains)):\n",
- " for add in tqdm(adds, desc=\"Compute ZVP points for adds\", leave=False):\n",
- " add_fset = add_fsets[add]\n",
- " for op, k in tqdm(chain, leave=False):\n",
- " print((add, k, params) not in point_sets)\n",
- " if op == \"add\" and (add, k, params) not in point_sets:\n",
- " points = set()\n",
- " for poly in add_fset:\n",
- " try:\n",
- " points.update(zvp_points(poly, params.curve, k, params.order))\n",
- " except NonInvertibleError:\n",
- " pass\n",
- " point_sets[(add, k, params)] = points\n",
- " for dbl in tqdm(dbls, desc=\"Compute ZVP points for dbls\", leave=False):\n",
- " dbl_fset = dbl_fsets[dbl]\n",
- " for op, k in tqdm(chain, leave=False):\n",
- " if op == \"dbl\" and (dbl, k, params) not in point_sets:\n",
- " points = set()\n",
- " for poly in dbl_fset:\n",
- " try:\n",
- " points.update(zvp_points(poly, params.curve, k, params.order))\n",
- " except NonInvertibleError:\n",
- " pass\n",
- " point_sets[(dbl, k, params)] = points"
+ "print(RenderTree(tree).by_attr(lambda n: n.name if n.name is not None else \"\\n\".join((\", \".join(str(formula) for formula in cfg) for cfg in n.cfgs))))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ed2d4b51-573f-4fef-b1a4-d30b3be07423",
+ "metadata": {},
+ "source": [
+ "Our ZVP points might (due to the bounds above thus the incompleteness of our analysis) lead to more zeros than we attribute to then (in more configurations), thus we perform a remapping step where we execute the scalar multiplication with given points and trace whether they introduce the zeros. This gives us a new distinguishing map `remapped_point_map`, now without \"false negatives\"."
]
},
{
"cell_type": "code",
- "execution_count": 63,
- "id": "f95909c9-8595-4d2d-8963-0c6fcb5728dd",
+ "execution_count": 17,
+ "id": "ca932717-2b0a-4dea-ae84-988b7d9af233",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "8af38dfac64442438b532d05557e04c7",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "Remapping: 0%| | 0/20 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
+ "model_id": "4655629a073d4e158f00d150dbf363b5",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
+ "Remap: 0%| | 0/242 [00:00<?, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
+ }
+ ],
+ "source": [
+ "def remap(coords, formulas, points, scalar):\n",
+ " mult = LTRMultiplier(*formulas, None, False, AccumulationOrder.PeqRP, True, True)\n",
+ " new_points = set()\n",
+ " param_map = {}\n",
+ " for point, params in tqdm(points):\n",
+ " if params not in param_map:\n",
+ " try:\n",
+ " param_map[params] = params.to_coords(coords)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " param_map[params] = None\n",
+ " continue\n",
+ " elif param_map[params] is None:\n",
+ " continue\n",
+ " mult.init(param_map[params], point.to_model(param_map[params].curve.coordinate_model, param_map[params].curve))\n",
+ " with local(DefaultContext()) as ctx:\n",
+ " try:\n",
+ " mult.multiply(scalar)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " continue\n",
+ " trace = []\n",
+ " def callback(action):\n",
+ " if isinstance(action, FormulaAction):\n",
+ " for intermediate in action.op_results:\n",
+ " trace.append(intermediate.value)\n",
+ " ctx.actions.walk(callback)\n",
+ " hit_zero = any(int(value) == 0 for value in trace)\n",
+ " if hit_zero:\n",
+ " new_points.add((point, params))\n",
+ " #hit_zero = sum(int(value) == 0 for value in trace)\n",
+ " #new_points.add((point, hit_zero, params))\n",
+ " return new_points\n",
+ "\n",
+ "remapped_point_map = {}\n",
+ "with ProcessPoolExecutor(max_workers=12) as pool:\n",
+ " futures = []\n",
+ " pairs = []\n",
+ " for coord_name, coords in model.coordinates.items():\n",
+ " formula_groups = [list(filter(lambda formula: isinstance(formula, formula_class) and (formula.name.startswith(\"add\") or formula.name.startswith(\"dbl\")), coords.formulas.values())) for formula_class in formula_classes]\n",
+ " formula_combinations = list(product(*formula_groups))\n",
+ " for formulas in formula_combinations:\n",
+ " #remap(coords, formulas, all_points, scalar)\n",
+ " #break\n",
+ " futures.append(pool.submit(remap, coords, formulas, all_points, scalar))\n",
+ " pairs.append(formulas)\n",
+ " #break\n",
+ " results = [None for _ in futures]\n",
+ " for future in tqdm(as_completed(futures), total=len(futures), desc=\"Remap\"):\n",
+ " j = futures.index(future)\n",
+ " remapped_point_map[pairs[j]] = future.result()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8a909b33-5c4d-450b-ad97-dee3615d8462",
+ "metadata": {},
+ "source": [
+ "We can compare the remapped distinguishing map to the original one and see the changes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "cc87dfd1-f058-4338-aaca-fc05105fc9f1",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
{
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-1986-cc 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-1998-hnm 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-2007-bl 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-2009-l 0 0 0 0\n",
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-1998-cmo-2 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-1998-cmo 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo-2 shortw/jacobian-0/dbl-2009-alnr 0 3 0 3\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-1986-cc 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-1998-hnm 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-2007-bl 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-2009-l 0 0 0 0\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-1998-cmo-2 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-1998-cmo 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-cmo shortw/jacobian-0/dbl-2009-alnr 0 3 0 3\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-1986-cc 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-1998-hnm 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-2007-bl 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-2009-l 0 0 0 0\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-1998-cmo-2 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-1998-cmo 0 32 0 32\n",
+ "shortw/jacobian-0/add-1998-hnm shortw/jacobian-0/dbl-2009-alnr 0 3 0 3\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-1986-cc 0 32 0 32\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-1998-hnm 0 32 0 32\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-2007-bl 0 32 0 32\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-2009-l 0 0 0 0\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-1998-cmo-2 0 32 0 32\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-1998-cmo 0 32 0 32\n",
+ "shortw/jacobian-0/add-1986-cc shortw/jacobian-0/dbl-2009-alnr 0 3 0 3\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-1986-cc 0 32 0 32\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-1998-hnm 0 32 0 32\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-2007-bl 0 32 0 32\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-2009-l 0 0 0 0\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-1998-cmo-2 0 32 0 32\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-1998-cmo 0 32 0 32\n",
+ "shortw/jacobian-0/add-2001-b shortw/jacobian-0/dbl-2009-alnr 0 3 0 3\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-1986-cc 0 32 0 32\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-1998-hnm 0 32 0 32\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-2007-bl 0 32 0 32\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-2009-l 0 3 0 3\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-1998-cmo-2 0 32 0 32\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-1998-cmo 0 32 0 32\n",
+ "shortw/jacobian-0/add-2007-bl shortw/jacobian-0/dbl-2009-alnr 0 3 0 3\n",
+ "shortw/w12-0/add-2010-cln shortw/w12-0/dbl-2010-cln 0 0 0 0\n",
+ "shortw/projective-1/add-1998-cmo-2 shortw/projective-1/dbl-2015-rcb 6 6 0 0\n",
+ "shortw/projective-1/add-1998-cmo-2 shortw/projective-1/dbl-2007-bl 0 0 0 0\n",
+ "shortw/projective-1/add-1998-cmo-2 shortw/projective-1/dbl-1998-cmo-2 0 0 0 0\n",
+ "shortw/projective-1/add-1998-cmo-2 shortw/projective-1/dbl-1998-cmo 0 0 0 0\n",
+ "shortw/projective-1/add-2002-bj-2 shortw/projective-1/dbl-2015-rcb 10 10 0 0\n",
+ "shortw/projective-1/add-2002-bj-2 shortw/projective-1/dbl-2007-bl 4 4 0 0\n",
+ "shortw/projective-1/add-2002-bj-2 shortw/projective-1/dbl-1998-cmo-2 4 4 0 0\n",
+ "shortw/projective-1/add-2002-bj-2 shortw/projective-1/dbl-1998-cmo 4 4 0 0\n",
+ "shortw/projective-1/add-1998-cmo shortw/projective-1/dbl-2015-rcb 6 6 0 0\n",
+ "shortw/projective-1/add-1998-cmo shortw/projective-1/dbl-2007-bl 0 0 0 0\n",
+ "shortw/projective-1/add-1998-cmo shortw/projective-1/dbl-1998-cmo-2 0 0 0 0\n",
+ "shortw/projective-1/add-1998-cmo shortw/projective-1/dbl-1998-cmo 0 0 0 0\n",
+ "shortw/projective-1/add-2015-rcb shortw/projective-1/dbl-2015-rcb 23 23 0 0\n",
+ "shortw/projective-1/add-2015-rcb shortw/projective-1/dbl-2007-bl 19 19 0 0\n",
+ "shortw/projective-1/add-2015-rcb shortw/projective-1/dbl-1998-cmo-2 19 19 0 0\n",
+ "shortw/projective-1/add-2015-rcb shortw/projective-1/dbl-1998-cmo 19 19 0 0\n",
+ "shortw/projective-1/add-2002-bj shortw/projective-1/dbl-2015-rcb 16 16 0 0\n",
+ "shortw/projective-1/add-2002-bj shortw/projective-1/dbl-2007-bl 10 10 0 0\n",
+ "shortw/projective-1/add-2002-bj shortw/projective-1/dbl-1998-cmo-2 10 10 0 0\n",
+ "shortw/projective-1/add-2002-bj shortw/projective-1/dbl-1998-cmo 10 10 0 0\n",
+ "shortw/projective-1/add-2007-bl shortw/projective-1/dbl-2015-rcb 16 16 0 0\n",
+ "shortw/projective-1/add-2007-bl shortw/projective-1/dbl-2007-bl 10 10 0 0\n",
+ "shortw/projective-1/add-2007-bl shortw/projective-1/dbl-1998-cmo-2 10 10 0 0\n",
+ "shortw/projective-1/add-2007-bl shortw/projective-1/dbl-1998-cmo 10 10 0 0\n",
+ "shortw/projective/add-2016-rcb shortw/projective/dbl-2015-rcb 474 474 0 0\n",
+ "shortw/projective/add-2016-rcb shortw/projective/dbl-2007-bl 320 320 0 0\n",
+ "shortw/projective/add-2016-rcb shortw/projective/dbl-1998-cmo-2 320 320 0 0\n",
+ "shortw/projective/add-2016-rcb shortw/projective/dbl-2016-rcb 474 474 0 0\n",
+ "shortw/projective/add-2016-rcb shortw/projective/dbl-1998-cmo 320 320 0 0\n",
+ "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-2015-rcb 232 264 0 32\n",
+ "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-2007-bl 64 96 0 32\n",
+ "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-1998-cmo-2 64 96 0 32\n",
+ "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-2016-rcb 232 264 0 32\n",
+ "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-1998-cmo 64 96 0 32\n",
+ "shortw/projective/add-1998-cmo shortw/projective/dbl-2015-rcb 232 264 0 32\n",
+ "shortw/projective/add-1998-cmo shortw/projective/dbl-2007-bl 64 96 0 32\n",
+ "shortw/projective/add-1998-cmo shortw/projective/dbl-1998-cmo-2 64 96 0 32\n",
+ "shortw/projective/add-1998-cmo shortw/projective/dbl-2016-rcb 232 264 0 32\n",
+ "shortw/projective/add-1998-cmo shortw/projective/dbl-1998-cmo 64 96 0 32\n",
+ "shortw/projective/add-2015-rcb shortw/projective/dbl-2015-rcb 474 474 0 0\n",
+ "shortw/projective/add-2015-rcb shortw/projective/dbl-2007-bl 320 320 0 0\n",
+ "shortw/projective/add-2015-rcb shortw/projective/dbl-1998-cmo-2 320 320 0 0\n",
+ "shortw/projective/add-2015-rcb shortw/projective/dbl-2016-rcb 474 474 0 0\n",
+ "shortw/projective/add-2015-rcb shortw/projective/dbl-1998-cmo 320 320 0 0\n",
+ "shortw/projective/add-2002-bj shortw/projective/dbl-2015-rcb 246 278 0 32\n",
+ "shortw/projective/add-2002-bj shortw/projective/dbl-2007-bl 78 110 0 32\n",
+ "shortw/projective/add-2002-bj shortw/projective/dbl-1998-cmo-2 78 110 0 32\n",
+ "shortw/projective/add-2002-bj shortw/projective/dbl-2016-rcb 246 278 0 32\n",
+ "shortw/projective/add-2002-bj shortw/projective/dbl-1998-cmo 78 110 0 32\n",
+ "shortw/projective/add-2007-bl shortw/projective/dbl-2015-rcb 246 278 0 32\n",
+ "shortw/projective/add-2007-bl shortw/projective/dbl-2007-bl 78 110 0 32\n",
+ "shortw/projective/add-2007-bl shortw/projective/dbl-1998-cmo-2 78 110 0 32\n",
+ "shortw/projective/add-2007-bl shortw/projective/dbl-2016-rcb 246 278 0 32\n",
+ "shortw/projective/add-2007-bl shortw/projective/dbl-1998-cmo 78 110 0 32\n",
+ "shortw/jacobian/add-1998-cmo-2 shortw/jacobian/dbl-1986-cc 64 96 0 32\n",
+ "shortw/jacobian/add-1998-cmo-2 shortw/jacobian/dbl-1998-hnm 160 192 0 32\n",
+ "shortw/jacobian/add-1998-cmo-2 shortw/jacobian/dbl-2007-bl 64 111 0 47\n",
+ "shortw/jacobian/add-1998-cmo-2 shortw/jacobian/dbl-1998-cmo-2 64 96 0 32\n",
+ "shortw/jacobian/add-1998-cmo-2 shortw/jacobian/dbl-1998-cmo 64 96 0 32\n",
+ "shortw/jacobian/add-1998-cmo shortw/jacobian/dbl-1986-cc 64 96 0 32\n",
+ "shortw/jacobian/add-1998-cmo shortw/jacobian/dbl-1998-hnm 160 192 0 32\n",
+ "shortw/jacobian/add-1998-cmo shortw/jacobian/dbl-2007-bl 64 111 0 47\n",
+ "shortw/jacobian/add-1998-cmo shortw/jacobian/dbl-1998-cmo-2 64 96 0 32\n",
+ "shortw/jacobian/add-1998-cmo shortw/jacobian/dbl-1998-cmo 64 96 0 32\n",
+ "shortw/jacobian/add-1998-hnm shortw/jacobian/dbl-1986-cc 80 112 0 32\n",
+ "shortw/jacobian/add-1998-hnm shortw/jacobian/dbl-1998-hnm 168 200 0 32\n",
+ "shortw/jacobian/add-1998-hnm shortw/jacobian/dbl-2007-bl 80 127 0 47\n",
+ "shortw/jacobian/add-1998-hnm shortw/jacobian/dbl-1998-cmo-2 80 112 0 32\n",
+ "shortw/jacobian/add-1998-hnm shortw/jacobian/dbl-1998-cmo 80 112 0 32\n",
+ "shortw/jacobian/add-1986-cc shortw/jacobian/dbl-1986-cc 54 86 0 32\n",
+ "shortw/jacobian/add-1986-cc shortw/jacobian/dbl-1998-hnm 142 174 0 32\n",
+ "shortw/jacobian/add-1986-cc shortw/jacobian/dbl-2007-bl 54 101 0 47\n",
+ "shortw/jacobian/add-1986-cc shortw/jacobian/dbl-1998-cmo-2 54 86 0 32\n",
+ "shortw/jacobian/add-1986-cc shortw/jacobian/dbl-1998-cmo 54 86 0 32\n",
+ "shortw/jacobian/add-2001-b shortw/jacobian/dbl-1986-cc 54 86 0 32\n",
+ "shortw/jacobian/add-2001-b shortw/jacobian/dbl-1998-hnm 142 174 0 32\n",
+ "shortw/jacobian/add-2001-b shortw/jacobian/dbl-2007-bl 54 101 0 47\n",
+ "shortw/jacobian/add-2001-b shortw/jacobian/dbl-1998-cmo-2 54 86 0 32\n",
+ "shortw/jacobian/add-2001-b shortw/jacobian/dbl-1998-cmo 54 86 0 32\n",
+ "shortw/jacobian/add-2007-bl shortw/jacobian/dbl-1986-cc 64 111 0 47\n",
+ "shortw/jacobian/add-2007-bl shortw/jacobian/dbl-1998-hnm 160 207 0 47\n",
+ "shortw/jacobian/add-2007-bl shortw/jacobian/dbl-2007-bl 64 111 0 47\n",
+ "shortw/jacobian/add-2007-bl shortw/jacobian/dbl-1998-cmo-2 64 111 0 47\n",
+ "shortw/jacobian/add-2007-bl shortw/jacobian/dbl-1998-cmo 64 111 0 47\n",
+ "shortw/jacobian/add-bc-r1rv76-jac shortw/jacobian/dbl-1986-cc 64 96 0 32\n",
+ "shortw/jacobian/add-bc-r1rv76-jac shortw/jacobian/dbl-1998-hnm 160 192 0 32\n",
+ "shortw/jacobian/add-bc-r1rv76-jac shortw/jacobian/dbl-2007-bl 64 111 0 47\n",
+ "shortw/jacobian/add-bc-r1rv76-jac shortw/jacobian/dbl-1998-cmo-2 64 96 0 32\n",
+ "shortw/jacobian/add-bc-r1rv76-jac shortw/jacobian/dbl-1998-cmo 64 96 0 32\n",
+ "shortw/xyzz/add-2008-s shortw/xyzz/dbl-2008-s-1 64 96 0 32\n",
+ "shortw/modified/add-1998-cmo-2 shortw/modified/dbl-2009-bl 64 96 0 32\n",
+ "shortw/modified/add-1998-cmo-2 shortw/modified/dbl-1998-cmo-2 64 96 0 32\n",
+ "shortw/modified/add-2009-bl shortw/modified/dbl-2009-bl 64 111 0 47\n",
+ "shortw/modified/add-2009-bl shortw/modified/dbl-1998-cmo-2 64 111 0 47\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-2015-rcb 28 28 0 0\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-2007-bl 12 12 0 0\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-2015-rcb-3 28 28 0 0\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-1998-cmo-2 12 12 0 0\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-2007-bl-2 12 12 0 0\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-2016-rcb 28 28 0 0\n",
+ "shortw/projective-3/add-2016-rcb shortw/projective-3/dbl-1998-cmo 12 12 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-2015-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-2007-bl 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-2015-rcb-3 20 20 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-2007-bl-2 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-2016-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-1998-cmo-2 shortw/projective-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-2015-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-2007-bl 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-2015-rcb-3 20 20 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-2007-bl-2 2 2 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-2016-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-1998-cmo shortw/projective-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-2015-rcb 28 28 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-2007-bl 12 12 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-2015-rcb-3 28 28 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-1998-cmo-2 12 12 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-2007-bl-2 12 12 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-2016-rcb 28 28 0 0\n",
+ "shortw/projective-3/add-2015-rcb shortw/projective-3/dbl-1998-cmo 12 12 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-2015-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-2007-bl 2 2 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-2015-rcb-3 20 20 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-2007-bl-2 2 2 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-2016-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-2002-bj shortw/projective-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-2015-rcb 28 28 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-2007-bl 12 12 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-2015-rcb-3 28 28 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-1998-cmo-2 12 12 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-2007-bl-2 12 12 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-2016-rcb 28 28 0 0\n",
+ "shortw/projective-3/add-2015-rcb-3 shortw/projective-3/dbl-1998-cmo 12 12 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-2015-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-2007-bl 2 2 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-2015-rcb-3 20 20 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-2007-bl-2 2 2 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-2016-rcb 20 20 0 0\n",
+ "shortw/projective-3/add-2007-bl shortw/projective-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/xyzz-3/add-2008-s shortw/xyzz-3/dbl-2008-s-1 2 2 0 0\n",
+ "shortw/xyzz-3/add-2008-s shortw/xyzz-3/dbl-2008-s-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-1986-cc 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-1998-hnm-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-1998-hnm 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-2007-bl 2 3 0 1\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-2004-hmv 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-2001-b 2 3 0 1\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo-2 shortw/jacobian-3/dbl-1986-cc-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-1986-cc 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-1998-hnm-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-1998-hnm 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-2007-bl 2 3 0 1\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-2004-hmv 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-2001-b 2 3 0 1\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-cmo shortw/jacobian-3/dbl-1986-cc-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-1986-cc 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-1998-hnm-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-1998-hnm 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-2007-bl 2 3 0 1\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-2004-hmv 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-1998-cmo-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-2001-b 2 3 0 1\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-1998-cmo 2 2 0 0\n",
+ "shortw/jacobian-3/add-1998-hnm shortw/jacobian-3/dbl-1986-cc-2 2 2 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-1986-cc 0 0 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-1998-hnm-2 0 0 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-1998-hnm 0 0 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-2007-bl 0 1 0 1\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-2004-hmv 0 0 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-1998-cmo-2 0 0 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-2001-b 0 1 0 1\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-1998-cmo 0 0 0 0\n",
+ "shortw/jacobian-3/add-1986-cc shortw/jacobian-3/dbl-1986-cc-2 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-1986-cc 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-1998-hnm-2 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-1998-hnm 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-2007-bl 0 1 0 1\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-2004-hmv 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-1998-cmo-2 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-2001-b 0 1 0 1\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-1998-cmo 0 0 0 0\n",
+ "shortw/jacobian-3/add-2001-b shortw/jacobian-3/dbl-1986-cc-2 0 0 0 0\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-1986-cc 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-1998-hnm-2 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-1998-hnm 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-2007-bl 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-2004-hmv 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-1998-cmo-2 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-2001-b 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-1998-cmo 2 3 0 1\n",
+ "shortw/jacobian-3/add-2007-bl shortw/jacobian-3/dbl-1986-cc-2 2 3 0 1\n"
+ ]
+ }
+ ],
+ "source": [
+ "for pair in point_map.keys():\n",
+ " print(pair[0], pair[1],\n",
+ " len(point_map[pair]),\n",
+ " len(remapped_point_map[pair]),\n",
+ " -len(point_map[pair].difference(remapped_point_map[pair])),\n",
+ " len(remapped_point_map[pair].difference(point_map[pair])))\n",
+ " #crvs = set()\n",
+ " #for point, params in remapped_point_map[pair].difference(point_map[pair]):\n",
+ " # crvs.add(params)\n",
+ " #print(repr(crvs))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3c0d710b-19fd-4ff7-a39f-f38b1b8856f8",
+ "metadata": {},
+ "source": [
+ "Finally, we can build a tree using the remapped distinguishing map."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "5ffc5564-a42b-4837-94bb-4ecb890b38b2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "remapped_tree = build_distinguishing_tree(remapped_point_map)\n",
+ "print_leaf_sizes(remapped_tree)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "5d2bbf5b-76e6-4137-9c32-cbd09a5c3600",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
{
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[x=8976497402921340665, y=14893197716203064256]\n",
+ "DomainParameters(EllipticCurve)\n",
+ "├── [x=8462011093657406711, y=9385955884972991198]\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=5303842224313800291, y=9121975806275757870]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── [x=7673299449516259275, y=4079088229980719011]\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── [x=3909394990548410378, y=1271934111897046201]\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── [x=198756535338419930, y=10649610515976041289]\n",
+ "│ │ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ │ ├── shortw/projective/add-2002-bj, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-2015-rcb\n",
+ "│ │ │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2015-rcb\n",
+ "│ │ │ │ │ └── shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-2007-bl\n",
+ "│ │ │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo\n",
+ "│ │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2007-bl\n",
+ "│ │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo\n",
+ "│ │ │ │ └── [x=4046881022602480857, y=16958156996739198810]\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ │ └── [x=4986377720346872951, y=8332168605444176038]\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ └── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ └── [x=4986377720346872951, y=8332168605444176038]\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── [x=4173724707785958223, y=6577250203972113290]\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── [x=4046881022602480857, y=16958156996739198810]\n",
+ "│ │ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ │ ├── shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ │ └── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ └── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ └── [x=4046881022602480857, y=16958156996739198810]\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ └── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ └── [x=4046881022602480857, y=16958156996739198810]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ shortw/modified/add-2009-bl, shortw/modified/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/modified/add-2009-bl, shortw/modified/dbl-2009-bl\n",
+ "│ │ └── [x=198756535338419930, y=10649610515976041289]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2015-rcb\n",
+ "│ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2015-rcb\n",
+ "│ │ └── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo\n",
+ "│ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo\n",
+ "│ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ shortw/xyzz/add-2008-s, shortw/xyzz/dbl-2008-s-1\n",
+ "│ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-1998-cmo-2\n",
+ "│ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-2009-bl\n",
+ "│ └── [x=933295826993298997, y=5255086850954974764]\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=5343745049373992004, y=1215580168733194775]\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/projective/add-2016-rcb, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2016-rcb\n",
+ "│ │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-2015-rcb\n",
+ "│ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2015-rcb\n",
+ "│ │ └── shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo\n",
+ "│ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo\n",
+ "│ └── [x=4504164893371726562, y=9004797292574688026]\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-hnm\n",
+ "│ └── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-alnr\n",
+ "│ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-alnr\n",
+ "│ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-alnr\n",
+ "│ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-alnr\n",
+ "│ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-alnr\n",
+ "│ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-l\n",
+ "│ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-alnr\n",
+ "└── [x=7523181643117586774, y=861591372171155399]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=3987108553814416983, y=10194401568277669542]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2001-b\n",
+ " │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2001-b\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2001-b\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2004-hmv\n",
+ " │ └── [x=161110322234615011, y=6188535790273537383]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=7956235823516658822, y=9732780824814402521]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb\n",
+ " │ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-1\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc\n",
+ " │ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2004-hmv\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm\n",
+ " │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2004-hmv\n",
+ " └── [x=3261882760552750749, y=4970255202323098987]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=161110322234615011, y=6188535790273537383]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=6741014024306303479, y=8089192144272372943]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=7956235823516658822, y=9732780824814402521]\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ └── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ └── [x=7956235823516658822, y=9732780824814402521]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ └── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb\n",
+ " │ └── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo\n",
+ " └── [x=8583585759655994824, y=5121594309025134149]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=3987108553814416983, y=10194401568277669542]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2001-b\n",
+ " │ └── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm\n",
+ " │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2004-hmv\n",
+ " └── [x=3271642899270608132, y=4094231858049384691]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=9185172264551501167, y=1489984362467478237]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=9023895164928322279, y=3383060556063092686]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ └── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo\n",
+ " │ └── [x=3760330877114905034, y=14518154872986670897]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=9023895164928322279, y=3383060556063092686]\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ └── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo\n",
+ " │ └── [x=9023895164928322279, y=11600196812807098545]\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2015-rcb\n",
+ " │ └── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo\n",
+ " │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo-2\n",
+ " └── [x=3987108553814416983, y=10194401568277669542]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2001-b\n",
+ " │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2007-bl\n",
+ " │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2001-b\n",
+ " └── [x=9023895164928322279, y=3383060556063092686]\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2015-rcb\n",
+ " └── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-l\n",
+ " shortw/w12-0/add-2010-cln, shortw/w12-0/dbl-2010-cln\n",
+ " shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2007-bl\n",
+ " shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo\n",
+ " shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2007-bl\n",
+ " shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo-2\n",
+ " shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc-2\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm\n",
+ " shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2004-hmv\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm\n",
+ " shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2004-hmv\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(RenderTree(remapped_tree).by_attr(lambda n: n.name if n.name is not None else \"\\n\".join((\", \".join(str(formula) for formula in cfg) for cfg in n.cfgs))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "3ea9912e",
+ "metadata": {},
+ "outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "",
+ "model_id": "73994b6863b341ce9f96974b8880392e",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
- " 0%| | 0/2200 [00:00<?, ?it/s]"
+ "Remap: 0%| | 0/242 [00:00<?, ?it/s]"
]
},
"metadata": {},
@@ -593,184 +1390,997 @@
}
],
"source": [
- "point_map = {}\n",
- "for add, dbl in formula_pairs:\n",
- " points = set()\n",
- " for chain, params in zip(chains, curves):\n",
- " \n",
- " for op, k in chain:\n",
- " if op == \"add\" and (add, k, params) in point_sets:\n",
- " point_set = point_sets[(add, k, params)]\n",
- " elif op == \"dbl\" and (dbl, k, params) in point_sets:\n",
- " point_set = point_sets[(dbl, k, params)]\n",
- " for point in point_set:\n",
- " points.add((point, params, k))\n",
- " point_map[(add, dbl)] = points\n",
- "all_points = set().union(*point_map.values())\n",
- "\n",
- "remapped_point_map = {}\n",
- "for add, dbl in tqdm(formula_pairs, desc=\"Remapping\"):\n",
- " mult = LTRMultiplier(add, dbl, None, False, AccumulationOrder.PeqPR, True, True)\n",
+ "def remap(coords, formulas, points, scalar):\n",
+ " mult = LTRMultiplier(*formulas, None, False, AccumulationOrder.PeqRP, True, True)\n",
" new_points = set()\n",
- " for point, params, k in tqdm(all_points, leave=False):\n",
- " mult.init(params, point.to_model(params.curve.coordinate_model, params.curve))\n",
+ " param_map = {}\n",
+ " for point, params in tqdm(points):\n",
+ " if params not in param_map:\n",
+ " try:\n",
+ " param_map[params] = params.to_coords(coords)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " param_map[params] = None\n",
+ " continue\n",
+ " elif param_map[params] is None:\n",
+ " continue\n",
+ " mult.init(param_map[params], point.to_model(param_map[params].curve.coordinate_model, param_map[params].curve))\n",
" with local(DefaultContext()) as ctx:\n",
- " mult.multiply(scalar)\n",
+ " try:\n",
+ " mult.multiply(scalar)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " continue\n",
" trace = []\n",
- "\n",
" def callback(action):\n",
" if isinstance(action, FormulaAction):\n",
" for intermediate in action.op_results:\n",
" trace.append(intermediate.value)\n",
- " # TODO: What is going on? And where is it going on?\n",
- " # TODO: Run through all coord systems at once.\n",
- " # TODO: Maybe combine with EPA?\n",
- " # TODO: Maybe extend oracle with number or position?\n",
- " # TODO: k in map? why?\n",
" ctx.actions.walk(callback)\n",
" hit_zero = any(int(value) == 0 for value in trace)\n",
- " should_hit_zero = (point, params, k) in point_map[(add, dbl)]\n",
- " if hit_zero:\n",
- " new_points.add((point, params, k))\n",
- " #if hit_zero != should_hit_zero:\n",
- " # print(add, dbl, hit_zero, should_hit_zero, point, params, k)\n",
- " #else:\n",
- " # print(\"ok\", hit_zero, should_hit_zero)\n",
- " remapped_point_map[(add, dbl)] = new_points"
+ " #if hit_zero:\n",
+ " #new_points.add((point, params))\n",
+ " hit_zero = sum(int(value) == 0 for value in trace)\n",
+ " new_points.add((point, hit_zero, params))\n",
+ " return new_points\n",
+ "\n",
+ "remapped_point_map_dupl = {}\n",
+ "with ProcessPoolExecutor(max_workers=12) as pool:\n",
+ " futures = []\n",
+ " pairs = []\n",
+ " for coord_name, coords in model.coordinates.items():\n",
+ " formula_groups = [list(filter(lambda formula: isinstance(formula, formula_class) and (formula.name.startswith(\"add\") or formula.name.startswith(\"dbl\")), coords.formulas.values())) for formula_class in formula_classes]\n",
+ " formula_combinations = list(product(*formula_groups))\n",
+ " for formulas in formula_combinations:\n",
+ " #remap(coords, formulas, all_points, scalar)\n",
+ " #break\n",
+ " futures.append(pool.submit(remap, coords, formulas, all_points, scalar))\n",
+ " pairs.append(formulas)\n",
+ " #break\n",
+ " results = [None for _ in futures]\n",
+ " for future in tqdm(as_completed(futures), total=len(futures), desc=\"Remap\"):\n",
+ " j = futures.index(future)\n",
+ " remapped_point_map_dupl[pairs[j]] = future.result()"
]
},
{
"cell_type": "code",
- "execution_count": 64,
- "id": "8afea2a8-49a1-4969-a19e-9e17e26fb1e8",
+ "execution_count": 24,
+ "id": "10b5059c",
"metadata": {},
"outputs": [],
"source": [
- "tree = build_distinguishing_tree(remapped_point_map)"
+ "remapped_tree_dupl = build_distinguishing_tree(remapped_point_map_dupl)\n",
+ "print_leaf_sizes(remapped_tree_dupl)\n"
]
},
{
"cell_type": "code",
- "execution_count": 65,
- "id": "ab09b767-71ca-4d28-abf0-532307efefbd",
+ "execution_count": 26,
+ "id": "c5d52e7a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "[x=3034406243747257516, y=11482511777964072902]\n",
+ "[x=3261882760552750749, y=5224146365954570556]\n",
+ "0\n",
"DomainParameters(EllipticCurve)\n",
- "6\n",
- "├── [x=6126421359781338627, y=9772906831073546368]\n",
- "│ DomainParameters(EllipticCurve)\n",
+ "├── [x=7523181643117586774, y=9332810196106514144]\n",
"│ 1\n",
- "│ ├── [x=9219828953749013321, y=2141216720201514772]\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=813939388429964455, y=6661172451039539927]\n",
+ "│ │ 3\n",
"│ │ DomainParameters(EllipticCurve)\n",
- "│ │ 3858024\n",
- "│ │ ├── [x=5047606674150175385, y=1956997826490032405]\n",
+ "│ │ ├── [x=6292247451345142082, y=7536413344159771043]\n",
+ "│ │ │ 4\n",
"│ │ │ DomainParameters(EllipticCurve)\n",
- "│ │ │ 6\n",
- "│ │ │ ├── (AdditionEFDFormula(add-2007-bl for shortw/projective), DoublingEFDFormula(dbl-2015-rcb for shortw/projective))\n",
- "│ │ │ │ (AdditionEFDFormula(add-2002-bj for shortw/projective), DoublingEFDFormula(dbl-2015-rcb for shortw/projective))\n",
- "│ │ │ └── (AdditionEFDFormula(add-2015-rcb for shortw/projective), DoublingEFDFormula(dbl-2015-rcb for shortw/projective))\n",
- "│ │ └── (AdditionEFDFormula(add-2015-rcb for shortw/projective), DoublingEFDFormula(dbl-2007-bl for shortw/projective))\n",
- "│ │ (AdditionEFDFormula(add-2015-rcb for shortw/projective), DoublingEFDFormula(dbl-1998-cmo for shortw/projective))\n",
- "│ │ (AdditionEFDFormula(add-2015-rcb for shortw/projective), DoublingEFDFormula(dbl-1998-cmo-2 for shortw/projective))\n",
- "│ └── (AdditionEFDFormula(add-2007-bl for shortw/projective), DoublingEFDFormula(dbl-2007-bl for shortw/projective))\n",
- "│ (AdditionEFDFormula(add-2007-bl for shortw/projective), DoublingEFDFormula(dbl-1998-cmo for shortw/projective))\n",
- "│ (AdditionEFDFormula(add-2007-bl for shortw/projective), DoublingEFDFormula(dbl-1998-cmo-2 for shortw/projective))\n",
- "│ (AdditionEFDFormula(add-2002-bj for shortw/projective), DoublingEFDFormula(dbl-2007-bl for shortw/projective))\n",
- "│ (AdditionEFDFormula(add-2002-bj for shortw/projective), DoublingEFDFormula(dbl-1998-cmo for shortw/projective))\n",
- "│ (AdditionEFDFormula(add-2002-bj for shortw/projective), DoublingEFDFormula(dbl-1998-cmo-2 for shortw/projective))\n",
- "└── [x=9219828953749013321, y=2141216720201514772]\n",
+ "│ │ │ ├── [x=3174880782688558524, y=15311888883183151212]\n",
+ "│ │ │ │ 0\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2007-bl\n",
+ "│ │ │ │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo\n",
+ "│ │ │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2007-bl\n",
+ "│ │ │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo\n",
+ "│ │ │ │ └── [x=2931798833210310726, y=14893197716203064256]\n",
+ "│ │ │ │ 27\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── [x=4701374179218306695, y=10529574804216309365]\n",
+ "│ │ │ │ │ 0\n",
+ "│ │ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ │ ├── shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ │ │ └── shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ └── [x=6510762087270099859, y=8382435628932964398]\n",
+ "│ │ │ │ 26\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ │ └── shortw/modified/add-2009-bl, shortw/modified/dbl-1998-cmo-2\n",
+ "│ │ │ │ shortw/modified/add-2009-bl, shortw/modified/dbl-2009-bl\n",
+ "│ │ │ └── [x=2931798833210310726, y=14893197716203064256]\n",
+ "│ │ │ 26\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── [x=4701374179218306695, y=10529574804216309365]\n",
+ "│ │ │ │ 0\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ │ shortw/xyzz/add-2008-s, shortw/xyzz/dbl-2008-s-1\n",
+ "│ │ │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ └── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ │ └── [x=2695787092446081872, y=11530949965125792502]\n",
+ "│ │ │ 2\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ └── shortw/modified/add-1998-cmo-2, shortw/modified/dbl-2009-bl\n",
+ "│ │ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-1998-cmo-2\n",
+ "│ │ └── [x=3987108553814416983, y=10194401568277669542]\n",
+ "│ │ 0\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-1\n",
+ "│ │ │ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ └── [x=3987108553814416983, y=10194401568277669542]\n",
+ "│ │ 1\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ └── [x=3987108553814416983, y=10194401568277669542]\n",
+ "│ │ 2\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ └── shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2001-b\n",
+ "│ └── [x=8583585759655994824, y=5072807259252535394]\n",
+ "│ 2\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=813939388429964455, y=6661172451039539927]\n",
+ "│ │ 3\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── [x=9207640209484078691, y=13054112271424076721]\n",
+ "│ │ │ 41\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── [x=6292247451345142082, y=7536413344159771043]\n",
+ "│ │ │ │ 3\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── [x=7904229027765000239, y=3153037537088752648]\n",
+ "│ │ │ │ │ 962\n",
+ "│ │ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ │ ├── shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ └── [x=5610676601755833088, y=2256671746760711811]\n",
+ "│ │ │ │ │ 1012\n",
+ "│ │ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ │ ├── shortw/projective/add-2002-bj, shortw/projective/dbl-2007-bl\n",
+ "│ │ │ │ │ └── shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo\n",
+ "│ │ │ │ └── [x=5610676601755833088, y=9274278218365080692]\n",
+ "│ │ │ │ 1085\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/projective/add-2007-bl, shortw/projective/dbl-2007-bl\n",
+ "│ │ │ │ └── [x=9979302445253644651, y=5489702477279405897]\n",
+ "│ │ │ │ 1035\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ │ │ └── shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo\n",
+ "│ │ │ └── [x=4701374179218306695, y=10529574804216309365]\n",
+ "│ │ │ 0\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── [x=3174880782688558524, y=15311888883183151212]\n",
+ "│ │ │ │ 0\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ │ └── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ └── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ └── [x=3987108553814416983, y=10194401568277669542]\n",
+ "│ │ 0\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ └── shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2001-b\n",
+ "│ └── [x=813939388429964455, y=6661172451039539927]\n",
+ "│ 3\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── [x=5303842224313800291, y=2978129968532308991]\n",
+ "│ │ 2\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── [x=4701374179218306695, y=10529574804216309365]\n",
+ "│ │ │ 0\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── [x=3174880782688558524, y=15311888883183151212]\n",
+ "│ │ │ │ 0\n",
+ "│ │ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ │ ├── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ │ └── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ │ └── shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-hnm\n",
+ "│ │ └── [x=4701374179218306695, y=10529574804216309365]\n",
+ "│ │ 0\n",
+ "│ │ DomainParameters(EllipticCurve)\n",
+ "│ │ ├── [x=3174880782688558524, y=15311888883183151212]\n",
+ "│ │ │ 0\n",
+ "│ │ │ DomainParameters(EllipticCurve)\n",
+ "│ │ │ ├── shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1986-cc\n",
+ "│ │ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo-2\n",
+ "│ │ │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo\n",
+ "│ │ │ └── shortw/jacobian/add-2001-b, shortw/jacobian/dbl-2007-bl\n",
+ "│ │ └── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-hnm\n",
+ "│ └── [x=3987108553814416983, y=10194401568277669542]\n",
+ "│ 0\n",
+ "│ DomainParameters(EllipticCurve)\n",
+ "│ ├── shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ └── shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2001-b\n",
+ "│ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2001-b\n",
+ "└── [x=330803148782512684, y=3479385230159377146]\n",
+ " 0\n",
" DomainParameters(EllipticCurve)\n",
- " 3858024\n",
- " ├── (AdditionEFDFormula(add-1998-cmo for shortw/projective), DoublingEFDFormula(dbl-2015-rcb for shortw/projective))\n",
- " │ (AdditionEFDFormula(add-1998-cmo-2 for shortw/projective), DoublingEFDFormula(dbl-2015-rcb for shortw/projective))\n",
- " └── (AdditionEFDFormula(add-1998-cmo for shortw/projective), DoublingEFDFormula(dbl-2007-bl for shortw/projective))\n",
- " (AdditionEFDFormula(add-1998-cmo for shortw/projective), DoublingEFDFormula(dbl-1998-cmo for shortw/projective))\n",
- " (AdditionEFDFormula(add-1998-cmo for shortw/projective), DoublingEFDFormula(dbl-1998-cmo-2 for shortw/projective))\n",
- " (AdditionEFDFormula(add-1998-cmo-2 for shortw/projective), DoublingEFDFormula(dbl-2007-bl for shortw/projective))\n",
- " (AdditionEFDFormula(add-1998-cmo-2 for shortw/projective), DoublingEFDFormula(dbl-1998-cmo for shortw/projective))\n",
- " (AdditionEFDFormula(add-1998-cmo-2 for shortw/projective), DoublingEFDFormula(dbl-1998-cmo-2 for shortw/projective))\n"
+ " ├── [x=5290749974607723184, y=5916599314601128558]\n",
+ " │ 3\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=8583585759655994824, y=5121594309025134149]\n",
+ " │ │ 0\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=5121176033986057907, y=12787271129661728530]\n",
+ " │ │ │ 2\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-2007-bl\n",
+ " │ │ │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo\n",
+ " │ │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2007-bl\n",
+ " │ │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo\n",
+ " │ │ │ └── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2015-rcb\n",
+ " │ │ └── [x=9185172264551501167, y=1489984362467478237]\n",
+ " │ │ 0\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=5121176033986057907, y=12787271129661728530]\n",
+ " │ │ │ 2\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ │ │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ │ │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ │ └── [x=3271642899270608132, y=4094231858049384691]\n",
+ " │ │ │ 0\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ │ │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ │ └── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ └── [x=4810169051756113129, y=9663791351713124974]\n",
+ " │ │ 1\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── [x=6292247451345142082, y=7536413344159771043]\n",
+ " │ │ │ 3\n",
+ " │ │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ │ ├── shortw/projective/add-2002-bj, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ └── shortw/projective/add-2007-bl, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2015-rcb\n",
+ " │ │ └── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2015-rcb\n",
+ " │ └── [x=3760330877114905034, y=465102495883520334]\n",
+ " │ 0\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=3271642899270608132, y=4094231858049384691]\n",
+ " │ │ 0\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ │ shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ └── [x=4810169051756113129, y=9663791351713124974]\n",
+ " │ │ 1\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective/add-2016-rcb, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2015-rcb\n",
+ " │ │ └── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2015-rcb\n",
+ " │ └── [x=9185172264551501167, y=1489984362467478237]\n",
+ " │ 0\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ └── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo\n",
+ " │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo\n",
+ " └── [x=9207640209484078691, y=13054112271424076721]\n",
+ " 26\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=2931798833210310726, y=14893197716203064256]\n",
+ " │ 26\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ └── [x=2984901480071412866, y=14893197716203064256]\n",
+ " │ 28\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ └── [x=8976497402921340665, y=14893197716203064256]\n",
+ " │ 27\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ └── shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2007-bl\n",
+ " └── [x=3261882760552750749, y=5224146365954570556]\n",
+ " 3\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=7820832125962317615, y=9334214407275119717]\n",
+ " │ 0\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=6741014024306303479, y=2105209424005296600]\n",
+ " │ │ 5\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl\n",
+ " │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo\n",
+ " │ │ └── shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl\n",
+ " │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ " │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ " │ └── [x=8583585759655994824, y=5072807259252535394]\n",
+ " │ 0\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── [x=7018390556762767964, y=1959409399271527243]\n",
+ " │ │ 0\n",
+ " │ │ DomainParameters(EllipticCurve)\n",
+ " │ │ ├── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb\n",
+ " │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb\n",
+ " │ └── [x=7018390556762767964, y=1959409399271527243]\n",
+ " │ 0\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2016-rcb\n",
+ " │ └── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb\n",
+ " │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb\n",
+ " └── [x=5643623786928772539, y=13627860160399064610]\n",
+ " 0\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=2931798833210310726, y=14893197716203064256]\n",
+ " │ 0\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-l\n",
+ " │ └── [x=2931798833210310726, y=14893197716203064256]\n",
+ " │ 2\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ └── [x=8976497402921340665, y=14893197716203064256]\n",
+ " │ 1\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-l\n",
+ " │ └── shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-alnr\n",
+ " └── [x=7018390556762767964, y=1959409399271527243]\n",
+ " 0\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── [x=6741014024306303479, y=2105209424005296600]\n",
+ " │ 5\n",
+ " │ DomainParameters(EllipticCurve)\n",
+ " │ ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ " │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2016-rcb\n",
+ " │ └── shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ " │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ " └── [x=6741014024306303479, y=2105209424005296600]\n",
+ " 5\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ " │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb\n",
+ " └── [x=8583585759655994824, y=5072807259252535394]\n",
+ " 0\n",
+ " DomainParameters(EllipticCurve)\n",
+ " ├── shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ " └── shortw/w12-0/add-2010-cln, shortw/w12-0/dbl-2010-cln\n"
]
}
],
"source": [
- "print(RenderTree(tree).by_attr(lambda n: n.name if n.name is not None else n.cfgs))"
+ "print(RenderTree(remapped_tree_dupl).by_attr(lambda n: n.name if n.name is not None else \"\\n\".join((\", \".join(str(formula) for formula in cfg) for cfg in n.cfgs))))"
]
},
{
"cell_type": "code",
- "execution_count": 77,
- "id": "cc87dfd1-f058-4338-aaca-fc05105fc9f1",
+ "execution_count": null,
+ "id": "47d2056f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def remap(coords, formulas, points, scalar):\n",
+ " mult = LTRMultiplier(*formulas, None, False, AccumulationOrder.PeqRP, True, True)\n",
+ " new_points = set()\n",
+ " param_map = {}\n",
+ " for point, params in tqdm(points):\n",
+ " if params not in param_map:\n",
+ " try:\n",
+ " param_map[params] = params.to_coords(coords)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " param_map[params] = None\n",
+ " continue\n",
+ " elif param_map[params] is None:\n",
+ " continue\n",
+ " mult.init(param_map[params], point.to_model(param_map[params].curve.coordinate_model, param_map[params].curve))\n",
+ " with local(DefaultContext()) as ctx:\n",
+ " try:\n",
+ " mult.multiply(scalar)\n",
+ " except UnsatisfiedAssumptionError:\n",
+ " continue\n",
+ " trace = []\n",
+ " def callback(action):\n",
+ " if isinstance(action, FormulaAction):\n",
+ " for intermediate in action.op_results:\n",
+ " trace.append(intermediate.value)\n",
+ " ctx.actions.walk(callback)\n",
+ " #hit_zero = any(int(value) == 0 for value in trace)\n",
+ " #if hit_zero:\n",
+ " #new_points.add((point, params))\n",
+ " hit_zero = tuple(map(lambda x: int(x) == 0,trace))\n",
+ " new_points.add((point, hit_zero, params))\n",
+ " return new_points\n",
+ "\n",
+ "remapped_point_map_loc = {}\n",
+ "with ProcessPoolExecutor(max_workers=12) as pool:\n",
+ " futures = []\n",
+ " pairs = []\n",
+ " for coord_name, coords in model.coordinates.items():\n",
+ " formula_groups = [list(filter(lambda formula: isinstance(formula, formula_class) and (formula.name.startswith(\"add\") or formula.name.startswith(\"dbl\")), coords.formulas.values())) for formula_class in formula_classes]\n",
+ " formula_combinations = list(product(*formula_groups))\n",
+ " for formulas in formula_combinations:\n",
+ " #remap(coords, formulas, all_points, scalar)\n",
+ " #break\n",
+ " futures.append(pool.submit(remap, coords, formulas, all_points, scalar))\n",
+ " pairs.append(formulas)\n",
+ " #break\n",
+ " results = [None for _ in futures]\n",
+ " for future in tqdm(as_completed(futures), total=len(futures), desc=\"Remap\"):\n",
+ " j = futures.index(future)\n",
+ " remapped_point_map_loc[pairs[j]] = future.result()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c3a632fb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "remapped_tree_loc = build_distinguishing_tree(remapped_point_map_loc)\n",
+ "print_leaf_sizes(remapped_tree_loc)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "cf37df73",
"metadata": {},
+ "outputs": [],
+ "source": [
+ "print(RenderTree(remapped_tree_loc).by_attr(lambda n: n.name if n.name is not None else \"\\n\".join((\", \".join(str(formula) for formula in cfg) for cfg in n.cfgs))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "d258bc29-b24f-4d57-a183-cb5d58e3f20f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fset_map = {}\n",
+ "for coord_name, coords in model.coordinates.items():\n",
+ " formula_groups = [list(filter(lambda formula: isinstance(formula, formula_class) and (formula.name.startswith(\"add\") or formula.name.startswith(\"dbl\")), coords.formulas.values())) for formula_class in formula_classes]\n",
+ " factor_sets = {}\n",
+ " for formula_group in formula_groups:\n",
+ " for formula in formula_group:\n",
+ " fset = compute_factor_set(formula)\n",
+ " factor_sets[formula] = fset\n",
+ " formula_combinations = list(product(*formula_groups))\n",
+ " for formulas in formula_combinations:\n",
+ " fset = set()\n",
+ " for formula in formulas:\n",
+ " fset.update(factor_sets[formula])\n",
+ " fset_map[formulas] = fset"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "085c37db-ffbf-4f9e-87d3-5c13ecfeadca",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "fset_tree = build_distinguishing_tree(fset_map)\n",
+ "print_leaf_sizes(fset_tree)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "9f0dc435-e08a-45d0-846d-ee865d6a4b7c",
+ "metadata": {
+ "scrolled": true
+ },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "shortw/projective/add-2007-bl shortw/projective/dbl-2007-bl 462 518 0 56\n",
- "set()\n",
- "shortw/projective/add-2007-bl shortw/projective/dbl-1998-cmo 462 518 0 56\n",
- "set()\n",
- "shortw/projective/add-2007-bl shortw/projective/dbl-2015-rcb 1716 1784 0 68\n",
- "set()\n",
- "shortw/projective/add-2007-bl shortw/projective/dbl-1998-cmo-2 462 518 0 56\n",
- "set()\n",
- "shortw/projective/add-2015-rcb shortw/projective/dbl-2007-bl 850 870 0 20\n",
- "set()\n",
- "shortw/projective/add-2015-rcb shortw/projective/dbl-1998-cmo 850 870 0 20\n",
- "set()\n",
- "shortw/projective/add-2015-rcb shortw/projective/dbl-2015-rcb 2104 2108 0 4\n",
- "set()\n",
- "shortw/projective/add-2015-rcb shortw/projective/dbl-1998-cmo-2 850 870 0 20\n",
- "set()\n",
- "shortw/projective/add-2002-bj shortw/projective/dbl-2007-bl 462 518 0 56\n",
- "set()\n",
- "shortw/projective/add-2002-bj shortw/projective/dbl-1998-cmo 462 518 0 56\n",
- "set()\n",
- "shortw/projective/add-2002-bj shortw/projective/dbl-2015-rcb 1716 1784 0 68\n",
- "set()\n",
- "shortw/projective/add-2002-bj shortw/projective/dbl-1998-cmo-2 462 518 0 56\n",
- "set()\n",
- "shortw/projective/add-1998-cmo shortw/projective/dbl-2007-bl 400 440 -30 70\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo shortw/projective/dbl-1998-cmo 400 440 -30 70\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo shortw/projective/dbl-2015-rcb 1654 1712 -30 88\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo shortw/projective/dbl-1998-cmo-2 400 440 -30 70\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-2007-bl 400 440 -30 70\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-1998-cmo 400 440 -30 70\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-2015-rcb 1654 1712 -30 88\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n",
- "shortw/projective/add-1998-cmo-2 shortw/projective/dbl-1998-cmo-2 400 440 -30 70\n",
- "{(Point([[x=3506583871477322073, y=6741142221818933028]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=6266750213032352783, y=2572643933633910467]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=10266451081742949860, y=6375395324081956250]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=6266750213032352783, y=8359538538250281626]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=518029702578685213]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=11860202707452705321, y=2052542901066170704]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=9819149482471069087, y=5440687058305090757]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=4173724707785958223, y=4699325755562909213]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=9819149482471069087, y=5491495413579101336]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=10431270994884570551, y=3130627042319158740]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=4693648949403847510]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=5135606693713390464, y=10464898676446924539]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=11104973634291672093, y=6542585482520847060]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=5135606693713390464, y=6493258320292274272]] in shortw/affine), DomainParameters(EllipticCurve([a=2601366152990292210, b=16667361733373129443] on ShortWeierstrass using shortw/projective), Point([[X=4281839768736361216, Y=3013285706496074176, Z=1]] in shortw/projective), 16958157002496852713, 1), 6), (Point([[x=10266451081742949860, y=5454457432444346201]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 6), (Point([[x=10312946530826786949, y=6471666721643547004]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=1138105631230065649, y=10185298079248308414]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10312946530826786949, y=6339122982089723353]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5897106082088403986]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=2579783466931099474, y=2102965590089588720]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=11860202707452705321, y=10758246802667099653]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 2), (Point([[x=2579783466931099474, y=8829216881794603373]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=4173724707785958223, y=6577250203972113290]] in shortw/affine), DomainParameters(EllipticCurve([a=3625103617301682823, b=4388462454794354946] on ShortWeierstrass using shortw/projective), Point([[X=3776323442245452173, Y=3498331799874979092, Z=1]] in shortw/projective), 11276575961681749769, 1), 2), (Point([[x=3506583871477322073, y=8570746661364218185]] in shortw/affine), DomainParameters(EllipticCurve([a=14990863445573266178, b=5006414456395872472] on ShortWeierstrass using shortw/projective), Point([[X=4750105424415673627, Y=4425109830522506764, Z=1]] in shortw/projective), 15311888886630415727, 1), 6), (Point([[x=1138105631230065649, y=1644554677277994037]] in shortw/affine), DomainParameters(EllipticCurve([a=6183569009851969325, b=762106933559736021] on ShortWeierstrass using shortw/projective), Point([[X=9670240073134457762, Y=8886575037425480089, Z=1]] in shortw/projective), 11829852760562783143, 1), 2), (Point([[x=10431270994884570551, y=13734681669605378263]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2), (Point([[x=7585529656491369468, y=6238533522480344583]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 6), (Point([[x=11104973634291672093, y=6268204221212423297]] in shortw/affine), DomainParameters(EllipticCurve([a=8778587627516611817, b=9445930250569380907] on ShortWeierstrass using shortw/projective), Point([[X=10018863479180836837, Y=3821536539749098925, Z=1]] in shortw/projective), 12810789706563865157, 1), 6), (Point([[x=6317967938476284435, y=5035076389795788107]] in shortw/affine), DomainParameters(EllipticCurve([a=6127782631951813907, b=5171791703060456988] on ShortWeierstrass using shortw/projective), Point([[X=2190614060104834009, Y=407219013830067215, Z=1]] in shortw/projective), 10932182471093495659, 1), 2), (Point([[x=5063489076477151910, y=16347279009345851790]] in shortw/affine), DomainParameters(EllipticCurve([a=14681705106012859794, b=6296839833753850232] on ShortWeierstrass using shortw/projective), Point([[X=16706845951792451867, Y=6264042703439027859, Z=1]] in shortw/projective), 16865308710771279959, 1), 2)}\n"
+ "Poly(x1 + 1, x1, domain='ZZ')\n",
+ "├── Poly(2*x1**3 - 3*x1**2*x2 + x2**3 - y1**2 + 2*y1*y2 - y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ "│ ├── Poly(x1**3 - 3*x1**2*x2 + 3*x1*x2**2 - x2**3 + y1**2 - 2*y1*y2 + y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ "│ │ ├── Poly(-6*x1 - y1**2 + 3*b, x1, y1, b, domain='ZZ')\n",
+ "│ │ │ ├── Poly(x1**2 + 3, x1, domain='ZZ')\n",
+ "│ │ │ │ ├── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ │ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ │ └── Poly(9*x1**4 - 18*x1**2 - 4*x1*y1**2 + 9, x1, y1, domain='ZZ')\n",
+ "│ │ │ ├── Poly(x1**2 - 3, x1, domain='ZZ')\n",
+ "│ │ │ │ ├── shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ │ └── shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ └── shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo-2, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-1998-cmo, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-1\n",
+ "│ │ │ shortw/xyzz-3/add-2008-s, shortw/xyzz-3/dbl-2008-s-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo-2, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-1998-cmo, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/jacobian-3/add-2007-bl, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ └── Poly(9*x1**4 - 18*x1**2 - 4*x1*y1**2 + 9, x1, y1, domain='ZZ')\n",
+ "│ │ ├── Poly(x1**2 - 3, x1, domain='ZZ')\n",
+ "│ │ │ ├── shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ └── shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ └── shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-3/add-1986-cc, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-3/add-2001-b, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ └── Poly(3*x1**4 - 6*x1**2 - 4*x1*y1**2 + 3, x1, y1, domain='ZZ')\n",
+ "│ ├── Poly(x1*y2 + x2*y1, x1, x2, y1, y2, domain='ZZ')\n",
+ "│ │ ├── Poly(x1*b + x2*b - 3, x1, x2, b, domain='ZZ')\n",
+ "│ │ │ ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ └── shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ └── Poly(x1**2 + x1*x2 + x2**2 - 3, x1, x2, domain='ZZ')\n",
+ "│ │ ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo-2\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2007-bl-2\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-1998-cmo\n",
+ "│ │ └── Poly(9*x1**4 - 18*x1**2 - 4*x1*y1**2 + 9, x1, y1, domain='ZZ')\n",
+ "│ │ ├── Poly(x1**2 - 3, x1, domain='ZZ')\n",
+ "│ │ │ ├── shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm\n",
+ "│ │ │ └── shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-hnm-2\n",
+ "│ │ └── shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2007-bl\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2004-hmv\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo-2\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-2001-b\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1998-cmo\n",
+ "│ │ shortw/jacobian-3/add-1998-hnm, shortw/jacobian-3/dbl-1986-cc-2\n",
+ "│ └── Poly(-6*x1 - y1**2 + 3*b, x1, y1, b, domain='ZZ')\n",
+ "│ ├── Poly(x1*y2 + x2*y1, x1, x2, y1, y2, domain='ZZ')\n",
+ "│ │ ├── Poly(x1*b + x2*b - 3, x1, x2, b, domain='ZZ')\n",
+ "│ │ │ ├── Poly(x1**2 + 3, x1, domain='ZZ')\n",
+ "│ │ │ │ ├── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ │ └── shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ │ │ shortw/projective-3/add-2016-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ │ │ shortw/projective-3/add-2015-rcb-3, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ │ └── Poly(x1**2 + 3, x1, domain='ZZ')\n",
+ "│ │ │ ├── shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ └── shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ │ shortw/projective-3/add-2015-rcb, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ └── Poly(x1**2 + 3, x1, domain='ZZ')\n",
+ "│ │ ├── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb\n",
+ "│ │ └── shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ shortw/projective-3/add-2002-bj, shortw/projective-3/dbl-2016-rcb\n",
+ "│ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2015-rcb-3\n",
+ "│ │ shortw/projective-3/add-2007-bl, shortw/projective-3/dbl-2016-rcb\n",
+ "│ └── Poly(9*x1**4 + 6*x1**2*a - 12*x1*y1**2 + a**2, x1, y1, a, domain='ZZ')\n",
+ "│ ├── shortw/projective/add-2016-rcb, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-2016-rcb, shortw/projective/dbl-1998-cmo\n",
+ "│ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-2007-bl\n",
+ "│ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective/add-2015-rcb, shortw/projective/dbl-1998-cmo\n",
+ "│ └── Poly(-x1 - x2 + 3*b, x1, x2, b, domain='ZZ')\n",
+ "│ ├── Poly(x1**2 + 1, x1, domain='ZZ')\n",
+ "│ │ ├── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2015-rcb\n",
+ "│ │ └── shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-2007-bl\n",
+ "│ │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo-2\n",
+ "│ │ shortw/projective-1/add-2015-rcb, shortw/projective-1/dbl-1998-cmo\n",
+ "│ └── shortw/projective/add-2016-rcb, shortw/projective/dbl-2015-rcb\n",
+ "│ shortw/projective/add-2016-rcb, shortw/projective/dbl-2016-rcb\n",
+ "│ shortw/projective/add-2015-rcb, shortw/projective/dbl-2015-rcb\n",
+ "│ shortw/projective/add-2015-rcb, shortw/projective/dbl-2016-rcb\n",
+ "└── Poly(3*x1**2 + a, x1, a, domain='ZZ')\n",
+ " ├── Poly(x1**3 - 3*x1**2*x2 + 3*x1*x2**2 - x2**3 + y1**2 - 2*y1*y2 + y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ " │ ├── Poly(2*x1*a + y1**2 + 3*b, x1, y1, a, b, domain='ZZ')\n",
+ " │ │ ├── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2016-rcb\n",
+ " │ │ └── Poly(x1**2 + a, x1, a, domain='ZZ')\n",
+ " │ │ ├── shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ └── shortw/projective/add-1998-cmo-2, shortw/projective/dbl-2007-bl\n",
+ " │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective/add-1998-cmo-2, shortw/projective/dbl-1998-cmo\n",
+ " │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-2007-bl\n",
+ " │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective/add-1998-cmo, shortw/projective/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-1998-cmo-2, shortw/jacobian/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-1998-cmo, shortw/jacobian/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-2007-bl, shortw/jacobian/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-bc-r1rv76-jac, shortw/jacobian/dbl-1998-cmo\n",
+ " │ │ shortw/xyzz/add-2008-s, shortw/xyzz/dbl-2008-s-1\n",
+ " │ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-2009-bl\n",
+ " │ │ shortw/modified/add-1998-cmo-2, shortw/modified/dbl-1998-cmo-2\n",
+ " │ │ shortw/modified/add-2009-bl, shortw/modified/dbl-2009-bl\n",
+ " │ │ shortw/modified/add-2009-bl, shortw/modified/dbl-1998-cmo-2\n",
+ " │ └── Poly(x1**2 + x1*x2 + x2**2 + a, x1, x2, a, domain='ZZ')\n",
+ " │ ├── Poly(2*x1*a + y1**2 + 3*b, x1, y1, a, b, domain='ZZ')\n",
+ " │ │ ├── shortw/projective/add-2002-bj, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-2016-rcb\n",
+ " │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2015-rcb\n",
+ " │ │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2016-rcb\n",
+ " │ │ └── shortw/projective/add-2002-bj, shortw/projective/dbl-2007-bl\n",
+ " │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective/add-2002-bj, shortw/projective/dbl-1998-cmo\n",
+ " │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-2007-bl\n",
+ " │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective/add-2007-bl, shortw/projective/dbl-1998-cmo\n",
+ " │ └── Poly(3*x1**3 - 3*x1**2*x2 - 3*x1*x2**2 + 3*x2**3 - 2*y1**2 + 4*y1*y2 - 2*y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ " │ ├── Poly(x1**2 + a, x1, a, domain='ZZ')\n",
+ " │ │ ├── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ └── shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1986-cc\n",
+ " │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-2007-bl\n",
+ " │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian/add-1998-hnm, shortw/jacobian/dbl-1998-cmo\n",
+ " │ └── Poly(x1**2 + a, x1, a, domain='ZZ')\n",
+ " │ ├── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-hnm\n",
+ " │ └── shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1986-cc\n",
+ " │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-2007-bl\n",
+ " │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian/add-1986-cc, shortw/jacobian/dbl-1998-cmo\n",
+ " │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1986-cc\n",
+ " │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-2007-bl\n",
+ " │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian/add-2001-b, shortw/jacobian/dbl-1998-cmo\n",
+ " └── Poly(x1**3 - 3*x1**2*x2 + 3*x1*x2**2 - x2**3 + y1**2 - 2*y1*y2 + y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ " ├── Poly(3*x1**3 - 4*y1**2, x1, y1, domain='ZZ')\n",
+ " │ ├── Poly(9*x1**3 - 4*y1**2, x1, y1, domain='ZZ')\n",
+ " │ │ ├── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ └── shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo-2, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1998-cmo, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-2007-bl, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ └── Poly(-2*x1 + 3*b, x1, b, domain='ZZ')\n",
+ " │ ├── shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2015-rcb\n",
+ " │ │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2015-rcb\n",
+ " │ └── shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-1998-cmo-2, shortw/projective-1/dbl-1998-cmo\n",
+ " │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-1998-cmo, shortw/projective-1/dbl-1998-cmo\n",
+ " └── Poly(2*x1**3 - 3*x1**2*x2 + x2**3 - y1**2 + 2*y1*y2 - y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ " ├── Poly(9*x1**3 - 4*y1**2, x1, y1, domain='ZZ')\n",
+ " │ ├── shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ └── Poly(3*x1**3 - 4*y1**2, x1, y1, domain='ZZ')\n",
+ " │ ├── shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-1986-cc, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-l\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ │ shortw/jacobian-0/add-2001-b, shortw/jacobian-0/dbl-2009-alnr\n",
+ " │ └── shortw/w12-0/add-2010-cln, shortw/w12-0/dbl-2010-cln\n",
+ " └── Poly(9*x1**4 - 6*x1**2 - 12*x1*y1**2 + 1, x1, y1, domain='ZZ')\n",
+ " ├── Poly(x1 + x2 - 1, x1, x2, domain='ZZ')\n",
+ " │ ├── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2007-bl\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ │ shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-1998-cmo\n",
+ " │ └── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-1998-cmo\n",
+ " │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2007-bl\n",
+ " │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo-2\n",
+ " │ shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-1998-cmo\n",
+ " └── Poly(3*x1**3 - 3*x1**2*x2 - 3*x1*x2**2 + 3*x2**3 - 2*y1**2 + 4*y1*y2 - 2*y2**2, x1, x2, y1, y2, domain='ZZ')\n",
+ " ├── Poly(9*x1**3 - 4*y1**2, x1, y1, domain='ZZ')\n",
+ " │ ├── shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-hnm\n",
+ " │ └── shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1986-cc\n",
+ " │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2007-bl\n",
+ " │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-l\n",
+ " │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo-2\n",
+ " │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-1998-cmo\n",
+ " │ shortw/jacobian-0/add-1998-hnm, shortw/jacobian-0/dbl-2009-alnr\n",
+ " └── Poly(x1 + x2 - 1, x1, x2, domain='ZZ')\n",
+ " ├── shortw/projective-1/add-2002-bj-2, shortw/projective-1/dbl-2015-rcb\n",
+ " └── shortw/projective-1/add-2002-bj, shortw/projective-1/dbl-2015-rcb\n",
+ " shortw/projective-1/add-2007-bl, shortw/projective-1/dbl-2015-rcb\n"
]
}
],
"source": [
- "for pair in point_map.keys():\n",
- " print(pair[0], pair[1],\n",
- " len(point_map[pair]),\n",
- " len(remapped_point_map[pair]),\n",
- " -len(point_map[pair].difference(remapped_point_map[pair])),\n",
- " len(remapped_point_map[pair].difference(point_map[pair])))\n",
- " print(point_map[pair].difference(remapped_point_map[pair]))"
+ "print(RenderTree(fset_tree).by_attr(lambda n: n.name if n.name is not None else \"\\n\".join((\", \".join(str(formula) for formula in cfg) for cfg in n.cfgs))))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "6db4910f-c492-462b-9d0e-effe3e7bfed9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "-------------- filter_nonhomo=True affine=True --------------\n"
+ ]
+ },
+ {
+ "ename": "NameError",
+ "evalue": "name 'dbls' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn[20], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[39mfor\u001b[39;00m affine \u001b[39min\u001b[39;00m (\u001b[39mTrue\u001b[39;00m, \u001b[39mFalse\u001b[39;00m):\n\u001b[1;32m 3\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m-------------- filter_nonhomo=\u001b[39m\u001b[39m{\u001b[39;00mfilter_nonhomo\u001b[39m}\u001b[39;00m\u001b[39m affine=\u001b[39m\u001b[39m{\u001b[39;00maffine\u001b[39m}\u001b[39;00m\u001b[39m --------------\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m----> 4\u001b[0m fset_map \u001b[39m=\u001b[39m {dbl: compute_factor_set(dbl, filter_nonhomo\u001b[39m=\u001b[39mfilter_nonhomo, affine\u001b[39m=\u001b[39maffine) \u001b[39mfor\u001b[39;00m dbl \u001b[39min\u001b[39;00m dbls}\n\u001b[1;32m 5\u001b[0m fset_tree \u001b[39m=\u001b[39m build_distinguishing_tree(fset_map)\n\u001b[1;32m 6\u001b[0m \u001b[39mprint\u001b[39m(RenderTree(fset_tree)\u001b[39m.\u001b[39mby_attr(\u001b[39mlambda\u001b[39;00m n: n\u001b[39m.\u001b[39mname \u001b[39mif\u001b[39;00m n\u001b[39m.\u001b[39mname \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39melse\u001b[39;00m n\u001b[39m.\u001b[39mcfgs))\n",
+ "\u001b[0;31mNameError\u001b[0m: name 'dbls' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "for filter_nonhomo in (True, False):\n",
+ " for affine in (True, False):\n",
+ " print(f\"-------------- filter_nonhomo={filter_nonhomo} affine={affine} --------------\")\n",
+ " fset_map = {dbl: compute_factor_set(dbl, filter_nonhomo=filter_nonhomo, affine=affine) for dbl in dbls}\n",
+ " fset_tree = build_distinguishing_tree(fset_map)\n",
+ " print(RenderTree(fset_tree).by_attr(lambda n: n.name if n.name is not None else n.cfgs))"
]
},
{
"cell_type": "code",
"execution_count": null,
- "id": "b0181494-ca94-46cc-8572-c142eaf0abdb",
+ "id": "42b5f4cc-c327-4f6c-9d41-357593ef1799",
"metadata": {},
"outputs": [],
- "source": []
+ "source": [
+ "def simulated_oracle(scalar, affine_point, real_coord_name=\"projective\", real_add_name=\"add-2007-bl\", real_dbl_name=\"dbl-2007-bl\"):\n",
+ " real_coords = model.coordinates[real_coord_name]\n",
+ " real_add = real_coords.formulas[real_add_name]\n",
+ " real_dbl = real_coords.formulas[real_dbl_name]\n",
+ " real_mult = LTRMultiplier(real_add, real_dbl, None, False, AccumulationOrder.PeqRP, True, True)\n",
+ " point = affine_point.to_model(params.curve.coordinate_model, params.curve)\n",
+ " with local(DefaultContext()) as ctx:\n",
+ " real_mult.init(params, point)\n",
+ " real_mult.multiply(scalar)\n",
+ "\n",
+ " result = {\"result\": False}\n",
+ "\n",
+ " def callback(action):\n",
+ " if isinstance(action, FormulaAction):\n",
+ " for intermediate in action.op_results:\n",
+ " if int(value) == 0:\n",
+ " result[\"result\"] = True\n",
+ " trace.append(intermediate.value)\n",
+ " ctx.actions.walk(callback)\n",
+ " return result[\"result\"]"
+ ]
}
],
"metadata": {