Refactor interpolate
This commit is contained in:
parent
eecda172b8
commit
02ed35596b
|
@ -11,11 +11,25 @@ class Polynomial[T]:
|
||||||
self.coefficients = coefficients
|
self.coefficients = coefficients
|
||||||
self.modulus = modulus
|
self.modulus = modulus
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def interpolate(evaluations: List[int], roots_of_unity: List[int]) -> List[int]:
|
||||||
|
"""
|
||||||
|
Lagrange interpolation
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
evaluations: List of evaluations
|
||||||
|
roots_of_unity: Powers of 2 sequence
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: Coefficients of the interpolated polynomial
|
||||||
|
"""
|
||||||
|
return list(map(int, interpolate_polynomialcoeff(roots_of_unity[:len(evaluations)], evaluations)))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_evaluations(cls, evaluations: Sequence[T], modulus, roots_of_unity: Sequence[int]=ROOTS_OF_UNITY) -> Self:
|
def from_evaluations(cls, evaluations: Sequence[T], modulus, roots_of_unity: Sequence[int]=ROOTS_OF_UNITY) -> Self:
|
||||||
coefficients = [
|
coefficients = [
|
||||||
x % modulus
|
x % modulus
|
||||||
for x in map(int, interpolate_polynomialcoeff(ROOTS_OF_UNITY[:len(evaluations)], evaluations))
|
for x in map(int, Polynomial.interpolate(evaluations, roots_of_unity))
|
||||||
]
|
]
|
||||||
return cls(coefficients, modulus)
|
return cls(coefficients, modulus)
|
||||||
|
|
||||||
|
|
|
@ -25,20 +25,6 @@ def encode(polynomial: Polynomial, factor: int, roots_of_unity: Sequence[int]) -
|
||||||
return [polynomial.eval(e) for e in roots_of_unity[:len(polynomial)*factor]]
|
return [polynomial.eval(e) for e in roots_of_unity[:len(polynomial)*factor]]
|
||||||
|
|
||||||
|
|
||||||
def __interpolate(evaluations: List[int], roots_of_unity: List[int]) -> List[int]:
|
|
||||||
"""
|
|
||||||
Lagrange interpolation
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
evaluations: List of evaluations
|
|
||||||
roots_of_unity: Powers of 2 sequence
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
list: Coefficients of the interpolated polynomial
|
|
||||||
"""
|
|
||||||
return list(map(int, interpolate_polynomialcoeff(roots_of_unity[:len(evaluations)], evaluations)))
|
|
||||||
|
|
||||||
|
|
||||||
def decode(encoded: ExtendedData, roots_of_unity: Sequence[BLSFieldElement], original_len: int) -> Polynomial:
|
def decode(encoded: ExtendedData, roots_of_unity: Sequence[BLSFieldElement], original_len: int) -> Polynomial:
|
||||||
"""
|
"""
|
||||||
Decode a polynomial from an extended data-set and the roots of unity, cap to original length
|
Decode a polynomial from an extended data-set and the roots of unity, cap to original length
|
||||||
|
@ -51,5 +37,5 @@ def decode(encoded: ExtendedData, roots_of_unity: Sequence[BLSFieldElement], ori
|
||||||
Returns:
|
Returns:
|
||||||
Polynomial: original polynomial
|
Polynomial: original polynomial
|
||||||
"""
|
"""
|
||||||
coefs = __interpolate(list(map(int, encoded)), list(map(int, roots_of_unity)))[:original_len]
|
coefs = Polynomial.interpolate(list(map(int, encoded)), list(map(int, roots_of_unity)))[:original_len]
|
||||||
return Polynomial([int(c) for c in coefs], BLS_MODULUS)
|
return Polynomial([int(c) for c in coefs], BLS_MODULUS)
|
||||||
|
|
Loading…
Reference in New Issue