Abstract cohomology class

Initialize self. See help(type(self)) for accurate signature.

class darmonpoints.cohomology_abstract.CohomologyElement(parent, data)[source]

Bases: ModuleElement

Define an element of H^1(G,V)

INPUT:
  • G: a BigArithGroup

  • V: a CoeffModule

  • data: a list

TESTS:

sage: from darmonpoints.sarithgroup import BigArithGroup
sage: from darmonpoints.cohomology_arithmetic import ArithCoh
sage: G = BigArithGroup(5,6,1,use_shapiro=False,outfile='/tmp/darmonpoints.tmp') #  optional - magma
sage: Coh = ArithCoh(G) #  optional - magma
sage: 2 in Coh.hecke_matrix(13).eigenvalues() #  optional - magma
True
sage: -4 in Coh.hecke_matrix(7).eigenvalues() #  optional - magma
True
sage: PhiE = Coh.gen(1) #  optional - magma
check_cocycle_property(g1=None, g2=None, function=None)[source]
evaluate(x, left_act_by=None, at_identity=False)[source]
is_zero()[source]
pair_with_cycle(xi)[source]
valuation(p=None)[source]
values()[source]
class darmonpoints.cohomology_abstract.CohomologyGroup(G, V, action_map=None, **kwargs)[source]

Bases: Module

Element

alias of CohomologyElement

GA_to_local(x, g0=None)[source]
coefficient_module()[source]
dimension()[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self):
....:         return self._x^2
sage: a = Foo(2)
sage: print(a.f.cache)
None
sage: a.f()
4
sage: a.f.cache
4
eval_at_genpow(i, a, v, red=None)[source]
fox_gradient(word, red=None)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
gen(i)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
generator_acting_matrix(g)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
gens()[source]
get_fox_term(i, a, red=None)[source]
get_gen_pow(i, a, red=None)[source]
group()[source]
hecke_matrix(l, use_magma=True, g0=None)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
space()[source]

Calculates the space of cocyles modulo coboundaries, as a Z-module.

TESTS:

sage: from darmonpoints.sarithgroup import * sage: from darmonpoints.cohomology_abstract import * sage: from darmonpoints.ocmodule import * sage: GS = BigArithGroup(5, 6,1,use_shapiro=False,outfile=’/tmp/darmonpoints.tmp’) # optional - magma sage: G = GS.large_group() # optional - magma sage: V = OCVn(5,1) # optional - magma sage: Coh = CohomologyGroup(G,V) # optional - magma

zero()[source]

Arithmetic cohomology

TESTS:

sage: from darmonpoints.findcurve import find_curve sage: from darmonpoints.cohomology_abstract import * sage: from darmonpoints.sarithgroup import * sage: from darmonpoints.util import * sage: from darmonpoints.cohomology_arithmetic import * sage: F.<r> = QuadraticField(5) sage: P = F.ideal(3/2*r + 1/2) sage: D = F.ideal(3) sage: abtuple = quaternion_algebra_invariants_from_ramification(F,D,F.real_places()[:1]) # optional - magma sage: G = BigArithGroup(P,abtuple, F.ideal(1), grouptype = ‘PSL2’,outfile = “/tmp/darmonpoints.tmp”) # optional - magma sage: H = ArithCoh(G) # optional - magma sage: primes = F.primes_of_degree_one_list(10) # optional - magma sage: H.hecke_matrix(primes[0]).charpoly() # optional - magma x^2 - 16 sage: ell = F.ideal(1/2*r + 5/2) # optional - magma sage: H.hecke_matrix(ell).charpoly() # optional - magma x^2 - 4

class darmonpoints.cohomology_arithmetic.ArithAction(G, M, act=None)[source]

Bases: Action

Encodes de action of an arithmetic group on the distributions module

class darmonpoints.cohomology_arithmetic.ArithCoh(G, V=None, **kwargs)[source]

Bases: CohomologyGroup, UniqueRepresentation

Class for computing with arithmetic cohomology groups.

Parent class for ArithCohElement.

Initialised by inputting an arithmetic group G, and the coefficient module.

Element

alias of ArithCohElement

S_arithgroup()[source]
Up_matrix()[source]
apply_hecke_operator(c, l, hecke_reps=None, group=None, scale=1, use_magma=True, g0=None)[source]

Apply the l-th Hecke operator operator to c.

use_shapiro()[source]
class darmonpoints.cohomology_arithmetic.ArithCohBianchi(G, base, use_ps_dists=False, adjuster=None)[source]

Bases: ArithCoh

