passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_aarch64.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 (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,1017 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # sage.doctest: needs sage.rings.padics
3
+ """
4
+ Local Generic Element
5
+
6
+ This file contains a common superclass for `p`-adic elements and power
7
+ series elements.
8
+
9
+ AUTHORS:
10
+
11
+ - David Roe: initial version
12
+
13
+ - Julian Rueth (2012-10-15, 2014-06-25, 2017-08-04): added inverse_of_unit(); improved
14
+ add_bigoh(); added _test_expansion()
15
+ """
16
+ # ****************************************************************************
17
+ # Copyright (C) 2007-2017 David Roe <roed@math.harvard.edu>
18
+ # 2012-2017 Julian Rueth <julian.rueth@fsfe.org>
19
+ #
20
+ # Distributed under the terms of the GNU General Public License (GPL)
21
+ # as published by the Free Software Foundation; either version 2 of
22
+ # the License, or (at your option) any later version.
23
+ # https://www.gnu.org/licenses/
24
+ # ****************************************************************************
25
+
26
+ from sage.rings.infinity import infinity
27
+ from sage.structure.element cimport CommutativeRingElement
28
+ from sage.structure.element import coerce_binop
29
+ from itertools import islice
30
+
31
+
32
+ cdef class LocalGenericElement(CommutativeRingElement):
33
+ #cpdef _add_(self, right):
34
+ # raise NotImplementedError
35
+
36
+ cpdef _div_(self, right):
37
+ r"""
38
+ Return the quotient of ``self`` by ``right``.
39
+
40
+ INPUT:
41
+
42
+ - ``self`` -- a `p`-adic element
43
+
44
+ - ``right`` -- a `p`-adic element distinguishable from zero;
45
+ in a fixed-modulus ring, this element must be a unit
46
+
47
+ EXAMPLES::
48
+
49
+ sage: R = Zp(7, 4, 'capped-rel', 'series'); R(3)/R(5)
50
+ 2 + 4*7 + 5*7^2 + 2*7^3 + O(7^4)
51
+ sage: R(2/3) / R(1/3) # indirect doctest
52
+ 2 + O(7^4)
53
+ sage: R(49) / R(7)
54
+ 7 + O(7^5)
55
+ sage: R = Zp(7, 4, 'capped-abs', 'series'); 1/R(7)
56
+ 7^-1 + O(7^2)
57
+ sage: R = Zp(7, 4, 'fixed-mod'); 1/R(7)
58
+ Traceback (most recent call last):
59
+ ...
60
+ ValueError: cannot invert non-unit
61
+ """
62
+ # this doctest doesn't actually test the function, since it's overridden.
63
+ return self * ~right
64
+
65
+ def inverse_of_unit(self):
66
+ r"""
67
+ Return the inverse of ``self`` if ``self`` is a unit.
68
+
69
+ OUTPUT: an element in the same ring as ``self``
70
+
71
+ EXAMPLES::
72
+
73
+ sage: R = ZpCA(3,5)
74
+ sage: a = R(2); a
75
+ 2 + O(3^5)
76
+ sage: b = a.inverse_of_unit(); b
77
+ 2 + 3 + 3^2 + 3^3 + 3^4 + O(3^5)
78
+
79
+ A :exc:`ZeroDivisionError` is raised if an element has no inverse in the
80
+ ring::
81
+
82
+ sage: R(3).inverse_of_unit()
83
+ Traceback (most recent call last):
84
+ ...
85
+ ZeroDivisionError: inverse of 3 + O(3^5) does not exist
86
+
87
+ Unlike the usual inverse of an element, the result is in the same ring
88
+ as ``self`` and not just in its fraction field::
89
+
90
+ sage: c = ~a; c
91
+ 2 + 3 + 3^2 + 3^3 + 3^4 + O(3^5)
92
+ sage: a.parent()
93
+ 3-adic Ring with capped absolute precision 5
94
+ sage: b.parent()
95
+ 3-adic Ring with capped absolute precision 5
96
+ sage: c.parent()
97
+ 3-adic Field with capped relative precision 5
98
+
99
+ For fields this does of course not make any difference::
100
+
101
+ sage: R = QpCR(3,5)
102
+ sage: a = R(2)
103
+ sage: b = a.inverse_of_unit()
104
+ sage: c = ~a
105
+ sage: a.parent()
106
+ 3-adic Field with capped relative precision 5
107
+ sage: b.parent()
108
+ 3-adic Field with capped relative precision 5
109
+ sage: c.parent()
110
+ 3-adic Field with capped relative precision 5
111
+
112
+ TESTS:
113
+
114
+ Test that this works for all kinds of `p`-adic base elements::
115
+
116
+ sage: ZpCA(3,5)(2).inverse_of_unit()
117
+ 2 + 3 + 3^2 + 3^3 + 3^4 + O(3^5)
118
+ sage: ZpCR(3,5)(2).inverse_of_unit()
119
+ 2 + 3 + 3^2 + 3^3 + 3^4 + O(3^5)
120
+ sage: ZpFM(3,5)(2).inverse_of_unit()
121
+ 2 + 3 + 3^2 + 3^3 + 3^4
122
+ sage: ZpFP(3,5)(2).inverse_of_unit()
123
+ 2 + 3 + 3^2 + 3^3 + 3^4
124
+ sage: QpCR(3,5)(2).inverse_of_unit()
125
+ 2 + 3 + 3^2 + 3^3 + 3^4 + O(3^5)
126
+
127
+ Over unramified extensions::
128
+
129
+
130
+ sage: # needs sage.libs.ntl
131
+ sage: R = ZpCR(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 + 1 )
132
+ sage: t.inverse_of_unit()
133
+ 2*t + 2*t*3 + 2*t*3^2 + 2*t*3^3 + 2*t*3^4 + O(3^5)
134
+ sage: R = QpCR(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 + 1 )
135
+ sage: t.inverse_of_unit()
136
+ 2*t + 2*t*3 + 2*t*3^2 + 2*t*3^3 + 2*t*3^4 + O(3^5)
137
+
138
+ sage: # needs sage.libs.flint
139
+ sage: R = ZpCA(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 + 1 )
140
+ sage: t.inverse_of_unit()
141
+ 2*t + 2*t*3 + 2*t*3^2 + 2*t*3^3 + 2*t*3^4 + O(3^5)
142
+ sage: R = ZpFM(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 + 1 )
143
+ sage: t.inverse_of_unit()
144
+ 2*t + 2*t*3 + 2*t*3^2 + 2*t*3^3 + 2*t*3^4
145
+ sage: R = ZpFP(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 + 1 )
146
+ sage: t.inverse_of_unit()
147
+ 2*t + 2*t*3 + 2*t*3^2 + 2*t*3^3 + 2*t*3^4
148
+
149
+
150
+ Over Eisenstein extensions::
151
+
152
+ sage: # needs sage.libs.ntl
153
+ sage: R = ZpCA(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 - 3 )
154
+ sage: (t - 1).inverse_of_unit()
155
+ 2 + 2*t + t^2 + t^3 + t^4 + t^5 + t^6 + t^7 + t^8 + t^9 + O(t^10)
156
+ sage: R = ZpCR(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 - 3 )
157
+ sage: (t - 1).inverse_of_unit()
158
+ 2 + 2*t + t^2 + t^3 + t^4 + t^5 + t^6 + t^7 + t^8 + t^9 + O(t^10)
159
+ sage: R = ZpFM(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 - 3 )
160
+ sage: (t - 1).inverse_of_unit()
161
+ 2 + 2*t + t^2 + t^3 + t^4 + t^5 + t^6 + t^7 + t^8 + t^9
162
+ sage: R = QpCR(3,5); S.<t> = R[]; W.<t> = R.extension( t^2 - 3 )
163
+ sage: (t - 1).inverse_of_unit()
164
+ 2 + 2*t + t^2 + t^3 + t^4 + t^5 + t^6 + t^7 + t^8 + t^9 + O(t^10)
165
+ """
166
+ if not self.is_unit():
167
+ raise ZeroDivisionError(f"inverse of {self} does not exist")
168
+ return self.parent()(~self)
169
+
170
+ def __iter__(self):
171
+ """
172
+ Local elements should not be iterable, so this method correspondingly
173
+ raises a :exc:`TypeError`.
174
+
175
+ .. NOTE::
176
+
177
+ Typically, local elements provide a implementation for
178
+ ``__getitem__``. If they do not provide a method ``__iter__``, then
179
+ iterating over them is realized by calling ``__getitem__``,
180
+ starting from index 0. However, there are several issues with this.
181
+ For example, terms with negative valuation would be excluded from
182
+ the iteration, and an exact value of zero would lead to an infinite
183
+ iterable.
184
+
185
+ There doesn't seem to be an obvious behaviour that iteration over
186
+ such elements should produce, so it is disabled; see :issue:`13592`.
187
+
188
+ TESTS::
189
+
190
+ sage: x = Qp(3).zero()
191
+ sage: for v in x: pass
192
+ Traceback (most recent call last):
193
+ ...
194
+ TypeError: this local element is not iterable
195
+ """
196
+ raise TypeError("this local element is not iterable")
197
+
198
+ def slice(self, i, j, k=1, lift_mode='simple'):
199
+ r"""
200
+ Return the sum of the `pi^{i + l \cdot k}` terms of the series
201
+ expansion of this element, where pi is the uniformizer,
202
+ for `i + l \cdot k` between ``i`` and ``j-1`` inclusive, and
203
+ nonnegative integers `l`. Behaves analogously to the slice
204
+ function for lists.
205
+
206
+ INPUT:
207
+
208
+ - ``i`` -- integer; if set to ``None``, the sum will start with the
209
+ first nonzero term of the series
210
+
211
+ - ``j`` -- integer; if set to ``None`` or `\infty`, this method
212
+ behaves as if it was set to the absolute precision of this element
213
+
214
+ - ``k`` -- (default: 1) a positive integer
215
+
216
+ EXAMPLES::
217
+
218
+ sage: R = Zp(5, 6, 'capped-rel')
219
+ sage: a = R(1/2); a
220
+ 3 + 2*5 + 2*5^2 + 2*5^3 + 2*5^4 + 2*5^5 + O(5^6)
221
+ sage: a.slice(2, 4)
222
+ 2*5^2 + 2*5^3 + O(5^4)
223
+ sage: a.slice(1, 6, 2)
224
+ 2*5 + 2*5^3 + 2*5^5 + O(5^6)
225
+
226
+ The step size ``k`` has to be positive::
227
+
228
+ sage: a.slice(0, 3, 0)
229
+ Traceback (most recent call last):
230
+ ...
231
+ ValueError: slice step must be positive
232
+ sage: a.slice(0, 3, -1)
233
+ Traceback (most recent call last):
234
+ ...
235
+ ValueError: slice step must be positive
236
+
237
+ If ``i`` exceeds ``j``, then the result will be zero, with the
238
+ precision given by ``j``::
239
+
240
+ sage: a.slice(5, 4)
241
+ O(5^4)
242
+ sage: a.slice(6, 5)
243
+ O(5^5)
244
+
245
+ However, the precision cannot exceed the precision of the element::
246
+
247
+ sage: a.slice(101,100)
248
+ O(5^6)
249
+ sage: a.slice(0,5,2)
250
+ 3 + 2*5^2 + 2*5^4 + O(5^5)
251
+ sage: a.slice(0,6,2)
252
+ 3 + 2*5^2 + 2*5^4 + O(5^6)
253
+ sage: a.slice(0,7,2)
254
+ 3 + 2*5^2 + 2*5^4 + O(5^6)
255
+
256
+ If start is left blank, it is set to the valuation::
257
+
258
+ sage: K = Qp(5, 6)
259
+ sage: x = K(1/25 + 5); x
260
+ 5^-2 + 5 + O(5^4)
261
+ sage: x.slice(None, 3)
262
+ 5^-2 + 5 + O(5^3)
263
+ sage: x[:3]
264
+ doctest:warning
265
+ ...
266
+ DeprecationWarning: __getitem__ is changing to match the behavior of number fields. Please use expansion instead.
267
+ See https://github.com/sagemath/sage/issues/14825 for details.
268
+ 5^-2 + 5 + O(5^3)
269
+
270
+ TESTS:
271
+
272
+ Test that slices also work over fields::
273
+
274
+ sage: a = K(1/25); a
275
+ 5^-2 + O(5^4)
276
+ sage: b = K(25); b
277
+ 5^2 + O(5^8)
278
+
279
+ sage: a.slice(2, 4)
280
+ O(5^4)
281
+ sage: b.slice(2, 4)
282
+ 5^2 + O(5^4)
283
+ sage: a.slice(-3, -1)
284
+ 5^-2 + O(5^-1)
285
+ sage: b.slice(-1, 1)
286
+ O(5)
287
+ sage: b.slice(-3, -1)
288
+ O(5^-1)
289
+ sage: b.slice(101, 100)
290
+ O(5^8)
291
+ sage: b.slice(0,7,2)
292
+ 5^2 + O(5^7)
293
+ sage: b.slice(0,8,2)
294
+ 5^2 + O(5^8)
295
+ sage: b.slice(0,9,2)
296
+ 5^2 + O(5^8)
297
+
298
+ Test that slices also work over eisenstein extensions::
299
+
300
+ sage: # needs sage.libs.ntl
301
+ sage: F = Qp(5)
302
+ sage: H.<x> = F[]
303
+ sage: T.<t> = F.extension(x^2 - 5)
304
+ sage: a = T(3*t^-2 + 1 + 4*t + 2*t^2)
305
+ sage: a.slice(0, 1)
306
+ 1 + O(t)
307
+ sage: a.slice(-3, 4)
308
+ 3*t^-2 + 1 + 4*t + 2*t^2 + O(t^4)
309
+ sage: a.slice(-2, 6, 3)
310
+ 3*t^-2 + 4*t + O(t^6)
311
+
312
+ Test that slices also work over unramified extensions::
313
+
314
+ sage: # needs sage.libs.ntl
315
+ sage: F = Qp(5)
316
+ sage: H.<x> = F[]
317
+ sage: T.<t> = F.extension(x^2 - 2)
318
+ sage: a = T(3*5^-1 + 1 + (3*t + 4)*5^2)
319
+ sage: a.slice(0, 1)
320
+ 1 + O(5)
321
+ sage: a.slice(-3, 4)
322
+ 3*5^-1 + 1 + (3*t + 4)*5^2 + O(5^4)
323
+ sage: a.slice(-1, 6, 3)
324
+ 3*5^-1 + (3*t + 4)*5^2 + O(5^6)
325
+
326
+ Test that slices also work over 2-step extensions (unramified followed by eisenstein)::
327
+
328
+ sage: # needs sage.libs.ntl
329
+ sage: F = Qp(5)
330
+ sage: H.<x> = F[]
331
+ sage: T.<t> = F.extension(x^2 - 3)
332
+ sage: D.<y> = T[]
333
+ sage: W.<w> = T.extension((4*5^-2 + 2*5^-1 + 4 + (2*t + 2)*5 + 3*t*5^3 + 4*5^4 + 3*5^5 + (2*t + 2)*5^8 + (4*t + 3)*5^9 + 2*t*5^10 + (3*t + 3)*5^11 + (3*t + 1)*5^12 + (3*t + 2)*5^13 + 4*5^14 + (2*t + 4)*5^15 + (4*t + 1)*5^16 + (t + 1)*5^17 + O(5^18))*y^2 + (t + 2*t*5 + t*5^2 + 4*t*5^3 + (2*t + 4)*5^4 + (3*t + 4)*5^5 + (t + 1)*5^6 + t*5^7 + (2*t + 4)*5^8 + 3*5^9 + 2*5^10 + 5^12 + (4*t + 2)*5^13 + 5^14 + 5^15 + 3*t*5^16 + (t + 2)*5^17 + 4*5^18 + (3*t + 1)*5^19 + O(5^20))*y + (2*t + 2)*5^-1 + 3 + 5 + t*5^2 + (4*t + 2)*5^3 + (4*t + 1)*5^4 + (3*t + 4)*5^5 + (4*t + 4)*5^6 + (3*t + 2)*5^7 + (4*t + 4)*5^8 + 3*5^9 + (t + 3)*5^10 + (4*t + 3)*5^11 + 5^12 + (2*t + 2)*5^14 + 4*t*5^15 + (2*t + 2)*5^16 + (4*t + 4)*5^17 + O(5^18))
334
+ sage: a = W(3*w^-36 + (2*t + 2)*w^-23)
335
+ sage: a.slice(-25,2)
336
+ (2*t + 2)*w^-23 + O(w^2)
337
+ sage: a.slice(0, 1)
338
+ O(w)
339
+
340
+ Verify that :issue:`14106` has been fixed::
341
+
342
+ sage: R = Zp(5,7)
343
+ sage: a = R(300)
344
+ sage: a
345
+ 2*5^2 + 2*5^3 + O(5^9)
346
+ sage: a[:5]
347
+ 2*5^2 + 2*5^3 + O(5^5)
348
+ sage: a.slice(None, 5, None)
349
+ 2*5^2 + 2*5^3 + O(5^5)
350
+
351
+ Verify that :issue:`30695` has been fixed::
352
+
353
+ sage: F = Qp(3)
354
+ sage: a = F(0)
355
+ sage: a.slice(0,None)
356
+ 0
357
+ """
358
+ if k is None:
359
+ k = 1
360
+ if k <= 0:
361
+ raise ValueError("slice step must be positive")
362
+ if i is None:
363
+ i = self.valuation()
364
+ if j is None or j is infinity:
365
+ j = self.precision_absolute()
366
+ if j is infinity:
367
+ return self.parent()(0)
368
+
369
+ start = i
370
+ stop = j
371
+
372
+ # for fields, self.list() contains only the coefficients starting from
373
+ # self.valuation(), so we have to shift the indices around to make up
374
+ # for this
375
+ if self.parent().is_field():
376
+ start -= self.valuation()
377
+ stop -= self.valuation()
378
+
379
+ # make sure that start and stop are nonnegative
380
+ if start<0:
381
+ i += -start # fix the value of ppow below
382
+ start = 0
383
+ stop = max(stop, 0)
384
+
385
+ # the increase of the pi-power in every step
386
+ pk = self.parent().uniformizer_pow(k)
387
+ # the pi-power of the first term
388
+ ppow = self.parent().uniformizer_pow(i)
389
+
390
+ # construct the return value
391
+ ans = self.parent().zero()
392
+ unramified_generator = self.parent()(self.parent().residue_field().gen()).lift_to_precision()
393
+ for c in islice(self.expansion(lift_mode=lift_mode), int(start), int(stop), int(k)):
394
+ genpow = 1
395
+ if not isinstance(c, list):
396
+ c = [c] # relevant for the case of base-rings, or one-step
397
+ # Eisenstein extensions
398
+ for d in c:
399
+ ans += d * genpow * ppow
400
+ genpow *= unramified_generator
401
+ ppow *= pk
402
+
403
+ # fix the precision of the return value
404
+ if j < ans.precision_absolute() or self.precision_absolute() < ans.precision_absolute():
405
+ ans = ans.add_bigoh(min(j, self.precision_absolute()))
406
+
407
+ return ans
408
+
409
+ def _latex_(self):
410
+ r"""
411
+ Return a latex representation of ``self``.
412
+
413
+ EXAMPLES::
414
+
415
+ sage: R = Zp(5); a = R(17)
416
+ sage: latex(a) # indirect doctest
417
+ 2 + 3 \cdot 5 + O(5^{20})
418
+ """
419
+ # TODO: add a bunch more documentation of latexing elements
420
+ return self._repr_(do_latex = True)
421
+
422
+ #def __mod__(self, right):
423
+ # raise NotImplementedError
424
+
425
+ #cpdef _mul_(self, right):
426
+ # raise NotImplementedError
427
+
428
+ #cdef _neg_(self):
429
+ # raise NotImplementedError
430
+
431
+ #def __pow__(self, right):
432
+ # raise NotImplementedError
433
+
434
+ cpdef _sub_(self, right):
435
+ r"""
436
+ Return the difference between ``self`` and ``right``.
437
+
438
+ EXAMPLES::
439
+
440
+ sage: R = Zp(7, 4, 'capped-rel', 'series'); a = R(12); b = R(5); a - b
441
+ 7 + O(7^4)
442
+ sage: R(4/3) - R(1/3) # indirect doctest
443
+ 1 + O(7^4)
444
+ """
445
+ # this doctest doesn't actually test this function, since _sub_ is overridden.
446
+ return self + (-right)
447
+
448
+ def add_bigoh(self, absprec):
449
+ """
450
+ Return a copy of this element with absolute precision decreased to
451
+ ``absprec``.
452
+
453
+ INPUT:
454
+
455
+ - ``absprec`` -- integer or positive infinity
456
+
457
+ EXAMPLES::
458
+
459
+ sage: K = QpCR(3,4)
460
+ sage: o = K(1); o
461
+ 1 + O(3^4)
462
+ sage: o.add_bigoh(2)
463
+ 1 + O(3^2)
464
+ sage: o.add_bigoh(-5)
465
+ O(3^-5)
466
+
467
+ One cannot use ``add_bigoh`` to lift to a higher precision; this
468
+ can be accomplished with :meth:`lift_to_precision`::
469
+
470
+ sage: o.add_bigoh(5)
471
+ 1 + O(3^4)
472
+
473
+ Negative values of ``absprec`` return an element in the fraction field
474
+ of the element's parent::
475
+
476
+ sage: R = ZpCA(3,4)
477
+ sage: R(3).add_bigoh(-5)
478
+ O(3^-5)
479
+
480
+ For fixed-mod elements this method truncates the element::
481
+
482
+ sage: R = ZpFM(3,4)
483
+ sage: R(3).add_bigoh(1)
484
+ 0
485
+
486
+ If ``absprec`` exceeds the precision of the element, then this method
487
+ has no effect::
488
+
489
+ sage: R(3).add_bigoh(5)
490
+ 3
491
+
492
+ A negative value for ``absprec`` returns an element in the fraction field::
493
+
494
+ sage: R(3).add_bigoh(-1).parent()
495
+ 3-adic Field with floating precision 4
496
+
497
+ TESTS:
498
+
499
+ Test that this also works for infinity::
500
+
501
+ sage: R = ZpCR(3,4)
502
+ sage: R(3).add_bigoh(infinity)
503
+ 3 + O(3^5)
504
+ sage: R(0).add_bigoh(infinity)
505
+ 0
506
+
507
+ Check that :issue:`23464` has been resolved::
508
+
509
+ sage: x = polygen(QQ)
510
+ sage: R.<pi> = Qp(7).extension(x^3 - 7) # needs sage.libs.ntl
511
+ sage: (pi^93).add_bigoh(-10) # needs sage.libs.ntl sage.symbolic
512
+ O(pi^-10)
513
+ """
514
+ parent = self.parent()
515
+ if absprec >= self.precision_absolute():
516
+ return self
517
+ if absprec < 0:
518
+ parent = parent.fraction_field()
519
+ return parent(self, absprec=absprec)
520
+
521
+ #def copy(self):
522
+ # raise NotImplementedError
523
+
524
+ #def exp(self):
525
+ # raise NotImplementedError
526
+
527
+ def is_integral(self):
528
+ """
529
+ Return whether ``self`` is an integral element.
530
+
531
+ INPUT:
532
+
533
+ - ``self`` -- a local ring element
534
+
535
+ OUTPUT: boolean; whether ``self`` is an integral element
536
+
537
+ EXAMPLES::
538
+
539
+ sage: R = Qp(3,20)
540
+ sage: a = R(7/3); a.is_integral()
541
+ False
542
+ sage: b = R(7/5); b.is_integral()
543
+ True
544
+ """
545
+ return self.valuation() >= 0
546
+
547
+ #def is_square(self):
548
+ # raise NotImplementedError
549
+
550
+ def is_padic_unit(self):
551
+ """
552
+ Return whether ``self`` is a `p`-adic unit. That is, whether it has
553
+ zero valuation.
554
+
555
+ INPUT:
556
+
557
+ - ``self`` -- a local ring element
558
+
559
+ OUTPUT: boolean; whether ``self`` is a unit
560
+
561
+ EXAMPLES::
562
+
563
+ sage: R = Zp(3,20,'capped-rel'); K = Qp(3,20,'capped-rel')
564
+ sage: R(0).is_padic_unit()
565
+ False
566
+ sage: R(1).is_padic_unit()
567
+ True
568
+ sage: R(2).is_padic_unit()
569
+ True
570
+ sage: R(3).is_padic_unit()
571
+ False
572
+ sage: Qp(5,5)(5).is_padic_unit()
573
+ False
574
+
575
+ TESTS::
576
+
577
+ sage: R(4).is_padic_unit()
578
+ True
579
+ sage: R(6).is_padic_unit()
580
+ False
581
+ sage: R(9).is_padic_unit()
582
+ False
583
+ sage: K(0).is_padic_unit()
584
+ False
585
+ sage: K(1).is_padic_unit()
586
+ True
587
+ sage: K(2).is_padic_unit()
588
+ True
589
+ sage: K(3).is_padic_unit()
590
+ False
591
+ sage: K(4).is_padic_unit()
592
+ True
593
+ sage: K(6).is_padic_unit()
594
+ False
595
+ sage: K(9).is_padic_unit()
596
+ False
597
+ sage: K(1/3).is_padic_unit()
598
+ False
599
+ sage: K(1/9).is_padic_unit()
600
+ False
601
+ sage: Qq(3^2,5,names='a')(3).is_padic_unit() # needs sage.libs.ntl
602
+ False
603
+ """
604
+ return self.valuation() == 0
605
+
606
+ def is_unit(self):
607
+ """
608
+ Return whether ``self`` is a unit.
609
+
610
+ INPUT:
611
+
612
+ - ``self`` -- a local ring element
613
+
614
+ OUTPUT: boolean; whether ``self`` is a unit
615
+
616
+ .. NOTE::
617
+
618
+ For fields all nonzero elements are units. For DVR's, only
619
+ those elements of valuation 0 are. An older implementation
620
+ ignored the case of fields, and returned always the
621
+ negation of self.valuation()==0. This behavior is now
622
+ supported with self.is_padic_unit().
623
+
624
+ EXAMPLES::
625
+
626
+ sage: R = Zp(3,20,'capped-rel'); K = Qp(3,20,'capped-rel')
627
+ sage: R(0).is_unit()
628
+ False
629
+ sage: R(1).is_unit()
630
+ True
631
+ sage: R(2).is_unit()
632
+ True
633
+ sage: R(3).is_unit()
634
+ False
635
+ sage: Qp(5,5)(5).is_unit() # Note that 5 is invertible in `QQ_5`, even if it has positive valuation!
636
+ True
637
+ sage: Qp(5,5)(5).is_padic_unit()
638
+ False
639
+
640
+ TESTS::
641
+
642
+ sage: R(4).is_unit()
643
+ True
644
+ sage: R(6).is_unit()
645
+ False
646
+ sage: R(9).is_unit()
647
+ False
648
+ sage: K(0).is_unit()
649
+ False
650
+ sage: K(1).is_unit()
651
+ True
652
+ sage: K(2).is_unit()
653
+ True
654
+ sage: K(3).is_unit()
655
+ True
656
+ sage: K(4).is_unit()
657
+ True
658
+ sage: K(6).is_unit()
659
+ True
660
+ sage: K(9).is_unit()
661
+ True
662
+ sage: K(1/3).is_unit()
663
+ True
664
+ sage: K(1/9).is_unit()
665
+ True
666
+ sage: Qq(3^2,5,names='a')(3).is_unit() # needs sage.libs.ntl
667
+ True
668
+ sage: R(0,0).is_unit()
669
+ False
670
+ sage: K(0,0).is_unit()
671
+ False
672
+ """
673
+ if self.is_zero():
674
+ return False
675
+ if self.parent().is_field():
676
+ return True
677
+ return self.valuation() == 0
678
+
679
+ #def is_zero(self, prec):
680
+ # raise NotImplementedError
681
+
682
+ #def is_equal_to(self, right, prec):
683
+ # raise NotImplementedError
684
+
685
+ #def lift(self):
686
+ # raise NotImplementedError
687
+
688
+ #def list(self):
689
+ # raise NotImplementedError
690
+
691
+ #def log(self):
692
+ # raise NotImplementedError
693
+
694
+ #def multiplicative_order(self, prec):
695
+ # raise NotImplementedError
696
+
697
+ #def padded_list(self):
698
+ # raise NotImplementedError
699
+
700
+ #def precision_absolute(self):
701
+ # raise NotImplementedError
702
+
703
+ #def precision_relative(self):
704
+ # raise NotImplementedError
705
+
706
+ #def residue(self, prec):
707
+ # raise NotImplementedError
708
+
709
+ def sqrt(self, extend=True, all=False, algorithm=None):
710
+ r"""
711
+ Return the square root of this element.
712
+
713
+ INPUT:
714
+
715
+ - ``self`` -- a `p`-adic element
716
+
717
+ - ``extend`` -- boolean (default: ``True``); if ``True``, return a
718
+ square root in an extension if necessary; if ``False`` and no root
719
+ exists in the given ring or field, raise a :exc:`ValueError`.
720
+
721
+ - ``all`` -- boolean (default: ``False``); if ``True``, return a
722
+ list of all square roots
723
+
724
+ - ``algorithm`` -- ``'pari'``, ``'sage'`` or ``None`` (default:
725
+ ``None``); Sage provides an implementation for any extension of
726
+ `Q_p` whereas only square roots over `Q_p` is implemented in Pari;
727
+ the default is ``'pari'`` if the ground field is `Q_p`, ``'sage'``
728
+ otherwise.
729
+
730
+ OUTPUT: the square root or the list of all square roots of this element
731
+
732
+ .. NOTE::
733
+
734
+ The square root is chosen (resp. the square roots are ordered) in
735
+ a deterministic way, which is compatible with change of precision.
736
+
737
+ EXAMPLES::
738
+
739
+ sage: R = Zp(3, 20)
740
+ sage: sqrt(R(0))
741
+ 0
742
+
743
+ sage: sqrt(R(1))
744
+ 1 + O(3^20)
745
+
746
+ sage: R(2).sqrt(extend=False)
747
+ Traceback (most recent call last):
748
+ ...
749
+ ValueError: element is not a square
750
+
751
+ sage: s = sqrt(R(4)); -s
752
+ 2 + O(3^20)
753
+
754
+ sage: s = sqrt(R(9)); s
755
+ 3 + O(3^21)
756
+
757
+ Over the `2`-adics, the precision of the square root is less
758
+ than the input::
759
+
760
+ sage: R2 = Zp(2, 20)
761
+ sage: sqrt(R2(1))
762
+ 1 + O(2^19)
763
+ sage: sqrt(R2(4))
764
+ 2 + O(2^20)
765
+
766
+ sage: R.<t> = Zq(2^10, 10) # needs sage.libs.ntl
767
+ sage: u = 1 + 8*t # needs sage.libs.ntl
768
+ sage: sqrt(u) # needs sage.libs.ntl
769
+ 1 + t*2^2 + t^2*2^3 + t^2*2^4 + (t^4 + t^3 + t^2)*2^5 + (t^4 + t^2)*2^6
770
+ + (t^5 + t^2)*2^7 + (t^6 + t^5 + t^4 + t^2)*2^8 + O(2^9)
771
+
772
+ sage: x = polygen(QQ, 'x')
773
+ sage: R.<a> = Zp(2).extension(x^3 - 2)
774
+ sage: u = R(1 + a^4 + a^5 + a^7 + a^8, 10); u
775
+ 1 + a^4 + a^5 + a^7 + a^8 + O(a^10)
776
+ sage: v = sqrt(u); v # needs sage.libs.ntl
777
+ 1 + a^2 + a^4 + a^6 + O(a^7)
778
+
779
+ However, observe that the precision increases to its original value
780
+ when we recompute the square of the square root::
781
+
782
+ sage: v^2 # needs sage.libs.ntl
783
+ 1 + a^4 + a^5 + a^7 + a^8 + O(a^10)
784
+
785
+ If the input does not have enough precision in order to determine if
786
+ the given element has a square root in the ground field, an error is
787
+ raised::
788
+
789
+ sage: R(1, 6).sqrt()
790
+ Traceback (most recent call last):
791
+ ...
792
+ PrecisionError: not enough precision to be sure that this element has a square root
793
+
794
+ sage: R(1, 7).sqrt()
795
+ 1 + O(a^4)
796
+
797
+ sage: R(1+a^6, 7).sqrt(extend=False)
798
+ Traceback (most recent call last):
799
+ ...
800
+ ValueError: element is not a square
801
+
802
+ In particular, an error is raised when we try to compute the square
803
+ root of an inexact
804
+
805
+ TESTS::
806
+
807
+ sage: R = Qp(5, 100)
808
+ sage: c = R.random_element()
809
+ sage: s = sqrt(c^2)
810
+ sage: s == c or s == -c
811
+ True
812
+
813
+ sage: c2 = c^2
814
+ sage: c2 = c2.add_bigoh(c2.valuation() + 50)
815
+ sage: s == sqrt(c2)
816
+ True
817
+ """
818
+ return self.square_root(extend, all)
819
+
820
+ #def square_root(self, extend=True, all=False):
821
+ # raise NotImplementedError
822
+
823
+ #def unit_part(self):
824
+ # raise NotImplementedError
825
+
826
+ #def valuation(self):
827
+ # raise NotImplementedError
828
+
829
+ def normalized_valuation(self):
830
+ r"""
831
+ Return the normalized valuation of this local ring element,
832
+ i.e., the valuation divided by the absolute ramification index.
833
+
834
+ INPUT:
835
+
836
+ - ``self`` -- a local ring element
837
+
838
+ OUTPUT: rational; the normalized valuation of ``self``
839
+
840
+ EXAMPLES::
841
+
842
+ sage: Q7 = Qp(7)
843
+ sage: R.<x> = Q7[] # needs sage.libs.ntl
844
+ sage: F.<z> = Q7.ext(x^3+7*x+7) # needs sage.libs.ntl
845
+ sage: z.normalized_valuation() # needs sage.libs.ntl
846
+ 1/3
847
+ """
848
+ F = self.parent()
849
+ return self.valuation()/F.absolute_e()
850
+
851
+ def _min_valuation(self):
852
+ r"""
853
+ Return the valuation of this local ring element.
854
+
855
+ This function only differs from valuation for relaxed elements.
856
+
857
+ INPUT:
858
+
859
+ - ``self`` -- a local ring element
860
+
861
+ OUTPUT: integer; the valuation of ``self``
862
+
863
+ EXAMPLES::
864
+
865
+ sage: R = Qp(7, 4, 'capped-rel', 'series')
866
+ sage: R(7)._min_valuation()
867
+ 1
868
+ sage: R(1/7)._min_valuation()
869
+ -1
870
+ """
871
+ return self.valuation()
872
+
873
+ def euclidean_degree(self):
874
+ r"""
875
+ Return the degree of this element as an element of a Euclidean domain.
876
+
877
+ EXAMPLES:
878
+
879
+ For a field, this is always zero except for the zero element::
880
+
881
+ sage: K = Qp(2)
882
+ sage: K.one().euclidean_degree()
883
+ 0
884
+ sage: K.gen().euclidean_degree()
885
+ 0
886
+ sage: K.zero().euclidean_degree()
887
+ Traceback (most recent call last):
888
+ ...
889
+ ValueError: euclidean degree not defined for the zero element
890
+
891
+ For a ring which is not a field, this is the valuation of the element::
892
+
893
+ sage: R = Zp(2)
894
+ sage: R.one().euclidean_degree()
895
+ 0
896
+ sage: R.gen().euclidean_degree()
897
+ 1
898
+ sage: R.zero().euclidean_degree()
899
+ Traceback (most recent call last):
900
+ ...
901
+ ValueError: euclidean degree not defined for the zero element
902
+ """
903
+ if self.is_zero():
904
+ raise ValueError("euclidean degree not defined for the zero element")
905
+
906
+ from sage.categories.fields import Fields
907
+ if self.parent() in Fields():
908
+ from sage.rings.integer import Integer
909
+ return Integer(0)
910
+ return self.valuation()
911
+
912
+ @coerce_binop
913
+ def quo_rem(self, other, integral=False):
914
+ r"""
915
+ Return the quotient with remainder of the division of this element by
916
+ ``other``.
917
+
918
+ INPUT:
919
+
920
+ - ``other`` -- an element in the same ring
921
+ - ``integral`` -- if ``True``, use integral-style remainders even when
922
+ the parent is a field. Namely, the remainder will have no terms in
923
+ its `p`-adic expansion above the valuation of ``other``.
924
+
925
+ EXAMPLES::
926
+
927
+ sage: R = Zp(3, 5)
928
+ sage: R(12).quo_rem(R(2))
929
+ (2*3 + O(3^6), 0)
930
+ sage: R(2).quo_rem(R(12))
931
+ (O(3^4), 2 + O(3^5))
932
+
933
+ sage: K = Qp(3, 5)
934
+ sage: K(12).quo_rem(K(2))
935
+ (2*3 + O(3^6), 0)
936
+ sage: K(2).quo_rem(K(12))
937
+ (2*3^-1 + 1 + 3 + 3^2 + 3^3 + O(3^4), 0)
938
+
939
+ You can get the same behavior for fields as for rings
940
+ by using integral=True::
941
+
942
+ sage: K(12).quo_rem(K(2), integral=True)
943
+ (2*3 + O(3^6), 0)
944
+ sage: K(2).quo_rem(K(12), integral=True)
945
+ (O(3^4), 2 + O(3^5))
946
+ """
947
+ if other.is_zero():
948
+ raise ZeroDivisionError
949
+
950
+ from sage.categories.fields import Fields
951
+ if not integral and self.parent() in Fields():
952
+ return (self / other, self.parent().zero())
953
+ else:
954
+ return self._quo_rem(other)
955
+
956
+ def _test_trivial_powers(self, **options):
957
+ r"""
958
+ Check that taking trivial powers of elements works as expected.
959
+
960
+ EXAMPLES::
961
+
962
+ sage: x = Zp(3, 5).zero()
963
+ sage: x._test_trivial_powers()
964
+ """
965
+ tester = self._tester(**options)
966
+
967
+ x = self**1
968
+ tester.assertEqual(x, self)
969
+ tester.assertEqual(x.precision_absolute(), self.precision_absolute())
970
+
971
+ z = self**0
972
+ one = self.parent().one()
973
+ tester.assertEqual(z, one)
974
+ tester.assertEqual(z.precision_absolute(), one.precision_absolute())
975
+
976
+ def _test_expansion(self, **options):
977
+ r"""
978
+ Check that ``expansion`` works as expected.
979
+
980
+ EXAMPLES::
981
+
982
+ sage: x = Zp(3, 5).zero()
983
+ sage: x._test_expansion()
984
+ """
985
+ tester = self._tester(**options)
986
+
987
+ shift = self.parent().one()
988
+ v = 0
989
+ # so that this test doesn't take too long for large precision cap
990
+ prec_cutoff = int(min((10000 / (1 + self.precision_relative())).ceil(), 100))
991
+
992
+ from sage.categories.fields import Fields
993
+ if self.parent() in Fields():
994
+ v = self.valuation()
995
+ from sage.rings.infinity import infinity
996
+ if self.valuation() is not infinity:
997
+ shift = shift << v
998
+
999
+ if self.parent().is_lattice_prec() or self.parent().is_relaxed():
1000
+ modes = ['simple']
1001
+ else:
1002
+ modes = ['simple', 'smallest', 'teichmuller']
1003
+ for mode in modes:
1004
+ expansion = self.expansion(lift_mode=mode)
1005
+ expansion_sum = sum(self.parent().maximal_unramified_subextension()(c) *
1006
+ (self.parent().one()<<i)
1007
+ for i, c in enumerate(islice(expansion, prec_cutoff))) * shift
1008
+
1009
+ tester.assertEqual(self.add_bigoh(prec_cutoff), expansion_sum.add_bigoh(prec_cutoff))
1010
+
1011
+ for i, c in enumerate(islice(expansion, prec_cutoff)):
1012
+ tester.assertEqual(c, self.expansion(lift_mode=mode, n=i+v))
1013
+
1014
+ if mode == 'teichmuller':
1015
+ q = self.parent().residue_field().cardinality()
1016
+ for c in islice(expansion, prec_cutoff):
1017
+ tester.assertEqual(c, c**q)