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,38 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ from sage.libs.gmp.types cimport mpz_t, mpz_srcptr
3
+ from sage.structure.sage_object cimport SageObject
4
+ from sage.rings.integer cimport Integer
5
+
6
+ cdef class PowComputer_class(SageObject):
7
+ cdef Integer prime
8
+ cdef Integer p2 # floor(p/2)
9
+ cdef bint in_field
10
+ cdef int _allocated
11
+ cdef public object _prec_type
12
+
13
+ cdef long ram_prec_cap # = prec_cap * e
14
+
15
+ # the following constants should be set by the subclasses
16
+ # the absolute degree of the p-adic ring
17
+ cdef long deg
18
+ # the absolute ramification index of the p-adic ring
19
+ cdef long e
20
+ # the absolute residual degree of the p-adic ring
21
+ cdef long f
22
+
23
+ cdef unsigned long cache_limit
24
+ cdef unsigned long prec_cap
25
+
26
+ cdef Integer pow_Integer(self, long n)
27
+ cdef mpz_srcptr pow_mpz_t_top(self) noexcept
28
+ cdef mpz_srcptr pow_mpz_t_tmp(self, long n) except NULL
29
+ cdef mpz_t temp_m
30
+
31
+ cdef class PowComputer_base(PowComputer_class):
32
+ cdef mpz_t* small_powers
33
+ cdef mpz_t top_power
34
+ cdef mpz_t powhelper_oneunit
35
+ cdef mpz_t powhelper_teichdiff
36
+ cdef mpz_t shift_rem
37
+ cdef mpz_t aliasing
38
+ cdef object __weakref__
@@ -0,0 +1,671 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ # distutils: extra_compile_args = -std=c++11
3
+ # distutils: libraries = gmp M_LIBRARIES
4
+ # distutils: language = c++
5
+ """
6
+ PowComputer
7
+
8
+ A class for computing and caching powers of the same integer.
9
+
10
+ This class is designed to be used as a field of `p`-adic rings and
11
+ fields. Since elements of `p`-adic rings and fields need to use powers
12
+ of p over and over, this class precomputes and stores powers of p.
13
+ There is no reason that the base has to be prime however.
14
+
15
+ EXAMPLES::
16
+
17
+ sage: X = PowComputer(3, 4, 10)
18
+ sage: X(3)
19
+ 27
20
+ sage: X(10) == 3^10
21
+ True
22
+
23
+ AUTHORS:
24
+
25
+ - David Roe
26
+ """
27
+
28
+ #*****************************************************************************
29
+ # Copyright (C) 2007-2013 David Roe <roed.math@gmail.com>
30
+ # William Stein <wstein@gmail.com>
31
+ #
32
+ # Distributed under the terms of the GNU General Public License (GPL)
33
+ # as published by the Free Software Foundation; either version 2 of
34
+ # the License, or (at your option) any later version.
35
+ #
36
+ # https://www.gnu.org/licenses/
37
+ #*****************************************************************************
38
+
39
+ import weakref
40
+ from cysignals.memory cimport sig_malloc, sig_free
41
+ from cysignals.signals cimport sig_on, sig_off
42
+
43
+ from sage.rings.infinity import infinity
44
+ from sage.libs.gmp.mpz cimport *
45
+ from sage.structure.richcmp cimport richcmp_not_equal, richcmp
46
+ from cpython.object cimport Py_EQ, Py_NE
47
+
48
+ from sage.ext.stdsage cimport PY_NEW
49
+
50
+ cdef long maxpreccap = (1L << (sizeof(long) * 8 - 2)) - 1
51
+
52
+ cdef class PowComputer_class(SageObject):
53
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly=None, shift_seed=None):
54
+ """
55
+ Memory allocation.
56
+
57
+ EXAMPLES::
58
+
59
+ sage: PC = PowComputer(3, 5, 10)
60
+ sage: PC.pow_Integer_Integer(2)
61
+ 9
62
+ """
63
+ sig_on()
64
+ mpz_init(self.temp_m)
65
+ sig_off()
66
+ self._allocated = 1
67
+
68
+ def __init__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly=None, shift_seed=None):
69
+ """
70
+ Initialize ``self``.
71
+
72
+ INPUT:
73
+
74
+ - ``prime`` -- the prime that is the base of the exponentials
75
+ stored in this ``pow_computer``
76
+
77
+ - ``cache_limit`` -- how high to cache powers of prime
78
+
79
+ - ``prec_cap`` -- data stored for `p`-adic elements using this
80
+ ``pow_computer`` (so they have C-level access to fields
81
+ common to all elements of the same parent)
82
+
83
+ - ``ram_prec_cap`` -- prec_cap * e
84
+
85
+ - ``in_field`` -- same idea as prec_cap
86
+
87
+ - ``poly`` -- same idea as prec_cap
88
+
89
+ - ``shift_seed`` -- same idea as prec_cap
90
+
91
+ EXAMPLES::
92
+
93
+ sage: PC = PowComputer(3, 5, 10)
94
+ sage: PC.pow_Integer_Integer(2)
95
+ 9
96
+ """
97
+ self.prime = prime
98
+ self.p2 = prime // 2
99
+ self.in_field = in_field
100
+ self.cache_limit = cache_limit
101
+ self.prec_cap = prec_cap
102
+ self.ram_prec_cap = ram_prec_cap
103
+
104
+ def __richcmp__(self, other, int op):
105
+ """
106
+ Compare ``self`` to ``other``.
107
+
108
+ EXAMPLES::
109
+
110
+ sage: P = PowComputer(3, 4, 9)
111
+ sage: P == 7
112
+ False
113
+ sage: Q = PowComputer(3, 6, 9)
114
+ sage: P == Q
115
+ False
116
+ sage: Q = PowComputer(3, 4, 9)
117
+ sage: P == Q
118
+ True
119
+ sage: P is Q
120
+ True
121
+ """
122
+ if not isinstance(other, PowComputer_class):
123
+ if op in [Py_EQ, Py_NE]:
124
+ return (op == Py_NE)
125
+ return NotImplemented
126
+
127
+ cdef PowComputer_class s = self
128
+ cdef PowComputer_class o = other
129
+
130
+ lx = s.prime
131
+ rx = o.prime
132
+ if lx != rx:
133
+ return richcmp_not_equal(lx, rx, op)
134
+
135
+ lx = s.prec_cap
136
+ rx = o.prec_cap
137
+ if lx != rx:
138
+ return richcmp_not_equal(lx, rx, op)
139
+
140
+ lx = s.cache_limit
141
+ rx = o.cache_limit
142
+ if lx != rx:
143
+ return richcmp_not_equal(lx, rx, op)
144
+
145
+ return richcmp(s.in_field, o.in_field, op)
146
+
147
+ cdef Integer pow_Integer(self, long n):
148
+ """
149
+ Return ``self.prime^n``.
150
+
151
+ EXAMPLES::
152
+
153
+ sage: PC = PowComputer(3, 5, 10)
154
+ sage: PC.pow_Integer_Integer(2) # indirect doctest
155
+ 9
156
+ """
157
+ cdef Integer ans = PY_NEW(Integer)
158
+ mpz_set(ans.value, self.pow_mpz_t_tmp(n))
159
+ return ans
160
+
161
+ def pow_Integer_Integer(self, n):
162
+ """
163
+ Test the ``pow_Integer`` function.
164
+
165
+ EXAMPLES::
166
+
167
+ sage: PC = PowComputer(3, 5, 10)
168
+ sage: PC.pow_Integer_Integer(4)
169
+ 81
170
+ sage: PC.pow_Integer_Integer(6)
171
+ 729
172
+ sage: PC.pow_Integer_Integer(0)
173
+ 1
174
+ sage: PC.pow_Integer_Integer(10)
175
+ 59049
176
+
177
+ sage: # needs sage.libs.ntl
178
+ sage: PC = PowComputer_ext_maker(3, 5, 10, 20, False, ntl.ZZ_pX([-3,0,1], 3^10), 'big','e',ntl.ZZ_pX([1],3^10))
179
+ sage: PC.pow_Integer_Integer(4)
180
+ 81
181
+ sage: PC.pow_Integer_Integer(6)
182
+ 729
183
+ sage: PC.pow_Integer_Integer(0)
184
+ 1
185
+ sage: PC.pow_Integer_Integer(10)
186
+ 59049
187
+ """
188
+ cdef Integer _n = Integer(n)
189
+ if _n < 0:
190
+ if mpz_fits_ulong_p((<Integer>-_n).value) == 0:
191
+ raise ValueError("result too big")
192
+ return ~self.pow_Integer(mpz_get_ui((<Integer>-_n).value))
193
+ else:
194
+ if mpz_fits_ulong_p(_n.value) == 0:
195
+ raise ValueError("result too big")
196
+ return self.pow_Integer(mpz_get_ui(_n.value))
197
+
198
+ cdef mpz_srcptr pow_mpz_t_tmp(self, long n) except NULL:
199
+ """
200
+ Provides fast access to an ``mpz_srcptr`` pointing to self.prime^n.
201
+
202
+ The location pointed to depends on the underlying
203
+ representation. In no circumstances should you mpz_clear the
204
+ result. The value pointed to may be an internal temporary
205
+ variable for the class. In particular, you should not try to
206
+ refer to the results of two pow_mpz_t_tmp calls at the same
207
+ time, because the second call may overwrite the memory pointed
208
+ to by the first.
209
+
210
+ See pow_mpz_t_tmp_demo for an example of this phenomenon.
211
+ """
212
+ # READ THE DOCSTRING
213
+ raise NotImplementedError
214
+
215
+ def _pow_mpz_t_tmp_demo(self, m, n):
216
+ """
217
+ This function demonstrates a danger in using pow_mpz_t_tmp.
218
+
219
+ EXAMPLES::
220
+
221
+ sage: PC = PowComputer(5, 5, 10)
222
+
223
+ When you call pow_mpz_t_tmp with an input that is not stored
224
+ (ie n > self.cache_limit and n != self.prec_cap),
225
+ it stores the result in self.temp_m and returns a pointer
226
+ to that mpz_t. So if you try to use the results of two
227
+ calls at once, things will break. ::
228
+
229
+ sage: PC._pow_mpz_t_tmp_demo(6, 8) # 244140625 on some architectures and 152587890625 on others: random
230
+ 244140625
231
+ sage: 5^6*5^8
232
+ 6103515625
233
+ sage: 5^6*5^6
234
+ 244140625
235
+
236
+ Note that this does not occur if you try a stored value,
237
+ because the result of one of the calls points to that
238
+ stored value. ::
239
+
240
+ sage: PC._pow_mpz_t_tmp_demo(6, 10)
241
+ 152587890625
242
+ sage: 5^6*5^10
243
+ 152587890625
244
+ """
245
+ m = Integer(m)
246
+ n = Integer(n)
247
+ if m < 0 or n < 0:
248
+ raise ValueError("m, n must be nonnegative")
249
+ cdef Integer ans = PY_NEW(Integer)
250
+ mpz_mul(ans.value, self.pow_mpz_t_tmp(mpz_get_ui((<Integer>m).value)), self.pow_mpz_t_tmp(mpz_get_ui((<Integer>n).value)))
251
+ return ans
252
+
253
+ def _pow_mpz_t_tmp_test(self, n):
254
+ """
255
+ Test the ``pow_mpz_t_tmp`` function.
256
+
257
+ EXAMPLES::
258
+
259
+ sage: PC = PowComputer(3, 5, 10)
260
+ sage: PC._pow_mpz_t_tmp_test(4)
261
+ 81
262
+ sage: PC._pow_mpz_t_tmp_test(6)
263
+ 729
264
+ sage: PC._pow_mpz_t_tmp_test(0)
265
+ 1
266
+ sage: PC._pow_mpz_t_tmp_test(10)
267
+ 59049
268
+
269
+ sage: # needs sage.libs.ntl
270
+ sage: PC = PowComputer_ext_maker(3, 5, 10, 20, False, ntl.ZZ_pX([-3,0,1], 3^10), 'big','e',ntl.ZZ_pX([1],3^10))
271
+ sage: PC._pow_mpz_t_tmp_test(4)
272
+ 81
273
+ sage: PC._pow_mpz_t_tmp_test(6)
274
+ 729
275
+ sage: PC._pow_mpz_t_tmp_test(0)
276
+ 1
277
+ sage: PC._pow_mpz_t_tmp_test(10)
278
+ 59049
279
+ """
280
+ cdef Integer _n = Integer(n)
281
+ cdef Integer ans = PY_NEW(Integer)
282
+ mpz_set(ans.value, self.pow_mpz_t_tmp(mpz_get_si(_n.value)))
283
+ return ans
284
+
285
+ cdef mpz_srcptr pow_mpz_t_top(self) noexcept:
286
+ """
287
+ Return a pointer to ``self.prime^self.prec_cap`` as an ``mpz_srcptr``.
288
+
289
+ EXAMPLES::
290
+
291
+ sage: PC = PowComputer(3, 5, 10)
292
+ sage: PC._pow_mpz_t_top_test() # indirect doctest
293
+ 59049
294
+ """
295
+ raise NotImplementedError
296
+
297
+ def _pow_mpz_t_top_test(self):
298
+ """
299
+ Test the ``pow_mpz_t_top`` function.
300
+
301
+ EXAMPLES::
302
+
303
+ sage: PC = PowComputer(3, 5, 10)
304
+ sage: PC._pow_mpz_t_top_test()
305
+ 59049
306
+
307
+ sage: # needs sage.libs.ntl
308
+ sage: PC = PowComputer_ext_maker(3, 5, 10, 20, False, ntl.ZZ_pX([-3,0,1], 3^10), 'big','e',ntl.ZZ_pX([1],3^10))
309
+ sage: PC._pow_mpz_t_top_test()
310
+ 59049
311
+ """
312
+ cdef Integer ans = PY_NEW(Integer)
313
+ mpz_set(ans.value, self.pow_mpz_t_top())
314
+ return ans
315
+
316
+ def _repr_(self):
317
+ """
318
+ Return a string representation of ``self``.
319
+
320
+ EXAMPLES::
321
+
322
+ sage: PC = PowComputer(3, 5, 10); PC
323
+ PowComputer for 3
324
+ """
325
+ return "PowComputer for %s" % (self.prime)
326
+
327
+ def _prime(self):
328
+ """
329
+ Return the base that the ``PowComputer`` is exponentiating.
330
+
331
+ EXAMPLES::
332
+
333
+ sage: P = PowComputer(6, 10, 15)
334
+ sage: P._prime()
335
+ 6
336
+ """
337
+ return self.prime
338
+
339
+ def _in_field(self):
340
+ """
341
+ Return whether or not ``self`` is attached to a field.
342
+
343
+ EXAMPLES::
344
+
345
+ sage: P = PowComputer(3, 5, 10)
346
+ sage: P._in_field()
347
+ False
348
+ """
349
+ return self.in_field
350
+
351
+ def _cache_limit(self):
352
+ """
353
+ Return the limit to which powers of prime are computed.
354
+
355
+ EXAMPLES::
356
+
357
+ sage: P = PowComputer(3, 5, 10)
358
+ sage: P._cache_limit()
359
+ 5
360
+ """
361
+ cdef Integer ans
362
+ ans = PY_NEW(Integer)
363
+ mpz_set_ui(ans.value, self.cache_limit)
364
+ return ans
365
+
366
+ def _prec_cap(self):
367
+ """
368
+ Return ``prec_cap``, a single value that for which
369
+ ``self._prime()^prec_cap`` is stored.
370
+
371
+ EXAMPLES::
372
+
373
+ sage: P = PowComputer(3, 5, 10)
374
+ sage: P._prec_cap()
375
+ 10
376
+ """
377
+ cdef Integer ans
378
+ ans = PY_NEW(Integer)
379
+ mpz_set_ui(ans.value, self.prec_cap)
380
+ return ans
381
+
382
+ def _top_power(self):
383
+ """
384
+ Return ``self._prime()^self._prec_cap()``.
385
+
386
+ EXAMPLES::
387
+
388
+ sage: P = PowComputer(3, 4, 6)
389
+ sage: P._top_power()
390
+ 729
391
+ """
392
+ cdef Integer ans
393
+ ans = PY_NEW(Integer)
394
+ mpz_set(ans.value, self.pow_mpz_t_top())
395
+ return ans
396
+
397
+ def __call__(self, n):
398
+ """
399
+ Return ``self.prime^n``.
400
+
401
+ EXAMPLES::
402
+
403
+ sage: P = PowComputer(3, 4, 6)
404
+ sage: P(3)
405
+ 27
406
+ sage: P(6)
407
+ 729
408
+ sage: P(5)
409
+ 243
410
+ sage: P(7)
411
+ 2187
412
+ sage: P(0)
413
+ 1
414
+ sage: P(-2)
415
+ 1/9
416
+ """
417
+ cdef Integer _n
418
+ if n is infinity:
419
+ return Integer(0)
420
+ if not isinstance(n, Integer):
421
+ _n = Integer(n)
422
+ else:
423
+ _n = <Integer>n
424
+ if mpz_fits_slong_p(_n.value) == 0:
425
+ raise ValueError("n too big")
426
+ if _n < 0:
427
+ return ~self.pow_Integer(-mpz_get_si(_n.value))
428
+ else:
429
+ return self.pow_Integer(mpz_get_ui(_n.value))
430
+
431
+
432
+ cdef class PowComputer_base(PowComputer_class):
433
+ def __cinit__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly=None, shift_seed=None):
434
+ """
435
+ Allocate a ``PowComputer_base``.
436
+
437
+ EXAMPLES::
438
+
439
+ sage: PC = PowComputer(5, 7, 10)
440
+ sage: PC(3)
441
+ 125
442
+ """
443
+ cdef Py_ssize_t i
444
+
445
+ sig_on()
446
+ try:
447
+ self.small_powers = <mpz_t *>sig_malloc(sizeof(mpz_t) * (cache_limit + 1))
448
+ if self.small_powers == NULL:
449
+ raise MemoryError("out of memory allocating power storing")
450
+ try:
451
+ mpz_init(self.top_power)
452
+ try:
453
+ mpz_init(self.powhelper_oneunit)
454
+ try:
455
+ mpz_init(self.powhelper_teichdiff)
456
+ try:
457
+ mpz_init(self.shift_rem)
458
+ try:
459
+ mpz_init(self.aliasing)
460
+ try:
461
+ for i in range(cache_limit + 1):
462
+ try:
463
+ mpz_init(self.small_powers[i])
464
+ except BaseException:
465
+ while i:
466
+ i-=1
467
+ mpz_clear(self.small_powers[i])
468
+ raise
469
+ except BaseException:
470
+ mpz_clear(self.aliasing)
471
+ raise
472
+ except BaseException:
473
+ mpz_clear(self.shift_rem)
474
+ raise
475
+ except BaseException:
476
+ mpz_clear(self.powhelper_teichdiff)
477
+ raise
478
+ except BaseException:
479
+ mpz_clear(self.powhelper_oneunit)
480
+ raise
481
+ except BaseException:
482
+ mpz_clear(self.top_power)
483
+ raise
484
+ except BaseException:
485
+ sig_free(self.small_powers)
486
+ raise
487
+ finally:
488
+ sig_off()
489
+
490
+ self._allocated = 2
491
+
492
+ def __init__(self, Integer prime, long cache_limit, long prec_cap, long ram_prec_cap, bint in_field, poly=None, shift_seed=None):
493
+ """
494
+ Initialization.
495
+
496
+ TESTS::
497
+
498
+ sage: PC = PowComputer(5, 7, 10)
499
+ sage: PC(3)
500
+ 125
501
+ """
502
+ PowComputer_class.__init__(self, prime, cache_limit, prec_cap, ram_prec_cap, in_field, poly, shift_seed)
503
+
504
+ cdef Py_ssize_t i
505
+
506
+ mpz_set_ui(self.small_powers[0], 1)
507
+ if cache_limit > 0:
508
+ mpz_set(self.small_powers[1], prime.value)
509
+ for i in range(2, cache_limit + 1):
510
+ mpz_mul(self.small_powers[i], self.small_powers[i - 1], prime.value)
511
+ sig_on()
512
+ mpz_pow_ui(self.top_power, prime.value, prec_cap)
513
+ sig_off()
514
+ self.deg = 1
515
+ self.e = 1
516
+ self.f = 1
517
+ self.ram_prec_cap = prec_cap
518
+
519
+ def __dealloc__(self):
520
+ """
521
+ Deletion.
522
+
523
+ EXAMPLES::
524
+
525
+ sage: P = PowComputer(5, 7, 10)
526
+ sage: del P
527
+ sage: PowComputer(5, 7, 10)
528
+ PowComputer for 5
529
+ """
530
+ cdef Py_ssize_t i
531
+
532
+ if self._allocated >= 2:
533
+ for i in range(self.cache_limit + 1):
534
+ mpz_clear(self.small_powers[i])
535
+ mpz_clear(self.top_power)
536
+ mpz_clear(self.powhelper_oneunit)
537
+ mpz_clear(self.powhelper_teichdiff)
538
+ mpz_clear(self.shift_rem)
539
+ mpz_clear(self.aliasing)
540
+ mpz_clear(self.temp_m)
541
+ sig_free(self.small_powers)
542
+
543
+ def __reduce__(self):
544
+ """
545
+ Pickling.
546
+
547
+ EXAMPLES::
548
+
549
+ sage: P = PowComputer(5, 7, 10)
550
+ sage: R = loads(dumps(P))
551
+ sage: P == R
552
+ True
553
+ """
554
+ return PowComputer, (self.prime, self.cache_limit, self.prec_cap, self.in_field)
555
+
556
+ cdef mpz_srcptr pow_mpz_t_top(self) noexcept:
557
+ """
558
+ Return a pointer to ``self.prime^self.prec_cap`` as an ``mpz_srcptr``.
559
+
560
+ EXAMPLES::
561
+
562
+ sage: PC = PowComputer(3, 5, 10)
563
+ sage: PC._pow_mpz_t_top_test() # indirect doctest
564
+ 59049
565
+ """
566
+ return self.top_power
567
+
568
+ cdef mpz_srcptr pow_mpz_t_tmp(self, long n) except NULL:
569
+ """
570
+ Compute ``self.prime^n``.
571
+
572
+ EXAMPLES::
573
+
574
+ sage: PC = PowComputer(3, 5, 10)
575
+ sage: PC._pow_mpz_t_tmp_test(4)
576
+ 81
577
+ sage: PC._pow_mpz_t_tmp_test(-1)
578
+ Traceback (most recent call last):
579
+ ...
580
+ ValueError: n must be nonnegative
581
+ """
582
+ if n < 0:
583
+ raise ValueError("n must be nonnegative")
584
+ if n <= self.cache_limit:
585
+ return self.small_powers[n]
586
+ if n == self.prec_cap:
587
+ return self.top_power
588
+ # n may exceed self.prec_cap. Very large values can, however, lead to
589
+ # out-of-memory situations in the following computation. This
590
+ # sig_on()/sig_off() prevents sage from crashing in such cases.
591
+ # It does not have a significant impact on performance. For small
592
+ # values of n the powers are taken from self.small_powers, for large
593
+ # values, the computation dominates the cost of the sig_on()/sig_off().
594
+ sig_on()
595
+ mpz_pow_ui(self.temp_m, self.prime.value, n)
596
+ sig_off()
597
+ return self.temp_m
598
+
599
+ pow_comp_cache = {}
600
+ cdef PowComputer_base PowComputer_c(Integer m, Integer cache_limit, Integer prec_cap, in_field, prec_type=None):
601
+ """
602
+ Return a ``PowComputer``.
603
+
604
+ EXAMPLES::
605
+
606
+ sage: PC = PowComputer(3, 5, 10) # indirect doctest
607
+ sage: PC(4)
608
+ 81
609
+ """
610
+ if cache_limit < 0:
611
+ raise ValueError("cache_limit must be nonnegative")
612
+ if prec_cap < 0:
613
+ raise ValueError("prec_cap must be nonnegative")
614
+ if mpz_cmp_si((<Integer>prec_cap).value, maxpreccap) >= 0:
615
+ raise ValueError("cannot create p-adic parents with precision cap larger than (1 << (sizeof(long)*8 - 2))")
616
+
617
+ key = (m, cache_limit, prec_cap, in_field, prec_type)
618
+ if key in pow_comp_cache:
619
+ PC = pow_comp_cache[key]()
620
+ if PC is not None:
621
+ return PC
622
+ if prec_type == 'capped-rel':
623
+ from sage.rings.padics.padic_capped_relative_element import PowComputer_ as PC_class
624
+ elif prec_type == 'capped-abs':
625
+ from sage.rings.padics.padic_capped_absolute_element import PowComputer_ as PC_class
626
+ elif prec_type == 'fixed-mod':
627
+ from sage.rings.padics.padic_fixed_mod_element import PowComputer_ as PC_class
628
+ elif prec_type == 'floating-point':
629
+ from sage.rings.padics.padic_floating_point_element import PowComputer_ as PC_class
630
+ else:
631
+ PC_class = PowComputer_base
632
+ PC = PC_class(m, mpz_get_ui(cache_limit.value), mpz_get_ui(prec_cap.value), mpz_get_ui(prec_cap.value), in_field)
633
+ pow_comp_cache[key] = weakref.ref(PC)
634
+ return PC
635
+
636
+
637
+ # To speed up the creation of PowComputers with the same m, we might eventually want to copy over data from an existing PowComputer.
638
+
639
+ def PowComputer(m, cache_limit, prec_cap, in_field=False, prec_type=None):
640
+ r"""
641
+ Return a ``PowComputer`` that caches the values `1, m, m^2, \ldots, m^{C}`,
642
+ where `C` is ``cache_limit``.
643
+
644
+ Once you create a ``PowComputer``, merely call it to get values out.
645
+
646
+ You can input any integer, even if it's outside of the precomputed range.
647
+
648
+ INPUT:
649
+
650
+ - ``m`` -- integer; the base that you want to exponentiate
651
+ - ``cache_limit`` -- positive integer; that you want to cache powers up to
652
+
653
+ EXAMPLES::
654
+
655
+ sage: PC = PowComputer(3, 5, 10)
656
+ sage: PC
657
+ PowComputer for 3
658
+ sage: PC(4)
659
+ 81
660
+ sage: PC(6)
661
+ 729
662
+ sage: PC(-1)
663
+ 1/3
664
+ """
665
+ if not isinstance(m, Integer):
666
+ m = Integer(m)
667
+ if not isinstance(cache_limit, Integer):
668
+ cache_limit = Integer(cache_limit)
669
+ if not isinstance(prec_cap, Integer):
670
+ prec_cap = Integer(prec_cap)
671
+ return PowComputer_c(m, cache_limit, prec_cap, in_field, prec_type)