apply_Up(c, group=None, scale=1, progress_bar=False)[source]
apply_Up1(c, group=None, scale=1, progress_bar=False)[source]
apply_Up2(c, group=None, scale=1, progress_bar=False)[source]
get_Lseries_term(phi, n, cov=None)[source]

Return the n-th coefficient of the p-adic L-series attached to an element phi of H^1(G,D): Bianchi case.

Input:
  • phi, an ArithCohElement object, representing a cohomology class

    in the underlying group self;

  • n, a tuple (r,s) of ints;

  • cov, a set of representing matrices for the U_pi and U_pibar operators.

Outputs:

a p-adic number, the coefficient of z^r * w^s in the p-adic L-series attached to phi. This will give the series attached to the identity component in weight space; in the notation of Masdeu-Palvannan-Williams, this is the power series L_p(mu,id,z,w), mu the p-adic L-function of phi.

get_Up_reps_local(prec, pi, pi_bar)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
improve(Phi, prec=None, sign=None, progress_bar=False)[source]

Repeatedly applies U_p. Used in lifting theorems: ‘improves’ the precision of an overconvergent lift.

(Applies the Bianchi version of Greenberg’s lifting idea)

class darmonpoints.cohomology_arithmetic.ArithCohElement(parent, data)[source]

Bases: CohomologyElement

Class for working with arithmetic cohomology elements. In particular, can handle elements of H^1(G,D), where G = congruence subgroup and D is a module of distributions.

The coefficient module (e.g. D) is self.parent().coefficient_module().

Initialised by giving the parent arithmetic cohomology group - an ArithCoh object - and %data%.

This should work equally well for classical and Bianchi modular forms. This choice is encoded (and hard-coded) in the ArithCoh parent class: in particular, it determines the choice of distribution modules used, e.g. either 1- or 2-variable distributions.

BI(h, j=None)[source]

BI = ‘Basic Integral’. Computes the basic integrals required in the computation of the p-adic L-function.

Input a 2x2 matrix h in SL2(OK) (which embeds as an element of Sigma_0(p)), and a value j.

Options for j:
  • classical case: specify a non-negative integer j. Then returns the value

    BI_{h,j} := Int_{h.Zp} z^j . d Phi{0 –> infty},

    that is, the value of the distribution Phi{0 –> infty} at the function z^j x the indicator function of the open set h.Zp.

  • Bianchi case: specify a tuple (k,l). Then returns the value

    BI_{h,j} := Int_{h.(Zp x Zp)} x^k y^l . d Phi{0 –> infty},

    that is, the value of the distribution Phi{0 –> infty} at the function x^k y^l x the indicator function of the open set h.(Zp x Zp).

  • do not specify j. Then returns the the distribution mu whose moments are

    BI_{h,j}.

Tq_eigenvalue(ell, check=True)[source]

Computes the eigenvalue of the T_q operator (where q = ell in the input) acting on the cohomology class self.

Warning: assumes that self IS a Hecke eigenclass, and that the eigenvalue thus exists.

cusp_boundary_element(cusp)[source]

Function to explicitly realise a parabolic arithmetic cohomology class as a coboundary after restriction to the stabiliser of a cusp. This should work for any coefficient module on which the action of Sigma_0(p) is encoded in linear algebra.

Input is a specific choice of cusp, as a tuple (a,c), representing a/c in P^1(F). Then computes the stabiliser of this cusp inside the group G=Gamma. We assume that self is in the kernel of restriction to this cusp, which will be the case for any lift of a cuspidal class to overconvergent coefficients. Then we set up a linear algebra problem to compute an element v in V such that self(gamma) = v|gamma^-1 - v for all gamma in Stab_G(a/c).

Returns this v.

evaluate(g, he=None, check=True, twist=False, at_identity=False)[source]

If he is None, then gamma1 should be in Gamma0(p), and return the value of the cocycle at g. If he is not None, then g is assumed to be in Gamma, and return the evaluation of the corresponding element in the Coinduced module, via Shapiro’s isomorphism.

evaluate_at_cusp_list(cusp_list)[source]

Our cohomology class, in H^1(G,V), is the image of a modular symbol Phi in Symb_G(V)under the natural connecting map in cohomology. This function computes the value Phi(D), where D is a divisor.

D is represented by input cusp_list, which is a list of pairs (n,cusp), where n is the coefficient (an integer) and cusp is a tuple (a,c) representing a/c; e.g. [(1,(3,4)),(-2,(1,0))] gives D = [3/4] - 2[inf].

Returns the value Phi(D) as an element of V.

evaluate_cuspidal_modsym_at_cusp_list(cusp_list, j=None, q=None)[source]

