Utilities for Gross-Zagier L-series

sage.modular.modform.l_series_gross_zagier_coeffs.bqf_theta_series(Q, bound, var=None)[source]

Return the theta series associated to a positive definite quadratic form.

For a given form f=ax2+bxy+cy2 this is the sum

(x,y)Z2qf(x,y)=n=r(n)qn

where r(n) give the number of way n is represented by f.

INPUT:

  • Q – a positive definite quadratic form

  • bound – how many terms to compute

  • var – (optional) the variable in which to express this power series

OUTPUT: a power series in var, or list of ints if var is unspecified

EXAMPLES:

sage: from sage.modular.modform.l_series_gross_zagier_coeffs import bqf_theta_series
sage: bqf_theta_series([2,1,5], 10)
[1, 0, 2, 0, 0, 2, 2, 0, 4, 0, 0]
sage: Q = BinaryQF([41,1,1])
sage: bqf_theta_series(Q, 50, ZZ[['q']].gen())
1 + 2*q + 2*q^4 + 2*q^9 + 2*q^16 + 2*q^25 + 2*q^36 + 4*q^41 + 4*q^43 + 4*q^47 + 2*q^49 + O(q^51)
>>> from sage.all import *
>>> from sage.modular.modform.l_series_gross_zagier_coeffs import bqf_theta_series
>>> bqf_theta_series([Integer(2),Integer(1),Integer(5)], Integer(10))
[1, 0, 2, 0, 0, 2, 2, 0, 4, 0, 0]
>>> Q = BinaryQF([Integer(41),Integer(1),Integer(1)])
>>> bqf_theta_series(Q, Integer(50), ZZ[['q']].gen())
1 + 2*q + 2*q^4 + 2*q^9 + 2*q^16 + 2*q^25 + 2*q^36 + 4*q^41 + 4*q^43 + 4*q^47 + 2*q^49 + O(q^51)
from sage.modular.modform.l_series_gross_zagier_coeffs import bqf_theta_series
bqf_theta_series([2,1,5], 10)
Q = BinaryQF([41,1,1])
bqf_theta_series(Q, 50, ZZ[['q']].gen())
sage.modular.modform.l_series_gross_zagier_coeffs.gross_zagier_L_series(an_list, Q, N, u, var=None)[source]

Compute the coefficients of the Gross-Zagier L-series.

INPUT:

  • an_list – list of coefficients of the L-series of an elliptic curve

  • Q – a positive definite quadratic form

  • N – conductor of the elliptic curve

  • u – number of roots of unity in the field associated with Q

  • var – (optional) the variable in which to express this power series

OUTPUT: a power series in var, or list of ints if var is unspecified

The number of terms is the length of the input an_list.

EXAMPLES:

sage: from sage.modular.modform.l_series_gross_zagier_coeffs import gross_zagier_L_series
sage: E = EllipticCurve('37a')
sage: N = 37
sage: an = E.anlist(60); len(an)
61
sage: K.<a> = QuadraticField(-40)
sage: A = K.class_group().gen(0)
sage: Q = A.ideal().quadratic_form().reduced_form()
sage: Q2 = (A**2).ideal().quadratic_form().reduced_form()
sage: u = K.zeta_order()
sage: t = PowerSeriesRing(ZZ,'t').gen()
sage: LA = gross_zagier_L_series(an,Q,N,u,t); LA
-2*t^2 - 2*t^5 - 2*t^7 - 4*t^13 - 6*t^18 - 4*t^20 + 20*t^22 + 4*t^23
- 4*t^28 + 8*t^32 - 2*t^37 - 6*t^45 - 18*t^47 + 2*t^50 - 8*t^52
+ 2*t^53 + 20*t^55 + O(t^61)
sage: len(gross_zagier_L_series(an,Q,N,u))
61

