# Operators

Operators on spaces of algebraic modular forms are returned as matrices with respect to a basis of $M$. Operators are matrices over the coefficient ring of the weight representation $W$. When the weight is given as a seqeuence of integers, $W$ is generated to be the associated highest weight representation over the field of definition. Therefore, for such spaces of orthogonal modular forms, operators are matrices over $F$, the base field for the quadratic space. For spaces of unitary modular forms, operators are matrices over $K$, where $K/F$ is the associated CM extension for the Hermitian space. The basis of $M$ is permanently fixed.

The Hecke algebras for the orthogonal and unitary groups is generated by the operators $T_{P,k}$ where $P$ is a prime ideal, and $k$ is an integer between $1$ and $n/2$. For the special orthogonal group on a quadratic space of even dimension, the operator $T_{P,n/2}$ splits as a sum of two Hecke operators, corresponding to the orbits of Lagrangians under the action of ${\operatorname{SO}}(V)$, $T_{P,{n/2}} = T_{P,{n/2}}^+ + T_{P,{n/2}}^-$, where the plus an minus sign depend on a choice of orientation. Fixing an orientation, we compute also the operator $T_{P,{n/2}}^+$. The general orthogonal group ${\operatorname{GO}}(V)$ admits an additional operator in the Hecke algebra, also known as the Perestroika operator, $K_P$. When the spaces of moular forms for ${\rm O}(V)$ and ${\operatorname{GO}}(V)$ coincide, we allow computation of this operator as well.

## `HeckeOperator(M, P, k): ModFrmHil, RngOrdIdl, RngIntElt -> AlgMatElt`

## `HeckeOperator(M, P, k): ModFrmHil, RngInt, RngIntElt -> AlgMatElt`

## `HeckeOperator(M, P, k): ModFrmHil, RngIntElt, RngIntElt -> AlgMatElt`

## `HeckeOperator(M, P): ModFrmHil, RngOrdIdl -> AlgMatElt`

## `HeckeOperator(M, P): ModFrmHil, RngInt -> AlgMatElt`

## `HeckeOperator(M, P): ModFrmHil, RngIntElt -> AlgMatElt`

```magma
Force       : BoolElt                      Default: false
UseLLL      : BoolElt                      Default: true
UseAuto     : BoolElt                      Default: true
ComputeGenus: BoolElt                      Default: false
LowMemory   : BoolElt                      Default: false
ThetaPrec   : RngIntElt                    Default: 25
```

