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,667 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Groups
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2005 David Kohel <kohel@maths.usyd.edu>
|
|
7
|
+
# William Stein <wstein@math.ucsd.edu>
|
|
8
|
+
# 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
|
|
9
|
+
# 2008-2009 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
10
|
+
#
|
|
11
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
12
|
+
# https://www.gnu.org/licenses/
|
|
13
|
+
# *****************************************************************************
|
|
14
|
+
|
|
15
|
+
from sage.misc.cachefunc import cached_method
|
|
16
|
+
from sage.misc.lazy_import import LazyImport
|
|
17
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
18
|
+
from sage.categories.monoids import Monoids
|
|
19
|
+
from sage.categories.cartesian_product import CartesianProductsCategory, cartesian_product
|
|
20
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
21
|
+
from sage.categories.topological_spaces import TopologicalSpacesCategory
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Groups(CategoryWithAxiom):
|
|
25
|
+
"""
|
|
26
|
+
The category of (multiplicative) groups, i.e. monoids with
|
|
27
|
+
inverses.
|
|
28
|
+
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: Groups()
|
|
32
|
+
Category of groups
|
|
33
|
+
sage: Groups().super_categories()
|
|
34
|
+
[Category of monoids, Category of inverse unital magmas]
|
|
35
|
+
|
|
36
|
+
TESTS::
|
|
37
|
+
|
|
38
|
+
sage: TestSuite(Groups()).run()
|
|
39
|
+
"""
|
|
40
|
+
_base_category_class_and_axiom = (Monoids, "Inverse")
|
|
41
|
+
|
|
42
|
+
def example(self):
|
|
43
|
+
"""
|
|
44
|
+
EXAMPLES::
|
|
45
|
+
|
|
46
|
+
sage: Groups().example() # needs sage.modules
|
|
47
|
+
General Linear Group of degree 4 over Rational Field
|
|
48
|
+
"""
|
|
49
|
+
from sage.rings.rational_field import QQ
|
|
50
|
+
from sage.groups.matrix_gps.linear import GL
|
|
51
|
+
return GL(4,QQ)
|
|
52
|
+
|
|
53
|
+
@staticmethod
|
|
54
|
+
def free(index_set=None, names=None, **kwds):
|
|
55
|
+
r"""
|
|
56
|
+
Return the free group.
|
|
57
|
+
|
|
58
|
+
INPUT:
|
|
59
|
+
|
|
60
|
+
- ``index_set`` -- (optional) an index set for the generators; if
|
|
61
|
+
an integer, then this represents `\{0, 1, \ldots, n-1\}`
|
|
62
|
+
|
|
63
|
+
- ``names`` -- string or list/tuple/iterable of strings
|
|
64
|
+
(default: ``'x'``); the generator names or name prefix
|
|
65
|
+
|
|
66
|
+
When the index set is an integer or only variable names are given,
|
|
67
|
+
this returns :class:`~sage.groups.free_group.FreeGroup_class`, which
|
|
68
|
+
currently has more features due to the interface with GAP than
|
|
69
|
+
:class:`~sage.groups.indexed_free_group.IndexedFreeGroup`.
|
|
70
|
+
|
|
71
|
+
EXAMPLES::
|
|
72
|
+
|
|
73
|
+
sage: # needs sage.combinat sage.groups
|
|
74
|
+
sage: Groups.free(index_set=ZZ)
|
|
75
|
+
Free group indexed by Integer Ring
|
|
76
|
+
sage: Groups().free(ZZ)
|
|
77
|
+
Free group indexed by Integer Ring
|
|
78
|
+
sage: Groups().free(5)
|
|
79
|
+
Free Group on generators {x0, x1, x2, x3, x4}
|
|
80
|
+
sage: F.<x,y,z> = Groups().free(); F
|
|
81
|
+
Free Group on generators {x, y, z}
|
|
82
|
+
"""
|
|
83
|
+
from sage.rings.integer_ring import ZZ
|
|
84
|
+
if index_set in ZZ or (index_set is None and names is not None):
|
|
85
|
+
from sage.groups.free_group import FreeGroup
|
|
86
|
+
if names is None:
|
|
87
|
+
return FreeGroup(index_set, **kwds)
|
|
88
|
+
return FreeGroup(index_set, names, **kwds)
|
|
89
|
+
|
|
90
|
+
from sage.groups.indexed_free_group import IndexedFreeGroup
|
|
91
|
+
return IndexedFreeGroup(index_set, **kwds)
|
|
92
|
+
|
|
93
|
+
class ParentMethods:
|
|
94
|
+
|
|
95
|
+
def group_generators(self):
|
|
96
|
+
"""
|
|
97
|
+
Return group generators for ``self``.
|
|
98
|
+
|
|
99
|
+
This default implementation calls :meth:`gens`, for
|
|
100
|
+
backward compatibility.
|
|
101
|
+
|
|
102
|
+
EXAMPLES::
|
|
103
|
+
|
|
104
|
+
sage: A = AlternatingGroup(4) # needs sage.groups
|
|
105
|
+
sage: A.group_generators() # needs sage.groups
|
|
106
|
+
Family ((1,2,3), (2,3,4))
|
|
107
|
+
"""
|
|
108
|
+
from sage.sets.family import Family
|
|
109
|
+
try:
|
|
110
|
+
return Family(self.gens())
|
|
111
|
+
except AttributeError:
|
|
112
|
+
raise NotImplementedError("no generators are implemented for this group")
|
|
113
|
+
|
|
114
|
+
def monoid_generators(self):
|
|
115
|
+
r"""
|
|
116
|
+
Return the generators of ``self`` as a monoid.
|
|
117
|
+
|
|
118
|
+
Let `G` be a group with generating set `X`. In general, the
|
|
119
|
+
generating set of `G` as a monoid is given by `X \cup X^{-1}`,
|
|
120
|
+
where `X^{-1}` is the set of inverses of `X`. If `G` is a finite
|
|
121
|
+
group, then the generating set as a monoid is `X`.
|
|
122
|
+
|
|
123
|
+
EXAMPLES::
|
|
124
|
+
|
|
125
|
+
sage: # needs sage.groups
|
|
126
|
+
sage: A = AlternatingGroup(4)
|
|
127
|
+
sage: A.monoid_generators()
|
|
128
|
+
Family ((1,2,3), (2,3,4))
|
|
129
|
+
|
|
130
|
+
sage: # needs sage.combinat sage.groups
|
|
131
|
+
sage: F.<x,y> = FreeGroup()
|
|
132
|
+
sage: F.monoid_generators()
|
|
133
|
+
Family (x, y, x^-1, y^-1)
|
|
134
|
+
"""
|
|
135
|
+
G = self.group_generators()
|
|
136
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
137
|
+
if G not in FiniteEnumeratedSets():
|
|
138
|
+
raise NotImplementedError("currently only implemented for finitely generated groups")
|
|
139
|
+
from sage.sets.family import Family
|
|
140
|
+
return Family(tuple(G) + tuple(~x for x in G))
|
|
141
|
+
|
|
142
|
+
def _test_inverse(self, **options):
|
|
143
|
+
"""
|
|
144
|
+
Run generic tests on the method :meth:`.__invert__`.
|
|
145
|
+
|
|
146
|
+
See also: :class:`TestSuite`.
|
|
147
|
+
|
|
148
|
+
EXAMPLES::
|
|
149
|
+
|
|
150
|
+
sage: G = SymmetricGroup(3) # needs sage.groups
|
|
151
|
+
sage: G._test_inverse() # needs sage.groups
|
|
152
|
+
"""
|
|
153
|
+
tester = self._tester(**options)
|
|
154
|
+
for x in tester.some_elements():
|
|
155
|
+
tester.assertEqual(x * ~x, self.one())
|
|
156
|
+
tester.assertEqual(~x * x, self.one())
|
|
157
|
+
|
|
158
|
+
def semidirect_product(self, N, mapping, check=True):
|
|
159
|
+
r"""
|
|
160
|
+
The semi-direct product of two groups.
|
|
161
|
+
|
|
162
|
+
EXAMPLES::
|
|
163
|
+
|
|
164
|
+
sage: G = Groups().example() # needs sage.modules
|
|
165
|
+
sage: G.semidirect_product(G, Morphism(G, G)) # needs sage.modules
|
|
166
|
+
Traceback (most recent call last):
|
|
167
|
+
...
|
|
168
|
+
NotImplementedError: semidirect product of General Linear Group of degree 4
|
|
169
|
+
over Rational Field and General Linear Group of degree 4 over Rational Field
|
|
170
|
+
not yet implemented
|
|
171
|
+
"""
|
|
172
|
+
raise NotImplementedError("semidirect product of %s and %s not yet implemented" % (self, N))
|
|
173
|
+
|
|
174
|
+
def holomorph(self):
|
|
175
|
+
r"""
|
|
176
|
+
The holomorph of a group.
|
|
177
|
+
|
|
178
|
+
The holomorph of a group `G` is the semidirect product
|
|
179
|
+
`G \rtimes_{id} Aut(G)`, where `id` is the identity function
|
|
180
|
+
on `Aut(G)`, the automorphism group of `G`.
|
|
181
|
+
|
|
182
|
+
See :wikipedia:`Holomorph (mathematics)`
|
|
183
|
+
|
|
184
|
+
EXAMPLES::
|
|
185
|
+
|
|
186
|
+
sage: G = Groups().example() # needs sage.modules
|
|
187
|
+
sage: G.holomorph() # needs sage.modules
|
|
188
|
+
Traceback (most recent call last):
|
|
189
|
+
...
|
|
190
|
+
NotImplementedError: holomorph of General Linear Group of degree 4
|
|
191
|
+
over Rational Field not yet implemented
|
|
192
|
+
"""
|
|
193
|
+
raise NotImplementedError("holomorph of %s not yet implemented" % self)
|
|
194
|
+
|
|
195
|
+
def cayley_table(self, names='letters', elements=None):
|
|
196
|
+
r"""
|
|
197
|
+
Return the "multiplication" table of this multiplicative group,
|
|
198
|
+
which is also known as the "Cayley table".
|
|
199
|
+
|
|
200
|
+
.. NOTE:: The order of the elements in the row and column
|
|
201
|
+
headings is equal to the order given by the table's
|
|
202
|
+
:meth:`~sage.matrix.operation_table.OperationTable.column_keys`
|
|
203
|
+
method. The association between the actual elements and the
|
|
204
|
+
names/symbols used in the table can also be retrieved as
|
|
205
|
+
a dictionary with the
|
|
206
|
+
:meth:`~sage.matrix.operation_table.OperationTable.translation`
|
|
207
|
+
method.
|
|
208
|
+
|
|
209
|
+
For groups, this routine should behave identically to the
|
|
210
|
+
:meth:`~sage.categories.magmas.Magmas.ParentMethods.multiplication_table`
|
|
211
|
+
method for magmas, which applies in greater generality.
|
|
212
|
+
|
|
213
|
+
INPUT:
|
|
214
|
+
|
|
215
|
+
- ``names`` -- the type of names used, values are:
|
|
216
|
+
|
|
217
|
+
* ``'letters'`` -- lowercase ASCII letters are used
|
|
218
|
+
for a base 26 representation of the elements'
|
|
219
|
+
positions in the list given by :meth:`list`,
|
|
220
|
+
padded to a common width with leading 'a's.
|
|
221
|
+
* ``'digits'`` -- base 10 representation of the
|
|
222
|
+
elements' positions in the list given by
|
|
223
|
+
:meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
|
|
224
|
+
padded to a common width with leading zeros.
|
|
225
|
+
* ``'elements'`` -- the string representations
|
|
226
|
+
of the elements themselves.
|
|
227
|
+
* a list - a list of strings, where the length
|
|
228
|
+
of the list equals the number of elements.
|
|
229
|
+
|
|
230
|
+
- ``elements`` -- (default: ``None``) a list of
|
|
231
|
+
elements of the group, in forms that can be
|
|
232
|
+
coerced into the structure, eg. their string
|
|
233
|
+
representations. This may be used to impose an
|
|
234
|
+
alternate ordering on the elements, perhaps when
|
|
235
|
+
this is used in the context of a particular structure.
|
|
236
|
+
The default is to use whatever ordering is provided by the
|
|
237
|
+
the group, which is reported by the
|
|
238
|
+
:meth:`~sage.matrix.operation_table.OperationTable.column_keys`
|
|
239
|
+
method. Or the ``elements`` can be a subset
|
|
240
|
+
which is closed under the operation. In particular,
|
|
241
|
+
this can be used when the base set is infinite.
|
|
242
|
+
|
|
243
|
+
OUTPUT:
|
|
244
|
+
|
|
245
|
+
An object representing the multiplication table. This is
|
|
246
|
+
an :class:`~sage.matrix.operation_table.OperationTable` object
|
|
247
|
+
and even more documentation can be found there.
|
|
248
|
+
|
|
249
|
+
EXAMPLES:
|
|
250
|
+
|
|
251
|
+
Permutation groups, matrix groups and abelian groups
|
|
252
|
+
can all compute their multiplication tables. ::
|
|
253
|
+
|
|
254
|
+
sage: # needs sage.groups sage.modules
|
|
255
|
+
sage: G = DiCyclicGroup(3)
|
|
256
|
+
sage: T = G.cayley_table()
|
|
257
|
+
sage: T.column_keys()
|
|
258
|
+
((), (5,6,7), ..., (1,4,2,3)(5,7))
|
|
259
|
+
sage: T
|
|
260
|
+
* a b c d e f g h i j k l
|
|
261
|
+
+------------------------
|
|
262
|
+
a| a b c d e f g h i j k l
|
|
263
|
+
b| b c a e f d i g h l j k
|
|
264
|
+
c| c a b f d e h i g k l j
|
|
265
|
+
d| d e f a b c j k l g h i
|
|
266
|
+
e| e f d b c a l j k i g h
|
|
267
|
+
f| f d e c a b k l j h i g
|
|
268
|
+
g| g h i j k l d e f a b c
|
|
269
|
+
h| h i g k l j f d e c a b
|
|
270
|
+
i| i g h l j k e f d b c a
|
|
271
|
+
j| j k l g h i a b c d e f
|
|
272
|
+
k| k l j h i g c a b f d e
|
|
273
|
+
l| l j k i g h b c a e f d
|
|
274
|
+
|
|
275
|
+
::
|
|
276
|
+
|
|
277
|
+
sage: M = SL(2, 2) # needs sage.modules
|
|
278
|
+
sage: M.cayley_table() # needs sage.libs.gap sage.modules
|
|
279
|
+
* a b c d e f
|
|
280
|
+
+------------
|
|
281
|
+
a| a b c d e f
|
|
282
|
+
b| b a d c f e
|
|
283
|
+
c| c e a f b d
|
|
284
|
+
d| d f b e a c
|
|
285
|
+
e| e c f a d b
|
|
286
|
+
f| f d e b c a
|
|
287
|
+
<BLANKLINE>
|
|
288
|
+
|
|
289
|
+
::
|
|
290
|
+
|
|
291
|
+
sage: A = AbelianGroup([2, 3]) # needs sage.modules
|
|
292
|
+
sage: A.cayley_table() # needs sage.modules
|
|
293
|
+
* a b c d e f
|
|
294
|
+
+------------
|
|
295
|
+
a| a b c d e f
|
|
296
|
+
b| b c a e f d
|
|
297
|
+
c| c a b f d e
|
|
298
|
+
d| d e f a b c
|
|
299
|
+
e| e f d b c a
|
|
300
|
+
f| f d e c a b
|
|
301
|
+
|
|
302
|
+
Lowercase ASCII letters are the default symbols used
|
|
303
|
+
for the table, but you can also specify the use of
|
|
304
|
+
decimal digit strings, or provide your own strings
|
|
305
|
+
(in the proper order if they have meaning).
|
|
306
|
+
Also, if the elements themselves are not too complex,
|
|
307
|
+
you can choose to just use the string representations
|
|
308
|
+
of the elements themselves. ::
|
|
309
|
+
|
|
310
|
+
sage: C = CyclicPermutationGroup(11) # needs sage.groups
|
|
311
|
+
sage: C.cayley_table(names='digits') # needs sage.groups sage.modules
|
|
312
|
+
* 00 01 02 03 04 05 06 07 08 09 10
|
|
313
|
+
+---------------------------------
|
|
314
|
+
00| 00 01 02 03 04 05 06 07 08 09 10
|
|
315
|
+
01| 01 02 03 04 05 06 07 08 09 10 00
|
|
316
|
+
02| 02 03 04 05 06 07 08 09 10 00 01
|
|
317
|
+
03| 03 04 05 06 07 08 09 10 00 01 02
|
|
318
|
+
04| 04 05 06 07 08 09 10 00 01 02 03
|
|
319
|
+
05| 05 06 07 08 09 10 00 01 02 03 04
|
|
320
|
+
06| 06 07 08 09 10 00 01 02 03 04 05
|
|
321
|
+
07| 07 08 09 10 00 01 02 03 04 05 06
|
|
322
|
+
08| 08 09 10 00 01 02 03 04 05 06 07
|
|
323
|
+
09| 09 10 00 01 02 03 04 05 06 07 08
|
|
324
|
+
10| 10 00 01 02 03 04 05 06 07 08 09
|
|
325
|
+
|
|
326
|
+
::
|
|
327
|
+
|
|
328
|
+
sage: G = QuaternionGroup() # needs sage.groups
|
|
329
|
+
sage: names = ['1', 'I', '-1', '-I', 'J', '-K', '-J', 'K']
|
|
330
|
+
sage: G.cayley_table(names=names) # needs sage.groups sage.modules
|
|
331
|
+
* 1 I -1 -I J -K -J K
|
|
332
|
+
+------------------------
|
|
333
|
+
1| 1 I -1 -I J -K -J K
|
|
334
|
+
I| I -1 -I 1 K J -K -J
|
|
335
|
+
-1| -1 -I 1 I -J K J -K
|
|
336
|
+
-I| -I 1 I -1 -K -J K J
|
|
337
|
+
J| J -K -J K -1 -I 1 I
|
|
338
|
+
-K| -K -J K J I -1 -I 1
|
|
339
|
+
-J| -J K J -K 1 I -1 -I
|
|
340
|
+
K| K J -K -J -I 1 I -1
|
|
341
|
+
|
|
342
|
+
::
|
|
343
|
+
|
|
344
|
+
sage: A = AbelianGroup([2, 2]) # needs sage.groups sage.modules
|
|
345
|
+
sage: A.cayley_table(names='elements') # needs sage.groups sage.modules
|
|
346
|
+
* 1 f1 f0 f0*f1
|
|
347
|
+
+------------------------
|
|
348
|
+
1| 1 f1 f0 f0*f1
|
|
349
|
+
f1| f1 1 f0*f1 f0
|
|
350
|
+
f0| f0 f0*f1 1 f1
|
|
351
|
+
f0*f1| f0*f1 f0 f1 1
|
|
352
|
+
|
|
353
|
+
The :meth:`~sage.matrix.operation_table.OperationTable.change_names`
|
|
354
|
+
routine behaves similarly, but changes an existing table "in-place."
|
|
355
|
+
::
|
|
356
|
+
|
|
357
|
+
sage: # needs sage.groups sage.modules
|
|
358
|
+
sage: G = AlternatingGroup(3)
|
|
359
|
+
sage: T = G.cayley_table()
|
|
360
|
+
sage: T.change_names('digits')
|
|
361
|
+
sage: T
|
|
362
|
+
* 0 1 2
|
|
363
|
+
+------
|
|
364
|
+
0| 0 1 2
|
|
365
|
+
1| 1 2 0
|
|
366
|
+
2| 2 0 1
|
|
367
|
+
|
|
368
|
+
For an infinite group, you can still work with finite sets of
|
|
369
|
+
elements, provided the set is closed under multiplication.
|
|
370
|
+
Elements will be coerced into the group as part of setting
|
|
371
|
+
up the table. ::
|
|
372
|
+
|
|
373
|
+
sage: # needs sage.modules
|
|
374
|
+
sage: G = SL(2,ZZ); G
|
|
375
|
+
Special Linear Group of degree 2 over Integer Ring
|
|
376
|
+
sage: identity = matrix(ZZ, [[1,0], [0,1]])
|
|
377
|
+
sage: G.cayley_table(elements=[identity, -identity])
|
|
378
|
+
* a b
|
|
379
|
+
+----
|
|
380
|
+
a| a b
|
|
381
|
+
b| b a
|
|
382
|
+
|
|
383
|
+
The
|
|
384
|
+
:class:`~sage.matrix.operation_table.OperationTable`
|
|
385
|
+
class provides even greater flexibility, including changing
|
|
386
|
+
the operation. Here is one such example, illustrating the
|
|
387
|
+
computation of commutators. ``commutator`` is defined as
|
|
388
|
+
a function of two variables, before being used to build
|
|
389
|
+
the table. From this, the commutator subgroup seems obvious,
|
|
390
|
+
and creating a Cayley table with just these three elements
|
|
391
|
+
confirms that they form a closed subset in the group.
|
|
392
|
+
::
|
|
393
|
+
|
|
394
|
+
sage: # needs sage.groups sage.modules
|
|
395
|
+
sage: from sage.matrix.operation_table import OperationTable
|
|
396
|
+
sage: G = DiCyclicGroup(3)
|
|
397
|
+
sage: commutator = lambda x, y: x*y*x^-1*y^-1
|
|
398
|
+
sage: T = OperationTable(G, commutator); T
|
|
399
|
+
. a b c d e f g h i j k l
|
|
400
|
+
+------------------------
|
|
401
|
+
a| a a a a a a a a a a a a
|
|
402
|
+
b| a a a a a a c c c c c c
|
|
403
|
+
c| a a a a a a b b b b b b
|
|
404
|
+
d| a a a a a a a a a a a a
|
|
405
|
+
e| a a a a a a c c c c c c
|
|
406
|
+
f| a a a a a a b b b b b b
|
|
407
|
+
g| a b c a b c a c b a c b
|
|
408
|
+
h| a b c a b c b a c b a c
|
|
409
|
+
i| a b c a b c c b a c b a
|
|
410
|
+
j| a b c a b c a c b a c b
|
|
411
|
+
k| a b c a b c b a c b a c
|
|
412
|
+
l| a b c a b c c b a c b a
|
|
413
|
+
sage: trans = T.translation()
|
|
414
|
+
sage: comm = [trans['a'], trans['b'], trans['c']]
|
|
415
|
+
sage: comm
|
|
416
|
+
[(), (5,6,7), (5,7,6)]
|
|
417
|
+
sage: P = G.cayley_table(elements=comm)
|
|
418
|
+
sage: P
|
|
419
|
+
* a b c
|
|
420
|
+
+------
|
|
421
|
+
a| a b c
|
|
422
|
+
b| b c a
|
|
423
|
+
c| c a b
|
|
424
|
+
|
|
425
|
+
.. TODO::
|
|
426
|
+
|
|
427
|
+
Arrange an ordering of elements into cosets of a normal
|
|
428
|
+
subgroup close to size `\sqrt{n}`. Then the quotient
|
|
429
|
+
group structure is often apparent in the table. See
|
|
430
|
+
comments on :issue:`7555`.
|
|
431
|
+
|
|
432
|
+
AUTHOR:
|
|
433
|
+
|
|
434
|
+
- Rob Beezer (2010-03-15)
|
|
435
|
+
"""
|
|
436
|
+
from sage.matrix.operation_table import OperationTable
|
|
437
|
+
import operator
|
|
438
|
+
return OperationTable(self, operation=operator.mul, names=names, elements=elements)
|
|
439
|
+
|
|
440
|
+
def conjugacy_class(self, g):
|
|
441
|
+
r"""
|
|
442
|
+
Return the conjugacy class of the element ``g``.
|
|
443
|
+
|
|
444
|
+
This is a fall-back method for groups not defined over GAP.
|
|
445
|
+
|
|
446
|
+
EXAMPLES::
|
|
447
|
+
|
|
448
|
+
sage: A = AbelianGroup([2, 2]) # needs sage.modules
|
|
449
|
+
sage: c = A.conjugacy_class(A.an_element()) # needs sage.groups sage.modules
|
|
450
|
+
sage: type(c) # needs sage.groups sage.modules
|
|
451
|
+
<class 'sage.groups.conjugacy_classes.ConjugacyClass_with_category'>
|
|
452
|
+
"""
|
|
453
|
+
from sage.groups.conjugacy_classes import ConjugacyClass
|
|
454
|
+
return ConjugacyClass(self, g)
|
|
455
|
+
|
|
456
|
+
class ElementMethods:
|
|
457
|
+
def conjugacy_class(self):
|
|
458
|
+
r"""
|
|
459
|
+
Return the conjugacy class of ``self``.
|
|
460
|
+
|
|
461
|
+
EXAMPLES::
|
|
462
|
+
|
|
463
|
+
sage: D = DihedralGroup(5) # needs sage.groups
|
|
464
|
+
sage: g = D((1,3,5,2,4)) # needs sage.groups
|
|
465
|
+
sage: g.conjugacy_class() # needs sage.groups
|
|
466
|
+
Conjugacy class of (1,3,5,2,4)
|
|
467
|
+
in Dihedral group of order 10 as a permutation group
|
|
468
|
+
|
|
469
|
+
sage: H = MatrixGroup([matrix(GF(5), 2, [1,2, -1,1]), # needs sage.modules
|
|
470
|
+
....: matrix(GF(5), 2, [1,1, 0,1])])
|
|
471
|
+
sage: h = H(matrix(GF(5), 2, [1,2, -1,1])) # needs sage.modules
|
|
472
|
+
sage: h.conjugacy_class() # needs sage.groups sage.modules
|
|
473
|
+
Conjugacy class of [1 2]
|
|
474
|
+
[4 1]
|
|
475
|
+
in Matrix group over Finite Field of size 5 with 2 generators (
|
|
476
|
+
[1 2] [1 1]
|
|
477
|
+
[4 1], [0 1]
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
sage: G = SL(2, GF(2)) # needs sage.modules
|
|
481
|
+
sage: g = G.gens()[0] # needs sage.groups sage.modules
|
|
482
|
+
sage: g.conjugacy_class() # needs sage.groups sage.modules
|
|
483
|
+
Conjugacy class of [1 1]
|
|
484
|
+
[0 1] in Special Linear Group of degree 2 over Finite Field of size 2
|
|
485
|
+
|
|
486
|
+
sage: G = SL(2, QQ) # needs sage.modules
|
|
487
|
+
sage: g = G([[1,1], [0,1]]) # needs sage.modules
|
|
488
|
+
sage: g.conjugacy_class() # needs sage.groups sage.modules
|
|
489
|
+
Conjugacy class of [1 1]
|
|
490
|
+
[0 1] in Special Linear Group of degree 2 over Rational Field
|
|
491
|
+
"""
|
|
492
|
+
return self.parent().conjugacy_class(self)
|
|
493
|
+
|
|
494
|
+
Finite = LazyImport('sage.categories.finite_groups', 'FiniteGroups', at_startup=True)
|
|
495
|
+
Lie = LazyImport('sage.categories.lie_groups', 'LieGroups', 'Lie')
|
|
496
|
+
Algebras = LazyImport('sage.categories.group_algebras', 'GroupAlgebras', at_startup=True)
|
|
497
|
+
|
|
498
|
+
class Commutative(CategoryWithAxiom):
|
|
499
|
+
r"""
|
|
500
|
+
Category of commutative (abelian) groups.
|
|
501
|
+
|
|
502
|
+
A group `G` is *commutative* if `xy = yx` for all `x,y \in G`.
|
|
503
|
+
"""
|
|
504
|
+
@staticmethod
|
|
505
|
+
def free(index_set=None, names=None, **kwds):
|
|
506
|
+
r"""
|
|
507
|
+
Return the free commutative group.
|
|
508
|
+
|
|
509
|
+
INPUT:
|
|
510
|
+
|
|
511
|
+
- ``index_set`` -- (optional) an index set for the generators; if
|
|
512
|
+
an integer, then this represents `\{0, 1, \ldots, n-1\}`
|
|
513
|
+
|
|
514
|
+
- ``names`` -- string or list/tuple/iterable of strings
|
|
515
|
+
(default: ``'x'``); the generator names or name prefix
|
|
516
|
+
|
|
517
|
+
EXAMPLES::
|
|
518
|
+
|
|
519
|
+
sage: # needs sage.combinat sage.groups
|
|
520
|
+
sage: Groups.Commutative.free(index_set=ZZ)
|
|
521
|
+
Free abelian group indexed by Integer Ring
|
|
522
|
+
sage: Groups().Commutative().free(ZZ)
|
|
523
|
+
Free abelian group indexed by Integer Ring
|
|
524
|
+
sage: Groups().Commutative().free(5)
|
|
525
|
+
Multiplicative Abelian group isomorphic to Z x Z x Z x Z x Z
|
|
526
|
+
sage: F.<x,y,z> = Groups().Commutative().free(); F
|
|
527
|
+
Multiplicative Abelian group isomorphic to Z x Z x Z
|
|
528
|
+
"""
|
|
529
|
+
from sage.rings.integer_ring import ZZ
|
|
530
|
+
if names is not None:
|
|
531
|
+
if isinstance(names, str):
|
|
532
|
+
if ',' not in names and index_set in ZZ:
|
|
533
|
+
names = [names + repr(i) for i in range(index_set)]
|
|
534
|
+
else:
|
|
535
|
+
names = names.split(',')
|
|
536
|
+
names = tuple(names)
|
|
537
|
+
if index_set is None:
|
|
538
|
+
index_set = ZZ(len(names))
|
|
539
|
+
if index_set in ZZ:
|
|
540
|
+
from sage.groups.abelian_gps.abelian_group import AbelianGroup
|
|
541
|
+
return AbelianGroup(index_set, names=names, **kwds)
|
|
542
|
+
|
|
543
|
+
if index_set in ZZ:
|
|
544
|
+
from sage.groups.abelian_gps.abelian_group import AbelianGroup
|
|
545
|
+
return AbelianGroup(index_set, **kwds)
|
|
546
|
+
|
|
547
|
+
from sage.groups.indexed_free_group import IndexedFreeAbelianGroup
|
|
548
|
+
return IndexedFreeAbelianGroup(index_set, names=names, **kwds)
|
|
549
|
+
|
|
550
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
551
|
+
"""
|
|
552
|
+
The category of groups constructed as Cartesian products of groups.
|
|
553
|
+
|
|
554
|
+
This construction gives the direct product of groups. See
|
|
555
|
+
:wikipedia:`Direct_product` and :wikipedia:`Direct_product_of_groups`
|
|
556
|
+
for more information.
|
|
557
|
+
"""
|
|
558
|
+
def extra_super_categories(self):
|
|
559
|
+
"""
|
|
560
|
+
A Cartesian product of groups is endowed with a natural
|
|
561
|
+
group structure.
|
|
562
|
+
|
|
563
|
+
EXAMPLES::
|
|
564
|
+
|
|
565
|
+
sage: C = Groups().CartesianProducts()
|
|
566
|
+
sage: C.extra_super_categories()
|
|
567
|
+
[Category of groups]
|
|
568
|
+
sage: sorted(C.super_categories(), key=str)
|
|
569
|
+
[Category of Cartesian products of inverse unital magmas,
|
|
570
|
+
Category of Cartesian products of monoids,
|
|
571
|
+
Category of groups]
|
|
572
|
+
"""
|
|
573
|
+
return [self.base_category()]
|
|
574
|
+
|
|
575
|
+
class ParentMethods:
|
|
576
|
+
@cached_method
|
|
577
|
+
def group_generators(self):
|
|
578
|
+
"""
|
|
579
|
+
Return the group generators of ``self``.
|
|
580
|
+
|
|
581
|
+
EXAMPLES::
|
|
582
|
+
|
|
583
|
+
sage: # needs sage.groups
|
|
584
|
+
sage: C5 = CyclicPermutationGroup(5)
|
|
585
|
+
sage: C4 = CyclicPermutationGroup(4)
|
|
586
|
+
sage: S4 = SymmetricGroup(3)
|
|
587
|
+
sage: C = cartesian_product([C5, C4, S4])
|
|
588
|
+
sage: C.group_generators()
|
|
589
|
+
Family (((1,2,3,4,5), (), ()),
|
|
590
|
+
((), (1,2,3,4), ()),
|
|
591
|
+
((), (), (1,2)),
|
|
592
|
+
((), (), (2,3)))
|
|
593
|
+
|
|
594
|
+
We check the other portion of :issue:`16718` is fixed::
|
|
595
|
+
|
|
596
|
+
sage: len(C.j_classes()) # needs sage.graphs sage.groups
|
|
597
|
+
1
|
|
598
|
+
|
|
599
|
+
An example with an infinitely generated group (a better output
|
|
600
|
+
is needed)::
|
|
601
|
+
|
|
602
|
+
sage: # needs sage.combinat sage.groups
|
|
603
|
+
sage: G = Groups.free([1,2])
|
|
604
|
+
sage: H = Groups.free(ZZ)
|
|
605
|
+
sage: C = cartesian_product([G, H])
|
|
606
|
+
sage: C.monoid_generators()
|
|
607
|
+
Lazy family (gen(i))_{i in The Cartesian product of (...)}
|
|
608
|
+
"""
|
|
609
|
+
F = self.cartesian_factors()
|
|
610
|
+
ids = tuple(G.one() for G in F)
|
|
611
|
+
|
|
612
|
+
def lift(i, gen):
|
|
613
|
+
cur = list(ids)
|
|
614
|
+
cur[i] = gen
|
|
615
|
+
return self._cartesian_product_of_elements(cur)
|
|
616
|
+
from sage.sets.family import Family
|
|
617
|
+
|
|
618
|
+
# Finitely generated
|
|
619
|
+
cat = FiniteEnumeratedSets()
|
|
620
|
+
if all(G.group_generators() in cat
|
|
621
|
+
or isinstance(G.group_generators(), (tuple, list)) for G in F):
|
|
622
|
+
ret = [lift(i, gen) for i, G in enumerate(F) for gen in G.group_generators()]
|
|
623
|
+
return Family(ret)
|
|
624
|
+
|
|
625
|
+
# Infinitely generated
|
|
626
|
+
# This does not return a good output, but it is "correct"
|
|
627
|
+
# TODO: Figure out a better way to do things
|
|
628
|
+
gens_prod = cartesian_product([Family(G.group_generators(),
|
|
629
|
+
lambda g: (i, g))
|
|
630
|
+
for i, G in enumerate(F)])
|
|
631
|
+
return Family(gens_prod, lift, name='gen')
|
|
632
|
+
|
|
633
|
+
def order(self):
|
|
634
|
+
r"""
|
|
635
|
+
Return the cardinality of ``self``.
|
|
636
|
+
|
|
637
|
+
EXAMPLES::
|
|
638
|
+
|
|
639
|
+
sage: C = cartesian_product([SymmetricGroup(10), SL(2, GF(3))]) # needs sage.groups sage.modules
|
|
640
|
+
sage: C.order() # needs sage.groups sage.modules
|
|
641
|
+
87091200
|
|
642
|
+
|
|
643
|
+
TESTS::
|
|
644
|
+
|
|
645
|
+
sage: C.order.__module__ # needs sage.groups sage.modules
|
|
646
|
+
'sage.categories.groups'
|
|
647
|
+
|
|
648
|
+
.. TODO::
|
|
649
|
+
|
|
650
|
+
this method is just here to prevent
|
|
651
|
+
``FiniteGroups.ParentMethods`` to call
|
|
652
|
+
``_cardinality_from_iterator``.
|
|
653
|
+
"""
|
|
654
|
+
from sage.misc.misc_c import prod
|
|
655
|
+
return prod(c.cardinality() for c in self.cartesian_factors())
|
|
656
|
+
|
|
657
|
+
class Topological(TopologicalSpacesCategory):
|
|
658
|
+
"""
|
|
659
|
+
Category of topological groups.
|
|
660
|
+
|
|
661
|
+
A topological group `G` is a group which has a topology such that
|
|
662
|
+
multiplication and taking inverses are continuous functions.
|
|
663
|
+
|
|
664
|
+
REFERENCES:
|
|
665
|
+
|
|
666
|
+
- :wikipedia:`Topological_group`
|
|
667
|
+
"""
|