# `Tezex.Crypto.BLS.FqP`
[🔗](https://github.com/objkt-com/tezex/blob/v4.0.0/lib/crypto/bls/fqp.ex#L1)

Polynomial extension field base class for BLS12-381.
This is the base for building higher-degree extension fields like Fq12.

# `t`

```elixir
@type t() :: %{coeffs: [Tezex.Crypto.BLS.Fq.t()], modulus_coeffs: [integer()]}
```

# `add`

```elixir
@spec add(t(), t()) :: t()
```

Adds two polynomial field elements.

# `eq?`

```elixir
@spec eq?(t(), t()) :: boolean()
```

Checks if two elements are equal.

# `inv`

```elixir
@spec inv(t()) :: t()
```

Computes the modular inverse using the extended Euclidean algorithm.
Polynomial inversion using extended Euclidean algorithm.

# `is_zero?`

```elixir
@spec is_zero?(t()) :: boolean()
```

Checks if the element is zero.

# `mul`

```elixir
@spec mul(t(), t()) :: t()
```

Multiplies two polynomial field elements with modular reduction.
This implementation uses an optimized multiplication algorithm.

# `neg`

```elixir
@spec neg(t()) :: t()
```

Negates a polynomial field element.

# `new`

```elixir
@spec new([Tezex.Crypto.BLS.Fq.t()], [integer()]) :: t()
```

Creates a polynomial extension field element from coefficients.

# `one`

```elixir
@spec one([integer()]) :: t()
```

Returns the one element.

# `sub`

```elixir
@spec sub(t(), t()) :: t()
```

Subtracts two polynomial field elements.

# `zero`

```elixir
@spec zero([integer()]) :: t()
```

Returns the zero element.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
