passagemath-schemes 10.6.47__cp312-cp312-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 (311) 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.6.47.dist-info/METADATA +204 -0
  7. passagemath_schemes-10.6.47.dist-info/METADATA.bak +205 -0
  8. passagemath_schemes-10.6.47.dist-info/RECORD +311 -0
  9. passagemath_schemes-10.6.47.dist-info/WHEEL +6 -0
  10. passagemath_schemes-10.6.47.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 +9558 -0
  24. sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-312-darwin.so +0 -0
  25. sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
  26. sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
  27. sage/lfunctions/all.py +18 -0
  28. sage/lfunctions/dokchitser.py +745 -0
  29. sage/lfunctions/pari.py +818 -0
  30. sage/lfunctions/zero_sums.cpython-312-darwin.so +0 -0
  31. sage/lfunctions/zero_sums.pyx +1847 -0
  32. sage/modular/abvar/abvar.py +5135 -0
  33. sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
  34. sage/modular/abvar/abvar_newform.py +244 -0
  35. sage/modular/abvar/all.py +8 -0
  36. sage/modular/abvar/constructor.py +186 -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 +720 -0
  40. sage/modular/abvar/homspace.py +998 -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 +740 -0
  45. sage/modular/all.py +43 -0
  46. sage/modular/arithgroup/all.py +20 -0
  47. sage/modular/arithgroup/arithgroup_element.cpython-312-darwin.so +0 -0
  48. sage/modular/arithgroup/arithgroup_element.pyx +474 -0
  49. sage/modular/arithgroup/arithgroup_generic.py +1402 -0
  50. sage/modular/arithgroup/arithgroup_perm.py +2692 -0
  51. sage/modular/arithgroup/congroup.cpython-312-darwin.so +0 -0
  52. sage/modular/arithgroup/congroup.pyx +334 -0
  53. sage/modular/arithgroup/congroup_gamma.py +363 -0
  54. sage/modular/arithgroup/congroup_gamma0.py +692 -0
  55. sage/modular/arithgroup/congroup_gamma1.py +653 -0
  56. sage/modular/arithgroup/congroup_gammaH.py +1469 -0
  57. sage/modular/arithgroup/congroup_generic.py +628 -0
  58. sage/modular/arithgroup/congroup_sl2z.py +267 -0
  59. sage/modular/arithgroup/farey_symbol.cpython-312-darwin.so +0 -0
  60. sage/modular/arithgroup/farey_symbol.pyx +1066 -0
  61. sage/modular/arithgroup/tests.py +418 -0
  62. sage/modular/btquotients/all.py +4 -0
  63. sage/modular/btquotients/btquotient.py +3753 -0
  64. sage/modular/btquotients/pautomorphicform.py +2570 -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 +1109 -0
  69. sage/modular/cusps_nf.py +1270 -0
  70. sage/modular/dims.py +569 -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 +1065 -0
  77. sage/modular/hecke/algebra.py +746 -0
  78. sage/modular/hecke/all.py +20 -0
  79. sage/modular/hecke/ambient_module.py +1019 -0
  80. sage/modular/hecke/degenmap.py +119 -0
  81. sage/modular/hecke/element.py +325 -0
  82. sage/modular/hecke/hecke_operator.py +780 -0
  83. sage/modular/hecke/homspace.py +206 -0
  84. sage/modular/hecke/module.py +1767 -0
  85. sage/modular/hecke/morphism.py +174 -0
  86. sage/modular/hecke/submodule.py +989 -0
  87. sage/modular/hypergeometric_misc.cpython-312-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 +2017 -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 +1071 -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 +815 -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 +124 -0
  101. sage/modular/modform/ambient_g1.py +204 -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 +505 -0
  106. sage/modular/modform/eisenstein_submodule.py +663 -0
  107. sage/modular/modform/element.py +4131 -0
  108. sage/modular/modform/find_generators.py +59 -0
  109. sage/modular/modform/half_integral.py +154 -0
  110. sage/modular/modform/hecke_operator_on_qexp.py +247 -0
  111. sage/modular/modform/j_invariant.py +47 -0
  112. sage/modular/modform/l_series_gross_zagier.py +133 -0
  113. sage/modular/modform/l_series_gross_zagier_coeffs.cpython-312-darwin.so +0 -0
  114. sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
  115. sage/modular/modform/notes.py +45 -0
  116. sage/modular/modform/numerical.py +514 -0
  117. sage/modular/modform/periods.py +14 -0
  118. sage/modular/modform/ring.py +1257 -0
  119. sage/modular/modform/space.py +1860 -0
  120. sage/modular/modform/submodule.py +118 -0
  121. sage/modular/modform/tests.py +64 -0
  122. sage/modular/modform/theta.py +110 -0
  123. sage/modular/modform/vm_basis.py +381 -0
  124. sage/modular/modform/weight1.py +220 -0
  125. sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
  126. sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
  127. sage/modular/modform_hecketriangle/all.py +30 -0
  128. sage/modular/modform_hecketriangle/analytic_type.py +590 -0
  129. sage/modular/modform_hecketriangle/constructor.py +416 -0
  130. sage/modular/modform_hecketriangle/element.py +351 -0
  131. sage/modular/modform_hecketriangle/functors.py +752 -0
  132. sage/modular/modform_hecketriangle/graded_ring.py +541 -0
  133. sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
  134. sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
  135. sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
  136. sage/modular/modform_hecketriangle/readme.py +1214 -0
  137. sage/modular/modform_hecketriangle/series_constructor.py +580 -0
  138. sage/modular/modform_hecketriangle/space.py +1037 -0
  139. sage/modular/modform_hecketriangle/subspace.py +423 -0
  140. sage/modular/modsym/all.py +17 -0
  141. sage/modular/modsym/ambient.py +3846 -0
  142. sage/modular/modsym/boundary.py +1420 -0
  143. sage/modular/modsym/element.py +336 -0
  144. sage/modular/modsym/g1list.py +178 -0
  145. sage/modular/modsym/ghlist.py +182 -0
  146. sage/modular/modsym/hecke_operator.py +73 -0
  147. sage/modular/modsym/manin_symbol.cpython-312-darwin.so +0 -0
  148. sage/modular/modsym/manin_symbol.pxd +5 -0
  149. sage/modular/modsym/manin_symbol.pyx +497 -0
  150. sage/modular/modsym/manin_symbol_list.py +1295 -0
  151. sage/modular/modsym/modsym.py +400 -0
  152. sage/modular/modsym/modular_symbols.py +384 -0
  153. sage/modular/modsym/p1list_nf.py +1241 -0
  154. sage/modular/modsym/relation_matrix.py +591 -0
  155. sage/modular/modsym/relation_matrix_pyx.cpython-312-darwin.so +0 -0
  156. sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
  157. sage/modular/modsym/space.py +2468 -0
  158. sage/modular/modsym/subspace.py +455 -0
  159. sage/modular/modsym/tests.py +375 -0
  160. sage/modular/multiple_zeta.py +2632 -0
  161. sage/modular/multiple_zeta_F_algebra.py +786 -0
  162. sage/modular/overconvergent/all.py +6 -0
  163. sage/modular/overconvergent/genus0.py +1878 -0
  164. sage/modular/overconvergent/hecke_series.py +1187 -0
  165. sage/modular/overconvergent/weightspace.py +778 -0
  166. sage/modular/pollack_stevens/all.py +4 -0
  167. sage/modular/pollack_stevens/distributions.py +874 -0
  168. sage/modular/pollack_stevens/fund_domain.py +1572 -0
  169. sage/modular/pollack_stevens/manin_map.py +859 -0
  170. sage/modular/pollack_stevens/modsym.py +1593 -0
  171. sage/modular/pollack_stevens/padic_lseries.py +417 -0
  172. sage/modular/pollack_stevens/sigma0.py +534 -0
  173. sage/modular/pollack_stevens/space.py +1076 -0
  174. sage/modular/quasimodform/all.py +3 -0
  175. sage/modular/quasimodform/element.py +845 -0
  176. sage/modular/quasimodform/ring.py +828 -0
  177. sage/modular/quatalg/all.py +3 -0
  178. sage/modular/quatalg/brandt.py +1642 -0
  179. sage/modular/ssmod/all.py +8 -0
  180. sage/modular/ssmod/ssmod.py +827 -0
  181. sage/rings/all__sagemath_schemes.py +1 -0
  182. sage/rings/polynomial/all__sagemath_schemes.py +1 -0
  183. sage/rings/polynomial/binary_form_reduce.py +585 -0
  184. sage/schemes/all.py +41 -0
  185. sage/schemes/berkovich/all.py +6 -0
  186. sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
  187. sage/schemes/berkovich/berkovich_space.py +748 -0
  188. sage/schemes/curves/affine_curve.py +2928 -0
  189. sage/schemes/curves/all.py +33 -0
  190. sage/schemes/curves/closed_point.py +434 -0
  191. sage/schemes/curves/constructor.py +381 -0
  192. sage/schemes/curves/curve.py +542 -0
  193. sage/schemes/curves/plane_curve_arrangement.py +1283 -0
  194. sage/schemes/curves/point.py +463 -0
  195. sage/schemes/curves/projective_curve.py +3026 -0
  196. sage/schemes/curves/zariski_vankampen.py +1932 -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 +1036 -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 +1102 -0
  208. sage/schemes/elliptic_curves/constructor.py +1552 -0
  209. sage/schemes/elliptic_curves/ec_database.py +175 -0
  210. sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
  211. sage/schemes/elliptic_curves/ell_egros.py +459 -0
  212. sage/schemes/elliptic_curves/ell_field.py +2836 -0
  213. sage/schemes/elliptic_curves/ell_finite_field.py +3359 -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 +4787 -0
  220. sage/schemes/elliptic_curves/ell_rational_field.py +7368 -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 +1669 -0
  227. sage/schemes/elliptic_curves/gp_simon.py +152 -0
  228. sage/schemes/elliptic_curves/heegner.py +7335 -0
  229. sage/schemes/elliptic_curves/height.py +2109 -0
  230. sage/schemes/elliptic_curves/hom.py +1406 -0
  231. sage/schemes/elliptic_curves/hom_composite.py +934 -0
  232. sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
  233. sage/schemes/elliptic_curves/hom_scalar.py +531 -0
  234. sage/schemes/elliptic_curves/hom_sum.py +682 -0
  235. sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
  236. sage/schemes/elliptic_curves/homset.py +271 -0
  237. sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
  238. sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
  239. sage/schemes/elliptic_curves/jacobian.py +237 -0
  240. sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
  241. sage/schemes/elliptic_curves/kraus.py +1014 -0
  242. sage/schemes/elliptic_curves/lseries_ell.py +943 -0
  243. sage/schemes/elliptic_curves/mod5family.py +105 -0
  244. sage/schemes/elliptic_curves/mod_poly.py +197 -0
  245. sage/schemes/elliptic_curves/mod_sym_num.cpython-312-darwin.so +0 -0
  246. sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
  247. sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
  248. sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
  249. sage/schemes/elliptic_curves/padics.py +1816 -0
  250. sage/schemes/elliptic_curves/period_lattice.py +2234 -0
  251. sage/schemes/elliptic_curves/period_lattice_region.cpython-312-darwin.so +0 -0
  252. sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
  253. sage/schemes/elliptic_curves/saturation.py +715 -0
  254. sage/schemes/elliptic_curves/sha_tate.py +1158 -0
  255. sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
  256. sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
  257. sage/schemes/hyperelliptic_curves/all.py +6 -0
  258. sage/schemes/hyperelliptic_curves/constructor.py +291 -0
  259. sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
  260. sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
  261. sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
  262. sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
  263. sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
  264. sage/schemes/hyperelliptic_curves/invariants.py +410 -0
  265. sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
  266. sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
  267. sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
  268. sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
  269. sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
  270. sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
  271. sage/schemes/hyperelliptic_curves/mestre.py +302 -0
  272. sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
  273. sage/schemes/jacobians/abstract_jacobian.py +277 -0
  274. sage/schemes/jacobians/all.py +2 -0
  275. sage/schemes/overview.py +161 -0
  276. sage/schemes/plane_conics/all.py +22 -0
  277. sage/schemes/plane_conics/con_field.py +1296 -0
  278. sage/schemes/plane_conics/con_finite_field.py +158 -0
  279. sage/schemes/plane_conics/con_number_field.py +456 -0
  280. sage/schemes/plane_conics/con_rational_field.py +406 -0
  281. sage/schemes/plane_conics/con_rational_function_field.py +580 -0
  282. sage/schemes/plane_conics/constructor.py +249 -0
  283. sage/schemes/plane_quartics/all.py +2 -0
  284. sage/schemes/plane_quartics/quartic_constructor.py +71 -0
  285. sage/schemes/plane_quartics/quartic_generic.py +73 -0
  286. sage/schemes/riemann_surfaces/all.py +1 -0
  287. sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
  288. sage_wheels/share/cremona/cremona_mini.db +0 -0
  289. sage_wheels/share/ellcurves/rank0 +30427 -0
  290. sage_wheels/share/ellcurves/rank1 +31871 -0
  291. sage_wheels/share/ellcurves/rank10 +6 -0
  292. sage_wheels/share/ellcurves/rank11 +6 -0
  293. sage_wheels/share/ellcurves/rank12 +1 -0
  294. sage_wheels/share/ellcurves/rank14 +1 -0
  295. sage_wheels/share/ellcurves/rank15 +1 -0
  296. sage_wheels/share/ellcurves/rank17 +1 -0
  297. sage_wheels/share/ellcurves/rank19 +1 -0
  298. sage_wheels/share/ellcurves/rank2 +2388 -0
  299. sage_wheels/share/ellcurves/rank20 +1 -0
  300. sage_wheels/share/ellcurves/rank21 +1 -0
  301. sage_wheels/share/ellcurves/rank22 +1 -0
  302. sage_wheels/share/ellcurves/rank23 +1 -0
  303. sage_wheels/share/ellcurves/rank24 +1 -0
  304. sage_wheels/share/ellcurves/rank28 +1 -0
  305. sage_wheels/share/ellcurves/rank3 +836 -0
  306. sage_wheels/share/ellcurves/rank4 +10 -0
  307. sage_wheels/share/ellcurves/rank5 +5 -0
  308. sage_wheels/share/ellcurves/rank6 +5 -0
  309. sage_wheels/share/ellcurves/rank7 +5 -0
  310. sage_wheels/share/ellcurves/rank8 +6 -0
  311. sage_wheels/share/ellcurves/rank9 +7 -0
