Hypergeometric motives¶
This is largely a port of the corresponding package in Magma. One
important conventional difference: the motivic parameter
The computation of Euler factors is currently only supported for primes
AUTHORS:
Frédéric Chapoton
Kiran S. Kedlaya
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp
sage: H = Hyp(cyclotomic=([30], [1,2,3,5]))
sage: H.alpha_beta()
([1/30, 7/30, 11/30, 13/30, 17/30, 19/30, 23/30, 29/30],
[0, 1/5, 1/3, 2/5, 1/2, 3/5, 2/3, 4/5])
sage: H.M_value() == 30**30 / (15**15 * 10**10 * 6**6)
True
sage: H.euler_factor(2, 7)
T^8 + T^5 + T^3 + 1
REFERENCES:
- class sage.modular.hypergeometric_motive.HypergeometricData(cyclotomic=None, alpha_beta=None, gamma_list=None)[source]¶
Bases:
object
Creation of hypergeometric motives.
INPUT:
Three possibilities are offered, each describing a quotient of products of cyclotomic polynomials.
cyclotomic
– a pair of lists of nonnegative integers, each integer represents a cyclotomic polynomialalpha_beta
– a pair of lists of rationals, each rational represents a root of unitygamma_list
– a pair of lists of nonnegative integers, each integer represents a polynomial
In the last case, it is also allowed to send just one list of signed integers where signs indicate to which part the integer belongs to.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(cyclotomic=([2], [1])) Hypergeometric data for [1/2] and [0] sage: Hyp(alpha_beta=([1/2], [0])) Hypergeometric data for [1/2] and [0] sage: Hyp(alpha_beta=([1/5,2/5,3/5,4/5], [0,0,0,0])) Hypergeometric data for [1/5, 2/5, 3/5, 4/5] and [0, 0, 0, 0] sage: Hyp(gamma_list=([5], [1,1,1,1,1])) Hypergeometric data for [1/5, 2/5, 3/5, 4/5] and [0, 0, 0, 0] sage: Hyp(gamma_list=([5,-1,-1,-1,-1,-1])) Hypergeometric data for [1/5, 2/5, 3/5, 4/5] and [0, 0, 0, 0]
- E_polynomial(vars=None)[source]¶
Return the E-polynomial of
self
.This is a bivariate polynomial.
The algorithm is taken from [FRV2019].
INPUT:
vars
– (optional) pair of variables (default: )
REFERENCES:
[FRV2019]Fernando Rodriguez Villegas, Mixed Hodge numbers and factorial ratios, arXiv 1907.02722
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData sage: H = HypergeometricData(gamma_list=[-30, -1, 6, 10, 15]) sage: H.E_polynomial() 8*u*v + 7*u + 7*v + 8 sage: p, q = polygens(QQ,'p,q') sage: H.E_polynomial((p, q)) 8*p*q + 7*p + 7*q + 8 sage: H = HypergeometricData(gamma_list=(-11, -2, 1, 3, 4, 5)) sage: H.E_polynomial() 5*u^2*v + 5*u*v^2 + u*v + 1 sage: H = HypergeometricData(gamma_list=(-63, -8, -2, 1, 4, 16, 21, 31)) sage: H.E_polynomial() 21*u^3*v^2 + 21*u^2*v^3 + u^3*v + 23*u^2*v^2 + u*v^3 + u^2*v + u*v^2 + 2*u*v + 1
- H_value(p, f, t, ring=None)[source]¶
Return the trace of the Frobenius, computed in terms of Gauss sums using the hypergeometric trace formula.
INPUT:
p
– a prime numberf
– integer such thatt
– a rational parameterring
– (default:UniversalCyclotomicfield
)
The ring could be also
ComplexField(n)
orQQbar
.OUTPUT: integer
Warning
This is apparently working correctly as can be tested using
ComplexField(70)
as the value ring.Using instead
UniversalCyclotomicfield
, this is much slower than the -adic versionpadic_H_value()
.Unlike in
padic_H_value()
, tame and wild primes are not supported.EXAMPLES:
With values in the
UniversalCyclotomicField
(slow):sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/2]*4, [0]*4)) sage: [H.H_value(3,i,-1) for i in range(1,3)] [0, -12] sage: [H.H_value(5,i,-1) for i in range(1,3)] [-4, 276] sage: [H.H_value(7,i,-1) for i in range(1,3)] # not tested [0, -476] sage: [H.H_value(11,i,-1) for i in range(1,3)] # not tested [0, -4972] sage: [H.H_value(13,i,-1) for i in range(1,3)] # not tested [-84, -1420]
With values in
ComplexField
:sage: [H.H_value(5,i,-1, ComplexField(60)) for i in range(1,3)] [-4, 276]
Check issue from Issue #28404:
sage: H1 = Hyp(cyclotomic=([1,1,1], [6,2])) sage: H2 = Hyp(cyclotomic=([6,2], [1,1,1])) sage: [H1.H_value(5,1,i) for i in range(2,5)] [1, -4, -4] sage: [H2.H_value(5,1,QQ(i)) for i in range(2,5)] [-4, 1, -4]
REFERENCES:
[BeCoMe] (Theorem 1.3)
- M_value()[source]¶
Return the
coefficient that appears in the trace formula.OUTPUT: a rational
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/6,1/3,2/3,5/6], [1/8,3/8,5/8,7/8])) sage: H.M_value() 729/4096 sage: Hyp(alpha_beta=(([1/2,1/2,1/2,1/2], [0,0,0,0]))).M_value() 256 sage: Hyp(cyclotomic=([5], [1,1,1,1])).M_value() 3125
- alpha()[source]¶
Return the first tuple of rational arguments.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).alpha() [1/2]
- alpha_beta()[source]¶
Return the pair of lists of rational arguments.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).alpha_beta() ([1/2], [0])
- beta()[source]¶
Return the second tuple of rational arguments.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).beta() [0]
- canonical_scheme(t=None)[source]¶
Return the canonical scheme.
This is a scheme that contains this hypergeometric motive in its cohomology.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([3], [4])) sage: H.gamma_list() [-1, 2, 3, -4] sage: H.canonical_scheme() Spectrum of Quotient of Multivariate Polynomial Ring in X0, X1, Y0, Y1 over Fraction Field of Univariate Polynomial Ring in t over Rational Field by the ideal (X0 + X1 - 1, Y0 + Y1 - 1, (-t)*X0^2*X1^3 + 27/64*Y0*Y1^4) sage: H = Hyp(gamma_list=[-2, 3, 4, -5]) sage: H.canonical_scheme() Spectrum of Quotient of Multivariate Polynomial Ring in X0, X1, Y0, Y1 over Fraction Field of Univariate Polynomial Ring in t over Rational Field by the ideal (X0 + X1 - 1, Y0 + Y1 - 1, (-t)*X0^3*X1^4 + 1728/3125*Y0^2*Y1^5)
REFERENCES:
[Kat1991], section 5.4
- cyclotomic_data()[source]¶
Return the pair of tuples of indices of cyclotomic polynomials.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).cyclotomic_data() ([2], [1])
- defining_polynomials()[source]¶
Return the pair of products of cyclotomic polynomials.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/4,3/4], [0,0])).defining_polynomials() (x^2 + 1, x^2 - 2*x + 1)
- degree()[source]¶
Return the degree.
This is the sum of the Hodge numbers.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).degree() 1 sage: Hyp(gamma_list=([2,2,4], [8])).degree() 4 sage: Hyp(cyclotomic=([5,6], [1,1,2,2,3])).degree() 6 sage: Hyp(cyclotomic=([3,8], [1,1,1,2,6])).degree() 6 sage: Hyp(cyclotomic=([3,3], [2,2,4])).degree() 4
- euler_factor(t, p, deg=None, cache_p=False)[source]¶
Return the Euler factor of the motive
at prime .INPUT:
t
– rational number, not 0p
– prime number of good reductiondeg
– integer orNone
OUTPUT: a polynomial
See [Benasque2009] for explicit examples of Euler factors.
For odd weight, the sign of the functional equation is +1. For even weight, the sign is computed by a recipe found in Section 11.1 of [Watkins].
If
deg
is specified, then the polynomial is only computed up to degreedeg
(inclusive).The prime
may be tame, but not wild. When is nonzero and even, the Euler factor includes a linear term described in Section 11.2 of [Watkins].EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/2]*4, [0]*4)) sage: H.euler_factor(-1, 5) 15625*T^4 + 500*T^3 - 130*T^2 + 4*T + 1 sage: H = Hyp(gamma_list=[-6,-1,4,3]) sage: H.weight(), H.degree() (1, 2) sage: t = 189/125 sage: [H.euler_factor(1/t,p) for p in [11,13,17,19,23,29]] [11*T^2 + 4*T + 1, 13*T^2 + 1, 17*T^2 + 1, 19*T^2 + 1, 23*T^2 + 8*T + 1, 29*T^2 + 2*T + 1] sage: H = Hyp(cyclotomic=([6,2], [1,1,1])) sage: H.weight(), H.degree() (2, 3) sage: [H.euler_factor(1/4,p) for p in [5,7,11,13,17,19]] [125*T^3 + 20*T^2 + 4*T + 1, 343*T^3 - 42*T^2 - 6*T + 1, -1331*T^3 - 22*T^2 + 2*T + 1, -2197*T^3 - 156*T^2 + 12*T + 1, 4913*T^3 + 323*T^2 + 19*T + 1, 6859*T^3 - 57*T^2 - 3*T + 1] sage: H = Hyp(alpha_beta=([1/12,5/12,7/12,11/12], [0,1/2,1/2,1/2])) sage: H.weight(), H.degree() (2, 4) sage: t = -5 sage: [H.euler_factor(1/t,p) for p in [11,13,17,19,23,29]] [-14641*T^4 - 1210*T^3 + 10*T + 1, -28561*T^4 - 2704*T^3 + 16*T + 1, -83521*T^4 - 4046*T^3 + 14*T + 1, 130321*T^4 + 14440*T^3 + 969*T^2 + 40*T + 1, 279841*T^4 - 25392*T^3 + 1242*T^2 - 48*T + 1, 707281*T^4 - 7569*T^3 + 696*T^2 - 9*T + 1]
This is an example of higher degree:
sage: H = Hyp(cyclotomic=([11], [7, 12])) sage: H.euler_factor(2, 13) 371293*T^10 - 85683*T^9 + 26364*T^8 + 1352*T^7 - 65*T^6 + 394*T^5 - 5*T^4 + 8*T^3 + 12*T^2 - 3*T + 1 sage: H.euler_factor(2, 13, deg=4) -5*T^4 + 8*T^3 + 12*T^2 - 3*T + 1 sage: H.euler_factor(2, 19) # long time 2476099*T^10 - 651605*T^9 + 233206*T^8 - 77254*T^7 + 20349*T^6 - 4611*T^5 + 1071*T^4 - 214*T^3 + 34*T^2 - 5*T + 1
This is an example of tame primes:
sage: H = Hyp(cyclotomic=[[4,2,2], [3,1,1]]) sage: H.euler_factor(8, 7) -7*T^3 + 7*T^2 - T + 1 sage: H.euler_factor(50, 7) -7*T^3 + 7*T^2 - T + 1 sage: H.euler_factor(7, 7) -T + 1 sage: H.euler_factor(1/7^2, 7) T + 1 sage: H.euler_factor(1/7^4, 7) 7*T^3 + 7*T^2 + T + 1
This is an example with
:sage: H = Hyp(cyclotomic=[[4,2], [3,1]]) sage: H.euler_factor(1, 7) -T^2 + 1 sage: H = Hyp(cyclotomic=[[5], [1,1,1,1]]) sage: H.euler_factor(1, 7) 343*T^2 - 6*T + 1
REFERENCES:
- euler_factor_tame_contribution(t, p, mo, deg=None)[source]¶
Return a contribution to the Euler factor of the motive
at a tame prime.The output is only nontrivial when
has nonzero -adic valuation. The algorithm is described in Section 11.4.1 of [Watkins].INPUT:
t
– rational number, not 0 or 1p
– prime number of good reductionmo
– integerdeg
– integer (optional)
OUTPUT: a polynomial
If
deg
is specified, the output is truncated to that degree (inclusive).EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=[[3,7], [4,5,6]]) sage: H.euler_factor_tame_contribution(11^2, 11, 4) 1 sage: H.euler_factor_tame_contribution(11^20, 11, 4) 1331*T^2 + 1 sage: H.euler_factor_tame_contribution(11^20, 11, 4, deg=1) 1 sage: H.euler_factor_tame_contribution(11^20, 11, 5) 1771561*T^4 + 161051*T^3 + 6171*T^2 + 121*T + 1 sage: H.euler_factor_tame_contribution(11^20, 11, 5, deg=3) 161051*T^3 + 6171*T^2 + 121*T + 1 sage: H.euler_factor_tame_contribution(11^20, 11, 6) 1
- gamma_array()[source]¶
Return the dictionary
for the expressionEXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).gamma_array() {1: -2, 2: 1} sage: Hyp(cyclotomic=([6,2], [1,1,1])).gamma_array() {1: -3, 3: -1, 6: 1}
- gamma_list()[source]¶
Return a list of integers describing the
factors.Each integer
stands for .EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).gamma_list() [-1, -1, 2] sage: Hyp(cyclotomic=([6,2], [1,1,1])).gamma_list() [-1, -1, -1, -3, 6] sage: Hyp(cyclotomic=([3], [4])).gamma_list() [-1, 2, 3, -4]
- gauss_table(p, f, prec)[source]¶
Return (and cache) a table of Gauss sums used in the trace formula.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([3], [4])) sage: H.gauss_table(2, 2, 4) (4, [1 + 2 + 2^2 + 2^3, 1 + 2 + 2^2 + 2^3, 1 + 2 + 2^2 + 2^3])
- gauss_table_full()[source]¶
Return a dict of all stored tables of Gauss sums.
The result is passed by reference, and is an attribute of the class; consequently, modifying the result has global side effects. Use with caution.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([3], [4])) sage: H.euler_factor(2, 7, cache_p=True) 7*T^2 - 3*T + 1 sage: H.gauss_table_full()[(7, 1)] (2, array('l', [-1, -29, -25, -48, -47, -22]))
Clearing cached values:
sage: H = Hyp(cyclotomic=([3], [4])) sage: H.euler_factor(2, 7, cache_p=True) 7*T^2 - 3*T + 1 sage: d = H.gauss_table_full() sage: d.clear() # Delete all entries of this dict sage: H1 = Hyp(cyclotomic=([5], [12])) sage: d1 = H1.gauss_table_full() sage: len(d1.keys()) # No cached values 0
- has_symmetry_at_one()[source]¶
If
True
, the motive H(t=1) is a direct sum of two motives.Note that simultaneous exchange of (t,1/t) and (alpha,beta) always gives the same motive.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=[[1/2]*16, [0]*16]).has_symmetry_at_one() True
REFERENCES:
- hodge_function(x)[source]¶
Evaluate the Hodge polygon as a function.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([6,10], [3,12])) sage: H.hodge_function(3) 2 sage: H.hodge_function(4) 4
- hodge_numbers()[source]¶
Return the Hodge numbers.
See also
degree()
,hodge_polynomial()
,hodge_polygon()
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([3], [6])) sage: H.hodge_numbers() [1, 1] sage: H = Hyp(cyclotomic=([4], [1,2])) sage: H.hodge_numbers() [2] sage: H = Hyp(gamma_list=([8,2,2,2], [6,4,3,1])) sage: H.hodge_numbers() [1, 2, 2, 1] sage: H = Hyp(gamma_list=([5], [1,1,1,1,1])) sage: H.hodge_numbers() [1, 1, 1, 1] sage: H = Hyp(gamma_list=[6,1,-4,-3]) sage: H.hodge_numbers() [1, 1] sage: H = Hyp(gamma_list=[-3]*4 + [1]*12) sage: H.hodge_numbers() [1, 1, 1, 1, 1, 1, 1, 1]
REFERENCES:
- hodge_polygon_vertices()[source]¶
Return the vertices of the Hodge polygon.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([6,10], [3,12])) sage: H.hodge_polygon_vertices() [(0, 0), (1, 0), (3, 2), (5, 6), (6, 9)] sage: H = Hyp(cyclotomic=([2,2,2,2,3,3,3,6,6], [1,1,4,5,9])) sage: H.hodge_polygon_vertices() [(0, 0), (1, 0), (4, 3), (7, 9), (10, 18), (13, 30), (14, 35)]
- hodge_polynomial()[source]¶
Return the Hodge polynomial.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([6,10], [3,12])) sage: H.hodge_polynomial() (T^3 + 2*T^2 + 2*T + 1)/T^2 sage: H = Hyp(cyclotomic=([2,2,2,2,3,3,3,6,6], [1,1,4,5,9])) sage: H.hodge_polynomial() (T^5 + 3*T^4 + 3*T^3 + 3*T^2 + 3*T + 1)/T^2
- is_primitive()[source]¶
Return whether this data is primitive.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(cyclotomic=([3], [4])).is_primitive() True sage: Hyp(gamma_list=[-2, 4, 6, -8]).is_primitive() False sage: Hyp(gamma_list=[-3, 6, 9, -12]).is_primitive() False
- lattice_polytope()[source]¶
Return the associated lattice polytope.
This uses the matrix defined in section 3 of [RRV2022] and section 3 of [RV2019].
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(gamma_list=[-5, -2, 3, 4]) sage: P = H.lattice_polytope(); P 2-d lattice polytope in 2-d lattice M sage: P.polyhedron().f_vector() (1, 4, 4, 1) sage: len(P.points()) 7
The Chebyshev example from [RV2019]:
sage: H = Hyp(gamma_list=[-30, -1, 6, 10, 15]) sage: P = H.lattice_polytope(); P 3-d lattice polytope in 3-d lattice M sage: len(P.points()) 19 sage: P.polyhedron().f_vector() (1, 5, 9, 6, 1)
- lfunction(t, prec=53)[source]¶
Return the
-function ofself
.The result is a wrapper around a PARI
-function.INPUT:
prec
– precision (default: 53)
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([3], [4])) sage: L = H.lfunction(1/64); L PARI L-function associated to Hypergeometric data for [1/3, 2/3] and [1/4, 3/4] sage: L(4) 0.997734256321692
- padic_H_value(p, f, t, prec=None, cache_p=False)[source]¶
Return the
-adic trace of Frobenius, computed using the Gross-Koblitz formula.If left unspecified,
is set to the minimum -adic precision needed to recover the Euler factor.If
cache_p
isTrue
, then the function caches an intermediate result which depends only on and . This leads to a significant speedup when iterating over .INPUT:
p
– a prime numberf
– integer such thatt
– a rational parameterprec
– precision (optional)cache_p
– boolean
OUTPUT: integer
EXAMPLES:
From Benasque report [Benasque2009], page 8:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/2]*4, [0]*4)) sage: [H.padic_H_value(3,i,-1) for i in range(1,3)] [0, -12] sage: [H.padic_H_value(5,i,-1) for i in range(1,3)] [-4, 276] sage: [H.padic_H_value(7,i,-1) for i in range(1,3)] [0, -476] sage: [H.padic_H_value(11,i,-1) for i in range(1,3)] [0, -4972]
From [Roberts2015] (but note conventions regarding
):sage: H = Hyp(gamma_list=[-6,-1,4,3]) sage: t = 189/125 sage: H.padic_H_value(13,1,1/t) 0
REFERENCES:
- primitive_data()[source]¶
Return a primitive version.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([3], [4])) sage: H2 = Hyp(gamma_list=[-2, 4, 6, -8]) sage: H2.primitive_data() == H True
- primitive_index()[source]¶
Return the primitive index.
See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(cyclotomic=([3], [4])).primitive_index() 1 sage: Hyp(gamma_list=[-2, 4, 6, -8]).primitive_index() 2 sage: Hyp(gamma_list=[-3, 6, 9, -12]).primitive_index() 3
- sign(t, p)[source]¶
Return the sign of the functional equation for the Euler factor of the motive
at the prime .For odd weight, the sign of the functional equation is +1. For even weight, the sign is computed by a recipe found in Section 11.1 of [Watkins] (when 0 is not in alpha).
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(cyclotomic=([6,2], [1,1,1])) sage: H.weight(), H.degree() (2, 3) sage: [H.sign(1/4,p) for p in [5,7,11,13,17,19]] [1, 1, -1, -1, 1, 1] sage: H = Hyp(alpha_beta=([1/12,5/12,7/12,11/12], [0,1/2,1/2,1/2])) sage: H.weight(), H.degree() (2, 4) sage: t = -5 sage: [H.sign(1/t,p) for p in [11,13,17,19,23,29]] [-1, -1, -1, 1, 1, 1]
We check that Issue #28404 is fixed:
sage: H = Hyp(cyclotomic=([1,1,1], [6,2])) sage: [H.sign(4,p) for p in [5,7,11,13,17,19]] [1, 1, -1, -1, 1, 1]
- swap_alpha_beta()[source]¶
Return the hypergeometric data with
alpha
andbeta
exchanged.EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/2], [0])) sage: H.swap_alpha_beta() Hypergeometric data for [0] and [1/2]
- trace(p, f, t, prec=None, cache_p=False)[source]¶
alias of
padic_H_value()
.
- twist()[source]¶
Return the twist of this data.
This is defined by adding
to each rational in and .This is an involution.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/2], [0])) sage: H.twist() Hypergeometric data for [0] and [1/2] sage: H.twist().twist() == H True sage: Hyp(cyclotomic=([6], [1,2])).twist().cyclotomic_data() ([3], [1, 2])
- weight()[source]¶
Return the motivic weight of this motivic data.
EXAMPLES:
With rational inputs:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(alpha_beta=([1/2], [0])).weight() 0 sage: Hyp(alpha_beta=([1/4,3/4], [0,0])).weight() 1 sage: Hyp(alpha_beta=([1/6,1/3,2/3,5/6], [0,0,1/4,3/4])).weight() 1 sage: H = Hyp(alpha_beta=([1/6,1/3,2/3,5/6], [1/8,3/8,5/8,7/8])) sage: H.weight() 1
With cyclotomic inputs:
sage: Hyp(cyclotomic=([6,2], [1,1,1])).weight() 2 sage: Hyp(cyclotomic=([6], [1,2])).weight() 0 sage: Hyp(cyclotomic=([8], [1,2,3])).weight() 0 sage: Hyp(cyclotomic=([5], [1,1,1,1])).weight() 3 sage: Hyp(cyclotomic=([5,6], [1,1,2,2,3])).weight() 1 sage: Hyp(cyclotomic=([3,8], [1,1,1,2,6])).weight() 2 sage: Hyp(cyclotomic=([3,3], [2,2,4])).weight() 1
With gamma list input:
sage: Hyp(gamma_list=([8,2,2,2], [6,4,3,1])).weight() 3
- wild_primes()[source]¶
Return the wild primes.
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: Hyp(cyclotomic=([3], [4])).wild_primes() [2, 3] sage: Hyp(cyclotomic=([2,2,2,2,3,3,3,6,6], [1,1,4,5,9])).wild_primes() [2, 3, 5]
- zigzag(x, flip_beta=False)[source]¶
Count
alpha
’s at mostx
minusbeta
’s at mostx
.This function is used to compute the weight and the Hodge numbers. With
flip_beta
set toTrue
, replace each in with .See also
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp sage: H = Hyp(alpha_beta=([1/6,1/3,2/3,5/6], [1/8,3/8,5/8,7/8])) sage: [H.zigzag(x) for x in [0, 1/3, 1/2]] [0, 1, 0] sage: H = Hyp(cyclotomic=([5], [1,1,1,1])) sage: [H.zigzag(x) for x in [0,1/6,1/4,1/2,3/4,5/6]] [-4, -4, -3, -2, -1, 0]
- sage.modular.hypergeometric_motive.alpha_to_cyclotomic(alpha)[source]¶
Convert from a list of rationals arguments to a list of integers.
The input represents arguments of some roots of unity.
The output represent a product of cyclotomic polynomials with exactly the given roots. Note that the multiplicity of
in the list must be independent of ; otherwise, aValueError
will be raised.This is the inverse of
cyclotomic_to_alpha()
.EXAMPLES:
sage: from sage.modular.hypergeometric_motive import alpha_to_cyclotomic sage: alpha_to_cyclotomic([0]) [1] sage: alpha_to_cyclotomic([1/2]) [2] sage: alpha_to_cyclotomic([1/5, 2/5, 3/5, 4/5]) [5] sage: alpha_to_cyclotomic([0, 1/6, 1/3, 1/2, 2/3, 5/6]) [1, 2, 3, 6] sage: alpha_to_cyclotomic([1/3, 2/3, 1/2]) [2, 3]
- sage.modular.hypergeometric_motive.capital_M(n)[source]¶
Auxiliary function, used to describe the canonical scheme.
INPUT:
n
– integer
OUTPUT: a rational
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import capital_M sage: [capital_M(i) for i in range(1, 8)] [1, 4, 27, 64, 3125, 432, 823543]
- sage.modular.hypergeometric_motive.characteristic_polynomial_from_traces(traces, d, q, i, sign, deg=None, use_fe=True)[source]¶
Given a sequence of traces
, return the corresponding characteristic polynomial with Weil numbers as roots.The characteristic polynomial is defined by the generating series
and should have the property that reciprocals of all roots have absolute value
.INPUT:
traces
– list of integersd
– the degree of the characteristic polynomialq
– power of a prime numberi
– integer; the weight in the motivic sensesign
– integer; the signdeg
– integer orNone
use_fe
– boolean (default:True
)
OUTPUT: a polynomial
If
deg
is specified, only the coefficients up to this degree (inclusive) are computed.If
use_fe
isFalse
, we ignore the local functional equation.EXAMPLES:
sage: from sage.modular.hypergeometric_motive import characteristic_polynomial_from_traces sage: characteristic_polynomial_from_traces([1, 1], 1, 3, 0, -1) -T + 1 sage: characteristic_polynomial_from_traces([25], 1, 5, 4, -1) -25*T + 1 sage: characteristic_polynomial_from_traces([3], 2, 5, 1, 1) 5*T^2 - 3*T + 1 sage: characteristic_polynomial_from_traces([1], 2, 7, 1, 1) 7*T^2 - T + 1 sage: characteristic_polynomial_from_traces([20], 3, 29, 2, 1) 24389*T^3 - 580*T^2 - 20*T + 1 sage: characteristic_polynomial_from_traces([12], 3, 13, 2, -1) -2197*T^3 + 156*T^2 - 12*T + 1 sage: characteristic_polynomial_from_traces([36, 7620], 4, 17, 3, 1) 24137569*T^4 - 176868*T^3 - 3162*T^2 - 36*T + 1 sage: characteristic_polynomial_from_traces([-4, 276], 4, 5, 3, 1) 15625*T^4 + 500*T^3 - 130*T^2 + 4*T + 1 sage: characteristic_polynomial_from_traces([4, -276], 4, 5, 3, 1) 15625*T^4 - 500*T^3 + 146*T^2 - 4*T + 1 sage: characteristic_polynomial_from_traces([22, 484], 4, 31, 2, -1) -923521*T^4 + 21142*T^3 - 22*T + 1 sage: characteristic_polynomial_from_traces([22], 4, 31, 2, -1, deg=1) -22*T + 1 sage: characteristic_polynomial_from_traces([22, 484], 4, 31, 2, -1, deg=4) -923521*T^4 + 21142*T^3 - 22*T + 1
- sage.modular.hypergeometric_motive.cyclotomic_to_alpha(cyclo)[source]¶
Convert a list of indices of cyclotomic polynomials to a list of rational numbers.
The input represents a product of cyclotomic polynomials.
The output is the list of arguments of the roots of the given product of cyclotomic polynomials.
This is the inverse of
alpha_to_cyclotomic()
.EXAMPLES:
sage: from sage.modular.hypergeometric_motive import cyclotomic_to_alpha sage: cyclotomic_to_alpha([1]) [0] sage: cyclotomic_to_alpha([2]) [1/2] sage: cyclotomic_to_alpha([5]) [1/5, 2/5, 3/5, 4/5] sage: cyclotomic_to_alpha([1, 2, 3, 6]) [0, 1/6, 1/3, 1/2, 2/3, 5/6] sage: cyclotomic_to_alpha([2, 3]) [1/3, 1/2, 2/3]
- sage.modular.hypergeometric_motive.cyclotomic_to_gamma(cyclo_up, cyclo_down)[source]¶
Convert a quotient of products of cyclotomic polynomials to a quotient of products of polynomials
.INPUT:
cyclo_up
– list of indices of cyclotomic polynomials in the numeratorcyclo_down
– list of indices of cyclotomic polynomials in the denominator
OUTPUT:
a dictionary mapping an integer
to the power of that appears in the given productEXAMPLES:
sage: from sage.modular.hypergeometric_motive import cyclotomic_to_gamma sage: cyclotomic_to_gamma([6], [1]) {2: -1, 3: -1, 6: 1}
- sage.modular.hypergeometric_motive.enumerate_hypergeometric_data(d, weight=None)[source]¶
Return an iterator over parameters of hypergeometric motives (up to swapping).
INPUT:
d
– the degreeweight
– (optional) integer; specifies the motivic weight
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import enumerate_hypergeometric_data as enum sage: l = [H for H in enum(6, weight=2) if H.hodge_numbers()[0] == 1] sage: len(l) 112
- sage.modular.hypergeometric_motive.gamma_list_to_cyclotomic(galist)[source]¶
Convert a quotient of products of polynomials
to a quotient of products of cyclotomic polynomials.INPUT:
galist
– list of integers, where an integer represents the power
OUTPUT:
a pair of list of integers, where
represents the cyclotomic polynomialEXAMPLES:
sage: from sage.modular.hypergeometric_motive import gamma_list_to_cyclotomic sage: gamma_list_to_cyclotomic([-1, -1, 2]) ([2], [1]) sage: gamma_list_to_cyclotomic([-1, -1, -1, -3, 6]) ([2, 6], [1, 1, 1]) sage: gamma_list_to_cyclotomic([-1, 2, 3, -4]) ([3], [4]) sage: gamma_list_to_cyclotomic([8, 2, 2, 2, -6, -4, -3, -1]) ([2, 2, 8], [3, 3, 6])
- sage.modular.hypergeometric_motive.possible_hypergeometric_data(d, weight=None)[source]¶
Return the list of possible parameters of hypergeometric motives (up to swapping).
INPUT:
d
– the degreeweight
– (optional) integer; specifies the motivic weight
EXAMPLES:
sage: from sage.modular.hypergeometric_motive import possible_hypergeometric_data as P sage: [len(P(i,weight=2)) for i in range(1, 7)] [0, 0, 10, 30, 93, 234]