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,1730 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Field `\QQ` of Rational Numbers
4
+
5
+ The class :class:`RationalField` represents the field `\QQ` of (arbitrary
6
+ precision) rational numbers. Each rational number is an instance of the class
7
+ :class:`Rational`.
8
+
9
+ Interactively, an instance of :class:`RationalField` is available as ``QQ``::
10
+
11
+ sage: QQ
12
+ Rational Field
13
+
14
+ Values of various types can be converted to rational numbers by using the
15
+ :meth:`__call__` method of :class:`RationalField` (that is, by treating ``QQ`` as a
16
+ function).
17
+
18
+ ::
19
+
20
+ sage: RealField(9).pi() # needs sage.rings.real_mpfr
21
+ 3.1
22
+ sage: QQ(RealField(9).pi()) # needs sage.rings.real_interval_field sage.rings.real_mpfr
23
+ 22/7
24
+ sage: QQ(RealField().pi()) # needs sage.rings.real_interval_field sage.rings.real_mpfr
25
+ 245850922/78256779
26
+ sage: QQ(35)
27
+ 35
28
+ sage: QQ('12/347')
29
+ 12/347
30
+ sage: QQ(exp(pi*I)) # needs sage.symbolic
31
+ -1
32
+ sage: x = polygen(ZZ)
33
+ sage: QQ((3*x)/(4*x))
34
+ 3/4
35
+
36
+ TESTS::
37
+
38
+ sage: Q = RationalField()
39
+ sage: Q == loads(dumps(Q))
40
+ True
41
+ sage: RationalField() is RationalField()
42
+ True
43
+ sage: Q in Fields().Infinite()
44
+ True
45
+
46
+ AUTHORS:
47
+
48
+ - Niles Johnson (2010-08): :issue:`3893`: ``random_element()`` should pass on
49
+ ``*args`` and ``**kwds``.
50
+
51
+ - Travis Scrimshaw (2012-10-18): Added additional docstrings for full coverage.
52
+ Removed duplicates of ``discriminant()`` and ``signature()``.
53
+
54
+ - Anna Haensch (2018-03): Added function ``quadratic_defect()``
55
+ """
56
+
57
+ from sage.rings.integer import Integer
58
+ from sage.rings.rational import Rational
59
+
60
+ ZZ = None
61
+
62
+ import sage.rings.number_field.number_field_base as number_field_base
63
+ from sage.misc.fast_methods import Singleton
64
+ from sage.misc.superseded import deprecated_function_alias
65
+ from sage.structure.parent import Parent
66
+ from sage.structure.sequence import Sequence
67
+
68
+
69
+ class RationalField(Singleton, number_field_base.NumberField):
70
+ r"""
71
+ The class ``RationalField`` represents the field `\QQ` of rational numbers.
72
+
73
+ EXAMPLES::
74
+
75
+ sage: a = 901824309821093821093812093810928309183091832091
76
+ sage: b = QQ(a); b
77
+ 901824309821093821093812093810928309183091832091
78
+ sage: QQ(b)
79
+ 901824309821093821093812093810928309183091832091
80
+ sage: QQ(int(93820984323))
81
+ 93820984323
82
+ sage: QQ(ZZ(901824309821093821093812093810928309183091832091))
83
+ 901824309821093821093812093810928309183091832091
84
+ sage: QQ('-930482/9320842317')
85
+ -930482/9320842317
86
+ sage: QQ((-930482, 9320842317))
87
+ -930482/9320842317
88
+ sage: QQ([9320842317])
89
+ 9320842317
90
+ sage: QQ(pari(39029384023840928309482842098430284398243982394)) # needs sage.libs.pari
91
+ 39029384023840928309482842098430284398243982394
92
+ sage: QQ('sage')
93
+ Traceback (most recent call last):
94
+ ...
95
+ TypeError: unable to convert 'sage' to a rational
96
+
97
+ Conversion from the reals to the rationals is done by default using
98
+ continued fractions.
99
+
100
+ ::
101
+
102
+ sage: QQ(RR(3929329/32))
103
+ 3929329/32
104
+ sage: QQ(-RR(3929329/32))
105
+ -3929329/32
106
+ sage: QQ(RR(1/7)) - 1/7 # needs sage.rings.real_mpfr
107
+ 0
108
+
109
+ If you specify the optional second argument ``base``, then the string
110
+ representation of the float is used.
111
+
112
+ ::
113
+
114
+ sage: # needs sage.rings.real_mpfr
115
+ sage: QQ(23.2, 2)
116
+ 6530219459687219/281474976710656
117
+ sage: 6530219459687219.0/281474976710656
118
+ 23.20000000000000
119
+ sage: a = 23.2; a
120
+ 23.2000000000000
121
+ sage: QQ(a, 10)
122
+ 116/5
123
+
124
+ Here's a nice example involving elliptic curves::
125
+
126
+ sage: # needs database_cremona_mini_ellcurve sage.rings.real_mpfr sage.schemes
127
+ sage: E = EllipticCurve('11a')
128
+ sage: L = E.lseries().at1(300)[0]; L
129
+ 0.2538418608559106843377589233...
130
+ sage: O = E.period_lattice().omega(); O
131
+ 1.26920930427955
132
+ sage: t = L/O; t
133
+ 0.200000000000000
134
+ sage: QQ(RealField(45)(t))
135
+ 1/5
136
+ """
137
+ def __new__(cls):
138
+ """
139
+ This method actually is not needed for using :class:`RationalField`.
140
+ But it is used to unpickle some very old pickles.
141
+
142
+ TESTS::
143
+
144
+ sage: RationalField() in Fields() # indirect doctest
145
+ True
146
+ """
147
+ try:
148
+ return QQ
149
+ except BaseException:
150
+ from sage.rings.number_field.number_field_base import NumberField
151
+ return NumberField.__new__(cls)
152
+
153
+ def __init__(self):
154
+ r"""
155
+ We create the rational numbers `\QQ`, and call a few functions::
156
+
157
+ sage: Q = RationalField(); Q
158
+ Rational Field
159
+ sage: Q.characteristic()
160
+ 0
161
+ sage: Q.is_field()
162
+ True
163
+ sage: Q.category()
164
+ Join of Category of number fields
165
+ and Category of quotient fields
166
+ and Category of metric spaces
167
+ sage: Q.zeta()
168
+ -1
169
+
170
+ We next illustrate arithmetic in `\QQ`.
171
+
172
+ ::
173
+
174
+ sage: Q('49/7')
175
+ 7
176
+ sage: type(Q('49/7'))
177
+ <class 'sage.rings.rational.Rational'>
178
+ sage: a = Q('19/374'); a
179
+ 19/374
180
+ sage: b = Q('17/371'); b
181
+ 17/371
182
+ sage: a + b
183
+ 13407/138754
184
+ sage: b + a
185
+ 13407/138754
186
+ sage: a * b
187
+ 19/8162
188
+ sage: b * a
189
+ 19/8162
190
+ sage: a - b
191
+ 691/138754
192
+ sage: b - a
193
+ -691/138754
194
+ sage: a / b
195
+ 7049/6358
196
+ sage: b / a
197
+ 6358/7049
198
+ sage: b < a
199
+ True
200
+ sage: a < b
201
+ False
202
+
203
+ Next finally illustrate arithmetic with automatic coercion. The
204
+ types that coerce into the rational field include ``str, int,
205
+ long, Integer``.
206
+
207
+ ::
208
+
209
+ sage: a + Q('17/371')
210
+ 13407/138754
211
+ sage: a * 374
212
+ 19
213
+ sage: 374 * a
214
+ 19
215
+ sage: a/19
216
+ 1/374
217
+ sage: a + 1
218
+ 393/374
219
+
220
+ TESTS::
221
+
222
+ sage: TestSuite(QQ).run()
223
+ sage: QQ.variable_name()
224
+ 'x'
225
+ sage: QQ.variable_names()
226
+ ('x',)
227
+ sage: QQ._element_constructor_((2, 3))
228
+ 2/3
229
+
230
+ sage: QQ.is_finite()
231
+ False
232
+
233
+ sage: QQ.is_field()
234
+ True
235
+ """
236
+ from sage.categories.basic import QuotientFields
237
+ from sage.categories.number_fields import NumberFields
238
+ Parent.__init__(self, base=self,
239
+ category=[QuotientFields().Metric(),
240
+ NumberFields()])
241
+ self._assign_names(('x',), normalize=False) # ?????
242
+ self._populate_coercion_lists_(init_no_parent=True)
243
+
244
+ _element_constructor_ = Rational
245
+
246
+ def _repr_(self):
247
+ """
248
+ Return a string representation of ``self``.
249
+
250
+ EXAMPLES::
251
+
252
+ sage: QQ # indirect doctest
253
+ Rational Field
254
+ """
255
+ return "Rational Field"
256
+
257
+ def _repr_option(self, key):
258
+ """
259
+ Metadata about the :meth:`_repr_` output.
260
+
261
+ See :meth:`sage.structure.parent._repr_option` for details.
262
+
263
+ EXAMPLES::
264
+
265
+ sage: QQ._repr_option('element_is_atomic')
266
+ True
267
+ """
268
+ if key == 'element_is_atomic':
269
+ return True
270
+ return super()._repr_option(key)
271
+
272
+ def _latex_(self):
273
+ r"""
274
+ Return a latex representation of ``self``.
275
+
276
+ EXAMPLES::
277
+
278
+ sage: latex(QQ) # indirect doctest
279
+ \Bold{Q}
280
+ """
281
+ return r"\Bold{Q}"
282
+
283
+ def __reduce__(self):
284
+ r"""
285
+ Used for pickling `\QQ`.
286
+
287
+ EXAMPLES::
288
+
289
+ sage: loads(dumps(QQ)) is QQ
290
+ True
291
+ """
292
+ return RationalField, tuple()
293
+
294
+ def __len__(self):
295
+ """
296
+ Return the number of elements in ``self``.
297
+
298
+ Since this does not have a size, this throws a :exc:`TypeError`.
299
+
300
+ EXAMPLES::
301
+
302
+ sage: len(QQ)
303
+ Traceback (most recent call last):
304
+ ...
305
+ TypeError: len() of unsized object
306
+ """
307
+ raise TypeError('len() of unsized object')
308
+
309
+ def construction(self):
310
+ r"""
311
+ Return a pair ``(functor, parent)`` such that ``functor(parent)``
312
+ returns ``self``.
313
+
314
+ This is the construction of `\QQ` as the fraction field of `\ZZ`.
315
+
316
+ EXAMPLES::
317
+
318
+ sage: QQ.construction()
319
+ (FractionField, Integer Ring)
320
+ """
321
+ from sage.categories.pushout import FractionField
322
+
323
+ from . import integer_ring
324
+ return FractionField(), integer_ring.ZZ
325
+
326
+ def completion(self, p, prec, extras={}):
327
+ r"""
328
+ Return the completion of `\QQ` at `p`.
329
+
330
+ EXAMPLES::
331
+
332
+ sage: QQ.completion(infinity, 53) # needs sage.rings.real_mpfr
333
+ Real Field with 53 bits of precision
334
+ sage: QQ.completion(5, 15, {'print_mode': 'bars'}) # needs sage.rings.padics
335
+ 5-adic Field with capped relative precision 15
336
+ """
337
+ from sage.rings.infinity import Infinity
338
+ if p == Infinity:
339
+ try:
340
+ from sage.rings.real_field import create_RealField
341
+ except ImportError:
342
+ if prec == 53:
343
+ from sage.rings.real_double import RDF
344
+ return RDF
345
+ else:
346
+ raise
347
+ else:
348
+ return create_RealField(prec, **extras)
349
+ else:
350
+ from sage.rings.padics.factory import Qp
351
+ return Qp(p, prec, **extras)
352
+
353
+ def _coerce_map_from_(self, S):
354
+ """
355
+ Return a coerce map from ``S``.
356
+
357
+ EXAMPLES::
358
+
359
+ sage: f = QQ.coerce_map_from(ZZ); f # indirect doctest
360
+ Natural morphism:
361
+ From: Integer Ring
362
+ To: Rational Field
363
+ sage: f(3)
364
+ 3
365
+ sage: f(3^99) - 3^99
366
+ 0
367
+ sage: f = QQ.coerce_map_from(int); f # indirect doctest
368
+ Native morphism:
369
+ From: Set of Python objects of class 'int'
370
+ To: Rational Field
371
+ sage: f(44)
372
+ 44
373
+
374
+ ::
375
+
376
+ sage: L = Localization(ZZ, (3,5))
377
+ sage: 1/45 in L # indirect doctest
378
+ True
379
+ sage: 1/43 in L # indirect doctest
380
+ False
381
+ """
382
+ global ZZ
383
+ from . import rational
384
+ if ZZ is None:
385
+ from . import integer_ring
386
+ ZZ = integer_ring.ZZ
387
+ if S is ZZ:
388
+ return rational.Z_to_Q()
389
+ elif S is int:
390
+ return rational.int_to_Q()
391
+ elif ZZ.has_coerce_map_from(S):
392
+ return rational.Z_to_Q() * ZZ._internal_coerce_map_from(S)
393
+ from sage.rings.localization import Localization
394
+ if isinstance(S, Localization):
395
+ if S.fraction_field() is self:
396
+ from sage.structure.coerce_maps import CallableConvertMap
397
+ return CallableConvertMap(S, self, lambda x: x._value, parent_as_first_arg=False)
398
+
399
+ def _is_valid_homomorphism_(self, codomain, im_gens, base_map=None):
400
+ """
401
+ Check to see if the map into ``codomain`` determined by ``im_gens`` is
402
+ a valid homomorphism.
403
+
404
+ EXAMPLES::
405
+
406
+ sage: QQ._is_valid_homomorphism_(ZZ, [1])
407
+ False
408
+ sage: QQ._is_valid_homomorphism_(QQ, [1])
409
+ True
410
+ sage: QQ._is_valid_homomorphism_(RR, [1])
411
+ True
412
+ sage: QQ._is_valid_homomorphism_(RR, [2])
413
+ False
414
+ """
415
+ try:
416
+ return im_gens[0] == codomain.coerce(self.gen(0))
417
+ except TypeError:
418
+ return False
419
+
420
+ def __iter__(self):
421
+ r"""
422
+ Create an iterator that generates the rational numbers without
423
+ repetition, in order of the height.
424
+
425
+ See also :meth:`range_by_height()`.
426
+
427
+ EXAMPLES:
428
+
429
+ The first 17 rational numbers, ordered by height::
430
+
431
+ sage: import itertools
432
+ sage: lst = [a for a in itertools.islice(Rationals(), 17r)]
433
+ sage: lst
434
+ [0, 1, -1, 1/2, -1/2, 2, -2, 1/3, -1/3, 3, -3, 2/3, -2/3, 3/2, -3/2, 1/4, -1/4]
435
+ sage: [a.height() for a in lst]
436
+ [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4]
437
+ """
438
+ yield self(0)
439
+ yield self(1)
440
+ yield self(-1)
441
+ height = Integer(1)
442
+ while True:
443
+ height = height + 1
444
+ for other in range(1, height):
445
+ if height.gcd(other) == 1:
446
+ yield self(other/height)
447
+ yield self(-other/height)
448
+ yield self(height/other)
449
+ yield self(-height/other)
450
+
451
+ def __truediv__(self, I):
452
+ """
453
+ Form the quotient by an integral ideal.
454
+
455
+ EXAMPLES::
456
+
457
+ sage: QQ / ZZ # needs sage.modules
458
+ Q/Z
459
+ """
460
+ from sage.groups.additive_abelian.qmodnz import QmodnZ
461
+ from sage.rings.ideal import Ideal_generic
462
+ if I is ZZ:
463
+ return QmodnZ(1)
464
+ elif isinstance(I, Ideal_generic) and I.base_ring() is ZZ:
465
+ return QmodnZ(I.gen())
466
+ else:
467
+ return super().__truediv__(I)
468
+
469
+ def range_by_height(self, start, end=None):
470
+ r"""
471
+ Range function for rational numbers, ordered by height.
472
+
473
+ Returns a Python generator for the list of rational numbers with
474
+ heights in ``range(start, end)``. Follows the same
475
+ convention as Python :func:`range`, type ``range?`` for details.
476
+
477
+ See also :meth:`__iter__`.
478
+
479
+ EXAMPLES:
480
+
481
+ All rational numbers with height strictly less than 4::
482
+
483
+ sage: list(QQ.range_by_height(4))
484
+ [0, 1, -1, 1/2, -1/2, 2, -2, 1/3, -1/3, 3, -3, 2/3, -2/3, 3/2, -3/2]
485
+ sage: [a.height() for a in QQ.range_by_height(4)]
486
+ [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3]
487
+
488
+ All rational numbers with height 2::
489
+
490
+ sage: list(QQ.range_by_height(2, 3))
491
+ [1/2, -1/2, 2, -2]
492
+
493
+ Nonsensical integer arguments will return an empty generator::
494
+
495
+ sage: list(QQ.range_by_height(3, 3))
496
+ []
497
+ sage: list(QQ.range_by_height(10, 1))
498
+ []
499
+
500
+ There are no rational numbers with height `\leq 0`::
501
+
502
+ sage: list(QQ.range_by_height(-10, 1))
503
+ []
504
+ """
505
+ if end is None:
506
+ end = start
507
+ start = 1
508
+ start = max(start, 1)
509
+ for height in ZZ.range(start, end):
510
+ if height == 1:
511
+ yield self(0)
512
+ yield self(1)
513
+ yield self(-1)
514
+ for other in ZZ.range(1, height):
515
+ if height.gcd(other) == 1:
516
+ yield self(other/height)
517
+ yield self(-other/height)
518
+ yield self(height/other)
519
+ yield self(-height/other)
520
+
521
+ def primes_of_bounded_norm_iter(self, B):
522
+ r"""
523
+ Iterator yielding all primes less than or equal to `B`.
524
+
525
+ INPUT:
526
+
527
+ - ``B`` -- positive integer; upper bound on the primes generated
528
+
529
+ OUTPUT: an iterator over all integer primes less than or equal to `B`
530
+
531
+ .. NOTE::
532
+
533
+ This function exists for compatibility with the related number
534
+ field method, though it returns prime integers, not ideals.
535
+
536
+ EXAMPLES::
537
+
538
+ sage: it = QQ.primes_of_bounded_norm_iter(10)
539
+ sage: list(it) # needs sage.libs.pari
540
+ [2, 3, 5, 7]
541
+ sage: list(QQ.primes_of_bounded_norm_iter(1))
542
+ []
543
+ """
544
+ try:
545
+ B = ZZ(B.ceil())
546
+ except (TypeError, AttributeError):
547
+ raise TypeError("%s is not valid bound on prime ideals" % B)
548
+
549
+ if B < 2:
550
+ return
551
+
552
+ from sage.arith.misc import primes
553
+ yield from primes(B + 1)
554
+
555
+ def discriminant(self):
556
+ """
557
+ Return the discriminant of the field of rational numbers, which is 1.
558
+
559
+ EXAMPLES::
560
+
561
+ sage: QQ.discriminant()
562
+ 1
563
+ """
564
+ return Integer(1)
565
+
566
+ def absolute_discriminant(self):
567
+ """
568
+ Return the absolute discriminant, which is 1.
569
+
570
+ EXAMPLES::
571
+
572
+ sage: QQ.absolute_discriminant()
573
+ 1
574
+ """
575
+ return self.discriminant()
576
+
577
+ def relative_discriminant(self):
578
+ """
579
+ Return the relative discriminant, which is 1.
580
+
581
+ EXAMPLES::
582
+
583
+ sage: QQ.relative_discriminant()
584
+ 1
585
+ """
586
+ return self.discriminant()
587
+
588
+ def class_number(self):
589
+ """
590
+ Return the class number of the field of rational numbers, which is 1.
591
+
592
+ EXAMPLES::
593
+
594
+ sage: QQ.class_number()
595
+ 1
596
+ """
597
+ return Integer(1)
598
+
599
+ def signature(self):
600
+ r"""
601
+ Return the signature of the rational field, which is `(1,0)`, since
602
+ there are 1 real and no complex embeddings.
603
+
604
+ EXAMPLES::
605
+
606
+ sage: QQ.signature()
607
+ (1, 0)
608
+ """
609
+ return (Integer(1), Integer(0))
610
+
611
+ def embeddings(self, K):
612
+ r"""
613
+ Return the list containing the unique embedding of `\QQ` into `K`,
614
+ if it exists, and an empty list otherwise.
615
+
616
+ EXAMPLES::
617
+
618
+ sage: QQ.embeddings(QQ)
619
+ [Identity endomorphism of Rational Field]
620
+ sage: QQ.embeddings(CyclotomicField(5)) # needs sage.rings.number_field
621
+ [Coercion map:
622
+ From: Rational Field
623
+ To: Cyclotomic Field of order 5 and degree 4]
624
+
625
+ The field `K` must have characteristic `0` for an embedding of `\QQ`
626
+ to exist::
627
+
628
+ sage: QQ.embeddings(GF(3))
629
+ []
630
+ """
631
+ if K.characteristic() == 0:
632
+ v = [self.hom(K)]
633
+ else:
634
+ v = []
635
+ return Sequence(v, check=False, universe=self.Hom(K))
636
+
637
+ def automorphisms(self):
638
+ r"""
639
+ Return all Galois automorphisms of ``self``.
640
+
641
+ OUTPUT: a sequence containing just the identity morphism
642
+
643
+ EXAMPLES::
644
+
645
+ sage: QQ.automorphisms()
646
+ [Ring endomorphism of Rational Field
647
+ Defn: 1 |--> 1]
648
+ """
649
+ return Sequence([self.hom(1, self)], cr=True, immutable=False,
650
+ check=False)
651
+
652
+ def places(self, all_complex=False, prec=None):
653
+ r"""
654
+ Return the collection of all infinite places of ``self``, which
655
+ in this case is just the embedding of ``self`` into `\RR`.
656
+
657
+ By default, this returns homomorphisms into ``RR``. If
658
+ ``prec`` is not None, we simply return homomorphisms into
659
+ ``RealField(prec)`` (or ``RDF`` if ``prec=53``).
660
+
661
+ There is an optional flag ``all_complex``, which defaults to
662
+ ``False``. If ``all_complex`` is ``True``, then the real embeddings
663
+ are returned as embeddings into the corresponding complex
664
+ field.
665
+
666
+ For consistency with non-trivial number fields.
667
+
668
+ EXAMPLES::
669
+
670
+ sage: QQ.places() # needs sage.rings.real_mpfr
671
+ [Ring morphism:
672
+ From: Rational Field
673
+ To: Real Field with 53 bits of precision
674
+ Defn: 1 |--> 1.00000000000000]
675
+ sage: QQ.places(prec=53)
676
+ [Ring morphism:
677
+ From: Rational Field
678
+ To: Real Double Field
679
+ Defn: 1 |--> 1.0]
680
+ sage: QQ.places(prec=200, all_complex=True) # needs sage.rings.real_mpfr
681
+ [Ring morphism:
682
+ From: Rational Field
683
+ To: Complex Field with 200 bits of precision
684
+ Defn: 1 |--> 1.0000000000000000000000000000000000000000000000000000000000]
685
+ """
686
+ from sage.rings.infinity import Infinity
687
+ if prec is None:
688
+ if all_complex:
689
+ from sage.rings.cc import CC as domain
690
+ else:
691
+ from sage.rings.real_mpfr import RR as domain
692
+ elif prec == 53:
693
+ if all_complex:
694
+ from sage.rings.complex_double import CDF as domain
695
+ else:
696
+ from sage.rings.real_double import RDF as domain
697
+ elif prec == Infinity:
698
+ if all_complex:
699
+ from sage.rings.qqbar import QQbar as domain
700
+ else:
701
+ from sage.rings.qqbar import AA as domain
702
+ else:
703
+ if all_complex:
704
+ from sage.rings.complex_mpfr import ComplexField
705
+ domain = ComplexField(prec)
706
+ else:
707
+ from sage.rings.real_mpfr import RealField
708
+ domain = RealField(prec)
709
+ return [self.hom([domain(1)])]
710
+
711
+ def complex_embedding(self, prec=53):
712
+ """
713
+ Return embedding of the rational numbers into the complex numbers.
714
+
715
+ EXAMPLES::
716
+
717
+ sage: QQ.complex_embedding() # needs sage.rings.real_mpfr
718
+ Ring morphism:
719
+ From: Rational Field
720
+ To: Complex Field with 53 bits of precision
721
+ Defn: 1 |--> 1.00000000000000
722
+ sage: QQ.complex_embedding(20) # needs sage.rings.real_mpfr
723
+ Ring morphism:
724
+ From: Rational Field
725
+ To: Complex Field with 20 bits of precision
726
+ Defn: 1 |--> 1.0000
727
+ """
728
+ from . import complex_mpfr
729
+ CC = complex_mpfr.ComplexField(prec)
730
+ return self.hom([CC(1)])
731
+
732
+ def residue_field(self, p, check=True):
733
+ r"""
734
+ Return the residue field of `\QQ` at the prime `p`, for
735
+ consistency with other number fields.
736
+
737
+ INPUT:
738
+
739
+ - ``p`` -- prime integer
740
+
741
+ - ``check`` -- (default: ``True``) if ``True``, check the primality of
742
+ `p`, else do not
743
+
744
+ OUTPUT: the residue field at this prime
745
+
746
+ EXAMPLES::
747
+
748
+ sage: QQ.residue_field(5)
749
+ Residue field of Integers modulo 5
750
+ sage: QQ.residue_field(next_prime(10^9)) # needs sage.rings.finite_rings
751
+ Residue field of Integers modulo 1000000007
752
+ """
753
+ from sage.rings.finite_rings.residue_field import ResidueField
754
+ return ResidueField(ZZ.ideal(p), check=check)
755
+
756
+ def hilbert_symbol_negative_at_S(self, S, b, check=True):
757
+ r"""
758
+ Return an integer that has a negative Hilbert symbol with respect
759
+ to a given rational number and a given set of primes (or places).
760
+
761
+ The function is algorithm 3.4.1 in [Kir2016]_. It finds an integer `a`
762
+ that has negative Hilbert symbol with respect to a given rational number
763
+ exactly at a given set of primes (or places).
764
+
765
+ INPUT:
766
+
767
+ - ``S`` -- list of rational primes, the infinite place as real
768
+ embedding of `\QQ` or as `-1`
769
+ - ``b`` -- a nonzero rational number which is a non-square locally
770
+ at every prime in ``S``
771
+ - ``check`` -- boolean (default: ``True``); perform additional checks on
772
+ input and confirm the output
773
+
774
+ OUTPUT:
775
+
776
+ - An integer `a` that has negative Hilbert symbol `(a,b)_p` for
777
+ every place `p` in `S` and no other place.
778
+
779
+ EXAMPLES::
780
+
781
+ sage: QQ.hilbert_symbol_negative_at_S([-1,5,3,2,7,11,13,23], -10/7) # needs sage.rings.padics
782
+ -9867
783
+ sage: QQ.hilbert_symbol_negative_at_S([3, 5, QQ.places()[0], 11], -15) # needs sage.rings.padics
784
+ -33
785
+ sage: QQ.hilbert_symbol_negative_at_S([3, 5], 2) # needs sage.rings.padics
786
+ 15
787
+
788
+ TESTS::
789
+
790
+ sage: QQ.hilbert_symbol_negative_at_S(5/2, -2) # needs sage.modules
791
+ Traceback (most recent call last):
792
+ ...
793
+ TypeError: first argument must be a list or integer
794
+
795
+ ::
796
+
797
+ sage: QQ.hilbert_symbol_negative_at_S([1, 3], 0) # needs sage.modules
798
+ Traceback (most recent call last):
799
+ ...
800
+ ValueError: second argument must be nonzero
801
+
802
+ ::
803
+
804
+ sage: QQ.hilbert_symbol_negative_at_S([-1, 3, 5], 2) # needs sage.modules
805
+ Traceback (most recent call last):
806
+ ...
807
+ ValueError: list should be of even cardinality
808
+
809
+ ::
810
+
811
+ sage: QQ.hilbert_symbol_negative_at_S([1, 3], 2) # needs sage.modules
812
+ Traceback (most recent call last):
813
+ ...
814
+ ValueError: all entries in list must be prime or -1 for
815
+ infinite place
816
+
817
+ ::
818
+
819
+ sage: QQ.hilbert_symbol_negative_at_S([5, 7], 2) # needs sage.libs.pari sage.modules sage.rings.padics
820
+ Traceback (most recent call last):
821
+ ...
822
+ ValueError: second argument must be a nonsquare with
823
+ respect to every finite prime in the list
824
+
825
+ ::
826
+
827
+ sage: QQ.hilbert_symbol_negative_at_S([1, 3], sqrt(2)) # needs sage.libs.pari sage.modules sage.symbolic
828
+ Traceback (most recent call last):
829
+ ...
830
+ TypeError: second argument must be a rational number
831
+
832
+ ::
833
+
834
+ sage: QQ.hilbert_symbol_negative_at_S([-1, 3], 2) # needs sage.modules
835
+ Traceback (most recent call last):
836
+ ...
837
+ ValueError: if the infinite place is in the list, the second
838
+ argument must be negative
839
+
840
+ AUTHORS:
841
+
842
+ - Simon Brandhorst, Juanita Duque, Anna Haensch, Manami Roy, Sandi Rudzinski (10-24-2017)
843
+ """
844
+ from sage.arith.misc import hilbert_symbol, is_prime
845
+ from sage.matrix.constructor import matrix
846
+ from sage.modules.free_module import VectorSpace
847
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
848
+ from sage.sets.primes import Primes
849
+
850
+ # input checks
851
+ if type(S) is not list:
852
+ raise TypeError("first argument must be a list or integer")
853
+ # -1 is used for the infinite place
854
+ infty = -1
855
+ for i in range(len(S)):
856
+ if S[i] == self.places()[0]:
857
+ S[i] = -1
858
+ if b not in self:
859
+ raise TypeError("second argument must be a rational number")
860
+ b = self(b)
861
+ if b == 0:
862
+ raise ValueError("second argument must be nonzero")
863
+ if len(S) % 2:
864
+ raise ValueError("list should be of even cardinality")
865
+ for p in S:
866
+ if p != infty:
867
+ if check and not is_prime(p):
868
+ raise ValueError("all entries in list must be prime"
869
+ " or -1 for infinite place")
870
+ from sage.rings.padics.factory import Qp
871
+ R = Qp(p)
872
+ if R(b).is_square():
873
+ raise ValueError("second argument must be a nonsquare with"
874
+ " respect to every finite prime in the list")
875
+ elif b > 0:
876
+ raise ValueError("if the infinite place is in the list, "
877
+ "the second argument must be negative")
878
+ # L is the list of primes that we need to consider, b must have
879
+ # nonzero valuation for each prime in L, this is the set S'
880
+ # in Kirschmer's algorithm
881
+ L = []
882
+ L = [p[0] for p in b.factor() if p[0] not in S]
883
+ # We must also consider 2 to be in L
884
+ if 2 not in L and 2 not in S:
885
+ L.append(2)
886
+ # This adds the infinite place to L
887
+ if b < 0 and infty not in S:
888
+ L.append(infty)
889
+
890
+ P = S + L
891
+ # This constructs the vector v in the algorithm. This is the vector
892
+ # that we are searching for. It represents the case when the Hilbert
893
+ # symbol is negative for all primes in S and positive
894
+ # at all primes in S'
895
+ V = VectorSpace(GF(2), len(P))
896
+ v = V([1]*len(S) + [0]*len(L))
897
+
898
+ # Compute the map phi of Hilbert symbols at all the primes
899
+ # in S and S'
900
+ # For technical reasons, a Hilbert symbol of -1 is
901
+ # represented as 1 and a Hilbert symbol of 1
902
+ # is represented as 0
903
+ def phi(x):
904
+ v = [(1-hilbert_symbol(x, b, p))//2 for p in P]
905
+ return V(v)
906
+
907
+ M = matrix(GF(2), [phi(p) for p in P+[-1]])
908
+ # We search through all the primes
909
+ for q in Primes():
910
+ # Only look at this prime if it is not in our list
911
+ if q in P:
912
+ continue
913
+
914
+ # The algorithm terminates when the vector v is in the
915
+ # subspace of V generated by the image of the phi map
916
+ # on the set of generators
917
+ w = phi(q)
918
+ W = M.stack(matrix(w))
919
+ if v in W.row_space():
920
+ break
921
+ Pq = P + [-1] + [q]
922
+ l = W.solve_left(v)
923
+ a = self.prod([Pq[i]**ZZ(l[i]) for i in range(l.degree())])
924
+ if check:
925
+ assert phi(a) == v, "oops"
926
+ return a
927
+
928
+ def gens(self) -> tuple:
929
+ r"""
930
+ Return a tuple of generators of `\QQ`, which is only ``(1,)``.
931
+
932
+ EXAMPLES::
933
+
934
+ sage: QQ.gens()
935
+ (1,)
936
+ """
937
+ return (self(1), )
938
+
939
+ def gen(self, n=0):
940
+ r"""
941
+ Return the n-th generator of `\QQ`.
942
+
943
+ There is only the 0-th generator, which is 1.
944
+
945
+ EXAMPLES::
946
+
947
+ sage: QQ.gen()
948
+ 1
949
+ """
950
+ if n == 0:
951
+ return self(1)
952
+ else:
953
+ raise IndexError("n must be 0")
954
+
955
+ def degree(self):
956
+ r"""
957
+ Return the degree of `\QQ`, which is 1.
958
+
959
+ EXAMPLES::
960
+
961
+ sage: QQ.degree()
962
+ 1
963
+ """
964
+ return Integer(1)
965
+
966
+ def absolute_degree(self):
967
+ r"""
968
+ Return the absolute degree of `\QQ`, which is 1.
969
+
970
+ EXAMPLES::
971
+
972
+ sage: QQ.absolute_degree()
973
+ 1
974
+ """
975
+ return Integer(1)
976
+
977
+ def ngens(self):
978
+ r"""
979
+ Return the number of generators of `\QQ`, which is 1.
980
+
981
+ EXAMPLES::
982
+
983
+ sage: QQ.ngens()
984
+ 1
985
+ """
986
+ return Integer(1)
987
+
988
+ def is_absolute(self):
989
+ r"""
990
+ `\QQ` is an absolute extension of `\QQ`.
991
+
992
+ EXAMPLES::
993
+
994
+ sage: QQ.is_absolute()
995
+ True
996
+ """
997
+ return True
998
+
999
+ def is_prime_field(self):
1000
+ r"""
1001
+ Return ``True`` since `\QQ` is a prime field.
1002
+
1003
+ EXAMPLES::
1004
+
1005
+ sage: QQ.is_prime_field()
1006
+ True
1007
+ """
1008
+ return True
1009
+
1010
+ def characteristic(self):
1011
+ r"""
1012
+ Return 0 since the rational field has characteristic 0.
1013
+
1014
+ EXAMPLES::
1015
+
1016
+ sage: c = QQ.characteristic(); c
1017
+ 0
1018
+ sage: parent(c)
1019
+ Integer Ring
1020
+ """
1021
+ return Integer(0)
1022
+
1023
+ def maximal_order(self):
1024
+ r"""
1025
+ Return the maximal order of the rational numbers, i.e., the ring
1026
+ `\ZZ` of integers.
1027
+
1028
+ EXAMPLES::
1029
+
1030
+ sage: QQ.maximal_order()
1031
+ Integer Ring
1032
+ sage: QQ.ring_of_integers ()
1033
+ Integer Ring
1034
+ """
1035
+ from .integer_ring import ZZ
1036
+ return ZZ
1037
+
1038
+ def number_field(self):
1039
+ r"""
1040
+ Return the number field associated to `\QQ`. Since `\QQ` is a number
1041
+ field, this just returns `\QQ` again.
1042
+
1043
+ EXAMPLES::
1044
+
1045
+ sage: QQ.number_field() is QQ
1046
+ True
1047
+ """
1048
+ return self
1049
+
1050
+ def power_basis(self):
1051
+ r"""
1052
+ Return a power basis for this number field over its base field.
1053
+
1054
+ The power basis is always ``[1]`` for the rational field. This method
1055
+ is defined to make the rational field behave more like a number
1056
+ field.
1057
+
1058
+ EXAMPLES::
1059
+
1060
+ sage: QQ.power_basis()
1061
+ [1]
1062
+ """
1063
+ return [self.gen()]
1064
+
1065
+ def extension(self, poly, names, **kwds):
1066
+ r"""
1067
+ Create a field extension of `\QQ`.
1068
+
1069
+ EXAMPLES:
1070
+
1071
+ We make a single absolute extension::
1072
+
1073
+ sage: x = polygen(QQ, 'x')
1074
+ sage: K.<a> = QQ.extension(x^3 + 5); K # needs sage.rings.number_field
1075
+ Number Field in a with defining polynomial x^3 + 5
1076
+
1077
+ We make an extension generated by roots of two polynomials::
1078
+
1079
+ sage: K.<a,b> = QQ.extension([x^3 + 5, x^2 + 3]); K # needs sage.rings.number_field
1080
+ Number Field in a with defining polynomial x^3 + 5 over its base field
1081
+ sage: b^2 # needs sage.rings.number_field
1082
+ -3
1083
+ sage: a^3 # needs sage.rings.number_field
1084
+ -5
1085
+ """
1086
+ from sage.rings.number_field.number_field import NumberField
1087
+ return NumberField(poly, names=names, **kwds)
1088
+
1089
+ def algebraic_closure(self):
1090
+ r"""
1091
+ Return the algebraic closure of ``self`` (which is `\QQbar`).
1092
+
1093
+ EXAMPLES::
1094
+
1095
+ sage: QQ.algebraic_closure() # needs sage.rings.number_field
1096
+ Algebraic Field
1097
+ """
1098
+ from sage.rings.qqbar import QQbar
1099
+ return QQbar
1100
+
1101
+ def order(self):
1102
+ r"""
1103
+ Return the order of `\QQ`, which is `\infty`.
1104
+
1105
+ EXAMPLES::
1106
+
1107
+ sage: QQ.order()
1108
+ +Infinity
1109
+ """
1110
+ from sage.rings.infinity import Infinity
1111
+ return Infinity
1112
+
1113
+ def polynomial(self):
1114
+ r"""
1115
+ Return a defining polynomial of `\QQ`, as for other number fields.
1116
+
1117
+ This is also aliased to :meth:`defining_polynomial`
1118
+ and :meth:`absolute_polynomial`.
1119
+
1120
+ EXAMPLES::
1121
+
1122
+ sage: QQ.polynomial()
1123
+ x
1124
+ """
1125
+ from sage.rings.polynomial.polynomial_ring import polygen
1126
+ return polygen(self)
1127
+
1128
+ defining_polynomial = polynomial
1129
+ absolute_polynomial = polynomial
1130
+
1131
+ def _an_element_(self):
1132
+ r"""
1133
+ Return an element of `\QQ`.
1134
+
1135
+ EXAMPLES::
1136
+
1137
+ sage: QQ.an_element() # indirect doctest
1138
+ 1/2
1139
+ """
1140
+ return Rational((1, 2))
1141
+
1142
+ def some_elements(self):
1143
+ r"""
1144
+ Return some elements of `\QQ`.
1145
+
1146
+ See :func:`TestSuite` for a typical use case.
1147
+
1148
+ OUTPUT: an iterator over 100 elements of `\QQ`
1149
+
1150
+ EXAMPLES::
1151
+
1152
+ sage: tuple(QQ.some_elements())
1153
+ (1/2, -1/2, 2, -2,
1154
+ 0, 1, -1, 42,
1155
+ 2/3, -2/3, 3/2, -3/2,
1156
+ 4/5, -4/5, 5/4, -5/4,
1157
+ 6/7, -6/7, 7/6, -7/6,
1158
+ 8/9, -8/9, 9/8, -9/8,
1159
+ 10/11, -10/11, 11/10, -11/10,
1160
+ 12/13, -12/13, 13/12, -13/12,
1161
+ 14/15, -14/15, 15/14, -15/14,
1162
+ 16/17, -16/17, 17/16, -17/16,
1163
+ 18/19, -18/19, 19/18, -19/18,
1164
+ 20/441, -20/441, 441/20, -441/20,
1165
+ 22/529, -22/529, 529/22, -529/22,
1166
+ 24/625, -24/625, 625/24, -625/24,
1167
+ ...)
1168
+ """
1169
+ yield self.an_element()
1170
+ yield -self.an_element()
1171
+ yield 1/self.an_element()
1172
+ yield -1/self.an_element()
1173
+ yield self(0)
1174
+ yield self(1)
1175
+ yield self(-1)
1176
+ yield self(42)
1177
+ for n in range(1, 24):
1178
+ a = 2*n
1179
+ b = (2*n + 1)**(n//10 + 1)
1180
+ yield Rational((a, b))
1181
+ yield Rational((-a, b))
1182
+ yield Rational((b, a))
1183
+ yield Rational((-b, a))
1184
+
1185
+ def random_element(self, num_bound=None, den_bound=None, *args, **kwds):
1186
+ r"""
1187
+ Return a random element of `\QQ`.
1188
+
1189
+ Elements are constructed by randomly choosing integers
1190
+ for the numerator and denominator, not necessarily coprime.
1191
+
1192
+ INPUT:
1193
+
1194
+ - ``num_bound`` -- positive integer, specifying a bound
1195
+ on the absolute value of the numerator.
1196
+ If absent, no bound is enforced.
1197
+
1198
+ - ``den_bound`` -- positive integer, specifying a bound
1199
+ on the value of the denominator.
1200
+ If absent, the bound for the numerator will be reused.
1201
+
1202
+ Any extra positional or keyword arguments are passed through to
1203
+ :meth:`sage.rings.integer_ring.IntegerRing_class.random_element`.
1204
+
1205
+ EXAMPLES::
1206
+
1207
+ sage: QQ.random_element().parent() is QQ
1208
+ True
1209
+ sage: while QQ.random_element() != 0:
1210
+ ....: pass
1211
+ sage: while QQ.random_element() != -1/2:
1212
+ ....: pass
1213
+
1214
+ In the following example, the resulting numbers range from
1215
+ -5/1 to 5/1 (both inclusive),
1216
+ while the smallest possible positive value is 1/10::
1217
+
1218
+ sage: q = QQ.random_element(5, 10)
1219
+ sage: -5/1 <= q <= 5/1
1220
+ True
1221
+ sage: q.denominator() <= 10
1222
+ True
1223
+ sage: q.numerator() <= 5
1224
+ True
1225
+
1226
+ Extra positional or keyword arguments are passed through::
1227
+
1228
+ sage: QQ.random_element(distribution='1/n').parent() is QQ
1229
+ True
1230
+ sage: QQ.random_element(distribution='1/n').parent() is QQ
1231
+ True
1232
+ """
1233
+ global ZZ
1234
+ if ZZ is None:
1235
+ from . import integer_ring
1236
+ ZZ = integer_ring.ZZ
1237
+ if num_bound is None:
1238
+ num = ZZ.random_element(*args, **kwds)
1239
+ den = ZZ.random_element(*args, **kwds)
1240
+ while den == 0:
1241
+ den = ZZ.random_element(*args, **kwds)
1242
+ return self((num, den))
1243
+ else:
1244
+ if num_bound == 0:
1245
+ num_bound = 2
1246
+ if den_bound is None:
1247
+ den_bound = num_bound
1248
+ if den_bound < 1:
1249
+ den_bound = 2
1250
+ num = ZZ.random_element(-num_bound, num_bound+1, *args, **kwds)
1251
+ den = ZZ.random_element(1, den_bound+1, *args, **kwds)
1252
+ while den == 0:
1253
+ den = ZZ.random_element(1, den_bound+1, *args, **kwds)
1254
+ return self((num, den))
1255
+
1256
+ def zeta(self, n=2):
1257
+ """
1258
+ Return a root of unity in ``self``.
1259
+
1260
+ INPUT:
1261
+
1262
+ - ``n`` -- integer (default: 2); order of the root of unity
1263
+
1264
+ EXAMPLES::
1265
+
1266
+ sage: QQ.zeta()
1267
+ -1
1268
+ sage: QQ.zeta(2)
1269
+ -1
1270
+ sage: QQ.zeta(1)
1271
+ 1
1272
+ sage: QQ.zeta(3)
1273
+ Traceback (most recent call last):
1274
+ ...
1275
+ ValueError: no n-th root of unity in rational field
1276
+ """
1277
+ if n == 1:
1278
+ return Rational(1)
1279
+ elif n == 2:
1280
+ return Rational(-1)
1281
+ else:
1282
+ raise ValueError("no n-th root of unity in rational field")
1283
+
1284
+ def selmer_generators(self, S, m, proof=True, orders=False):
1285
+ r"""
1286
+ Return generators of the group `\QQ(S,m)`.
1287
+
1288
+ INPUT:
1289
+
1290
+ - ``S`` -- set of primes
1291
+
1292
+ - ``m`` -- positive integer
1293
+
1294
+ - ``proof`` -- ignored
1295
+
1296
+ - ``orders`` -- (default: ``False``) if ``True``, output two lists, the
1297
+ generators and their orders
1298
+
1299
+ OUTPUT:
1300
+
1301
+ A list of generators of `\QQ(S,m)` (and, optionally, their
1302
+ orders in `\QQ^\times/(\QQ^\times)^m`). This is the subgroup
1303
+ of `\QQ^\times/(\QQ^\times)^m` consisting of elements `a` such
1304
+ that the valuation of `a` is divisible by `m` at all primes
1305
+ not in `S`. It is equal to the group of `S`-units modulo
1306
+ `m`-th powers. The group `\QQ(S,m)` contains the subgroup of
1307
+ those `a` such that `\QQ(\sqrt[m]{a})/\QQ` is unramified at
1308
+ all primes of `\QQ` outside of `S`, but may contain it
1309
+ properly when not all primes dividing `m` are in `S`.
1310
+
1311
+ .. SEEALSO::
1312
+
1313
+ :meth:`RationalField.selmer_space`, which gives additional
1314
+ output when `m=p` is prime: as well as generators, it gives an
1315
+ abstract vector space over `\GF{p}` isomorphic to `\QQ(S,p)`
1316
+ and maps implementing the isomorphism between this space and
1317
+ `\QQ(S,p)` as a subgroup of `\QQ^*/(\QQ^*)^p`.
1318
+
1319
+ EXAMPLES::
1320
+
1321
+ sage: QQ.selmer_generators((), 2)
1322
+ [-1]
1323
+ sage: QQ.selmer_generators((3,), 2)
1324
+ [-1, 3]
1325
+ sage: QQ.selmer_generators((5,), 2)
1326
+ [-1, 5]
1327
+
1328
+ The previous examples show that the group generated by the
1329
+ output may be strictly larger than the 'true' Selmer group of
1330
+ elements giving extensions unramified outside `S`.
1331
+
1332
+ When `m` is even, `-1` is a generator of order `2`::
1333
+
1334
+ sage: QQ.selmer_generators((2,3,5,7,), 2, orders=True)
1335
+ ([-1, 2, 3, 5, 7], [2, 2, 2, 2, 2])
1336
+ sage: QQ.selmer_generators((2,3,5,7,), 3, orders=True)
1337
+ ([2, 3, 5, 7], [3, 3, 3, 3])
1338
+ """
1339
+ gens = list(S)
1340
+ ords = [ZZ(m)] * len(S)
1341
+ if m % 2 == 0:
1342
+ gens = [ZZ(-1)] + gens
1343
+ ords = [ZZ(2)] + ords
1344
+ if orders:
1345
+ return gens, ords
1346
+ else:
1347
+ return gens
1348
+
1349
+ # For backwards compatibility:
1350
+ selmer_group = deprecated_function_alias(31345, selmer_generators)
1351
+
1352
+ def selmer_group_iterator(self, S, m, proof=True):
1353
+ r"""
1354
+ Return an iterator through elements of the finite group `\QQ(S,m)`.
1355
+
1356
+ INPUT:
1357
+
1358
+ - ``S`` -- set of primes
1359
+
1360
+ - ``m`` -- positive integer
1361
+
1362
+ - ``proof`` -- ignored
1363
+
1364
+ OUTPUT:
1365
+
1366
+ An iterator yielding the distinct elements of `\QQ(S,m)`. See
1367
+ the docstring for :meth:`selmer_generators` for more information.
1368
+
1369
+ EXAMPLES::
1370
+
1371
+ sage: list(QQ.selmer_group_iterator((), 2))
1372
+ [1, -1]
1373
+ sage: list(QQ.selmer_group_iterator((2,), 2))
1374
+ [1, 2, -1, -2]
1375
+ sage: list(QQ.selmer_group_iterator((2,3), 2))
1376
+ [1, 3, 2, 6, -1, -3, -2, -6]
1377
+ sage: list(QQ.selmer_group_iterator((5,), 2))
1378
+ [1, 5, -1, -5]
1379
+ """
1380
+ KSgens, ords = self.selmer_generators(S=S, m=m, proof=proof, orders=True)
1381
+ one = self.one()
1382
+ from itertools import product
1383
+
1384
+ from sage.misc.misc_c import prod
1385
+ for ev in product(*[range(o) for o in ords]):
1386
+ yield prod((p**e for p, e in zip(KSgens, ev)), one)
1387
+
1388
+ def selmer_space(self, S, p, proof=None):
1389
+ r"""
1390
+ Compute the group `\QQ(S,p)` as a vector space with maps to and from `\QQ^*`.
1391
+
1392
+ INPUT:
1393
+
1394
+ - ``S`` -- list of prime numbers
1395
+
1396
+ - ``p`` -- a prime number
1397
+
1398
+ OUTPUT:
1399
+
1400
+ (tuple) ``QSp``, ``QSp_gens``, ``from_QSp``, ``to_QSp`` where
1401
+
1402
+ - ``QSp`` is an abstract vector space over `\GF{p}` isomorphic to `\QQ(S,p)`;
1403
+
1404
+ - ``QSp_gens`` is a list of elements of `\QQ^*` generating `\QQ(S,p)`;
1405
+
1406
+ - ``from_QSp`` is a function from ``QSp`` to `\QQ^*`
1407
+ implementing the isomorphism from the abstract `\QQ(S,p)` to
1408
+ `\QQ(S,p)` as a subgroup of `\QQ^*/(\QQ^*)^p`;
1409
+
1410
+ - ``to_QSP`` is a partial function from `\QQ^*` to ``QSp``,
1411
+ defined on elements `a` whose image in `\QQ^*/(\QQ^*)^p` lies in
1412
+ `\QQ(S,p)`, mapping them via the inverse isomorphism to the
1413
+ abstract vector space ``QSp``.
1414
+
1415
+ The group `\QQ(S,p)` is the finite subgroup of
1416
+ `\QQ^*/(\QQ^*)^p` consisting of elements whose valuation at
1417
+ all primes not in `S` is a multiple of `p`. It contains the
1418
+ subgroup of those `a\in \QQ^*` such that
1419
+ `\QQ(\sqrt[p]{a})/\QQ` is unramified at all primes of `\QQ`
1420
+ outside of `S`, but may contain it properly when `p` is not in `S`.
1421
+
1422
+ EXAMPLES:
1423
+
1424
+ When `S` is empty, `\QQ(S,p)` is only nontrivial for `p=2`::
1425
+
1426
+ sage: QS2, QS2gens, fromQS2, toQS2 = QQ.selmer_space([], 2) # needs sage.rings.number_field
1427
+ sage: QS2 # needs sage.rings.number_field
1428
+ Vector space of dimension 1 over Finite Field of size 2
1429
+ sage: QS2gens # needs sage.rings.number_field
1430
+ [-1]
1431
+
1432
+ sage: all(QQ.selmer_space([], p)[0].dimension() == 0 # needs sage.libs.pari sage.rings.number_field
1433
+ ....: for p in primes(3, 10))
1434
+ True
1435
+
1436
+ In general there is one generator for each `p\in S`, and an
1437
+ additional generator of `-1` when `p=2`::
1438
+
1439
+ sage: # needs sage.modules sage.rings.number_field
1440
+ sage: QS2, QS2gens, fromQS2, toQS2 = QQ.selmer_space([5,7], 2)
1441
+ sage: QS2
1442
+ Vector space of dimension 3 over Finite Field of size 2
1443
+ sage: QS2gens
1444
+ [5, 7, -1]
1445
+ sage: toQS2(-7)
1446
+ (0, 1, 1)
1447
+ sage: fromQS2((0,1,1))
1448
+ -7
1449
+
1450
+ The map ``fromQS2`` is only well-defined modulo `p`-th powers
1451
+ (in this case, modulo squares)::
1452
+
1453
+ sage: toQS2(-5/7) # needs sage.modules sage.rings.number_field
1454
+ (1, 1, 1)
1455
+ sage: fromQS2((1,1,1)) # needs sage.modules sage.rings.number_field
1456
+ -35
1457
+ sage: ((-5/7)/(-35)).is_square()
1458
+ True
1459
+
1460
+ The map ``toQS2`` is not defined on all of `\QQ^*`, only on
1461
+ those numbers which are squares away from `5` and `7`::
1462
+
1463
+ sage: toQS2(210) # needs sage.modules sage.rings.number_field
1464
+ Traceback (most recent call last):
1465
+ ...
1466
+ ValueError: argument 210 should have valuations divisible by 2
1467
+ at all primes in [5, 7]
1468
+ """
1469
+ from sage.rings.number_field.selmer_group import pSelmerGroup
1470
+ return pSelmerGroup(self, S, p)
1471
+
1472
+ def quadratic_defect(self, a, p, check=True):
1473
+ r"""
1474
+ Return the valuation of the quadratic defect of `a` at `p`.
1475
+
1476
+ INPUT:
1477
+
1478
+ - ``a`` -- an element of ``self``
1479
+ - ``p`` -- a prime ideal or a prime number
1480
+ - ``check`` -- (default: ``True``) check if `p` is prime
1481
+
1482
+ REFERENCE:
1483
+
1484
+ [Kir2016]_
1485
+
1486
+ EXAMPLES::
1487
+
1488
+ sage: QQ.quadratic_defect(0, 7)
1489
+ +Infinity
1490
+ sage: QQ.quadratic_defect(5, 7)
1491
+ 0
1492
+ sage: QQ.quadratic_defect(5, 2)
1493
+ 2
1494
+ sage: QQ.quadratic_defect(5, 5)
1495
+ 1
1496
+ """
1497
+ from sage.arith.misc import legendre_symbol
1498
+ from sage.rings.infinity import Infinity
1499
+ if a not in self:
1500
+ raise TypeError(str(a) + " must be an element of " + str(self))
1501
+ if p.parent() == ZZ.ideal_monoid():
1502
+ p = p.gen()
1503
+ if check and not p.is_prime():
1504
+ raise ValueError(str(p) + " must be prime")
1505
+ if a.is_zero():
1506
+ return Infinity
1507
+ v, u = self(a).val_unit(p)
1508
+ if v % 2 == 1:
1509
+ return v
1510
+ if p != 2:
1511
+ if legendre_symbol(u, p) == 1:
1512
+ return Infinity
1513
+ else:
1514
+ return v
1515
+ if p == 2:
1516
+ if u % 8 == 1:
1517
+ return Infinity
1518
+ if u % 8 == 5:
1519
+ return v + 2
1520
+ if u % 8 in [3, 7]:
1521
+ return v + 1
1522
+
1523
+ #################################
1524
+ # Coercions to interfaces
1525
+ #################################
1526
+ def _gap_init_(self):
1527
+ r"""
1528
+ Return the GAP representation of `\QQ`.
1529
+
1530
+ EXAMPLES::
1531
+
1532
+ sage: gap(QQ) # indirect doctest # needs sage.libs.gap
1533
+ Rationals
1534
+ """
1535
+ return 'Rationals'
1536
+
1537
+ def _lean_init_(self):
1538
+ return 'rat'
1539
+
1540
+ def _magma_init_(self, magma):
1541
+ r"""
1542
+ Return the magma representation of `\QQ`.
1543
+
1544
+ EXAMPLES::
1545
+
1546
+ sage: magma(QQ) # optional - magma # indirect doctest
1547
+ Rational Field
1548
+
1549
+ TESTS:
1550
+
1551
+ See :issue:`5521`::
1552
+
1553
+ sage: loads(dumps(QQ)) == QQ # optional - magma
1554
+ True
1555
+ """
1556
+ return 'RationalField()'
1557
+
1558
+ def _macaulay2_init_(self, macaulay2=None):
1559
+ r"""
1560
+ Return the macaulay2 representation of `\QQ`.
1561
+
1562
+ EXAMPLES::
1563
+
1564
+ sage: macaulay2(QQ) # optional - macaulay2 # indirect doctest
1565
+ QQ
1566
+ """
1567
+ return "QQ"
1568
+
1569
+ def _axiom_init_(self):
1570
+ r"""
1571
+ Return the axiom/fricas representation of `\QQ`.
1572
+
1573
+ EXAMPLES::
1574
+
1575
+ sage: axiom(QQ) #optional - axiom # indirect doctest
1576
+ Fraction Integer
1577
+ sage: fricas(QQ) #optional - fricas # indirect doctest
1578
+ Fraction(Integer)
1579
+ """
1580
+ return 'Fraction Integer'
1581
+
1582
+ _fricas_init_ = _axiom_init_
1583
+
1584
+ def _polymake_init_(self):
1585
+ r"""
1586
+ Return the polymake representation of `\QQ`.
1587
+
1588
+ EXAMPLES::
1589
+
1590
+ sage: polymake(QQ) #optional - jupymake # indirect doctest
1591
+ Rational
1592
+ """
1593
+ return '"Rational"'
1594
+
1595
+ def _sympy_(self):
1596
+ r"""
1597
+ Return the SymPy set ``Rationals``.
1598
+
1599
+ EXAMPLES::
1600
+
1601
+ sage: QQ._sympy_() # needs sympy
1602
+ Rationals
1603
+ """
1604
+ from sage.interfaces.sympy import sympy_init
1605
+ from sympy import Rationals
1606
+ sympy_init()
1607
+ return Rationals
1608
+
1609
+ def _sage_input_(self, sib, coerced):
1610
+ r"""
1611
+ Produce an expression which will reproduce this value when evaluated.
1612
+
1613
+ EXAMPLES::
1614
+
1615
+ sage: sage_input(QQ, verify=True)
1616
+ # Verified
1617
+ QQ
1618
+ sage: from sage.misc.sage_input import SageInputBuilder
1619
+ sage: QQ._sage_input_(SageInputBuilder(), False)
1620
+ {atomic:QQ}
1621
+ """
1622
+ return sib.name('QQ')
1623
+
1624
+ def _factor_univariate_polynomial(self, f):
1625
+ """
1626
+ Factor the univariate polynomial ``f``.
1627
+
1628
+ INPUT:
1629
+
1630
+ - ``f`` -- a univariate polynomial defined over the rationals
1631
+
1632
+ OUTPUT:
1633
+
1634
+ - A factorization of ``f`` over the rationals into a unit and monic
1635
+ irreducible factors
1636
+
1637
+ .. NOTE::
1638
+
1639
+ This is a helper method for
1640
+ :meth:`sage.rings.polynomial.polynomial_element.Polynomial.factor`.
1641
+
1642
+ This method calls PARI to compute the factorization.
1643
+
1644
+ TESTS::
1645
+
1646
+ sage: # needs sage.libs.pari
1647
+ sage: R.<x> = QQ[]
1648
+ sage: QQ._factor_univariate_polynomial(x)
1649
+ x
1650
+ sage: QQ._factor_univariate_polynomial(2*x)
1651
+ (2) * x
1652
+ sage: QQ._factor_univariate_polynomial((x^2 - 1/4)^4)
1653
+ (x - 1/2)^4 * (x + 1/2)^4
1654
+ sage: QQ._factor_univariate_polynomial((2*x + 1) * (3*x^2 - 5)^2)
1655
+ (18) * (x + 1/2) * (x^2 - 5/3)^2
1656
+ sage: f = prod((k^2*x^k + k)^(k-1) for k in primes(10))
1657
+ sage: QQ._factor_univariate_polynomial(f)
1658
+ (1751787911376562500) * (x^2 + 1/2) * (x^3 + 1/3)^2 * (x^5 + 1/5)^4 * (x^7 + 1/7)^6
1659
+ sage: QQ._factor_univariate_polynomial(10*x^5 - 1)
1660
+ (10) * (x^5 - 1/10)
1661
+ sage: QQ._factor_univariate_polynomial(10*x^5 - 10)
1662
+ (10) * (x - 1) * (x^4 + x^3 + x^2 + x + 1)
1663
+ """
1664
+ G = f._pari_with_name().factor()
1665
+
1666
+ # normalize the leading coefficients
1667
+ P = f.parent()
1668
+ F = [(P(g).monic(), int(e)) for g, e in zip(*G)]
1669
+
1670
+ from sage.structure.factorization import Factorization
1671
+ return Factorization(F, f.leading_coefficient())
1672
+
1673
+ def valuation(self, p):
1674
+ r"""
1675
+ Return the discrete valuation with uniformizer ``p``.
1676
+
1677
+ EXAMPLES::
1678
+
1679
+ sage: v = QQ.valuation(3); v # needs sage.rings.padics
1680
+ 3-adic valuation
1681
+ sage: v(1/3) # needs sage.rings.padics
1682
+ -1
1683
+
1684
+ .. SEEALSO::
1685
+
1686
+ :meth:`NumberField_generic.valuation() <sage.rings.number_field.number_field.NumberField_generic.valuation>`,
1687
+ :meth:`IntegerRing_class.valuation() <sage.rings.integer_ring.IntegerRing_class.valuation>`
1688
+ """
1689
+ from sage.rings.padics.padic_valuation import pAdicValuation
1690
+ return pAdicValuation(self, p)
1691
+
1692
+
1693
+ QQ = RationalField()
1694
+ Q = QQ
1695
+
1696
+
1697
+ def is_RationalField(x) -> bool:
1698
+ """
1699
+ Check to see if ``x`` is the rational field.
1700
+
1701
+ EXAMPLES::
1702
+
1703
+ sage: from sage.rings.rational_field import is_RationalField as is_RF
1704
+ sage: is_RF(QQ)
1705
+ doctest:warning...
1706
+ DeprecationWarning: The function is_RationalField is deprecated;
1707
+ use 'isinstance(..., RationalField)' instead.
1708
+ See https://github.com/sagemath/sage/issues/38128 for details.
1709
+ True
1710
+ sage: is_RF(ZZ)
1711
+ False
1712
+ """
1713
+ from sage.misc.superseded import deprecation
1714
+ deprecation(38128,
1715
+ "The function is_RationalField is deprecated; "
1716
+ "use 'isinstance(..., RationalField)' instead.")
1717
+ return isinstance(x, RationalField)
1718
+
1719
+
1720
+ def frac(n, d):
1721
+ """
1722
+ Return the fraction ``n/d``.
1723
+
1724
+ EXAMPLES::
1725
+
1726
+ sage: from sage.rings.rational_field import frac
1727
+ sage: frac(1,2)
1728
+ 1/2
1729
+ """
1730
+ return Rational(n) / Rational(d)