Skip to content

Commit

Permalink
Make imports absolute (to allow doctests).
Browse files Browse the repository at this point in the history
  • Loading branch information
J08nY committed Jun 1, 2024
1 parent e2bb0ab commit 5ddfea8
Show file tree
Hide file tree
Showing 71 changed files with 746 additions and 482 deletions.
8 changes: 4 additions & 4 deletions pyecsca/ec/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@

from public import public

from .coordinates import CoordinateModel
from .formula import Formula
from .model import CurveModel
from .mult import ScalarMultiplier
from pyecsca.ec.coordinates import CoordinateModel
from pyecsca.ec.formula import Formula
from pyecsca.ec.model import CurveModel
from pyecsca.ec.mult import ScalarMultiplier


@public
Expand Down
5 changes: 3 additions & 2 deletions pyecsca/ec/coordinates.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

from public import public

from .formula.base import Formula
from .formula.efd import (
from pyecsca.ec.formula.base import Formula
from pyecsca.ec.formula.efd import (
EFDFormula,
AdditionEFDFormula,
DoublingEFDFormula,
Expand Down Expand Up @@ -61,6 +61,7 @@ def __repr__(self):
@public
class AffineCoordinateModel(CoordinateModel):
"""An affine coordinate model (there is really only one per curve model)."""

name = "affine"
full_name = "Affine coordinates"

Expand Down
17 changes: 9 additions & 8 deletions pyecsca/ec/curve.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@

from public import public
from sympy import FF
from ..misc.cache import sympify

from .coordinates import CoordinateModel, AffineCoordinateModel
from .error import raise_unsatisified_assumption
from .mod import Mod
from .model import CurveModel
from .point import Point, InfinityPoint
from ..misc.cfg import getconfig

from pyecsca.misc.cache import sympify
from pyecsca.misc.cfg import getconfig

from pyecsca.ec.coordinates import CoordinateModel, AffineCoordinateModel
from pyecsca.ec.error import raise_unsatisified_assumption
from pyecsca.ec.mod import Mod
from pyecsca.ec.model import CurveModel
from pyecsca.ec.point import Point, InfinityPoint


@public
Expand Down
6 changes: 3 additions & 3 deletions pyecsca/ec/divpoly.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
from sympy import symbols, FF, Poly
import networkx as nx

from .curve import EllipticCurve
from .mod import Mod
from .model import ShortWeierstrassModel
from pyecsca.ec.curve import EllipticCurve
from pyecsca.ec.mod import Mod
from pyecsca.ec.model import ShortWeierstrassModel

has_pari = False
try:
Expand Down
2 changes: 1 addition & 1 deletion pyecsca/ec/error.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Contains exceptions and warnings used in the library."""
import warnings
from public import public
from ..misc.cfg import getconfig
from pyecsca.misc.cfg import getconfig


@public
Expand Down
16 changes: 8 additions & 8 deletions pyecsca/ec/formula/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@
from public import public
from sympy import FF, symbols, Poly, Rational

from ..context import ResultAction
from .. import context
from ..error import UnsatisfiedAssumptionError, raise_unsatisified_assumption
from ..mod import Mod, SymbolicMod
from ..op import CodeOp, OpType
from ...misc.cfg import getconfig
from ...misc.cache import sympify, simplify
from pyecsca.ec.context import ResultAction
from pyecsca.ec import context
from pyecsca.ec.error import UnsatisfiedAssumptionError, raise_unsatisified_assumption
from pyecsca.ec.mod import Mod, SymbolicMod
from pyecsca.ec.op import CodeOp, OpType
from pyecsca.misc.cfg import getconfig
from pyecsca.misc.cache import sympify, simplify


@public
Expand Down Expand Up @@ -237,7 +237,7 @@ def __call__(self, field: int, *points: Any, **params: Mod) -> Tuple[Any, ...]:
:param params: Parameters of the curve.
:return: The resulting point(s).
"""
from ..point import Point
from pyecsca.ec.point import Point

self.__validate_params(field, params)
self.__validate_points(field, points, params)
Expand Down
6 changes: 3 additions & 3 deletions pyecsca/ec/formula/code.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from astunparse import unparse
from public import public

from .base import (
from pyecsca.ec.formula.base import (
Formula,
AdditionFormula,
DoublingFormula,
Expand All @@ -14,8 +14,8 @@
ScalingFormula,
DifferentialAdditionFormula,
)
from ..op import CodeOp
from ...misc.utils import peval
from pyecsca.ec.op import CodeOp
from pyecsca.misc.utils import peval


@public
Expand Down
15 changes: 11 additions & 4 deletions pyecsca/ec/formula/efd.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
from importlib_resources.abc import Traversable
from typing import Any

from .code import CodeFormula
from .base import (
from pyecsca.ec.formula.code import CodeFormula
from pyecsca.ec.formula.base import (
Formula,
CodeOp,
AdditionFormula,
Expand All @@ -19,7 +19,7 @@
LadderFormula,
)

from ...misc.utils import pexec, peval
from pyecsca.misc.utils import pexec, peval


@public
Expand Down Expand Up @@ -74,7 +74,14 @@ def __read_op3_file(self, path: Traversable):
def to_code(self) -> CodeFormula:
for klass in CodeFormula.__subclasses__():
if self.shortname == klass.shortname:
return klass(self.name, copy(self.code), self.coordinate_model, copy(self.parameters), copy(self.assumptions), self.unified)
return klass(
self.name,
copy(self.code),
self.coordinate_model,
copy(self.parameters),
copy(self.assumptions),
self.unified,
)
raise TypeError(f"CodeFormula not found for {self.__class__}.")

def __getnewargs__(self):
Expand Down
20 changes: 12 additions & 8 deletions pyecsca/ec/formula/expand.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,17 @@
from typing import Set, Callable, Any
from public import public

from .base import Formula
from .efd import EFDFormula
from .fliparoo import recursive_fliparoo
from .metrics import ivs_norm
from .partitions import reduce_all_adds, expand_all_muls, expand_all_nopower2_muls
from .switch_sign import generate_switched_formulas
from pyecsca.ec.formula.base import Formula
from pyecsca.ec.formula.efd import EFDFormula
from pyecsca.ec.formula.fliparoo import recursive_fliparoo
from pyecsca.ec.formula.metrics import ivs_norm
from pyecsca.ec.formula.partitions import reduce_all_adds, expand_all_muls, expand_all_nopower2_muls
from pyecsca.ec.formula.switch_sign import generate_switched_formulas


def reduce_with_similarity(formulas: Set[Formula], norm: Callable[[Formula], Any]) -> Set[Formula]:
def reduce_with_similarity(
formulas: Set[Formula], norm: Callable[[Formula], Any]
) -> Set[Formula]:
reduced = set(filter(lambda x: isinstance(x, EFDFormula), formulas))
similarities = list(map(norm, reduced))
for formula in formulas:
Expand Down Expand Up @@ -42,7 +44,9 @@ def expand_formula_set(
extended.update(fliparood)
extended = reduce_with_similarity(extended, norm)

switch_signs: Set[Formula] = set().union(*(set(generate_switched_formulas(f)) for f in extended))
switch_signs: Set[Formula] = set().union(
*(set(generate_switched_formulas(f)) for f in extended)
)
extended.update(switch_signs)
extended = reduce_with_similarity(extended, norm)

Expand Down
7 changes: 4 additions & 3 deletions pyecsca/ec/formula/fake.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from public import public

from .base import (
from pyecsca.ec.formula.base import (
AdditionFormula,
FormulaAction,
Formula,
Expand All @@ -15,8 +15,8 @@
ScalingFormula,
DifferentialAdditionFormula,
)
from ..mod import Mod, Undefined
from ..point import Point
from pyecsca.ec.mod import Mod, Undefined
from pyecsca.ec.point import Point


@public
Expand All @@ -27,6 +27,7 @@ class FakeFormula(Formula, ABC):
Useful for computing with the scalar multipliers without having concrete formulas
and points (for example to get the addition chain via the MultipleContext).
"""

def __init__(self, coordinate_model):
# TODO: This is missing all of the other attributes
self.coordinate_model = coordinate_model
Expand Down
7 changes: 4 additions & 3 deletions pyecsca/ec/formula/fliparoo.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
from ast import parse
from typing import Iterator, List, Type, Optional, Set
from public import public
from ..op import OpType
from .base import Formula
from .graph import FormulaGraph, Node, CodeOpNode, CodeOp, CodeFormula

from pyecsca.ec.op import OpType
from pyecsca.ec.formula.base import Formula
from pyecsca.ec.formula.graph import FormulaGraph, Node, CodeOpNode, CodeOp, CodeFormula


@public
Expand Down
7 changes: 4 additions & 3 deletions pyecsca/ec/formula/graph.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
"""Provides tools for working with formulas as graphs."""
from .base import Formula
from .code import CodeFormula
from ..op import CodeOp, OpType
import matplotlib.pyplot as plt
import networkx as nx
from ast import parse, Expression
Expand All @@ -10,6 +7,10 @@
from public import public
from abc import ABC, abstractmethod

from pyecsca.ec.formula.base import Formula
from pyecsca.ec.formula.code import CodeFormula
from pyecsca.ec.op import CodeOp, OpType


@public
class Node(ABC):
Expand Down
12 changes: 7 additions & 5 deletions pyecsca/ec/formula/metrics.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
"""Provides metrics for comparing formulas."""
from public import public
from .unroll import unroll_formula
from .base import Formula
import warnings

from public import public
from typing import Dict
from operator import itemgetter, attrgetter
from ..curve import EllipticCurve
from ..context import DefaultContext, local

from pyecsca.ec.formula.unroll import unroll_formula
from pyecsca.ec.formula.base import Formula
from pyecsca.ec.curve import EllipticCurve
from pyecsca.ec.context import DefaultContext, local


@public
Expand Down
15 changes: 11 additions & 4 deletions pyecsca/ec/formula/partitions.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
from typing import List, Any, Generator
from ast import parse
from public import public
from .base import Formula
from ..op import OpType, CodeOp
from .graph import FormulaGraph, CodeOpNode, ConstantNode, Node, CodeFormula
from .fliparoo import find_fliparoos, AddFliparoo, MulFliparoo
from copy import deepcopy

from pyecsca.ec.formula.base import Formula
from pyecsca.ec.op import OpType, CodeOp
from pyecsca.ec.formula.graph import (
FormulaGraph,
CodeOpNode,
ConstantNode,
Node,
CodeFormula,
)
from pyecsca.ec.formula.fliparoo import find_fliparoos, AddFliparoo, MulFliparoo


@public
def reduce_all_adds(formula: Formula, rename=True) -> CodeFormula:
Expand Down
17 changes: 8 additions & 9 deletions pyecsca/ec/formula/switch_sign.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
from typing import Dict, Iterator, List, Any
from ast import parse
from public import public
from ..op import OpType, CodeOp
from .base import Formula
from .graph import FormulaGraph, ConstantNode, CodeOpNode, CodeFormula
from itertools import chain, combinations
from ..point import Point
from ..mod import Mod

from pyecsca.ec.op import OpType, CodeOp
from pyecsca.ec.formula.base import Formula
from pyecsca.ec.formula.graph import FormulaGraph, ConstantNode, CodeOpNode, CodeFormula
from pyecsca.ec.point import Point
from pyecsca.ec.mod import Mod


@public
def generate_switched_formulas(
formula: Formula, rename=True
) -> Iterator[CodeFormula]:
def generate_switched_formulas(formula: Formula, rename=True) -> Iterator[CodeFormula]:
graph = FormulaGraph(formula, rename)
for i, node_combination in enumerate(subnode_lists(graph)):
try:
Expand Down Expand Up @@ -57,7 +56,7 @@ def sign_test(output_signs: Dict[str, int], coordinate_model: Any):
for out, sign in output_signs.items():
if not out.endswith(ind):
continue
out_var = out[:out.index(ind)]
out_var = out[: out.index(ind)]
if not out_var.isalpha():
continue
point_dict[out_var] = Mod(sign, p)
Expand Down
4 changes: 2 additions & 2 deletions pyecsca/ec/formula/unroll.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
from astunparse import unparse
from public import public
from sympy import Expr, symbols, Poly
from ...misc.cache import sympify

from .base import Formula
from pyecsca.misc.cache import sympify
from pyecsca.ec.formula.base import Formula


@public
Expand Down
10 changes: 5 additions & 5 deletions pyecsca/ec/key_agreement.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

from public import public

from .context import ResultAction
from .mod import Mod
from .mult import ScalarMultiplier
from .params import DomainParameters
from .point import Point
from pyecsca.ec.context import ResultAction
from pyecsca.ec.mod import Mod
from pyecsca.ec.mult import ScalarMultiplier
from pyecsca.ec.params import DomainParameters
from pyecsca.ec.point import Point


@public
Expand Down
10 changes: 5 additions & 5 deletions pyecsca/ec/key_generation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@

from public import public

from .context import ResultAction
from .mod import Mod
from .mult import ScalarMultiplier
from .params import DomainParameters
from .point import Point
from pyecsca.ec.context import ResultAction
from pyecsca.ec.mod import Mod
from pyecsca.ec.mult import ScalarMultiplier
from pyecsca.ec.params import DomainParameters
from pyecsca.ec.point import Point


@public
Expand Down
Loading

0 comments on commit 5ddfea8

Please sign in to comment.