Takes arithmetic cohomology class Phi (=self) in H^1(G,D) and evaluates it at a list of cusp (cusp_list). Fundamentally calls the function evaluate_at_cusp_list, which inverts the natural map delta from modular symbols to arithmetic cohomology.

The key functionality of this particular function is a toggle for killing Eisenstein contributions: the lift of self to a modular symbol need not be a cuspidal eigensymbol, since it can be polluted by anything in the kernel of delta. Since this kernel is Eisenstein, it is killed by T_q - N(q) - 1 for suitable primes q in the underlying field.

Input:
  • cusp list: list of cusps with coefficients. Represented as pairs (n,(a,c)),

    where n is the coefficient and (a,c) represents the cusp a/c.

  • jif specified, returns the jth moment of the resulting distribution.

    if not, returns the whole distribution. Can be int (classical) or tuple (Bianchi).

  • q (int)auxiliary prime used to kill Eisenstein contributions. If set to

    -1, ignores this completely. If not, computes a prime q and applies T_q - q - 1 to recover a cuspidal eigensymbol by killing Eisenstein part.

Output:

either a distribution (if j = None) or the jth moment of this distribution (else).

get_Lseries_term(n, cov=None)[source]

Return the n-th coefficient of the p-adic L-series attached to an element phi of H^1(G,D).

Passes to parent and runs the function there to account for differences between classical and Bianchi; it will go to ArithCoh and ArithCohBianchi respectively.

If running in the classical case, n should be an integer, and we return the coefficient of z^n. If in the Bianchi case, n should be a tuple (j,k), and we return the coefficient of z^j * w^k.

class darmonpoints.cohomology_arithmetic.ArithCohOverconvergent(G, base, use_ps_dists=False)[source]

Bases: ArithCoh

apply_Up(c, group=None, scale=1, times=0, progress_bar=False, repslocal=None, Up_reps=None)[source]

Apply the Up Hecke operator operator to c.

get_Lseries_term(phi, n, cov=None)[source]

Return the n-th coefficient of the p-adic L-series attached to an element phi of H^1(G,D): One-variable case.

Input:
  • phi, an ArithCohElement object, representing a cohomology class

    in the underlying group self;

  • n an integer;

  • cov, a set of representing matrices for the U_p operator.

Outputs:

a p-adic number, the coefficient of z^n in the p-adic L-series attached to phi. This will give the series attached to the identity component in weight space; in the notation of Masdeu-Palvannan-Williams, this is the power series L_p(mu,id,z), mu the p-adic L-function of phi.

get_Up_reps_local(prec)[source]
improve(Phi, prec=None, sign=None, progress_bar=False, check_convergence=False)[source]

Repeatedly applies U_p. Used in lifting theorems: ‘improves’ the precision of an overconvergent lift.

(Applies Greenberg’s lifting idea; see his paper in Israel J. Math.)

class darmonpoints.cohomology_arithmetic.BianchiArithAction(G, M)[source]

Bases: Action

Encodes de action of an arithmetic group on the distributions module

class darmonpoints.cohomology_arithmetic.CohArbitrary(G, V, action_map=None)[source]

Bases: CohomologyGroup

Element

alias of ArithCohElement

act_by_poly_hecke(c, r, f, **kwargs)[source]
apply_hecke_operator(c, l, hecke_reps=None, scale=1, use_magma=True, g0=None, as_Up=False, hecke_data=None)[source]

Apply the l-th Hecke operator operator to c.

darmonpoints.cohomology_arithmetic.get_cocycle_from_elliptic_curve(Coh, E, sign=1, use_magma=True, **kwargs)[source]
darmonpoints.cohomology_arithmetic.get_dedekind_rademacher_cocycle(Coh)[source]
darmonpoints.cohomology_arithmetic.get_overconvergent_class_bianchi(P, phiE, G, prec, aP, aPbar, sign_at_infinity=1, sign_ap=1, progress_bar=False, Ename='unknown')[source]
darmonpoints.cohomology_arithmetic.get_overconvergent_class_matrices(p, E, prec, sign_at_infinity, use_ps_dists=False, use_sage_db=False, progress_bar=False)[source]
darmonpoints.cohomology_arithmetic.get_overconvergent_class_quaternionic(P, phiE, G, prec, sign_at_infinity, sign_ap, use_ps_dists=False, use_sage_db=False, progress_bar=False, Ename='unknown')[source]
darmonpoints.cohomology_arithmetic.get_rational_cocycle(Coh, sign=1, use_magma=True, bound=3, return_all=False, **kwargs)[source]
darmonpoints.cohomology_arithmetic.get_rational_cocycle_from_ap(Coh, getap, sign=1, use_magma=True, **kwargs)[source]
darmonpoints.cohomology_arithmetic.get_twodim_cocycle(Coh, sign=1, use_magma=True, bound=5, hecke_data=None, return_all=False, **kwargs)[source]

