passagemath-pari 10.6.32__cp314-cp314-musllinux_1_2_x86_64.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.

Potentially problematic release.


This version of passagemath-pari might be problematic. Click here for more details.

Files changed (331) hide show
  1. PARIKernel/__init__.py +2 -0
  2. PARIKernel/__main__.py +5 -0
  3. PARIKernel/io.cpython-314-x86_64-linux-musl.so +0 -0
  4. PARIKernel/io.pxd +7 -0
  5. PARIKernel/io.pyx +84 -0
  6. PARIKernel/kernel.cpython-314-x86_64-linux-musl.so +0 -0
  7. PARIKernel/kernel.pyx +260 -0
  8. PARIKernel/paridecl.pxd +95 -0
  9. PARIKernel/svg.cpython-314-x86_64-linux-musl.so +0 -0
  10. PARIKernel/svg.pyx +52 -0
  11. cypari2/__init__.py +8 -0
  12. cypari2/auto_paridecl.pxd +1070 -0
  13. cypari2/closure.cpython-314-x86_64-linux-musl.so +0 -0
  14. cypari2/closure.pxd +5 -0
  15. cypari2/closure.pyx +246 -0
  16. cypari2/convert.cpython-314-x86_64-linux-musl.so +0 -0
  17. cypari2/convert.pxd +80 -0
  18. cypari2/convert.pyx +613 -0
  19. cypari2/custom_block.cpython-314-x86_64-linux-musl.so +0 -0
  20. cypari2/custom_block.pyx +30 -0
  21. cypari2/cypari.h +13 -0
  22. cypari2/gen.cpython-314-x86_64-linux-musl.so +0 -0
  23. cypari2/gen.pxd +69 -0
  24. cypari2/gen.pyx +4819 -0
  25. cypari2/handle_error.cpython-314-x86_64-linux-musl.so +0 -0
  26. cypari2/handle_error.pxd +7 -0
  27. cypari2/handle_error.pyx +232 -0
  28. cypari2/pari_instance.cpython-314-x86_64-linux-musl.so +0 -0
  29. cypari2/pari_instance.pxd +27 -0
  30. cypari2/pari_instance.pyx +1438 -0
  31. cypari2/paridecl.pxd +5353 -0
  32. cypari2/paripriv.pxd +34 -0
  33. cypari2/pycore_long.h +98 -0
  34. cypari2/pycore_long.pxd +9 -0
  35. cypari2/stack.cpython-314-x86_64-linux-musl.so +0 -0
  36. cypari2/stack.pxd +27 -0
  37. cypari2/stack.pyx +278 -0
  38. cypari2/string_utils.cpython-314-x86_64-linux-musl.so +0 -0
  39. cypari2/string_utils.pxd +29 -0
  40. cypari2/string_utils.pyx +65 -0
  41. cypari2/types.pxd +147 -0
  42. passagemath_pari-10.6.32.data/data/etc/jupyter/nbconfig/notebook.d/gp-mode.json +5 -0
  43. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/pari_jupyter/kernel.js +28 -0
  44. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/pari_jupyter/kernel.json +6 -0
  45. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/pari_jupyter/logo-64x64.png +0 -0
  46. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/kernel.json +13 -0
  47. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/logo-32x32.png +0 -0
  48. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/logo-64x64.png +0 -0
  49. passagemath_pari-10.6.32.data/data/share/jupyter/kernels/xeus-gp/logo-svg.svg +75 -0
  50. passagemath_pari-10.6.32.data/data/share/jupyter/nbextensions/gp-mode/gp.js +284 -0
  51. passagemath_pari-10.6.32.data/data/share/jupyter/nbextensions/gp-mode/main.js +15 -0
  52. passagemath_pari-10.6.32.dist-info/METADATA +209 -0
  53. passagemath_pari-10.6.32.dist-info/RECORD +331 -0
  54. passagemath_pari-10.6.32.dist-info/WHEEL +5 -0
  55. passagemath_pari-10.6.32.dist-info/top_level.txt +4 -0
  56. passagemath_pari.libs/libcrypto-f04afe95.so.3 +0 -0
  57. passagemath_pari.libs/libflint-fd6f12fc.so.21.0.0 +0 -0
  58. passagemath_pari.libs/libgcc_s-0cd532bd.so.1 +0 -0
  59. passagemath_pari.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
  60. passagemath_pari.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  61. passagemath_pari.libs/libgivaro-9a94c711.so.9.2.1 +0 -0
  62. passagemath_pari.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  63. passagemath_pari.libs/libgmpxx-9e08595c.so.4.7.0 +0 -0
  64. passagemath_pari.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  65. passagemath_pari.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  66. passagemath_pari.libs/libncursesw-9c9e32c3.so.6.5 +0 -0
  67. passagemath_pari.libs/libntl-26885ca2.so.44.0.1 +0 -0
  68. passagemath_pari.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  69. passagemath_pari.libs/libpari-gmp-tls-f31f908f.so.2.17.2 +0 -0
  70. passagemath_pari.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  71. passagemath_pari.libs/libreadline-06542304.so.8.2 +0 -0
  72. passagemath_pari.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  73. passagemath_pari.libs/libuuid-f3770415.so.1.3.0 +0 -0
  74. passagemath_pari.libs/libxeus-735780ff.so.13.1.0 +0 -0
  75. passagemath_pari.libs/libxeus-zmq-c68577b4.so.6.0.1 +0 -0
  76. passagemath_pari.libs/libzmq-1ba9a3da.so.5.2.5 +0 -0
  77. sage/all__sagemath_pari.py +26 -0
  78. sage/databases/all__sagemath_pari.py +7 -0
  79. sage/databases/conway.py +274 -0
  80. sage/ext/all__sagemath_pari.py +1 -0
  81. sage/ext/memory.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/ext/memory.pyx +98 -0
  83. sage/ext_data/pari/buzzard/DimensionSk.g +286 -0
  84. sage/ext_data/pari/buzzard/Tpprog.g +179 -0
  85. sage/ext_data/pari/buzzard/genusn.g +129 -0
  86. sage/ext_data/pari/dokchitser/computel.gp +740 -0
  87. sage/ext_data/pari/dokchitser/computel.gp.template +740 -0
  88. sage/ext_data/pari/dokchitser/ex-bsw +43 -0
  89. sage/ext_data/pari/dokchitser/ex-chgen +48 -0
  90. sage/ext_data/pari/dokchitser/ex-chqua +37 -0
  91. sage/ext_data/pari/dokchitser/ex-delta +35 -0
  92. sage/ext_data/pari/dokchitser/ex-eisen +30 -0
  93. sage/ext_data/pari/dokchitser/ex-gen2 +38 -0
  94. sage/ext_data/pari/dokchitser/ex-gen3 +49 -0
  95. sage/ext_data/pari/dokchitser/ex-gen4 +54 -0
  96. sage/ext_data/pari/dokchitser/ex-nf +48 -0
  97. sage/ext_data/pari/dokchitser/ex-shin +50 -0
  98. sage/ext_data/pari/dokchitser/ex-tau2 +30 -0
  99. sage/ext_data/pari/dokchitser/ex-zeta +27 -0
  100. sage/ext_data/pari/dokchitser/ex-zeta2 +47 -0
  101. sage/ext_data/pari/dokchitser/testall +13 -0
  102. sage/ext_data/pari/simon/ell.gp +2129 -0
  103. sage/ext_data/pari/simon/ellQ.gp +2151 -0
  104. sage/ext_data/pari/simon/ellcommon.gp +126 -0
  105. sage/ext_data/pari/simon/qfsolve.gp +722 -0
  106. sage/ext_data/pari/simon/resultant3.gp +306 -0
  107. sage/groups/all__sagemath_pari.py +3 -0
  108. sage/groups/pari_group.py +175 -0
  109. sage/interfaces/all__sagemath_pari.py +1 -0
  110. sage/interfaces/genus2reduction.py +464 -0
  111. sage/interfaces/gp.py +1114 -0
  112. sage/libs/all__sagemath_pari.py +2 -0
  113. sage/libs/linkages/__init__.py +1 -0
  114. sage/libs/linkages/padics/API.pxi +617 -0
  115. sage/libs/linkages/padics/Polynomial_ram.pxi +388 -0
  116. sage/libs/linkages/padics/Polynomial_shared.pxi +554 -0
  117. sage/libs/linkages/padics/__init__.py +1 -0
  118. sage/libs/linkages/padics/fmpz_poly_unram.pxi +869 -0
  119. sage/libs/linkages/padics/mpz.pxi +691 -0
  120. sage/libs/linkages/padics/relaxed/API.pxi +518 -0
  121. sage/libs/linkages/padics/relaxed/__init__.py +1 -0
  122. sage/libs/linkages/padics/relaxed/flint.pxi +543 -0
  123. sage/libs/linkages/padics/unram_shared.pxi +247 -0
  124. sage/libs/pari/__init__.py +210 -0
  125. sage/libs/pari/all.py +5 -0
  126. sage/libs/pari/convert_flint.cpython-314-x86_64-linux-musl.so +0 -0
  127. sage/libs/pari/convert_flint.pxd +14 -0
  128. sage/libs/pari/convert_flint.pyx +159 -0
  129. sage/libs/pari/convert_gmp.cpython-314-x86_64-linux-musl.so +0 -0
  130. sage/libs/pari/convert_gmp.pxd +14 -0
  131. sage/libs/pari/convert_gmp.pyx +210 -0
  132. sage/libs/pari/convert_sage.cpython-314-x86_64-linux-musl.so +0 -0
  133. sage/libs/pari/convert_sage.pxd +16 -0
  134. sage/libs/pari/convert_sage.pyx +588 -0
  135. sage/libs/pari/convert_sage_complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  136. sage/libs/pari/convert_sage_complex_double.pxd +14 -0
  137. sage/libs/pari/convert_sage_complex_double.pyx +132 -0
  138. sage/libs/pari/convert_sage_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  139. sage/libs/pari/convert_sage_matrix.pyx +106 -0
  140. sage/libs/pari/convert_sage_real_double.cpython-314-x86_64-linux-musl.so +0 -0
  141. sage/libs/pari/convert_sage_real_double.pxd +5 -0
  142. sage/libs/pari/convert_sage_real_double.pyx +14 -0
  143. sage/libs/pari/convert_sage_real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  144. sage/libs/pari/convert_sage_real_mpfr.pxd +7 -0
  145. sage/libs/pari/convert_sage_real_mpfr.pyx +108 -0
  146. sage/libs/pari/misc.cpython-314-x86_64-linux-musl.so +0 -0
  147. sage/libs/pari/misc.pxd +4 -0
  148. sage/libs/pari/misc.pyx +26 -0
  149. sage/libs/pari/tests.py +1848 -0
  150. sage/matrix/all__sagemath_pari.py +1 -0
  151. sage/matrix/matrix_integer_pari.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/matrix/matrix_integer_pari.pyx +187 -0
  153. sage/matrix/matrix_rational_pari.cpython-314-x86_64-linux-musl.so +0 -0
  154. sage/matrix/matrix_rational_pari.pyx +160 -0
  155. sage/quadratic_forms/all__sagemath_pari.py +10 -0
  156. sage/quadratic_forms/genera/all.py +9 -0
  157. sage/quadratic_forms/genera/genus.py +3506 -0
  158. sage/quadratic_forms/genera/normal_form.py +1519 -0
  159. sage/quadratic_forms/genera/spinor_genus.py +243 -0
  160. sage/quadratic_forms/qfsolve.py +255 -0
  161. sage/quadratic_forms/quadratic_form__automorphisms.py +427 -0
  162. sage/quadratic_forms/quadratic_form__genus.py +141 -0
  163. sage/quadratic_forms/quadratic_form__local_density_interfaces.py +140 -0
  164. sage/quadratic_forms/quadratic_form__local_normal_form.py +421 -0
  165. sage/quadratic_forms/quadratic_form__local_representation_conditions.py +889 -0
  166. sage/quadratic_forms/quadratic_form__mass.py +69 -0
  167. sage/quadratic_forms/quadratic_form__mass__Conway_Sloane_masses.py +663 -0
  168. sage/quadratic_forms/quadratic_form__mass__Siegel_densities.py +373 -0
  169. sage/quadratic_forms/quadratic_form__siegel_product.py +198 -0
  170. sage/quadratic_forms/special_values.py +323 -0
  171. sage/rings/all__sagemath_pari.py +15 -0
  172. sage/rings/factorint_pari.cpython-314-x86_64-linux-musl.so +0 -0
  173. sage/rings/factorint_pari.pyx +80 -0
  174. sage/rings/finite_rings/all__sagemath_pari.py +1 -0
  175. sage/rings/finite_rings/element_givaro.cpython-314-x86_64-linux-musl.so +0 -0
  176. sage/rings/finite_rings/element_givaro.pxd +91 -0
  177. sage/rings/finite_rings/element_givaro.pyx +1769 -0
  178. sage/rings/finite_rings/element_ntl_gf2e.cpython-314-x86_64-linux-musl.so +0 -0
  179. sage/rings/finite_rings/element_ntl_gf2e.pxd +22 -0
  180. sage/rings/finite_rings/element_ntl_gf2e.pyx +1333 -0
  181. sage/rings/finite_rings/element_pari_ffelt.cpython-314-x86_64-linux-musl.so +0 -0
  182. sage/rings/finite_rings/element_pari_ffelt.pxd +13 -0
  183. sage/rings/finite_rings/element_pari_ffelt.pyx +1441 -0
  184. sage/rings/finite_rings/finite_field_givaro.py +612 -0
  185. sage/rings/finite_rings/finite_field_pari_ffelt.py +238 -0
  186. sage/rings/finite_rings/hom_finite_field_givaro.cpython-314-x86_64-linux-musl.so +0 -0
  187. sage/rings/finite_rings/hom_finite_field_givaro.pxd +28 -0
  188. sage/rings/finite_rings/hom_finite_field_givaro.pyx +280 -0
  189. sage/rings/finite_rings/residue_field_givaro.cpython-314-x86_64-linux-musl.so +0 -0
  190. sage/rings/finite_rings/residue_field_givaro.pyx +133 -0
  191. sage/rings/finite_rings/residue_field_pari_ffelt.cpython-314-x86_64-linux-musl.so +0 -0
  192. sage/rings/finite_rings/residue_field_pari_ffelt.pyx +128 -0
  193. sage/rings/function_field/all__sagemath_pari.py +1 -0
  194. sage/rings/function_field/valuation.py +1450 -0
  195. sage/rings/function_field/valuation_ring.py +212 -0
  196. sage/rings/number_field/all__sagemath_pari.py +14 -0
  197. sage/rings/number_field/totallyreal.cpython-314-x86_64-linux-musl.so +0 -0
  198. sage/rings/number_field/totallyreal.pyx +509 -0
  199. sage/rings/number_field/totallyreal_data.cpython-314-x86_64-linux-musl.so +0 -0
  200. sage/rings/number_field/totallyreal_data.pxd +26 -0
  201. sage/rings/number_field/totallyreal_data.pyx +928 -0
  202. sage/rings/number_field/totallyreal_phc.py +144 -0
  203. sage/rings/number_field/totallyreal_rel.py +1018 -0
  204. sage/rings/padics/CA_template.pxi +1847 -0
  205. sage/rings/padics/CA_template_header.pxi +50 -0
  206. sage/rings/padics/CR_template.pxi +2563 -0
  207. sage/rings/padics/CR_template_header.pxi +57 -0
  208. sage/rings/padics/FM_template.pxi +1575 -0
  209. sage/rings/padics/FM_template_header.pxi +50 -0
  210. sage/rings/padics/FP_template.pxi +2176 -0
  211. sage/rings/padics/FP_template_header.pxi +57 -0
  212. sage/rings/padics/all.py +3 -0
  213. sage/rings/padics/all__sagemath_pari.py +11 -0
  214. sage/rings/padics/common_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  215. sage/rings/padics/common_conversion.pxd +15 -0
  216. sage/rings/padics/common_conversion.pyx +508 -0
  217. sage/rings/padics/eisenstein_extension_generic.py +232 -0
  218. sage/rings/padics/factory.py +3623 -0
  219. sage/rings/padics/generic_nodes.py +1615 -0
  220. sage/rings/padics/lattice_precision.py +2889 -0
  221. sage/rings/padics/morphism.cpython-314-x86_64-linux-musl.so +0 -0
  222. sage/rings/padics/morphism.pxd +11 -0
  223. sage/rings/padics/morphism.pyx +366 -0
  224. sage/rings/padics/padic_base_generic.py +467 -0
  225. sage/rings/padics/padic_base_leaves.py +1235 -0
  226. sage/rings/padics/padic_capped_absolute_element.cpython-314-x86_64-linux-musl.so +0 -0
  227. sage/rings/padics/padic_capped_absolute_element.pxd +15 -0
  228. sage/rings/padics/padic_capped_absolute_element.pyx +520 -0
  229. sage/rings/padics/padic_capped_relative_element.cpython-314-x86_64-linux-musl.so +0 -0
  230. sage/rings/padics/padic_capped_relative_element.pxd +14 -0
  231. sage/rings/padics/padic_capped_relative_element.pyx +614 -0
  232. sage/rings/padics/padic_extension_generic.py +990 -0
  233. sage/rings/padics/padic_extension_leaves.py +738 -0
  234. sage/rings/padics/padic_fixed_mod_element.cpython-314-x86_64-linux-musl.so +0 -0
  235. sage/rings/padics/padic_fixed_mod_element.pxd +15 -0
  236. sage/rings/padics/padic_fixed_mod_element.pyx +584 -0
  237. sage/rings/padics/padic_floating_point_element.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/rings/padics/padic_floating_point_element.pxd +14 -0
  239. sage/rings/padics/padic_floating_point_element.pyx +447 -0
  240. sage/rings/padics/padic_generic_element.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/rings/padics/padic_generic_element.pxd +48 -0
  242. sage/rings/padics/padic_generic_element.pyx +4642 -0
  243. sage/rings/padics/padic_lattice_element.py +1342 -0
  244. sage/rings/padics/padic_printing.cpython-314-x86_64-linux-musl.so +0 -0
  245. sage/rings/padics/padic_printing.pxd +38 -0
  246. sage/rings/padics/padic_printing.pyx +1505 -0
  247. sage/rings/padics/padic_relaxed_element.cpython-314-x86_64-linux-musl.so +0 -0
  248. sage/rings/padics/padic_relaxed_element.pxd +56 -0
  249. sage/rings/padics/padic_relaxed_element.pyx +18 -0
  250. sage/rings/padics/padic_relaxed_errors.cpython-314-x86_64-linux-musl.so +0 -0
  251. sage/rings/padics/padic_relaxed_errors.pxd +11 -0
  252. sage/rings/padics/padic_relaxed_errors.pyx +71 -0
  253. sage/rings/padics/padic_template_element.pxi +1212 -0
  254. sage/rings/padics/padic_template_element_header.pxi +50 -0
  255. sage/rings/padics/padic_valuation.py +1423 -0
  256. sage/rings/padics/pow_computer_flint.cpython-314-x86_64-linux-musl.so +0 -0
  257. sage/rings/padics/pow_computer_flint.pxd +38 -0
  258. sage/rings/padics/pow_computer_flint.pyx +641 -0
  259. sage/rings/padics/pow_computer_relative.cpython-314-x86_64-linux-musl.so +0 -0
  260. sage/rings/padics/pow_computer_relative.pxd +29 -0
  261. sage/rings/padics/pow_computer_relative.pyx +415 -0
  262. sage/rings/padics/qadic_flint_CA.cpython-314-x86_64-linux-musl.so +0 -0
  263. sage/rings/padics/qadic_flint_CA.pxd +21 -0
  264. sage/rings/padics/qadic_flint_CA.pyx +130 -0
  265. sage/rings/padics/qadic_flint_CR.cpython-314-x86_64-linux-musl.so +0 -0
  266. sage/rings/padics/qadic_flint_CR.pxd +13 -0
  267. sage/rings/padics/qadic_flint_CR.pyx +172 -0
  268. sage/rings/padics/qadic_flint_FM.cpython-314-x86_64-linux-musl.so +0 -0
  269. sage/rings/padics/qadic_flint_FM.pxd +14 -0
  270. sage/rings/padics/qadic_flint_FM.pyx +111 -0
  271. sage/rings/padics/qadic_flint_FP.cpython-314-x86_64-linux-musl.so +0 -0
  272. sage/rings/padics/qadic_flint_FP.pxd +12 -0
  273. sage/rings/padics/qadic_flint_FP.pyx +165 -0
  274. sage/rings/padics/relative_extension_leaves.py +429 -0
  275. sage/rings/padics/relative_ramified_CA.cpython-314-x86_64-linux-musl.so +0 -0
  276. sage/rings/padics/relative_ramified_CA.pxd +9 -0
  277. sage/rings/padics/relative_ramified_CA.pyx +33 -0
  278. sage/rings/padics/relative_ramified_CR.cpython-314-x86_64-linux-musl.so +0 -0
  279. sage/rings/padics/relative_ramified_CR.pxd +8 -0
  280. sage/rings/padics/relative_ramified_CR.pyx +33 -0
  281. sage/rings/padics/relative_ramified_FM.cpython-314-x86_64-linux-musl.so +0 -0
  282. sage/rings/padics/relative_ramified_FM.pxd +9 -0
  283. sage/rings/padics/relative_ramified_FM.pyx +33 -0
  284. sage/rings/padics/relative_ramified_FP.cpython-314-x86_64-linux-musl.so +0 -0
  285. sage/rings/padics/relative_ramified_FP.pxd +8 -0
  286. sage/rings/padics/relative_ramified_FP.pyx +33 -0
  287. sage/rings/padics/relaxed_template.pxi +4229 -0
  288. sage/rings/padics/relaxed_template_header.pxi +160 -0
  289. sage/rings/padics/tests.py +35 -0
  290. sage/rings/padics/tutorial.py +341 -0
  291. sage/rings/padics/unramified_extension_generic.py +335 -0
  292. sage/rings/padics/witt_vector.py +917 -0
  293. sage/rings/padics/witt_vector_ring.py +934 -0
  294. sage/rings/pari_ring.py +235 -0
  295. sage/rings/polynomial/all__sagemath_pari.py +1 -0
  296. sage/rings/polynomial/padics/all.py +1 -0
  297. sage/rings/polynomial/padics/polynomial_padic.py +360 -0
  298. sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py +1324 -0
  299. sage/rings/polynomial/padics/polynomial_padic_flat.py +72 -0
  300. sage/rings/power_series_pari.cpython-314-x86_64-linux-musl.so +0 -0
  301. sage/rings/power_series_pari.pxd +6 -0
  302. sage/rings/power_series_pari.pyx +934 -0
  303. sage/rings/tate_algebra.py +1282 -0
  304. sage/rings/tate_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  305. sage/rings/tate_algebra_element.pxd +49 -0
  306. sage/rings/tate_algebra_element.pyx +3464 -0
  307. sage/rings/tate_algebra_ideal.cpython-314-x86_64-linux-musl.so +0 -0
  308. sage/rings/tate_algebra_ideal.pxd +7 -0
  309. sage/rings/tate_algebra_ideal.pyx +1307 -0
  310. sage/rings/valuation/all.py +7 -0
  311. sage/rings/valuation/augmented_valuation.py +2118 -0
  312. sage/rings/valuation/developing_valuation.py +362 -0
  313. sage/rings/valuation/gauss_valuation.py +812 -0
  314. sage/rings/valuation/inductive_valuation.py +1686 -0
  315. sage/rings/valuation/limit_valuation.py +946 -0
  316. sage/rings/valuation/mapped_valuation.py +656 -0
  317. sage/rings/valuation/scaled_valuation.py +322 -0
  318. sage/rings/valuation/trivial_valuation.py +382 -0
  319. sage/rings/valuation/valuation.py +1119 -0
  320. sage/rings/valuation/valuation_space.py +1615 -0
  321. sage/rings/valuation/valuations_catalog.py +10 -0
  322. sage/rings/valuation/value_group.py +697 -0
  323. sage/schemes/all__sagemath_pari.py +1 -0
  324. sage/schemes/elliptic_curves/all__sagemath_pari.py +1 -0
  325. sage/schemes/elliptic_curves/descent_two_isogeny_pari.cpython-314-x86_64-linux-musl.so +0 -0
  326. sage/schemes/elliptic_curves/descent_two_isogeny_pari.pyx +46 -0
  327. sage_wheels/bin/gp +0 -0
  328. sage_wheels/bin/gp2c +0 -0
  329. sage_wheels/bin/gp2c-run +57 -0
  330. sage_wheels/bin/xeus-gp +0 -0
  331. sage_wheels/share/gp2c/func.dsc +18414 -0
