DESIGN NOTES: Our implementation depends heavily on the fact that we have good dimension formulas (see dims.py) for spaces of modular forms with character, and new subspaces, so that we don't have to compute q-expansions for the whole space in order to compute q-expansions / elements / and dimensions of certain subspaces. Also, the following design is much simpler than the one I used in MAGMA because subspaces don't have lots of complicated special labels. Here's the actual design.
The internal basis of q-expansions of modular forms for the ambient space is defined as follows:
First Block: Cuspidal Subspace Second Block: Eisenstein Subspace
Cuspidal Subspace: Block for each level M dividing N, from highest level to lowest, and block for level M contains the images at level N of the newsubspace of level M (basis, then basis(q**d), then basis(q**e), etc.)
Eisenstein Subspace: ???
Since we can compute dimensions of cuspidal subspaces quickly and easily, it should be easy to locate any of the above blocks. Hence, e.g., to compute basis for new cuspidal subspace, just have to return first n standard basis vector where n is the dimension. However, we can also create completely arbitrary subspaces as well.
The base field is the field generated by the character values.
The module modular.modform.modform defines the following classes:
ModularForms(weight, group, character)
INPUT: group - a congruence subgroup (sage.modular.congroup.CongruenceSubgroup) weight - an integer base_field - a field (default rings.RationalField)
The module modular.modform.modform defines the following methods:
character, k) |
Compute and return a list of all parameters
that
define the Eisenstein series with given character and weight
.
Only the parity of
is relevant.
If character is an integer
, then the parameters for
are computed instead. Then the condition is that
.