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,586 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.modules (because __init__ constructs a vector space)
|
|
3
|
+
r"""
|
|
4
|
+
Orders of function fields: basis
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# ****************************************************************************
|
|
8
|
+
# Copyright (C) 2010 William Stein <wstein@gmail.com>
|
|
9
|
+
# 2011 Maarten Derickx <m.derickx.student@gmail.com>
|
|
10
|
+
# 2011 Julian Rueth <julian.rueth@gmail.com>
|
|
11
|
+
# 2017-2020 Kwankyu Lee
|
|
12
|
+
# 2019 Brent Baccala
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
16
|
+
# the License, or (at your option) any later version.
|
|
17
|
+
# http://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
|
|
20
|
+
from .ideal import FunctionFieldIdeal, FunctionFieldIdeal_module, FunctionFieldIdealInfinite_module
|
|
21
|
+
from .order import FunctionFieldOrder, FunctionFieldOrderInfinite
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class FunctionFieldOrder_basis(FunctionFieldOrder):
|
|
25
|
+
"""
|
|
26
|
+
Order given by a basis over the maximal order of the base field.
|
|
27
|
+
|
|
28
|
+
INPUT:
|
|
29
|
+
|
|
30
|
+
- ``basis`` -- list of elements of the function field
|
|
31
|
+
|
|
32
|
+
- ``check`` -- boolean (default: ``True``); if ``True``, check whether the
|
|
33
|
+
module that ``basis`` generates forms an order
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
38
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1) # needs sage.rings.function_field
|
|
39
|
+
sage: O = L.equation_order(); O # needs sage.rings.function_field
|
|
40
|
+
Order in Function field in y defined by y^4 + x*y + 4*x + 1
|
|
41
|
+
|
|
42
|
+
The basis only defines an order if the module it generates is closed under
|
|
43
|
+
multiplication and contains the identity element::
|
|
44
|
+
|
|
45
|
+
sage: K.<x> = FunctionField(QQ)
|
|
46
|
+
sage: R.<y> = K[]
|
|
47
|
+
sage: L.<y> = K.extension(y^5 - (x^3 + 2*x*y + 1/x)) # needs sage.rings.function_field
|
|
48
|
+
sage: y.is_integral() # needs sage.rings.function_field
|
|
49
|
+
False
|
|
50
|
+
sage: L.order(y) # needs sage.rings.function_field
|
|
51
|
+
Traceback (most recent call last):
|
|
52
|
+
...
|
|
53
|
+
ValueError: the module generated by basis (1, y, y^2, y^3, y^4)
|
|
54
|
+
must be closed under multiplication
|
|
55
|
+
|
|
56
|
+
The basis also has to be linearly independent and of the same rank as the
|
|
57
|
+
degree of the function field of its elements (only checked when ``check``
|
|
58
|
+
is ``True``)::
|
|
59
|
+
|
|
60
|
+
sage: # needs sage.rings.function_field
|
|
61
|
+
sage: L.order(L(x))
|
|
62
|
+
Traceback (most recent call last):
|
|
63
|
+
...
|
|
64
|
+
ValueError: basis (1, x, x^2, x^3, x^4) is not linearly independent
|
|
65
|
+
sage: from sage.rings.function_field.order_basis import FunctionFieldOrder_basis
|
|
66
|
+
sage: FunctionFieldOrder_basis((y,y,y^3,y^4,y^5))
|
|
67
|
+
Traceback (most recent call last):
|
|
68
|
+
...
|
|
69
|
+
ValueError: basis (y, y, y^3, y^4, 2*x*y + (x^4 + 1)/x) is not linearly independent
|
|
70
|
+
"""
|
|
71
|
+
def __init__(self, basis, check=True):
|
|
72
|
+
"""
|
|
73
|
+
Initialize.
|
|
74
|
+
|
|
75
|
+
TESTS::
|
|
76
|
+
|
|
77
|
+
sage: # needs sage.rings.function_field
|
|
78
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
79
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
|
|
80
|
+
sage: O = L.equation_order()
|
|
81
|
+
sage: TestSuite(O).run()
|
|
82
|
+
"""
|
|
83
|
+
if len(basis) == 0:
|
|
84
|
+
raise ValueError("basis must have positive length")
|
|
85
|
+
|
|
86
|
+
field = basis[0].parent()
|
|
87
|
+
if len(basis) != field.degree():
|
|
88
|
+
raise ValueError("length of basis must equal degree of field")
|
|
89
|
+
|
|
90
|
+
FunctionFieldOrder.__init__(self, field, ideal_class=FunctionFieldIdeal_module)
|
|
91
|
+
|
|
92
|
+
V, from_V, to_V = field.vector_space()
|
|
93
|
+
|
|
94
|
+
R = V.base_field().maximal_order()
|
|
95
|
+
self._module = V.span([to_V(b) for b in basis], base_ring=R)
|
|
96
|
+
|
|
97
|
+
self._from_module = from_V
|
|
98
|
+
self._to_module = to_V
|
|
99
|
+
self._basis = tuple(basis)
|
|
100
|
+
self._ring = field.polynomial_ring()
|
|
101
|
+
self._populate_coercion_lists_(coerce_list=[self._ring])
|
|
102
|
+
|
|
103
|
+
if check:
|
|
104
|
+
if self._module.rank() != field.degree():
|
|
105
|
+
raise ValueError("basis {} is not linearly independent".format(basis))
|
|
106
|
+
if to_V(field(1)) not in self._module:
|
|
107
|
+
raise ValueError("the identity element must be in the module spanned by basis {}".format(basis))
|
|
108
|
+
if not all(to_V(a*b) in self._module for a in basis for b in basis):
|
|
109
|
+
raise ValueError("the module generated by basis {} must be closed under multiplication".format(basis))
|
|
110
|
+
|
|
111
|
+
def _element_constructor_(self, f):
|
|
112
|
+
"""
|
|
113
|
+
Construct an element of this order from ``f``.
|
|
114
|
+
|
|
115
|
+
INPUT:
|
|
116
|
+
|
|
117
|
+
- ``f`` -- element
|
|
118
|
+
|
|
119
|
+
EXAMPLES::
|
|
120
|
+
|
|
121
|
+
sage: K.<x> = FunctionField(QQ)
|
|
122
|
+
sage: K.maximal_order()._element_constructor_(x)
|
|
123
|
+
x
|
|
124
|
+
"""
|
|
125
|
+
F = self.function_field()
|
|
126
|
+
|
|
127
|
+
try:
|
|
128
|
+
f = F(f)
|
|
129
|
+
except TypeError:
|
|
130
|
+
raise TypeError("unable to convert to an element of {}".format(F))
|
|
131
|
+
|
|
132
|
+
V, fr_V, to_V = F.vector_space()
|
|
133
|
+
f_vector = to_V(f)
|
|
134
|
+
if f_vector not in self._module:
|
|
135
|
+
raise TypeError("{} is not an element of {}".format(f_vector, self))
|
|
136
|
+
|
|
137
|
+
return f
|
|
138
|
+
|
|
139
|
+
def ideal_with_gens_over_base(self, gens):
|
|
140
|
+
"""
|
|
141
|
+
Return the fractional ideal with basis ``gens`` over the
|
|
142
|
+
maximal order of the base field.
|
|
143
|
+
|
|
144
|
+
It is not checked that the ``gens`` really generates an ideal.
|
|
145
|
+
|
|
146
|
+
INPUT:
|
|
147
|
+
|
|
148
|
+
- ``gens`` -- list of elements of the function field
|
|
149
|
+
|
|
150
|
+
EXAMPLES:
|
|
151
|
+
|
|
152
|
+
We construct an ideal in a rational function field::
|
|
153
|
+
|
|
154
|
+
sage: K.<y> = FunctionField(QQ)
|
|
155
|
+
sage: O = K.maximal_order()
|
|
156
|
+
sage: I = O.ideal([y]); I
|
|
157
|
+
Ideal (y) of Maximal order of Rational function field in y over Rational Field
|
|
158
|
+
sage: I * I
|
|
159
|
+
Ideal (y^2) of Maximal order of Rational function field in y over Rational Field
|
|
160
|
+
|
|
161
|
+
We construct some ideals in a nontrivial function field::
|
|
162
|
+
|
|
163
|
+
sage: # needs sage.rings.function_field
|
|
164
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
165
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
166
|
+
sage: O = L.equation_order(); O
|
|
167
|
+
Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
168
|
+
sage: I = O.ideal_with_gens_over_base([1, y]); I
|
|
169
|
+
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
170
|
+
sage: I.module()
|
|
171
|
+
Free module of degree 2 and rank 2 over
|
|
172
|
+
Maximal order of Rational function field in x over Finite Field of size 7
|
|
173
|
+
Echelon basis matrix:
|
|
174
|
+
[1 0]
|
|
175
|
+
[0 1]
|
|
176
|
+
|
|
177
|
+
There is no check if the resulting object is really an ideal::
|
|
178
|
+
|
|
179
|
+
sage: # needs sage.rings.function_field
|
|
180
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
181
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
182
|
+
sage: O = L.equation_order()
|
|
183
|
+
sage: I = O.ideal_with_gens_over_base([y]); I
|
|
184
|
+
Ideal (y) of Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
185
|
+
sage: y in I
|
|
186
|
+
True
|
|
187
|
+
sage: y^2 in I
|
|
188
|
+
False
|
|
189
|
+
"""
|
|
190
|
+
F = self.function_field()
|
|
191
|
+
S = F.base_field().maximal_order()
|
|
192
|
+
|
|
193
|
+
gens = [F(a) for a in gens]
|
|
194
|
+
|
|
195
|
+
V, from_V, to_V = F.vector_space()
|
|
196
|
+
M = V.span([to_V(b) for b in gens], base_ring=S)
|
|
197
|
+
|
|
198
|
+
return self.ideal_monoid().element_class(self, M)
|
|
199
|
+
|
|
200
|
+
def ideal(self, *gens):
|
|
201
|
+
"""
|
|
202
|
+
Return the fractional ideal generated by the elements in ``gens``.
|
|
203
|
+
|
|
204
|
+
INPUT:
|
|
205
|
+
|
|
206
|
+
- ``gens`` -- list of generators or an ideal in a ring which
|
|
207
|
+
coerces to this order
|
|
208
|
+
|
|
209
|
+
EXAMPLES::
|
|
210
|
+
|
|
211
|
+
sage: K.<y> = FunctionField(QQ)
|
|
212
|
+
sage: O = K.maximal_order()
|
|
213
|
+
sage: O.ideal(y)
|
|
214
|
+
Ideal (y) of Maximal order of Rational function field in y over Rational Field
|
|
215
|
+
sage: O.ideal([y,1/y]) == O.ideal(y,1/y) # multiple generators may be given as a list
|
|
216
|
+
True
|
|
217
|
+
|
|
218
|
+
A fractional ideal of a nontrivial extension::
|
|
219
|
+
|
|
220
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
221
|
+
sage: O = K.maximal_order()
|
|
222
|
+
sage: I = O.ideal(x^2 - 4)
|
|
223
|
+
|
|
224
|
+
sage: # needs sage.rings.function_field
|
|
225
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
226
|
+
sage: S = L.equation_order()
|
|
227
|
+
sage: S.ideal(1/y)
|
|
228
|
+
Ideal (1, (6/(x^3 + 1))*y) of
|
|
229
|
+
Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
230
|
+
sage: I2 = S.ideal(x^2 - 4); I2
|
|
231
|
+
Ideal (x^2 + 3) of Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
232
|
+
sage: I2 == S.ideal(I)
|
|
233
|
+
True
|
|
234
|
+
"""
|
|
235
|
+
if len(gens) == 1:
|
|
236
|
+
gens = gens[0]
|
|
237
|
+
if not isinstance(gens, (list, tuple)):
|
|
238
|
+
if isinstance(gens, FunctionFieldIdeal):
|
|
239
|
+
gens = gens.gens()
|
|
240
|
+
else:
|
|
241
|
+
gens = [gens]
|
|
242
|
+
K = self.function_field()
|
|
243
|
+
|
|
244
|
+
return self.ideal_with_gens_over_base([b*K(g) for b in self.basis() for g in gens])
|
|
245
|
+
|
|
246
|
+
def polynomial(self):
|
|
247
|
+
"""
|
|
248
|
+
Return the defining polynomial of the function field of which this is an order.
|
|
249
|
+
|
|
250
|
+
EXAMPLES::
|
|
251
|
+
|
|
252
|
+
sage: # needs sage.rings.function_field
|
|
253
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
254
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
|
|
255
|
+
sage: O = L.equation_order()
|
|
256
|
+
sage: O.polynomial()
|
|
257
|
+
y^4 + x*y + 4*x + 1
|
|
258
|
+
"""
|
|
259
|
+
return self._field.polynomial()
|
|
260
|
+
|
|
261
|
+
def basis(self):
|
|
262
|
+
"""
|
|
263
|
+
Return a basis of the order over the maximal order of the base field.
|
|
264
|
+
|
|
265
|
+
EXAMPLES::
|
|
266
|
+
|
|
267
|
+
sage: # needs sage.rings.function_field
|
|
268
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
269
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
|
|
270
|
+
sage: O = L.equation_order()
|
|
271
|
+
sage: O.basis()
|
|
272
|
+
(1, y, y^2, y^3)
|
|
273
|
+
"""
|
|
274
|
+
return self._basis
|
|
275
|
+
|
|
276
|
+
def free_module(self):
|
|
277
|
+
"""
|
|
278
|
+
Return the free module formed by the basis over the maximal order
|
|
279
|
+
of the base function field.
|
|
280
|
+
|
|
281
|
+
EXAMPLES::
|
|
282
|
+
|
|
283
|
+
sage: # needs sage.rings.function_field
|
|
284
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
285
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
|
|
286
|
+
sage: O = L.equation_order()
|
|
287
|
+
sage: O.free_module()
|
|
288
|
+
Free module of degree 4 and rank 4 over Maximal order of Rational
|
|
289
|
+
function field in x over Finite Field of size 7
|
|
290
|
+
Echelon basis matrix:
|
|
291
|
+
[1 0 0 0]
|
|
292
|
+
[0 1 0 0]
|
|
293
|
+
[0 0 1 0]
|
|
294
|
+
[0 0 0 1]
|
|
295
|
+
"""
|
|
296
|
+
return self._module
|
|
297
|
+
|
|
298
|
+
def coordinate_vector(self, e):
|
|
299
|
+
"""
|
|
300
|
+
Return the coordinates of ``e`` with respect to the basis of the order.
|
|
301
|
+
|
|
302
|
+
INPUT:
|
|
303
|
+
|
|
304
|
+
- ``e`` -- element of the order or the function field
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: # needs sage.rings.function_field
|
|
309
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
310
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
|
|
311
|
+
sage: O = L.equation_order()
|
|
312
|
+
sage: f = (x + y)^3
|
|
313
|
+
sage: O.coordinate_vector(f)
|
|
314
|
+
(x^3, 3*x^2, 3*x, 1)
|
|
315
|
+
"""
|
|
316
|
+
return self._module.coordinate_vector(self._to_module(e), check=False)
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
class FunctionFieldOrderInfinite_basis(FunctionFieldOrderInfinite):
|
|
320
|
+
"""
|
|
321
|
+
Order given by a basis over the infinite maximal order of the base field.
|
|
322
|
+
|
|
323
|
+
INPUT:
|
|
324
|
+
|
|
325
|
+
- ``basis`` -- elements of the function field
|
|
326
|
+
|
|
327
|
+
- ``check`` -- boolean (default: ``True``); if ``True``, check the basis generates
|
|
328
|
+
an order
|
|
329
|
+
|
|
330
|
+
EXAMPLES::
|
|
331
|
+
|
|
332
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
333
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1) # needs sage.rings.function_field
|
|
334
|
+
sage: O = L.equation_order_infinite(); O # needs sage.rings.function_field
|
|
335
|
+
Infinite order in Function field in y defined by y^4 + x*y + 4*x + 1
|
|
336
|
+
|
|
337
|
+
The basis only defines an order if the module it generates is closed under
|
|
338
|
+
multiplication and contains the identity element (only checked when
|
|
339
|
+
``check`` is ``True``)::
|
|
340
|
+
|
|
341
|
+
sage: O = L.order_infinite_with_basis([1, y, 1/x^2*y^2, y^3]); O # needs sage.rings.function_field
|
|
342
|
+
Traceback (most recent call last):
|
|
343
|
+
...
|
|
344
|
+
ValueError: the module generated by basis (1, y, 1/x^2*y^2, y^3)
|
|
345
|
+
must be closed under multiplication
|
|
346
|
+
|
|
347
|
+
The basis also has to be linearly independent and of the same rank as the
|
|
348
|
+
degree of the function field of its elements (only checked when ``check``
|
|
349
|
+
is ``True``)::
|
|
350
|
+
|
|
351
|
+
sage: O = L.order_infinite_with_basis([1, y, 1/x^2*y^2, 1 + y]); O # needs sage.rings.function_field
|
|
352
|
+
Traceback (most recent call last):
|
|
353
|
+
...
|
|
354
|
+
ValueError: The given basis vectors must be linearly independent.
|
|
355
|
+
|
|
356
|
+
Note that 1 does not need to be an element of the basis, as long as it is
|
|
357
|
+
in the module spanned by it::
|
|
358
|
+
|
|
359
|
+
sage: # needs sage.rings.function_field
|
|
360
|
+
sage: O = L.order_infinite_with_basis([1 + 1/x*y, 1/x*y, 1/x^2*y^2, 1/x^3*y^3]); O
|
|
361
|
+
Infinite order in Function field in y defined by y^4 + x*y + 4*x + 1
|
|
362
|
+
sage: O.basis()
|
|
363
|
+
(1/x*y + 1, 1/x*y, 1/x^2*y^2, 1/x^3*y^3)
|
|
364
|
+
"""
|
|
365
|
+
def __init__(self, basis, check=True):
|
|
366
|
+
"""
|
|
367
|
+
Initialize.
|
|
368
|
+
|
|
369
|
+
TESTS::
|
|
370
|
+
|
|
371
|
+
sage: # needs sage.rings.function_field
|
|
372
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
373
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1)
|
|
374
|
+
sage: O = L.equation_order_infinite()
|
|
375
|
+
sage: TestSuite(O).run()
|
|
376
|
+
"""
|
|
377
|
+
if len(basis) == 0:
|
|
378
|
+
raise ValueError("basis must have positive length")
|
|
379
|
+
|
|
380
|
+
field = basis[0].parent()
|
|
381
|
+
if len(basis) != field.degree():
|
|
382
|
+
raise ValueError("length of basis must equal degree of field")
|
|
383
|
+
|
|
384
|
+
FunctionFieldOrderInfinite.__init__(self, field, ideal_class=FunctionFieldIdealInfinite_module)
|
|
385
|
+
|
|
386
|
+
# function field element f is in this order if and only if
|
|
387
|
+
# W.coordinate_vector(to(f)) in M
|
|
388
|
+
V, fr, to = field.vector_space()
|
|
389
|
+
R = field.base_field().maximal_order_infinite()
|
|
390
|
+
W = V.span_of_basis([to(v) for v in basis])
|
|
391
|
+
from sage.modules.free_module import FreeModule
|
|
392
|
+
M = FreeModule(R, W.dimension())
|
|
393
|
+
self._basis = tuple(basis)
|
|
394
|
+
self._ambient_space = W
|
|
395
|
+
self._module = M
|
|
396
|
+
|
|
397
|
+
self._ring = field.polynomial_ring()
|
|
398
|
+
self._populate_coercion_lists_(coerce_list=[self._ring])
|
|
399
|
+
|
|
400
|
+
if check:
|
|
401
|
+
if self._module.rank() != field.degree():
|
|
402
|
+
raise ValueError("basis {} is not linearly independent".format(basis))
|
|
403
|
+
if W.coordinate_vector(to(field(1))) not in self._module:
|
|
404
|
+
raise ValueError("the identity element must be in the module spanned by basis {}".format(basis))
|
|
405
|
+
if not all(W.coordinate_vector(to(a*b)) in self._module for a in basis for b in basis):
|
|
406
|
+
raise ValueError("the module generated by basis {} must be closed under multiplication".format(basis))
|
|
407
|
+
|
|
408
|
+
def _element_constructor_(self, f):
|
|
409
|
+
"""
|
|
410
|
+
Construct an element of this order.
|
|
411
|
+
|
|
412
|
+
INPUT:
|
|
413
|
+
|
|
414
|
+
- ``f`` -- element
|
|
415
|
+
|
|
416
|
+
EXAMPLES::
|
|
417
|
+
|
|
418
|
+
sage: K.<x> = FunctionField(QQ)
|
|
419
|
+
sage: O = K.maximal_order()
|
|
420
|
+
sage: O(x)
|
|
421
|
+
x
|
|
422
|
+
sage: O(1/x)
|
|
423
|
+
Traceback (most recent call last):
|
|
424
|
+
...
|
|
425
|
+
TypeError: 1/x is not an element of Maximal order of Rational function field in x over Rational Field
|
|
426
|
+
"""
|
|
427
|
+
F = self.function_field()
|
|
428
|
+
try:
|
|
429
|
+
f = F(f)
|
|
430
|
+
except TypeError:
|
|
431
|
+
raise TypeError("unable to convert to an element of {}".format(F))
|
|
432
|
+
|
|
433
|
+
V, fr_V, to_V = F.vector_space()
|
|
434
|
+
W = self._ambient_space
|
|
435
|
+
if W.coordinate_vector(to_V(f)) not in self._module:
|
|
436
|
+
raise TypeError("{} is not an element of {}".format(f, self))
|
|
437
|
+
|
|
438
|
+
return f
|
|
439
|
+
|
|
440
|
+
def ideal_with_gens_over_base(self, gens):
|
|
441
|
+
"""
|
|
442
|
+
Return the fractional ideal with basis ``gens`` over the
|
|
443
|
+
maximal order of the base field.
|
|
444
|
+
|
|
445
|
+
It is not checked that ``gens`` really generates an ideal.
|
|
446
|
+
|
|
447
|
+
INPUT:
|
|
448
|
+
|
|
449
|
+
- ``gens`` -- list of elements that are a basis for the ideal over the
|
|
450
|
+
maximal order of the base field
|
|
451
|
+
|
|
452
|
+
EXAMPLES:
|
|
453
|
+
|
|
454
|
+
We construct an ideal in a rational function field::
|
|
455
|
+
|
|
456
|
+
sage: K.<y> = FunctionField(QQ)
|
|
457
|
+
sage: O = K.maximal_order()
|
|
458
|
+
sage: I = O.ideal([y]); I
|
|
459
|
+
Ideal (y) of Maximal order of Rational function field in y over Rational Field
|
|
460
|
+
sage: I*I
|
|
461
|
+
Ideal (y^2) of Maximal order of Rational function field in y over Rational Field
|
|
462
|
+
|
|
463
|
+
We construct some ideals in a nontrivial function field::
|
|
464
|
+
|
|
465
|
+
sage: # needs sage.rings.function_field
|
|
466
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
467
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
468
|
+
sage: O = L.equation_order(); O
|
|
469
|
+
Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
470
|
+
sage: I = O.ideal_with_gens_over_base([1, y]); I
|
|
471
|
+
Ideal (1) of Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
472
|
+
sage: I.module()
|
|
473
|
+
Free module of degree 2 and rank 2 over
|
|
474
|
+
Maximal order of Rational function field in x over Finite Field of size 7
|
|
475
|
+
Echelon basis matrix:
|
|
476
|
+
[1 0]
|
|
477
|
+
[0 1]
|
|
478
|
+
|
|
479
|
+
There is no check if the resulting object is really an ideal::
|
|
480
|
+
|
|
481
|
+
sage: # needs sage.rings.function_field
|
|
482
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
483
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1)
|
|
484
|
+
sage: O = L.equation_order()
|
|
485
|
+
sage: I = O.ideal_with_gens_over_base([y]); I
|
|
486
|
+
Ideal (y) of Order in Function field in y defined by y^2 + 6*x^3 + 6
|
|
487
|
+
sage: y in I
|
|
488
|
+
True
|
|
489
|
+
sage: y^2 in I
|
|
490
|
+
False
|
|
491
|
+
"""
|
|
492
|
+
F = self.function_field()
|
|
493
|
+
S = F.base_field().maximal_order_infinite()
|
|
494
|
+
|
|
495
|
+
gens = [F(a) for a in gens]
|
|
496
|
+
|
|
497
|
+
V, from_V, to_V = F.vector_space()
|
|
498
|
+
M = V.span([to_V(b) for b in gens], base_ring=S) # not work
|
|
499
|
+
|
|
500
|
+
return self.ideal_monoid().element_class(self, M)
|
|
501
|
+
|
|
502
|
+
def ideal(self, *gens):
|
|
503
|
+
"""
|
|
504
|
+
Return the fractional ideal generated by the elements in ``gens``.
|
|
505
|
+
|
|
506
|
+
INPUT:
|
|
507
|
+
|
|
508
|
+
- ``gens`` -- list of generators or an ideal in a ring which coerces
|
|
509
|
+
to this order
|
|
510
|
+
|
|
511
|
+
EXAMPLES::
|
|
512
|
+
|
|
513
|
+
sage: K.<y> = FunctionField(QQ)
|
|
514
|
+
sage: O = K.maximal_order()
|
|
515
|
+
sage: O.ideal(y)
|
|
516
|
+
Ideal (y) of Maximal order of Rational function field in y over Rational Field
|
|
517
|
+
sage: O.ideal([y,1/y]) == O.ideal(y,1/y) # multiple generators may be given as a list
|
|
518
|
+
True
|
|
519
|
+
|
|
520
|
+
A fractional ideal of a nontrivial extension::
|
|
521
|
+
|
|
522
|
+
sage: K.<x> = FunctionField(QQ); R.<y> = K[]
|
|
523
|
+
sage: O = K.maximal_order_infinite()
|
|
524
|
+
sage: I = O.ideal(x^2 - 4)
|
|
525
|
+
sage: L.<y> = K.extension(y^2 - x^3 - 1) # needs sage.rings.function_field
|
|
526
|
+
sage: S = L.order_infinite_with_basis([1, 1/x^2*y]) # needs sage.rings.function_field
|
|
527
|
+
"""
|
|
528
|
+
if len(gens) == 1:
|
|
529
|
+
gens = gens[0]
|
|
530
|
+
if not isinstance(gens, (list, tuple)):
|
|
531
|
+
if isinstance(gens, FunctionFieldIdeal):
|
|
532
|
+
gens = gens.gens()
|
|
533
|
+
else:
|
|
534
|
+
gens = [gens]
|
|
535
|
+
K = self.function_field()
|
|
536
|
+
|
|
537
|
+
return self.ideal_with_gens_over_base([b*K(g) for b in self.basis() for g in gens])
|
|
538
|
+
|
|
539
|
+
def polynomial(self):
|
|
540
|
+
"""
|
|
541
|
+
Return the defining polynomial of the function field of which this is an order.
|
|
542
|
+
|
|
543
|
+
EXAMPLES::
|
|
544
|
+
|
|
545
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
546
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1) # needs sage.rings.function_field
|
|
547
|
+
sage: O = L.equation_order() # needs sage.rings.function_field
|
|
548
|
+
sage: O.polynomial() # needs sage.rings.function_field
|
|
549
|
+
y^4 + x*y + 4*x + 1
|
|
550
|
+
"""
|
|
551
|
+
return self._field.polynomial()
|
|
552
|
+
|
|
553
|
+
def basis(self):
|
|
554
|
+
"""
|
|
555
|
+
Return a basis of this order over the maximal order of the base field.
|
|
556
|
+
|
|
557
|
+
EXAMPLES::
|
|
558
|
+
|
|
559
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
560
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1) # needs sage.rings.function_field
|
|
561
|
+
sage: O = L.equation_order() # needs sage.rings.function_field
|
|
562
|
+
sage: O.basis() # needs sage.rings.function_field
|
|
563
|
+
(1, y, y^2, y^3)
|
|
564
|
+
"""
|
|
565
|
+
return self._basis
|
|
566
|
+
|
|
567
|
+
def free_module(self):
|
|
568
|
+
"""
|
|
569
|
+
Return the free module formed by the basis over the maximal order of
|
|
570
|
+
the base field.
|
|
571
|
+
|
|
572
|
+
EXAMPLES::
|
|
573
|
+
|
|
574
|
+
sage: K.<x> = FunctionField(GF(7)); R.<y> = K[]
|
|
575
|
+
sage: L.<y> = K.extension(y^4 + x*y + 4*x + 1) # needs sage.rings.function_field
|
|
576
|
+
sage: O = L.equation_order() # needs sage.rings.function_field
|
|
577
|
+
sage: O.free_module() # needs sage.rings.function_field
|
|
578
|
+
Free module of degree 4 and rank 4 over Maximal order of Rational
|
|
579
|
+
function field in x over Finite Field of size 7
|
|
580
|
+
Echelon basis matrix:
|
|
581
|
+
[1 0 0 0]
|
|
582
|
+
[0 1 0 0]
|
|
583
|
+
[0 0 1 0]
|
|
584
|
+
[0 0 0 1]
|
|
585
|
+
"""
|
|
586
|
+
return self._module
|