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,789 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
Drinfeld modules over a base
|
|
5
|
+
|
|
6
|
+
This module provides the class
|
|
7
|
+
:class:`sage.category.drinfeld_modules.DrinfeldModules`.
|
|
8
|
+
|
|
9
|
+
AUTHORS:
|
|
10
|
+
|
|
11
|
+
- Antoine Leudière (2022-04)
|
|
12
|
+
- Xavier Caruso (2022-06)
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
# *****************************************************************************
|
|
16
|
+
# Copyright (C) 2022 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
17
|
+
# Antoine Leudière <antoine.leudiere@inria.fr>
|
|
18
|
+
#
|
|
19
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
20
|
+
# http://www.gnu.org/licenses/
|
|
21
|
+
# ******************************************************************************
|
|
22
|
+
|
|
23
|
+
from sage.categories.objects import Objects
|
|
24
|
+
from sage.categories.category_types import Category_over_base_ring
|
|
25
|
+
from sage.categories.homsets import Homsets
|
|
26
|
+
from sage.misc.functional import log
|
|
27
|
+
from sage.misc.latex import latex
|
|
28
|
+
from sage.misc.lazy_import import lazy_import
|
|
29
|
+
from sage.rings.integer import Integer
|
|
30
|
+
|
|
31
|
+
lazy_import('sage.rings.polynomial.ore_polynomial_ring', 'OrePolynomialRing')
|
|
32
|
+
lazy_import('sage.rings.polynomial.polynomial_ring', 'PolynomialRing_generic')
|
|
33
|
+
lazy_import('sage.rings.ring_extension', 'RingExtension_generic')
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class DrinfeldModules(Category_over_base_ring):
|
|
37
|
+
r"""
|
|
38
|
+
This class implements the category of Drinfeld
|
|
39
|
+
`\mathbb{F}_q[T]`-modules on a given base field.
|
|
40
|
+
|
|
41
|
+
Let `\mathbb{F}_q[T]` be a polynomial ring with coefficients in a
|
|
42
|
+
finite field `\mathbb{F}_q` and let `K` be a field. Fix a ring
|
|
43
|
+
morphism `\gamma: \mathbb{F}_q[T] \to K`; we say that `K` is an
|
|
44
|
+
`\mathbb{F}_q[T]`*-field*. Let `K\{\tau\}` be the ring of Ore
|
|
45
|
+
polynomials with coefficients in `K`, whose multiplication is given
|
|
46
|
+
by the rule `\tau \lambda = \lambda^q \tau` for any `\lambda \in K`.
|
|
47
|
+
|
|
48
|
+
The extension `K`/`\mathbb{F}_q[T]` (represented as an instance of
|
|
49
|
+
the class :class:`sage.rings.ring_extension.RingExtension`) is the
|
|
50
|
+
*base field* of the category; its defining morphism `\gamma` is
|
|
51
|
+
called the *base morphism*.
|
|
52
|
+
|
|
53
|
+
The monic polynomial that generates the kernel of `\gamma` is called
|
|
54
|
+
the `\mathbb{F}_q[T]`-*characteristic*, or *function-field
|
|
55
|
+
characteristic*, of the base field. We say that `\mathbb{F}_q[T]` is
|
|
56
|
+
the *function ring* of the category; `K\{\tau\}` is the *Ore
|
|
57
|
+
polynomial ring*. The constant coefficient of the category is the
|
|
58
|
+
image of `T` under the base morphism.
|
|
59
|
+
|
|
60
|
+
.. RUBRIC:: Construction
|
|
61
|
+
|
|
62
|
+
Generally, Drinfeld modules objects are created before their
|
|
63
|
+
category, and the category is retrieved as an attribute of the
|
|
64
|
+
Drinfeld module::
|
|
65
|
+
|
|
66
|
+
sage: Fq = GF(11)
|
|
67
|
+
sage: A.<T> = Fq[]
|
|
68
|
+
sage: K.<z> = Fq.extension(4)
|
|
69
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
70
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
71
|
+
sage: C = phi.category()
|
|
72
|
+
sage: C
|
|
73
|
+
Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
|
|
74
|
+
|
|
75
|
+
The output tells the user that the category is only defined by its
|
|
76
|
+
base.
|
|
77
|
+
|
|
78
|
+
.. RUBRIC:: Properties of the category
|
|
79
|
+
|
|
80
|
+
The base field is retrieved using the method :meth:`base`.
|
|
81
|
+
|
|
82
|
+
sage: C.base()
|
|
83
|
+
Finite Field in z of size 11^4 over its base
|
|
84
|
+
|
|
85
|
+
Equivalently, one can use :meth:`base_morphism` to retrieve the base
|
|
86
|
+
morphism::
|
|
87
|
+
|
|
88
|
+
sage: C.base_morphism()
|
|
89
|
+
Ring morphism:
|
|
90
|
+
From: Univariate Polynomial Ring in T over Finite Field of size 11
|
|
91
|
+
To: Finite Field in z of size 11^4 over its base
|
|
92
|
+
Defn: T |--> z^3 + 7*z^2 + 6*z + 10
|
|
93
|
+
|
|
94
|
+
The so-called constant coefficient --- which is the same for all
|
|
95
|
+
Drinfeld modules in the category --- is simply the image of `T` by
|
|
96
|
+
the base morphism::
|
|
97
|
+
|
|
98
|
+
sage: C.constant_coefficient()
|
|
99
|
+
z^3 + 7*z^2 + 6*z + 10
|
|
100
|
+
sage: C.base_morphism()(T) == C.constant_coefficient()
|
|
101
|
+
True
|
|
102
|
+
|
|
103
|
+
Similarly, the function ring-characteristic of the category is
|
|
104
|
+
either `0` or the unique monic polynomial in `\mathbb{F}_q[T]` that
|
|
105
|
+
generates the kernel of the base::
|
|
106
|
+
|
|
107
|
+
sage: C.characteristic()
|
|
108
|
+
T^2 + 7*T + 2
|
|
109
|
+
sage: C.base_morphism()(C.characteristic())
|
|
110
|
+
0
|
|
111
|
+
|
|
112
|
+
The base field, base morphism, function ring and Ore polynomial ring
|
|
113
|
+
are the same for the category and its objects::
|
|
114
|
+
|
|
115
|
+
sage: C.base() is phi.base()
|
|
116
|
+
True
|
|
117
|
+
sage: C.base_morphism() is phi.base_morphism()
|
|
118
|
+
True
|
|
119
|
+
|
|
120
|
+
sage: C.function_ring()
|
|
121
|
+
Univariate Polynomial Ring in T over Finite Field of size 11
|
|
122
|
+
sage: C.function_ring() is phi.function_ring()
|
|
123
|
+
True
|
|
124
|
+
|
|
125
|
+
sage: C.ore_polring()
|
|
126
|
+
Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
|
|
127
|
+
sage: C.ore_polring() is phi.ore_polring()
|
|
128
|
+
True
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
.. RUBRIC:: Creating Drinfeld module objects from the category
|
|
132
|
+
|
|
133
|
+
Calling :meth:`object` with an Ore polynomial creates a Drinfeld module
|
|
134
|
+
object in the category whose generator is the input::
|
|
135
|
+
|
|
136
|
+
sage: psi = C.object([p_root, 1])
|
|
137
|
+
sage: psi
|
|
138
|
+
Drinfeld module defined by T |--> t + z^3 + 7*z^2 + 6*z + 10
|
|
139
|
+
sage: psi.category() is C
|
|
140
|
+
True
|
|
141
|
+
|
|
142
|
+
Of course, the constant coefficient of the input must be the same as
|
|
143
|
+
the category::
|
|
144
|
+
|
|
145
|
+
sage: C.object([z, 1])
|
|
146
|
+
Traceback (most recent call last):
|
|
147
|
+
...
|
|
148
|
+
ValueError: constant coefficient must equal that of the category
|
|
149
|
+
|
|
150
|
+
It is also possible to create a random object in the category. The
|
|
151
|
+
input is the desired rank::
|
|
152
|
+
|
|
153
|
+
sage: rho = C.random_object(2)
|
|
154
|
+
sage: rho # random
|
|
155
|
+
Drinfeld module defined by T |--> (7*z^3 + 7*z^2 + 10*z + 2)*t^2 + (9*z^3 + 5*z^2 + 2*z + 7)*t + z^3 + 7*z^2 + 6*z + 10
|
|
156
|
+
sage: rho.rank() == 2
|
|
157
|
+
True
|
|
158
|
+
sage: rho.category() is C
|
|
159
|
+
True
|
|
160
|
+
|
|
161
|
+
TESTS::
|
|
162
|
+
|
|
163
|
+
sage: Fq = GF(11)
|
|
164
|
+
sage: A.<T> = Fq[]
|
|
165
|
+
sage: K.<z> = Fq.extension(4)
|
|
166
|
+
sage: from sage.categories.drinfeld_modules import DrinfeldModules
|
|
167
|
+
sage: base = Hom(A, K)(0)
|
|
168
|
+
sage: C = DrinfeldModules(base)
|
|
169
|
+
Traceback (most recent call last):
|
|
170
|
+
...
|
|
171
|
+
TypeError: base field must be a ring extension
|
|
172
|
+
|
|
173
|
+
::
|
|
174
|
+
|
|
175
|
+
sage: C.base().defining_morphism() == C.base_morphism()
|
|
176
|
+
True
|
|
177
|
+
|
|
178
|
+
::
|
|
179
|
+
|
|
180
|
+
sage: base = Hom(A, A)(1)
|
|
181
|
+
sage: C = DrinfeldModules(base)
|
|
182
|
+
Traceback (most recent call last):
|
|
183
|
+
...
|
|
184
|
+
TypeError: base field must be a ring extension
|
|
185
|
+
|
|
186
|
+
::
|
|
187
|
+
|
|
188
|
+
sage: base = 'I hate Rostropovitch'
|
|
189
|
+
sage: C = DrinfeldModules(base) # known bug (blankline)
|
|
190
|
+
<BLANKLINE>
|
|
191
|
+
Traceback (most recent call last):
|
|
192
|
+
...
|
|
193
|
+
TypeError: input must be a ring morphism
|
|
194
|
+
|
|
195
|
+
::
|
|
196
|
+
|
|
197
|
+
sage: ZZT.<T> = ZZ[]
|
|
198
|
+
sage: base = Hom(ZZT, K)(1)
|
|
199
|
+
sage: C = DrinfeldModules(base) # known bug (blankline)
|
|
200
|
+
<BLANKLINE>
|
|
201
|
+
Traceback (most recent call last):
|
|
202
|
+
...
|
|
203
|
+
TypeError: function ring base must be a finite field
|
|
204
|
+
"""
|
|
205
|
+
|
|
206
|
+
def __init__(self, base_field, name='t'):
|
|
207
|
+
r"""
|
|
208
|
+
Initialize ``self``.
|
|
209
|
+
|
|
210
|
+
INPUT:
|
|
211
|
+
|
|
212
|
+
- ``base_field`` -- the base field, which is a ring extension
|
|
213
|
+
over a base
|
|
214
|
+
|
|
215
|
+
- ``name`` -- (default: ``'t'``) the name of the Ore polynomial
|
|
216
|
+
variable
|
|
217
|
+
|
|
218
|
+
TESTS::
|
|
219
|
+
|
|
220
|
+
sage: Fq = GF(11)
|
|
221
|
+
sage: A.<T> = Fq[]
|
|
222
|
+
sage: K.<z> = Fq.extension(4)
|
|
223
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
224
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
225
|
+
sage: C = phi.category()
|
|
226
|
+
sage: ore_polring.<t> = OrePolynomialRing(phi.base(), phi.base().frobenius_endomorphism())
|
|
227
|
+
sage: C._ore_polring is ore_polring
|
|
228
|
+
True
|
|
229
|
+
sage: i = phi.base().coerce_map_from(K)
|
|
230
|
+
sage: base_morphism = Hom(A, K)(p_root)
|
|
231
|
+
sage: C.base() == K.over(base_morphism)
|
|
232
|
+
True
|
|
233
|
+
sage: C._base_morphism == i * base_morphism
|
|
234
|
+
True
|
|
235
|
+
sage: C._function_ring is A
|
|
236
|
+
True
|
|
237
|
+
sage: C._constant_coefficient == base_morphism(T)
|
|
238
|
+
True
|
|
239
|
+
sage: C._characteristic(C._constant_coefficient)
|
|
240
|
+
0
|
|
241
|
+
"""
|
|
242
|
+
# Check input is a ring extension
|
|
243
|
+
if not isinstance(base_field, RingExtension_generic):
|
|
244
|
+
raise TypeError('base field must be a ring extension')
|
|
245
|
+
base_morphism = base_field.defining_morphism()
|
|
246
|
+
self._base_morphism = base_morphism
|
|
247
|
+
# Check input is a field
|
|
248
|
+
if not base_field.is_field():
|
|
249
|
+
raise TypeError('input must be a field')
|
|
250
|
+
self._base_field = base_field
|
|
251
|
+
self._function_ring = base_morphism.domain()
|
|
252
|
+
# Check domain of base morphism is Fq[T]
|
|
253
|
+
function_ring = self._function_ring
|
|
254
|
+
if not isinstance(function_ring, PolynomialRing_generic):
|
|
255
|
+
raise NotImplementedError('function ring must be a polynomial '
|
|
256
|
+
'ring')
|
|
257
|
+
function_ring_base = function_ring.base_ring()
|
|
258
|
+
if not function_ring_base.is_field() \
|
|
259
|
+
or not function_ring_base.is_finite():
|
|
260
|
+
raise TypeError('function ring base must be a finite field')
|
|
261
|
+
# Shortcuts
|
|
262
|
+
Fq = function_ring_base
|
|
263
|
+
A = function_ring
|
|
264
|
+
T = A.gen()
|
|
265
|
+
K = base_field # A ring extension
|
|
266
|
+
# Build K{t}
|
|
267
|
+
d = log(Fq.cardinality(), Fq.characteristic())
|
|
268
|
+
tau = K.frobenius_endomorphism(d)
|
|
269
|
+
self._ore_polring = OrePolynomialRing(K, tau, names=name,
|
|
270
|
+
polcast=False)
|
|
271
|
+
# Create constant coefficient
|
|
272
|
+
self._constant_coefficient = base_morphism(T)
|
|
273
|
+
# Create characteristic
|
|
274
|
+
self._characteristic = None
|
|
275
|
+
if K.is_finite():
|
|
276
|
+
self._characteristic = A(K.over(Fq)(base_morphism(T)).minpoly())
|
|
277
|
+
else:
|
|
278
|
+
try:
|
|
279
|
+
if base_morphism.is_injective():
|
|
280
|
+
self._characteristic = Integer(0)
|
|
281
|
+
except NotImplementedError:
|
|
282
|
+
pass
|
|
283
|
+
# Create base over constants field
|
|
284
|
+
i = A.coerce_map_from(Fq)
|
|
285
|
+
Fq_to_K = self._base_morphism * i
|
|
286
|
+
self._base_over_constants_field = base_field.over(Fq_to_K)
|
|
287
|
+
super().__init__(base=base_field)
|
|
288
|
+
|
|
289
|
+
def _latex_(self):
|
|
290
|
+
r"""
|
|
291
|
+
Return a latex representation of the category.
|
|
292
|
+
|
|
293
|
+
OUTPUT: string
|
|
294
|
+
|
|
295
|
+
EXAMPLES::
|
|
296
|
+
|
|
297
|
+
sage: Fq = GF(11)
|
|
298
|
+
sage: A.<T> = Fq[]
|
|
299
|
+
sage: K.<z> = Fq.extension(4)
|
|
300
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
301
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
302
|
+
sage: C = phi.category()
|
|
303
|
+
sage: latex(C)
|
|
304
|
+
\text{Category{ }of{ }Drinfeld{ }modules{ }over{ }\Bold{F}_{11^{4}}
|
|
305
|
+
"""
|
|
306
|
+
return f'\\text{{Category{{ }}of{{ }}Drinfeld{{ }}modules{{ }}' \
|
|
307
|
+
f'over{{ }}{latex(self._base_field)}'
|
|
308
|
+
|
|
309
|
+
def _repr_(self):
|
|
310
|
+
r"""
|
|
311
|
+
Return a string representation of the category.
|
|
312
|
+
|
|
313
|
+
OUTPUT: string
|
|
314
|
+
|
|
315
|
+
EXAMPLES::
|
|
316
|
+
|
|
317
|
+
sage: Fq = GF(11)
|
|
318
|
+
sage: A.<T> = Fq[]
|
|
319
|
+
sage: K.<z> = Fq.extension(4)
|
|
320
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
321
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
322
|
+
sage: C = phi.category()
|
|
323
|
+
sage: C
|
|
324
|
+
Category of Drinfeld modules over Finite Field in z of size 11^4 over its base
|
|
325
|
+
"""
|
|
326
|
+
return f'Category of Drinfeld modules over {self._base_field}'
|
|
327
|
+
|
|
328
|
+
def Homsets(self):
|
|
329
|
+
r"""
|
|
330
|
+
Return the category of homsets.
|
|
331
|
+
|
|
332
|
+
EXAMPLES::
|
|
333
|
+
|
|
334
|
+
sage: Fq = GF(11)
|
|
335
|
+
sage: A.<T> = Fq[]
|
|
336
|
+
sage: K.<z> = Fq.extension(4)
|
|
337
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
338
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
339
|
+
sage: C = phi.category()
|
|
340
|
+
|
|
341
|
+
sage: from sage.categories.homsets import Homsets
|
|
342
|
+
sage: C.Homsets() is Homsets()
|
|
343
|
+
True
|
|
344
|
+
"""
|
|
345
|
+
return Homsets()
|
|
346
|
+
|
|
347
|
+
def Endsets(self):
|
|
348
|
+
r"""
|
|
349
|
+
Return the category of endsets.
|
|
350
|
+
|
|
351
|
+
EXAMPLES::
|
|
352
|
+
|
|
353
|
+
sage: Fq = GF(11)
|
|
354
|
+
sage: A.<T> = Fq[]
|
|
355
|
+
sage: K.<z> = Fq.extension(4)
|
|
356
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
357
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
358
|
+
sage: C = phi.category()
|
|
359
|
+
|
|
360
|
+
sage: from sage.categories.homsets import Homsets
|
|
361
|
+
sage: C.Endsets() is Homsets().Endsets()
|
|
362
|
+
True
|
|
363
|
+
"""
|
|
364
|
+
return Homsets().Endsets()
|
|
365
|
+
|
|
366
|
+
def base_morphism(self):
|
|
367
|
+
r"""
|
|
368
|
+
Return the base morphism of the category.
|
|
369
|
+
|
|
370
|
+
EXAMPLES::
|
|
371
|
+
|
|
372
|
+
sage: Fq = GF(11)
|
|
373
|
+
sage: A.<T> = Fq[]
|
|
374
|
+
sage: K.<z> = Fq.extension(4)
|
|
375
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
376
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
377
|
+
sage: C = phi.category()
|
|
378
|
+
sage: C.base_morphism()
|
|
379
|
+
Ring morphism:
|
|
380
|
+
From: Univariate Polynomial Ring in T over Finite Field of size 11
|
|
381
|
+
To: Finite Field in z of size 11^4 over its base
|
|
382
|
+
Defn: T |--> z^3 + 7*z^2 + 6*z + 10
|
|
383
|
+
|
|
384
|
+
sage: C.constant_coefficient() == C.base_morphism()(T)
|
|
385
|
+
True
|
|
386
|
+
"""
|
|
387
|
+
return self._base_morphism
|
|
388
|
+
|
|
389
|
+
def base_over_constants_field(self):
|
|
390
|
+
r"""
|
|
391
|
+
Return the base field, seen as an extension over the constants
|
|
392
|
+
field `\mathbb{F}_q`.
|
|
393
|
+
|
|
394
|
+
EXAMPLES::
|
|
395
|
+
|
|
396
|
+
sage: Fq = GF(11)
|
|
397
|
+
sage: A.<T> = Fq[]
|
|
398
|
+
sage: K.<z> = Fq.extension(4)
|
|
399
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
400
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
401
|
+
sage: C = phi.category()
|
|
402
|
+
sage: C.base_over_constants_field()
|
|
403
|
+
Field in z with defining polynomial x^4 + 8*x^2 + 10*x + 2 over its base
|
|
404
|
+
"""
|
|
405
|
+
return self._base_over_constants_field
|
|
406
|
+
|
|
407
|
+
def characteristic(self):
|
|
408
|
+
r"""
|
|
409
|
+
Return the function ring-characteristic.
|
|
410
|
+
|
|
411
|
+
EXAMPLES::
|
|
412
|
+
|
|
413
|
+
sage: Fq = GF(11)
|
|
414
|
+
sage: A.<T> = Fq[]
|
|
415
|
+
sage: K.<z> = Fq.extension(4)
|
|
416
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
417
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
418
|
+
sage: C = phi.category()
|
|
419
|
+
sage: C.characteristic()
|
|
420
|
+
T^2 + 7*T + 2
|
|
421
|
+
|
|
422
|
+
::
|
|
423
|
+
|
|
424
|
+
sage: psi = DrinfeldModule(A, [Frac(A).gen(), 1])
|
|
425
|
+
sage: C = psi.category()
|
|
426
|
+
sage: C.characteristic()
|
|
427
|
+
0
|
|
428
|
+
"""
|
|
429
|
+
if self._characteristic is None:
|
|
430
|
+
raise NotImplementedError('function ring characteristic not '
|
|
431
|
+
'implemented in this case')
|
|
432
|
+
return self._characteristic
|
|
433
|
+
|
|
434
|
+
def constant_coefficient(self):
|
|
435
|
+
r"""
|
|
436
|
+
Return the constant coefficient of the category.
|
|
437
|
+
|
|
438
|
+
EXAMPLES::
|
|
439
|
+
|
|
440
|
+
sage: Fq = GF(11)
|
|
441
|
+
sage: A.<T> = Fq[]
|
|
442
|
+
sage: K.<z> = Fq.extension(4)
|
|
443
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
444
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
445
|
+
sage: C = phi.category()
|
|
446
|
+
sage: C.constant_coefficient()
|
|
447
|
+
z^3 + 7*z^2 + 6*z + 10
|
|
448
|
+
sage: C.constant_coefficient() == C.base()(T)
|
|
449
|
+
True
|
|
450
|
+
"""
|
|
451
|
+
return self._constant_coefficient
|
|
452
|
+
|
|
453
|
+
def function_ring(self):
|
|
454
|
+
r"""
|
|
455
|
+
Return the function ring of the category.
|
|
456
|
+
|
|
457
|
+
EXAMPLES::
|
|
458
|
+
|
|
459
|
+
sage: Fq = GF(11)
|
|
460
|
+
sage: A.<T> = Fq[]
|
|
461
|
+
sage: K.<z> = Fq.extension(4)
|
|
462
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
463
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
464
|
+
sage: C = phi.category()
|
|
465
|
+
sage: C.function_ring()
|
|
466
|
+
Univariate Polynomial Ring in T over Finite Field of size 11
|
|
467
|
+
sage: C.function_ring() is A
|
|
468
|
+
True
|
|
469
|
+
"""
|
|
470
|
+
return self._function_ring
|
|
471
|
+
|
|
472
|
+
def object(self, gen):
|
|
473
|
+
r"""
|
|
474
|
+
Return a Drinfeld module object in the category whose generator
|
|
475
|
+
is the input.
|
|
476
|
+
|
|
477
|
+
INPUT:
|
|
478
|
+
|
|
479
|
+
- ``gen`` -- the generator of the Drinfeld module, given as an Ore
|
|
480
|
+
polynomial or a list of coefficients
|
|
481
|
+
|
|
482
|
+
EXAMPLES::
|
|
483
|
+
|
|
484
|
+
sage: Fq = GF(11)
|
|
485
|
+
sage: A.<T> = Fq[]
|
|
486
|
+
sage: K.<z> = Fq.extension(4)
|
|
487
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
488
|
+
sage: psi = DrinfeldModule(A, [p_root, 1])
|
|
489
|
+
sage: C = psi.category()
|
|
490
|
+
|
|
491
|
+
sage: phi = C.object([p_root, 0, 1])
|
|
492
|
+
sage: phi
|
|
493
|
+
Drinfeld module defined by T |--> t^2 + z^3 + 7*z^2 + 6*z + 10
|
|
494
|
+
sage: t = phi.ore_polring().gen()
|
|
495
|
+
sage: C.object(t^2 + z^3 + 7*z^2 + 6*z + 10) is phi
|
|
496
|
+
True
|
|
497
|
+
"""
|
|
498
|
+
from sage.rings.function_field.drinfeld_modules.drinfeld_module import DrinfeldModule
|
|
499
|
+
# If gen is not in the Ore polring, an exception is raised
|
|
500
|
+
gen = self._ore_polring(gen)
|
|
501
|
+
T = self._function_ring.gen()
|
|
502
|
+
if gen[0] != self._base_morphism(T):
|
|
503
|
+
raise ValueError('constant coefficient must equal that of the '
|
|
504
|
+
'category')
|
|
505
|
+
return DrinfeldModule(self._function_ring, gen)
|
|
506
|
+
|
|
507
|
+
def ore_polring(self):
|
|
508
|
+
r"""
|
|
509
|
+
Return the Ore polynomial ring of the category.
|
|
510
|
+
|
|
511
|
+
EXAMPLES::
|
|
512
|
+
|
|
513
|
+
sage: Fq = GF(11)
|
|
514
|
+
sage: A.<T> = Fq[]
|
|
515
|
+
sage: K.<z> = Fq.extension(4)
|
|
516
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
517
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
518
|
+
sage: C = phi.category()
|
|
519
|
+
sage: C.ore_polring()
|
|
520
|
+
Ore Polynomial Ring in t over Finite Field in z of size 11^4 over its base twisted by Frob
|
|
521
|
+
"""
|
|
522
|
+
return self._ore_polring
|
|
523
|
+
|
|
524
|
+
def random_object(self, rank):
|
|
525
|
+
r"""
|
|
526
|
+
Return a random Drinfeld module in the category with given rank.
|
|
527
|
+
|
|
528
|
+
INPUT:
|
|
529
|
+
|
|
530
|
+
- ``rank`` -- integer; the rank of the Drinfeld module
|
|
531
|
+
|
|
532
|
+
EXAMPLES::
|
|
533
|
+
|
|
534
|
+
sage: Fq = GF(11)
|
|
535
|
+
sage: A.<T> = Fq[]
|
|
536
|
+
sage: K.<z> = Fq.extension(4)
|
|
537
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
538
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
539
|
+
sage: C = phi.category()
|
|
540
|
+
|
|
541
|
+
sage: psi = C.random_object(3) # random
|
|
542
|
+
Drinfeld module defined by T |--> (6*z^3 + 4*z^2 + 10*z + 9)*t^3 + (4*z^3 + 8*z^2 + 8*z)*t^2 + (10*z^3 + 3*z^2 + 6*z)*t + z^3 + 7*z^2 + 6*z + 10
|
|
543
|
+
sage: psi.rank() == 3
|
|
544
|
+
True
|
|
545
|
+
"""
|
|
546
|
+
if not isinstance(rank, Integer):
|
|
547
|
+
raise TypeError('rank must be a positive integer')
|
|
548
|
+
if rank <= 0:
|
|
549
|
+
raise ValueError('rank must be a positive integer')
|
|
550
|
+
|
|
551
|
+
K = self._base_field
|
|
552
|
+
coeffs = [self._constant_coefficient]
|
|
553
|
+
coeffs.extend(K.random_element() for _ in range(rank - 1))
|
|
554
|
+
dom_coeff = 0
|
|
555
|
+
while dom_coeff == 0:
|
|
556
|
+
dom_coeff = K.random_element()
|
|
557
|
+
coeffs.append(dom_coeff)
|
|
558
|
+
|
|
559
|
+
return self.object(coeffs)
|
|
560
|
+
|
|
561
|
+
def super_categories(self):
|
|
562
|
+
"""
|
|
563
|
+
EXAMPLES::
|
|
564
|
+
|
|
565
|
+
sage: Fq = GF(11)
|
|
566
|
+
sage: A.<T> = Fq[]
|
|
567
|
+
sage: K.<z> = Fq.extension(4)
|
|
568
|
+
sage: p_root = z^3 + 7*z^2 + 6*z + 10
|
|
569
|
+
sage: phi = DrinfeldModule(A, [p_root, 0, 0, 1])
|
|
570
|
+
sage: C = phi.category()
|
|
571
|
+
sage: C.super_categories()
|
|
572
|
+
[Category of objects]
|
|
573
|
+
"""
|
|
574
|
+
return [Objects()]
|
|
575
|
+
|
|
576
|
+
class ParentMethods:
|
|
577
|
+
|
|
578
|
+
def base(self):
|
|
579
|
+
r"""
|
|
580
|
+
Return the base field of this Drinfeld module, viewed as
|
|
581
|
+
an algebra over the function ring.
|
|
582
|
+
|
|
583
|
+
This is an instance of the class
|
|
584
|
+
:class:`sage.rings.ring_extension.RingExtension`.
|
|
585
|
+
|
|
586
|
+
EXAMPLES::
|
|
587
|
+
|
|
588
|
+
sage: Fq = GF(25)
|
|
589
|
+
sage: A.<T> = Fq[]
|
|
590
|
+
sage: K.<z12> = Fq.extension(6)
|
|
591
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
592
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
593
|
+
sage: phi.base()
|
|
594
|
+
Finite Field in z12 of size 5^12 over its base
|
|
595
|
+
|
|
596
|
+
The base can be infinite::
|
|
597
|
+
|
|
598
|
+
sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1])
|
|
599
|
+
sage: sigma.base()
|
|
600
|
+
Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base
|
|
601
|
+
"""
|
|
602
|
+
return self.category().base()
|
|
603
|
+
|
|
604
|
+
def base_morphism(self):
|
|
605
|
+
r"""
|
|
606
|
+
Return the base morphism of this Drinfeld module.
|
|
607
|
+
|
|
608
|
+
EXAMPLES::
|
|
609
|
+
|
|
610
|
+
sage: Fq = GF(25)
|
|
611
|
+
sage: A.<T> = Fq[]
|
|
612
|
+
sage: K.<z12> = Fq.extension(6)
|
|
613
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
614
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
615
|
+
sage: phi.base_morphism()
|
|
616
|
+
Ring morphism:
|
|
617
|
+
From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
|
|
618
|
+
To: Finite Field in z12 of size 5^12 over its base
|
|
619
|
+
Defn: T |--> 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
620
|
+
|
|
621
|
+
The base field can be infinite::
|
|
622
|
+
|
|
623
|
+
sage: sigma = DrinfeldModule(A, [Frac(A).gen(), 1])
|
|
624
|
+
sage: sigma.base_morphism()
|
|
625
|
+
Ring morphism:
|
|
626
|
+
From: Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
|
|
627
|
+
To: Fraction Field of Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2 over its base
|
|
628
|
+
Defn: T |--> T
|
|
629
|
+
"""
|
|
630
|
+
return self.category().base_morphism()
|
|
631
|
+
|
|
632
|
+
def base_over_constants_field(self):
|
|
633
|
+
r"""
|
|
634
|
+
Return the base field, seen as an extension over the constants
|
|
635
|
+
field `\mathbb{F}_q`.
|
|
636
|
+
|
|
637
|
+
This is an instance of the class
|
|
638
|
+
:class:`sage.rings.ring_extension.RingExtension`.
|
|
639
|
+
|
|
640
|
+
EXAMPLES::
|
|
641
|
+
|
|
642
|
+
sage: Fq = GF(25)
|
|
643
|
+
sage: A.<T> = Fq[]
|
|
644
|
+
sage: K.<z12> = Fq.extension(6)
|
|
645
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
646
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
647
|
+
sage: phi.base_over_constants_field()
|
|
648
|
+
Field in z12 with defining polynomial x^6 + (4*z2 + 3)*x^5 + x^4 + (3*z2 + 1)*x^3 + x^2 + (4*z2 + 1)*x + z2 over its base
|
|
649
|
+
"""
|
|
650
|
+
return self.category().base_over_constants_field()
|
|
651
|
+
|
|
652
|
+
def characteristic(self):
|
|
653
|
+
r"""
|
|
654
|
+
Return the function ring-characteristic.
|
|
655
|
+
|
|
656
|
+
EXAMPLES::
|
|
657
|
+
|
|
658
|
+
sage: Fq = GF(25)
|
|
659
|
+
sage: A.<T> = Fq[]
|
|
660
|
+
sage: K.<z12> = Fq.extension(6)
|
|
661
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
662
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
663
|
+
sage: phi.characteristic()
|
|
664
|
+
T^2 + (4*z2 + 2)*T + 2
|
|
665
|
+
sage: phi.base_morphism()(phi.characteristic())
|
|
666
|
+
0
|
|
667
|
+
|
|
668
|
+
::
|
|
669
|
+
|
|
670
|
+
sage: B.<Y> = Fq[]
|
|
671
|
+
sage: L = Frac(B)
|
|
672
|
+
sage: psi = DrinfeldModule(A, [L(1), 0, 0, L(1)])
|
|
673
|
+
sage: psi.characteristic()
|
|
674
|
+
Traceback (most recent call last):
|
|
675
|
+
...
|
|
676
|
+
NotImplementedError: function ring characteristic not implemented in this case
|
|
677
|
+
"""
|
|
678
|
+
return self.category().characteristic()
|
|
679
|
+
|
|
680
|
+
def function_ring(self):
|
|
681
|
+
r"""
|
|
682
|
+
Return the function ring of this Drinfeld module.
|
|
683
|
+
|
|
684
|
+
EXAMPLES::
|
|
685
|
+
|
|
686
|
+
sage: Fq = GF(25)
|
|
687
|
+
sage: A.<T> = Fq[]
|
|
688
|
+
sage: K.<z12> = Fq.extension(6)
|
|
689
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
690
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
691
|
+
sage: phi.function_ring()
|
|
692
|
+
Univariate Polynomial Ring in T over Finite Field in z2 of size 5^2
|
|
693
|
+
sage: phi.function_ring() is A
|
|
694
|
+
True
|
|
695
|
+
"""
|
|
696
|
+
return self.category().function_ring()
|
|
697
|
+
|
|
698
|
+
def constant_coefficient(self):
|
|
699
|
+
r"""
|
|
700
|
+
Return the constant coefficient of the generator
|
|
701
|
+
of this Drinfeld module.
|
|
702
|
+
|
|
703
|
+
OUTPUT: an element in the base field
|
|
704
|
+
|
|
705
|
+
EXAMPLES::
|
|
706
|
+
|
|
707
|
+
sage: Fq = GF(25)
|
|
708
|
+
sage: A.<T> = Fq[]
|
|
709
|
+
sage: K.<z12> = Fq.extension(6)
|
|
710
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
711
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
712
|
+
sage: phi.constant_coefficient() == p_root
|
|
713
|
+
True
|
|
714
|
+
|
|
715
|
+
Let `\mathbb{F}_q[T]` be the function ring, and let `\gamma` be
|
|
716
|
+
the base of the Drinfeld module. The constant coefficient is
|
|
717
|
+
`\gamma(T)`::
|
|
718
|
+
|
|
719
|
+
sage: C = phi.category()
|
|
720
|
+
sage: base = C.base()
|
|
721
|
+
sage: base(T) == phi.constant_coefficient()
|
|
722
|
+
True
|
|
723
|
+
|
|
724
|
+
Naturally, two Drinfeld modules in the same category have the
|
|
725
|
+
same constant coefficient::
|
|
726
|
+
|
|
727
|
+
sage: t = phi.ore_polring().gen()
|
|
728
|
+
sage: psi = C.object(phi.constant_coefficient() + t^3)
|
|
729
|
+
sage: psi
|
|
730
|
+
Drinfeld module defined by T |--> t^3 + 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
731
|
+
|
|
732
|
+
Reciprocally, it is impossible to create two Drinfeld modules in
|
|
733
|
+
this category if they do not share the same constant
|
|
734
|
+
coefficient::
|
|
735
|
+
|
|
736
|
+
sage: rho = C.object(phi.constant_coefficient() + 1 + t^3)
|
|
737
|
+
Traceback (most recent call last):
|
|
738
|
+
...
|
|
739
|
+
ValueError: constant coefficient must equal that of the category
|
|
740
|
+
"""
|
|
741
|
+
return self.category().constant_coefficient()
|
|
742
|
+
|
|
743
|
+
def ore_polring(self):
|
|
744
|
+
r"""
|
|
745
|
+
Return the Ore polynomial ring of this Drinfeld module.
|
|
746
|
+
|
|
747
|
+
EXAMPLES::
|
|
748
|
+
|
|
749
|
+
sage: Fq = GF(25)
|
|
750
|
+
sage: A.<T> = Fq[]
|
|
751
|
+
sage: K.<z12> = Fq.extension(6)
|
|
752
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
753
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
754
|
+
sage: S = phi.ore_polring()
|
|
755
|
+
sage: S
|
|
756
|
+
Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
|
|
757
|
+
|
|
758
|
+
The Ore polynomial ring can also be retrieved from the category
|
|
759
|
+
of the Drinfeld module::
|
|
760
|
+
|
|
761
|
+
sage: S is phi.category().ore_polring()
|
|
762
|
+
True
|
|
763
|
+
|
|
764
|
+
The generator of the Drinfeld module is in the Ore polynomial
|
|
765
|
+
ring::
|
|
766
|
+
|
|
767
|
+
sage: phi(T) in S
|
|
768
|
+
True
|
|
769
|
+
"""
|
|
770
|
+
return self.category().ore_polring()
|
|
771
|
+
|
|
772
|
+
def ore_variable(self):
|
|
773
|
+
r"""
|
|
774
|
+
Return the variable of the Ore polynomial ring of this Drinfeld module.
|
|
775
|
+
|
|
776
|
+
EXAMPLES::
|
|
777
|
+
|
|
778
|
+
sage: Fq = GF(25)
|
|
779
|
+
sage: A.<T> = Fq[]
|
|
780
|
+
sage: K.<z12> = Fq.extension(6)
|
|
781
|
+
sage: p_root = 2*z12^11 + 2*z12^10 + z12^9 + 3*z12^8 + z12^7 + 2*z12^5 + 2*z12^4 + 3*z12^3 + z12^2 + 2*z12
|
|
782
|
+
sage: phi = DrinfeldModule(A, [p_root, z12^3, z12^5])
|
|
783
|
+
|
|
784
|
+
sage: phi.ore_polring()
|
|
785
|
+
Ore Polynomial Ring in t over Finite Field in z12 of size 5^12 over its base twisted by Frob^2
|
|
786
|
+
sage: phi.ore_variable()
|
|
787
|
+
t
|
|
788
|
+
"""
|
|
789
|
+
return self.category().ore_polring().gen()
|