@@ -0,0 +1,748 @@
1
+ # sage_setup: distribution = sagemath-schemes
2
+ # sage.doctest: needs sage.rings.padics
3
+ r"""
4
+ Berkovich Space over `\CC_p`
5
+
6
+ The Berkovich affine line is the set of seminorms on `\CC_p[x]`,
7
+ with the weakest topology that makes the map `| \cdot | \to |f|` continuous
8
+ for all `f \in \CC_p[x]`. The Berkovich projective line is the
9
+ one-point compactification of the Berkovich affine line.
10
+
11
+ The two main classes are :class:`Berkovich_Cp_Affine` and
12
+ :class:`Berkovich_Cp_Projective`, which implement the affine and
13
+ projective lines, respectively.
14
+
15
+ :class:`Berkovich_Cp_Affine` and :class:`Berkovich_Cp_Projective`
16
+ take as input one of the following: the prime `p`, a finite
17
+ extension of `\QQ_p`, or a number field and a place.
18
+
19
+ For an exposition of Berkovich space over `\CC_p`, see Chapter 6 of [Ben2019]_. For a more
20
+ involved exposition, see Chapter 1 and 2 of [BR2010]_.
21
+
22
+ AUTHORS:
23
+
24
+ - Alexander Galarraga (2020-06-22): initial implementation
25
+ """
26
+
27
+ # ****************************************************************************
28
+ # This program is free software: you can redistribute it and/or modify
29
+ # it under the terms of the GNU General Public License as published by
30
+ # the Free Software Foundation, either version 2 of the License, or
31
+ # (at your option) any later version.
32
+ # https://www.gnu.org/licenses/
33
+ # ****************************************************************************
34
+
35
+ import sage.rings.abc
36
+
37
+ from sage.categories.number_fields import NumberFields
38
+ from sage.categories.topological_spaces import TopologicalSpaces
39
+ from sage.misc.lazy_import import lazy_import
40
+ from sage.rings.integer_ring import ZZ
41
+ from sage.rings.rational_field import QQ
42
+ from sage.schemes.affine.affine_space import AffineSpace_generic
43
+ from sage.schemes.berkovich.berkovich_cp_element import (Berkovich_Element_Cp_Affine,
44
+ Berkovich_Element_Cp_Projective)
45
+ from sage.schemes.projective.projective_space import ProjectiveSpace_ring, ProjectiveSpace
46
+ from sage.structure.parent import Parent
47
+ from sage.structure.unique_representation import UniqueRepresentation
48
+
49
+ lazy_import('sage.rings.number_field.number_field_ideal', 'NumberFieldFractionalIdeal')
50
+
51
+
52
+ def is_Berkovich(space) -> bool:
53
+ """
54
+ Check if ``space`` is a Berkovich space.
55
+
56
+ OUTPUT:
57
+
58
+ - ``True`` if ``space`` is a Berkovich space.
59
+ - ``False`` otherwise.
60
+
61
+ EXAMPLES::
62
+
63
+ sage: B = Berkovich_Cp_Projective(3)
64
+ sage: from sage.schemes.berkovich.berkovich_space import is_Berkovich
65
+ sage: is_Berkovich(B)
66
+ doctest:warning...
67
+ DeprecationWarning: The function is_Berkovich is deprecated; use 'isinstance(..., Berkovich)' instead.
68
+ See https://github.com/sagemath/sage/issues/38022 for details.
69
+ True
70
+ """
71
+ from sage.misc.superseded import deprecation
72
+ deprecation(38022, "The function is_Berkovich is deprecated; use 'isinstance(..., Berkovich)' instead.")
73
+ return isinstance(space, Berkovich)
74
+
75
+
76
+ def is_Berkovich_Cp(space) -> bool:
77
+ """
78
+ Check if ``space`` is a Berkovich space over ``Cp``.
79
+
80
+ OUTPUT:
81
+
82
+ - ``True`` if ``space`` is a Berkovich space over ``Cp``.
83
+ - ``False`` otherwise.
84
+
85
+ EXAMPLES::
86
+
87
+ sage: B = Berkovich_Cp_Projective(3)
88
+ sage: from sage.schemes.berkovich.berkovich_space import is_Berkovich_Cp
89
+ sage: is_Berkovich_Cp(B)
90
+ doctest:warning...
91
+ DeprecationWarning: The function is_Berkovich_Cp is deprecated; use 'isinstance(..., Berkovich_Cp)' instead.
92
+ See https://github.com/sagemath/sage/issues/38022 for details.
93
+ True
94
+ """
95
+ from sage.misc.superseded import deprecation
96
+ deprecation(38022, "The function is_Berkovich_Cp is deprecated; use 'isinstance(..., Berkovich_Cp)' instead.")
97
+ return isinstance(space, Berkovich_Cp)
98
+
99
+
100
+ class Berkovich(UniqueRepresentation, Parent):
101
+ """
102
+ The parent class for any Berkovich space
103
+ """
104
+ pass
105
+
106
+
107
+ class Berkovich_Cp(Berkovich):
108
+ """
109
+ Abstract parent class for Berkovich space over ``Cp``.
110
+ """
111
+
112
+ def residue_characteristic(self):
113
+ """
114
+ The residue characteristic of the ``base``.
115
+
116
+ EXAMPLES::
117
+
118
+ sage: B = Berkovich_Cp_Projective(3)
119
+ sage: B.prime()
120
+ 3
121
+
122
+ ::
123
+
124
+ sage: # needs sage.rings.number_field
125
+ sage: R.<x> = QQ[]
126
+ sage: A.<a> = NumberField(x^3 + 20)
127
+ sage: ideal = A.ideal(-1/2*a^2 + a - 3)
128
+ sage: B = Berkovich_Cp_Affine(A, ideal)
129
+ sage: B.residue_characteristic()
130
+ 7
131
+ """
132
+ return self._p
133
+
134
+ prime = residue_characteristic
135
+
136
+ def is_padic_base(self):
137
+ """
138
+ Return ``True`` if this Berkovich space is backed by a `p`-adic field.
139
+
140
+ OUTPUT:
141
+
142
+ - ``True`` if this Berkovich space was created with a `p`-adic field.
143
+ - ``False`` otherwise.
144
+
145
+ EXAMPLES::
146
+
147
+ sage: B = Berkovich_Cp_Affine(Qp(3))
148
+ sage: B.is_padic_base()
149
+ True
150
+
151
+ ::
152
+
153
+ sage: B = Berkovich_Cp_Affine(QQ, 3)
154
+ sage: B.is_padic_base()
155
+ False
156
+ """
157
+ return self._base_type == 'padic field'
158
+
159
+ def is_number_field_base(self):
160
+ """
161
+ Return ``True`` if this Berkovich space is backed by a number field.
162
+
163
+ OUTPUT:
164
+
165
+ - ``True`` if this Berkovich space was created with a number field.
166
+ - ``False`` otherwise.
167
+
168
+ EXAMPLES::
169
+
170
+ sage: B = Berkovich_Cp_Affine(Qp(3))
171
+ sage: B.is_number_field_base()
172
+ False
173
+
174
+ ::
175
+
176
+ sage: B = Berkovich_Cp_Affine(QQ, 3)
177
+ sage: B.is_number_field_base()
178
+ True
179
+ """
180
+ return self._base_type == 'number field'
181
+
182
+ def ideal(self):
183
+ r"""
184
+ The ideal which defines an embedding of the ``base_ring`` into `\CC_p`.
185
+
186
+ If this Berkovich space is backed by a `p`-adic field, then an embedding is
187
+ already specified, and this returns ``None``.
188
+
189
+ OUTPUT:
190
+
191
+ - An ideal of a ``base_ring`` if ``base_ring`` is a number field.
192
+
193
+ - A prime of `\QQ` if ``base_ring`` is `\QQ`.
194
+
195
+ - ``None`` if ``base_ring`` is a `p`-adic field.
196
+
197
+ EXAMPLES::
198
+
199
+ sage: # needs sage.rings.number_field
200
+ sage: R.<z> = QQ[]
201
+ sage: A.<a> = NumberField(z^2 + 1)
202
+ sage: ideal = A.prime_above(5)
203
+ sage: B = Berkovich_Cp_Projective(A, ideal)
204
+ sage: B.ideal()
205
+ Fractional ideal (2*a - 1)
206
+
207
+ ::
208
+
209
+ sage: B = Berkovich_Cp_Projective(QQ, 3)
210
+ sage: B.ideal()
211
+ 3
212
+
213
+ ::
214
+
215
+ sage: B = Berkovich_Cp_Projective(Qp(3))
216
+ sage: B.ideal() is None
217
+ True
218
+ """
219
+ return self._ideal
220
+
221
+ def __eq__(self, right):
222
+ """
223
+ Equality operator.
224
+
225
+ EXAMPLES::
226
+
227
+ sage: B = Berkovich_Cp_Affine(3)
228
+ sage: A.<x> = Qq(27)
229
+ sage: C = Berkovich_Cp_Affine(A)
230
+ sage: B == C
231
+ True
232
+
233
+ ::
234
+
235
+ sage: # needs sage.rings.number_field
236
+ sage: R.<x> = QQ[]
237
+ sage: A.<a> = NumberField(x^2 + 1)
238
+ sage: A_ideal = A.prime_above(2)
239
+ sage: B.<b> = NumberField(x^4 + 1)
240
+ sage: B_ideal = B.prime_above(2)
241
+ sage: C = Berkovich_Cp_Projective(A, A_ideal)
242
+ sage: D = Berkovich_Cp_Projective(B, B_ideal)
243
+ sage: C == D
244
+ False
245
+
246
+ ::
247
+
248
+ sage: C = Berkovich_Cp_Affine(A, A_ideal) # needs sage.rings.number_field
249
+ sage: D = Berkovich_Cp_Affine(B, B_ideal) # needs sage.rings.number_field
250
+ sage: C == D # needs sage.rings.number_field
251
+ False
252
+
253
+ ::
254
+
255
+ sage: A_ideal_2 = A.prime_above(5) # needs sage.rings.number_field
256
+ sage: E = Berkovich_Cp_Affine(A, A_ideal_2) # needs sage.rings.number_field
257
+ sage: C == E # needs sage.rings.number_field
258
+ False
259
+ """
260
+ if not isinstance(right, Berkovich_Cp):
261
+ return False
262
+ if self._base_type != right._base_type:
263
+ return False
264
+ if self._base_type == 'padic field':
265
+ return self.prime() == right.prime()
266
+ else:
267
+ return self.base() == right.base() and self.ideal() == right.ideal()
268
+
269
+ def __ne__(self, right):
270
+ """
271
+ Inequality operator.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: B = Berkovich_Cp_Affine(5)
276
+ sage: A.<x> = Qq(25)
277
+ sage: C = Berkovich_Cp_Affine(A)
278
+ sage: B != C
279
+ False
280
+ """
281
+ return not (self == right)
282
+
283
+ def __hash__(self):
284
+ """
285
+ Hash function.
286
+
287
+ EXAMPLES::
288
+
289
+ sage: hash(Berkovich_Cp_Projective(3))
290
+ 3
291
+
292
+ ::
293
+
294
+ sage: # needs sage.rings.number_field
295
+ sage: R.<z> = QQ[]
296
+ sage: A.<a> = NumberField(z^2 + 1)
297
+ sage: B = Berkovich_Cp_Projective(A, A.primes_above(5)[0])
298
+ sage: C = Berkovich_Cp_Projective(A, A.primes_above(5)[1])
299
+ sage: hash(B) != hash(C)
300
+ True
301
+ """
302
+ if self._base_type == 'padic field':
303
+ return hash(self.prime())
304
+ return hash(self.ideal())
305
+
306
+
307
+ class Berkovich_Cp_Affine(Berkovich_Cp):
308
+ r"""
309
+ The Berkovich affine line over `\CC_p`.
310
+
311
+ The Berkovich affine line is the set of seminorms on `\CC_p[x]`,
312
+ with the weakest topology such that the map `| \cdot | \to |f|` is continuous
313
+ for all `f \in \CC_p[x]`.
314
+
315
+ We can represent the Berkovich affine line in two separate ways:
316
+ either using a `p`-adic field to represent elements or using
317
+ a number field to represent elements while storing an ideal
318
+ of the ring of integers of the number field, which specifies
319
+ an embedding of the number field into `\CC_p`. See the examples.
320
+
321
+ INPUT:
322
+
323
+ - ``base`` -- three cases:
324
+
325
+ * a prime number `p`. Centers of elements are then represented
326
+ as points of `\QQ_p`.
327
+
328
+ * `\QQ_p` or a finite extension of `\QQ_p`. Centers of elements
329
+ are then represented as points of ``base``.
330
+
331
+ * A number field `K`. Centers of elements are then represented
332
+ as points of `K`.
333
+
334
+ - ``ideal`` -- (optional) a prime ideal of ``base``. Must be
335
+ specified if a number field is passed to ``base``, otherwise
336
+ it is ignored.
337
+
338
+ EXAMPLES::
339
+
340
+ sage: B = Berkovich_Cp_Affine(3); B
341
+ Affine Berkovich line over Cp(3) of precision 20
342
+
343
+ We can create elements::
344
+
345
+ sage: B(-2)
346
+ Type I point centered at 1 + 2*3 + 2*3^2 + 2*3^3 + 2*3^4 + 2*3^5
347
+ + 2*3^6 + 2*3^7 + 2*3^8 + 2*3^9 + 2*3^10 + 2*3^11 + 2*3^12 + 2*3^13
348
+ + 2*3^14 + 2*3^15 + 2*3^16 + 2*3^17 + 2*3^18 + 2*3^19 + O(3^20)
349
+
350
+ ::
351
+
352
+ sage: B(1, 2)
353
+ Type III point centered at 1 + O(3^20) of radius 2.00000000000000
354
+
355
+ For details on element creation, see the documentation
356
+ of :class:`Berkovich_Element_Cp_Affine`. Initializing by
357
+ passing in `\QQ_p` looks the same::
358
+
359
+ sage: B = Berkovich_Cp_Affine(Qp(3)); B
360
+ Affine Berkovich line over Cp(3) of precision 20
361
+
362
+ However, this method allows for more control over behind-the-scenes conversion::
363
+
364
+ sage: B = Berkovich_Cp_Affine(Qp(3, 1)); B
365
+ Affine Berkovich line over Cp(3) of precision 1
366
+
367
+ sage: B(1/2)
368
+ Type I point centered at 2 + O(3)
369
+
370
+ Note that this point has very low precision, as ``B`` was initialized
371
+ with a `p`-adic field of capped-relative precision one. For high precision,
372
+ pass in a high precision `p`-adic field::
373
+
374
+ sage: B = Berkovich_Cp_Affine(Qp(3, 1000)); B
375
+ Affine Berkovich line over Cp(3) of precision 1000
376
+
377
+ Points of Berkovich space can be created from points of
378
+ extensions of `\QQ_p`::
379
+
380
+ sage: B = Berkovich_Cp_Affine(3)
381
+ sage: A.<a> = Qp(3).extension(x^3 - 3)
382
+ sage: B(a)
383
+ Type I point centered at a + O(a^61)
384
+
385
+ For exact computation, a number field can be used::
386
+
387
+ sage: R.<x> = QQ[]
388
+ sage: A.<a> = NumberField(x^3 + 20) # needs sage.rings.number_field
389
+ sage: ideal = A.prime_above(3) # needs sage.rings.number_field
390
+ sage: B = Berkovich_Cp_Affine(A, ideal); B # needs sage.rings.number_field
391
+ Affine Berkovich line over Cp(3), with base
392
+ Number Field in a with defining polynomial x^3 + 20
393
+
394
+ Number fields have a major advantage of exact computation.
395
+
396
+ Number fields also have added functionality. Arbitrary extensions of
397
+ `\QQ` are supported, while there is currently limited functionality
398
+ for extensions of `\QQ_p`. As seen above, constructing a Berkovich
399
+ space backed by a number field requires specifying an ideal of the
400
+ ring of integers of the number field. Specifying the ideal uniquely
401
+ specifies an embedding of the number field into `\CC_p`.
402
+
403
+ Unlike in the case where Berkovich space is backed by a `p`-adic
404
+ field, any point of a Berkovich space backed by a number field
405
+ must be centered at a point of that number field::
406
+
407
+ sage: # needs sage.rings.number_field
408
+ sage: R.<x> = QQ[]
409
+ sage: A.<a> = NumberField(x^3 + 20)
410
+ sage: ideal = A.prime_above(3)
411
+ sage: B = Berkovich_Cp_Affine(A, ideal)
412
+ sage: C.<c> = NumberField(x^2 + 1)
413
+ sage: B(c)
414
+ Traceback (most recent call last):
415
+ ...
416
+ ValueError: could not convert c to Number Field in a
417
+ with defining polynomial x^3 + 20
418
+
419
+ TESTS::
420
+
421
+ sage: A.<x> = AffineSpace(Qp(3), 1)
422
+ sage: Berkovich_Cp_Affine(A)
423
+ Affine Berkovich line over Cp(3) of precision 20
424
+
425
+ ::
426
+
427
+ sage: B = Berkovich_Cp_Projective(3)
428
+ sage: TestSuite(B).run()
429
+ """
430
+
431
+ Element = Berkovich_Element_Cp_Affine
432
+
433
+ def __init__(self, base, ideal=None):
434
+ """
435
+ The Python constructor.
436
+
437
+ EXAMPLES::
438
+
439
+ sage: Berkovich_Cp_Affine(3)
440
+ Affine Berkovich line over Cp(3) of precision 20
441
+ """
442
+ if base in ZZ:
443
+ if base.is_prime():
444
+ from sage.rings.padics.factory import Qp
445
+
446
+ base = Qp(base) # change to Qpbar
447
+ else:
448
+ raise ValueError("non-prime passed into Berkovich space")
449
+ if isinstance(base, AffineSpace_generic):
450
+ base = base.base_ring()
451
+ if base in NumberFields():
452
+ if ideal is None:
453
+ raise ValueError('passed a number field but not an ideal')
454
+ if base is not QQ:
455
+ if not isinstance(ideal, NumberFieldFractionalIdeal):
456
+ raise ValueError('ideal was not an ideal of a number field')
457
+ if ideal.number_field() != base:
458
+ raise ValueError('passed number field ' +
459
+ '%s but ideal was an ideal of %s' % (base, ideal.number_field()))
460
+ prime = ideal.smallest_integer()
461
+ else:
462
+ if ideal not in QQ:
463
+ raise ValueError('ideal was not an element of QQ')
464
+ prime = ideal
465
+ if not ideal.is_prime():
466
+ raise ValueError('passed non prime ideal')
467
+ self._base_type = 'number field'
468
+ elif isinstance(base, sage.rings.abc.pAdicField): # change base to Qpbar
469
+ prime = base.prime()
470
+ ideal = None
471
+ self._base_type = 'padic field'
472
+ else:
473
+ raise ValueError("base of Berkovich Space must be a padic field "
474
+ "or a number field")
475
+ self._ideal = ideal
476
+ self._p = prime
477
+ Parent.__init__(self, base=base, category=TopologicalSpaces())
478
+
479
+ def _repr_(self):
480
+ """
481
+ String representation of this Berkovich Space.
482
+
483
+ EXAMPLES::
484
+
485
+ sage: B = Berkovich_Cp_Affine(3); B
486
+ Affine Berkovich line over Cp(3) of precision 20
487
+
488
+ ::
489
+
490
+ sage: R.<z> = QQ[]
491
+ sage: A.<a> = NumberField(z^2 + 1) # needs sage.rings.number_field
492
+ sage: ideal = A.prime_above(3) # needs sage.rings.number_field
493
+ sage: Berkovich_Cp_Affine(A, ideal) # needs sage.rings.number_field
494
+ Affine Berkovich line over Cp(3), with base
495
+ Number Field in a with defining polynomial z^2 + 1
496
+ """
497
+ if self._base_type == 'padic field':
498
+ return "Affine Berkovich line over Cp(%s) of precision %s" % (self.prime(),
499
+ self.base().precision_cap())
500
+ else:
501
+ return "Affine Berkovich line over Cp(%s), with base %s" % (self.prime(),
502
+ self.base())
503
+
504
+ def _latex_(self):
505
+ r"""
506
+ LaTeX representation of this Berkovich Space.
507
+
508
+ EXAMPLES:
509
+
510
+ sage: B = Berkovich_Cp_Affine(3)
511
+ sage: latex(B)
512
+ \text{Affine Berkovich line over } \Bold{C}_{3}
513
+ """
514
+ return r"\text{Affine Berkovich line over } \Bold{C}_{%s}" % (self.prime())
515
+
516
+
517
+ class Berkovich_Cp_Projective(Berkovich_Cp):
518
+ r"""
519
+ The Berkovich projective line over `\CC_p`.
520
+
521
+ The Berkovich projective line is the one-point compactification
522
+ of the Berkovich affine line.
523
+
524
+ We can represent the Berkovich projective line in two separate ways:
525
+ either using a `p`-adic field to represent elements or using
526
+ a number field to represent elements while storing an ideal
527
+ of the ring of integers of the number field, which specifies
528
+ an embedding of the number field into `\CC_p`. See the examples.
529
+
530
+ INPUT:
531
+
532
+ - ``base`` -- three cases:
533
+
534
+ * a prime number `p`. Centers of elements are then represented
535
+ as points of projective space of dimension 1 over `\QQ_p`.
536
+
537
+ * `\QQ_p` or a finite extension of `\QQ_p`. Centers of elements
538
+ are then represented as points of projective space of dimension 1
539
+ over ``base``.
540
+
541
+ * A number field `K`. Centers of elements are then represented
542
+ as points of projective space of dimension 1 over ``base``.
543
+
544
+ - ``ideal`` -- (optional) a prime ideal of ``base``. Must be
545
+ specified if a number field is passed to ``base``, otherwise
546
+ it is ignored.
547
+
548
+ EXAMPLES::
549
+
550
+ sage: B = Berkovich_Cp_Projective(3); B
551
+ Projective Berkovich line over Cp(3) of precision 20
552
+
553
+ Elements can be constructed::
554
+
555
+ sage: B(1/2)
556
+ Type I point centered at (2 + 3 + 3^2 + 3^3 + 3^4 + 3^5
557
+ + 3^6 + 3^7 + 3^8 + 3^9 + 3^10 + 3^11 + 3^12 + 3^13 + 3^14
558
+ + 3^15 + 3^16 + 3^17 + 3^18 + 3^19 + O(3^20) : 1 + O(3^20))
559
+
560
+ ::
561
+
562
+ sage: B(2, 1)
563
+ Type II point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 3^0
564
+
565
+ For details about element construction, see the documentation of
566
+ :class:`Berkovich_Element_Cp_Projective`. Initializing a Berkovich projective
567
+ line by passing in a `p`-adic space looks the same::
568
+
569
+ sage: B = Berkovich_Cp_Projective(Qp(3)); B
570
+ Projective Berkovich line over Cp(3) of precision 20
571
+
572
+ However, this method allows for more control over
573
+ behind-the-scenes conversion::
574
+
575
+ sage: S = Qp(3, 1)
576
+ sage: B = Berkovich_Cp_Projective(S); B
577
+ Projective Berkovich line over Cp(3) of precision 1
578
+
579
+ sage: Q1 = B(1/2); Q1
580
+ Type I point centered at (2 + O(3) : 1 + O(3))
581
+
582
+ Note that this point has very low precision, as S has low
583
+ precision cap. Berkovich space can also be created over
584
+ a number field, as long as an ideal is specified::
585
+
586
+ sage: R.<x> = QQ[]
587
+ sage: A.<a> = NumberField(x^2 + 1) # needs sage.rings.number_field
588
+ sage: ideal = A.prime_above(2) # needs sage.rings.number_field
589
+ sage: B = Berkovich_Cp_Projective(A, ideal); B # needs sage.rings.number_field
590
+ Projective Berkovich line over Cp(2), with base
591
+ Number Field in a with defining polynomial x^2 + 1
592
+
593
+ Number fields have the benefit that computation is exact,
594
+ but lack support for all of `\CC_p`.
595
+
596
+ Number fields also have the advantage of added functionality,
597
+ as arbitrary extensions of `\QQ` can be constructed while
598
+ there is currently limited functionality for extensions of `\QQ_p`.
599
+ As seen above, constructing a Berkovich space backed by a number
600
+ field requires specifying an ideal of the ring of integers
601
+ of the number field. Specifying the ideal uniquely specifies
602
+ an embedding of the number field into `\CC_p`.
603
+
604
+ Unlike in the case where Berkovich space is backed by a `p`-adic
605
+ field, any point of a Berkovich space backed by a number field
606
+ must be centered at a point of that number field::
607
+
608
+ sage: # needs sage.rings.number_field
609
+ sage: R.<x> = QQ[]
610
+ sage: A.<a> = NumberField(x^3 + 20)
611
+ sage: ideal = A.prime_above(3)
612
+ sage: B = Berkovich_Cp_Projective(A, ideal)
613
+ sage: C.<c> = NumberField(x^2 + 1)
614
+ sage: B(c)
615
+ Traceback (most recent call last):
616
+ ...
617
+ TypeError: could not convert c to Projective Space
618
+ of dimension 1 over Number Field in a with defining polynomial x^3 + 20
619
+
620
+ TESTS::
621
+
622
+ sage: B = Berkovich_Cp_Projective(3)
623
+ sage: TestSuite(B).run()
624
+ """
625
+
626
+ Element = Berkovich_Element_Cp_Projective
627
+
628
+ def __init__(self, base, ideal=None):
629
+ """
630
+ The Python constructor.
631
+
632
+ EXAMPLES::
633
+
634
+ sage: Berkovich_Cp_Projective(3)
635
+ Projective Berkovich line over Cp(3) of precision 20
636
+ """
637
+ if base in ZZ:
638
+ if base.is_prime():
639
+ from sage.rings.padics.factory import Qp
640
+
641
+ base = ProjectiveSpace(Qp(base), 1)
642
+ else:
643
+ raise ValueError("non-prime passed into Berkovich space")
644
+ if base in NumberFields() or isinstance(base, sage.rings.abc.pAdicField):
645
+ base = ProjectiveSpace(base, 1)
646
+ if not isinstance(base, ProjectiveSpace_ring):
647
+ try:
648
+ base = ProjectiveSpace(base)
649
+ except (TypeError, ValueError):
650
+ raise ValueError("base of projective Berkovich space must be projective space")
651
+ if not isinstance(base.base_ring(), sage.rings.abc.pAdicField):
652
+ if base.base_ring() not in NumberFields():
653
+ raise ValueError("base of projective Berkovich space must be "
654
+ "projective space over Qp or a number field")
655
+ else:
656
+ if ideal is None:
657
+ raise ValueError('passed a number field but not an ideal')
658
+ if base.base_ring() is not QQ:
659
+ if not isinstance(ideal, NumberFieldFractionalIdeal):
660
+ raise ValueError('ideal was not a number field ideal')
661
+ if ideal.number_field() != base.base_ring():
662
+ raise ValueError('passed number field ' +
663
+ '%s but ideal was an ideal of %s' % (base.base_ring(), ideal.number_field()))
664
+ prime = ideal.smallest_integer()
665
+ else:
666
+ if ideal not in QQ:
667
+ raise ValueError('ideal was not an element of QQ')
668
+ prime = ideal
669
+ if not ideal.is_prime():
670
+ raise ValueError('passed non prime ideal')
671
+ self._base_type = 'number field'
672
+ else:
673
+ prime = base.base_ring().prime()
674
+ ideal = None
675
+ self._base_type = 'padic field'
676
+ if base.dimension_relative() != 1:
677
+ raise ValueError("base of projective Berkovich space must be "
678
+ "projective space of dimension 1 over Qp or a number field")
679
+ self._p = prime
680
+ self._ideal = ideal
681
+ Parent.__init__(self, base=base, category=TopologicalSpaces())
682
+
683
+ def base_ring(self):
684
+ r"""
685
+ The base ring of this Berkovich Space.
686
+
687
+ OUTPUT: a field
688
+
689
+ EXAMPLES::
690
+
691
+ sage: B = Berkovich_Cp_Projective(3)
692
+ sage: B.base_ring()
693
+ 3-adic Field with capped relative precision 20
694
+
695
+ ::
696
+
697
+ sage: C = Berkovich_Cp_Projective(ProjectiveSpace(Qp(3, 1), 1))
698
+ sage: C.base_ring()
699
+ 3-adic Field with capped relative precision 1
700
+
701
+ ::
702
+
703
+ sage: # needs sage.rings.number_field
704
+ sage: R.<x> = QQ[]
705
+ sage: A.<a> = NumberField(x^3 + 20)
706
+ sage: ideal = A.prime_above(3)
707
+ sage: D = Berkovich_Cp_Projective(A, ideal)
708
+ sage: D.base_ring()
709
+ Number Field in a with defining polynomial x^3 + 20
710
+ """
711
+ return self.base().base_ring()
712
+
713
+ def _repr_(self):
714
+ """
715
+ String representation of this Berkovich Space.
716
+
717
+ EXAMPLES::
718
+
719
+ sage: B = Berkovich_Cp_Projective(3); B
720
+ Projective Berkovich line over Cp(3) of precision 20
721
+
722
+ ::
723
+
724
+ sage: R.<x> = QQ[]
725
+ sage: A.<a> = NumberField(x^2 + 1) # needs sage.rings.number_field
726
+ sage: v = A.ideal(a + 1) # needs sage.rings.number_field
727
+ sage: Berkovich_Cp_Projective(A, v) # needs sage.rings.number_field
728
+ Projective Berkovich line over Cp(2),
729
+ with base Number Field in a with defining polynomial x^2 + 1
730
+ """
731
+ if self._base_type == 'padic field':
732
+ return "Projective Berkovich line over Cp(%s) of precision %s" % (self.prime(),
733
+ self.base().base_ring().precision_cap())
734
+ else:
735
+ return "Projective Berkovich line over Cp(%s), with base %s" % (self.prime(),
736
+ self.base().base_ring())
737
+
738
+ def _latex_(self):
739
+ r"""
740
+ LaTeX representation of this Berkovich Space.
741
+
742
+ EXAMPLES:
743
+
744
+ sage: B = Berkovich_Cp_Projective(3)
745
+ sage: latex(B)
746
+ \text{Projective Berkovich line over } \Bold{C}_{3}
747
+ """
748
+ return r"\text{Projective Berkovich line over } \Bold{C}_{%s}" % (self.prime())