passagemath-schemes 10.8.1a4__cp314-cp314t-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
  2. passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
  3. passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
  4. passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
  5. passagemath_schemes/__init__.py +3 -0
  6. passagemath_schemes-10.8.1a4.dist-info/METADATA +203 -0
  7. passagemath_schemes-10.8.1a4.dist-info/METADATA.bak +204 -0
  8. passagemath_schemes-10.8.1a4.dist-info/RECORD +312 -0
  9. passagemath_schemes-10.8.1a4.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.8.1a4.dist-info/top_level.txt +3 -0
  11. sage/all__sagemath_schemes.py +23 -0
  12. sage/databases/all__sagemath_schemes.py +7 -0
  13. sage/databases/cremona.py +1723 -0
  14. sage/dynamics/all__sagemath_schemes.py +2 -0
  15. sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
  16. sage/dynamics/arithmetic_dynamics/all.py +14 -0
  17. sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
  18. sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
  19. sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
  20. sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
  21. sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
  22. sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
  23. sage/dynamics/arithmetic_dynamics/projective_ds.py +9556 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314t-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2578 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +727 -0
  29. sage/lfunctions/pari.py +971 -0
  30. sage/lfunctions/zero_sums.cpython-314t-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5132 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +414 -0
  34. sage/modular/abvar/abvar_newform.py +246 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +187 -0
  37. sage/modular/abvar/cuspidal_subgroup.py +371 -0
  38. sage/modular/abvar/finite_subgroup.py +896 -0
  39. sage/modular/abvar/homology.py +721 -0
  40. sage/modular/abvar/homspace.py +989 -0
  41. sage/modular/abvar/lseries.py +415 -0
  42. sage/modular/abvar/morphism.py +935 -0
  43. sage/modular/abvar/torsion_point.py +274 -0
  44. sage/modular/abvar/torsion_subgroup.py +741 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-314t-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1406 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-314t-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +361 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +659 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1491 -0
  57. sage/modular/arithgroup/congroup_generic.py +630 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +266 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-314t-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1067 -0
  61. sage/modular/arithgroup/tests.py +425 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3736 -0
  64. sage/modular/btquotients/pautomorphicform.py +2564 -0
  65. sage/modular/buzzard.py +100 -0
  66. sage/modular/congroup.py +29 -0
  67. sage/modular/congroup_element.py +13 -0
  68. sage/modular/cusps.py +1107 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +571 -0
  71. sage/modular/dirichlet.py +3310 -0
  72. sage/modular/drinfeld_modform/all.py +2 -0
  73. sage/modular/drinfeld_modform/element.py +446 -0
  74. sage/modular/drinfeld_modform/ring.py +773 -0
  75. sage/modular/drinfeld_modform/tutorial.py +236 -0
  76. sage/modular/etaproducts.py +1076 -0
  77. sage/modular/hecke/algebra.py +725 -0
  78. sage/modular/hecke/all.py +19 -0
  79. sage/modular/hecke/ambient_module.py +994 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +302 -0
  82. sage/modular/hecke/hecke_operator.py +736 -0
  83. sage/modular/hecke/homspace.py +185 -0
  84. sage/modular/hecke/module.py +1744 -0
  85. sage/modular/hecke/morphism.py +139 -0
  86. sage/modular/hecke/submodule.py +970 -0
  87. sage/modular/hypergeometric_misc.cpython-314t-darwin.so +0 -0
  88. sage/modular/hypergeometric_misc.pxd +4 -0
  89. sage/modular/hypergeometric_misc.pyx +166 -0
  90. sage/modular/hypergeometric_motive.py +2020 -0
  91. sage/modular/local_comp/all.py +2 -0
  92. sage/modular/local_comp/liftings.py +292 -0
  93. sage/modular/local_comp/local_comp.py +1070 -0
  94. sage/modular/local_comp/smoothchar.py +1825 -0
  95. sage/modular/local_comp/type_space.py +748 -0
  96. sage/modular/modform/all.py +30 -0
  97. sage/modular/modform/ambient.py +817 -0
  98. sage/modular/modform/ambient_R.py +177 -0
  99. sage/modular/modform/ambient_eps.py +306 -0
  100. sage/modular/modform/ambient_g0.py +120 -0
  101. sage/modular/modform/ambient_g1.py +199 -0
  102. sage/modular/modform/constructor.py +545 -0
  103. sage/modular/modform/cuspidal_submodule.py +708 -0
  104. sage/modular/modform/defaults.py +14 -0
  105. sage/modular/modform/eis_series.py +487 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4105 -0
  108. sage/modular/modform/half_integral.py +154 -0
  109. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  110. sage/modular/modform/j_invariant.py +47 -0
  111. sage/modular/modform/l_series_gross_zagier.py +127 -0
  112. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314t-darwin.so +0 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  114. sage/modular/modform/notes.py +45 -0
  115. sage/modular/modform/numerical.py +514 -0
  116. sage/modular/modform/periods.py +14 -0
  117. sage/modular/modform/ring.py +1257 -0
  118. sage/modular/modform/space.py +1859 -0
  119. sage/modular/modform/submodule.py +118 -0
  120. sage/modular/modform/tests.py +64 -0
  121. sage/modular/modform/theta.py +110 -0
  122. sage/modular/modform/vm_basis.py +380 -0
  123. sage/modular/modform/weight1.py +221 -0
  124. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  125. sage/modular/modform_hecketriangle/abstract_space.py +2527 -0
  126. sage/modular/modform_hecketriangle/all.py +30 -0
  127. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  128. sage/modular/modform_hecketriangle/constructor.py +416 -0
  129. sage/modular/modform_hecketriangle/element.py +351 -0
  130. sage/modular/modform_hecketriangle/functors.py +752 -0
  131. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  132. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  133. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3349 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1426 -0
  135. sage/modular/modform_hecketriangle/readme.py +1214 -0
  136. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  137. sage/modular/modform_hecketriangle/space.py +1037 -0
  138. sage/modular/modform_hecketriangle/subspace.py +423 -0
  139. sage/modular/modsym/all.py +17 -0
  140. sage/modular/modsym/ambient.py +3844 -0
  141. sage/modular/modsym/boundary.py +1420 -0
  142. sage/modular/modsym/element.py +336 -0
  143. sage/modular/modsym/g1list.py +178 -0
  144. sage/modular/modsym/ghlist.py +182 -0
  145. sage/modular/modsym/hecke_operator.py +73 -0
  146. sage/modular/modsym/manin_symbol.cpython-314t-darwin.so +0 -0
  147. sage/modular/modsym/manin_symbol.pxd +5 -0
  148. sage/modular/modsym/manin_symbol.pyx +497 -0
  149. sage/modular/modsym/manin_symbol_list.py +1291 -0
  150. sage/modular/modsym/modsym.py +400 -0
  151. sage/modular/modsym/modular_symbols.py +384 -0
  152. sage/modular/modsym/p1list_nf.py +1241 -0
  153. sage/modular/modsym/relation_matrix.py +591 -0
  154. sage/modular/modsym/relation_matrix_pyx.cpython-314t-darwin.so +0 -0
  155. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  156. sage/modular/modsym/space.py +2468 -0
  157. sage/modular/modsym/subspace.py +455 -0
  158. sage/modular/modsym/tests.py +376 -0
  159. sage/modular/multiple_zeta.py +2635 -0
  160. sage/modular/multiple_zeta_F_algebra.py +789 -0
  161. sage/modular/overconvergent/all.py +6 -0
  162. sage/modular/overconvergent/genus0.py +1879 -0
  163. sage/modular/overconvergent/hecke_series.py +1187 -0
  164. sage/modular/overconvergent/weightspace.py +776 -0
  165. sage/modular/pollack_stevens/all.py +4 -0
  166. sage/modular/pollack_stevens/distributions.py +874 -0
  167. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  168. sage/modular/pollack_stevens/manin_map.py +856 -0
  169. sage/modular/pollack_stevens/modsym.py +1590 -0
  170. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  171. sage/modular/pollack_stevens/sigma0.py +534 -0
  172. sage/modular/pollack_stevens/space.py +1078 -0
  173. sage/modular/quasimodform/all.py +3 -0
  174. sage/modular/quasimodform/element.py +846 -0
  175. sage/modular/quasimodform/ring.py +826 -0
  176. sage/modular/quatalg/all.py +3 -0
  177. sage/modular/quatalg/brandt.py +1642 -0
  178. sage/modular/ssmod/all.py +8 -0
  179. sage/modular/ssmod/ssmod.py +827 -0
  180. sage/rings/all__sagemath_schemes.py +1 -0
  181. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/binary_form_reduce.py +585 -0
  183. sage/schemes/all.py +41 -0
  184. sage/schemes/berkovich/all.py +6 -0
  185. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  186. sage/schemes/berkovich/berkovich_space.py +700 -0
  187. sage/schemes/curves/affine_curve.py +2924 -0
  188. sage/schemes/curves/all.py +33 -0
  189. sage/schemes/curves/closed_point.py +434 -0
  190. sage/schemes/curves/constructor.py +397 -0
  191. sage/schemes/curves/curve.py +542 -0
  192. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  193. sage/schemes/curves/point.py +463 -0
  194. sage/schemes/curves/projective_curve.py +3203 -0
  195. sage/schemes/curves/weighted_projective_curve.py +106 -0
  196. sage/schemes/curves/zariski_vankampen.py +1931 -0
  197. sage/schemes/cyclic_covers/all.py +2 -0
  198. sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
  199. sage/schemes/cyclic_covers/constructor.py +137 -0
  200. sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
  201. sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
  202. sage/schemes/elliptic_curves/BSD.py +991 -0
  203. sage/schemes/elliptic_curves/Qcurves.py +592 -0
  204. sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
  205. sage/schemes/elliptic_curves/all.py +49 -0
  206. sage/schemes/elliptic_curves/cardinality.py +609 -0
  207. sage/schemes/elliptic_curves/cm.py +1103 -0
  208. sage/schemes/elliptic_curves/constructor.py +1530 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3971 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +457 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2837 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3249 -0
  214. sage/schemes/elliptic_curves/ell_generic.py +3760 -0
  215. sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
  216. sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
  217. sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
  218. sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
  219. sage/schemes/elliptic_curves/ell_point.py +4944 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7184 -0
  221. sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
  222. sage/schemes/elliptic_curves/ell_torsion.py +436 -0
  223. sage/schemes/elliptic_curves/ell_wp.py +352 -0
  224. sage/schemes/elliptic_curves/formal_group.py +760 -0
  225. sage/schemes/elliptic_curves/gal_reps.py +1459 -0
  226. sage/schemes/elliptic_curves/gal_reps_number_field.py +1663 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7328 -0
  229. sage/schemes/elliptic_curves/height.py +2108 -0
  230. sage/schemes/elliptic_curves/hom.py +1788 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +1084 -0
  232. sage/schemes/elliptic_curves/hom_fractional.py +544 -0
  233. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  234. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  235. sage/schemes/elliptic_curves/hom_sum.py +681 -0
  236. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  237. sage/schemes/elliptic_curves/homset.py +271 -0
  238. sage/schemes/elliptic_curves/isogeny_class.py +1523 -0
  239. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  240. sage/schemes/elliptic_curves/jacobian.py +247 -0
  241. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  242. sage/schemes/elliptic_curves/kraus.py +1014 -0
  243. sage/schemes/elliptic_curves/lseries_ell.py +915 -0
  244. sage/schemes/elliptic_curves/mod5family.py +105 -0
  245. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.cpython-314t-darwin.so +0 -0
  247. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  248. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  249. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  250. sage/schemes/elliptic_curves/padics.py +1816 -0
  251. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.cpython-314t-darwin.so +0 -0
  253. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  254. sage/schemes/elliptic_curves/saturation.py +716 -0
  255. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  256. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  257. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  258. sage/schemes/hyperelliptic_curves/all.py +6 -0
  259. sage/schemes/hyperelliptic_curves/constructor.py +369 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1948 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +936 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  264. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  265. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +312 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_generic.py +437 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  270. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +878 -0
  271. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  272. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  273. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3863 -0
  274. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  275. sage/schemes/jacobians/all.py +2 -0
  276. sage/schemes/overview.py +161 -0
  277. sage/schemes/plane_conics/all.py +22 -0
  278. sage/schemes/plane_conics/con_field.py +1296 -0
  279. sage/schemes/plane_conics/con_finite_field.py +158 -0
  280. sage/schemes/plane_conics/con_number_field.py +456 -0
  281. sage/schemes/plane_conics/con_rational_field.py +406 -0
  282. sage/schemes/plane_conics/con_rational_function_field.py +581 -0
  283. sage/schemes/plane_conics/constructor.py +249 -0
  284. sage/schemes/plane_quartics/all.py +2 -0
  285. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  286. sage/schemes/plane_quartics/quartic_generic.py +53 -0
  287. sage/schemes/riemann_surfaces/all.py +1 -0
  288. sage/schemes/riemann_surfaces/riemann_surface.py +4177 -0
  289. sage_wheels/share/cremona/cremona_mini.db +0 -0
  290. sage_wheels/share/ellcurves/rank0 +30427 -0
  291. sage_wheels/share/ellcurves/rank1 +31871 -0
  292. sage_wheels/share/ellcurves/rank10 +6 -0
  293. sage_wheels/share/ellcurves/rank11 +6 -0
  294. sage_wheels/share/ellcurves/rank12 +1 -0
  295. sage_wheels/share/ellcurves/rank14 +1 -0
  296. sage_wheels/share/ellcurves/rank15 +1 -0
  297. sage_wheels/share/ellcurves/rank17 +1 -0
  298. sage_wheels/share/ellcurves/rank19 +1 -0
  299. sage_wheels/share/ellcurves/rank2 +2388 -0
  300. sage_wheels/share/ellcurves/rank20 +1 -0
  301. sage_wheels/share/ellcurves/rank21 +1 -0
  302. sage_wheels/share/ellcurves/rank22 +1 -0
  303. sage_wheels/share/ellcurves/rank23 +1 -0
  304. sage_wheels/share/ellcurves/rank24 +1 -0
  305. sage_wheels/share/ellcurves/rank28 +1 -0
  306. sage_wheels/share/ellcurves/rank3 +836 -0
  307. sage_wheels/share/ellcurves/rank4 +10 -0
  308. sage_wheels/share/ellcurves/rank5 +5 -0
  309. sage_wheels/share/ellcurves/rank6 +5 -0
  310. sage_wheels/share/ellcurves/rank7 +5 -0
  311. sage_wheels/share/ellcurves/rank8 +6 -0
  312. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,971 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ """
3
+ `L`-functions from PARI
4
+
5
+ This is a wrapper around the general PARI `L`-functions functionality.
6
+
7
+ REFERENCES:
8
+
9
+ - https://pari.math.u-bordeaux.fr/dochtml/html-stable/_L_minusfunctions.html
10
+
11
+ AUTHORS:
12
+
13
+ - Frédéric Chapoton (2018) interface
14
+ """
15
+ # ****************************************************************************
16
+ # Copyright (C) 2018 Frédéric Chapoton <chapoton@unistra.fr>
17
+ #
18
+ # This program is free software: you can redistribute it and/or modify
19
+ # it under the terms of the GNU General Public License as published by
20
+ # the Free Software Foundation, either version 2 of the License, or
21
+ # (at your option) any later version.
22
+ # https://www.gnu.org/licenses/
23
+ # ****************************************************************************
24
+ from operator import index as PyNumber_Index
25
+
26
+ from cypari2.gen import Gen
27
+
28
+ from sage.libs.pari import pari
29
+ from sage.rings.integer_ring import ZZ
30
+ from sage.rings.real_mpfr import RealField
31
+ from sage.rings.complex_mpfr import ComplexField
32
+ from sage.rings.power_series_ring import PowerSeriesRing
33
+ from sage.structure.sage_object import SageObject
34
+
35
+
36
+ class lfun_generic:
37
+ r"""
38
+ Create a PARI `L`-function (:pari:`lfun` instance).
39
+
40
+ The arguments are::
41
+
42
+ lfun_generic(conductor, gammaV, weight, eps, poles, residues, init)
43
+
44
+ where
45
+
46
+ - ``conductor`` -- integer; the conductor
47
+
48
+ - ``gammaV`` -- list of Gamma-factor parameters, e.g. [0] for
49
+ Riemann zeta, [0,1] for elliptic curves, (see examples)
50
+
51
+ - ``weight`` -- positive real number, usually an integer e.g. 1 for
52
+ Riemann zeta, 2 for `H^1` of curves over `\QQ`
53
+
54
+ - ``eps`` -- complex number; sign in functional equation
55
+
56
+ - ``poles`` -- (default: ``[]``) list of points where
57
+ `L^*(s)` has (simple) poles; only poles with
58
+ `Re(s)>weight/2` should be included
59
+
60
+ - ``residues`` -- vector of residues of `L^*(s)` in those poles or
61
+ set ``residues='automatic'`` (default)
62
+
63
+ - ``init`` -- list of coefficients (optional)
64
+
65
+ RIEMANN ZETA FUNCTION:
66
+
67
+ We compute with the Riemann Zeta function::
68
+
69
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
70
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1,
71
+ ....: eps=1, poles=[1], residues=[1])
72
+ sage: lf.init_coeffs([1]*2000)
73
+
74
+ Now we can wrap this PARI `L`-function into one Sage `L`-function::
75
+
76
+ sage: L = LFunction(lf); L
77
+ L-series of conductor 1 and weight 1
78
+ sage: L(1)
79
+ Traceback (most recent call last):
80
+ ...
81
+ ArithmeticError: pole here
82
+ sage: L(2)
83
+ 1.64493406684823
84
+ sage: L.derivative(2)
85
+ -0.937548254315844
86
+ sage: h = RR('0.0000000000001')
87
+ sage: (zeta(2+h) - zeta(2.))/h
88
+ -0.937028232783632
89
+ sage: L.taylor_series(2, k=5)
90
+ 1.64493406684823 - 0.937548254315844*z + 0.994640117149451*z^2 - 1.00002430047384*z^3 + 1.00006193307...*z^4 + O(z^5)
91
+ """
92
+ def __init__(self, conductor, gammaV, weight, eps, poles=[],
93
+ residues='automatic', *args, **kwds) -> None:
94
+ """
95
+ Initialisation of a :pari:`lfun` from motivic data.
96
+
97
+ This can happen either in one stage or in two stages: the coefficients
98
+ can be given using the ``init`` keyword, or entered using
99
+ the :meth:`init_coeffs`.
100
+
101
+ EXAMPLES::
102
+
103
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
104
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1,
105
+ ....: eps=1, poles=[1], residues=[1])
106
+ sage: lf
107
+ generic Pari lfun structure of conductor 1 and weight 1
108
+ """
109
+ self.conductor = conductor
110
+ self.gammaV = gammaV
111
+ self.weight = weight
112
+ self.eps = eps
113
+ self.poles = poles
114
+ self.residues = residues
115
+
116
+ if isinstance(self.residues, (list, tuple)):
117
+ if len(self.poles) != len(self.residues):
118
+ raise ValueError("poles and residues do not match")
119
+
120
+ if args or kwds:
121
+ self.init_coeffs(*args, **kwds)
122
+ else:
123
+ # empty placeholder
124
+ # useful to store parameters before computing the coefficients
125
+ self.init_empty()
126
+
127
+ def __repr__(self) -> str:
128
+ """
129
+ Return a string representation.
130
+
131
+ EXAMPLES::
132
+
133
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
134
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1,
135
+ ....: eps=1, poles=[1], residues=[1])
136
+ sage: lf
137
+ generic Pari lfun structure of conductor 1 and weight 1
138
+ """
139
+ t = "generic Pari lfun structure "
140
+ t += f"of conductor {self.conductor} and weight {self.weight}"
141
+ return t
142
+
143
+ def init_empty(self) -> None:
144
+ """
145
+ Create the Pari object with the Dokchitser parameters only.
146
+
147
+ This is useful to ask Pari for the number of terms.
148
+
149
+ EXAMPLES::
150
+
151
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
152
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1,
153
+ ....: eps=1, poles=[1], residues=[1])
154
+ sage: lf.init_empty()
155
+ """
156
+ # empty placeholder
157
+ # just storing the parameters, not the coefficients
158
+ self._L = pari.lfuncreate([[], [], self.gammaV, self.weight,
159
+ self.conductor, self.eps])
160
+
161
+ def init_coeffs(self, v, w=1):
162
+ """
163
+ Set the coefficients `a_n` of the `L`-series.
164
+
165
+ If `L(s)` is not equal to its dual, pass the coefficients of
166
+ the dual as the second argument.
167
+
168
+ INPUT:
169
+
170
+ - ``v`` -- list of complex numbers or unary function
171
+
172
+ - ``w`` -- list of complex numbers or unary function
173
+
174
+ EXAMPLES::
175
+
176
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
177
+ sage: lf = lfun_generic(conductor=1, gammaV=[0, 1], weight=12, eps=1)
178
+ sage: pari_coeffs = pari('k->vector(k,n,(5*sigma(n,3)+7*sigma(n,5))*n/12 - 35*sum(k=1,n-1,(6*k-4*(n-k))*sigma(k,3)*sigma(n-k,5)))')
179
+ sage: lf.init_coeffs(pari_coeffs)
180
+
181
+ Evaluate the resulting `L`-function at a point, and compare with
182
+ the answer that one gets "by definition" (of `L`-function
183
+ attached to a modular form)::
184
+
185
+ sage: L = LFunction(lf)
186
+ sage: L(14)
187
+ 0.998583063162746
188
+ sage: a = delta_qexp(1000)
189
+ sage: sum(a[n]/float(n)^14 for n in reversed(range(1,1000)))
190
+ 0.9985830631627461
191
+
192
+ Illustrate that one can give a list of complex numbers for v
193
+ (see :issue:`10937`)::
194
+
195
+ sage: l2 = lfun_generic(conductor=1, gammaV=[0, 1], weight=12, eps=1)
196
+ sage: l2.init_coeffs(list(delta_qexp(1000))[1:])
197
+ sage: L2 = LFunction(l2)
198
+ sage: L2(14)
199
+ 0.998583063162746
200
+
201
+ TESTS:
202
+
203
+ Verify that setting the `w` parameter does not raise an error
204
+ (see :issue:`10937`)::
205
+
206
+ sage: L2 = lfun_generic(conductor=1, gammaV=[0, 1], weight=12, eps=1)
207
+ sage: L2.init_coeffs(list(delta_qexp(1000))[1:], w=[1..1000])
208
+ """
209
+ pv = pari(v)
210
+ if pv.type() not in ('t_CLOSURE', 't_VEC'):
211
+ raise TypeError("v (coefficients) must be a list or a function")
212
+
213
+ # w = 0 means a*_n = a_n
214
+ # w = 1 means a*_n = complex conjugate of a_n
215
+ # otherwise w must be a list of coefficients
216
+ pw = pari(w)
217
+ if pw.type() not in ('t_INT', 't_CLOSURE', 't_VEC'):
218
+ raise TypeError("w (dual coefficients) must be a list or a function or the special value 0 or 1")
219
+
220
+ if not self.poles:
221
+ self._L = pari.lfuncreate([pv, pw, self.gammaV, self.weight,
222
+ self.conductor, self.eps])
223
+ elif isinstance(self.residues, (list, tuple)):
224
+ # pari expects pairs (pole, polar part as power series),
225
+ # not residues
226
+ # moreover, they must be the poles and polar parts of the
227
+ # completed L-function (as t_Col)
228
+
229
+ # it could also be those of the bare L-function (as t_Vec)
230
+ # but we do not yet allow this
231
+ x = pari("x")
232
+ residues = (pari.Ser([r], "x", 1) / x for r in self.residues)
233
+ poles = tuple(pari.Col([b, Pb])
234
+ for b, Pb in zip(self.poles, residues))
235
+ self._L = pari.lfuncreate([pv, pw, self.gammaV, self.weight,
236
+ self.conductor, self.eps,
237
+ poles])
238
+ else:
239
+ # assuming a single pole
240
+ self._L = pari.lfuncreate([pv, pw, self.gammaV, self.weight,
241
+ self.conductor, self.eps,
242
+ self.poles[0]])
243
+
244
+ def __pari__(self):
245
+ """
246
+ Return the PARI `L`-function object.
247
+
248
+ EXAMPLES::
249
+
250
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
251
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1, eps=1,
252
+ ....: poles=[1], residues=[1])
253
+ sage: lf.__pari__()
254
+ [[Vecsmall([0]), []], [Vecsmall([0]), []], [0], 1, 1, 1]
255
+
256
+ sage: lf.init_coeffs([1]*2000)
257
+ sage: X = lf.__pari__()
258
+ sage: X.type()
259
+ 't_VEC'
260
+ """
261
+ return self._L
262
+
263
+
264
+ def lfun_character(chi):
265
+ """
266
+ Create the `L`-function of a primitive Dirichlet character.
267
+
268
+ If the given character is not primitive, it is replaced by its
269
+ associated primitive character.
270
+
271
+ OUTPUT: one :pari:`lfun` object
272
+
273
+ EXAMPLES::
274
+
275
+ sage: from sage.lfunctions.pari import lfun_character, LFunction
276
+ sage: chi = DirichletGroup(6).gen().primitive_character()
277
+ sage: L = LFunction(lfun_character(chi))
278
+ sage: L(3)
279
+ 0.884023811750080
280
+
281
+ TESTS:
282
+
283
+ A non-primitive one::
284
+
285
+ sage: L = LFunction(lfun_character(DirichletGroup(6).gen()))
286
+ sage: L(4)
287
+ 0.940025680877124
288
+
289
+ With complex arguments::
290
+
291
+ sage: from sage.lfunctions.pari import lfun_character, LFunction
292
+ sage: chi = DirichletGroup(6, CC).gen().primitive_character()
293
+ sage: L = LFunction(lfun_character(chi))
294
+ sage: L(3)
295
+ 0.884023811750080
296
+
297
+ Check the values::
298
+
299
+ sage: chi = DirichletGroup(24)([1, -1, -1]); chi
300
+ Dirichlet character modulo 24 of conductor 24
301
+ mapping 7 |--> 1, 13 |--> -1, 17 |--> -1
302
+ sage: Lchi = lfun_character(chi)
303
+ sage: v = [0] + Lchi.lfunan(30).sage()
304
+ sage: all(v[i] == chi(i) for i in (7, 13, 17))
305
+ True
306
+ """
307
+ if not chi.is_primitive():
308
+ chi = chi.primitive_character()
309
+ G, v = chi._pari_init_()
310
+ return pari.lfuncreate([G, v])
311
+
312
+
313
+ def lfun_hgm(motif, t):
314
+ """
315
+ Create the `L`-function of an hypergeometric motive.
316
+
317
+ OUTPUT: one :pari:`lfun` object
318
+
319
+ EXAMPLES::
320
+
321
+ sage: from sage.lfunctions.pari import lfun_hgm, LFunction
322
+ sage: from sage.modular.hypergeometric_motive import HypergeometricData as Hyp
323
+ sage: H = Hyp(gamma_list=([3,-1,-1,-1]))
324
+ sage: L = LFunction(lfun_hgm(H, 1/5))
325
+ sage: L(3)
326
+ 0.901925346034773
327
+ """
328
+ H = pari.hgminit(*motif.alpha_beta())
329
+ lf = pari.lfunhgm(H, t)
330
+ return pari.lfuncreate(lf)
331
+
332
+
333
+ def lfun_elliptic_curve(E):
334
+ """
335
+ Create the `L`-function of an elliptic curve.
336
+
337
+ OUTPUT: one :pari:`lfun` object
338
+
339
+ EXAMPLES::
340
+
341
+ sage: from sage.lfunctions.pari import lfun_elliptic_curve, LFunction
342
+
343
+ sage: # needs database_cremona_mini_ellcurve
344
+ sage: E = EllipticCurve('11a1')
345
+ sage: L = LFunction(lfun_elliptic_curve(E))
346
+ sage: L(3)
347
+ 0.752723147389051
348
+ sage: L(1)
349
+ 0.253841860855911
350
+
351
+ Over number fields::
352
+
353
+ sage: K.<a> = QuadraticField(2)
354
+ sage: E = EllipticCurve([1, a])
355
+ sage: L = LFunction(lfun_elliptic_curve(E))
356
+ sage: L(3)
357
+ 1.00412346717019
358
+ """
359
+ return pari.lfuncreate(E)
360
+
361
+
362
+ def lfun_number_field(K):
363
+ """
364
+ Create the Dedekind zeta function of a number field.
365
+
366
+ OUTPUT: one :pari:`lfun` object
367
+
368
+ EXAMPLES::
369
+
370
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
371
+ sage: L = LFunction(lfun_number_field(QQ))
372
+ sage: L(3)
373
+ 1.20205690315959
374
+
375
+ sage: x = polygen(QQ, 'x')
376
+ sage: K = NumberField(x**2 - 2, 'a')
377
+ sage: L = LFunction(lfun_number_field(K))
378
+ sage: L(3)
379
+ 1.15202784126080
380
+ sage: L(0)
381
+ ...0.000000000000000
382
+ """
383
+ return pari.lfuncreate(K)
384
+
385
+
386
+ def lfun_eta_quotient(scalings, exponents):
387
+ """
388
+ Return the `L`-function of an eta-quotient.
389
+
390
+ This uses :pari:`lfunetaquo`.
391
+
392
+ INPUT:
393
+
394
+ - ``scalings`` -- list of integers; the scaling factors
395
+
396
+ - ``exponents`` -- list of integers; the exponents
397
+
398
+ EXAMPLES::
399
+
400
+ sage: from sage.lfunctions.pari import lfun_eta_quotient, LFunction
401
+ sage: L = LFunction(lfun_eta_quotient([1], [24]))
402
+ sage: L(1)
403
+ 0.0374412812685155
404
+
405
+ sage: lfun_eta_quotient([6], [4])
406
+ [[Vecsmall([7]), [Vecsmall([6]), Vecsmall([4]), 0]], 0, [0, 1], 2, 36, 1]
407
+
408
+ sage: lfun_eta_quotient([2, 1, 4], [5, -2, -2])
409
+ Traceback (most recent call last):
410
+ ...
411
+ PariError: sorry, noncuspidal eta quotient is not yet implemented
412
+
413
+ TESTS::
414
+
415
+ sage: lfun_eta_quotient([2, 1, 4], [5])
416
+ Traceback (most recent call last):
417
+ ...
418
+ ValueError: arguments should have the same length
419
+ """
420
+ from sage.matrix.constructor import matrix
421
+ N = len(scalings)
422
+ if N != len(exponents):
423
+ raise ValueError('arguments should have the same length')
424
+ m = matrix(ZZ, N, 2, list(zip(scalings, exponents)))
425
+ return pari.lfunetaquo(m)
426
+
427
+
428
+ def lfun_delta():
429
+ """
430
+ Return the `L`-function of Ramanujan's Delta modular form.
431
+
432
+ EXAMPLES::
433
+
434
+ sage: from sage.lfunctions.pari import lfun_delta, LFunction
435
+ sage: L = LFunction(lfun_delta())
436
+ sage: L(1)
437
+ 0.0374412812685155
438
+ """
439
+ return lfun_eta_quotient([1], [24])
440
+
441
+
442
+ def lfun_eisenstein(j, algorithm="mf"):
443
+ """
444
+ Return the `L`-function of the Eisenstein form `E_j`.
445
+
446
+ INPUT:
447
+
448
+ - ``j`` -- an even integer, at least `4`
449
+
450
+ EXAMPLES::
451
+
452
+ sage: from sage.lfunctions.pari import lfun_eisenstein, LFunction
453
+ sage: L = LFunction(lfun_eisenstein(16))
454
+ sage: L(1)
455
+ -0.291657724743874
456
+ sage: L = LFunction(lfun_eisenstein(20))
457
+ sage: L(2)
458
+ -5.02355351645998
459
+
460
+ TESTS::
461
+
462
+ sage: from sage.lfunctions.pari import lfun_eisenstein, LFunction
463
+ sage: L = LFunction(lfun_eisenstein(16, "shift"))
464
+ sage: L(1)
465
+ -0.291657724743874
466
+ """
467
+ # this produces the function zeta(s) zeta(s-j+1)
468
+
469
+ if algorithm == "shift":
470
+ L = pari.lfunshift(1, j - 1, 1)
471
+ L[2] = [0, 1] # this is a hack, remove once no longer needed
472
+ return L
473
+
474
+ Ej = pari.mfEk(j)
475
+ Ej = pari.mflinear([Ej], [1 / pari.mfcoef(Ej, 1)]) # needed to scale
476
+ mf = pari.mfinit(Ej)
477
+ return pari.lfunmf(mf, Ej)
478
+
479
+
480
+ def lfun_modular_form(f):
481
+ """
482
+ Return the `L`-function of the modular form `f`.
483
+
484
+ INPUT:
485
+
486
+ - `f` -- a modular form
487
+
488
+ EXAMPLES::
489
+
490
+ sage: from sage.lfunctions.pari import lfun_modular_form, LFunction
491
+ sage: h = Newforms(37)[1]
492
+ sage: L = LFunction(lfun_modular_form(h))
493
+ sage: L(1)
494
+ 0.725681061936153
495
+ """
496
+ mf = pari.mfinit(f)
497
+ return pari.lfunmf(mf, f)
498
+
499
+
500
+ def lfun_quadratic_form(qf):
501
+ """
502
+ Return the `L`-function of a positive definite quadratic form.
503
+
504
+ This uses :pari:`lfunqf`.
505
+
506
+ EXAMPLES::
507
+
508
+ sage: from sage.lfunctions.pari import lfun_quadratic_form, LFunction
509
+ sage: Q = QuadraticForm(ZZ, 2, [2, 3, 4])
510
+ sage: L = LFunction(lfun_quadratic_form(Q))
511
+ sage: L(3)
512
+ 0.377597233183583
513
+ """
514
+ if not qf.is_positive_definite():
515
+ raise ValueError('quadratic form must be positive definite')
516
+ return pari.lfunqf(qf.matrix())
517
+
518
+
519
+ def lfun_genus2(C):
520
+ """
521
+ Return the `L`-function of a curve of genus 2.
522
+
523
+ INPUT:
524
+
525
+ - ``C`` -- hyperelliptic curve of genus 2
526
+
527
+ Currently, the model needs to be minimal at 2.
528
+
529
+ This uses :pari:`lfungenus2`.
530
+
531
+ EXAMPLES::
532
+
533
+ sage: from sage.lfunctions.pari import lfun_genus2, LFunction
534
+ sage: x = polygen(QQ, 'x')
535
+ sage: C = HyperellipticCurve(x^5 + x + 1)
536
+ sage: L = LFunction(lfun_genus2(C)) # this one is broken
537
+ ...
538
+ sage: L(3)
539
+ 0.965946926261520
540
+
541
+ sage: C = HyperellipticCurve(x^2 + x, x^3 + x^2 + 1)
542
+ sage: L = LFunction(lfun_genus2(C))
543
+ sage: L(2)
544
+ 0.364286342944359
545
+
546
+ TESTS::
547
+
548
+ sage: x = polygen(QQ, 'x')
549
+ sage: H = HyperellipticCurve(x^15 + x + 1)
550
+ sage: L = LFunction(lfun_genus2(H))
551
+ Traceback (most recent call last):
552
+ ...
553
+ ValueError: curve must be hyperelliptic of genus 2
554
+ """
555
+ from sage.schemes.hyperelliptic_curves.hyperelliptic_g2 import HyperellipticCurve_g2 as hyp_g2
556
+ if not isinstance(C, hyp_g2):
557
+ raise ValueError('curve must be hyperelliptic of genus 2')
558
+ P, Q = C.hyperelliptic_polynomials()
559
+ return pari.lfungenus2(P) if not Q else pari.lfungenus2([P, Q])
560
+
561
+
562
+ class LFunction(SageObject):
563
+ r"""
564
+ Build the `L`-function from a PARI `L`-function.
565
+
566
+ .. RUBRIC:: Rank 1 elliptic curve
567
+
568
+ We compute with the `L`-series of a rank `1` curve. ::
569
+
570
+ sage: # needs database_cremona_mini_ellcurve
571
+ sage: E = EllipticCurve('37a')
572
+ sage: L = E.lseries().dokchitser(algorithm='pari'); L
573
+ PARI L-function associated to Elliptic Curve defined by
574
+ y^2 + y = x^3 - x over Rational Field
575
+ sage: L(1)
576
+ 0.000000000000000
577
+ sage: L.derivative(1)
578
+ 0.305999773834052
579
+ sage: L.derivative(1, 2)
580
+ 0.373095594536324
581
+ sage: L.cost()
582
+ 50
583
+ sage: L.taylor_series(1, 4)
584
+ 0.000000000000000 + 0.305999773834052*z + 0.186547797268162*z^2
585
+ - 0.136791463097188*z^3 + O(z^4)
586
+ sage: L.check_functional_equation() # abs tol 4e-19
587
+ 1.08420217248550e-19
588
+
589
+ .. RUBRIC:: Rank 2 elliptic curve
590
+
591
+ We compute the leading coefficient and Taylor expansion of the
592
+ `L`-series of a rank `2` elliptic curve::
593
+
594
+ sage: # needs database_cremona_mini_ellcurve
595
+ sage: E = EllipticCurve('389a')
596
+ sage: L = E.lseries().dokchitser(algorithm='pari')
597
+ sage: L.cost()
598
+ 163
599
+ sage: L.derivative(1, E.rank())
600
+ 1.51863300057685
601
+ sage: L.taylor_series(1, 4)
602
+ ...e-19 + (...e-19)*z + 0.759316500288427*z^2 - 0.430302337583362*z^3 + O(z^4)
603
+
604
+ .. RUBRIC:: Number field
605
+
606
+ We compute with the Dedekind zeta function of a number field::
607
+
608
+ sage: x = polygen(QQ, 'x')
609
+ sage: K = NumberField(x**4 - x**2 - 1,'a')
610
+ sage: L = K.zeta_function(algorithm='pari')
611
+ sage: L.conductor
612
+ 400
613
+ sage: L.cost()
614
+ 313
615
+ sage: L(2)
616
+ 1.10398438736918
617
+ sage: L.taylor_series(2, 3)
618
+ 1.10398438736918 - 0.215822638498759*z + 0.279836437522536*z^2 + O(z^3)
619
+
620
+ .. RUBRIC:: Ramanujan `\Delta` L-function
621
+
622
+ The coefficients are given by Ramanujan's tau function::
623
+
624
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
625
+ sage: lf = lfun_generic(conductor=1, gammaV=[0, 1], weight=12, eps=1)
626
+ sage: tau = pari('k->vector(k,n,(5*sigma(n,3)+7*sigma(n,5))*n/12 - 35*sum(k=1,n-1,(6*k-4*(n-k))*sigma(k,3)*sigma(n-k,5)))')
627
+ sage: lf.init_coeffs(tau)
628
+ sage: L = LFunction(lf)
629
+
630
+ Now we are ready to evaluate, etc. ::
631
+
632
+ sage: L(1)
633
+ 0.0374412812685155
634
+ sage: L.taylor_series(1, 3)
635
+ 0.0374412812685155 + 0.0709221123619322*z + 0.0380744761270520*z^2 + O(z^3)
636
+ """
637
+ def __init__(self, lfun, prec=None, max_im=1) -> None:
638
+ """
639
+ Initialization of the `L`-function from a PARI `L`-function.
640
+
641
+ INPUT:
642
+
643
+ - ``lfun`` -- a PARI :pari:`lfun` object or an instance of :class:`lfun_generic`
644
+ - ``prec`` -- integer (default: 53); number of *bits* of precision
645
+
646
+ - ``max_im`` -- real (default: 1); maximal imaginary part
647
+
648
+ EXAMPLES::
649
+
650
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
651
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1, eps=1, poles=[1], residues=[-1], v=pari('k->vector(k,n,1)'))
652
+ sage: L = LFunction(lf)
653
+ sage: L.cost()
654
+ 4
655
+ """
656
+ if isinstance(lfun, lfun_generic):
657
+ # preparation using motivic data
658
+ self._L = lfun.__pari__()
659
+ elif isinstance(lfun, Gen):
660
+ # already some PARI lfun
661
+ self._L = lfun
662
+ else:
663
+ # create a PARI lfunction from other input data
664
+ self._L = pari.lfuncreate(lfun)
665
+
666
+ self._conductor = ZZ(self._L[4])
667
+ self._weight = ZZ(self._L[3])
668
+
669
+ self._max_im = max_im
670
+
671
+ if prec is None:
672
+ self.prec = 53
673
+ else:
674
+ self.prec = PyNumber_Index(prec)
675
+ self._RR = RealField(self.prec)
676
+ self._CC = ComplexField(self.prec)
677
+ # Complex field used for inputs, which ensures exact 1-to-1
678
+ # conversion to/from PARI. Since PARI objects have a precision
679
+ # in machine words (not bits), this is typically higher. For
680
+ # example, the default of 53 bits of precision would become 64.
681
+ self._CCin = ComplexField(pari.bitprecision(self._RR(1)))
682
+
683
+ def _repr_(self) -> str:
684
+ """
685
+ EXAMPLES::
686
+
687
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
688
+ sage: L = LFunction(lfun_number_field(QQ)); L
689
+ L-series of conductor 1 and weight 1
690
+ """
691
+ return "L-series of conductor %s and weight %s" % (self._conductor,
692
+ self._weight)
693
+
694
+ @property
695
+ def conductor(self):
696
+ """
697
+ Return the conductor.
698
+
699
+ EXAMPLES::
700
+
701
+ sage: from sage.lfunctions.pari import *
702
+ sage: L = LFunction(lfun_number_field(QQ)); L.conductor
703
+ 1
704
+ sage: E = EllipticCurve('11a') # needs database_cremona_mini_ellcurve
705
+ sage: L = LFunction(lfun_number_field(E)); L.conductor # needs database_cremona_mini_ellcurve
706
+ 11
707
+ """
708
+ return self._conductor
709
+
710
+ def cost(self, domain=None):
711
+ """
712
+ Return number of coefficients `a_n` that are needed in
713
+ order to perform most relevant `L`-function computations to
714
+ the desired precision.
715
+
716
+ INPUT:
717
+
718
+ - ``domain`` -- optional triple (center, width, height)
719
+
720
+ The domain is then a rectangle around the real point ``center``
721
+ with size ``2*width`` and ``2*height``.
722
+
723
+ For computation with real arguments, one should set ``height`` to zero.
724
+
725
+ EXAMPLES::
726
+
727
+ sage: # needs database_cremona_mini_ellcurve
728
+ sage: E = EllipticCurve('11a')
729
+ sage: L = E.lseries().dokchitser(algorithm='pari')
730
+ sage: L.cost()
731
+ 27
732
+ sage: E = EllipticCurve('5077a')
733
+ sage: L = E.lseries().dokchitser(algorithm='pari')
734
+ sage: L.cost()
735
+ 591
736
+
737
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
738
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1, eps=1,
739
+ ....: poles=[1], residues=[-1], v=pari('k->vector(k,n,1)'))
740
+ sage: L = LFunction(lf)
741
+ sage: L.cost()
742
+ 4
743
+ """
744
+ # domain syntax :
745
+ # [center, width, height]
746
+ # or [h] then [k/2, 0, h]
747
+ # or [w, h] then [k/2, w, h]
748
+ # where k/2 is the real point of the symmetry line
749
+
750
+ if domain is None:
751
+ domain = [self._weight / 2, self._max_im]
752
+
753
+ # it could be that this precision-manipulation is useless
754
+ saved_prec = pari.default("realbitprecision")
755
+ pari.default("realbitprecision", self.prec)
756
+ num = ZZ(pari.lfuncost(self._L, domain)[0])
757
+ pari.default("realbitprecision", saved_prec)
758
+
759
+ return num
760
+
761
+ num_coeffs = cost
762
+
763
+ def Lambda(self, s):
764
+ """
765
+ Evaluate the completed `L`-function at s.
766
+
767
+ EXAMPLES::
768
+
769
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
770
+ sage: L = LFunction(lfun_number_field(QQ))
771
+ sage: L.Lambda(2)
772
+ 0.523598775598299
773
+ sage: L.Lambda(1 - 2)
774
+ 0.523598775598299
775
+ """
776
+ s = self._CCin(s)
777
+ R = self._CC
778
+ return R(pari.lfunlambda(self._L, s, precision=self.prec))
779
+
780
+ def hardy(self, t):
781
+ """
782
+ Evaluate the associated Hardy function at t.
783
+
784
+ This only works for real t.
785
+
786
+ EXAMPLES::
787
+
788
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
789
+ sage: L = LFunction(lfun_number_field(QQ))
790
+ sage: L.hardy(2)
791
+ -0.962008487244041
792
+
793
+ TESTS::
794
+
795
+ sage: L.hardy(.4 + .3*I)
796
+ Traceback (most recent call last):
797
+ ...
798
+ PariError: incorrect type in lfunhardy (t_COMPLEX)
799
+ """
800
+ t = self._CCin(t)
801
+ R = self._RR
802
+ return R(pari.lfunhardy(self._L, t, precision=self.prec))
803
+
804
+ def derivative(self, s, D=1):
805
+ """
806
+ Return the derivative of the `L`-function at point s and order D.
807
+
808
+ INPUT:
809
+
810
+ - ``s`` -- complex number
811
+
812
+ - ``D`` -- integer (default: 1)
813
+
814
+ EXAMPLES::
815
+
816
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
817
+ sage: L = LFunction(lfun_number_field(QQ))
818
+ sage: L.derivative(2)
819
+ -0.937548254315844
820
+ """
821
+ s = self._CCin(s)
822
+ R = self._CC
823
+ return R(pari.lfun(self._L, s, D, precision=self.prec))
824
+
825
+ def taylor_series(self, s, k=6, var='z'):
826
+ r"""
827
+ Return the first `k` terms of the Taylor series expansion
828
+ of the `L`-series about `s`.
829
+
830
+ This is returned as a formal power series in ``var``.
831
+
832
+ INPUT:
833
+
834
+ - ``s`` -- complex number; point about which to expand
835
+
836
+ - ``k`` -- integer (default: 6); series is `O(``var``^k)`
837
+
838
+ - ``var`` -- string (default: ``'z'``); variable of power series
839
+
840
+ EXAMPLES::
841
+
842
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
843
+ sage: lf = lfun_number_field(QQ)
844
+ sage: L = LFunction(lf)
845
+ sage: L.taylor_series(2, 3)
846
+ 1.64493406684823 - 0.937548254315844*z + 0.994640117149451*z^2 + O(z^3)
847
+
848
+ sage: # needs database_cremona_mini_ellcurve
849
+ sage: E = EllipticCurve('37a')
850
+ sage: L = E.lseries().dokchitser(algorithm='pari')
851
+ sage: L.taylor_series(1)
852
+ 0.000000000000000 + 0.305999773834052*z + 0.186547797268162*z^2
853
+ - 0.136791463097188*z^3 + 0.0161066468496401*z^4 + 0.0185955175398802*z^5 + O(z^6)
854
+
855
+ We compute a Taylor series where each coefficient is to high
856
+ precision::
857
+
858
+ sage: # needs database_cremona_mini_ellcurve
859
+ sage: E = EllipticCurve('389a')
860
+ sage: L = E.lseries().dokchitser(200,algorithm='pari')
861
+ sage: L.taylor_series(1, 3)
862
+ 2...e-63 + (...e-63)*z + 0.75931650028842677023019260789472201907809751649492435158581*z^2 + O(z^3)
863
+
864
+ Check that :issue:`25402` is fixed::
865
+
866
+ sage: # needs database_cremona_mini_ellcurve
867
+ sage: L = EllipticCurve("24a1").modular_form().lseries()
868
+ sage: L.taylor_series(-1, 3)
869
+ 0.000000000000000 - 0.702565506265199*z + 0.638929001045535*z^2 + O(z^3)
870
+ """
871
+ pt = pari.Ser([s, 1], d=k) # s + x + O(x^k)
872
+ B = PowerSeriesRing(self._CC, var)
873
+ return B(pari.lfun(self._L, pt, precision=self.prec))
874
+
875
+ def zeros(self, maxi):
876
+ """
877
+ Return the zeros with imaginary part bounded by ``maxi``.
878
+
879
+ EXAMPLES::
880
+
881
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
882
+ sage: lf = lfun_number_field(QQ)
883
+ sage: L = LFunction(lf)
884
+ sage: L.zeros(20)
885
+ [14.1347251417347]
886
+ """
887
+ R = self._CC
888
+ return [R(z) for z in pari.lfunzeros(self._L, maxi)]
889
+
890
+ def _clear_value_cache(self) -> None:
891
+ """
892
+ Clear the cache where values of the function are stored.
893
+
894
+ EXAMPLES::
895
+
896
+ sage: from sage.lfunctions.pari import lfun_number_field, LFunction
897
+ sage: lf = lfun_number_field(QQ)
898
+ sage: L = LFunction(lf)
899
+ sage: L(4)
900
+ 1.08232323371114
901
+ sage: L._clear_value_cache()
902
+ """
903
+ del self.__values
904
+
905
+ def __call__(self, s):
906
+ r"""
907
+ Return the value of the `L`-function at point ``s``.
908
+
909
+ INPUT:
910
+
911
+ - ``s`` -- complex number
912
+
913
+ .. NOTE::
914
+
915
+ Evaluation of the function takes a long time, so each
916
+ evaluation is cached. Call :meth:`_clear_value_cache` to
917
+ clear the evaluation cache.
918
+
919
+ EXAMPLES::
920
+
921
+ sage: # needs database_cremona_mini_ellcurve
922
+ sage: E = EllipticCurve('5077a')
923
+ sage: L = E.lseries().dokchitser(100, algorithm='pari')
924
+ sage: L(1)
925
+ 0.00000000000000000000000000000
926
+ sage: L(1 + I)
927
+ -1.3085436607849493358323930438 + 0.81298000036784359634835412129*I
928
+ """
929
+ s = self._CC(s)
930
+ try:
931
+ return self.__values[s]
932
+ except AttributeError:
933
+ self.__values = {}
934
+ except KeyError:
935
+ pass
936
+ try:
937
+ value = self._CC(pari.lfun(self._L, s, precision=self.prec))
938
+ except NameError:
939
+ raise ArithmeticError('pole here')
940
+ else:
941
+ return value
942
+
943
+ def check_functional_equation(self):
944
+ r"""
945
+ Verify how well numerically the functional equation is satisfied.
946
+
947
+ If what this function returns does not look like 0 at all,
948
+ probably the functional equation is wrong, i.e. some of the
949
+ parameters gammaV, conductor, etc., or the coefficients are wrong.
950
+
951
+ EXAMPLES::
952
+
953
+ sage: from sage.lfunctions.pari import lfun_generic, LFunction
954
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1, eps=1,
955
+ ....: poles=[1], residues=[1], v=pari('k->vector(k,n,1)'))
956
+ sage: L = LFunction(lf)
957
+ sage: L.check_functional_equation()
958
+ 4.33680868994202e-19
959
+
960
+ If we choose the sign in functional equation for the
961
+ `\zeta` function incorrectly, the functional equation
962
+ does not check out::
963
+
964
+ sage: lf = lfun_generic(conductor=1, gammaV=[0], weight=1,
965
+ ....: eps=-1, poles=[1], residues=[1])
966
+ sage: lf.init_coeffs([1]*2000)
967
+ sage: L = LFunction(lf)
968
+ sage: L.check_functional_equation()
969
+ 16.0000000000000
970
+ """
971
+ return self._RR(2)**pari.lfuncheckfeq(self._L)