aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJ08nY2024-01-17 14:21:15 +0100
committerJ08nY2024-01-17 14:21:15 +0100
commitc395392ea388ba9ea8596152b4bf72c8deba24f6 (patch)
tree4aeb568d549fb35f49c99e7729b82559700bcfa2
parent8a62a5a2d03610779323b74e2cf059d8fcea35be (diff)
downloadpyecsca-notebook-c395392ea388ba9ea8596152b4bf72c8deba24f6.tar.gz
pyecsca-notebook-c395392ea388ba9ea8596152b4bf72c8deba24f6.tar.zst
pyecsca-notebook-c395392ea388ba9ea8596152b4bf72c8deba24f6.zip
Fix remapping in ZVP.
-rw-r--r--re/zvp.ipynb75
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))))"
]
},
{