sage: LA + gross_zagier_L_series(an,Q2,N,u,t)
t - 2*t^2 + 2*t^4 - 2*t^5 - 2*t^7 + 3*t^9 + 4*t^10 - 10*t^11 - 4*t^13
+ 4*t^14 - 4*t^16 - 6*t^18 - 4*t^20 + 20*t^22 + 4*t^23 - t^25 + 8*t^26
- 4*t^28 + 8*t^32 + 4*t^35 + 6*t^36 - 2*t^37 - 18*t^41 - 20*t^44
- 6*t^45 - 8*t^46 - 18*t^47 - 11*t^49 + 2*t^50 - 8*t^52 + 2*t^53
+ 20*t^55 + 16*t^59 + O(t^61)
>>> from sage.all import *
>>> from sage.modular.modform.l_series_gross_zagier_coeffs import gross_zagier_L_series
>>> E = EllipticCurve('37a')
>>> N = Integer(37)
>>> an = E.anlist(Integer(60)); len(an)
61
>>> K = QuadraticField(-Integer(40), names=('a',)); (a,) = K._first_ngens(1)
>>> A = K.class_group().gen(Integer(0))
>>> Q = A.ideal().quadratic_form().reduced_form()
>>> Q2 = (A**Integer(2)).ideal().quadratic_form().reduced_form()
>>> u = K.zeta_order()
>>> t = PowerSeriesRing(ZZ,'t').gen()
>>> LA = gross_zagier_L_series(an,Q,N,u,t); LA
-2*t^2 - 2*t^5 - 2*t^7 - 4*t^13 - 6*t^18 - 4*t^20 + 20*t^22 + 4*t^23
- 4*t^28 + 8*t^32 - 2*t^37 - 6*t^45 - 18*t^47 + 2*t^50 - 8*t^52
+ 2*t^53 + 20*t^55 + O(t^61)
>>> len(gross_zagier_L_series(an,Q,N,u))
61

>>> LA + gross_zagier_L_series(an,Q2,N,u,t)
t - 2*t^2 + 2*t^4 - 2*t^5 - 2*t^7 + 3*t^9 + 4*t^10 - 10*t^11 - 4*t^13
+ 4*t^14 - 4*t^16 - 6*t^18 - 4*t^20 + 20*t^22 + 4*t^23 - t^25 + 8*t^26
- 4*t^28 + 8*t^32 + 4*t^35 + 6*t^36 - 2*t^37 - 18*t^41 - 20*t^44
- 6*t^45 - 8*t^46 - 18*t^47 - 11*t^49 + 2*t^50 - 8*t^52 + 2*t^53
+ 20*t^55 + 16*t^59 + O(t^61)
from sage.modular.modform.l_series_gross_zagier_coeffs import gross_zagier_L_series
E = EllipticCurve('37a')
N = 37
an = E.anlist(60); len(an)
K.<a> = QuadraticField(-40)
A = K.class_group().gen(0)
Q = A.ideal().quadratic_form().reduced_form()
Q2 = (A**2).ideal().quadratic_form().reduced_form()
u = K.zeta_order()
t = PowerSeriesRing(ZZ,'t').gen()
LA = gross_zagier_L_series(an,Q,N,u,t); LA
len(gross_zagier_L_series(an,Q,N,u))
LA + gross_zagier_L_series(an,Q2,N,u,t)
sage.modular.modform.l_series_gross_zagier_coeffs.to_series(L, var)[source]

Create a power series element out of a list L in the variable var.

EXAMPLES:

sage: from sage.modular.modform.l_series_gross_zagier_coeffs import to_series
sage: to_series([1,10,100], 't')
1 + 10*t + 100*t^2 + O(t^3)
sage: to_series([0..5], CDF[['z']].0)
0.0 + 1.0*z + 2.0*z^2 + 3.0*z^3 + 4.0*z^4 + 5.0*z^5 + O(z^6)
>>> from sage.all import *
>>> from sage.modular.modform.l_series_gross_zagier_coeffs import to_series
>>> to_series([Integer(1),Integer(10),Integer(100)], 't')
1 + 10*t + 100*t^2 + O(t^3)
>>> to_series((ellipsis_range(Integer(0),Ellipsis,Integer(5))), CDF[['z']].gen(0))
0.0 + 1.0*z + 2.0*z^2 + 3.0*z^3 + 4.0*z^4 + 5.0*z^5 + O(z^6)
from sage.modular.modform.l_series_gross_zagier_coeffs import to_series
to_series([1,10,100], 't')
to_series([0..5], CDF[['z']].0)