Polynomial module¶
Class for integer polynomial ring¶
pqlattice.polynomial.ModIntPolyRing ¶
Construct the polynomial ring over coefficients from integer quotient ring with given modulus.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
modulus
|
int
|
integer quotient ring modulus |
required |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the modulus is less than 2 |
add ¶
Adds two polynomials
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
coprime ¶
Checks if two polynomials are coprime, that is if their gcd == 1
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if coprime, False otherwise |
deg ¶
Returns degree of the given polynomial
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
int
|
degree |
eea ¶
Extended Euclidean algorithm for the polynomials.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
tuple[Vector, Vector, Vector]
|
|
euclidean_div ¶
Performs the euclidean division for the polynomials
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
tuple[Vector, Vector]
|
|
Raises:
| Type | Description |
|---|---|
ZeroDivisionError
|
If the |
gcd ¶
Computes the polynomial that is the greates common divisor of the given polynomials
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
is_zero ¶
Checks if the polynomial is the zero polynomial in the ring.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if it is zero polynomial, False otherwise |
mul ¶
multiplies two polynomials
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
reduce ¶
Reduces the polynomials coefficients according to the ring, that is modulo self.modulus
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial with coefficients from range |
rem ¶
Returns remainder of the euclidean division
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
sub ¶
Subtract one polynomial from the other
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
to_monic ¶
Transformt the given polynomial to its monic form, that is multiplies the polynomial by the modular inverse of the leading coefficient.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial with leading coefficient equal to one. |
Class for integer polynomial quotient ring¶
pqlattice.polynomial.ModIntPolyQuotientRing ¶
Creates the polynomial quotient ring of coefficient from the integer quotien ring
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
poly_modulus
|
Vector
|
modulus of the polynomial quotient ring |
required |
int_modulus
|
int
|
modulus of the integer quotient ring |
required |
quotient
property
¶
Get the polynomial modulus of this ring.
Returns:
| Type | Description |
|---|---|
Vector
|
|
add ¶
adds two polynomials
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
center_lift ¶
Hoffstein page. 414 - 415
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
inv ¶
Tries to find the multiplicative inverse of the given polynomial in the ring.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the inverse does not exists |
mul ¶
multiplies two polynomials
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
reduce ¶
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
sub ¶
subtract one polynomial from the other
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
polynomial_a
|
Vector
|
|
required |
polynomial_b
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
General free functions for polynomial operations¶
pqlattice.polynomial.poly ¶
add ¶
Adds two polynomials together.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
|
required |
q
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
deg ¶
Returns degree of the given polynomial. Assumes -1 for the zero polynomial.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
int
|
degree |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the vector is empty |
is_zero_poly ¶
Checks if the poly is zero poly - all coefficients are equal to zero.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
polynomial |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if all coefficients are equal to zero, False otherwise |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the given Vector is empty |
make_poly ¶
Helper function, creates polynomial from the array like.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
ArrayLike
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
Raises:
| Type | Description |
|---|---|
ValueError
|
if the data has wrong shape |
monomial ¶
For given degree d and coefficient c, constructs a monomial cX + ** (d - 1)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
coeff
|
int
|
|
required |
degree
|
int
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
Raises:
| Type | Description |
|---|---|
ValueError
|
if degree is negative |
mul ¶
Multiplies two polynomials.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
|
required |
q
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
pad ¶
Pad's polynomial's coefficient's array with zero entries for powers higher than polynomial's degree, so that length of resulting array is equal to max_deg + 1.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
|
required |
max_deg
|
int
|
Degree that |
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
Raises:
| Type | Description |
|---|---|
ValueError
|
If max deg is less than the degree of the given polynomial |
sub ¶
Subtract one polynomial from the other
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
|
required |
q
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
trim ¶
Trims zero coefficients of powers higher than polynomial's degree,
so that resulting coefficient's arrray has length of deg(p) + 1.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
p
|
Vector
|
|
required |
Returns:
| Type | Description |
|---|---|
Vector
|
polynomial |
zero_poly ¶
constructs zero polynomial, expanded to the given parameter max_deg
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_deg
|
int
|
by default 0 |
0
|
Returns:
| Type | Description |
|---|---|
Vector
|
Vector of length |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the |