This returns a matrix representing the Hecke operator $T_{P,k}$ on the space $M$ of algebraic modular forms. $P$ must be a prime ideal or a rational prime number. If $P$ is a rational prime, chooses a prime ideal above $P$. Once an operator has been computed, it is cached. Set `Force` to `true` in order to force recomputing it. `UseLLL` allows use of LLL in reducing the lattices upon creation. If `UseAuto` is set to `true`, uses the fact that the automorphism group of the lattice acts naturally on its $P^k$-neighbors, computes the orbits under this action, and does not enumerate over all $P^k$-neighbors, only on orbit representatives. By default will store all orbits in memory. However, if `LowMemory` is set to `true`, computes the orbit every time we hit a representative, and only store its orbit. If `ComputeGenus` is set to `true`, computes the genus at the same time as computing the Hecke operator. This could save time in large rank. By default, the isometry testing begins by checking the theta series of the lattices (this is a good hash). `ThetaPrec` determines the precision to which we compute the theta series. If `ThetaPrec` is set to 0, performs auto-calibration, and determines the precision that will yield best performance. If `ThetaPrec` is set to -1, does not use theta series, but instead a greedy reduction algorithm, implemented by Kohel, for the lattices. If `ThetaPrec` is set to -2, does not use theta series, but instead a greedy reduction algorithm, described in [[Nguyen and Stehlé, 2009](../../references.md#cite-nguyenstehle09low)] for the lattices.

## `Example: hecke (ex-83e3f1)`

```magma
> F<sqrt7> := QuadraticField(-7);
> OF := Integers(F);
> M1 := UnitaryModularForms(2*IdentityMatrix(F,3), [2,0]);
> Dimension(M1);
1
> P2 := Factorization(2*OF)[1][1];
> Norm(P2);
2
> HeckeOperator(M1, P2);
[1/8*(-sqrt7 + 13)]

```

Since the space has dimension $1$, it consists of a single eigenform, whose eigenvalues can be read from the Hecke matrices. We now consider the space of weight $[4,0]$, which has dimension $3$. The Hecke matrices are given with respect to the basis used to compute the space, over the field $F$.

```magma
> M2 := UnitaryModularForms(2*IdentityMatrix(F,3), [4,0]);
> Dimension(M2);
3
> T2 := HeckeOperator(M2, P2);
> T2;
[                   0  1/16*(-5*sqrt7 + 9)  1/96*(7*sqrt7 + 13)]
[            21/4     1/16*(sqrt7 - 5)   1/16*(3*sqrt7 + 1)]
[ 1/8*(21*sqrt7 - 21)    1/8*(9*sqrt7 + 3) 1/32*(15*sqrt7 + 69)]

```

## `HeckeOperator(M, P, k): ModFrmHil, RngOrdIdl, RngIntElt -> AlgMatElt`

## `HeckeOperator(M, P, k): ModFrmHil, RngInt, RngIntElt -> AlgMatElt`

## `HeckeOperator(M, P, k): ModFrmHil, RngIntElt, RngIntElt -> AlgMatElt`

## `HeckeOperator(M, P): ModFrmHil, RngOrdIdl -> AlgMatElt`

## `HeckeOperator(M, P): ModFrmHil, RngInt -> AlgMatElt`

## `HeckeOperator(M, P): ModFrmHil, RngIntElt -> AlgMatElt`

```magma
Force       : BoolElt                      Default: false
UseLLL      : BoolElt                      Default: true
UseAuto     : BoolElt                      Default: true
ComputeGenus: BoolElt                      Default: false
LowMemory   : BoolElt                      Default: false
ThetaPrec   : RngIntElt                    Default: 25
```

Restriction of the Hecke operator $T_{P,k}$ to the cuspidal subspace. Parameters are as in `HeckeOperator`.

## `PerestroikaOperator(M, P): ModFrmHil, RngOrdIdl -> AlgMatElt`

## `PerestroikaOperator(M, P): ModFrmHil, RngInt -> AlgMatElt`

## `PerestroikaOperator(M, P): ModFrmHil, RngIntElt -> AlgMatElt`

```magma
Force       : BoolElt                      Default: false
UseLLL      : BoolElt                      Default: true
UseAuto     : BoolElt                      Default: true
ComputeGenus: BoolElt                      Default: false
LowMemory   : BoolElt                      Default: false
ThetaPrec   : RngIntElt                    Default: 25
```

This returns a matrix representing the Perestroika operator $K_P$ on the space $M$ of orthogonal modular forms. Parameters are as in `HeckeOperator`.

## `PlusOperator(M, P): ModFrmHil, RngOrdIdl -> AlgMatElt`

## `PlusOperator(M, P): ModFrmHil, RngInt -> AlgMatElt`

## `PlusOperator(M, P): ModFrmHil, RngIntElt -> AlgMatElt`

```magma
Force       : BoolElt                      Default: false
UseLLL      : BoolElt                      Default: true
UseAuto     : BoolElt                      Default: true
ComputeGenus: BoolElt                      Default: false
LowMemory   : BoolElt                      Default: false
ThetaPrec   : RngIntElt                    Default: 25
```

This returns a matrix representing the operator $T_{P,{n/2}}^+$ on the space $M$ of special orthogonal modular forms. Parameters are as in `HeckeOperator`.

## `HeckeOperators(M, k): ModFrmAlg, RngIntElt -> [ AlgMatElt ], [ RngOrdIdl ]`

## `HeckeOperators(M, k): ModFrmAlg, RngIntElt -> [ AlgMatElt ], [ RngOrdIdl ]`

## `HeckeOperators(M): ModFrmAlg, RngIntElt -> [ AlgMatElt ], [ RngOrdIdl ]`

## `HeckeOperators(M): ModFrmAlg, RngIntElt -> [ AlgMatElt ], [ RngOrdIdl ]`

An ordered sequence of Hecke operators $T_{P,k}$ or $T_{P,1}$ computed so far along with an ordered sequence of the associated ideals $P$.

## `SetHeckeOperator(M, T, P, k): ModFrmAlg, AlgMatElt, RngOrdIdl, RngIntElt`

## `SetHeckeOperator(M, T, P, k): ModFrmAlg, AlgMatElt, RngInt, RngIntElt`

## `SetHeckeOperator(M, T, P, k): ModFrmAlg, AlgMatElt, RngIntElt, RngIntElt`

## `SetHeckeOperator(M, T, P): ModFrmAlg, AlgMatElt, RngOrdIdl`

## `SetHeckeOperator(M, T, P): ModFrmAlg, AlgMatElt, RngInt`

## `SetHeckeOperator(M, T, P): ModFrmAlg, AlgMatElt, RngIntElt`

Sets the Hecke operator $T_{P,k}$ to be given by the matrix $T$.

## `HeckeImages(M, i, n, k): ModFrmAlg, RngIntElt, RngIntElt, RngIntElt -> Assoc`

## `HeckeImages(M, i, ps, k): ModFrmAlg, RngIntElt, SeqEnum, RngIntElt -> Assoc`

```magma
UseAuto  : BoolElt                      Default: true
UseLLL   : BoolElt                      Default: false
LowMemory: BoolElt                      Default: false
ThetaPrec: RngIntElt                    Default: 25
```

An associative array whose keys are the good prime ideals $P$, such that ${\operatorname{N}}(P) \le n$ or given by `ps`, with values the images of the $i$-th standard basis vector under the Hecke operators $T_{P,k}$. These are computed using sparse methods that do not require computing the full Hecke operator. Parameters are as in `HeckeOperator`.
