diff options
| author | J08nY | 2024-01-17 14:21:15 +0100 |
|---|---|---|
| committer | J08nY | 2024-01-17 14:21:15 +0100 |
| commit | c395392ea388ba9ea8596152b4bf72c8deba24f6 (patch) | |
| tree | 4aeb568d549fb35f49c99e7729b82559700bcfa2 | |
| parent | 8a62a5a2d03610779323b74e2cf059d8fcea35be (diff) | |
| download | pyecsca-notebook-c395392ea388ba9ea8596152b4bf72c8deba24f6.tar.gz pyecsca-notebook-c395392ea388ba9ea8596152b4bf72c8deba24f6.tar.zst pyecsca-notebook-c395392ea388ba9ea8596152b4bf72c8deba24f6.zip | |
Fix remapping in ZVP.
| -rw-r--r-- | re/zvp.ipynb | 75 |
1 files changed, 64 insertions, 11 deletions
diff --git a/re/zvp.ipynb b/re/zvp.ipynb index fedb688..02dda22 100644 --- a/re/zvp.ipynb +++ b/re/zvp.ipynb @@ -205,7 +205,7 @@ "\n", "formula_classes = [AdditionFormula, DoublingFormula]\n", "point_chains = {}\n", - "with ProcessPoolExecutor(max_workers=10) as pool:\n", + "with ProcessPoolExecutor(max_workers=14) as pool:\n", " futures = []\n", " args = []\n", " for coord_name, coords in model.coordinates.items():\n", @@ -284,7 +284,9 @@ "cell_type": "code", "execution_count": null, "id": "ab09b767-71ca-4d28-abf0-532307efefbd", - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [], "source": [ "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))))" @@ -309,7 +311,7 @@ " mult = LTRMultiplier(*formulas, None, False, AccumulationOrder.PeqRP, True, True)\n", " new_points = set()\n", " param_map = {}\n", - " for point, params in points:\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", @@ -318,9 +320,12 @@ " continue\n", " elif param_map[params] is None:\n", " continue\n", - " mult.init(param_map[params], point.to_model(param_map[params], param_map[params].curve))\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", " def callback(action):\n", " if isinstance(action, FormulaAction):\n", @@ -333,15 +338,18 @@ " return new_points\n", "\n", "remapped_point_map = {}\n", - "with ProcessPoolExecutor(max_workers=10) as pool:\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), 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", @@ -371,10 +379,10 @@ " 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))" + " #crvs = set()\n", + " #for point, params in remapped_point_map[pair].difference(point_map[pair]):\n", + " # crvs.add(params)\n", + " #print(repr(crvs))" ] }, { @@ -404,7 +412,52 @@ }, "outputs": [], "source": [ - "print(RenderTree(remapped_tree).by_attr(lambda n: n.name if n.name is not None else n.cfgs))" + "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": null, + "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), 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": null, + "id": "085c37db-ffbf-4f9e-87d3-5c13ecfeadca", + "metadata": {}, + "outputs": [], + "source": [ + "fset_tree = build_distinguishing_tree(fset_map)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9f0dc435-e08a-45d0-846d-ee865d6a4b7c", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "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))))" ] }, { |
