aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ08nY2019-05-14 15:27:17 +0200
committerJ08nY2019-05-14 15:27:17 +0200
commit512b5d2b5ae3350d1fc52fdd90d193bace00eed7 (patch)
treef300557019d42df70cb72c3e461a8ca4921b3a4d
parent5bfe07c21d0825d31fc0322a4a27f430b9407df9 (diff)
downloadpyecsca-512b5d2b5ae3350d1fc52fdd90d193bace00eed7.tar.gz
pyecsca-512b5d2b5ae3350d1fc52fdd90d193bace00eed7.tar.zst
pyecsca-512b5d2b5ae3350d1fc52fdd90d193bace00eed7.zip
-rw-r--r--pyecsca/ec/context.py43
1 files changed, 27 insertions, 16 deletions
diff --git a/pyecsca/ec/context.py b/pyecsca/ec/context.py
index 2abc7ff..02f724c 100644
--- a/pyecsca/ec/context.py
+++ b/pyecsca/ec/context.py
@@ -44,20 +44,18 @@ class OpResult(object):
@public
class Action(object):
- """An execution of a formula, on some input points and parameters, with some outputs."""
- formula: Formula
- input_points: List[Point]
+ """An execution of some operations with inputs and outputs."""
inputs: MutableMapping[str, Mod]
+ input_points: List[Point]
intermediates: MutableMapping[str, Union[Mod, OpResult]]
- roots: MutableMapping[str, OpResult]
+ outputs: MutableMapping[str, OpResult]
output_points: List[Point]
- def __init__(self, formula: Formula, *points: Point, **inputs: Mod):
- self.formula = formula
- self.input_points = list(points)
+ def __init__(self, *points: Point, **inputs: Mod):
self.inputs = inputs
self.intermediates = {}
- self.roots = {}
+ self.outputs = {}
+ self.input_points = list(points)
self.output_points = []
def add_operation(self, op: CodeOp, value: Mod):
@@ -71,16 +69,29 @@ class Action(object):
def add_result(self, point: Point, **outputs: Mod):
for k in outputs:
- self.roots[k] = self.intermediates[k]
+ self.outputs[k] = self.intermediates[k]
self.output_points.append(point)
def __repr__(self):
- return f"Action({self.formula}, {self.input_points}) = {self.output_points}"
+ return f"{self.__class__.__name__}({self.input_points}) = {self.output_points}"
+
+
+@public
+class FormulaAction(Action):
+ """An execution of a formula, on some input points and parameters, with some outputs."""
+ formula: Formula
+
+ def __init__(self, formula: Formula, *points: Point, **inputs: Mod):
+ super().__init__(*points, **inputs)
+ self.formula = formula
+
+ def __repr__(self):
+ return f"{self.__class__.__name__}({self.formula}, {self.input_points}) = {self.output_points}"
@public
class Context(object):
- def _log_action(self, formula: Formula, *points: Point, **inputs: Mod):
+ def _log_formula(self, formula: Formula, *points: Point, **inputs: Mod):
raise NotImplementedError
def _log_operation(self, op: CodeOp, value: Mod):
@@ -99,7 +110,7 @@ class Context(object):
for coord, value in point.coords.items():
coords[coord + str(i + 1)] = value
locals = {**coords, **params}
- self._log_action(formula, *points, **locals)
+ self._log_formula(formula, *points, **locals)
for op in formula.code:
op_result = op(**locals)
self._log_operation(op, op_result)
@@ -138,7 +149,7 @@ class Context(object):
class NullContext(Context):
"""A context that does not trace any operations."""
- def _log_action(self, formula: Formula, *points: Point, **inputs: Mod):
+ def _log_formula(self, formula: Formula, *points: Point, **inputs: Mod):
pass
def _log_operation(self, op: CodeOp, value: Mod):
@@ -151,13 +162,13 @@ class NullContext(Context):
@public
class DefaultContext(Context):
"""A context that traces executions of formulas."""
- actions: List[Action]
+ actions: List[FormulaAction]
def __init__(self):
self.actions = []
- def _log_action(self, formula: Formula, *points: Point, **inputs: Mod):
- self.actions.append(Action(formula, *points, **inputs))
+ def _log_formula(self, formula: Formula, *points: Point, **inputs: Mod):
+ self.actions.append(FormulaAction(formula, *points, **inputs))
def _log_operation(self, op: CodeOp, value: Mod):
self.actions[-1].add_operation(op, value)