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,5 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ from sage.rings.morphism cimport RingHomomorphism_from_base
3
+
4
+ cdef class PolynomialRingHomomorphism_from_base(RingHomomorphism_from_base):
5
+ pass
@@ -0,0 +1,121 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Ring homomorphisms from a polynomial ring to another ring
4
+
5
+ This module currently implements the canonical ring homomorphism from
6
+ `A[x]` to `B[x]` induced by a ring homomorphism from `A` to `B`.
7
+
8
+ .. TODO::
9
+
10
+ Implement homomorphisms from `A[x]` to an arbitrary ring `R`,
11
+ given by a ring homomorphism from `A` to `R` and the image of `x`
12
+ in `R`.
13
+
14
+ AUTHORS:
15
+
16
+ - Peter Bruin (March 2014): initial version
17
+ """
18
+
19
+ from sage.rings.morphism cimport RingHomomorphism_from_base
20
+ from sage.structure.element cimport Element
21
+
22
+ cdef class PolynomialRingHomomorphism_from_base(RingHomomorphism_from_base):
23
+ """
24
+ The canonical ring homomorphism from `R[x]` to `S[x]` induced by a
25
+ ring homomorphism from `R` to `S`.
26
+
27
+ EXAMPLES::
28
+
29
+ sage: QQ['x'].coerce_map_from(ZZ['x'])
30
+ Ring morphism:
31
+ From: Univariate Polynomial Ring in x over Integer Ring
32
+ To: Univariate Polynomial Ring in x over Rational Field
33
+ Defn: Induced from base ring by
34
+ Natural morphism:
35
+ From: Integer Ring
36
+ To: Rational Field
37
+ """
38
+ cpdef Element _call_(self, x):
39
+ """
40
+ Evaluate the homomorphism ``self`` at ``x``.
41
+
42
+ TESTS::
43
+
44
+ sage: from sage.rings.polynomial.polynomial_ring_homomorphism import PolynomialRingHomomorphism_from_base
45
+ sage: R.<x> = ZZ[]
46
+ sage: S = QQ['x']
47
+ sage: f = ZZ.hom(QQ)
48
+ sage: F = PolynomialRingHomomorphism_from_base(R.Hom(S), f)
49
+ sage: F(2*x)
50
+ 2*x
51
+
52
+ sage: A = PolynomialRing(QQ, 'x', sparse=True)
53
+ sage: B = PolynomialRing(RR, 'x', sparse=True)
54
+ sage: g = QQ.hom(RR)
55
+ sage: G = PolynomialRingHomomorphism_from_base(A.Hom(B), g)
56
+ sage: G(A.gen()^1000000)
57
+ 1.0...*x^1000000
58
+ """
59
+ P = self.codomain()
60
+ f = self.underlying_map()
61
+ if P.is_sparse():
62
+ return P({a: f(b) for a, b in x.monomial_coefficients().items()})
63
+ else:
64
+ return P([f(b) for b in x])
65
+
66
+ cpdef Element _call_with_args(self, x, args=(), kwds={}):
67
+ """
68
+ Evaluate ``self`` at ``x`` with additional (keyword) arguments.
69
+
70
+ TESTS::
71
+
72
+ sage: from sage.rings.polynomial.polynomial_ring_homomorphism import PolynomialRingHomomorphism_from_base
73
+ sage: R.<x> = ZZ[]
74
+ sage: S = GF(5)['x']
75
+ sage: f = ZZ.hom(GF(5))
76
+ sage: F = PolynomialRingHomomorphism_from_base(R.Hom(S), f)
77
+ sage: F(2 * x, check=True)
78
+ 2*x
79
+
80
+ sage: # needs sage.rings.finite_rings
81
+ sage: k = GF(49, 'z')
82
+ sage: A = PolynomialRing(GF(7), 'x', sparse=True)
83
+ sage: B = PolynomialRing(k, 'x', sparse=True)
84
+ sage: g = GF(7).hom(k)
85
+ sage: G = PolynomialRingHomomorphism_from_base(A.Hom(B), g)
86
+ sage: G(A.gen()^1000000, True, construct=False)
87
+ x^1000000
88
+ """
89
+ P = self.codomain()
90
+ f = self.underlying_map()
91
+ if P.is_sparse():
92
+ return P({a: f(b) for a, b in x.monomial_coefficients().items()},
93
+ *args, **kwds)
94
+ else:
95
+ return P([f(b) for b in x], *args, **kwds)
96
+
97
+ def is_injective(self):
98
+ r"""
99
+ Return whether this morphism is injective.
100
+
101
+ EXAMPLES::
102
+
103
+ sage: R.<x> = ZZ[]
104
+ sage: S.<x> = QQ[]
105
+ sage: R.hom(S).is_injective()
106
+ True
107
+ """
108
+ return self.underlying_map().is_injective()
109
+
110
+ def is_surjective(self):
111
+ r"""
112
+ Return whether this morphism is surjective.
113
+
114
+ EXAMPLES::
115
+
116
+ sage: R.<x> = ZZ[]
117
+ sage: S.<x> = Zmod(2)[]
118
+ sage: R.hom(S).is_surjective()
119
+ True
120
+ """
121
+ return self.underlying_map().is_surjective()
@@ -0,0 +1,549 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Polynomial Interfaces to Singular
4
+
5
+ AUTHORS:
6
+
7
+ - Martin Albrecht <malb@informatik.uni-bremen.de> (2006-04-21)
8
+ - Robert Bradshaw: Re-factor to avoid multiple inheritance vs. Cython (2007-09)
9
+ - Syed Ahmad Lavasani: Added function field to _singular_init_ (2011-12-16);
10
+ Added non-prime finite fields to _singular_init_ (2012-1-22)
11
+
12
+ TESTS::
13
+
14
+ sage: R = PolynomialRing(GF(2**8,'a'), 10, 'x', order='invlex') # needs sage.rings.finite_rings
15
+ sage: R == loads(dumps(R)) # needs sage.rings.finite_rings
16
+ True
17
+ sage: P.<a,b> = PolynomialRing(GF(7), 2)
18
+ sage: f = (a^3 + 2*b^2*a)^7; f
19
+ a^21 + 2*a^7*b^14
20
+ """
21
+ #################################################################
22
+ #
23
+ # Sage: Open Source Mathematical Software
24
+ #
25
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
26
+ #
27
+ # Distributed under the terms of the GNU General Public License (GPL)
28
+ #
29
+ # This code is distributed in the hope that it will be useful,
30
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
31
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
32
+ # General Public License for more details.
33
+ #
34
+ # The full text of the GPL is available at:
35
+ #
36
+ # http://www.gnu.org/licenses/
37
+ #
38
+ ######################################################################
39
+
40
+ import sage.rings.fraction_field
41
+ import sage.rings.abc
42
+
43
+ from sage.rings.rational_field import RationalField
44
+ from sage.rings.function_field.function_field_rational import RationalFunctionField
45
+ from sage.rings.finite_rings.finite_field_base import FiniteField
46
+ from sage.rings.integer_ring import ZZ
47
+ from sage.rings.number_field.number_field_base import NumberField
48
+
49
+ import sage.rings.finite_rings.finite_field_constructor
50
+
51
+
52
+ def _do_singular_init_(singular, base_ring, char, _vars, order):
53
+ r"""
54
+ Implementation of :meth:`PolynomialRing_singular_repr._singular_init_`.
55
+
56
+ This code was extracted from :class:`PolynomialRing_singular_repr`
57
+ to make it callable from other places, in particular
58
+ :class:`MPolynomialRing_libsingular`.
59
+
60
+ TESTS::
61
+
62
+ sage: from sage.rings.polynomial.polynomial_singular_interface import _do_singular_init_
63
+ sage: _do_singular_init_(singular, ZZ, 0, 'X', 'dp') # needs sage.libs.singular
64
+ (polynomial ring, over a domain, global ordering
65
+ // coefficients: ZZ...
66
+ // number of vars : 1
67
+ // block 1 : ordering dp
68
+ // : names X
69
+ // block 2 : ordering C,
70
+ None)
71
+ """
72
+ if singular is None:
73
+ from sage.interfaces.singular import singular
74
+
75
+ make_ring = lambda s: singular.ring(s, _vars, order=order)
76
+
77
+ if base_ring is ZZ:
78
+ return make_ring("(ZZ)"), None
79
+
80
+ if isinstance(base_ring, sage.rings.rational_field.RationalField):
81
+ return make_ring("(QQ)"), None
82
+
83
+ elif isinstance(base_ring, sage.rings.abc.RealField):
84
+ # singular converts to bits from base_10 in mpr_complex.cc by:
85
+ # size_t bits = 1 + (size_t) ((float)digits * 3.5);
86
+ precision = base_ring.precision()
87
+ digits = (2*precision + 4) // 7
88
+ return make_ring(f"(real,{digits},0)"), None
89
+
90
+ elif isinstance(base_ring, sage.rings.abc.ComplexField):
91
+ # singular converts to bits from base_10 in mpr_complex.cc by:
92
+ # size_t bits = 1 + (size_t) ((float)digits * 3.5);
93
+ precision = base_ring.precision()
94
+ digits = (2*precision + 4) // 7
95
+ return make_ring(f"(complex,{digits},0,I)"), None
96
+
97
+ elif isinstance(base_ring, sage.rings.abc.RealDoubleField):
98
+ # singular converts to bits from base_10 in mpr_complex.cc by:
99
+ # size_t bits = 1 + (size_t) ((float)digits * 3.5);
100
+ return make_ring("(real,15,0)"), None
101
+
102
+ elif isinstance(base_ring, sage.rings.abc.ComplexDoubleField):
103
+ # singular converts to bits from base_10 in mpr_complex.cc by:
104
+ # size_t bits = 1 + (size_t) ((float)digits * 3.5);
105
+ return make_ring("(complex,15,0,I)"), None
106
+
107
+ elif isinstance(base_ring, sage.rings.abc.IntegerModRing):
108
+ char = base_ring.characteristic()
109
+ if isinstance(base_ring, FiniteField) and char <= 2147483647:
110
+ return make_ring(str(char)), None
111
+ if char.is_power_of(2):
112
+ return make_ring(f"(integer,2,{char.nbits()-1})"), None
113
+ return make_ring(f"(integer,{char})"), None
114
+
115
+ elif isinstance(base_ring, FiniteField):
116
+ # not the prime field!
117
+ gen = str(base_ring.gen())
118
+ R = make_ring(f"({char},{gen})")
119
+
120
+ minpoly = str(base_ring.modulus()).replace("x",gen).replace(" ","")
121
+ if singular.eval('minpoly') != f"({minpoly})":
122
+ singular.eval(f"minpoly={minpoly}")
123
+ minpoly = singular.eval('minpoly')[1:-1]
124
+
125
+ return R, minpoly
126
+
127
+ elif isinstance(base_ring, NumberField) and base_ring.is_absolute():
128
+ # not the rationals!
129
+ gen = str(base_ring.gen())
130
+ poly = base_ring.polynomial()
131
+ poly_gen = str(poly.parent().gen())
132
+ poly_str = str(poly).replace(poly_gen,gen)
133
+ R = make_ring(f"({char},{gen})")
134
+
135
+ minpoly = poly_str.replace(" ","")
136
+ if singular.eval('minpoly') != f"({minpoly})":
137
+ singular.eval(f"minpoly={minpoly}")
138
+ minpoly = singular.eval('minpoly')[1:-1]
139
+
140
+ return R, minpoly
141
+
142
+ elif isinstance(base_ring, sage.rings.fraction_field.FractionField_generic):
143
+ if base_ring.ngens() == 1:
144
+ gens = str(base_ring.gen())
145
+ else:
146
+ gens = str(base_ring.gens())
147
+
148
+ B = base_ring.base_ring()
149
+ base_char = base_ring.characteristic()
150
+
151
+ if B.is_prime_field() or B is ZZ:
152
+ return make_ring(f"({base_char},{gens})"), None
153
+
154
+ if isinstance(B, FiniteField) and B.characteristic() <= 2147483647:
155
+ ext_gen = str(B.gen())
156
+ _vars = '(' + ext_gen + ', ' + _vars[1:]
157
+
158
+ R = make_ring(f"({base_char},{gens})")
159
+
160
+ base_ring.__minpoly = (str(B.modulus()).replace("x",ext_gen)).replace(" ","")
161
+ singular.eval('setring ' + R._name)
162
+
163
+ from sage.misc.stopgap import stopgap
164
+ stopgap("Denominators of fraction field elements are sometimes dropped without warning.", 17696)
165
+
166
+ return singular(f"std(ideal({base_ring.__minpoly}))", type='qring'), None
167
+
168
+ elif isinstance(base_ring, RationalFunctionField) \
169
+ and base_ring.constant_field().is_prime_field():
170
+ gen = str(base_ring.gen())
171
+ return make_ring(f"({base_ring.characteristic()},{gen})"), None
172
+
173
+ raise TypeError("no conversion to a Singular ring defined")
174
+
175
+
176
+ class PolynomialRing_singular_repr:
177
+ """
178
+ Implement methods to convert polynomial rings to Singular.
179
+
180
+ This class is a base class for all univariate and multivariate
181
+ polynomial rings which support conversion from and to Singular
182
+ rings.
183
+ """
184
+ def _singular_(self, singular=None):
185
+ r"""
186
+ Return a Singular ring for this polynomial ring.
187
+
188
+ Currently `\QQ`, `{\rm GF}(p), {\rm GF}(p^n)`, `\CC`, `\RR`, `\ZZ` and
189
+ `\ZZ/n\ZZ` are supported.
190
+
191
+ INPUT:
192
+
193
+ - ``singular`` -- Singular instance
194
+
195
+ OUTPUT: Singular ring matching this ring
196
+
197
+ EXAMPLES::
198
+
199
+ sage: R.<x,y> = PolynomialRing(CC) # needs sage.rings.real_mpfr
200
+ sage: singular(R) # needs sage.libs.singular sage.rings.real_mpfr
201
+ polynomial ring, over a field, global ordering
202
+ // coefficients: real[I](complex:15 digits, additional 0 digits)/(I^2+1)...
203
+ // number of vars : 2
204
+ // block 1 : ordering dp
205
+ // : names x y
206
+ // block 2 : ordering C
207
+
208
+ sage: R.<x,y> = PolynomialRing(RealField(100)) # needs sage.rings.real_mpfr
209
+ sage: singular(R) # needs sage.libs.singular sage.rings.real_mpfr
210
+ polynomial ring, over a field, global ordering
211
+ // coefficients: Float()...
212
+ // number of vars : 2
213
+ // block 1 : ordering dp
214
+ // : names x y
215
+ // block 2 : ordering C
216
+
217
+ sage: w = polygen(ZZ, 'w')
218
+ sage: R.<x> = PolynomialRing(NumberField(w^2 + 1, 's')) # needs sage.rings.number_field
219
+ sage: singular(R) # needs sage.libs.singular sage.rings.number_field
220
+ polynomial ring, over a field, global ordering
221
+ // coefficients: QQ[s]/(s^2+1)...
222
+ // number of vars : 1
223
+ // block 1 : ordering lp
224
+ // : names x
225
+ // block 2 : ordering C
226
+
227
+ sage: R = PolynomialRing(GF(127), 'x', implementation='singular') # needs sage.libs.singular
228
+ sage: singular(R) # needs sage.libs.singular
229
+ polynomial ring, over a field, global ordering
230
+ // coefficients: ZZ/127...
231
+ // number of vars : 1
232
+ // block 1 : ordering dp
233
+ // : names x
234
+ // block 2 : ordering C
235
+
236
+ sage: R = PolynomialRing(QQ, 'x', implementation='singular') # needs sage.libs.singular
237
+ sage: singular(R) # needs sage.libs.singular
238
+ polynomial ring, over a field, global ordering
239
+ // coefficients: QQ...
240
+ // number of vars : 1
241
+ // block 1 : ordering dp
242
+ // : names x
243
+ // block 2 : ordering C
244
+
245
+ sage: R = PolynomialRing(QQ,'x')
246
+ sage: singular(R) # needs sage.libs.singular
247
+ polynomial ring, over a field, global ordering
248
+ // coefficients: QQ...
249
+ // number of vars : 1
250
+ // block 1 : ordering lp
251
+ // : names x
252
+ // block 2 : ordering C
253
+
254
+ sage: R = PolynomialRing(GF(127), 'x')
255
+ sage: singular(R) # needs sage.libs.singular
256
+ polynomial ring, over a field, global ordering
257
+ // coefficients: ZZ/127...
258
+ // number of vars : 1
259
+ // block 1 : ordering lp
260
+ // : names x
261
+ // block 2 : ordering C
262
+
263
+ sage: R = Frac(ZZ['a,b'])['x,y'] # needs sage.libs.singular
264
+ sage: singular(R) # needs sage.libs.singular
265
+ polynomial ring, over a field, global ordering
266
+ // coefficients: QQ(a, b)...
267
+ // number of vars : 2
268
+ // block 1 : ordering dp
269
+ // : names x y
270
+ // block 2 : ordering C
271
+
272
+
273
+ sage: R = IntegerModRing(1024)['x,y']
274
+ sage: singular(R) # needs sage.libs.singular
275
+ polynomial ring, over a ring (with zero-divisors), global ordering
276
+ // coefficients: ZZ/(2^10)...
277
+ // number of vars : 2
278
+ // block 1 : ordering dp
279
+ // : names x y
280
+ // block 2 : ordering C
281
+
282
+ sage: R = IntegerModRing(15)['x,y']
283
+ sage: singular(R) # needs sage.libs.singular
284
+ polynomial ring, over a ring (with zero-divisors), global ordering
285
+ // coefficients: ZZ/(15)...
286
+ // number of vars : 2
287
+ // block 1 : ordering dp
288
+ // : names x y
289
+ // block 2 : ordering C
290
+
291
+ sage: R = ZZ['x,y']
292
+ sage: singular(R) # needs sage.libs.singular
293
+ polynomial ring, over a domain, global ordering
294
+ // coefficients: ZZ...
295
+ // number of vars : 2
296
+ // block 1 : ordering dp
297
+ // : names x y
298
+ // block 2 : ordering C
299
+
300
+ sage: R = ZZ['x']
301
+ sage: singular(R) # needs sage.libs.singular
302
+ polynomial ring, over a domain, global ordering
303
+ // coefficients: ZZ...
304
+ // number of vars : 1
305
+ // block 1 : ordering lp
306
+ // : names x
307
+ // block 2 : ordering C
308
+
309
+ sage: # needs sage.rings.finite_rings
310
+ sage: k.<a> = FiniteField(25)
311
+ sage: R = k['x']
312
+ sage: K = R.fraction_field()
313
+ sage: S = K['y']
314
+ sage: singular(S) # needs sage.libs.singular
315
+ polynomial ring, over a field, global ordering
316
+ // coefficients: ZZ/5(x)...
317
+ // number of vars : 2
318
+ // block 1 : ordering lp
319
+ // : names a y
320
+ // block 2 : ordering C
321
+ // quotient ring from ideal
322
+ _[1]=a2-a+2
323
+
324
+ .. warning::
325
+
326
+ - If the base ring is a finite extension field or a number field
327
+ the ring will not only be returned but also be set as the current
328
+ ring in Singular.
329
+ - Singular represents precision of floating point numbers base 10
330
+ while Sage represents floating point precision base 2.
331
+ """
332
+ if singular is None:
333
+ from sage.interfaces.singular import singular
334
+ try:
335
+ R = self.__singular
336
+ if singular is not None and R.parent() is not singular:
337
+ raise ValueError
338
+ elif singular is None:
339
+ from sage.interfaces.singular import singular
340
+ R._check_valid()
341
+ if self.base_ring() is ZZ or self.base_ring().is_prime_field():
342
+ return R
343
+ if isinstance(self.base_ring(), FiniteField) or \
344
+ (isinstance(self.base_ring(), NumberField) and self.base_ring().is_absolute()):
345
+ R.set_ring() # sorry for that, but needed for minpoly
346
+ if singular.eval('minpoly') != f"({self.__minpoly})":
347
+ singular.eval(f"minpoly={self.__minpoly}")
348
+ self.__minpoly = singular.eval('minpoly')[1:-1]
349
+ return R
350
+ except (AttributeError, ValueError):
351
+ return self._singular_init_(singular)
352
+
353
+ def _singular_init_(self, singular=None):
354
+ """
355
+ Return a newly created Singular ring matching this ring.
356
+
357
+ EXAMPLES::
358
+
359
+ sage: PolynomialRing(QQ,'u_ba')._singular_init_() # needs sage.libs.singular
360
+ polynomial ring, over a field, global ordering
361
+ // coefficients: QQ...
362
+ // number of vars : 1
363
+ // block 1 : ordering lp
364
+ // : names u_ba
365
+ // block 2 : ordering C
366
+ """
367
+ if not can_convert_to_singular(self):
368
+ raise TypeError("no conversion of this ring to a Singular ring defined")
369
+
370
+ if self.ngens() == 1:
371
+ _vars = f'({self.gen()})'
372
+ if "*" in _vars: # 1.000...000*x
373
+ _vars = _vars.split("*")[1]
374
+ order = 'lp'
375
+ else:
376
+ _vars = str(self.gens())
377
+ order = self.term_order().singular_str()
378
+
379
+ if singular is None:
380
+ from sage.interfaces.singular import singular
381
+
382
+ self.__singular, self.__minpoly = _do_singular_init_(singular, self.base_ring(), self.characteristic(), _vars, order)
383
+
384
+ return self.__singular
385
+
386
+
387
+ def can_convert_to_singular(R):
388
+ """
389
+ Return ``True`` if this ring's base field or ring can be
390
+ represented in Singular, and the polynomial ring has at
391
+ least one generator.
392
+
393
+ The following base rings are supported: finite fields,
394
+ rationals, number fields, and real and complex fields.
395
+
396
+ EXAMPLES::
397
+
398
+ sage: from sage.rings.polynomial.polynomial_singular_interface import can_convert_to_singular
399
+ sage: can_convert_to_singular(PolynomialRing(QQ, names=['x']))
400
+ True
401
+ sage: can_convert_to_singular(PolynomialRing(ZZ, names=['x']))
402
+ True
403
+
404
+ sage: can_convert_to_singular(PolynomialRing(QQ, names=[]))
405
+ False
406
+
407
+ TESTS:
408
+
409
+ Avoid non absolute number fields (see :issue:`23535`)::
410
+
411
+ sage: x = polygen(ZZ, 'x')
412
+ sage: K.<a,b> = NumberField([x^2 - 2, x^2 - 5]) # needs sage.rings.number_field
413
+ sage: can_convert_to_singular(K['s,t']) # needs sage.rings.number_field
414
+ False
415
+
416
+ Check for :issue:`33319`::
417
+
418
+ sage: # needs sage.rings.finite_rings
419
+ sage: R.<x,y> = GF((2^31-1)^3)[]
420
+ sage: R._has_singular
421
+ True
422
+ sage: R.<x,y> = GF((2^31+11)^2)[]
423
+ sage: R._has_singular
424
+ False
425
+ sage: R.<x,y> = GF(10^20 - 11)[]
426
+ sage: R._has_singular
427
+ True
428
+
429
+ sage: R.<x,y> = Zmod(10^20 + 1)[]
430
+ sage: R._has_singular
431
+ True
432
+
433
+ Check that :issue:`39106` is fixed::
434
+
435
+ sage: # needs lrcalc_python sage.combinat sage.modules
436
+ sage: s = SymmetricFunctions(QQ).s()
437
+ sage: R.<x> = PolynomialRing(s.fraction_field())
438
+ sage: can_convert_to_singular(R)
439
+ False
440
+ sage: R.<x, y> = PolynomialRing(s.fraction_field())
441
+ sage: can_convert_to_singular(R)
442
+ False
443
+ """
444
+ from sage.rings.polynomial.multi_polynomial_ring import MPolynomialRing_base
445
+ from sage.rings.polynomial.polynomial_ring import PolynomialRing_general
446
+
447
+ if R.ngens() == 0:
448
+ return False
449
+
450
+ base_ring = R.base_ring()
451
+ if (base_ring is ZZ
452
+ or isinstance(base_ring, (RationalField,
453
+ sage.rings.abc.IntegerModRing,
454
+ sage.rings.abc.RealField, sage.rings.abc.ComplexField,
455
+ sage.rings.abc.RealDoubleField, sage.rings.abc.ComplexDoubleField))):
456
+ return True
457
+ if isinstance(base_ring, FiniteField):
458
+ return base_ring.characteristic() <= 2147483647
459
+ if isinstance(base_ring, NumberField):
460
+ return base_ring.is_absolute()
461
+ if (isinstance(base_ring, sage.rings.fraction_field.FractionField_generic)
462
+ and isinstance(base_ring.base(), (PolynomialRing_general, MPolynomialRing_base))):
463
+ B = base_ring.base_ring()
464
+ return (B.is_prime_field() or B is ZZ
465
+ or (isinstance(B, FiniteField) and B.characteristic() <= 2147483647))
466
+ if isinstance(base_ring, RationalFunctionField):
467
+ return base_ring.constant_field().is_prime_field()
468
+ return False
469
+
470
+
471
+ class Polynomial_singular_repr:
472
+ """
473
+ Implement coercion of polynomials to Singular polynomials.
474
+
475
+ This class is a base class for all (univariate and multivariate)
476
+ polynomial classes which support conversion from and to
477
+ Singular polynomials.
478
+
479
+ Due to the incompatibility of Python extension classes and multiple inheritance,
480
+ this just defers to module-level functions.
481
+ """
482
+ def _singular_(self, singular=None):
483
+ if singular is None:
484
+ from sage.interfaces.singular import singular
485
+ return _singular_func(self, singular)
486
+
487
+ def _singular_init_func(self, singular=None):
488
+ if singular is None:
489
+ from sage.interfaces.singular import singular
490
+ return _singular_init_func(self, singular)
491
+
492
+
493
+ def _singular_func(self, singular=None):
494
+ """
495
+ Return Singular polynomial matching this polynomial.
496
+
497
+ INPUT:
498
+
499
+ - ``singular`` -- Singular instance to use
500
+
501
+ EXAMPLES::
502
+
503
+ sage: # needs sage.libs.singular
504
+ sage: P.<a,b> = PolynomialRing(GF(7), 2)
505
+ sage: f = (a^3 + 2*b^2*a)^7; f
506
+ a^21 + 2*a^7*b^14
507
+ sage: h = f._singular_(); h
508
+ a^21+2*a^7*b^14
509
+ sage: P(h)
510
+ a^21 + 2*a^7*b^14
511
+ sage: P(h^20) == f^20
512
+ True
513
+
514
+ sage: # needs sage.libs.singular
515
+ sage: R.<x> = PolynomialRing(GF(7))
516
+ sage: f = (x^3 + 2*x^2*x)^7
517
+ sage: f
518
+ 3*x^21
519
+ sage: h = f._singular_(); h
520
+ 3*x^21
521
+ sage: R(h)
522
+ 3*x^21
523
+ sage: R(h^20) == f^20
524
+ True
525
+ """
526
+ if singular is None:
527
+ from sage.interfaces.singular import singular
528
+ self.parent()._singular_(singular).set_ring() # this is expensive
529
+ try:
530
+ self.__singular._check_valid()
531
+ if self.__singular.parent() is singular:
532
+ return self.__singular
533
+ except (AttributeError, ValueError):
534
+ pass
535
+ return _singular_init_func(self, singular)
536
+
537
+
538
+ def _singular_init_func(self, singular=None):
539
+ """
540
+ Return corresponding Singular polynomial but enforce that a new
541
+ instance is created in the Singular interpreter.
542
+
543
+ Use ``self._singular_()`` instead.
544
+ """
545
+ if singular is None:
546
+ from sage.interfaces.singular import singular
547
+ self.parent()._singular_(singular).set_ring() # this is expensive
548
+ self.__singular = singular(str(self))
549
+ return self.__singular