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,1190 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Schemes
4
+
5
+ AUTHORS:
6
+
7
+ - William Stein, David Kohel, Kiran Kedlaya (2008): added zeta_series
8
+
9
+ - Volker Braun (2011-08-11): documenting, improving, refactoring.
10
+ """
11
+ # ****************************************************************************
12
+ # Copyright (C) 2011 Volker Braun <vbraun.name@gmail.com>
13
+ # Copyright (C) 2008 Kiran Kedlaya <kedlaya@mit.edu>
14
+ # Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu.au>
15
+ # Copyright (C) 2005 William Stein
16
+ #
17
+ # Distributed under the terms of the GNU General Public License (GPL)
18
+ # as published by the Free Software Foundation; either version 2 of
19
+ # the License, or (at your option) any later version.
20
+ # https://www.gnu.org/licenses/
21
+ # ****************************************************************************
22
+
23
+ from sage.categories.commutative_rings import CommutativeRings
24
+ from sage.misc.cachefunc import cached_method
25
+ from sage.misc.lazy_import import lazy_import
26
+ from sage.rings.ideal import Ideal_generic
27
+ from sage.rings.integer_ring import ZZ
28
+ from sage.schemes.generic.point import SchemeTopologicalPoint_prime_ideal
29
+ from sage.structure.parent import Parent
30
+ from sage.structure.unique_representation import UniqueRepresentation
31
+
32
+ lazy_import('sage.schemes.generic.morphism', 'SchemeMorphism')
33
+ lazy_import('sage.schemes.elliptic_curves.ell_generic', 'EllipticCurve_generic', as_='EllipticCurve')
34
+
35
+
36
+ def is_Scheme(x):
37
+ """
38
+ Test whether ``x`` is a scheme.
39
+
40
+ INPUT:
41
+
42
+ - ``x`` -- anything
43
+
44
+ OUTPUT: boolean; whether ``x`` derives from :class:`Scheme`
45
+
46
+ EXAMPLES::
47
+
48
+ sage: from sage.schemes.generic.scheme import is_Scheme
49
+ sage: is_Scheme(5)
50
+ doctest:warning...
51
+ DeprecationWarning: The function is_Scheme is deprecated; use 'isinstance(..., Scheme)' or categories instead.
52
+ See https://github.com/sagemath/sage/issues/38022 for details.
53
+ False
54
+ sage: X = Spec(QQ)
55
+ sage: is_Scheme(X)
56
+ True
57
+ """
58
+ from sage.misc.superseded import deprecation
59
+ deprecation(38022, "The function is_Scheme is deprecated; use 'isinstance(..., Scheme)' or categories instead.")
60
+ return isinstance(x, Scheme)
61
+
62
+
63
+ class Scheme(Parent):
64
+ r"""
65
+ The base class for all schemes.
66
+
67
+ INPUT:
68
+
69
+ - ``X`` -- a scheme, scheme morphism, commutative ring,
70
+ commutative ring morphism, or ``None`` (optional). Determines
71
+ the base scheme. If a commutative ring is passed, the spectrum
72
+ of the ring will be used as base.
73
+
74
+ - ``category`` -- the category (optional); will be automatically
75
+ constructed by default
76
+
77
+ EXAMPLES::
78
+
79
+ sage: from sage.schemes.generic.scheme import Scheme
80
+ sage: Scheme(ZZ)
81
+ <sage.schemes.generic.scheme.Scheme_with_category object at ...>
82
+
83
+ A scheme is in the category of all schemes over its base::
84
+
85
+ sage: ProjectiveSpace(4, QQ).category()
86
+ Category of schemes over Rational Field
87
+
88
+ There is a special and unique `\mathrm{Spec}(\ZZ)` that is the default base
89
+ scheme::
90
+
91
+ sage: Spec(ZZ).base_scheme() is Spec(QQ).base_scheme()
92
+ True
93
+ """
94
+
95
+ def __init__(self, X=None, category=None):
96
+ """
97
+ Construct a scheme.
98
+
99
+ TESTS:
100
+
101
+ The full test suite works since :issue:`7946`::
102
+
103
+ sage: R.<x, y> = QQ[]
104
+ sage: I = (x^2 - y^2)*R
105
+ sage: RmodI = R.quotient(I)
106
+ sage: X = Spec(RmodI)
107
+ sage: TestSuite(X).run() # needs sage.libs.singular
108
+ """
109
+ from sage.categories.map import Map
110
+ from sage.categories.rings import Rings
111
+
112
+ if X is None:
113
+ self._base_ring = ZZ
114
+ elif isinstance(X, Scheme):
115
+ self._base_scheme = X
116
+ elif isinstance(X, SchemeMorphism):
117
+ self._base_morphism = X
118
+ elif X in CommutativeRings():
119
+ self._base_ring = X
120
+ elif isinstance(X, Map) and X.category_for().is_subcategory(Rings()):
121
+ # X is a morphism of Rings
122
+ self._base_ring = X.codomain()
123
+ else:
124
+ raise ValueError('The base must be define by a scheme, '
125
+ 'scheme morphism, or commutative ring.')
126
+
127
+ from sage.categories.schemes import Schemes
128
+ if X is None:
129
+ default_category = Schemes()
130
+ else:
131
+ default_category = Schemes(self.base_scheme())
132
+ if category is None:
133
+ category = default_category
134
+ else:
135
+ assert category.is_subcategory(default_category), \
136
+ "%s is not a subcategory of %s" % (category, default_category)
137
+
138
+ Parent.__init__(self, self.base_ring(), category=category)
139
+
140
+ def union(self, X):
141
+ """
142
+ Return the disjoint union of the schemes ``self`` and ``X``.
143
+
144
+ EXAMPLES::
145
+
146
+ sage: S = Spec(QQ)
147
+ sage: X = AffineSpace(1, QQ)
148
+ sage: S.union(X)
149
+ Traceback (most recent call last):
150
+ ...
151
+ NotImplementedError
152
+ """
153
+ raise NotImplementedError
154
+
155
+ __add__ = union
156
+
157
+ def _morphism(self, *args, **kwds):
158
+ """
159
+ Construct a morphism determined by action on points of ``self``.
160
+
161
+ EXAMPLES::
162
+
163
+ sage: X = Spec(QQ)
164
+ sage: X._morphism()
165
+ Traceback (most recent call last):
166
+ ...
167
+ NotImplementedError
168
+
169
+ TESTS:
170
+
171
+ This shows that issue at :issue:`7389` is solved::
172
+
173
+ sage: S = Spec(ZZ)
174
+ sage: f = S.identity_morphism()
175
+ sage: from sage.schemes.generic.glue import GluedScheme
176
+ sage: T = GluedScheme(f, f)
177
+ sage: S.hom([1],T)
178
+ Traceback (most recent call last):
179
+ ...
180
+ NotImplementedError
181
+ """
182
+ raise NotImplementedError
183
+
184
+ def base_extend(self, Y):
185
+ """
186
+ Extend the base of the scheme.
187
+
188
+ Derived classes must override this method.
189
+
190
+ EXAMPLES::
191
+
192
+ sage: from sage.schemes.generic.scheme import Scheme
193
+ sage: X = Scheme(ZZ)
194
+ sage: X.base_scheme()
195
+ Spectrum of Integer Ring
196
+ sage: X.base_extend(QQ)
197
+ Traceback (most recent call last):
198
+ ...
199
+ NotImplementedError
200
+ """
201
+ raise NotImplementedError
202
+
203
+ def __call__(self, *args):
204
+ """
205
+ Call syntax for schemes.
206
+
207
+ INPUT/OUTPUT: the arguments must be one of the following:
208
+
209
+ - a ring or a scheme `S`. Output will be the set `X(S)` of
210
+ `S`-valued points on `X`.
211
+
212
+ - If `S` is a list or tuple or just the coordinates, return a
213
+ point in `X(T)`, where `T` is the base scheme of ``self``.
214
+
215
+ EXAMPLES::
216
+
217
+ sage: A = AffineSpace(2, QQ)
218
+
219
+ We create some point sets::
220
+
221
+ sage: A(QQ)
222
+ Set of rational points of Affine Space of dimension 2 over Rational Field
223
+ sage: A(RR) # needs sage.rings.real_mpfr
224
+ Set of rational points of Affine Space of dimension 2
225
+ over Real Field with 53 bits of precision
226
+
227
+ Space of dimension 2 over Rational Field::
228
+
229
+ sage: R.<x> = PolynomialRing(QQ)
230
+ sage: A(NumberField(x^2 + 1, 'a')) # needs sage.rings.number_field
231
+ Set of rational points of Affine Space of dimension 2
232
+ over Number Field in a with defining polynomial x^2 + 1
233
+ sage: A(GF(7))
234
+ Traceback (most recent call last):
235
+ ...
236
+ ValueError: There must be a natural map S --> R, but
237
+ S = Rational Field and R = Finite Field of size 7
238
+
239
+ We create some points::
240
+
241
+ sage: A(QQ)([1, 0])
242
+ (1, 0)
243
+
244
+ We create the same point by giving the coordinates of the point
245
+ directly::
246
+
247
+ sage: A(1, 0)
248
+ (1, 0)
249
+
250
+ Check that :issue:`16832` is fixed::
251
+
252
+ sage: P.<x,y,z> = ProjectiveSpace(ZZ, 2)
253
+ sage: X = P.subscheme(x^2 - y^2)
254
+ sage: X(P([4, 4, 1]))
255
+ (4 : 4 : 1)
256
+ """
257
+ if len(args) == 1:
258
+ from sage.schemes.generic.morphism import SchemeMorphism_point
259
+ S = args[0]
260
+ if S in CommutativeRings():
261
+ return self.point_homset(S)
262
+ elif isinstance(S, Scheme):
263
+ return S.Hom(self)
264
+ elif isinstance(S, (list, tuple)):
265
+ args = S
266
+ elif isinstance(S, SchemeMorphism_point):
267
+ if S.codomain() is self:
268
+ return S
269
+ args = S
270
+ return self.point(args)
271
+
272
+ @cached_method
273
+ def point_homset(self, S=None):
274
+ r"""
275
+ Return the set of S-valued points of this scheme.
276
+
277
+ INPUT:
278
+
279
+ - ``S`` -- a commutative ring
280
+
281
+ OUTPUT: the set of morphisms `\mathrm{Spec}(S) \to X`
282
+
283
+ EXAMPLES::
284
+
285
+ sage: P = ProjectiveSpace(ZZ, 3)
286
+ sage: P.point_homset(ZZ)
287
+ Set of rational points of Projective Space of dimension 3 over Integer Ring
288
+ sage: P.point_homset(QQ)
289
+ Set of rational points of Projective Space of dimension 3 over Rational Field
290
+ sage: P.point_homset(GF(11))
291
+ Set of rational points of Projective Space of dimension 3 over
292
+ Finite Field of size 11
293
+
294
+ TESTS::
295
+
296
+ sage: P = ProjectiveSpace(QQ, 3)
297
+ sage: P.point_homset(GF(11))
298
+ Traceback (most recent call last):
299
+ ...
300
+ ValueError: There must be a natural map S --> R, but
301
+ S = Rational Field and R = Finite Field of size 11
302
+ """
303
+ if S is None:
304
+ S = self.base_ring()
305
+ SpecS = AffineScheme(S, self.base_ring())
306
+ from sage.schemes.generic.homset import SchemeHomset
307
+ return SchemeHomset(SpecS, self, as_point_homset=True)
308
+
309
+ def point(self, v, check=True):
310
+ """
311
+ Create a point.
312
+
313
+ INPUT:
314
+
315
+ - ``v`` -- anything that defines a point
316
+
317
+ - ``check`` -- boolean (default: ``True``); whether
318
+ to check the defining data for consistency
319
+
320
+ OUTPUT: a point of the scheme
321
+
322
+ EXAMPLES::
323
+
324
+ sage: A2 = AffineSpace(QQ, 2)
325
+ sage: A2.point([4, 5])
326
+ (4, 5)
327
+
328
+ sage: R.<t> = PolynomialRing(QQ)
329
+ sage: E = EllipticCurve([t + 1, t, t, 0, 0]) # needs sage.schemes
330
+ sage: E.point([0, 0]) # needs sage.schemes
331
+ (0 : 0 : 1)
332
+ """
333
+ # todo: update elliptic curve stuff to take point_homset as argument
334
+ if isinstance(self, EllipticCurve):
335
+ try:
336
+ return self._point(self.point_homset(), v, check=check)
337
+ except AttributeError: # legacy code without point_homset
338
+ return self._point(self, v, check=check)
339
+
340
+ return self.point_homset()(v, check=check)
341
+
342
+ def _point(self):
343
+ """
344
+ Return the Hom-set from some affine scheme to ``self``.
345
+
346
+ OUTPUT:
347
+
348
+ A scheme Hom-set, see :mod:`~sage.schemes.generic.homset`.
349
+
350
+ EXAMPLES::
351
+
352
+ sage: X = Spec(QQ)
353
+ sage: X._point()
354
+ Traceback (most recent call last):
355
+ ...
356
+ NotImplementedError
357
+ """
358
+ raise NotImplementedError
359
+
360
+ def _point_homset(self, *args, **kwds):
361
+ """
362
+ Return the Hom-set from ``self`` to another scheme.
363
+
364
+ EXAMPLES::
365
+
366
+ sage: from sage.schemes.generic.scheme import Scheme
367
+ sage: X = Scheme(QQ)
368
+ sage: X._point_homset()
369
+ Traceback (most recent call last):
370
+ ...
371
+ NotImplementedError
372
+ """
373
+ raise NotImplementedError
374
+
375
+ def __truediv__(self, Y):
376
+ """
377
+ Return the base extension of ``self`` to Y.
378
+
379
+ See :meth:`base_extend` for details.
380
+
381
+ EXAMPLES::
382
+
383
+ sage: A = AffineSpace(3, ZZ)
384
+ sage: A
385
+ Affine Space of dimension 3 over Integer Ring
386
+ sage: A/QQ
387
+ Affine Space of dimension 3 over Rational Field
388
+ sage: A/GF(7)
389
+ Affine Space of dimension 3 over Finite Field of size 7
390
+ """
391
+ return self.base_extend(Y)
392
+
393
+ def base_ring(self):
394
+ """
395
+ Return the base ring of the scheme ``self``.
396
+
397
+ OUTPUT: a commutative ring
398
+
399
+ EXAMPLES::
400
+
401
+ sage: A = AffineSpace(4, QQ)
402
+ sage: A.base_ring()
403
+ Rational Field
404
+
405
+ sage: X = Spec(QQ)
406
+ sage: X.base_ring()
407
+ Integer Ring
408
+ """
409
+ try:
410
+ return self._base_ring
411
+ except AttributeError:
412
+ if hasattr(self, '_base_morphism'):
413
+ self._base_ring = self._base_morphism.codomain().coordinate_ring()
414
+ elif hasattr(self, '_base_scheme'):
415
+ self._base_ring = self._base_scheme.coordinate_ring()
416
+ else:
417
+ self._base_ring = ZZ
418
+ return self._base_ring
419
+
420
+ def base_scheme(self):
421
+ """
422
+ Return the base scheme.
423
+
424
+ OUTPUT: a scheme
425
+
426
+ EXAMPLES::
427
+
428
+ sage: A = AffineSpace(4, QQ)
429
+ sage: A.base_scheme()
430
+ Spectrum of Rational Field
431
+
432
+ sage: X = Spec(QQ)
433
+ sage: X.base_scheme()
434
+ Spectrum of Integer Ring
435
+ """
436
+ try:
437
+ return self._base_scheme
438
+ except AttributeError:
439
+ if hasattr(self, '_base_morphism'):
440
+ self._base_scheme = self._base_morphism.codomain()
441
+ elif hasattr(self, '_base_ring'):
442
+ self._base_scheme = AffineScheme(self._base_ring)
443
+ else:
444
+ from sage.schemes.generic.spec import SpecZ
445
+ self._base_scheme = SpecZ
446
+ return self._base_scheme
447
+
448
+ def base_morphism(self):
449
+ """
450
+ Return the structure morphism from ``self`` to its base
451
+ scheme.
452
+
453
+ OUTPUT: a scheme morphism
454
+
455
+ EXAMPLES::
456
+
457
+ sage: A = AffineSpace(4, QQ)
458
+ sage: A.base_morphism()
459
+ Scheme morphism:
460
+ From: Affine Space of dimension 4 over Rational Field
461
+ To: Spectrum of Rational Field
462
+ Defn: Structure map
463
+
464
+ sage: X = Spec(QQ)
465
+ sage: X.base_morphism()
466
+ Scheme morphism:
467
+ From: Spectrum of Rational Field
468
+ To: Spectrum of Integer Ring
469
+ Defn: Structure map
470
+ """
471
+ try:
472
+ return self._base_morphism
473
+ except AttributeError:
474
+ from sage.categories.schemes import Schemes
475
+ from sage.schemes.generic.spec import SpecZ
476
+ SCH = Schemes()
477
+ if hasattr(self, '_base_scheme'):
478
+ self._base_morphism = self.Hom(self._base_scheme, category=SCH).natural_map()
479
+ elif hasattr(self, '_base_ring'):
480
+ self._base_morphism = self.Hom(AffineScheme(self._base_ring), category=SCH).natural_map()
481
+ else:
482
+ self._base_morphism = self.Hom(SpecZ, category=SCH).natural_map()
483
+ return self._base_morphism
484
+
485
+ structure_morphism = base_morphism
486
+
487
+ def coordinate_ring(self):
488
+ """
489
+ Return the coordinate ring.
490
+
491
+ OUTPUT:
492
+
493
+ The global coordinate ring of this scheme, if
494
+ defined. Otherwise this raises a :exc:`ValueError`.
495
+
496
+ EXAMPLES::
497
+
498
+ sage: R.<x, y> = QQ[]
499
+ sage: I = (x^2 - y^2)*R
500
+ sage: X = Spec(R.quotient(I))
501
+ sage: X.coordinate_ring()
502
+ Quotient of Multivariate Polynomial Ring in x, y over Rational Field
503
+ by the ideal (x^2 - y^2)
504
+ """
505
+ try:
506
+ return self._coordinate_ring
507
+ except AttributeError:
508
+ raise ValueError("This scheme has no associated coordinated ring (defined).")
509
+
510
+ def dimension_absolute(self):
511
+ """
512
+ Return the absolute dimension of this scheme.
513
+
514
+ OUTPUT: integer
515
+
516
+ EXAMPLES::
517
+
518
+ sage: R.<x, y> = QQ[]
519
+ sage: I = (x^2 - y^2)*R
520
+ sage: X = Spec(R.quotient(I))
521
+ sage: X.dimension_absolute()
522
+ Traceback (most recent call last):
523
+ ...
524
+ NotImplementedError
525
+ sage: X.dimension()
526
+ Traceback (most recent call last):
527
+ ...
528
+ NotImplementedError
529
+ """
530
+ raise NotImplementedError # override in derived class
531
+
532
+ dimension = dimension_absolute
533
+
534
+ def dimension_relative(self):
535
+ """
536
+ Return the relative dimension of this scheme over its base.
537
+
538
+ OUTPUT: integer
539
+
540
+ EXAMPLES::
541
+
542
+ sage: R.<x, y> = QQ[]
543
+ sage: I = (x^2 - y^2)*R
544
+ sage: X = Spec(R.quotient(I))
545
+ sage: X.dimension_relative()
546
+ Traceback (most recent call last):
547
+ ...
548
+ NotImplementedError
549
+ """
550
+ raise NotImplementedError # override in derived class
551
+
552
+ def identity_morphism(self):
553
+ """
554
+ Return the identity morphism.
555
+
556
+ OUTPUT: the identity morphism of the scheme ``self``
557
+
558
+ EXAMPLES::
559
+
560
+ sage: X = Spec(QQ)
561
+ sage: X.identity_morphism()
562
+ Scheme endomorphism of Spectrum of Rational Field
563
+ Defn: Identity map
564
+ """
565
+ from sage.schemes.generic.morphism import SchemeMorphism_id
566
+ return SchemeMorphism_id(self)
567
+
568
+ def hom(self, x, Y=None, check=True):
569
+ """
570
+ Return the scheme morphism from ``self`` to ``Y`` defined by ``x``.
571
+
572
+ INPUT:
573
+
574
+ - ``x`` -- anything that determines a scheme morphism; if
575
+ ``x`` is a scheme, try to determine a natural map to ``x``
576
+
577
+ - ``Y`` -- the codomain scheme (optional); if ``Y`` is not
578
+ given, try to determine ``Y`` from context
579
+
580
+ - ``check`` -- boolean (default: ``True``); whether
581
+ to check the defining data for consistency
582
+
583
+ OUTPUT: the scheme morphism from ``self`` to ``Y`` defined by ``x``
584
+
585
+ EXAMPLES::
586
+
587
+ sage: P = ProjectiveSpace(ZZ, 3)
588
+ sage: P.hom(Spec(ZZ))
589
+ Scheme morphism:
590
+ From: Projective Space of dimension 3 over Integer Ring
591
+ To: Spectrum of Integer Ring
592
+ Defn: Structure map
593
+ """
594
+ if Y is None:
595
+ if isinstance(x, Scheme):
596
+ return self.Hom(x).natural_map()
597
+ else:
598
+ raise TypeError("unable to determine codomain")
599
+ return self.Hom(Y)(x, check=check)
600
+
601
+ def _Hom_(self, Y, category=None, check=True):
602
+ """
603
+ Return the set of scheme morphisms from ``self`` to ``Y``.
604
+
605
+ INPUT:
606
+
607
+ - ``Y`` -- a scheme; the codomain of the Hom-set
608
+
609
+ - ``category`` -- a category (optional); the category of the
610
+ Hom-set
611
+
612
+ - ``check`` -- boolean (default: ``True``); whether
613
+ to check the defining data for consistency
614
+
615
+ OUTPUT: the set of morphisms from ``self`` to ``Y``
616
+
617
+ EXAMPLES::
618
+
619
+ sage: P = ProjectiveSpace(ZZ, 3)
620
+ sage: S = Spec(ZZ)
621
+ sage: S._Hom_(P)
622
+ Set of morphisms
623
+ From: Spectrum of Integer Ring
624
+ To: Projective Space of dimension 3 over Integer Ring
625
+
626
+ TESTS::
627
+
628
+ sage: S._Hom_(P).__class__
629
+ <class 'sage.schemes.generic.homset.SchemeHomset_generic_with_category'>
630
+
631
+ sage: Hom(Spec(ZZ), Spec(ZZ)).__class__
632
+ <class 'sage.schemes.generic.homset.SchemeHomset_generic_with_category_with_equality_by_id'>
633
+ """
634
+ from sage.schemes.generic.homset import SchemeHomset
635
+ return SchemeHomset(self, Y, category=category, check=check)
636
+
637
+ point_set = point_homset
638
+
639
+ def count_points(self, n):
640
+ r"""
641
+ Count points over finite fields.
642
+
643
+ INPUT:
644
+
645
+ - ``n`` -- integer
646
+
647
+ OUTPUT:
648
+
649
+ An integer. The number of points over `\GF{q}, \ldots,
650
+ \GF{q^n}` on a scheme over a finite field `\GF{q}`.
651
+
652
+ EXAMPLES::
653
+
654
+ sage: # needs sage.schemes
655
+ sage: P.<x> = PolynomialRing(GF(3))
656
+ sage: C = HyperellipticCurve(x^3 + x^2 + 1)
657
+ sage: C.count_points(4)
658
+ [6, 12, 18, 96]
659
+ sage: C.base_extend(GF(9,'a')).count_points(2) # needs sage.rings.finite_rings
660
+ [12, 96]
661
+
662
+ ::
663
+
664
+ sage: P.<x,y,z> = ProjectiveSpace(GF(4, 't'), 2) # needs sage.rings.finite_rings
665
+ sage: X = P.subscheme([y^2*z - x^3 - z^3]) # needs sage.rings.finite_rings
666
+ sage: X.count_points(2) # needs sage.libs.singular sage.rings.finite_rings
667
+ [5, 17]
668
+ """
669
+ F = self.base_ring()
670
+ if not F.is_finite():
671
+ raise TypeError("Point counting only defined for schemes over finite fields")
672
+ a = [len(self.rational_points())]
673
+ for i in range(2, n+1):
674
+ F1, psi = F.extension(i, map=True)
675
+ S1 = self.change_ring(psi)
676
+ a.append(len(S1.rational_points()))
677
+ return a
678
+
679
+ def zeta_function(self):
680
+ r"""
681
+ Compute the zeta function of a generic scheme.
682
+
683
+ Derived classes should override this method.
684
+
685
+ OUTPUT: rational function in one variable
686
+
687
+ EXAMPLES::
688
+
689
+ sage: P.<x,y,z> = ProjectiveSpace(GF(4, 't'), 2) # needs sage.rings.finite_rings
690
+ sage: X = P.subscheme([y^2*z - x^3 - z^3]) # needs sage.rings.finite_rings
691
+ sage: X.zeta_function() # needs sage.rings.finite_rings
692
+ Traceback (most recent call last):
693
+ ...
694
+ NotImplementedError
695
+ """
696
+ raise NotImplementedError
697
+
698
+ def zeta_series(self, n, t):
699
+ """
700
+ Return the zeta series.
701
+
702
+ Compute a power series approximation to the zeta function of a
703
+ scheme over a finite field.
704
+
705
+ INPUT:
706
+
707
+ - ``n`` -- the number of terms of the power series to compute
708
+
709
+ - ``t`` -- the variable which the series should be returned
710
+
711
+ OUTPUT: a power series approximating the zeta function of ``self``
712
+
713
+ EXAMPLES::
714
+
715
+ sage: P.<x> = PolynomialRing(GF(3))
716
+ sage: C = HyperellipticCurve(x^3 + x^2 + 1) # needs sage.schemes
717
+ sage: R.<t> = PowerSeriesRing(Integers())
718
+ sage: C.zeta_series(4, t) # needs sage.schemes
719
+ 1 + 6*t + 24*t^2 + 78*t^3 + 240*t^4 + O(t^5)
720
+ sage: (1+2*t+3*t^2)/(1-t)/(1-3*t) + O(t^5)
721
+ 1 + 6*t + 24*t^2 + 78*t^3 + 240*t^4 + O(t^5)
722
+
723
+ If the scheme has a method ``zeta_function``, this is used to
724
+ provide the required approximation.
725
+ Otherwise this function depends on ``count_points``, which is only
726
+ defined for prime order fields for general schemes.
727
+ Nonetheless, since :issue:`15108` and :issue:`15148`, it supports
728
+ hyperelliptic curves over non-prime fields::
729
+
730
+ sage: C.base_extend(GF(9, 'a')).zeta_series(4, t) # needs sage.rings.finite_rings sage.schemes
731
+ 1 + 12*t + 120*t^2 + 1092*t^3 + 9840*t^4 + O(t^5)
732
+
733
+ ::
734
+
735
+ sage: P.<x,y,z> = ProjectiveSpace(GF(4, 't'), 2) # needs sage.rings.finite_rings
736
+ sage: X = P.subscheme([y^2*z - x^3 - z^3]) # needs sage.rings.finite_rings
737
+
738
+ sage: R.<t> = PowerSeriesRing(Integers())
739
+ sage: X.zeta_series(2, t) # needs sage.libs.singular sage.rings.finite_rings
740
+ 1 + 5*t + 21*t^2 + O(t^3)
741
+
742
+ TESTS::
743
+
744
+ sage: P.<x> = PolynomialRing(ZZ)
745
+ sage: C = HyperellipticCurve(x^3 + x + 1) # needs sage.schemes
746
+ sage: R.<t> = PowerSeriesRing(Integers())
747
+ sage: C.zeta_series(4, t) # needs sage.schemes
748
+ Traceback (most recent call last):
749
+ ...
750
+ TypeError: zeta functions only defined for schemes
751
+ over finite fields
752
+ """
753
+ F = self.base_ring()
754
+ if not F.is_finite():
755
+ raise TypeError('zeta functions only defined for schemes over finite fields')
756
+ R = t.parent()
757
+ u = t.O(n + 1)
758
+ try:
759
+ return self.zeta_function()(u)
760
+ except (AttributeError, NotImplementedError):
761
+ pass
762
+ try:
763
+ a = self.count_points(n)
764
+ except AttributeError:
765
+ raise NotImplementedError('count_points() required but not implemented')
766
+ temp = R.sum(a[i - 1] * u**i / i for i in range(1, n + 1))
767
+ return temp.exp()
768
+
769
+
770
+ def is_AffineScheme(x):
771
+ """
772
+ Return ``True`` if `x` is an affine scheme.
773
+
774
+ EXAMPLES::
775
+
776
+ sage: from sage.schemes.generic.scheme import is_AffineScheme
777
+ sage: is_AffineScheme(5)
778
+ doctest:warning...
779
+ DeprecationWarning: The function is_AffineScheme is deprecated; use 'isinstance(..., AffineScheme)' instead.
780
+ See https://github.com/sagemath/sage/issues/38022 for details.
781
+ False
782
+ sage: E = Spec(QQ)
783
+ sage: is_AffineScheme(E)
784
+ True
785
+ """
786
+ from sage.misc.superseded import deprecation
787
+ deprecation(38022, "The function is_AffineScheme is deprecated; use 'isinstance(..., AffineScheme)' instead.")
788
+ return isinstance(x, AffineScheme)
789
+
790
+
791
+ class AffineScheme(UniqueRepresentation, Scheme):
792
+ """
793
+ Class for general affine schemes.
794
+
795
+ TESTS::
796
+
797
+ sage: from sage.schemes.generic.scheme import AffineScheme
798
+ sage: A = QQ['t']
799
+ sage: X_abs = AffineScheme(A); X_abs
800
+ Spectrum of Univariate Polynomial Ring in t over Rational Field
801
+ sage: X_rel = AffineScheme(A, QQ); X_rel
802
+ Spectrum of Univariate Polynomial Ring in t over Rational Field
803
+
804
+ sage: X_abs == X_rel
805
+ False
806
+ sage: X_abs.base_ring()
807
+ Integer Ring
808
+ sage: X_rel.base_ring()
809
+ Rational Field
810
+
811
+ .. SEEALSO::
812
+
813
+ For affine spaces over a base ring and subschemes thereof, see
814
+ :class:`sage.schemes.generic.algebraic_scheme.AffineSpace`.
815
+ """
816
+ def __init__(self, R, S=None, category=None):
817
+ """
818
+ Construct the affine scheme with coordinate ring `R`.
819
+
820
+ INPUT:
821
+
822
+ - ``R`` -- commutative ring
823
+
824
+ - ``S`` -- (optional) commutative ring admitting a natural map
825
+ to ``R``
826
+
827
+ OUTPUT:
828
+
829
+ The spectrum of `R`, i.e. the unique affine scheme with
830
+ coordinate ring `R` as a scheme over the base ring `S`.
831
+
832
+ EXAMPLES::
833
+
834
+ sage: from sage.schemes.generic.scheme import AffineScheme
835
+ sage: A.<x, y> = PolynomialRing(QQ)
836
+ sage: X = AffineScheme(A, QQ)
837
+ sage: X
838
+ Spectrum of Multivariate Polynomial Ring in x, y over Rational Field
839
+ sage: X.category()
840
+ Category of schemes over Rational Field
841
+
842
+ The standard way to construct an affine scheme is to use the
843
+ :func:`~sage.schemes.generic.spec.Spec` functor::
844
+
845
+ sage: S = Spec(ZZ)
846
+ sage: S
847
+ Spectrum of Integer Ring
848
+ sage: S.category()
849
+ Category of schemes
850
+ sage: type(S)
851
+ <class 'sage.schemes.generic.scheme.AffineScheme_with_category'>
852
+ """
853
+ if R not in CommutativeRings():
854
+ raise TypeError("R (={}) must be a commutative ring".format(R))
855
+ self.__R = R
856
+ if S is not None:
857
+ if S not in CommutativeRings():
858
+ raise TypeError("S (={}) must be a commutative ring".format(S))
859
+ if not R.has_coerce_map_from(S):
860
+ raise ValueError("There must be a natural map S --> R, but S = {} and R = {}".format(S, R))
861
+ Scheme.__init__(self, S, category=category)
862
+
863
+ def __setstate__(self, state):
864
+ """
865
+ Needed to unpickle old Spec objects.
866
+
867
+ The name-mangled attribute ``__R`` used to be in a class
868
+ called ``Spec``; we have to translate this mangled name.
869
+
870
+ TESTS::
871
+
872
+ sage: S = Spec(QQ)
873
+ sage: loads(dumps(S))
874
+ Spectrum of Rational Field
875
+ """
876
+ if '_Spec__R' in state:
877
+ state['_AffineScheme__R'] = state.pop('_Spec__R')
878
+ super().__setstate__(state)
879
+
880
+ def _repr_(self):
881
+ """
882
+ Return a string representation of ``self``.
883
+
884
+ OUTPUT: string
885
+
886
+ EXAMPLES::
887
+
888
+ sage: Spec(PolynomialRing(QQ, 3, 'x'))
889
+ Spectrum of Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
890
+
891
+ TESTS::
892
+
893
+ sage: Spec(PolynomialRing(QQ, 3, 'x'))._repr_()
894
+ 'Spectrum of Multivariate Polynomial Ring in x0, x1, x2 over Rational Field'
895
+ """
896
+ return "Spectrum of {}".format(self.__R)
897
+
898
+ def _latex_(self):
899
+ r"""
900
+ Return a LaTeX representation of ``self``.
901
+
902
+ OUTPUT: string
903
+
904
+ EXAMPLES::
905
+
906
+ sage: S = Spec(PolynomialRing(ZZ, 2, 'x'))
907
+ sage: S
908
+ Spectrum of Multivariate Polynomial Ring in x0, x1 over Integer Ring
909
+ sage: S._latex_()
910
+ '\\mathrm{Spec}(\\Bold{Z}[x_{0}, x_{1}])'
911
+ """
912
+ return "\\mathrm{{Spec}}({})".format(self.__R._latex_())
913
+
914
+ def __call__(self, *args):
915
+ """
916
+ Construct a scheme-valued or topological point of ``self``.
917
+
918
+ INPUT/OUTPUT: the argument ``x`` must be one of the following:
919
+
920
+ - a prime ideal of the coordinate ring; the output will
921
+ be the corresponding point of `X`
922
+
923
+ - a ring or a scheme `S`; the output will be the set `X(S)` of
924
+ `S`-valued points on `X`
925
+
926
+ EXAMPLES::
927
+
928
+ sage: S = Spec(ZZ)
929
+ sage: P = S(ZZ.ideal(3)); P
930
+ Point on Spectrum of Integer Ring defined by the Principal ideal (3) of Integer Ring
931
+ sage: type(P)
932
+ <class 'sage.schemes.generic.scheme.AffineScheme_with_category.element_class'>
933
+ sage: S(ZZ.ideal(next_prime(1000000))) # needs sage.libs.pari
934
+ Point on Spectrum of Integer Ring
935
+ defined by the Principal ideal (1000003) of Integer Ring
936
+
937
+ sage: R.<x, y, z> = QQ[]
938
+ sage: S = Spec(R)
939
+ sage: P = S(R.ideal(x, y, z)); P
940
+ Point on Spectrum of Multivariate Polynomial Ring
941
+ in x, y, z over Rational Field defined by the Ideal (x, y, z)
942
+ of Multivariate Polynomial Ring in x, y, z over Rational Field
943
+
944
+ This indicates the fix of :issue:`12734`::
945
+
946
+ sage: S = Spec(ZZ)
947
+ sage: S(ZZ)
948
+ Set of rational points of Spectrum of Integer Ring
949
+
950
+ Note the difference between the previous example and the
951
+ following one::
952
+
953
+ sage: S(S)
954
+ Set of morphisms
955
+ From: Spectrum of Integer Ring
956
+ To: Spectrum of Integer Ring
957
+
958
+ For affine or projective varieties, passing the correct number
959
+ of elements of the base ring constructs the rational point
960
+ with these elements as coordinates::
961
+
962
+ sage: S = AffineSpace(ZZ, 1)
963
+ sage: S(0)
964
+ (0)
965
+
966
+ To prevent confusion with this usage, topological points must
967
+ be constructed by explicitly specifying a prime ideal, not
968
+ just generators::
969
+
970
+ sage: R = S.coordinate_ring()
971
+ sage: S(R.ideal(0))
972
+ Point on Affine Space of dimension 1 over Integer Ring
973
+ defined by the Ideal (0) of Multivariate Polynomial Ring in x over Integer Ring
974
+
975
+ This explains why the following example raises an error rather
976
+ than constructing the topological point defined by the prime
977
+ ideal `(0)` as one might expect::
978
+
979
+ sage: S = Spec(ZZ)
980
+ sage: S(0)
981
+ Traceback (most recent call last):
982
+ ...
983
+ TypeError: cannot call Spectrum of Integer Ring with arguments (0,)
984
+ """
985
+ if len(args) == 1:
986
+ x = args[0]
987
+ if ((isinstance(x, self.element_class) and (x.parent() is self or x.parent() == self))
988
+ or (isinstance(x, Ideal_generic) and x.ring() is self.coordinate_ring())):
989
+ # Construct a topological point from x.
990
+ return self._element_constructor_(x)
991
+ try:
992
+ # Construct a scheme homset or a scheme-valued point from
993
+ # args using the generic Scheme.__call__() method.
994
+ return super().__call__(*args)
995
+ except NotImplementedError:
996
+ # This arises from self._morphism() not being implemented.
997
+ # We must convert it into a TypeError to keep the coercion
998
+ # system working.
999
+ raise TypeError('cannot call %s with arguments %s' % (self, args))
1000
+
1001
+ Element = SchemeTopologicalPoint_prime_ideal
1002
+
1003
+ def _element_constructor_(self, x):
1004
+ """
1005
+ Construct a topological point from `x`.
1006
+
1007
+ TESTS::
1008
+
1009
+ sage: S = Spec(ZZ)
1010
+ sage: S(ZZ.ideal(0))
1011
+ Point on Spectrum of Integer Ring defined by the Principal ideal (0) of Integer Ring
1012
+ """
1013
+ if isinstance(x, self.element_class):
1014
+ if x.parent() is self:
1015
+ return x
1016
+ elif x.parent() == self:
1017
+ return self.element_class(self, x.prime_ideal())
1018
+ elif isinstance(x, Ideal_generic) and x.ring() is self.coordinate_ring():
1019
+ return self.element_class(self, x)
1020
+ raise TypeError('cannot convert %s to a topological point of %s' % (x, self))
1021
+
1022
+ def _an_element_(self):
1023
+ r"""
1024
+ Return an element of the spectrum of the ring.
1025
+
1026
+ OUTPUT: a point of the affine scheme ``self``
1027
+
1028
+ EXAMPLES::
1029
+
1030
+ sage: Spec(QQ).an_element()
1031
+ Point on Spectrum of Rational Field defined by the Principal ideal (0) of Rational Field
1032
+ sage: Spec(ZZ).an_element() # random output
1033
+ Point on Spectrum of Integer Ring defined by the Principal ideal (811) of Integer Ring
1034
+ """
1035
+ if self.coordinate_ring() is ZZ:
1036
+ from sage.arith.misc import random_prime
1037
+ return self(ZZ.ideal(random_prime(1000)))
1038
+ return self(self.coordinate_ring().zero_ideal())
1039
+
1040
+ def coordinate_ring(self):
1041
+ """
1042
+ Return the underlying ring of this scheme.
1043
+
1044
+ OUTPUT: a commutative ring
1045
+
1046
+ EXAMPLES::
1047
+
1048
+ sage: Spec(QQ).coordinate_ring()
1049
+ Rational Field
1050
+ sage: Spec(PolynomialRing(QQ, 3, 'x')).coordinate_ring()
1051
+ Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
1052
+ """
1053
+ return self.__R
1054
+
1055
+ def is_noetherian(self):
1056
+ """
1057
+ Return ``True`` if ``self`` is Noetherian, ``False`` otherwise.
1058
+
1059
+ EXAMPLES::
1060
+
1061
+ sage: Spec(ZZ).is_noetherian()
1062
+ True
1063
+ """
1064
+ return self.__R.is_noetherian()
1065
+
1066
+ def dimension_absolute(self):
1067
+ """
1068
+ Return the absolute dimension of this scheme.
1069
+
1070
+ OUTPUT: integer
1071
+
1072
+ EXAMPLES::
1073
+
1074
+ sage: S = Spec(ZZ)
1075
+ sage: S.dimension_absolute()
1076
+ 1
1077
+ sage: S.dimension()
1078
+ 1
1079
+ """
1080
+ return self.__R.krull_dimension()
1081
+
1082
+ dimension = dimension_absolute
1083
+
1084
+ def dimension_relative(self):
1085
+ """
1086
+ Return the relative dimension of this scheme over its base.
1087
+
1088
+ OUTPUT: integer
1089
+
1090
+ EXAMPLES::
1091
+
1092
+ sage: S = Spec(ZZ)
1093
+ sage: S.dimension_relative()
1094
+ 0
1095
+ """
1096
+ return self.__R.krull_dimension() - self.base_ring().krull_dimension()
1097
+
1098
+ def base_extend(self, R):
1099
+ """
1100
+ Extend the base ring/scheme.
1101
+
1102
+ INPUT:
1103
+
1104
+ - ``R`` -- an affine scheme or a commutative ring
1105
+
1106
+ EXAMPLES::
1107
+
1108
+ sage: Spec_ZZ = Spec(ZZ); Spec_ZZ
1109
+ Spectrum of Integer Ring
1110
+ sage: Spec_ZZ.base_extend(QQ)
1111
+ Spectrum of Rational Field
1112
+
1113
+ sage: Spec(ZZ['x']).base_extend(Spec(QQ))
1114
+ Spectrum of Univariate Polynomial Ring in x over Rational Field
1115
+ """
1116
+ if R in CommutativeRings():
1117
+ return AffineScheme(self.coordinate_ring().base_extend(R), self.base_ring())
1118
+ if not self.base_scheme() == R.base_scheme():
1119
+ raise ValueError('the new base scheme must be a scheme over the old base scheme')
1120
+ return AffineScheme(self.coordinate_ring().base_extend(R.coordinate_ring()),
1121
+ self.base_ring())
1122
+
1123
+ def _point_homset(self, *args, **kwds):
1124
+ """
1125
+ Construct a point Hom-set.
1126
+
1127
+ For internal use only. See :mod:`morphism` for more details.
1128
+
1129
+ EXAMPLES::
1130
+
1131
+ sage: Spec(QQ)._point_homset(Spec(QQ), Spec(ZZ))
1132
+ Set of rational points of Spectrum of Integer Ring
1133
+ """
1134
+ from sage.schemes.affine.affine_homset import SchemeHomset_points_spec
1135
+ return SchemeHomset_points_spec(*args, **kwds)
1136
+
1137
+ def hom(self, x, Y=None):
1138
+ r"""
1139
+ Return the scheme morphism from ``self`` to ``Y`` defined by ``x``.
1140
+
1141
+ INPUT:
1142
+
1143
+ - ``x`` -- anything that determines a scheme morphism; if
1144
+ ``x`` is a scheme, try to determine a natural map to ``x``
1145
+
1146
+ - ``Y`` -- the codomain scheme (optional); if ``Y`` is not
1147
+ given, try to determine ``Y`` from context
1148
+
1149
+ - ``check`` -- boolean (default: ``True``); whether
1150
+ to check the defining data for consistency
1151
+
1152
+ OUTPUT: the scheme morphism from ``self`` to ``Y`` defined by ``x``
1153
+
1154
+ EXAMPLES:
1155
+
1156
+ We construct the inclusion from `\mathrm{Spec}(\QQ)` into
1157
+ `\mathrm{Spec}(\ZZ)` induced by the inclusion from `\ZZ` into
1158
+ `\QQ`::
1159
+
1160
+ sage: X = Spec(QQ)
1161
+ sage: X.hom(ZZ.hom(QQ))
1162
+ Affine Scheme morphism:
1163
+ From: Spectrum of Rational Field
1164
+ To: Spectrum of Integer Ring
1165
+ Defn: Natural morphism:
1166
+ From: Integer Ring
1167
+ To: Rational Field
1168
+
1169
+ TESTS:
1170
+
1171
+ We can construct a morphism to an affine curve (:issue:`7956`)::
1172
+
1173
+ sage: S.<p,q> = QQ[]
1174
+ sage: A1.<r> = AffineSpace(QQ, 1)
1175
+ sage: A1_emb = Curve(p - 2) # needs sage.schemes
1176
+ sage: A1.hom([2, r], A1_emb) # needs sage.schemes
1177
+ Scheme morphism:
1178
+ From: Affine Space of dimension 1 over Rational Field
1179
+ To: Affine Plane Curve over Rational Field defined by p - 2
1180
+ Defn: Defined on coordinates by sending (r) to (2, r)
1181
+ """
1182
+ from sage.categories.map import Map
1183
+ from sage.categories.rings import Rings
1184
+
1185
+ if isinstance(x, Scheme):
1186
+ return self.Hom(x).natural_map()
1187
+ if Y is None and isinstance(x, Map) and x.category_for().is_subcategory(Rings()):
1188
+ # x is a morphism of Rings
1189
+ Y = AffineScheme(x.domain())
1190
+ return Scheme.hom(self, x, Y)