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,700 @@
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
+ class Berkovich(UniqueRepresentation, Parent):
53
+ """
54
+ The parent class for any Berkovich space
55
+ """
56
+ pass
57
+
58
+
59
+ class Berkovich_Cp(Berkovich):
60
+ """
61
+ Abstract parent class for Berkovich space over ``Cp``.
62
+ """
63
+
64
+ def residue_characteristic(self):
65
+ """
66
+ The residue characteristic of the ``base``.
67
+
68
+ EXAMPLES::
69
+
70
+ sage: B = Berkovich_Cp_Projective(3)
71
+ sage: B.prime()
72
+ 3
73
+
74
+ ::
75
+
76
+ sage: # needs sage.rings.number_field
77
+ sage: R.<x> = QQ[]
78
+ sage: A.<a> = NumberField(x^3 + 20)
79
+ sage: ideal = A.ideal(-1/2*a^2 + a - 3)
80
+ sage: B = Berkovich_Cp_Affine(A, ideal)
81
+ sage: B.residue_characteristic()
82
+ 7
83
+ """
84
+ return self._p
85
+
86
+ prime = residue_characteristic
87
+
88
+ def is_padic_base(self):
89
+ """
90
+ Return ``True`` if this Berkovich space is backed by a `p`-adic field.
91
+
92
+ OUTPUT:
93
+
94
+ - ``True`` if this Berkovich space was created with a `p`-adic field.
95
+ - ``False`` otherwise.
96
+
97
+ EXAMPLES::
98
+
99
+ sage: B = Berkovich_Cp_Affine(Qp(3))
100
+ sage: B.is_padic_base()
101
+ True
102
+
103
+ ::
104
+
105
+ sage: B = Berkovich_Cp_Affine(QQ, 3)
106
+ sage: B.is_padic_base()
107
+ False
108
+ """
109
+ return self._base_type == 'padic field'
110
+
111
+ def is_number_field_base(self):
112
+ """
113
+ Return ``True`` if this Berkovich space is backed by a number field.
114
+
115
+ OUTPUT:
116
+
117
+ - ``True`` if this Berkovich space was created with a number field.
118
+ - ``False`` otherwise.
119
+
120
+ EXAMPLES::
121
+
122
+ sage: B = Berkovich_Cp_Affine(Qp(3))
123
+ sage: B.is_number_field_base()
124
+ False
125
+
126
+ ::
127
+
128
+ sage: B = Berkovich_Cp_Affine(QQ, 3)
129
+ sage: B.is_number_field_base()
130
+ True
131
+ """
132
+ return self._base_type == 'number field'
133
+
134
+ def ideal(self):
135
+ r"""
136
+ The ideal which defines an embedding of the ``base_ring`` into `\CC_p`.
137
+
138
+ If this Berkovich space is backed by a `p`-adic field, then an embedding is
139
+ already specified, and this returns ``None``.
140
+
141
+ OUTPUT:
142
+
143
+ - An ideal of a ``base_ring`` if ``base_ring`` is a number field.
144
+
145
+ - A prime of `\QQ` if ``base_ring`` is `\QQ`.
146
+
147
+ - ``None`` if ``base_ring`` is a `p`-adic field.
148
+
149
+ EXAMPLES::
150
+
151
+ sage: # needs sage.rings.number_field
152
+ sage: R.<z> = QQ[]
153
+ sage: A.<a> = NumberField(z^2 + 1)
154
+ sage: ideal = A.prime_above(5)
155
+ sage: B = Berkovich_Cp_Projective(A, ideal)
156
+ sage: B.ideal()
157
+ Fractional ideal (2*a - 1)
158
+
159
+ ::
160
+
161
+ sage: B = Berkovich_Cp_Projective(QQ, 3)
162
+ sage: B.ideal()
163
+ 3
164
+
165
+ ::
166
+
167
+ sage: B = Berkovich_Cp_Projective(Qp(3))
168
+ sage: B.ideal() is None
169
+ True
170
+ """
171
+ return self._ideal
172
+
173
+ def __eq__(self, right):
174
+ """
175
+ Equality operator.
176
+
177
+ EXAMPLES::
178
+
179
+ sage: B = Berkovich_Cp_Affine(3)
180
+ sage: A.<x> = Qq(27)
181
+ sage: C = Berkovich_Cp_Affine(A)
182
+ sage: B == C
183
+ True
184
+
185
+ ::
186
+
187
+ sage: # needs sage.rings.number_field
188
+ sage: R.<x> = QQ[]
189
+ sage: A.<a> = NumberField(x^2 + 1)
190
+ sage: A_ideal = A.prime_above(2)
191
+ sage: B.<b> = NumberField(x^4 + 1)
192
+ sage: B_ideal = B.prime_above(2)
193
+ sage: C = Berkovich_Cp_Projective(A, A_ideal)
194
+ sage: D = Berkovich_Cp_Projective(B, B_ideal)
195
+ sage: C == D
196
+ False
197
+
198
+ ::
199
+
200
+ sage: C = Berkovich_Cp_Affine(A, A_ideal) # needs sage.rings.number_field
201
+ sage: D = Berkovich_Cp_Affine(B, B_ideal) # needs sage.rings.number_field
202
+ sage: C == D # needs sage.rings.number_field
203
+ False
204
+
205
+ ::
206
+
207
+ sage: A_ideal_2 = A.prime_above(5) # needs sage.rings.number_field
208
+ sage: E = Berkovich_Cp_Affine(A, A_ideal_2) # needs sage.rings.number_field
209
+ sage: C == E # needs sage.rings.number_field
210
+ False
211
+ """
212
+ if not isinstance(right, Berkovich_Cp):
213
+ return False
214
+ if self._base_type != right._base_type:
215
+ return False
216
+ if self._base_type == 'padic field':
217
+ return self.prime() == right.prime()
218
+ else:
219
+ return self.base() == right.base() and self.ideal() == right.ideal()
220
+
221
+ def __ne__(self, right):
222
+ """
223
+ Inequality operator.
224
+
225
+ EXAMPLES::
226
+
227
+ sage: B = Berkovich_Cp_Affine(5)
228
+ sage: A.<x> = Qq(25)
229
+ sage: C = Berkovich_Cp_Affine(A)
230
+ sage: B != C
231
+ False
232
+ """
233
+ return not (self == right)
234
+
235
+ def __hash__(self):
236
+ """
237
+ Hash function.
238
+
239
+ EXAMPLES::
240
+
241
+ sage: hash(Berkovich_Cp_Projective(3))
242
+ 3
243
+
244
+ ::
245
+
246
+ sage: # needs sage.rings.number_field
247
+ sage: R.<z> = QQ[]
248
+ sage: A.<a> = NumberField(z^2 + 1)
249
+ sage: B = Berkovich_Cp_Projective(A, A.primes_above(5)[0])
250
+ sage: C = Berkovich_Cp_Projective(A, A.primes_above(5)[1])
251
+ sage: hash(B) != hash(C)
252
+ True
253
+ """
254
+ if self._base_type == 'padic field':
255
+ return hash(self.prime())
256
+ return hash(self.ideal())
257
+
258
+
259
+ class Berkovich_Cp_Affine(Berkovich_Cp):
260
+ r"""
261
+ The Berkovich affine line over `\CC_p`.
262
+
263
+ The Berkovich affine line is the set of seminorms on `\CC_p[x]`,
264
+ with the weakest topology such that the map `| \cdot | \to |f|` is continuous
265
+ for all `f \in \CC_p[x]`.
266
+
267
+ We can represent the Berkovich affine line in two separate ways:
268
+ either using a `p`-adic field to represent elements or using
269
+ a number field to represent elements while storing an ideal
270
+ of the ring of integers of the number field, which specifies
271
+ an embedding of the number field into `\CC_p`. See the examples.
272
+
273
+ INPUT:
274
+
275
+ - ``base`` -- three cases:
276
+
277
+ * a prime number `p`. Centers of elements are then represented
278
+ as points of `\QQ_p`.
279
+
280
+ * `\QQ_p` or a finite extension of `\QQ_p`. Centers of elements
281
+ are then represented as points of ``base``.
282
+
283
+ * A number field `K`. Centers of elements are then represented
284
+ as points of `K`.
285
+
286
+ - ``ideal`` -- (optional) a prime ideal of ``base``. Must be
287
+ specified if a number field is passed to ``base``, otherwise
288
+ it is ignored.
289
+
290
+ EXAMPLES::
291
+
292
+ sage: B = Berkovich_Cp_Affine(3); B
293
+ Affine Berkovich line over Cp(3) of precision 20
294
+
295
+ We can create elements::
296
+
297
+ sage: B(-2)
298
+ Type I point centered at 1 + 2*3 + 2*3^2 + 2*3^3 + 2*3^4 + 2*3^5
299
+ + 2*3^6 + 2*3^7 + 2*3^8 + 2*3^9 + 2*3^10 + 2*3^11 + 2*3^12 + 2*3^13
300
+ + 2*3^14 + 2*3^15 + 2*3^16 + 2*3^17 + 2*3^18 + 2*3^19 + O(3^20)
301
+
302
+ ::
303
+
304
+ sage: B(1, 2)
305
+ Type III point centered at 1 + O(3^20) of radius 2.00000000000000
306
+
307
+ For details on element creation, see the documentation
308
+ of :class:`Berkovich_Element_Cp_Affine`. Initializing by
309
+ passing in `\QQ_p` looks the same::
310
+
311
+ sage: B = Berkovich_Cp_Affine(Qp(3)); B
312
+ Affine Berkovich line over Cp(3) of precision 20
313
+
314
+ However, this method allows for more control over behind-the-scenes conversion::
315
+
316
+ sage: B = Berkovich_Cp_Affine(Qp(3, 1)); B
317
+ Affine Berkovich line over Cp(3) of precision 1
318
+
319
+ sage: B(1/2)
320
+ Type I point centered at 2 + O(3)
321
+
322
+ Note that this point has very low precision, as ``B`` was initialized
323
+ with a `p`-adic field of capped-relative precision one. For high precision,
324
+ pass in a high precision `p`-adic field::
325
+
326
+ sage: B = Berkovich_Cp_Affine(Qp(3, 1000)); B
327
+ Affine Berkovich line over Cp(3) of precision 1000
328
+
329
+ Points of Berkovich space can be created from points of
330
+ extensions of `\QQ_p`::
331
+
332
+ sage: B = Berkovich_Cp_Affine(3)
333
+ sage: A.<a> = Qp(3).extension(x^3 - 3)
334
+ sage: B(a)
335
+ Type I point centered at a + O(a^61)
336
+
337
+ For exact computation, a number field can be used::
338
+
339
+ sage: R.<x> = QQ[]
340
+ sage: A.<a> = NumberField(x^3 + 20) # needs sage.rings.number_field
341
+ sage: ideal = A.prime_above(3) # needs sage.rings.number_field
342
+ sage: B = Berkovich_Cp_Affine(A, ideal); B # needs sage.rings.number_field
343
+ Affine Berkovich line over Cp(3), with base
344
+ Number Field in a with defining polynomial x^3 + 20
345
+
346
+ Number fields have a major advantage of exact computation.
347
+
348
+ Number fields also have added functionality. Arbitrary extensions of
349
+ `\QQ` are supported, while there is currently limited functionality
350
+ for extensions of `\QQ_p`. As seen above, constructing a Berkovich
351
+ space backed by a number field requires specifying an ideal of the
352
+ ring of integers of the number field. Specifying the ideal uniquely
353
+ specifies an embedding of the number field into `\CC_p`.
354
+
355
+ Unlike in the case where Berkovich space is backed by a `p`-adic
356
+ field, any point of a Berkovich space backed by a number field
357
+ must be centered at a point of that number field::
358
+
359
+ sage: # needs sage.rings.number_field
360
+ sage: R.<x> = QQ[]
361
+ sage: A.<a> = NumberField(x^3 + 20)
362
+ sage: ideal = A.prime_above(3)
363
+ sage: B = Berkovich_Cp_Affine(A, ideal)
364
+ sage: C.<c> = NumberField(x^2 + 1)
365
+ sage: B(c)
366
+ Traceback (most recent call last):
367
+ ...
368
+ ValueError: could not convert c to Number Field in a
369
+ with defining polynomial x^3 + 20
370
+
371
+ TESTS::
372
+
373
+ sage: A.<x> = AffineSpace(Qp(3), 1)
374
+ sage: Berkovich_Cp_Affine(A)
375
+ Affine Berkovich line over Cp(3) of precision 20
376
+
377
+ ::
378
+
379
+ sage: B = Berkovich_Cp_Projective(3)
380
+ sage: TestSuite(B).run()
381
+ """
382
+
383
+ Element = Berkovich_Element_Cp_Affine
384
+
385
+ def __init__(self, base, ideal=None):
386
+ """
387
+ The Python constructor.
388
+
389
+ EXAMPLES::
390
+
391
+ sage: Berkovich_Cp_Affine(3)
392
+ Affine Berkovich line over Cp(3) of precision 20
393
+ """
394
+ if base in ZZ:
395
+ if base.is_prime():
396
+ from sage.rings.padics.factory import Qp
397
+
398
+ base = Qp(base) # change to Qpbar
399
+ else:
400
+ raise ValueError("non-prime passed into Berkovich space")
401
+ if isinstance(base, AffineSpace_generic):
402
+ base = base.base_ring()
403
+ if base in NumberFields():
404
+ if ideal is None:
405
+ raise ValueError('passed a number field but not an ideal')
406
+ if base is not QQ:
407
+ if not isinstance(ideal, NumberFieldFractionalIdeal):
408
+ raise ValueError('ideal was not an ideal of a number field')
409
+ if ideal.number_field() != base:
410
+ raise ValueError('passed number field ' +
411
+ '%s but ideal was an ideal of %s' % (base, ideal.number_field()))
412
+ prime = ideal.smallest_integer()
413
+ else:
414
+ if ideal not in QQ:
415
+ raise ValueError('ideal was not an element of QQ')
416
+ prime = ideal
417
+ if not ideal.is_prime():
418
+ raise ValueError('passed non prime ideal')
419
+ self._base_type = 'number field'
420
+ elif isinstance(base, sage.rings.abc.pAdicField): # change base to Qpbar
421
+ prime = base.prime()
422
+ ideal = None
423
+ self._base_type = 'padic field'
424
+ else:
425
+ raise ValueError("base of Berkovich Space must be a padic field "
426
+ "or a number field")
427
+ self._ideal = ideal
428
+ self._p = prime
429
+ Parent.__init__(self, base=base, category=TopologicalSpaces())
430
+
431
+ def _repr_(self):
432
+ """
433
+ String representation of this Berkovich Space.
434
+
435
+ EXAMPLES::
436
+
437
+ sage: B = Berkovich_Cp_Affine(3); B
438
+ Affine Berkovich line over Cp(3) of precision 20
439
+
440
+ ::
441
+
442
+ sage: R.<z> = QQ[]
443
+ sage: A.<a> = NumberField(z^2 + 1) # needs sage.rings.number_field
444
+ sage: ideal = A.prime_above(3) # needs sage.rings.number_field
445
+ sage: Berkovich_Cp_Affine(A, ideal) # needs sage.rings.number_field
446
+ Affine Berkovich line over Cp(3), with base
447
+ Number Field in a with defining polynomial z^2 + 1
448
+ """
449
+ if self._base_type == 'padic field':
450
+ return "Affine Berkovich line over Cp(%s) of precision %s" % (self.prime(),
451
+ self.base().precision_cap())
452
+ else:
453
+ return "Affine Berkovich line over Cp(%s), with base %s" % (self.prime(),
454
+ self.base())
455
+
456
+ def _latex_(self):
457
+ r"""
458
+ LaTeX representation of this Berkovich Space.
459
+
460
+ EXAMPLES:
461
+
462
+ sage: B = Berkovich_Cp_Affine(3)
463
+ sage: latex(B)
464
+ \text{Affine Berkovich line over } \Bold{C}_{3}
465
+ """
466
+ return r"\text{Affine Berkovich line over } \Bold{C}_{%s}" % (self.prime())
467
+
468
+
469
+ class Berkovich_Cp_Projective(Berkovich_Cp):
470
+ r"""
471
+ The Berkovich projective line over `\CC_p`.
472
+
473
+ The Berkovich projective line is the one-point compactification
474
+ of the Berkovich affine line.
475
+
476
+ We can represent the Berkovich projective line in two separate ways:
477
+ either using a `p`-adic field to represent elements or using
478
+ a number field to represent elements while storing an ideal
479
+ of the ring of integers of the number field, which specifies
480
+ an embedding of the number field into `\CC_p`. See the examples.
481
+
482
+ INPUT:
483
+
484
+ - ``base`` -- three cases:
485
+
486
+ * a prime number `p`. Centers of elements are then represented
487
+ as points of projective space of dimension 1 over `\QQ_p`.
488
+
489
+ * `\QQ_p` or a finite extension of `\QQ_p`. Centers of elements
490
+ are then represented as points of projective space of dimension 1
491
+ over ``base``.
492
+
493
+ * A number field `K`. Centers of elements are then represented
494
+ as points of projective space of dimension 1 over ``base``.
495
+
496
+ - ``ideal`` -- (optional) a prime ideal of ``base``. Must be
497
+ specified if a number field is passed to ``base``, otherwise
498
+ it is ignored.
499
+
500
+ EXAMPLES::
501
+
502
+ sage: B = Berkovich_Cp_Projective(3); B
503
+ Projective Berkovich line over Cp(3) of precision 20
504
+
505
+ Elements can be constructed::
506
+
507
+ sage: B(1/2)
508
+ Type I point centered at (2 + 3 + 3^2 + 3^3 + 3^4 + 3^5
509
+ + 3^6 + 3^7 + 3^8 + 3^9 + 3^10 + 3^11 + 3^12 + 3^13 + 3^14
510
+ + 3^15 + 3^16 + 3^17 + 3^18 + 3^19 + O(3^20) : 1 + O(3^20))
511
+
512
+ ::
513
+
514
+ sage: B(2, 1)
515
+ Type II point centered at (2 + O(3^20) : 1 + O(3^20)) of radius 3^0
516
+
517
+ For details about element construction, see the documentation of
518
+ :class:`Berkovich_Element_Cp_Projective`. Initializing a Berkovich projective
519
+ line by passing in a `p`-adic space looks the same::
520
+
521
+ sage: B = Berkovich_Cp_Projective(Qp(3)); B
522
+ Projective Berkovich line over Cp(3) of precision 20
523
+
524
+ However, this method allows for more control over
525
+ behind-the-scenes conversion::
526
+
527
+ sage: S = Qp(3, 1)
528
+ sage: B = Berkovich_Cp_Projective(S); B
529
+ Projective Berkovich line over Cp(3) of precision 1
530
+
531
+ sage: Q1 = B(1/2); Q1
532
+ Type I point centered at (2 + O(3) : 1 + O(3))
533
+
534
+ Note that this point has very low precision, as S has low
535
+ precision cap. Berkovich space can also be created over
536
+ a number field, as long as an ideal is specified::
537
+
538
+ sage: R.<x> = QQ[]
539
+ sage: A.<a> = NumberField(x^2 + 1) # needs sage.rings.number_field
540
+ sage: ideal = A.prime_above(2) # needs sage.rings.number_field
541
+ sage: B = Berkovich_Cp_Projective(A, ideal); B # needs sage.rings.number_field
542
+ Projective Berkovich line over Cp(2), with base
543
+ Number Field in a with defining polynomial x^2 + 1
544
+
545
+ Number fields have the benefit that computation is exact,
546
+ but lack support for all of `\CC_p`.
547
+
548
+ Number fields also have the advantage of added functionality,
549
+ as arbitrary extensions of `\QQ` can be constructed while
550
+ there is currently limited functionality for extensions of `\QQ_p`.
551
+ As seen above, constructing a Berkovich space backed by a number
552
+ field requires specifying an ideal of the ring of integers
553
+ of the number field. Specifying the ideal uniquely specifies
554
+ an embedding of the number field into `\CC_p`.
555
+
556
+ Unlike in the case where Berkovich space is backed by a `p`-adic
557
+ field, any point of a Berkovich space backed by a number field
558
+ must be centered at a point of that number field::
559
+
560
+ sage: # needs sage.rings.number_field
561
+ sage: R.<x> = QQ[]
562
+ sage: A.<a> = NumberField(x^3 + 20)
563
+ sage: ideal = A.prime_above(3)
564
+ sage: B = Berkovich_Cp_Projective(A, ideal)
565
+ sage: C.<c> = NumberField(x^2 + 1)
566
+ sage: B(c)
567
+ Traceback (most recent call last):
568
+ ...
569
+ TypeError: could not convert c to Projective Space
570
+ of dimension 1 over Number Field in a with defining polynomial x^3 + 20
571
+
572
+ TESTS::
573
+
574
+ sage: B = Berkovich_Cp_Projective(3)
575
+ sage: TestSuite(B).run()
576
+ """
577
+
578
+ Element = Berkovich_Element_Cp_Projective
579
+
580
+ def __init__(self, base, ideal=None):
581
+ """
582
+ The Python constructor.
583
+
584
+ EXAMPLES::
585
+
586
+ sage: Berkovich_Cp_Projective(3)
587
+ Projective Berkovich line over Cp(3) of precision 20
588
+ """
589
+ if base in ZZ:
590
+ if base.is_prime():
591
+ from sage.rings.padics.factory import Qp
592
+
593
+ base = ProjectiveSpace(Qp(base), 1)
594
+ else:
595
+ raise ValueError("non-prime passed into Berkovich space")
596
+ if base in NumberFields() or isinstance(base, sage.rings.abc.pAdicField):
597
+ base = ProjectiveSpace(base, 1)
598
+ if not isinstance(base, ProjectiveSpace_ring):
599
+ try:
600
+ base = ProjectiveSpace(base)
601
+ except (TypeError, ValueError):
602
+ raise ValueError("base of projective Berkovich space must be projective space")
603
+ if not isinstance(base.base_ring(), sage.rings.abc.pAdicField):
604
+ if base.base_ring() not in NumberFields():
605
+ raise ValueError("base of projective Berkovich space must be "
606
+ "projective space over Qp or a number field")
607
+ else:
608
+ if ideal is None:
609
+ raise ValueError('passed a number field but not an ideal')
610
+ if base.base_ring() is not QQ:
611
+ if not isinstance(ideal, NumberFieldFractionalIdeal):
612
+ raise ValueError('ideal was not a number field ideal')
613
+ if ideal.number_field() != base.base_ring():
614
+ raise ValueError('passed number field ' +
615
+ '%s but ideal was an ideal of %s' % (base.base_ring(), ideal.number_field()))
616
+ prime = ideal.smallest_integer()
617
+ else:
618
+ if ideal not in QQ:
619
+ raise ValueError('ideal was not an element of QQ')
620
+ prime = ideal
621
+ if not ideal.is_prime():
622
+ raise ValueError('passed non prime ideal')
623
+ self._base_type = 'number field'
624
+ else:
625
+ prime = base.base_ring().prime()
626
+ ideal = None
627
+ self._base_type = 'padic field'
628
+ if base.dimension_relative() != 1:
629
+ raise ValueError("base of projective Berkovich space must be "
630
+ "projective space of dimension 1 over Qp or a number field")
631
+ self._p = prime
632
+ self._ideal = ideal
633
+ Parent.__init__(self, base=base, category=TopologicalSpaces())
634
+
635
+ def base_ring(self):
636
+ r"""
637
+ The base ring of this Berkovich Space.
638
+
639
+ OUTPUT: a field
640
+
641
+ EXAMPLES::
642
+
643
+ sage: B = Berkovich_Cp_Projective(3)
644
+ sage: B.base_ring()
645
+ 3-adic Field with capped relative precision 20
646
+
647
+ ::
648
+
649
+ sage: C = Berkovich_Cp_Projective(ProjectiveSpace(Qp(3, 1), 1))
650
+ sage: C.base_ring()
651
+ 3-adic Field with capped relative precision 1
652
+
653
+ ::
654
+
655
+ sage: # needs sage.rings.number_field
656
+ sage: R.<x> = QQ[]
657
+ sage: A.<a> = NumberField(x^3 + 20)
658
+ sage: ideal = A.prime_above(3)
659
+ sage: D = Berkovich_Cp_Projective(A, ideal)
660
+ sage: D.base_ring()
661
+ Number Field in a with defining polynomial x^3 + 20
662
+ """
663
+ return self.base().base_ring()
664
+
665
+ def _repr_(self):
666
+ """
667
+ String representation of this Berkovich Space.
668
+
669
+ EXAMPLES::
670
+
671
+ sage: B = Berkovich_Cp_Projective(3); B
672
+ Projective Berkovich line over Cp(3) of precision 20
673
+
674
+ ::
675
+
676
+ sage: R.<x> = QQ[]
677
+ sage: A.<a> = NumberField(x^2 + 1) # needs sage.rings.number_field
678
+ sage: v = A.ideal(a + 1) # needs sage.rings.number_field
679
+ sage: Berkovich_Cp_Projective(A, v) # needs sage.rings.number_field
680
+ Projective Berkovich line over Cp(2),
681
+ with base Number Field in a with defining polynomial x^2 + 1
682
+ """
683
+ if self._base_type == 'padic field':
684
+ return "Projective Berkovich line over Cp(%s) of precision %s" % (self.prime(),
685
+ self.base().base_ring().precision_cap())
686
+ else:
687
+ return "Projective Berkovich line over Cp(%s), with base %s" % (self.prime(),
688
+ self.base().base_ring())
689
+
690
+ def _latex_(self):
691
+ r"""
692
+ LaTeX representation of this Berkovich Space.
693
+
694
+ EXAMPLES:
695
+
696
+ sage: B = Berkovich_Cp_Projective(3)
697
+ sage: latex(B)
698
+ \text{Projective Berkovich line over } \Bold{C}_{3}
699
+ """
700
+ return r"\text{Projective Berkovich line over } \Bold{C}_{%s}" % (self.prime())