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,15 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
from sage.rings.finite_rings.hom_finite_field cimport (SectionFiniteFieldHomomorphism_generic,
|
|
3
|
+
FiniteFieldHomomorphism_generic, FrobeniusEndomorphism_finite_field)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
cdef class SectionFiniteFieldHomomorphism_prime(SectionFiniteFieldHomomorphism_generic):
|
|
7
|
+
pass
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
cdef class FiniteFieldHomomorphism_prime(FiniteFieldHomomorphism_generic):
|
|
11
|
+
pass
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
cdef class FrobeniusEndomorphism_prime(FrobeniusEndomorphism_finite_field):
|
|
15
|
+
pass
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Finite field morphisms for prime fields
|
|
4
|
+
|
|
5
|
+
Special implementation for prime finite field of:
|
|
6
|
+
|
|
7
|
+
- embeddings of such field into general finite fields
|
|
8
|
+
|
|
9
|
+
- Frobenius endomorphisms (= identity with our assumptions)
|
|
10
|
+
|
|
11
|
+
.. SEEALSO::
|
|
12
|
+
|
|
13
|
+
:mod:`sage.rings.finite_rings.hom_finite_field`
|
|
14
|
+
|
|
15
|
+
AUTHOR:
|
|
16
|
+
|
|
17
|
+
- Xavier Caruso (2012-06-29)
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
#############################################################################
|
|
21
|
+
# Copyright (C) 2012 Xavier Caruso <xavier.caruso@normalesup.org>
|
|
22
|
+
#
|
|
23
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
24
|
+
#
|
|
25
|
+
# http://www.gnu.org/licenses/
|
|
26
|
+
#****************************************************************************
|
|
27
|
+
|
|
28
|
+
from sage.categories.homset import Hom
|
|
29
|
+
from sage.structure.element cimport Element
|
|
30
|
+
|
|
31
|
+
from sage.rings.finite_rings.hom_finite_field cimport SectionFiniteFieldHomomorphism_generic
|
|
32
|
+
from sage.rings.finite_rings.hom_finite_field cimport FiniteFieldHomomorphism_generic
|
|
33
|
+
from sage.rings.finite_rings.hom_finite_field cimport FrobeniusEndomorphism_finite_field
|
|
34
|
+
|
|
35
|
+
from sage.rings.finite_rings.finite_field_base import FiniteField
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
cdef class SectionFiniteFieldHomomorphism_prime(SectionFiniteFieldHomomorphism_generic):
|
|
39
|
+
cpdef Element _call_(self, x):
|
|
40
|
+
try:
|
|
41
|
+
return self._codomain._element_constructor_(x)
|
|
42
|
+
except TypeError:
|
|
43
|
+
raise ValueError("%s is not in the image of %s" % (x, self._inverse))
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
cdef class FiniteFieldHomomorphism_prime(FiniteFieldHomomorphism_generic):
|
|
47
|
+
"""
|
|
48
|
+
A class implementing embeddings of prime finite fields into
|
|
49
|
+
general finite fields.
|
|
50
|
+
"""
|
|
51
|
+
def __init__(self, parent, im_gens=None, base_map=None, check=False, section_class=None):
|
|
52
|
+
"""
|
|
53
|
+
TESTS::
|
|
54
|
+
|
|
55
|
+
sage: from sage.rings.finite_rings.hom_prime_finite_field import FiniteFieldHomomorphism_prime
|
|
56
|
+
sage: k = GF(3)
|
|
57
|
+
sage: K.<T> = GF(3^4) # needs sage.rings.finite_rings
|
|
58
|
+
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)); f # needs sage.rings.finite_rings
|
|
59
|
+
Ring morphism:
|
|
60
|
+
From: Finite Field of size 3
|
|
61
|
+
To: Finite Field in T of size 3^4
|
|
62
|
+
Defn: 1 |--> 1
|
|
63
|
+
|
|
64
|
+
sage: k.<t> = GF(3^2) # needs sage.rings.finite_rings
|
|
65
|
+
sage: K.<T> = GF(3^4) # needs sage.rings.finite_rings
|
|
66
|
+
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K)); f # needs sage.rings.finite_rings
|
|
67
|
+
Traceback (most recent call last):
|
|
68
|
+
...
|
|
69
|
+
TypeError: The domain is not a finite prime field
|
|
70
|
+
"""
|
|
71
|
+
domain = parent.domain()
|
|
72
|
+
if not isinstance(domain, FiniteField) or not domain.is_prime_field():
|
|
73
|
+
raise TypeError("The domain is not a finite prime field")
|
|
74
|
+
if section_class is None:
|
|
75
|
+
section_class = SectionFiniteFieldHomomorphism_prime
|
|
76
|
+
FiniteFieldHomomorphism_generic.__init__(self, parent, im_gens, base_map=base_map,
|
|
77
|
+
check=check, section_class=section_class)
|
|
78
|
+
|
|
79
|
+
cpdef Element _call_(self, x):
|
|
80
|
+
"""
|
|
81
|
+
TESTS::
|
|
82
|
+
|
|
83
|
+
sage: # needs sage.rings.finite_rings
|
|
84
|
+
sage: from sage.rings.finite_rings.hom_prime_finite_field import FiniteFieldHomomorphism_prime
|
|
85
|
+
sage: k = GF(3)
|
|
86
|
+
sage: K.<t> = GF(3^5)
|
|
87
|
+
sage: f = FiniteFieldHomomorphism_prime(Hom(k, K))
|
|
88
|
+
sage: a = f(4); a
|
|
89
|
+
1
|
|
90
|
+
sage: a.parent()
|
|
91
|
+
Finite Field in t of size 3^5
|
|
92
|
+
"""
|
|
93
|
+
return self._codomain._element_constructor_(x)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
cdef class FrobeniusEndomorphism_prime(FrobeniusEndomorphism_finite_field):
|
|
97
|
+
"""
|
|
98
|
+
A class implementing Frobenius endomorphism on prime finite
|
|
99
|
+
fields (i.e. identity map :-).
|
|
100
|
+
"""
|
|
101
|
+
def __init__(self, domain, power=1):
|
|
102
|
+
if not isinstance(domain, FiniteField) or not domain.is_prime_field():
|
|
103
|
+
raise TypeError("The domain is not a finite prime field")
|
|
104
|
+
FrobeniusEndomorphism_finite_field.__init__(self, Hom(domain, domain))
|
|
105
|
+
self._order = 1
|
|
106
|
+
self._power = 0
|
|
107
|
+
|
|
108
|
+
cpdef Element _call_(self, x):
|
|
109
|
+
"""
|
|
110
|
+
TESTS::
|
|
111
|
+
|
|
112
|
+
sage: k = GF(5)
|
|
113
|
+
sage: Frob = k.frobenius_endomorphism()
|
|
114
|
+
sage: Frob(2)
|
|
115
|
+
2
|
|
116
|
+
"""
|
|
117
|
+
return x
|
|
118
|
+
|
|
119
|
+
def _composition(self, right):
|
|
120
|
+
"""
|
|
121
|
+
Return ``self`` o ``right``.
|
|
122
|
+
|
|
123
|
+
It is always ``right``, since ``self`` is always identity because
|
|
124
|
+
the domain is a prime field.
|
|
125
|
+
"""
|
|
126
|
+
return right
|
|
127
|
+
|
|
128
|
+
def __pow__(self, n, modulus):
|
|
129
|
+
"""
|
|
130
|
+
Return the `n`-th iterate of this endomorphism
|
|
131
|
+
(that is the identity since the domain is a prime
|
|
132
|
+
field).
|
|
133
|
+
"""
|
|
134
|
+
return self
|
|
135
|
+
|
|
136
|
+
def fixed_field(self):
|
|
137
|
+
"""
|
|
138
|
+
Return the fixed field of ``self``.
|
|
139
|
+
|
|
140
|
+
OUTPUT:
|
|
141
|
+
|
|
142
|
+
- a tuple `(K, e)`, where `K` is the subfield of the domain
|
|
143
|
+
consisting of elements fixed by ``self`` and `e` is an
|
|
144
|
+
embedding of `K` into the domain.
|
|
145
|
+
|
|
146
|
+
.. NOTE::
|
|
147
|
+
|
|
148
|
+
Since here the domain is a prime field, the subfield
|
|
149
|
+
is the same prime field and the embedding is necessarily
|
|
150
|
+
the identity map.
|
|
151
|
+
|
|
152
|
+
EXAMPLES::
|
|
153
|
+
|
|
154
|
+
sage: k.<t> = GF(5)
|
|
155
|
+
sage: f = k.frobenius_endomorphism(2); f
|
|
156
|
+
Identity endomorphism of Finite Field of size 5
|
|
157
|
+
sage: kfixed, embed = f.fixed_field()
|
|
158
|
+
|
|
159
|
+
sage: kfixed == k
|
|
160
|
+
True
|
|
161
|
+
sage: [ embed(x) == x for x in kfixed ]
|
|
162
|
+
[True, True, True, True, True]
|
|
163
|
+
"""
|
|
164
|
+
return self.domain(), self.domain().hom(self.domain())
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.rings.finite_rings
|
|
3
|
+
"""
|
|
4
|
+
Homset for finite fields
|
|
5
|
+
|
|
6
|
+
This is the set of all field homomorphisms between two finite fields.
|
|
7
|
+
|
|
8
|
+
EXAMPLES::
|
|
9
|
+
|
|
10
|
+
sage: R.<t> = ZZ[]
|
|
11
|
+
sage: E.<a> = GF(25, modulus = t^2 - 2)
|
|
12
|
+
sage: F.<b> = GF(625)
|
|
13
|
+
sage: H = Hom(E, F)
|
|
14
|
+
sage: f = H([4*b^3 + 4*b^2 + 4*b]); f
|
|
15
|
+
Ring morphism:
|
|
16
|
+
From: Finite Field in a of size 5^2
|
|
17
|
+
To: Finite Field in b of size 5^4
|
|
18
|
+
Defn: a |--> 4*b^3 + 4*b^2 + 4*b
|
|
19
|
+
sage: f(2)
|
|
20
|
+
2
|
|
21
|
+
sage: f(a)
|
|
22
|
+
4*b^3 + 4*b^2 + 4*b
|
|
23
|
+
sage: len(H)
|
|
24
|
+
2
|
|
25
|
+
sage: [phi(2*a)^2 for phi in Hom(E, F)]
|
|
26
|
+
[3, 3]
|
|
27
|
+
|
|
28
|
+
We can also create endomorphisms::
|
|
29
|
+
|
|
30
|
+
sage: End(E)
|
|
31
|
+
Automorphism group of Finite Field in a of size 5^2
|
|
32
|
+
sage: End(GF(7))[0]
|
|
33
|
+
Ring endomorphism of Finite Field of size 7
|
|
34
|
+
Defn: 1 |--> 1
|
|
35
|
+
sage: H = Hom(GF(7), GF(49, 'c'))
|
|
36
|
+
sage: H[0](2)
|
|
37
|
+
2
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
from sage.rings.homset import RingHomset_generic
|
|
41
|
+
from sage.rings.finite_rings.hom_finite_field import FiniteFieldHomomorphism_generic
|
|
42
|
+
from sage.rings.finite_rings.finite_field_base import FiniteField
|
|
43
|
+
from sage.rings.integer import Integer
|
|
44
|
+
from sage.rings.morphism import RingHomomorphism_im_gens
|
|
45
|
+
from sage.structure.sequence import Sequence
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class FiniteFieldHomset(RingHomset_generic):
|
|
49
|
+
"""
|
|
50
|
+
Set of homomorphisms with domain a given finite field.
|
|
51
|
+
"""
|
|
52
|
+
# def __init__(self, R, S, category=None):
|
|
53
|
+
# if category is None:
|
|
54
|
+
# from sage.categories.finite_fields import FiniteFields
|
|
55
|
+
# category = FiniteFields()
|
|
56
|
+
# RingHomset_generic.__init__(self, R, S, category)
|
|
57
|
+
|
|
58
|
+
def __call__(self, im_gens, base_map=None, check=True):
|
|
59
|
+
"""
|
|
60
|
+
Construct the homomorphism defined by ``im_gens``.
|
|
61
|
+
|
|
62
|
+
EXAMPLES::
|
|
63
|
+
|
|
64
|
+
sage: R.<t> = ZZ[]
|
|
65
|
+
sage: E.<a> = GF(25, modulus = t^2 - 2)
|
|
66
|
+
sage: F.<b> = GF(625)
|
|
67
|
+
sage: End(E)
|
|
68
|
+
Automorphism group of Finite Field in a of size 5^2
|
|
69
|
+
sage: list(Hom(E, F))
|
|
70
|
+
[Ring morphism:
|
|
71
|
+
From: Finite Field in a of size 5^2
|
|
72
|
+
To: Finite Field in b of size 5^4
|
|
73
|
+
Defn: a |--> 4*b^3 + 4*b^2 + 4*b,
|
|
74
|
+
Ring morphism:
|
|
75
|
+
From: Finite Field in a of size 5^2
|
|
76
|
+
To: Finite Field in b of size 5^4
|
|
77
|
+
Defn: a |--> b^3 + b^2 + b]
|
|
78
|
+
sage: [phi(2*a)^2 for phi in Hom(E, F)]
|
|
79
|
+
[3, 3]
|
|
80
|
+
sage: End(GF(7))[0]
|
|
81
|
+
Ring endomorphism of Finite Field of size 7
|
|
82
|
+
Defn: 1 |--> 1
|
|
83
|
+
sage: H = Hom(GF(7), GF(49, 'c'))
|
|
84
|
+
sage: H[0](2)
|
|
85
|
+
2
|
|
86
|
+
sage: Hom(GF(49, 'c'), GF(7)).list()
|
|
87
|
+
[]
|
|
88
|
+
sage: Hom(GF(49, 'c'), GF(81, 'd')).list()
|
|
89
|
+
[]
|
|
90
|
+
sage: H = Hom(GF(9, 'a'), GF(81, 'b'))
|
|
91
|
+
sage: H == loads(dumps(H))
|
|
92
|
+
True
|
|
93
|
+
"""
|
|
94
|
+
if isinstance(im_gens, FiniteFieldHomomorphism_generic):
|
|
95
|
+
if base_map is not None:
|
|
96
|
+
raise ValueError("Cannot specify base map when providing morphism")
|
|
97
|
+
return self._coerce_impl(im_gens)
|
|
98
|
+
try:
|
|
99
|
+
if self.domain().degree() == 1:
|
|
100
|
+
from sage.rings.finite_rings.hom_prime_finite_field import FiniteFieldHomomorphism_prime
|
|
101
|
+
return FiniteFieldHomomorphism_prime(self, im_gens, base_map=base_map, check=check)
|
|
102
|
+
if isinstance(self.codomain(), FiniteField):
|
|
103
|
+
return FiniteFieldHomomorphism_generic(self, im_gens, base_map=base_map, check=check)
|
|
104
|
+
# Currently, FiniteFieldHomomorphism_generic does not work if
|
|
105
|
+
# the codomain is not derived from the finite field base class;
|
|
106
|
+
# in that case, we have to fall back to the generic
|
|
107
|
+
# implementation for rings
|
|
108
|
+
else:
|
|
109
|
+
return RingHomomorphism_im_gens(self, im_gens, base_map=base_map, check=check)
|
|
110
|
+
except (NotImplementedError, ValueError):
|
|
111
|
+
try:
|
|
112
|
+
return self._coerce_impl(im_gens)
|
|
113
|
+
except TypeError:
|
|
114
|
+
raise TypeError("images do not define a valid homomorphism")
|
|
115
|
+
|
|
116
|
+
def _coerce_impl(self, x):
|
|
117
|
+
"""
|
|
118
|
+
Coercion of other morphisms.
|
|
119
|
+
|
|
120
|
+
EXAMPLES::
|
|
121
|
+
|
|
122
|
+
sage: k.<a> = GF(25)
|
|
123
|
+
sage: l.<b> = GF(625)
|
|
124
|
+
sage: H = Hom(k, l)
|
|
125
|
+
sage: G = loads(dumps(H))
|
|
126
|
+
sage: H is G
|
|
127
|
+
True
|
|
128
|
+
sage: G.coerce(list(H)[0]) # indirect doctest
|
|
129
|
+
Ring morphism:
|
|
130
|
+
From: Finite Field in a of size 5^2
|
|
131
|
+
To: Finite Field in b of size 5^4
|
|
132
|
+
Defn: a |--> 4*b^3 + 4*b^2 + 4*b + 3
|
|
133
|
+
"""
|
|
134
|
+
if not isinstance(x, FiniteFieldHomomorphism_generic):
|
|
135
|
+
raise TypeError
|
|
136
|
+
if x.parent() is self:
|
|
137
|
+
return x
|
|
138
|
+
if x.parent() == self:
|
|
139
|
+
return FiniteFieldHomomorphism_generic(self, x.im_gens())
|
|
140
|
+
raise TypeError
|
|
141
|
+
|
|
142
|
+
def _repr_(self):
|
|
143
|
+
"""
|
|
144
|
+
Return a string representation of ``self``.
|
|
145
|
+
|
|
146
|
+
EXAMPLES::
|
|
147
|
+
|
|
148
|
+
sage: Hom(GF(4, 'a'), GF(16, 'b'))._repr_()
|
|
149
|
+
'Set of field embeddings from Finite Field in a of size 2^2 to Finite Field in b of size 2^4'
|
|
150
|
+
sage: Hom(GF(4, 'a'), GF(4, 'c'))._repr_()
|
|
151
|
+
'Set of field embeddings from Finite Field in a of size 2^2 to Finite Field in c of size 2^2'
|
|
152
|
+
sage: Hom(GF(4, 'a'), GF(4, 'a'))._repr_()
|
|
153
|
+
'Automorphism group of Finite Field in a of size 2^2'
|
|
154
|
+
"""
|
|
155
|
+
D = self.domain()
|
|
156
|
+
C = self.codomain()
|
|
157
|
+
if C == D:
|
|
158
|
+
return "Automorphism group of %s" % D
|
|
159
|
+
else:
|
|
160
|
+
return "Set of field embeddings from %s to %s" % (D, C)
|
|
161
|
+
|
|
162
|
+
def is_aut(self):
|
|
163
|
+
"""
|
|
164
|
+
Check if ``self`` is an automorphism.
|
|
165
|
+
|
|
166
|
+
EXAMPLES::
|
|
167
|
+
|
|
168
|
+
sage: Hom(GF(4, 'a'), GF(16, 'b')).is_aut()
|
|
169
|
+
False
|
|
170
|
+
sage: Hom(GF(4, 'a'), GF(4, 'c')).is_aut()
|
|
171
|
+
False
|
|
172
|
+
sage: Hom(GF(4, 'a'), GF(4, 'a')).is_aut()
|
|
173
|
+
True
|
|
174
|
+
"""
|
|
175
|
+
return self.domain() == self.codomain()
|
|
176
|
+
|
|
177
|
+
def order(self):
|
|
178
|
+
"""
|
|
179
|
+
Return the order of this set of field homomorphisms.
|
|
180
|
+
|
|
181
|
+
EXAMPLES::
|
|
182
|
+
|
|
183
|
+
sage: K.<a> = GF(125)
|
|
184
|
+
sage: End(K)
|
|
185
|
+
Automorphism group of Finite Field in a of size 5^3
|
|
186
|
+
sage: End(K).order()
|
|
187
|
+
3
|
|
188
|
+
sage: L.<b> = GF(25)
|
|
189
|
+
sage: Hom(L, K).order() == Hom(K, L).order() == 0
|
|
190
|
+
True
|
|
191
|
+
"""
|
|
192
|
+
try:
|
|
193
|
+
return self.__order
|
|
194
|
+
except AttributeError:
|
|
195
|
+
pass
|
|
196
|
+
n = len(self.list())
|
|
197
|
+
self.__order = n
|
|
198
|
+
return n
|
|
199
|
+
|
|
200
|
+
def __len__(self):
|
|
201
|
+
"""
|
|
202
|
+
Return the number of elements of ``self``.
|
|
203
|
+
|
|
204
|
+
EXAMPLES::
|
|
205
|
+
|
|
206
|
+
sage: K.<a> = GF(25)
|
|
207
|
+
sage: len(End(K))
|
|
208
|
+
2
|
|
209
|
+
"""
|
|
210
|
+
return self.order()
|
|
211
|
+
|
|
212
|
+
def list(self):
|
|
213
|
+
"""
|
|
214
|
+
Return a list of all the elements in this set of field homomorphisms.
|
|
215
|
+
|
|
216
|
+
EXAMPLES::
|
|
217
|
+
|
|
218
|
+
sage: K.<a> = GF(25)
|
|
219
|
+
sage: End(K)
|
|
220
|
+
Automorphism group of Finite Field in a of size 5^2
|
|
221
|
+
sage: list(End(K))
|
|
222
|
+
[Ring endomorphism of Finite Field in a of size 5^2
|
|
223
|
+
Defn: a |--> 4*a + 1,
|
|
224
|
+
Ring endomorphism of Finite Field in a of size 5^2
|
|
225
|
+
Defn: a |--> a]
|
|
226
|
+
sage: L.<z> = GF(7^6)
|
|
227
|
+
sage: [g for g in End(L) if (g^3)(z) == z]
|
|
228
|
+
[Ring endomorphism of Finite Field in z of size 7^6
|
|
229
|
+
Defn: z |--> z,
|
|
230
|
+
Ring endomorphism of Finite Field in z of size 7^6
|
|
231
|
+
Defn: z |--> 5*z^4 + 5*z^3 + 4*z^2 + 3*z + 1,
|
|
232
|
+
Ring endomorphism of Finite Field in z of size 7^6
|
|
233
|
+
Defn: z |--> 3*z^5 + 5*z^4 + 5*z^2 + 2*z + 3]
|
|
234
|
+
|
|
235
|
+
Between isomorphic fields with different moduli::
|
|
236
|
+
|
|
237
|
+
sage: k1 = GF(1009)
|
|
238
|
+
sage: k2 = GF(1009, modulus='primitive')
|
|
239
|
+
sage: Hom(k1, k2).list()
|
|
240
|
+
[Ring morphism:
|
|
241
|
+
From: Finite Field of size 1009
|
|
242
|
+
To: Finite Field of size 1009
|
|
243
|
+
Defn: 1 |--> 1]
|
|
244
|
+
sage: Hom(k2, k1).list()
|
|
245
|
+
[Ring morphism:
|
|
246
|
+
From: Finite Field of size 1009
|
|
247
|
+
To: Finite Field of size 1009
|
|
248
|
+
Defn: 11 |--> 11]
|
|
249
|
+
|
|
250
|
+
sage: k1.<a> = GF(1009^2, modulus='first_lexicographic')
|
|
251
|
+
sage: k2.<b> = GF(1009^2, modulus='conway')
|
|
252
|
+
sage: Hom(k1, k2).list()
|
|
253
|
+
[Ring morphism:
|
|
254
|
+
From: Finite Field in a of size 1009^2
|
|
255
|
+
To: Finite Field in b of size 1009^2
|
|
256
|
+
Defn: a |--> 290*b + 864,
|
|
257
|
+
Ring morphism:
|
|
258
|
+
From: Finite Field in a of size 1009^2
|
|
259
|
+
To: Finite Field in b of size 1009^2
|
|
260
|
+
Defn: a |--> 719*b + 145]
|
|
261
|
+
|
|
262
|
+
TESTS:
|
|
263
|
+
|
|
264
|
+
Check that :issue:`11390` is fixed::
|
|
265
|
+
|
|
266
|
+
sage: K = GF(1<<16,'a'); L = GF(1<<32,'b')
|
|
267
|
+
sage: K.Hom(L)[0]
|
|
268
|
+
Ring morphism:
|
|
269
|
+
From: Finite Field in a of size 2^16
|
|
270
|
+
To: Finite Field in b of size 2^32
|
|
271
|
+
Defn: a |--> b^29 + b^27 + b^26 + b^23 + b^21 + b^19 + b^18 + b^16 + b^14 + b^13 + b^11 + b^10 + b^9 + b^8 + b^7 + b^6 + b^5 + b^2 + b
|
|
272
|
+
"""
|
|
273
|
+
try:
|
|
274
|
+
return self.__list
|
|
275
|
+
except AttributeError:
|
|
276
|
+
pass
|
|
277
|
+
D = self.domain()
|
|
278
|
+
C = self.codomain()
|
|
279
|
+
if D.characteristic() == C.characteristic() and Integer(D.degree()).divides(Integer(C.degree())):
|
|
280
|
+
f = D.modulus()
|
|
281
|
+
g = C['x'](f)
|
|
282
|
+
r = g.roots()
|
|
283
|
+
v = [self(D.hom(a, C)) for a, _ in r]
|
|
284
|
+
v = Sequence(v, immutable=True, cr=True)
|
|
285
|
+
else:
|
|
286
|
+
v = Sequence([], immutable=True, cr=False)
|
|
287
|
+
self.__list = v
|
|
288
|
+
return v
|
|
289
|
+
|
|
290
|
+
def __getitem__(self, n):
|
|
291
|
+
"""
|
|
292
|
+
EXAMPLES::
|
|
293
|
+
|
|
294
|
+
sage: H = Hom(GF(32, 'a'), GF(1024, 'b'))
|
|
295
|
+
sage: H[1]
|
|
296
|
+
Ring morphism:
|
|
297
|
+
From: Finite Field in a of size 2^5
|
|
298
|
+
To: Finite Field in b of size 2^10
|
|
299
|
+
Defn: a |--> b^7 + b^5
|
|
300
|
+
sage: H[2:4]
|
|
301
|
+
[Ring morphism:
|
|
302
|
+
From: Finite Field in a of size 2^5
|
|
303
|
+
To: Finite Field in b of size 2^10
|
|
304
|
+
Defn: a |--> b^8 + b^6 + b^2,
|
|
305
|
+
Ring morphism:
|
|
306
|
+
From: Finite Field in a of size 2^5
|
|
307
|
+
To: Finite Field in b of size 2^10
|
|
308
|
+
Defn: a |--> b^9 + b^7 + b^6 + b^5 + b^4]
|
|
309
|
+
"""
|
|
310
|
+
return self.list()[n]
|
|
311
|
+
|
|
312
|
+
def index(self, item):
|
|
313
|
+
"""
|
|
314
|
+
Return the index of ``self``.
|
|
315
|
+
|
|
316
|
+
EXAMPLES::
|
|
317
|
+
|
|
318
|
+
sage: K.<z> = GF(1024)
|
|
319
|
+
sage: g = End(K)[3]
|
|
320
|
+
sage: End(K).index(g) == 3
|
|
321
|
+
True
|
|
322
|
+
"""
|
|
323
|
+
return self.list().index(item)
|
|
324
|
+
|
|
325
|
+
def _an_element_(self):
|
|
326
|
+
"""
|
|
327
|
+
Return an element of ``self``.
|
|
328
|
+
|
|
329
|
+
TESTS::
|
|
330
|
+
|
|
331
|
+
sage: Hom(GF(3^3, 'a'), GF(3^6, 'b')).an_element() # random
|
|
332
|
+
Ring morphism:
|
|
333
|
+
From: Finite Field in a of size 3^3
|
|
334
|
+
To: Finite Field in b of size 3^6
|
|
335
|
+
Defn: a |--> 2*b^5 + 2*b^4
|
|
336
|
+
|
|
337
|
+
sage: Hom(GF(3^3, 'a'), GF(3^2, 'c')).an_element()
|
|
338
|
+
Traceback (most recent call last):
|
|
339
|
+
...
|
|
340
|
+
EmptySetError: no homomorphisms from Finite Field in a of size 3^3 to Finite Field in c of size 3^2
|
|
341
|
+
|
|
342
|
+
.. TODO::
|
|
343
|
+
|
|
344
|
+
Use a more sophisticated algorithm; see also :issue:`8751`.
|
|
345
|
+
"""
|
|
346
|
+
K = self.domain()
|
|
347
|
+
L = self.codomain()
|
|
348
|
+
if K.degree() == 1:
|
|
349
|
+
return L.coerce_map_from(K)
|
|
350
|
+
elif not K.degree().divides(L.degree()):
|
|
351
|
+
from sage.categories.sets_cat import EmptySetError
|
|
352
|
+
raise EmptySetError('no homomorphisms from %s to %s' % (K, L))
|
|
353
|
+
return K.hom([K.modulus().any_root(L)])
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
from sage.misc.persist import register_unpickle_override
|
|
357
|
+
register_unpickle_override('sage.rings.finite_field_morphism', 'FiniteFieldHomset', FiniteFieldHomset)
|
|
Binary file
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
from sage.libs.gmp.types cimport *
|
|
3
|
+
from sage.rings.finite_rings.stdint cimport *
|
|
4
|
+
from sage.rings.finite_rings.element_base cimport FiniteRingElement
|
|
5
|
+
from sage.rings.integer cimport Integer
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
cdef class NativeIntStruct:
|
|
9
|
+
cdef Integer sageInteger
|
|
10
|
+
cdef int_fast32_t int32
|
|
11
|
+
cdef int_fast64_t int64
|
|
12
|
+
cdef readonly list table # list of elements of IntegerModRing(n)
|
|
13
|
+
cdef readonly list inverses # list of inverses (None if not invertible)
|
|
14
|
+
cdef inline type element_class(self):
|
|
15
|
+
if self.int32 > 0:
|
|
16
|
+
return IntegerMod_int
|
|
17
|
+
elif self.int64 > 0:
|
|
18
|
+
return IntegerMod_int64
|
|
19
|
+
else:
|
|
20
|
+
return IntegerMod_gmp
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
cdef class IntegerMod_abstract(FiniteRingElement):
|
|
24
|
+
cdef NativeIntStruct _modulus
|
|
25
|
+
cdef _new_c_from_long(self, long value)
|
|
26
|
+
cdef IntegerMod_abstract _new_c_fast(self, unsigned long value)
|
|
27
|
+
cdef void set_from_mpz(self, mpz_t value) noexcept
|
|
28
|
+
cdef void set_from_long(self, long value) noexcept
|
|
29
|
+
cdef void set_from_ulong_fast(self, unsigned long value) noexcept
|
|
30
|
+
cdef bint is_square_c(self) except -2
|
|
31
|
+
cpdef bint is_one(self) noexcept
|
|
32
|
+
cpdef bint is_unit(self) noexcept
|
|
33
|
+
cpdef _floordiv_(self, other)
|
|
34
|
+
|
|
35
|
+
cdef class IntegerMod_gmp(IntegerMod_abstract):
|
|
36
|
+
cdef mpz_t value
|
|
37
|
+
cdef IntegerMod_gmp _new_c(self)
|
|
38
|
+
cdef shift(IntegerMod_gmp self, long k)
|
|
39
|
+
|
|
40
|
+
cdef class IntegerMod_int(IntegerMod_abstract):
|
|
41
|
+
cdef int_fast32_t ivalue
|
|
42
|
+
cdef void set_from_int(IntegerMod_int self, int_fast32_t value) noexcept
|
|
43
|
+
cdef int_fast32_t get_int_value(IntegerMod_int self) noexcept
|
|
44
|
+
cdef IntegerMod_int _new_c(self, int_fast32_t value)
|
|
45
|
+
cdef shift(IntegerMod_int self, int k)
|
|
46
|
+
|
|
47
|
+
cdef class IntegerMod_int64(IntegerMod_abstract):
|
|
48
|
+
cdef int_fast64_t ivalue
|
|
49
|
+
cdef void set_from_int(IntegerMod_int64 self, int_fast64_t value) noexcept
|
|
50
|
+
cdef int_fast64_t get_int_value(IntegerMod_int64 self) noexcept
|
|
51
|
+
cdef IntegerMod_int64 _new_c(self, int_fast64_t value)
|
|
52
|
+
cdef shift(IntegerMod_int64 self, int k)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
cdef int_fast32_t mod_inverse_int(int_fast32_t x, int_fast32_t n) except 0
|
|
56
|
+
cdef bint use_32bit_type(int_fast64_t modulus) noexcept
|