galois.Poly.__call__(at: , field: = None, elementwise: bool = True)
galois.Poly.__call__(at: Poly) Poly

Evaluates the polynomial $$f(x)$$ at $$x_0$$ or the polynomial composition $$f(g(x))$$.

Parameters:
at:
at: Poly

A finite field scalar or array $$x_0$$ to evaluate the polynomial at or the polynomial $$g(x)$$ to evaluate the polynomial composition $$f(g(x))$$.

field: = None

The Galois field to evaluate the polynomial over. The default is None which represents the polynomial’s current field, i.e. field.

elementwise: bool = True

Indicates whether to evaluate $$x_0$$ element-wise. The default is True. If False (only valid for square matrices), the polynomial indeterminate $$x$$ is exponentiated using matrix powers (repeated matrix multiplication).

Returns:

The result of the polynomial evaluation $$f(x_0)$$. The resulting array has the same shape as $$x_0$$. Or the polynomial composition $$f(g(x))$$.

Examples

Create a polynomial over $$\mathrm{GF}(3^5)$$.

In [1]: GF = galois.GF(3**5)

In [2]: f = galois.Poly([37, 123, 0, 201], field=GF); f
Out[2]: Poly(37x^3 + 123x^2 + 201, GF(3^5))


Evaluate the polynomial element-wise at $$x_0$$.

In [3]: x0 = GF([185, 218, 84, 163])

In [4]: f(x0)
Out[4]: GF([ 33, 163, 146,  96], order=3^5)

# The equivalent calculation
In [5]: GF(37)*x0**3 + GF(123)*x0**2 + GF(201)
Out[5]: GF([ 33, 163, 146,  96], order=3^5)


Evaluate the polynomial at the square matrix $$X_0$$.

In [6]: X0 = GF([[185, 218], [84, 163]])

# This is performed element-wise. Notice the values are equal to the vector x0.
In [7]: f(X0)
Out[7]:
GF([[ 33, 163],
[146,  96]], order=3^5)

In [8]: f(X0, elementwise=False)
Out[8]:
GF([[103, 192],
[156,  10]], order=3^5)

# The equivalent calculation
In [9]: GF(37)*np.linalg.matrix_power(X0, 3) + GF(123)*np.linalg.matrix_power(X0, 2) + GF(201)*GF.Identity(2)
Out[9]:
GF([[103, 192],
[156,  10]], order=3^5)


Evaluate the polynomial $$f(x)$$ at the polynomial $$g(x)$$.

In [10]: g = galois.Poly([55, 0, 1], field=GF); g
Out[10]: Poly(55x^2 + 1, GF(3^5))

In [11]: f(g)
Out[11]: Poly(77x^6 + 5x^4 + 104x^2 + 1, GF(3^5))

# The equivalent calculation
In [12]: GF(37)*g**3 + GF(123)*g**2 + GF(201)
Out[12]: Poly(77x^6 + 5x^4 + 104x^2 + 1, GF(3^5))