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.
- passagemath_categories-10.6.32.dist-info/METADATA +156 -0
- passagemath_categories-10.6.32.dist-info/RECORD +719 -0
- passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
- passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
- passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
- sage/all__sagemath_categories.py +28 -0
- sage/arith/all.py +38 -0
- sage/arith/constants.pxd +27 -0
- sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/functions.pxd +4 -0
- sage/arith/functions.pyx +221 -0
- sage/arith/misc.py +6552 -0
- sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/arith/srange.pyx +571 -0
- sage/calculus/all__sagemath_categories.py +2 -0
- sage/calculus/functional.py +481 -0
- sage/calculus/functions.py +151 -0
- sage/categories/additive_groups.py +73 -0
- sage/categories/additive_magmas.py +1044 -0
- sage/categories/additive_monoids.py +114 -0
- sage/categories/additive_semigroups.py +184 -0
- sage/categories/affine_weyl_groups.py +238 -0
- sage/categories/algebra_ideals.py +95 -0
- sage/categories/algebra_modules.py +96 -0
- sage/categories/algebras.py +349 -0
- sage/categories/algebras_with_basis.py +377 -0
- sage/categories/all.py +160 -0
- sage/categories/aperiodic_semigroups.py +29 -0
- sage/categories/associative_algebras.py +47 -0
- sage/categories/bialgebras.py +101 -0
- sage/categories/bialgebras_with_basis.py +414 -0
- sage/categories/bimodules.py +206 -0
- sage/categories/chain_complexes.py +268 -0
- sage/categories/classical_crystals.py +480 -0
- sage/categories/coalgebras.py +405 -0
- sage/categories/coalgebras_with_basis.py +232 -0
- sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/coercion_methods.pyx +52 -0
- sage/categories/commutative_additive_groups.py +104 -0
- sage/categories/commutative_additive_monoids.py +45 -0
- sage/categories/commutative_additive_semigroups.py +48 -0
- sage/categories/commutative_algebra_ideals.py +87 -0
- sage/categories/commutative_algebras.py +94 -0
- sage/categories/commutative_ring_ideals.py +58 -0
- sage/categories/commutative_rings.py +736 -0
- sage/categories/complete_discrete_valuation.py +293 -0
- sage/categories/complex_reflection_groups.py +145 -0
- sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
- sage/categories/coxeter_group_algebras.py +186 -0
- sage/categories/coxeter_groups.py +3402 -0
- sage/categories/crystals.py +2628 -0
- sage/categories/cw_complexes.py +216 -0
- sage/categories/dedekind_domains.py +137 -0
- sage/categories/discrete_valuation.py +325 -0
- sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
- sage/categories/division_rings.py +114 -0
- sage/categories/domains.py +95 -0
- sage/categories/drinfeld_modules.py +789 -0
- sage/categories/dual.py +42 -0
- sage/categories/enumerated_sets.py +1146 -0
- sage/categories/euclidean_domains.py +271 -0
- sage/categories/examples/algebras_with_basis.py +102 -0
- sage/categories/examples/all.py +1 -0
- sage/categories/examples/commutative_additive_monoids.py +130 -0
- sage/categories/examples/commutative_additive_semigroups.py +199 -0
- sage/categories/examples/coxeter_groups.py +8 -0
- sage/categories/examples/crystals.py +236 -0
- sage/categories/examples/cw_complexes.py +163 -0
- sage/categories/examples/facade_sets.py +187 -0
- sage/categories/examples/filtered_algebras_with_basis.py +204 -0
- sage/categories/examples/filtered_modules_with_basis.py +154 -0
- sage/categories/examples/finite_coxeter_groups.py +252 -0
- sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
- sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
- sage/categories/examples/finite_enumerated_sets.py +208 -0
- sage/categories/examples/finite_monoids.py +150 -0
- sage/categories/examples/finite_semigroups.py +190 -0
- sage/categories/examples/finite_weyl_groups.py +191 -0
- sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
- sage/categories/examples/graded_modules_with_basis.py +168 -0
- sage/categories/examples/graphs.py +122 -0
- sage/categories/examples/hopf_algebras_with_basis.py +145 -0
- sage/categories/examples/infinite_enumerated_sets.py +190 -0
- sage/categories/examples/lie_algebras.py +352 -0
- sage/categories/examples/lie_algebras_with_basis.py +196 -0
- sage/categories/examples/magmas.py +162 -0
- sage/categories/examples/manifolds.py +94 -0
- sage/categories/examples/monoids.py +144 -0
- sage/categories/examples/posets.py +178 -0
- sage/categories/examples/semigroups.py +580 -0
- sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/categories/examples/semigroups_cython.pyx +221 -0
- sage/categories/examples/semirings.py +249 -0
- sage/categories/examples/sets_cat.py +706 -0
- sage/categories/examples/sets_with_grading.py +101 -0
- sage/categories/examples/with_realizations.py +542 -0
- sage/categories/fields.py +991 -0
- sage/categories/filtered_algebras.py +63 -0
- sage/categories/filtered_algebras_with_basis.py +548 -0
- sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
- sage/categories/filtered_modules.py +210 -0
- sage/categories/filtered_modules_with_basis.py +1209 -0
- sage/categories/finite_complex_reflection_groups.py +1506 -0
- sage/categories/finite_coxeter_groups.py +1138 -0
- sage/categories/finite_crystals.py +103 -0
- sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
- sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
- sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
- sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
- sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
- sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
- sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
- sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
- sage/categories/finite_enumerated_sets.py +769 -0
- sage/categories/finite_fields.py +252 -0
- sage/categories/finite_groups.py +256 -0
- sage/categories/finite_lattice_posets.py +242 -0
- sage/categories/finite_monoids.py +316 -0
- sage/categories/finite_permutation_groups.py +339 -0
- sage/categories/finite_posets.py +1994 -0
- sage/categories/finite_semigroups.py +136 -0
- sage/categories/finite_sets.py +93 -0
- sage/categories/finite_weyl_groups.py +39 -0
- sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
- sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
- sage/categories/finitely_generated_magmas.py +57 -0
- sage/categories/finitely_generated_semigroups.py +214 -0
- sage/categories/function_fields.py +76 -0
- sage/categories/g_sets.py +77 -0
- sage/categories/gcd_domains.py +65 -0
- sage/categories/generalized_coxeter_groups.py +94 -0
- sage/categories/graded_algebras.py +85 -0
- sage/categories/graded_algebras_with_basis.py +258 -0
- sage/categories/graded_bialgebras.py +32 -0
- sage/categories/graded_bialgebras_with_basis.py +32 -0
- sage/categories/graded_coalgebras.py +65 -0
- sage/categories/graded_coalgebras_with_basis.py +51 -0
- sage/categories/graded_hopf_algebras.py +41 -0
- sage/categories/graded_hopf_algebras_with_basis.py +169 -0
- sage/categories/graded_lie_algebras.py +91 -0
- sage/categories/graded_lie_algebras_with_basis.py +44 -0
- sage/categories/graded_lie_conformal_algebras.py +74 -0
- sage/categories/graded_modules.py +133 -0
- sage/categories/graded_modules_with_basis.py +329 -0
- sage/categories/graphs.py +138 -0
- sage/categories/group_algebras.py +430 -0
- sage/categories/groupoid.py +94 -0
- sage/categories/groups.py +667 -0
- sage/categories/h_trivial_semigroups.py +64 -0
- sage/categories/hecke_modules.py +185 -0
- sage/categories/highest_weight_crystals.py +980 -0
- sage/categories/hopf_algebras.py +219 -0
- sage/categories/hopf_algebras_with_basis.py +309 -0
- sage/categories/infinite_enumerated_sets.py +115 -0
- sage/categories/integral_domains.py +203 -0
- sage/categories/j_trivial_semigroups.py +29 -0
- sage/categories/kac_moody_algebras.py +82 -0
- sage/categories/kahler_algebras.py +203 -0
- sage/categories/l_trivial_semigroups.py +63 -0
- sage/categories/lambda_bracket_algebras.py +280 -0
- sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
- sage/categories/lattice_posets.py +89 -0
- sage/categories/left_modules.py +49 -0
- sage/categories/lie_algebras.py +1070 -0
- sage/categories/lie_algebras_with_basis.py +261 -0
- sage/categories/lie_conformal_algebras.py +350 -0
- sage/categories/lie_conformal_algebras_with_basis.py +147 -0
- sage/categories/lie_groups.py +73 -0
- sage/categories/loop_crystals.py +1290 -0
- sage/categories/magmas.py +1189 -0
- sage/categories/magmas_and_additive_magmas.py +149 -0
- sage/categories/magmatic_algebras.py +365 -0
- sage/categories/manifolds.py +352 -0
- sage/categories/matrix_algebras.py +40 -0
- sage/categories/metric_spaces.py +387 -0
- sage/categories/modular_abelian_varieties.py +78 -0
- sage/categories/modules.py +989 -0
- sage/categories/modules_with_basis.py +2794 -0
- sage/categories/monoid_algebras.py +38 -0
- sage/categories/monoids.py +739 -0
- sage/categories/noetherian_rings.py +87 -0
- sage/categories/number_fields.py +242 -0
- sage/categories/ore_modules.py +189 -0
- sage/categories/partially_ordered_monoids.py +49 -0
- sage/categories/permutation_groups.py +63 -0
- sage/categories/pointed_sets.py +42 -0
- sage/categories/polyhedra.py +74 -0
- sage/categories/poor_man_map.py +270 -0
- sage/categories/posets.py +722 -0
- sage/categories/principal_ideal_domains.py +270 -0
- sage/categories/quantum_group_representations.py +543 -0
- sage/categories/quotient_fields.py +728 -0
- sage/categories/r_trivial_semigroups.py +45 -0
- sage/categories/regular_crystals.py +898 -0
- sage/categories/regular_supercrystals.py +170 -0
- sage/categories/right_modules.py +49 -0
- sage/categories/ring_ideals.py +74 -0
- sage/categories/rings.py +1904 -0
- sage/categories/rngs.py +175 -0
- sage/categories/schemes.py +393 -0
- sage/categories/semigroups.py +1060 -0
- sage/categories/semirings.py +71 -0
- sage/categories/semisimple_algebras.py +114 -0
- sage/categories/sets_with_grading.py +235 -0
- sage/categories/shephard_groups.py +43 -0
- sage/categories/signed_tensor.py +120 -0
- sage/categories/simplicial_complexes.py +134 -0
- sage/categories/simplicial_sets.py +1206 -0
- sage/categories/super_algebras.py +149 -0
- sage/categories/super_algebras_with_basis.py +144 -0
- sage/categories/super_hopf_algebras_with_basis.py +126 -0
- sage/categories/super_lie_conformal_algebras.py +193 -0
- sage/categories/super_modules.py +229 -0
- sage/categories/super_modules_with_basis.py +193 -0
- sage/categories/supercommutative_algebras.py +99 -0
- sage/categories/supercrystals.py +406 -0
- sage/categories/tensor.py +110 -0
- sage/categories/topological_spaces.py +170 -0
- sage/categories/triangular_kac_moody_algebras.py +439 -0
- sage/categories/tutorial.py +58 -0
- sage/categories/unique_factorization_domains.py +318 -0
- sage/categories/unital_algebras.py +426 -0
- sage/categories/vector_bundles.py +159 -0
- sage/categories/vector_spaces.py +357 -0
- sage/categories/weyl_groups.py +853 -0
- sage/combinat/all__sagemath_categories.py +34 -0
- sage/combinat/backtrack.py +180 -0
- sage/combinat/combinat.py +2269 -0
- sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/combinat_cython.pxd +6 -0
- sage/combinat/combinat_cython.pyx +390 -0
- sage/combinat/combination.py +796 -0
- sage/combinat/combinatorial_map.py +416 -0
- sage/combinat/composition.py +2192 -0
- sage/combinat/dlx.py +510 -0
- sage/combinat/integer_lists/__init__.py +7 -0
- sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/base.pxd +16 -0
- sage/combinat/integer_lists/base.pyx +713 -0
- sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/integer_lists/invlex.pxd +4 -0
- sage/combinat/integer_lists/invlex.pyx +1650 -0
- sage/combinat/integer_lists/lists.py +328 -0
- sage/combinat/integer_lists/nn.py +48 -0
- sage/combinat/integer_vector.py +1818 -0
- sage/combinat/integer_vector_weighted.py +413 -0
- sage/combinat/matrices/all__sagemath_categories.py +5 -0
- sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/matrices/dancing_links.pyx +1159 -0
- sage/combinat/matrices/dancing_links_c.h +380 -0
- sage/combinat/matrices/dlxcpp.py +136 -0
- sage/combinat/partition.py +10070 -0
- sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/combinat/permutation_cython.pxd +11 -0
- sage/combinat/permutation_cython.pyx +407 -0
- sage/combinat/q_analogues.py +1090 -0
- sage/combinat/ranker.py +268 -0
- sage/combinat/subset.py +1561 -0
- sage/combinat/subsets_hereditary.py +202 -0
- sage/combinat/subsets_pairwise.py +184 -0
- sage/combinat/tools.py +63 -0
- sage/combinat/tuple.py +348 -0
- sage/data_structures/all.py +2 -0
- sage/data_structures/all__sagemath_categories.py +2 -0
- sage/data_structures/binary_matrix.pxd +138 -0
- sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/bitset_base.pxd +926 -0
- sage/data_structures/bitset_base.pyx +117 -0
- sage/data_structures/bitset_intrinsics.h +487 -0
- sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/blas_dict.pxd +12 -0
- sage/data_structures/blas_dict.pyx +469 -0
- sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/list_of_pairs.pxd +16 -0
- sage/data_structures/list_of_pairs.pyx +122 -0
- sage/data_structures/mutable_poset.py +3312 -0
- sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/data_structures/pairing_heap.h +346 -0
- sage/data_structures/pairing_heap.pxd +88 -0
- sage/data_structures/pairing_heap.pyx +1464 -0
- sage/data_structures/sparse_bitset.pxd +62 -0
- sage/data_structures/stream.py +5070 -0
- sage/databases/all__sagemath_categories.py +7 -0
- sage/databases/sql_db.py +2236 -0
- sage/ext/all__sagemath_categories.py +3 -0
- sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/fast_eval.pxd +1 -0
- sage/ext/fast_eval.pyx +102 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_categories.py +2 -0
- sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_el.pxd +18 -0
- sage/ext/interpreters/wrapper_el.pyx +148 -0
- sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_py.pxd +17 -0
- sage/ext/interpreters/wrapper_py.pyx +133 -0
- sage/functions/airy.py +937 -0
- sage/functions/all.py +97 -0
- sage/functions/bessel.py +2102 -0
- sage/functions/error.py +784 -0
- sage/functions/exp_integral.py +1529 -0
- sage/functions/gamma.py +1087 -0
- sage/functions/generalized.py +672 -0
- sage/functions/hyperbolic.py +747 -0
- sage/functions/hypergeometric.py +1156 -0
- sage/functions/jacobi.py +1705 -0
- sage/functions/log.py +1402 -0
- sage/functions/min_max.py +338 -0
- sage/functions/orthogonal_polys.py +3106 -0
- sage/functions/other.py +2303 -0
- sage/functions/piecewise.py +1505 -0
- sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/functions/prime_pi.pyx +262 -0
- sage/functions/special.py +1212 -0
- sage/functions/spike_function.py +278 -0
- sage/functions/transcendental.py +690 -0
- sage/functions/trig.py +1062 -0
- sage/functions/wigner.py +726 -0
- sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/geometry/abc.pyx +82 -0
- sage/geometry/all__sagemath_categories.py +1 -0
- sage/groups/all__sagemath_categories.py +11 -0
- sage/groups/generic.py +1733 -0
- sage/groups/groups_catalog.py +113 -0
- sage/groups/perm_gps/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/all.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
- sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
- sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
- sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
- sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
- sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
- sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
- sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
- sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
- sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
- sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
- sage/interfaces/abc.py +140 -0
- sage/interfaces/all.py +58 -0
- sage/interfaces/all__sagemath_categories.py +1 -0
- sage/interfaces/expect.py +1643 -0
- sage/interfaces/interface.py +1682 -0
- sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/process.pxd +5 -0
- sage/interfaces/process.pyx +288 -0
- sage/interfaces/quit.py +167 -0
- sage/interfaces/sage0.py +604 -0
- sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/interfaces/sagespawn.pyx +308 -0
- sage/interfaces/tab_completion.py +101 -0
- sage/misc/all__sagemath_categories.py +78 -0
- sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/citation.pyx +159 -0
- sage/misc/converting_dict.py +293 -0
- sage/misc/defaults.py +129 -0
- sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/derivative.pyx +223 -0
- sage/misc/functional.py +2005 -0
- sage/misc/html.py +589 -0
- sage/misc/latex.py +2673 -0
- sage/misc/latex_macros.py +236 -0
- sage/misc/latex_standalone.py +1833 -0
- sage/misc/map_threaded.py +38 -0
- sage/misc/mathml.py +76 -0
- sage/misc/method_decorator.py +88 -0
- sage/misc/mrange.py +755 -0
- sage/misc/multireplace.py +41 -0
- sage/misc/object_multiplexer.py +92 -0
- sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/parser.pyx +1107 -0
- sage/misc/random_testing.py +264 -0
- sage/misc/rest_index_of_methods.py +377 -0
- sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/misc/stopgap.pyx +95 -0
- sage/misc/table.py +853 -0
- sage/monoids/all__sagemath_categories.py +1 -0
- sage/monoids/indexed_free_monoid.py +1071 -0
- sage/monoids/monoid.py +82 -0
- sage/numerical/all__sagemath_categories.py +1 -0
- sage/numerical/backends/all__sagemath_categories.py +1 -0
- sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_backend.pxd +61 -0
- sage/numerical/backends/generic_backend.pyx +1893 -0
- sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/numerical/backends/generic_sdp_backend.pxd +38 -0
- sage/numerical/backends/generic_sdp_backend.pyx +755 -0
- sage/parallel/all.py +6 -0
- sage/parallel/decorate.py +575 -0
- sage/parallel/map_reduce.py +1997 -0
- sage/parallel/multiprocessing_sage.py +76 -0
- sage/parallel/ncpus.py +35 -0
- sage/parallel/parallelism.py +364 -0
- sage/parallel/reference.py +47 -0
- sage/parallel/use_fork.py +333 -0
- sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/abc.pxd +31 -0
- sage/rings/abc.pyx +526 -0
- sage/rings/algebraic_closure_finite_field.py +1154 -0
- sage/rings/all__sagemath_categories.py +91 -0
- sage/rings/big_oh.py +227 -0
- sage/rings/continued_fraction.py +2754 -0
- sage/rings/continued_fraction_gosper.py +220 -0
- sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fast_arith.pxd +21 -0
- sage/rings/fast_arith.pyx +535 -0
- sage/rings/finite_rings/all__sagemath_categories.py +9 -0
- sage/rings/finite_rings/conway_polynomials.py +542 -0
- sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/element_base.pxd +12 -0
- sage/rings/finite_rings/element_base.pyx +1176 -0
- sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/finite_field_base.pxd +7 -0
- sage/rings/finite_rings/finite_field_base.pyx +2171 -0
- sage/rings/finite_rings/finite_field_constructor.py +827 -0
- sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
- sage/rings/finite_rings/galois_group.py +154 -0
- sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_finite_field.pxd +23 -0
- sage/rings/finite_rings/hom_finite_field.pyx +856 -0
- sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
- sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
- sage/rings/finite_rings/homset.py +357 -0
- sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/integer_mod.pxd +56 -0
- sage/rings/finite_rings/integer_mod.pyx +4586 -0
- sage/rings/finite_rings/integer_mod_limits.h +11 -0
- sage/rings/finite_rings/integer_mod_ring.py +2044 -0
- sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field.pxd +30 -0
- sage/rings/finite_rings/residue_field.pyx +1811 -0
- sage/rings/finite_rings/stdint.pxd +19 -0
- sage/rings/fraction_field.py +1452 -0
- sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/fraction_field_element.pyx +1357 -0
- sage/rings/function_field/all.py +7 -0
- sage/rings/function_field/all__sagemath_categories.py +2 -0
- sage/rings/function_field/constructor.py +218 -0
- sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element.pxd +11 -0
- sage/rings/function_field/element.pyx +1008 -0
- sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/element_rational.pyx +513 -0
- sage/rings/function_field/extensions.py +230 -0
- sage/rings/function_field/function_field.py +1468 -0
- sage/rings/function_field/function_field_rational.py +1005 -0
- sage/rings/function_field/ideal.py +1155 -0
- sage/rings/function_field/ideal_rational.py +629 -0
- sage/rings/function_field/jacobian_base.py +826 -0
- sage/rings/function_field/jacobian_hess.py +1053 -0
- sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
- sage/rings/function_field/maps.py +1039 -0
- sage/rings/function_field/order.py +281 -0
- sage/rings/function_field/order_basis.py +586 -0
- sage/rings/function_field/order_rational.py +576 -0
- sage/rings/function_field/place.py +426 -0
- sage/rings/function_field/place_rational.py +181 -0
- sage/rings/generic.py +320 -0
- sage/rings/homset.py +332 -0
- sage/rings/ideal.py +1885 -0
- sage/rings/ideal_monoid.py +215 -0
- sage/rings/infinity.py +1890 -0
- sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7874 -0
- sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/integer_ring.pxd +8 -0
- sage/rings/integer_ring.pyx +1693 -0
- sage/rings/laurent_series_ring.py +931 -0
- sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/laurent_series_ring_element.pxd +11 -0
- sage/rings/laurent_series_ring_element.pyx +1927 -0
- sage/rings/lazy_series.py +7815 -0
- sage/rings/lazy_series_ring.py +4356 -0
- sage/rings/localization.py +1043 -0
- sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/morphism.pxd +39 -0
- sage/rings/morphism.pyx +3299 -0
- sage/rings/multi_power_series_ring.py +1145 -0
- sage/rings/multi_power_series_ring_element.py +2184 -0
- sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/noncommutative_ideals.pyx +423 -0
- sage/rings/number_field/all__sagemath_categories.py +1 -0
- sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_base.pxd +8 -0
- sage/rings/number_field/number_field_base.pyx +507 -0
- sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/number_field/number_field_element_base.pxd +6 -0
- sage/rings/number_field/number_field_element_base.pyx +36 -0
- sage/rings/number_field/number_field_ideal.py +3550 -0
- sage/rings/padics/all__sagemath_categories.py +4 -0
- sage/rings/padics/local_generic.py +1670 -0
- sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/local_generic_element.pxd +5 -0
- sage/rings/padics/local_generic_element.pyx +1017 -0
- sage/rings/padics/misc.py +256 -0
- sage/rings/padics/padic_generic.py +1911 -0
- sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer.pxd +38 -0
- sage/rings/padics/pow_computer.pyx +671 -0
- sage/rings/padics/precision_error.py +24 -0
- sage/rings/polynomial/all__sagemath_categories.py +25 -0
- sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/cyclotomic.pyx +404 -0
- sage/rings/polynomial/flatten.py +711 -0
- sage/rings/polynomial/ideal.py +102 -0
- sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
- sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
- sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial.pxd +18 -0
- sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
- sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
- sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
- sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
- sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial.pxd +12 -0
- sage/rings/polynomial/multi_polynomial.pyx +3082 -0
- sage/rings/polynomial/multi_polynomial_element.py +2570 -0
- sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
- sage/rings/polynomial/multi_polynomial_ring.py +947 -0
- sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
- sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
- sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
- sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_compiled.pxd +59 -0
- sage/rings/polynomial/polynomial_compiled.pyx +509 -0
- sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_element.pxd +64 -0
- sage/rings/polynomial/polynomial_element.pyx +13255 -0
- sage/rings/polynomial/polynomial_element_generic.py +1637 -0
- sage/rings/polynomial/polynomial_fateman.py +97 -0
- sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
- sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
- sage/rings/polynomial/polynomial_ring.py +3784 -0
- sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
- sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
- sage/rings/polynomial/polynomial_singular_interface.py +549 -0
- sage/rings/polynomial/symmetric_ideal.py +989 -0
- sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/polynomial/symmetric_reduction.pxd +8 -0
- sage/rings/polynomial/symmetric_reduction.pyx +669 -0
- sage/rings/polynomial/term_order.py +2279 -0
- sage/rings/polynomial/toy_buchberger.py +449 -0
- sage/rings/polynomial/toy_d_basis.py +387 -0
- sage/rings/polynomial/toy_variety.py +362 -0
- sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_mpoly.pxd +9 -0
- sage/rings/power_series_mpoly.pyx +161 -0
- sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_poly.pxd +10 -0
- sage/rings/power_series_poly.pyx +1317 -0
- sage/rings/power_series_ring.py +1441 -0
- sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/power_series_ring_element.pxd +12 -0
- sage/rings/power_series_ring_element.pyx +3028 -0
- sage/rings/puiseux_series_ring.py +487 -0
- sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/puiseux_series_ring_element.pxd +7 -0
- sage/rings/puiseux_series_ring_element.pyx +1055 -0
- sage/rings/qqbar_decorators.py +167 -0
- sage/rings/quotient_ring.py +1598 -0
- sage/rings/quotient_ring_element.py +979 -0
- sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/rational.pxd +20 -0
- sage/rings/rational.pyx +4284 -0
- sage/rings/rational_field.py +1730 -0
- sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2218 -0
- sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/ring.pxd +30 -0
- sage/rings/ring.pyx +850 -0
- sage/rings/semirings/all.py +3 -0
- sage/rings/semirings/non_negative_integer_semiring.py +107 -0
- sage/rings/semirings/tropical_mpolynomial.py +972 -0
- sage/rings/semirings/tropical_polynomial.py +997 -0
- sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/semirings/tropical_semiring.pyx +676 -0
- sage/rings/semirings/tropical_variety.py +1701 -0
- sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/rings/sum_of_squares.pxd +3 -0
- sage/rings/sum_of_squares.pyx +336 -0
- sage/rings/tests.py +504 -0
- sage/schemes/affine/affine_homset.py +508 -0
- sage/schemes/affine/affine_morphism.py +1574 -0
- sage/schemes/affine/affine_point.py +460 -0
- sage/schemes/affine/affine_rational_point.py +308 -0
- sage/schemes/affine/affine_space.py +1264 -0
- sage/schemes/affine/affine_subscheme.py +592 -0
- sage/schemes/affine/all.py +25 -0
- sage/schemes/all__sagemath_categories.py +5 -0
- sage/schemes/generic/algebraic_scheme.py +2092 -0
- sage/schemes/generic/all.py +5 -0
- sage/schemes/generic/ambient_space.py +400 -0
- sage/schemes/generic/divisor.py +465 -0
- sage/schemes/generic/divisor_group.py +313 -0
- sage/schemes/generic/glue.py +84 -0
- sage/schemes/generic/homset.py +820 -0
- sage/schemes/generic/hypersurface.py +234 -0
- sage/schemes/generic/morphism.py +2107 -0
- sage/schemes/generic/point.py +237 -0
- sage/schemes/generic/scheme.py +1190 -0
- sage/schemes/generic/spec.py +199 -0
- sage/schemes/product_projective/all.py +6 -0
- sage/schemes/product_projective/homset.py +236 -0
- sage/schemes/product_projective/morphism.py +517 -0
- sage/schemes/product_projective/point.py +568 -0
- sage/schemes/product_projective/rational_point.py +550 -0
- sage/schemes/product_projective/space.py +1301 -0
- sage/schemes/product_projective/subscheme.py +466 -0
- sage/schemes/projective/all.py +24 -0
- sage/schemes/projective/proj_bdd_height.py +453 -0
- sage/schemes/projective/projective_homset.py +718 -0
- sage/schemes/projective/projective_morphism.py +2792 -0
- sage/schemes/projective/projective_point.py +1484 -0
- sage/schemes/projective/projective_rational_point.py +569 -0
- sage/schemes/projective/projective_space.py +2571 -0
- sage/schemes/projective/projective_subscheme.py +1574 -0
- sage/sets/all.py +17 -0
- sage/sets/cartesian_product.py +376 -0
- sage/sets/condition_set.py +525 -0
- sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/disjoint_set.pxd +36 -0
- sage/sets/disjoint_set.pyx +998 -0
- sage/sets/disjoint_union_enumerated_sets.py +625 -0
- sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/family.pxd +12 -0
- sage/sets/family.pyx +1556 -0
- sage/sets/finite_enumerated_set.py +406 -0
- sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/finite_set_map_cy.pxd +34 -0
- sage/sets/finite_set_map_cy.pyx +708 -0
- sage/sets/finite_set_maps.py +591 -0
- sage/sets/image_set.py +448 -0
- sage/sets/integer_range.py +829 -0
- sage/sets/non_negative_integers.py +241 -0
- sage/sets/positive_integers.py +93 -0
- sage/sets/primes.py +188 -0
- sage/sets/real_set.py +2760 -0
- sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/sets/recursively_enumerated_set.pxd +31 -0
- sage/sets/recursively_enumerated_set.pyx +2082 -0
- sage/sets/set.py +2083 -0
- sage/sets/set_from_iterator.py +1021 -0
- sage/sets/totally_ordered_finite_set.py +329 -0
- sage/symbolic/all__sagemath_categories.py +1 -0
- sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/symbolic/function.pxd +29 -0
- sage/symbolic/function.pyx +1488 -0
- sage/symbolic/symbols.py +56 -0
- sage/tests/all__sagemath_categories.py +1 -0
- sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
- sage/tests/stl_vector.pyx +171 -0
- sage/typeset/all.py +6 -0
- sage/typeset/ascii_art.py +295 -0
- sage/typeset/character_art.py +789 -0
- sage/typeset/character_art_factory.py +572 -0
- sage/typeset/symbols.py +334 -0
- sage/typeset/unicode_art.py +183 -0
- sage/typeset/unicode_characters.py +101 -0
|
@@ -0,0 +1,1005 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Function Fields: rational
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# *****************************************************************************
|
|
7
|
+
# Copyright (C) 2010 William Stein <wstein@gmail.com>
|
|
8
|
+
# 2010 Robert Bradshaw <robertwb@math.washington.edu>
|
|
9
|
+
# 2011-2018 Julian Rüth <julian.rueth@gmail.com>
|
|
10
|
+
# 2011 Maarten Derickx <m.derickx.student@gmail.com>
|
|
11
|
+
# 2011 Syed Ahmad Lavasani
|
|
12
|
+
# 2013-2014 Simon King
|
|
13
|
+
# 2017 Dean Bisogno
|
|
14
|
+
# 2017 Alyson Deines
|
|
15
|
+
# 2017-2019 David Roe
|
|
16
|
+
# 2017-2022 Kwankyu Lee
|
|
17
|
+
# 2018 Marc Mezzarobba
|
|
18
|
+
# 2018 Wilfried Luebbe
|
|
19
|
+
# 2019 Brent Baccala
|
|
20
|
+
# 2022 Frédéric Chapoton
|
|
21
|
+
# 2022 Gonzalo Tornaría
|
|
22
|
+
#
|
|
23
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
24
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
25
|
+
# the License, or (at your option) any later version.
|
|
26
|
+
# http://www.gnu.org/licenses/
|
|
27
|
+
# *****************************************************************************
|
|
28
|
+
|
|
29
|
+
from sage.arith.functions import lcm
|
|
30
|
+
from sage.misc.cachefunc import cached_method
|
|
31
|
+
from sage.misc.lazy_import import LazyImport
|
|
32
|
+
from sage.structure.category_object import CategoryObject
|
|
33
|
+
from sage.rings.integer import Integer
|
|
34
|
+
from sage.categories.homset import Hom
|
|
35
|
+
from sage.categories.function_fields import FunctionFields
|
|
36
|
+
|
|
37
|
+
from .element import FunctionFieldElement
|
|
38
|
+
from .element_rational import FunctionFieldElement_rational
|
|
39
|
+
from .function_field import FunctionField
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class RationalFunctionField(FunctionField):
|
|
43
|
+
"""
|
|
44
|
+
Rational function field in one variable, over an arbitrary base field.
|
|
45
|
+
|
|
46
|
+
INPUT:
|
|
47
|
+
|
|
48
|
+
- ``constant_field`` -- arbitrary field
|
|
49
|
+
|
|
50
|
+
- ``names`` -- string or tuple of length 1
|
|
51
|
+
|
|
52
|
+
EXAMPLES::
|
|
53
|
+
|
|
54
|
+
sage: K.<t> = FunctionField(GF(3)); K
|
|
55
|
+
Rational function field in t over Finite Field of size 3
|
|
56
|
+
sage: K.gen()
|
|
57
|
+
t
|
|
58
|
+
sage: 1/t + t^3 + 5
|
|
59
|
+
(t^4 + 2*t + 1)/t
|
|
60
|
+
|
|
61
|
+
sage: K.<t> = FunctionField(QQ); K
|
|
62
|
+
Rational function field in t over Rational Field
|
|
63
|
+
sage: K.gen()
|
|
64
|
+
t
|
|
65
|
+
sage: 1/t + t^3 + 5
|
|
66
|
+
(t^4 + 5*t + 1)/t
|
|
67
|
+
|
|
68
|
+
There are various ways to get at the underlying fields and rings
|
|
69
|
+
associated to a rational function field::
|
|
70
|
+
|
|
71
|
+
sage: K.<t> = FunctionField(GF(7))
|
|
72
|
+
sage: K.base_field()
|
|
73
|
+
Rational function field in t over Finite Field of size 7
|
|
74
|
+
sage: K.field()
|
|
75
|
+
Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7
|
|
76
|
+
sage: K.constant_field()
|
|
77
|
+
Finite Field of size 7
|
|
78
|
+
sage: K.maximal_order()
|
|
79
|
+
Maximal order of Rational function field in t over Finite Field of size 7
|
|
80
|
+
|
|
81
|
+
sage: K.<t> = FunctionField(QQ)
|
|
82
|
+
sage: K.base_field()
|
|
83
|
+
Rational function field in t over Rational Field
|
|
84
|
+
sage: K.field()
|
|
85
|
+
Fraction Field of Univariate Polynomial Ring in t over Rational Field
|
|
86
|
+
sage: K.constant_field()
|
|
87
|
+
Rational Field
|
|
88
|
+
sage: K.maximal_order()
|
|
89
|
+
Maximal order of Rational function field in t over Rational Field
|
|
90
|
+
|
|
91
|
+
We define a morphism::
|
|
92
|
+
|
|
93
|
+
sage: K.<t> = FunctionField(QQ)
|
|
94
|
+
sage: L = FunctionField(QQ, 'tbar') # give variable name as second input
|
|
95
|
+
sage: K.hom(L.gen())
|
|
96
|
+
Function Field morphism:
|
|
97
|
+
From: Rational function field in t over Rational Field
|
|
98
|
+
To: Rational function field in tbar over Rational Field
|
|
99
|
+
Defn: t |--> tbar
|
|
100
|
+
|
|
101
|
+
Here are some calculations over a number field::
|
|
102
|
+
|
|
103
|
+
sage: R.<x> = FunctionField(QQ)
|
|
104
|
+
sage: L.<y> = R[]
|
|
105
|
+
sage: F.<y> = R.extension(y^2 - (x^2+1)) # needs sage.rings.function_field
|
|
106
|
+
sage: (y/x).divisor() # needs sage.rings.function_field
|
|
107
|
+
- Place (x, y - 1)
|
|
108
|
+
- Place (x, y + 1)
|
|
109
|
+
+ Place (x^2 + 1, y)
|
|
110
|
+
|
|
111
|
+
sage: # needs sage.rings.number_field
|
|
112
|
+
sage: A.<z> = QQ[]
|
|
113
|
+
sage: NF.<i> = NumberField(z^2 + 1)
|
|
114
|
+
sage: R.<x> = FunctionField(NF)
|
|
115
|
+
sage: L.<y> = R[]
|
|
116
|
+
sage: F.<y> = R.extension(y^2 - (x^2+1)) # needs sage.rings.function_field
|
|
117
|
+
sage: (x/y*x.differential()).divisor() # needs sage.rings.function_field
|
|
118
|
+
-2*Place (1/x, 1/x*y - 1)
|
|
119
|
+
- 2*Place (1/x, 1/x*y + 1)
|
|
120
|
+
+ Place (x, y - 1)
|
|
121
|
+
+ Place (x, y + 1)
|
|
122
|
+
sage: (x/y).divisor() # needs sage.rings.function_field
|
|
123
|
+
- Place (x - i, y)
|
|
124
|
+
+ Place (x, y - 1)
|
|
125
|
+
+ Place (x, y + 1)
|
|
126
|
+
- Place (x + i, y)
|
|
127
|
+
"""
|
|
128
|
+
Element = FunctionFieldElement_rational
|
|
129
|
+
|
|
130
|
+
def __init__(self, constant_field, names, category=None):
|
|
131
|
+
"""
|
|
132
|
+
Initialize.
|
|
133
|
+
|
|
134
|
+
EXAMPLES::
|
|
135
|
+
|
|
136
|
+
sage: K.<t> = FunctionField(CC); K # needs sage.rings.real_mpfr
|
|
137
|
+
Rational function field in t over Complex Field with 53 bits of precision
|
|
138
|
+
sage: TestSuite(K).run() # long time (5s) # needs sage.rings.real_mpfr
|
|
139
|
+
|
|
140
|
+
sage: FunctionField(QQ[I], 'alpha') # needs sage.rings.number_field
|
|
141
|
+
Rational function field in alpha over
|
|
142
|
+
Number Field in I with defining polynomial x^2 + 1 with I = 1*I
|
|
143
|
+
|
|
144
|
+
Must be over a field::
|
|
145
|
+
|
|
146
|
+
sage: FunctionField(ZZ, 't')
|
|
147
|
+
Traceback (most recent call last):
|
|
148
|
+
...
|
|
149
|
+
TypeError: constant_field must be a field
|
|
150
|
+
"""
|
|
151
|
+
if names is None:
|
|
152
|
+
raise ValueError("variable name must be specified")
|
|
153
|
+
elif not isinstance(names, tuple):
|
|
154
|
+
names = (names, )
|
|
155
|
+
if not constant_field.is_field():
|
|
156
|
+
raise TypeError("constant_field must be a field")
|
|
157
|
+
|
|
158
|
+
self._constant_field = constant_field
|
|
159
|
+
|
|
160
|
+
FunctionField.__init__(self, self, names=names, category=FunctionFields().or_subcategory(category))
|
|
161
|
+
|
|
162
|
+
from .place_rational import FunctionFieldPlace_rational
|
|
163
|
+
self._place_class = FunctionFieldPlace_rational
|
|
164
|
+
|
|
165
|
+
R = constant_field[names[0]]
|
|
166
|
+
self._hash = hash((constant_field, names))
|
|
167
|
+
self._ring = R
|
|
168
|
+
self._field = R.fraction_field()
|
|
169
|
+
|
|
170
|
+
hom = Hom(self._field, self)
|
|
171
|
+
from .maps import FractionFieldToFunctionField
|
|
172
|
+
self.register_coercion(hom.__make_element_class__(FractionFieldToFunctionField)(hom.domain(), hom.codomain()))
|
|
173
|
+
|
|
174
|
+
from sage.categories.sets_with_partial_maps import SetsWithPartialMaps
|
|
175
|
+
from sage.categories.morphism import SetMorphism
|
|
176
|
+
R.register_conversion(SetMorphism(self.Hom(R, SetsWithPartialMaps()), self._to_polynomial))
|
|
177
|
+
|
|
178
|
+
self._gen = self(R.gen())
|
|
179
|
+
|
|
180
|
+
def __reduce__(self):
|
|
181
|
+
"""
|
|
182
|
+
Return the arguments which were used to create this instance. The
|
|
183
|
+
rationale for this is explained in the documentation of
|
|
184
|
+
:class:`UniqueRepresentation`.
|
|
185
|
+
|
|
186
|
+
EXAMPLES::
|
|
187
|
+
|
|
188
|
+
sage: K.<x> = FunctionField(QQ)
|
|
189
|
+
sage: clazz,args = K.__reduce__()
|
|
190
|
+
sage: clazz(*args)
|
|
191
|
+
Rational function field in x over Rational Field
|
|
192
|
+
"""
|
|
193
|
+
from .constructor import FunctionField
|
|
194
|
+
return FunctionField, (self._constant_field, self._names)
|
|
195
|
+
|
|
196
|
+
def __hash__(self):
|
|
197
|
+
"""
|
|
198
|
+
Return hash of the function field.
|
|
199
|
+
|
|
200
|
+
The hash is formed from the constant field and the variable names.
|
|
201
|
+
|
|
202
|
+
EXAMPLES::
|
|
203
|
+
|
|
204
|
+
sage: K.<t> = FunctionField(QQ)
|
|
205
|
+
sage: hash(K) == hash((K.constant_base_field(), K.variable_names()))
|
|
206
|
+
True
|
|
207
|
+
"""
|
|
208
|
+
return self._hash
|
|
209
|
+
|
|
210
|
+
def _repr_(self):
|
|
211
|
+
"""
|
|
212
|
+
Return string representation of the function field.
|
|
213
|
+
|
|
214
|
+
EXAMPLES::
|
|
215
|
+
|
|
216
|
+
sage: K.<t> = FunctionField(QQ)
|
|
217
|
+
sage: K._repr_()
|
|
218
|
+
'Rational function field in t over Rational Field'
|
|
219
|
+
"""
|
|
220
|
+
return "Rational function field in %s over %s" % (
|
|
221
|
+
self.variable_name(), self._constant_field)
|
|
222
|
+
|
|
223
|
+
def _element_constructor_(self, x):
|
|
224
|
+
r"""
|
|
225
|
+
Coerce ``x`` into an element of the function field, possibly not canonically.
|
|
226
|
+
|
|
227
|
+
EXAMPLES::
|
|
228
|
+
|
|
229
|
+
sage: K.<t> = FunctionField(QQ)
|
|
230
|
+
sage: a = K._element_constructor_(K.maximal_order().gen()); a
|
|
231
|
+
t
|
|
232
|
+
sage: a.parent()
|
|
233
|
+
Rational function field in t over Rational Field
|
|
234
|
+
|
|
235
|
+
TESTS:
|
|
236
|
+
|
|
237
|
+
Conversion of a string::
|
|
238
|
+
|
|
239
|
+
sage: K('t')
|
|
240
|
+
t
|
|
241
|
+
sage: K('1/t')
|
|
242
|
+
1/t
|
|
243
|
+
|
|
244
|
+
Conversion of a constant polynomial over the function field::
|
|
245
|
+
|
|
246
|
+
sage: K(K.polynomial_ring().one())
|
|
247
|
+
1
|
|
248
|
+
|
|
249
|
+
Some indirect test of conversion::
|
|
250
|
+
|
|
251
|
+
sage: S.<x, y> = K[]
|
|
252
|
+
sage: I = S * [x^2 - y^2, y - t]
|
|
253
|
+
sage: I.groebner_basis() # needs sage.rings.function_field
|
|
254
|
+
[x^2 - t^2, y - t]
|
|
255
|
+
"""
|
|
256
|
+
if isinstance(x, FunctionFieldElement):
|
|
257
|
+
return self.element_class(self, self._field(x._x))
|
|
258
|
+
try:
|
|
259
|
+
x = self._field(x)
|
|
260
|
+
except TypeError as Err:
|
|
261
|
+
try:
|
|
262
|
+
if x.parent() is self.polynomial_ring():
|
|
263
|
+
return x[0]
|
|
264
|
+
except AttributeError:
|
|
265
|
+
pass
|
|
266
|
+
raise Err
|
|
267
|
+
return self.element_class(self, x)
|
|
268
|
+
|
|
269
|
+
def _to_constant_base_field(self, f):
|
|
270
|
+
r"""
|
|
271
|
+
Return ``f`` as an element of the constant base field.
|
|
272
|
+
|
|
273
|
+
INPUT:
|
|
274
|
+
|
|
275
|
+
- ``f`` -- element of the rational function field which is a
|
|
276
|
+
constant of the underlying rational function field
|
|
277
|
+
|
|
278
|
+
EXAMPLES::
|
|
279
|
+
|
|
280
|
+
sage: K.<x> = FunctionField(QQ)
|
|
281
|
+
sage: K._to_constant_base_field(K(1))
|
|
282
|
+
1
|
|
283
|
+
sage: K._to_constant_base_field(K(x))
|
|
284
|
+
Traceback (most recent call last):
|
|
285
|
+
...
|
|
286
|
+
ValueError: only constants can be converted into the constant base field but x is not a constant
|
|
287
|
+
|
|
288
|
+
TESTS:
|
|
289
|
+
|
|
290
|
+
Verify that :issue:`21872` has been resolved::
|
|
291
|
+
|
|
292
|
+
sage: K(1) in QQ
|
|
293
|
+
True
|
|
294
|
+
sage: x in QQ
|
|
295
|
+
False
|
|
296
|
+
"""
|
|
297
|
+
K = self.constant_base_field()
|
|
298
|
+
if f.denominator() in K and f.numerator() in K:
|
|
299
|
+
# When K is not exact, f.denominator() might not be an exact 1, so
|
|
300
|
+
# we need to divide explicitly to get the correct precision
|
|
301
|
+
return K(f.numerator()) / K(f.denominator())
|
|
302
|
+
raise ValueError("only constants can be converted into the constant base field but %r is not a constant" % (f,))
|
|
303
|
+
|
|
304
|
+
def _to_polynomial(self, f):
|
|
305
|
+
"""
|
|
306
|
+
If ``f`` is integral, return it as a polynomial.
|
|
307
|
+
|
|
308
|
+
INPUT:
|
|
309
|
+
|
|
310
|
+
- ``f`` -- an element of this rational function field whose denominator
|
|
311
|
+
is a constant
|
|
312
|
+
|
|
313
|
+
EXAMPLES::
|
|
314
|
+
|
|
315
|
+
sage: K.<x> = FunctionField(QQ)
|
|
316
|
+
sage: K._ring(x) # indirect doctest
|
|
317
|
+
x
|
|
318
|
+
"""
|
|
319
|
+
K = f.parent().constant_base_field()
|
|
320
|
+
if f.denominator() in K:
|
|
321
|
+
return f.numerator() / K(f.denominator())
|
|
322
|
+
raise ValueError("only polynomials can be converted to the underlying polynomial ring")
|
|
323
|
+
|
|
324
|
+
def _to_bivariate_polynomial(self, f):
|
|
325
|
+
"""
|
|
326
|
+
Convert ``f`` from a univariate polynomial over the rational function
|
|
327
|
+
field into a bivariate polynomial and a denominator.
|
|
328
|
+
|
|
329
|
+
INPUT:
|
|
330
|
+
|
|
331
|
+
- ``f`` -- univariate polynomial over the function field
|
|
332
|
+
|
|
333
|
+
OUTPUT: bivariate polynomial, denominator
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: R.<t> = FunctionField(GF(7))
|
|
338
|
+
sage: S.<X> = R[]
|
|
339
|
+
sage: f = (1/t)*(X^4 - 1/t^2)*(X^3 - t^3)
|
|
340
|
+
sage: R._to_bivariate_polynomial(f)
|
|
341
|
+
(X^7*t^2 - X^4*t^5 - X^3 + t^3, t^3)
|
|
342
|
+
"""
|
|
343
|
+
v = f.list()
|
|
344
|
+
denom = lcm([a.denominator() for a in v])
|
|
345
|
+
S = denom.parent()
|
|
346
|
+
x, t = S.base_ring()['%s,%s' % (f.parent().variable_name(),
|
|
347
|
+
self.variable_name())].gens()
|
|
348
|
+
phi = S.hom([t])
|
|
349
|
+
return sum([phi((denom * v[i]).numerator()) * x**i for i in range(len(v))]), denom
|
|
350
|
+
|
|
351
|
+
def _factor_univariate_polynomial(self, f, proof=None):
|
|
352
|
+
"""
|
|
353
|
+
Factor the univariate polynomial f over the function field.
|
|
354
|
+
|
|
355
|
+
INPUT:
|
|
356
|
+
|
|
357
|
+
- ``f`` -- univariate polynomial over the function field
|
|
358
|
+
|
|
359
|
+
EXAMPLES:
|
|
360
|
+
|
|
361
|
+
We do a factorization over the function field over the rationals::
|
|
362
|
+
|
|
363
|
+
sage: R.<t> = FunctionField(QQ)
|
|
364
|
+
sage: S.<X> = R[]
|
|
365
|
+
sage: f = (1/t)*(X^4 - 1/t^2)*(X^3 - t^3)
|
|
366
|
+
sage: f.factor() # indirect doctest # needs sage.libs.singular
|
|
367
|
+
(1/t) * (X - t) * (X^2 - 1/t) * (X^2 + 1/t) * (X^2 + t*X + t^2)
|
|
368
|
+
sage: f.factor().prod() == f # needs sage.libs.singular
|
|
369
|
+
True
|
|
370
|
+
|
|
371
|
+
We do a factorization over a finite prime field::
|
|
372
|
+
|
|
373
|
+
sage: R.<t> = FunctionField(GF(7))
|
|
374
|
+
sage: S.<X> = R[]
|
|
375
|
+
sage: f = (1/t)*(X^4 - 1/t^2)*(X^3 - t^3)
|
|
376
|
+
sage: f.factor() # needs sage.libs.pari
|
|
377
|
+
(1/t) * (X + 3*t) * (X + 5*t) * (X + 6*t) * (X^2 + 1/t) * (X^2 + 6/t)
|
|
378
|
+
sage: f.factor().prod() == f # needs sage.libs.pari
|
|
379
|
+
True
|
|
380
|
+
|
|
381
|
+
Factoring over a function field over a non-prime finite field::
|
|
382
|
+
|
|
383
|
+
sage: # needs sage.rings.finite_rings
|
|
384
|
+
sage: k.<a> = GF(9)
|
|
385
|
+
sage: R.<t> = FunctionField(k)
|
|
386
|
+
sage: S.<X> = R[]
|
|
387
|
+
sage: f = (1/t)*(X^3 - a*t^3)
|
|
388
|
+
sage: f.factor()
|
|
389
|
+
(1/t) * (X + (a + 2)*t)^3
|
|
390
|
+
sage: f.factor().prod() == f
|
|
391
|
+
True
|
|
392
|
+
|
|
393
|
+
Factoring over a function field over a tower of finite fields::
|
|
394
|
+
|
|
395
|
+
sage: # needs sage.rings.finite_rings
|
|
396
|
+
sage: k.<a> = GF(4)
|
|
397
|
+
sage: R.<b> = k[]
|
|
398
|
+
sage: l.<b> = k.extension(b^2 + b + a)
|
|
399
|
+
sage: K.<x> = FunctionField(l)
|
|
400
|
+
sage: R.<t> = K[]
|
|
401
|
+
sage: F = t*x
|
|
402
|
+
sage: F.factor(proof=False)
|
|
403
|
+
(x) * t
|
|
404
|
+
"""
|
|
405
|
+
old_variable_name = f.variable_name()
|
|
406
|
+
# the variables of the bivariate polynomial must be distinct
|
|
407
|
+
if self.variable_name() == f.variable_name():
|
|
408
|
+
# replace x with xx to make the variable names distinct
|
|
409
|
+
f = f.change_variable_name(old_variable_name + old_variable_name)
|
|
410
|
+
|
|
411
|
+
F, d = self._to_bivariate_polynomial(f)
|
|
412
|
+
fac = F.factor(proof=proof)
|
|
413
|
+
x = f.parent().gen()
|
|
414
|
+
t = f.parent().base_ring().gen()
|
|
415
|
+
phi = F.parent().hom([x, t])
|
|
416
|
+
v = [(phi(P), e) for P, e in fac]
|
|
417
|
+
unit = phi(fac.unit()) / d
|
|
418
|
+
w = []
|
|
419
|
+
for a, e in v:
|
|
420
|
+
c = a.leading_coefficient()
|
|
421
|
+
a = a / c
|
|
422
|
+
# undo any variable substitution that we introduced for the bivariate polynomial
|
|
423
|
+
if old_variable_name != a.variable_name():
|
|
424
|
+
a = a.change_variable_name(old_variable_name)
|
|
425
|
+
unit *= (c**e)
|
|
426
|
+
if a.is_unit():
|
|
427
|
+
unit *= a**e
|
|
428
|
+
else:
|
|
429
|
+
w.append((a, e))
|
|
430
|
+
from sage.structure.factorization import Factorization
|
|
431
|
+
return Factorization(w, unit=unit)
|
|
432
|
+
|
|
433
|
+
def extension(self, f, names=None):
|
|
434
|
+
"""
|
|
435
|
+
Create an extension `L = K[y]/(f(y))` of the rational function field.
|
|
436
|
+
|
|
437
|
+
INPUT:
|
|
438
|
+
|
|
439
|
+
- ``f`` -- univariate polynomial over self
|
|
440
|
+
|
|
441
|
+
- ``names`` -- string or length-1 tuple
|
|
442
|
+
|
|
443
|
+
OUTPUT: a function field
|
|
444
|
+
|
|
445
|
+
EXAMPLES::
|
|
446
|
+
|
|
447
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
448
|
+
sage: K.extension(y^5 - x^3 - 3*x + x*y) # needs sage.rings.function_field
|
|
449
|
+
Function field in y defined by y^5 + x*y - x^3 - 3*x
|
|
450
|
+
|
|
451
|
+
A nonintegral defining polynomial::
|
|
452
|
+
|
|
453
|
+
sage: K.<t> = FunctionField(QQ); R.<y> = K[]
|
|
454
|
+
sage: K.extension(y^3 + (1/t)*y + t^3/(t+1)) # needs sage.rings.function_field
|
|
455
|
+
Function field in y defined by y^3 + 1/t*y + t^3/(t + 1)
|
|
456
|
+
|
|
457
|
+
The defining polynomial need not be monic or integral::
|
|
458
|
+
|
|
459
|
+
sage: K.extension(t*y^3 + (1/t)*y + t^3/(t+1)) # needs sage.rings.function_field
|
|
460
|
+
Function field in y defined by t*y^3 + 1/t*y + t^3/(t + 1)
|
|
461
|
+
"""
|
|
462
|
+
from . import constructor
|
|
463
|
+
return constructor.FunctionFieldExtension(f, names)
|
|
464
|
+
|
|
465
|
+
@cached_method
|
|
466
|
+
def polynomial_ring(self, var='x'):
|
|
467
|
+
"""
|
|
468
|
+
Return a polynomial ring in one variable over the rational function field.
|
|
469
|
+
|
|
470
|
+
INPUT:
|
|
471
|
+
|
|
472
|
+
- ``var`` -- string; name of the variable
|
|
473
|
+
|
|
474
|
+
EXAMPLES::
|
|
475
|
+
|
|
476
|
+
sage: K.<x> = FunctionField(QQ)
|
|
477
|
+
sage: K.polynomial_ring()
|
|
478
|
+
Univariate Polynomial Ring in x over Rational function field in x over Rational Field
|
|
479
|
+
sage: K.polynomial_ring('T')
|
|
480
|
+
Univariate Polynomial Ring in T over Rational function field in x over Rational Field
|
|
481
|
+
"""
|
|
482
|
+
return self[var]
|
|
483
|
+
|
|
484
|
+
@cached_method(key=lambda self, base, basis, map: map)
|
|
485
|
+
def free_module(self, base=None, basis=None, map=True):
|
|
486
|
+
"""
|
|
487
|
+
Return a vector space `V` and isomorphisms from the field to `V` and
|
|
488
|
+
from `V` to the field.
|
|
489
|
+
|
|
490
|
+
This function allows us to identify the elements of this field with
|
|
491
|
+
elements of a one-dimensional vector space over the field itself. This
|
|
492
|
+
method exists so that all function fields (rational or not) have the
|
|
493
|
+
same interface.
|
|
494
|
+
|
|
495
|
+
INPUT:
|
|
496
|
+
|
|
497
|
+
- ``base`` -- the base field of the vector space; must be the function
|
|
498
|
+
field itself (the default)
|
|
499
|
+
|
|
500
|
+
- ``basis`` -- (ignored) a basis for the vector space
|
|
501
|
+
|
|
502
|
+
- ``map`` -- (default: ``True``) whether to return maps to and from the
|
|
503
|
+
vector space
|
|
504
|
+
|
|
505
|
+
OUTPUT:
|
|
506
|
+
|
|
507
|
+
- a vector space `V` over base field
|
|
508
|
+
|
|
509
|
+
- an isomorphism from `V` to the field
|
|
510
|
+
|
|
511
|
+
- the inverse isomorphism from the field to `V`
|
|
512
|
+
|
|
513
|
+
EXAMPLES::
|
|
514
|
+
|
|
515
|
+
sage: K.<x> = FunctionField(QQ)
|
|
516
|
+
sage: K.free_module() # needs sage.modules
|
|
517
|
+
(Vector space of dimension 1 over Rational function field in x over Rational Field,
|
|
518
|
+
Isomorphism:
|
|
519
|
+
From: Vector space of dimension 1 over Rational function field in x over Rational Field
|
|
520
|
+
To: Rational function field in x over Rational Field,
|
|
521
|
+
Isomorphism:
|
|
522
|
+
From: Rational function field in x over Rational Field
|
|
523
|
+
To: Vector space of dimension 1 over Rational function field in x over Rational Field)
|
|
524
|
+
|
|
525
|
+
TESTS::
|
|
526
|
+
|
|
527
|
+
sage: K.free_module() # needs sage.modules
|
|
528
|
+
(Vector space of dimension 1 over Rational function field in x over Rational Field,
|
|
529
|
+
Isomorphism:
|
|
530
|
+
From: Vector space of dimension 1 over Rational function field in x over Rational Field
|
|
531
|
+
To: Rational function field in x over Rational Field,
|
|
532
|
+
Isomorphism:
|
|
533
|
+
From: Rational function field in x over Rational Field
|
|
534
|
+
To: Vector space of dimension 1 over Rational function field in x over Rational Field)
|
|
535
|
+
"""
|
|
536
|
+
if basis is not None:
|
|
537
|
+
raise NotImplementedError
|
|
538
|
+
from .maps import MapVectorSpaceToFunctionField, MapFunctionFieldToVectorSpace
|
|
539
|
+
if base is None:
|
|
540
|
+
base = self
|
|
541
|
+
elif base is not self:
|
|
542
|
+
raise ValueError("base must be the rational function field itself")
|
|
543
|
+
V = base**1
|
|
544
|
+
if not map:
|
|
545
|
+
return V
|
|
546
|
+
from_V = MapVectorSpaceToFunctionField(V, self)
|
|
547
|
+
to_V = MapFunctionFieldToVectorSpace(self, V)
|
|
548
|
+
return (V, from_V, to_V)
|
|
549
|
+
|
|
550
|
+
def random_element(self, *args, **kwds):
|
|
551
|
+
"""
|
|
552
|
+
Create a random element of the rational function field.
|
|
553
|
+
|
|
554
|
+
Parameters are passed to the random_element method of the
|
|
555
|
+
underlying fraction field.
|
|
556
|
+
|
|
557
|
+
EXAMPLES::
|
|
558
|
+
|
|
559
|
+
sage: FunctionField(QQ,'alpha').random_element() # random
|
|
560
|
+
(-1/2*alpha^2 - 4)/(-12*alpha^2 + 1/2*alpha - 1/95)
|
|
561
|
+
"""
|
|
562
|
+
return self(self._field.random_element(*args, **kwds))
|
|
563
|
+
|
|
564
|
+
def degree(self, base=None):
|
|
565
|
+
"""
|
|
566
|
+
Return the degree over the base field of the rational function
|
|
567
|
+
field. Since the base field is the rational function field itself, the
|
|
568
|
+
degree is 1.
|
|
569
|
+
|
|
570
|
+
INPUT:
|
|
571
|
+
|
|
572
|
+
- ``base`` -- the base field of the vector space; must be the function
|
|
573
|
+
field itself (the default)
|
|
574
|
+
|
|
575
|
+
EXAMPLES::
|
|
576
|
+
|
|
577
|
+
sage: K.<t> = FunctionField(QQ)
|
|
578
|
+
sage: K.degree()
|
|
579
|
+
1
|
|
580
|
+
"""
|
|
581
|
+
if base is None:
|
|
582
|
+
base = self
|
|
583
|
+
elif base is not self:
|
|
584
|
+
raise ValueError("base must be the rational function field itself")
|
|
585
|
+
from sage.rings.integer_ring import ZZ
|
|
586
|
+
return ZZ(1)
|
|
587
|
+
|
|
588
|
+
def gen(self, n=0):
|
|
589
|
+
"""
|
|
590
|
+
Return the ``n``-th generator of the function field. If ``n`` is not
|
|
591
|
+
0, then an :class:` IndexError` is raised.
|
|
592
|
+
|
|
593
|
+
EXAMPLES::
|
|
594
|
+
|
|
595
|
+
sage: K.<t> = FunctionField(QQ); K.gen()
|
|
596
|
+
t
|
|
597
|
+
sage: K.gen().parent()
|
|
598
|
+
Rational function field in t over Rational Field
|
|
599
|
+
sage: K.gen(1)
|
|
600
|
+
Traceback (most recent call last):
|
|
601
|
+
...
|
|
602
|
+
IndexError: Only one generator.
|
|
603
|
+
"""
|
|
604
|
+
if n != 0:
|
|
605
|
+
raise IndexError("Only one generator.")
|
|
606
|
+
return self._gen
|
|
607
|
+
|
|
608
|
+
def ngens(self):
|
|
609
|
+
"""
|
|
610
|
+
Return the number of generators, which is 1.
|
|
611
|
+
|
|
612
|
+
EXAMPLES::
|
|
613
|
+
|
|
614
|
+
sage: K.<t> = FunctionField(QQ)
|
|
615
|
+
sage: K.ngens()
|
|
616
|
+
1
|
|
617
|
+
"""
|
|
618
|
+
return 1
|
|
619
|
+
|
|
620
|
+
def base_field(self):
|
|
621
|
+
"""
|
|
622
|
+
Return the base field of the rational function field, which is just
|
|
623
|
+
the function field itself.
|
|
624
|
+
|
|
625
|
+
EXAMPLES::
|
|
626
|
+
|
|
627
|
+
sage: K.<t> = FunctionField(GF(7))
|
|
628
|
+
sage: K.base_field()
|
|
629
|
+
Rational function field in t over Finite Field of size 7
|
|
630
|
+
"""
|
|
631
|
+
return self
|
|
632
|
+
|
|
633
|
+
def hom(self, im_gens, base_morphism=None):
|
|
634
|
+
"""
|
|
635
|
+
Create a homomorphism from ``self`` to another ring.
|
|
636
|
+
|
|
637
|
+
INPUT:
|
|
638
|
+
|
|
639
|
+
- ``im_gens`` -- exactly one element of some ring. It must be
|
|
640
|
+
invertible and transcendental over the image of
|
|
641
|
+
``base_morphism``; this is not checked.
|
|
642
|
+
|
|
643
|
+
- ``base_morphism`` -- a homomorphism from the base field into the
|
|
644
|
+
other ring; if ``None``, try to use a coercion map
|
|
645
|
+
|
|
646
|
+
OUTPUT: a map between function fields
|
|
647
|
+
|
|
648
|
+
EXAMPLES:
|
|
649
|
+
|
|
650
|
+
We make a map from a rational function field to itself::
|
|
651
|
+
|
|
652
|
+
sage: K.<x> = FunctionField(GF(7))
|
|
653
|
+
sage: K.hom((x^4 + 2)/x)
|
|
654
|
+
Function Field endomorphism of Rational function field in x over Finite Field of size 7
|
|
655
|
+
Defn: x |--> (x^4 + 2)/x
|
|
656
|
+
|
|
657
|
+
We construct a map from a rational function field into a
|
|
658
|
+
non-rational extension field::
|
|
659
|
+
|
|
660
|
+
sage: # needs sage.rings.function_field
|
|
661
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
662
|
+
sage: L.<y> = K.extension(y^3 + 6*x^3 + x)
|
|
663
|
+
sage: f = K.hom(y^2 + y + 2); f
|
|
664
|
+
Function Field morphism:
|
|
665
|
+
From: Rational function field in x over Finite Field of size 7
|
|
666
|
+
To: Function field in y defined by y^3 + 6*x^3 + x
|
|
667
|
+
Defn: x |--> y^2 + y + 2
|
|
668
|
+
sage: f(x)
|
|
669
|
+
y^2 + y + 2
|
|
670
|
+
sage: f(x^2)
|
|
671
|
+
5*y^2 + (x^3 + 6*x + 4)*y + 2*x^3 + 5*x + 4
|
|
672
|
+
"""
|
|
673
|
+
if isinstance(im_gens, CategoryObject):
|
|
674
|
+
return self.Hom(im_gens).natural_map()
|
|
675
|
+
if not isinstance(im_gens, (list, tuple)):
|
|
676
|
+
im_gens = [im_gens]
|
|
677
|
+
if len(im_gens) != 1:
|
|
678
|
+
raise ValueError("there must be exactly one generator")
|
|
679
|
+
x = im_gens[0]
|
|
680
|
+
R = x.parent()
|
|
681
|
+
if base_morphism is None and not R.has_coerce_map_from(self.constant_field()):
|
|
682
|
+
raise ValueError("you must specify a morphism on the base field")
|
|
683
|
+
from .maps import FunctionFieldMorphism_rational
|
|
684
|
+
return FunctionFieldMorphism_rational(self.Hom(R), x, base_morphism)
|
|
685
|
+
|
|
686
|
+
def field(self):
|
|
687
|
+
"""
|
|
688
|
+
Return the underlying field, forgetting the function field
|
|
689
|
+
structure.
|
|
690
|
+
|
|
691
|
+
EXAMPLES::
|
|
692
|
+
|
|
693
|
+
sage: K.<t> = FunctionField(GF(7))
|
|
694
|
+
sage: K.field()
|
|
695
|
+
Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7
|
|
696
|
+
|
|
697
|
+
.. SEEALSO::
|
|
698
|
+
|
|
699
|
+
:meth:`sage.rings.fraction_field.FractionField_1poly_field.function_field`
|
|
700
|
+
"""
|
|
701
|
+
return self._field
|
|
702
|
+
|
|
703
|
+
@cached_method
|
|
704
|
+
def maximal_order(self):
|
|
705
|
+
"""
|
|
706
|
+
Return the maximal order of the function field.
|
|
707
|
+
|
|
708
|
+
Since this is a rational function field it is of the form `K(t)`, and the
|
|
709
|
+
maximal order is by definition `K[t]`, where `K` is the constant field.
|
|
710
|
+
|
|
711
|
+
EXAMPLES::
|
|
712
|
+
|
|
713
|
+
sage: K.<t> = FunctionField(QQ)
|
|
714
|
+
sage: K.maximal_order()
|
|
715
|
+
Maximal order of Rational function field in t over Rational Field
|
|
716
|
+
sage: K.equation_order()
|
|
717
|
+
Maximal order of Rational function field in t over Rational Field
|
|
718
|
+
"""
|
|
719
|
+
from .order_rational import FunctionFieldMaximalOrder_rational
|
|
720
|
+
return FunctionFieldMaximalOrder_rational(self)
|
|
721
|
+
|
|
722
|
+
equation_order = maximal_order
|
|
723
|
+
|
|
724
|
+
@cached_method
|
|
725
|
+
def maximal_order_infinite(self):
|
|
726
|
+
"""
|
|
727
|
+
Return the maximal infinite order of the function field.
|
|
728
|
+
|
|
729
|
+
By definition, this is the valuation ring of the degree valuation of
|
|
730
|
+
the rational function field.
|
|
731
|
+
|
|
732
|
+
EXAMPLES::
|
|
733
|
+
|
|
734
|
+
sage: K.<t> = FunctionField(QQ)
|
|
735
|
+
sage: K.maximal_order_infinite()
|
|
736
|
+
Maximal infinite order of Rational function field in t over Rational Field
|
|
737
|
+
sage: K.equation_order_infinite()
|
|
738
|
+
Maximal infinite order of Rational function field in t over Rational Field
|
|
739
|
+
"""
|
|
740
|
+
from .order_rational import FunctionFieldMaximalOrderInfinite_rational
|
|
741
|
+
return FunctionFieldMaximalOrderInfinite_rational(self)
|
|
742
|
+
|
|
743
|
+
equation_order_infinite = maximal_order_infinite
|
|
744
|
+
|
|
745
|
+
def constant_base_field(self):
|
|
746
|
+
"""
|
|
747
|
+
Return the field of which the rational function field is a
|
|
748
|
+
transcendental extension.
|
|
749
|
+
|
|
750
|
+
EXAMPLES::
|
|
751
|
+
|
|
752
|
+
sage: K.<t> = FunctionField(QQ)
|
|
753
|
+
sage: K.constant_base_field()
|
|
754
|
+
Rational Field
|
|
755
|
+
"""
|
|
756
|
+
return self._constant_field
|
|
757
|
+
|
|
758
|
+
constant_field = constant_base_field
|
|
759
|
+
|
|
760
|
+
def different(self):
|
|
761
|
+
"""
|
|
762
|
+
Return the different of the rational function field.
|
|
763
|
+
|
|
764
|
+
For a rational function field, the different is simply the zero
|
|
765
|
+
divisor.
|
|
766
|
+
|
|
767
|
+
EXAMPLES::
|
|
768
|
+
|
|
769
|
+
sage: K.<t> = FunctionField(QQ)
|
|
770
|
+
sage: K.different() # needs sage.modules
|
|
771
|
+
0
|
|
772
|
+
"""
|
|
773
|
+
return self.divisor_group().zero()
|
|
774
|
+
|
|
775
|
+
def genus(self):
|
|
776
|
+
"""
|
|
777
|
+
Return the genus of the function field, namely 0.
|
|
778
|
+
|
|
779
|
+
EXAMPLES::
|
|
780
|
+
|
|
781
|
+
sage: K.<x> = FunctionField(QQ)
|
|
782
|
+
sage: K.genus()
|
|
783
|
+
0
|
|
784
|
+
"""
|
|
785
|
+
return Integer(0)
|
|
786
|
+
|
|
787
|
+
def change_variable_name(self, name):
|
|
788
|
+
r"""
|
|
789
|
+
Return a field isomorphic to this field with variable ``name``.
|
|
790
|
+
|
|
791
|
+
INPUT:
|
|
792
|
+
|
|
793
|
+
- ``name`` -- string or tuple consisting of a single string; the
|
|
794
|
+
name of the new variable
|
|
795
|
+
|
|
796
|
+
OUTPUT:
|
|
797
|
+
|
|
798
|
+
A triple ``F,f,t`` where ``F`` is a rational function field, ``f`` is
|
|
799
|
+
an isomorphism from ``F`` to this field, and ``t`` is the inverse of
|
|
800
|
+
``f``.
|
|
801
|
+
|
|
802
|
+
EXAMPLES::
|
|
803
|
+
|
|
804
|
+
sage: K.<x> = FunctionField(QQ)
|
|
805
|
+
sage: L,f,t = K.change_variable_name('y')
|
|
806
|
+
sage: L,f,t
|
|
807
|
+
(Rational function field in y over Rational Field,
|
|
808
|
+
Function Field morphism:
|
|
809
|
+
From: Rational function field in y over Rational Field
|
|
810
|
+
To: Rational function field in x over Rational Field
|
|
811
|
+
Defn: y |--> x,
|
|
812
|
+
Function Field morphism:
|
|
813
|
+
From: Rational function field in x over Rational Field
|
|
814
|
+
To: Rational function field in y over Rational Field
|
|
815
|
+
Defn: x |--> y)
|
|
816
|
+
sage: L.change_variable_name('x')[0] is K
|
|
817
|
+
True
|
|
818
|
+
"""
|
|
819
|
+
if isinstance(name, tuple):
|
|
820
|
+
if len(name) != 1:
|
|
821
|
+
raise ValueError("names must be a tuple with a single string")
|
|
822
|
+
name = name[0]
|
|
823
|
+
if name == self.variable_name():
|
|
824
|
+
id = Hom(self, self).identity()
|
|
825
|
+
return self, id, id
|
|
826
|
+
else:
|
|
827
|
+
from .constructor import FunctionField
|
|
828
|
+
ret = FunctionField(self.constant_base_field(), name)
|
|
829
|
+
return ret, ret.hom(self.gen()), self.hom(ret.gen())
|
|
830
|
+
|
|
831
|
+
def residue_field(self, place, name=None):
|
|
832
|
+
"""
|
|
833
|
+
Return the residue field of the place along with the maps from
|
|
834
|
+
and to it.
|
|
835
|
+
|
|
836
|
+
INPUT:
|
|
837
|
+
|
|
838
|
+
- ``place`` -- place of the function field
|
|
839
|
+
|
|
840
|
+
- ``name`` -- string; name of the generator of the residue field
|
|
841
|
+
|
|
842
|
+
EXAMPLES::
|
|
843
|
+
|
|
844
|
+
sage: F.<x> = FunctionField(GF(5))
|
|
845
|
+
sage: p = F.places_finite(2)[0] # needs sage.libs.pari
|
|
846
|
+
sage: R, fr_R, to_R = F.residue_field(p) # needs sage.libs.pari sage.rings.function_field
|
|
847
|
+
sage: R # needs sage.libs.pari sage.rings.function_field
|
|
848
|
+
Finite Field in z2 of size 5^2
|
|
849
|
+
sage: to_R(x) in R # needs sage.libs.pari sage.rings.function_field
|
|
850
|
+
True
|
|
851
|
+
"""
|
|
852
|
+
return place.residue_field(name=name)
|
|
853
|
+
|
|
854
|
+
|
|
855
|
+
class RationalFunctionField_char_zero(RationalFunctionField):
|
|
856
|
+
"""
|
|
857
|
+
Rational function fields of characteristic zero.
|
|
858
|
+
"""
|
|
859
|
+
@cached_method
|
|
860
|
+
def higher_derivation(self):
|
|
861
|
+
"""
|
|
862
|
+
Return the higher derivation for the function field.
|
|
863
|
+
|
|
864
|
+
This is also called the Hasse-Schmidt derivation.
|
|
865
|
+
|
|
866
|
+
EXAMPLES::
|
|
867
|
+
|
|
868
|
+
sage: F.<x> = FunctionField(QQ)
|
|
869
|
+
sage: d = F.higher_derivation() # needs sage.libs.singular sage.modules
|
|
870
|
+
sage: [d(x^5,i) for i in range(10)] # needs sage.libs.singular sage.modules
|
|
871
|
+
[x^5, 5*x^4, 10*x^3, 10*x^2, 5*x, 1, 0, 0, 0, 0]
|
|
872
|
+
sage: [d(x^9,i) for i in range(10)] # needs sage.libs.singular sage.modules
|
|
873
|
+
[x^9, 9*x^8, 36*x^7, 84*x^6, 126*x^5, 126*x^4, 84*x^3, 36*x^2, 9*x, 1]
|
|
874
|
+
"""
|
|
875
|
+
from .derivations_polymod import FunctionFieldHigherDerivation_char_zero
|
|
876
|
+
return FunctionFieldHigherDerivation_char_zero(self)
|
|
877
|
+
|
|
878
|
+
|
|
879
|
+
class RationalFunctionField_global(RationalFunctionField):
|
|
880
|
+
"""
|
|
881
|
+
Rational function field over finite fields.
|
|
882
|
+
"""
|
|
883
|
+
_differentials_space = LazyImport('sage.rings.function_field.differential', 'DifferentialsSpace_global')
|
|
884
|
+
|
|
885
|
+
def places(self, degree=1):
|
|
886
|
+
"""
|
|
887
|
+
Return all places of the degree.
|
|
888
|
+
|
|
889
|
+
INPUT:
|
|
890
|
+
|
|
891
|
+
- ``degree`` -- (default: 1) a positive integer
|
|
892
|
+
|
|
893
|
+
EXAMPLES::
|
|
894
|
+
|
|
895
|
+
sage: F.<x> = FunctionField(GF(5))
|
|
896
|
+
sage: F.places() # needs sage.libs.pari
|
|
897
|
+
[Place (1/x),
|
|
898
|
+
Place (x),
|
|
899
|
+
Place (x + 1),
|
|
900
|
+
Place (x + 2),
|
|
901
|
+
Place (x + 3),
|
|
902
|
+
Place (x + 4)]
|
|
903
|
+
"""
|
|
904
|
+
if degree == 1:
|
|
905
|
+
return [self.place_infinite()] + self.places_finite(degree)
|
|
906
|
+
else:
|
|
907
|
+
return self.places_finite(degree)
|
|
908
|
+
|
|
909
|
+
def places_finite(self, degree=1):
|
|
910
|
+
"""
|
|
911
|
+
Return the finite places of the degree.
|
|
912
|
+
|
|
913
|
+
INPUT:
|
|
914
|
+
|
|
915
|
+
- ``degree`` -- (default: 1) a positive integer
|
|
916
|
+
|
|
917
|
+
EXAMPLES::
|
|
918
|
+
|
|
919
|
+
sage: F.<x> = FunctionField(GF(5))
|
|
920
|
+
sage: F.places_finite() # needs sage.libs.pari
|
|
921
|
+
[Place (x), Place (x + 1), Place (x + 2), Place (x + 3), Place (x + 4)]
|
|
922
|
+
"""
|
|
923
|
+
return list(self._places_finite(degree))
|
|
924
|
+
|
|
925
|
+
def _places_finite(self, degree=1):
|
|
926
|
+
"""
|
|
927
|
+
Return a generator for all monic irreducible polynomials of the degree.
|
|
928
|
+
|
|
929
|
+
INPUT:
|
|
930
|
+
|
|
931
|
+
- ``degree`` -- (default: 1) a positive integer
|
|
932
|
+
|
|
933
|
+
EXAMPLES::
|
|
934
|
+
|
|
935
|
+
sage: F.<x> = FunctionField(GF(5))
|
|
936
|
+
sage: F._places_finite()
|
|
937
|
+
<generator object ...>
|
|
938
|
+
"""
|
|
939
|
+
O = self.maximal_order()
|
|
940
|
+
R = O._ring
|
|
941
|
+
G = R.polynomials(max_degree=degree - 1)
|
|
942
|
+
lm = R.monomial(degree)
|
|
943
|
+
for g in G:
|
|
944
|
+
h = lm + g
|
|
945
|
+
if h.is_irreducible():
|
|
946
|
+
yield O.ideal(h).place()
|
|
947
|
+
|
|
948
|
+
def place_infinite(self):
|
|
949
|
+
"""
|
|
950
|
+
Return the unique place at infinity.
|
|
951
|
+
|
|
952
|
+
EXAMPLES::
|
|
953
|
+
|
|
954
|
+
sage: F.<x> = FunctionField(GF(5))
|
|
955
|
+
sage: F.place_infinite()
|
|
956
|
+
Place (1/x)
|
|
957
|
+
"""
|
|
958
|
+
return self.maximal_order_infinite().prime_ideal().place()
|
|
959
|
+
|
|
960
|
+
def get_place(self, degree):
|
|
961
|
+
"""
|
|
962
|
+
Return a place of ``degree``.
|
|
963
|
+
|
|
964
|
+
INPUT:
|
|
965
|
+
|
|
966
|
+
- ``degree`` -- positive integer
|
|
967
|
+
|
|
968
|
+
EXAMPLES::
|
|
969
|
+
|
|
970
|
+
sage: F.<a> = GF(2)
|
|
971
|
+
sage: K.<x> = FunctionField(F)
|
|
972
|
+
sage: K.get_place(1) # needs sage.libs.pari
|
|
973
|
+
Place (x)
|
|
974
|
+
sage: K.get_place(2) # needs sage.libs.pari
|
|
975
|
+
Place (x^2 + x + 1)
|
|
976
|
+
sage: K.get_place(3) # needs sage.libs.pari
|
|
977
|
+
Place (x^3 + x + 1)
|
|
978
|
+
sage: K.get_place(4) # needs sage.libs.pari
|
|
979
|
+
Place (x^4 + x + 1)
|
|
980
|
+
sage: K.get_place(5) # needs sage.libs.pari
|
|
981
|
+
Place (x^5 + x^2 + 1)
|
|
982
|
+
"""
|
|
983
|
+
for p in self._places_finite(degree):
|
|
984
|
+
return p
|
|
985
|
+
|
|
986
|
+
assert False, "there is a bug around"
|
|
987
|
+
|
|
988
|
+
@cached_method
|
|
989
|
+
def higher_derivation(self):
|
|
990
|
+
"""
|
|
991
|
+
Return the higher derivation for the function field.
|
|
992
|
+
|
|
993
|
+
This is also called the Hasse-Schmidt derivation.
|
|
994
|
+
|
|
995
|
+
EXAMPLES::
|
|
996
|
+
|
|
997
|
+
sage: F.<x> = FunctionField(GF(5))
|
|
998
|
+
sage: d = F.higher_derivation() # needs sage.rings.function_field
|
|
999
|
+
sage: [d(x^5,i) for i in range(10)] # needs sage.rings.function_field
|
|
1000
|
+
[x^5, 0, 0, 0, 0, 1, 0, 0, 0, 0]
|
|
1001
|
+
sage: [d(x^7,i) for i in range(10)] # needs sage.rings.function_field
|
|
1002
|
+
[x^7, 2*x^6, x^5, 0, 0, x^2, 2*x, 1, 0, 0]
|
|
1003
|
+
"""
|
|
1004
|
+
from .derivations_polymod import RationalFunctionFieldHigherDerivation_global
|
|
1005
|
+
return RationalFunctionFieldHigherDerivation_global(self)
|