Abstract homology class

Initialize self. See help(type(self)) for accurate signature.

class darmonpoints.homology_abstract.Abelianization(G)[source]

Bases: HomologyGroup

ab_to_G(x)[source]
abelian_group()[source]
abelian_invariants()[source]
ambient()[source]
class darmonpoints.homology_abstract.ArithHomology(G, V)[source]

Bases: HomologyGroup

Element

alias of ArithHomologyElement

apply_hecke_operator(c, l, hecke_reps=None, group=None, scale=1, use_magma=True, g0=None)[source]

Apply the l-th Hecke operator operator to c.

hecke_matrix(l, use_magma=True, g0=None, with_torsion=False)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
class darmonpoints.homology_abstract.ArithHomologyElement(parent, data)[source]

Bases: HomologyElement

class darmonpoints.homology_abstract.HomologyElement(parent, data)[source]

Bases: ModuleElement

Define an element of H_1(G,V)

INPUT:
  • G: a BigArithGroup

  • V: a CoeffModule

  • data: a list

order()[source]
valuation(p=None)[source]
values()[source]
class darmonpoints.homology_abstract.HomologyGroup(G, V)[source]

Bases: Module, UniqueRepresentation

Element

alias of HomologyElement

coefficient_module()[source]
free_gens()[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self):
....:         return self._x^2
sage: a = Foo(2)
sage: print(a.f.cache)
None
sage: a.f()
4
sage: a.f.cache
4
gen(i)[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self,*args):
....:         return self._x^2
sage: a = Foo(2)
sage: a.f.cache
{}
sage: a.f()
4
sage: a.f.cache
{((), ()): 4}
gens()[source]
get_gen_pow(i, a, red=None)[source]
get_twisted_fox_term(i, a, red=None)[source]
group()[source]
ngens()[source]
rank()[source]

EXAMPLES:

sage: class Foo:
....:     def __init__(self, x):
....:         self._x = x
....:     @cached_method
....:     def f(self):
....:         return self._x^2
sage: a = Foo(2)
sage: print(a.f.cache)
None
sage: a.f()
4
sage: a.f.cache
4
space()[source]

Calculates the homology space as a Z-module.

twisted_fox_gradient(word, red=None)[source]
zero()[source]

Homology class

Initialize self. See help(type(self)) for accurate signature.

class darmonpoints.homology.ArithGroupAction(G, M, emb=None, emb_idx=None)[source]

Bases: Action

class darmonpoints.homology.OneChains(G, V, emb=None, emb_idx=None)[source]

Bases: TensorProduct

Element

alias of OneChainsElement

class darmonpoints.homology.OneChainsElement(parent, data)[source]

Bases: TensorElement

act_by_hecke(l, prec, g0=None)[source]
act_by_poly_hecke(r, f, prec=None)[source]
factor_into_generators(prec)[source]
Use the relations:
  • gh|v = g|v + h|g^-1 v

  • g^a|v = g|(v + g^-1v + … + g^-(a-1)v)

  • g^(-a)|v = - g^a|g^av

hecke_smoothen(r, prec=None)[source]
is_cycle(return_residue=False)[source]
is_degree_zero_valued()[source]
is_zero()[source]
radius()[source]
zero_degree_equivalent(allow_multiple=False, prec=None)[source]
Use the relations:
  • gh|v = g|v + h|g^-1 v

  • g^a|v = g|(v + g^-1v + … + g^-(a-1)v)

  • g^(-a)|v = - g^a|g^av

class darmonpoints.homology.TensorElement(parent, data)[source]

Bases: ModuleElement

Define an element of H_1(G,V)
  • data: a list

TESTS:

mult_by(a)[source]
short_rep()[source]
size_of_support()[source]
class darmonpoints.homology.TensorProduct(G, V, emb=None, emb_idx=None)[source]

Bases: Module

INPUT: - G: an ArithGroup - V: a CoeffModule

Element

alias of TensorElement

coefficient_module()[source]
get_arith_action()[source]
group()[source]
darmonpoints.homology.get_homology_kernel(self, hecke_data=None)[source]
darmonpoints.homology.inverse_shapiro(self, x)[source]
darmonpoints.homology.lattice_homology_cycle(p, G, wp, xlist, prec, tau=None, outfile=None, smoothen=None)[source]