galois.Poly.__call__(at: ElementLike | ArrayLike, field: type[Array] | None = None, elementwise: bool = True) Array
galois.Poly.__call__(at: Poly) Poly

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

Parameters
at: ElementLike | ArrayLike
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: type[Array] | None = 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))