@@ -0,0 +1,738 @@
1
+ # sage_setup: distribution = sagemath-pari
2
+ r"""
3
+ `p`-adic Extension Leaves
4
+
5
+ The final classes for extensions of `\ZZ_p` and `\QQ_p` (i.e., classes that are not
6
+ just designed to be inherited from).
7
+
8
+ AUTHORS:
9
+
10
+ - David Roe
11
+ """
12
+
13
+ #*****************************************************************************
14
+ # Copyright (C) 2008 David Roe <roed.math@gmail.com>
15
+ # William Stein <wstein@gmail.com>
16
+ #
17
+ # Distributed under the terms of the GNU General Public License (GPL)
18
+ # as published by the Free Software Foundation; either version 2 of
19
+ # the License, or (at your option) any later version.
20
+ #
21
+ # http://www.gnu.org/licenses/
22
+ #*****************************************************************************
23
+
24
+ from sage.misc.lazy_import import lazy_import
25
+ from sage.rings.integer_ring import ZZ
26
+ from sage.rings.finite_rings.integer_mod_ring import Zmod
27
+
28
+ lazy_import('sage.rings.padics.pow_computer_ext', 'PowComputer_ext_maker')
29
+ lazy_import('sage.rings.padics.pow_computer_flint', 'PowComputer_flint_maker')
30
+ lazy_import('sage.libs.ntl.ntl_ZZ_pX', 'ntl_ZZ_pX')
31
+
32
+ from .unramified_extension_generic import UnramifiedExtensionGeneric
33
+ from .eisenstein_extension_generic import EisensteinExtensionGeneric
34
+ #from padic_general_extension_generic import pAdicGeneralExtensionGeneric
35
+
36
+ from .generic_nodes import pAdicCappedRelativeRingGeneric, \
37
+ pAdicCappedRelativeFieldGeneric, \
38
+ pAdicCappedAbsoluteRingGeneric, \
39
+ pAdicFixedModRingGeneric, \
40
+ pAdicFloatingPointRingGeneric, \
41
+ pAdicFloatingPointFieldGeneric
42
+
43
+ #from unramified_extension_absolute_element import UnramifiedExtensionAbsoluteElement
44
+ #from unramified_extension_capped_relative_element import UnramifiedExtensionCappedRelativeElement
45
+ #from unramified_extension_lazy_element import UnramifiedExtensionRelaxedElement
46
+ #from eisenstein_extension_absolute_element import EisensteinExtensionAbsoluteElement
47
+ #from eisenstein_extension_capped_relative_element import EisensteinExtensionCappedRelativeElement
48
+ #from eisenstein_extension_lazy_element import EisensteinExtensionRelaxedElement
49
+ #from padic_general_extension_absolute_element import pAdicGeneralExtensionAbsoluteElement
50
+ #from padic_general_extension_capped_relative_element import pAdicGeneralExtensionCappedRelativeElement
51
+ #from padic_general_extension_lazy_element import pAdicGeneralExtensionRelaxedElement
52
+
53
+ try:
54
+ from .padic_ZZ_pX_FM_element import pAdicZZpXFMElement
55
+ from .padic_ZZ_pX_CR_element import pAdicZZpXCRElement
56
+ from .padic_ZZ_pX_CA_element import pAdicZZpXCAElement
57
+ except ImportError:
58
+ pass
59
+
60
+ try:
61
+ from .qadic_flint_CR import qAdicCappedRelativeElement
62
+ from .qadic_flint_CA import qAdicCappedAbsoluteElement
63
+ from .qadic_flint_FM import qAdicFixedModElement
64
+ from .qadic_flint_FP import qAdicFloatingPointElement
65
+ except ImportError:
66
+ pass
67
+
68
+
69
+ def _make_integral_poly(exact_modulus, p, prec):
70
+ """
71
+ Convert a defining polynomial into one with integral coefficients.
72
+
73
+ INPUT:
74
+
75
+ - ``exact_modulus`` -- a univariate polynomial
76
+
77
+ - ``p`` -- a prime
78
+
79
+ - ``prec`` -- the precision
80
+
81
+ EXAMPLES::
82
+
83
+ sage: from sage.rings.padics.padic_extension_leaves import _make_integral_poly
84
+ sage: R.<x> = QQ[]
85
+ sage: f = _make_integral_poly(x^2 - 2, 5, 3); f
86
+ x^2 - 2
87
+ sage: f.parent()
88
+ Univariate Polynomial Ring in x over Integer Ring
89
+ sage: f = _make_integral_poly(x^2 - 2/7, 5, 3); f
90
+ x^2 + 89
91
+ sage: f.parent()
92
+ Univariate Polynomial Ring in x over Integer Ring
93
+ """
94
+ try:
95
+ return exact_modulus.change_ring(ZZ)
96
+ except TypeError:
97
+ return exact_modulus.change_ring(Zmod(p**prec)).change_ring(ZZ)
98
+
99
+
100
+ class UnramifiedExtensionRingCappedRelative(UnramifiedExtensionGeneric, pAdicCappedRelativeRingGeneric):
101
+ """
102
+ TESTS::
103
+
104
+ sage: R.<a> = ZqCR(27,1000) # needs sage.libs.ntl
105
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.libs.ntl
106
+ """
107
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='FLINT'):
108
+ r"""
109
+ A capped relative representation of `\ZZ_q`.
110
+
111
+ INPUT:
112
+
113
+ - ``exact_modulus`` -- the original polynomial defining the extension.
114
+ This could be a polynomial with integer coefficients, for example,
115
+ while ``poly`` has coefficients in a `p`-adic ring.
116
+
117
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
118
+ defining this extension
119
+
120
+ - ``prec`` -- the precision cap of this ring
121
+
122
+ - ``print_mode`` -- dictionary of print options
123
+
124
+ - ``shift_seed`` -- unused
125
+
126
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name,
127
+ unramified_subextension_variable_name, uniformizer_name)``
128
+
129
+ EXAMPLES::
130
+
131
+ sage: R.<a> = ZqCR(27,10000); R # indirect doctest # needs sage.libs.ntl
132
+ 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
133
+
134
+ sage: R.<a> = ZqCR(next_prime(10^30)^3, 3); R.prime() # needs sage.libs.ntl
135
+ 1000000000000000000000000000057
136
+ """
137
+ self._shift_seed = None
138
+ self._exact_modulus = exact_modulus
139
+ self._implementation = implementation
140
+ if implementation == 'NTL':
141
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**prec)
142
+ if prec <= 30:
143
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), prec, prec, prec, False, ntl_poly, "small", "u")
144
+ else:
145
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, prec, prec, False, ntl_poly, "big", "u")
146
+ element_class = pAdicZZpXCRElement
147
+ else:
148
+ Zpoly = _make_integral_poly(exact_modulus, poly.base_ring().prime(), prec)
149
+ cache_limit = min(prec, 30)
150
+ self.prime_pow = PowComputer_flint_maker(poly.base_ring().prime(), cache_limit, prec, prec, False, Zpoly, prec_type='capped-rel')
151
+ element_class = qAdicCappedRelativeElement
152
+ UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, element_class)
153
+ if implementation != 'NTL':
154
+ from .qadic_flint_CR import pAdicCoercion_ZZ_CR, pAdicConvert_QQ_CR
155
+ self.register_coercion(pAdicCoercion_ZZ_CR(self))
156
+ self.register_conversion(pAdicConvert_QQ_CR(self))
157
+
158
+
159
+ class UnramifiedExtensionFieldCappedRelative(UnramifiedExtensionGeneric, pAdicCappedRelativeFieldGeneric):
160
+ """
161
+ TESTS::
162
+
163
+ sage: R.<a> = QqCR(27,1000) # needs sage.libs.ntl
164
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.libs.ntl
165
+ """
166
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='FLINT'):
167
+ r"""
168
+ A representation of `\QQ_q`.
169
+
170
+ INPUT:
171
+
172
+ - ``exact_modulus`` -- the original polynomial defining the extension.
173
+ This could be a polynomial with rational coefficients, for example,
174
+ while ``poly`` has coefficients in a `p`-adic field.
175
+
176
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
177
+ defining this extension
178
+
179
+ - ``prec`` -- the precision cap of this ring
180
+
181
+ - ``print_mode`` -- dictionary of print options
182
+
183
+ - ``shift_seed`` -- unused
184
+
185
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name,
186
+ unramified_subextension_variable_name, uniformizer_name)``
187
+
188
+ EXAMPLES::
189
+
190
+ sage: R.<a> = Qq(27,10000); R # indirect doctest # needs sage.libs.ntl
191
+ 3-adic Unramified Extension Field in a defined by x^3 + 2*x + 1
192
+
193
+ sage: R.<a> = Qq(next_prime(10^30)^3, 3); R.prime() # needs sage.libs.ntl
194
+ 1000000000000000000000000000057
195
+ """
196
+ # Currently doesn't support polynomials with non-integral coefficients
197
+ self._shift_seed = None
198
+ self._exact_modulus = exact_modulus
199
+ self._implementation = implementation
200
+ if implementation == 'NTL':
201
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**prec)
202
+ if prec <= 30:
203
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), prec, prec, prec, True, ntl_poly, "small", "u")
204
+ else:
205
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, prec, prec, True, ntl_poly, "big", "u")
206
+ element_class = pAdicZZpXCRElement
207
+ else:
208
+ Zpoly = _make_integral_poly(exact_modulus, poly.base_ring().prime(), prec)
209
+ cache_limit = min(prec, 30)
210
+ self.prime_pow = PowComputer_flint_maker(poly.base_ring().prime(), cache_limit, prec, prec, True, Zpoly, prec_type='capped-rel')
211
+ element_class = qAdicCappedRelativeElement
212
+ UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, element_class)
213
+ if implementation != 'NTL':
214
+ from .qadic_flint_CR import pAdicCoercion_ZZ_CR, pAdicCoercion_QQ_CR
215
+ self.register_coercion(pAdicCoercion_ZZ_CR(self))
216
+ self.register_coercion(pAdicCoercion_QQ_CR(self))
217
+
218
+ def _coerce_map_from_(self, R):
219
+ r"""
220
+ Return a coercion from ``R`` into this ring or ``True`` if the default
221
+ conversion map can be used to perform a coercion.
222
+
223
+ EXAMPLES::
224
+
225
+ sage: R.<a> = QqCR(27) # needs sage.libs.ntl
226
+ sage: R.coerce_map_from(ZqCR(27,names='a')) # indirect doctest # needs sage.libs.ntl
227
+ Ring morphism:
228
+ From: 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
229
+ To: 3-adic Unramified Extension Field in a defined by x^3 + 2*x + 1
230
+ sage: R.coerce_map_from(ZqCA(27,names='a')) # indirect doctest # needs sage.libs.ntl
231
+ Ring morphism:
232
+ From: 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
233
+ To: 3-adic Unramified Extension Field in a defined by x^3 + 2*x + 1
234
+ """
235
+ if isinstance(R, UnramifiedExtensionRingCappedRelative) and R.fraction_field() is self:
236
+ from sage.rings.padics.qadic_flint_CR import pAdicCoercion_CR_frac_field
237
+ return pAdicCoercion_CR_frac_field(R, self)
238
+ if isinstance(R, UnramifiedExtensionRingCappedAbsolute) and R.fraction_field() is self:
239
+ from sage.rings.padics.qadic_flint_CA import pAdicCoercion_CA_frac_field
240
+ return pAdicCoercion_CA_frac_field(R, self)
241
+
242
+ return super()._coerce_map_from_(R)
243
+
244
+
245
+ class UnramifiedExtensionRingCappedAbsolute(UnramifiedExtensionGeneric, pAdicCappedAbsoluteRingGeneric):
246
+ """
247
+ TESTS::
248
+
249
+ sage: R.<a> = ZqCA(27,1000) # needs sage.libs.flint
250
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.libs.flint
251
+ """
252
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='FLINT'):
253
+ r"""
254
+ A capped absolute representation of `ZZ_q`.
255
+
256
+ INPUT:
257
+
258
+ - ``exact_modulus`` -- the original polynomial defining the extension.
259
+ This could be a polynomial with integer coefficients, for example,
260
+ while ``poly`` has coefficients in a `p`-adic ring.
261
+
262
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
263
+ defining this extension
264
+
265
+ - ``prec`` -- the precision cap of this ring
266
+
267
+ - ``print_mode`` -- dictionary of print options
268
+
269
+ - ``shift_seed`` -- unused
270
+
271
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name,
272
+ unramified_subextension_variable_name, uniformizer_name)``
273
+
274
+ EXAMPLES::
275
+
276
+ sage: R.<a> = ZqCA(27,10000); R # indirect doctest # needs sage.libs.flint
277
+ 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
278
+
279
+ sage: R.<a> = ZqCA(next_prime(10^30)^3, 3); R.prime() # needs sage.libs.flint
280
+ 1000000000000000000000000000057
281
+ """
282
+ # Currently doesn't support polynomials with non-integral coefficients
283
+ self._shift_seed = None
284
+ self._exact_modulus = exact_modulus
285
+ self._implementation = implementation
286
+ if implementation == 'NTL':
287
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**prec)
288
+ if prec <= 30:
289
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), prec, prec, prec, True, ntl_poly, "small", "u")
290
+ else:
291
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, prec, prec, True, ntl_poly, "big", "u")
292
+ element_class = pAdicZZpXCAElement
293
+ else:
294
+ Zpoly = _make_integral_poly(exact_modulus, poly.base_ring().prime(), prec)
295
+ cache_limit = min(prec, 30)
296
+ self.prime_pow = PowComputer_flint_maker(poly.base_ring().prime(), cache_limit, prec, prec, False, Zpoly, prec_type='capped-abs')
297
+ element_class = qAdicCappedAbsoluteElement
298
+ UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, element_class)
299
+ if implementation != 'NTL':
300
+ from .qadic_flint_CA import pAdicCoercion_ZZ_CA, pAdicConvert_QQ_CA
301
+ self.register_coercion(pAdicCoercion_ZZ_CA(self))
302
+ self.register_conversion(pAdicConvert_QQ_CA(self))
303
+
304
+
305
+ class UnramifiedExtensionRingFixedMod(UnramifiedExtensionGeneric, pAdicFixedModRingGeneric):
306
+ """
307
+ TESTS::
308
+
309
+ sage: R.<a> = ZqFM(27,1000) # needs sage.libs.flint
310
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # long time # needs sage.libs.flint
311
+ """
312
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='FLINT'):
313
+ """
314
+ A fixed modulus representation of Zq.
315
+
316
+ INPUT:
317
+
318
+ - ``exact_modulus`` -- the original polynomial defining the extension.
319
+ This could be a polynomial with integer coefficients, for example,
320
+ while ``poly`` has coefficients in a `p`-adic field.
321
+
322
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
323
+ defining this extension
324
+
325
+ - ``prec`` -- the precision cap of this ring
326
+
327
+ - ``print_mode`` -- dictionary of print options
328
+
329
+ - ``shift_seed`` -- unused
330
+
331
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
332
+
333
+ EXAMPLES::
334
+
335
+ sage: R.<a> = ZqFM(27,10000); R # indirect doctest # needs sage.libs.flint
336
+ 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
337
+
338
+ sage: R.<a> = ZqFM(next_prime(10^30)^3, 3); R.prime() # needs sage.libs.flint
339
+ 1000000000000000000000000000057
340
+ """
341
+ self._shift_seed = None
342
+ self._exact_modulus = exact_modulus
343
+ self._implementation = implementation
344
+ if implementation == 'NTL':
345
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**prec)
346
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), max(min(prec - 1, 30), 1), prec, prec, False, ntl_poly, "FM", "u")
347
+ element_class = pAdicZZpXFMElement
348
+ else:
349
+ Zpoly = _make_integral_poly(exact_modulus, poly.base_ring().prime(), prec)
350
+ cache_limit = 0 # prevents caching
351
+ self.prime_pow = PowComputer_flint_maker(poly.base_ring().prime(), cache_limit, prec, prec, False, Zpoly, prec_type='fixed-mod')
352
+ element_class = qAdicFixedModElement
353
+ UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, element_class)
354
+ if implementation != 'NTL':
355
+ from .qadic_flint_FM import pAdicCoercion_ZZ_FM, pAdicConvert_QQ_FM
356
+ self.register_coercion(pAdicCoercion_ZZ_FM(self))
357
+ self.register_conversion(pAdicConvert_QQ_FM(self))
358
+
359
+ #def coerce_map_explicit(self, S):
360
+ # from sage.rings.padics.morphism import Morphism_ZZ_UnrFM, Morphism_ZpFM_UnrFM
361
+ # if S is ZZ:
362
+ # return Morphism_ZZ_UnrFM(self)
363
+ # elif isinstance(S, pAdicRingFixedMod) and S.prime() == self.prime():
364
+ # return Morphism_ZpFM_UnrFM(S, self)
365
+ # return None
366
+
367
+
368
+ class UnramifiedExtensionRingFloatingPoint(UnramifiedExtensionGeneric, pAdicFloatingPointRingGeneric):
369
+ """
370
+ TESTS::
371
+
372
+ sage: R.<a> = ZqFP(27,10000); R == loads(dumps(R)) # needs sage.libs.flint
373
+ True
374
+ """
375
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='FLINT'):
376
+ r"""
377
+ A floating point representation of `\ZZ_q`.
378
+
379
+ INPUT:
380
+
381
+ - ``exact_modulus`` -- the original polynomial defining the extension.
382
+ This could be a polynomial with integer coefficients, for example,
383
+ while ``poly`` has coefficients in `\ZZ_p`.
384
+
385
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
386
+ defining this extension
387
+
388
+ - ``prec`` -- the precision cap of this ring
389
+
390
+ - ``print_mode`` -- dictionary of print options
391
+
392
+ - ``shift_seed`` -- unused
393
+
394
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
395
+
396
+ EXAMPLES::
397
+
398
+ sage: R.<a> = ZqFP(27,10000); R # indirect doctest # needs sage.libs.flint
399
+ 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
400
+ sage: R.<a> = ZqFP(next_prime(10^30)^3, 3); R.prime() # needs sage.libs.flint
401
+ 1000000000000000000000000000057
402
+
403
+ TESTS:
404
+
405
+ Check that :issue:`23228` has been resolved::
406
+
407
+ sage: a % R.prime() # needs sage.libs.flint
408
+ a
409
+ """
410
+ self._shift_seed = None
411
+ self._exact_modulus = exact_modulus
412
+ self._implementation = implementation
413
+ if implementation == 'NTL':
414
+ raise NotImplementedError
415
+ Zpoly = _make_integral_poly(exact_modulus, poly.base_ring().prime(), prec)
416
+ cache_limit = min(prec, 30)
417
+ self.prime_pow = PowComputer_flint_maker(poly.base_ring().prime(), cache_limit, prec, prec, False, Zpoly, prec_type='floating-point')
418
+ UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, qAdicFloatingPointElement)
419
+ from .qadic_flint_FP import pAdicCoercion_ZZ_FP, pAdicConvert_QQ_FP
420
+ self.register_coercion(pAdicCoercion_ZZ_FP(self))
421
+ self.register_conversion(pAdicConvert_QQ_FP(self))
422
+
423
+
424
+ class UnramifiedExtensionFieldFloatingPoint(UnramifiedExtensionGeneric, pAdicFloatingPointFieldGeneric):
425
+ """
426
+ TESTS::
427
+
428
+ sage: R.<a> = QqFP(27,10000); R == loads(dumps(R)) # needs sage.libs.flint
429
+ True
430
+ """
431
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='FLINT'):
432
+ r"""
433
+ A representation of `\QQ_q`.
434
+
435
+ INPUT:
436
+
437
+ - ``exact_modulus`` -- the original polynomial defining the extension.
438
+ This could be a polynomial with rational coefficients, for example,
439
+ while ``poly`` has coefficients in a `p`-adic field.
440
+
441
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
442
+ defining this extension
443
+
444
+ - ``prec`` -- the precision cap of this ring
445
+
446
+ - ``print_mode`` -- dictionary of print options
447
+
448
+ - ``shift_seed`` -- unused
449
+
450
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
451
+
452
+ EXAMPLES::
453
+
454
+ sage: R.<a> = QqFP(27,10000); R # indirect doctest # needs sage.libs.flint
455
+ 3-adic Unramified Extension Field in a defined by x^3 + 2*x + 1
456
+ sage: R.<a> = Qq(next_prime(10^30)^3, 3); R.prime() # needs sage.libs.ntl
457
+ 1000000000000000000000000000057
458
+ """
459
+ # Currently doesn't support polynomials with non-integral coefficients
460
+ self._shift_seed = None
461
+ self._exact_modulus = exact_modulus
462
+ self._implementation = implementation
463
+ if implementation == 'NTL':
464
+ raise NotImplementedError
465
+ Zpoly = _make_integral_poly(exact_modulus, poly.base_ring().prime(), prec)
466
+ cache_limit = min(prec, 30)
467
+ self.prime_pow = PowComputer_flint_maker(poly.base_ring().prime(), cache_limit, prec, prec, True, Zpoly, prec_type='floating-point')
468
+ UnramifiedExtensionGeneric.__init__(self, poly, prec, print_mode, names, qAdicFloatingPointElement)
469
+ from .qadic_flint_FP import pAdicCoercion_ZZ_FP, pAdicCoercion_QQ_FP
470
+ self.register_coercion(pAdicCoercion_ZZ_FP(self))
471
+ self.register_coercion(pAdicCoercion_QQ_FP(self))
472
+
473
+ def _coerce_map_from_(self, R):
474
+ r"""
475
+ Return a coercion from ``R`` into this ring or ``True`` if the default
476
+ conversion map can be used to perform a coercion.
477
+
478
+ EXAMPLES::
479
+
480
+ sage: R.<a> = QqFP(27) # needs sage.libs.flint
481
+ sage: R.coerce_map_from(ZqFP(27,names='a')) # indirect doctest # needs sage.libs.flint
482
+ Ring morphism:
483
+ From: 3-adic Unramified Extension Ring in a defined by x^3 + 2*x + 1
484
+ To: 3-adic Unramified Extension Field in a defined by x^3 + 2*x + 1
485
+ """
486
+ if isinstance(R, UnramifiedExtensionRingFloatingPoint) and R.fraction_field() is self:
487
+ from sage.rings.padics.qadic_flint_FP import pAdicCoercion_FP_frac_field
488
+ return pAdicCoercion_FP_frac_field(R, self)
489
+
490
+ return super()._coerce_map_from_(R)
491
+
492
+
493
+ class EisensteinExtensionRingCappedRelative(EisensteinExtensionGeneric, pAdicCappedRelativeRingGeneric):
494
+ """
495
+ TESTS::
496
+
497
+ sage: R = Zp(3, 1000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
498
+ sage: W.<w> = R.ext(f) # needs sage.libs.ntl sage.rings.padics
499
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.geometry.polyhedron
500
+ """
501
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='NTL'):
502
+ r"""
503
+ A capped relative representation of an Eisenstein extension of `\ZZ_p`.
504
+
505
+ INPUT:
506
+
507
+ - ``exact_modulus`` -- the original polynomial defining the extension.
508
+ This could be a polynomial with integer coefficients, for example,
509
+ while ``poly`` has coefficients in a `p`-adic ring.
510
+
511
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
512
+ defining this extension
513
+
514
+ - ``prec`` -- the precision cap of this ring
515
+
516
+ - ``print_mode`` -- dictionary of print options
517
+
518
+ - ``shift_seed`` -- unused
519
+
520
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
521
+
522
+ EXAMPLES::
523
+
524
+ sage: R = Zp(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
525
+ sage: W.<w> = R.ext(f); W # indirect doctest # needs sage.libs.ntl
526
+ 3-adic Eisenstein Extension Ring in w defined by x^3 + 9*x - 3
527
+ sage: W.precision_cap() # needs sage.libs.ntl
528
+ 30000
529
+
530
+ sage: R.<p> = Zp(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p # needs sage.libs.ntl
531
+ sage: W.<w> = R.ext(f); W.prime() # needs sage.libs.ntl
532
+ 1000000000000000000000000000057
533
+ sage: W.precision_cap() # needs sage.libs.ntl
534
+ 9
535
+ """
536
+ unram_prec = (prec + poly.degree() - 1) // poly.degree()
537
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec)
538
+ shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec)
539
+ if unram_prec <= 30:
540
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), unram_prec, unram_prec, prec, False, ntl_poly, "small", "e", shift_poly)
541
+ else:
542
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, unram_prec, prec, False, ntl_poly, "big", "e", shift_poly)
543
+ self._shift_seed = shift_seed
544
+ self._exact_modulus = exact_modulus
545
+ self._implementation = implementation
546
+ EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXCRElement)
547
+
548
+
549
+ class EisensteinExtensionFieldCappedRelative(EisensteinExtensionGeneric, pAdicCappedRelativeFieldGeneric):
550
+ """
551
+ TESTS::
552
+
553
+ sage: R = Qp(3, 1000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
554
+ sage: W.<w> = R.ext(f) # needs sage.libs.ntl
555
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.geometry.polyhedron
556
+ """
557
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='NTL'):
558
+ r"""
559
+ A capped relative representation of an Eisenstein extension of `\QQ_p`.
560
+
561
+ INPUT:
562
+
563
+ - ``exact_modulus`` -- the original polynomial defining the extension.
564
+ This could be a polynomial with rational coefficients, for example,
565
+ while ``poly`` has coefficients in a `p`-adic field.
566
+
567
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
568
+ defining this extension
569
+
570
+ - ``prec`` -- the precision cap of this ring
571
+
572
+ - ``print_mode`` -- dictionary of print options
573
+
574
+ - ``shift_seed`` -- unused
575
+
576
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
577
+
578
+ EXAMPLES::
579
+
580
+ sage: R = Qp(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
581
+ sage: W.<w> = R.ext(f); W # indirect doctest # needs sage.libs.ntl
582
+ 3-adic Eisenstein Extension Field in w defined by x^3 + 9*x - 3
583
+ sage: W.precision_cap() # needs sage.libs.ntl
584
+ 30000
585
+
586
+ sage: R.<p> = Qp(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p # needs sage.libs.ntl
587
+ sage: W.<w> = R.ext(f); W.prime() # needs sage.libs.ntl
588
+ 1000000000000000000000000000057
589
+ sage: W.precision_cap() # needs sage.libs.ntl
590
+ 9
591
+ """
592
+ # Currently doesn't support polynomials with non-integral coefficients
593
+ unram_prec = (prec + poly.degree() - 1) // poly.degree()
594
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec)
595
+ shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec)
596
+ if unram_prec <= 30:
597
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), unram_prec, unram_prec, prec, True, ntl_poly, "small", "e", shift_poly)
598
+ else:
599
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, unram_prec, prec, True, ntl_poly, "big", "e", shift_poly)
600
+ self._shift_seed = shift_seed
601
+ self._exact_modulus = exact_modulus
602
+ self._implementation = implementation
603
+ EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXCRElement)
604
+
605
+
606
+ class EisensteinExtensionRingCappedAbsolute(EisensteinExtensionGeneric, pAdicCappedAbsoluteRingGeneric):
607
+ """
608
+ TESTS::
609
+
610
+ sage: R = ZpCA(3, 1000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
611
+ sage: W.<w> = R.ext(f) # needs sage.libs.ntl sage.rings.padics
612
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.geometry.polyhedron
613
+ """
614
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation):
615
+ r"""
616
+ A capped absolute representation of an Eisenstein extension of `\ZZ_p`.
617
+
618
+ INPUT:
619
+
620
+ - ``exact_modulus`` -- the original polynomial defining the extension.
621
+ This could be a polynomial with integer coefficients, for example,
622
+ while ``poly`` has coefficients in a `p`-adic ring.
623
+
624
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
625
+ defining this extension
626
+
627
+ - ``prec`` -- the precision cap of this ring
628
+
629
+ - ``print_mode`` -- dictionary of print options
630
+
631
+ - ``shift_seed`` -- unused
632
+
633
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
634
+
635
+ EXAMPLES::
636
+
637
+ sage: R = ZpCA(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
638
+ sage: W.<w> = R.ext(f); W # needs sage.libs.ntl
639
+ 3-adic Eisenstein Extension Ring in w defined by x^3 + 9*x - 3
640
+ sage: W.precision_cap() # needs sage.libs.ntl
641
+ 30000
642
+
643
+ sage: R.<p> = ZpCA(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p
644
+ sage: W.<w> = R.ext(f); W.prime() # needs sage.libs.ntl
645
+ 1000000000000000000000000000057
646
+ sage: W.precision_cap() # needs sage.libs.ntl
647
+ 9
648
+ """
649
+ unram_prec = (prec + poly.degree() - 1) // poly.degree()
650
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec)
651
+ shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()], shift_seed.base_ring().prime()**unram_prec)
652
+ if unram_prec <= 30:
653
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), unram_prec, unram_prec, prec, False, ntl_poly, "small", "e", shift_poly)
654
+ else:
655
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), 30, unram_prec, prec, False, ntl_poly, "big", "e", shift_poly)
656
+ self._shift_seed = shift_seed
657
+ self._exact_modulus = exact_modulus
658
+ self._implementation = implementation
659
+ EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXCAElement)
660
+
661
+
662
+ class EisensteinExtensionRingFixedMod(EisensteinExtensionGeneric, pAdicFixedModRingGeneric):
663
+ """
664
+ TESTS::
665
+
666
+ sage: R = ZpFM(3, 1000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
667
+ sage: W.<w> = R.ext(f) # needs sage.libs.ntl sage.rings.padics
668
+ sage: TestSuite(R).run(skip='_test_log',max_runs=4) # needs sage.geometry.polyhedron
669
+ """
670
+ def __init__(self, exact_modulus, poly, prec, print_mode, shift_seed, names, implementation='NTL'):
671
+ r"""
672
+ A fixed modulus representation of an eisenstein extension of `\ZZ_p`.
673
+
674
+ INPUT:
675
+
676
+ - ``exact_modulus`` -- the original polynomial defining the extension.
677
+ This could be a polynomial with integer coefficients, for example,
678
+ while ``poly`` has coefficients in a `p`-adic ring.
679
+
680
+ - ``poly`` -- the polynomial with coefficients in :meth:`base_ring`
681
+ defining this extension
682
+
683
+ - ``prec`` -- the precision cap of this ring
684
+
685
+ - ``print_mode`` -- dictionary of print options
686
+
687
+ - ``shift_seed`` -- unused
688
+
689
+ - ``names`` -- a 4-tuple, ``(variable_name, residue_name, unramified_subextension_variable_name, uniformizer_name)``
690
+
691
+ EXAMPLES::
692
+
693
+ sage: R = ZpFM(3, 10000, print_pos=False); S.<x> = ZZ[]; f = x^3 + 9*x - 3
694
+ sage: W.<w> = R.ext(f); W # indirect doctest # needs sage.libs.ntl
695
+ 3-adic Eisenstein Extension Ring in w defined by x^3 + 9*x - 3
696
+ sage: W.precision_cap() # needs sage.libs.ntl
697
+ 30000
698
+
699
+ sage: R.<p> = ZpFM(next_prime(10^30), 3, print_pos=False); S.<x> = ZZ[]; f = x^3 + p^2*x - p
700
+ sage: W.<w> = R.ext(f); W.prime() # needs sage.libs.ntl
701
+ 1000000000000000000000000000057
702
+ sage: W.precision_cap() # needs sage.libs.ntl
703
+ 9
704
+ """
705
+ unram_prec = (prec + poly.degree() - 1) // poly.degree()
706
+ ntl_poly = ntl_ZZ_pX([a.lift() for a in poly.list()], poly.base_ring().prime()**unram_prec)
707
+ shift_poly = ntl_ZZ_pX([a.lift() for a in shift_seed.list()],
708
+ shift_seed.base_ring().prime()**unram_prec)
709
+ # deal with prec not a multiple of e better.
710
+ self.prime_pow = PowComputer_ext_maker(poly.base_ring().prime(), max(min(unram_prec - 1, 30), 1), unram_prec, prec, False, ntl_poly, "FM", "e", shift_poly)
711
+ self._shift_seed = shift_seed
712
+ self._exact_modulus = exact_modulus
713
+ self._implementation = implementation
714
+ EisensteinExtensionGeneric.__init__(self, poly, prec, print_mode, names, pAdicZZpXFMElement)
715
+
716
+ def fraction_field(self):
717
+ """
718
+ Eisenstein extensions with fixed modulus do not support fraction fields.
719
+
720
+ EXAMPLES::
721
+
722
+ sage: S.<x> = ZZ[]
723
+ sage: R.<a> = ZpFM(5).extension(x^2 - 5) # needs sage.libs.ntl
724
+ sage: R.fraction_field() # needs sage.libs.ntl
725
+ Traceback (most recent call last):
726
+ ...
727
+ TypeError: This implementation of the p-adic ring
728
+ does not support fields of fractions.
729
+ """
730
+ raise TypeError("This implementation of the p-adic ring does not support fields of fractions.")
731
+
732
+ #def coerce_map_explicit(self, S):
733
+ # from sage.rings.padics.morphism import Morphism_ZZ_EisFM, Morphism_ZpFM_EisFM
734
+ # if S is ZZ:
735
+ # return Morphism_ZZ_EisFM(self)
736
+ # elif isinstance(S, pAdicRingFixedMod) and S.prime() == self.prime():
737
+ # return Morphism_ZpFM_EisFM(S, self)
738
+ # return None