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,739 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Monoids
|
|
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 Florent Hivert <florent.hivert at univ-rouen.fr>
|
|
10
|
+
# 2008-2014 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
11
|
+
#
|
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# *****************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.misc.cachefunc import cached_method
|
|
17
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
18
|
+
from sage.categories.semigroups import Semigroups
|
|
19
|
+
from sage.misc.lazy_import import LazyImport
|
|
20
|
+
from sage.categories.subquotients import SubquotientsCategory
|
|
21
|
+
from sage.categories.cartesian_product import CartesianProductsCategory
|
|
22
|
+
from sage.categories.algebra_functor import AlgebrasCategory
|
|
23
|
+
from sage.categories.with_realizations import WithRealizationsCategory
|
|
24
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
25
|
+
from sage.arith.power import generic_power
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Monoids(CategoryWithAxiom):
|
|
29
|
+
r"""
|
|
30
|
+
The category of (multiplicative) monoids.
|
|
31
|
+
|
|
32
|
+
A *monoid* is a unital :class:`semigroup <Semigroups>`, that is a
|
|
33
|
+
set endowed with a multiplicative binary operation `*` which is
|
|
34
|
+
associative and admits a unit (see :wikipedia:`Monoid`).
|
|
35
|
+
|
|
36
|
+
EXAMPLES::
|
|
37
|
+
|
|
38
|
+
sage: Monoids()
|
|
39
|
+
Category of monoids
|
|
40
|
+
sage: Monoids().super_categories()
|
|
41
|
+
[Category of semigroups, Category of unital magmas]
|
|
42
|
+
sage: Monoids().all_super_categories()
|
|
43
|
+
[Category of monoids,
|
|
44
|
+
Category of semigroups,
|
|
45
|
+
Category of unital magmas, Category of magmas,
|
|
46
|
+
Category of sets,
|
|
47
|
+
Category of sets with partial maps,
|
|
48
|
+
Category of objects]
|
|
49
|
+
|
|
50
|
+
sage: Monoids().axioms()
|
|
51
|
+
frozenset({'Associative', 'Unital'})
|
|
52
|
+
sage: Semigroups().Unital()
|
|
53
|
+
Category of monoids
|
|
54
|
+
|
|
55
|
+
sage: Monoids().example()
|
|
56
|
+
An example of a monoid: the free monoid generated by ('a', 'b', 'c', 'd')
|
|
57
|
+
|
|
58
|
+
TESTS::
|
|
59
|
+
|
|
60
|
+
sage: C = Monoids()
|
|
61
|
+
sage: TestSuite(C).run()
|
|
62
|
+
|
|
63
|
+
::
|
|
64
|
+
|
|
65
|
+
sage: S = Monoids().example()
|
|
66
|
+
sage: x = S("aa")
|
|
67
|
+
sage: x^0, x^1, x^2, x^3, x^4, x^5
|
|
68
|
+
('', 'aa', 'aaaa', 'aaaaaa', 'aaaaaaaa', 'aaaaaaaaaa')
|
|
69
|
+
|
|
70
|
+
Check for :issue:`31212`::
|
|
71
|
+
|
|
72
|
+
sage: R = IntegerModRing(15)
|
|
73
|
+
sage: R.submonoid([R.one()]).list() # needs sage.combinat
|
|
74
|
+
[1]
|
|
75
|
+
"""
|
|
76
|
+
_base_category_class_and_axiom = (Semigroups, "Unital")
|
|
77
|
+
|
|
78
|
+
Finite = LazyImport('sage.categories.finite_monoids', 'FiniteMonoids', at_startup=True)
|
|
79
|
+
Inverse = LazyImport('sage.categories.groups', 'Groups', at_startup=True)
|
|
80
|
+
|
|
81
|
+
@staticmethod
|
|
82
|
+
def free(index_set=None, names=None, **kwds):
|
|
83
|
+
r"""
|
|
84
|
+
Return a free monoid on `n` generators or with the generators
|
|
85
|
+
indexed by a set `I`.
|
|
86
|
+
|
|
87
|
+
A free monoid is constructed by specifying either:
|
|
88
|
+
|
|
89
|
+
- the number of generators and/or the names of the generators
|
|
90
|
+
- the indexing set for the generators
|
|
91
|
+
|
|
92
|
+
INPUT:
|
|
93
|
+
|
|
94
|
+
- ``index_set`` -- (optional) an index set for the generators; if
|
|
95
|
+
an integer, then this represents `\{0, 1, \ldots, n-1\}`
|
|
96
|
+
|
|
97
|
+
- ``names`` -- string or list/tuple/iterable of strings
|
|
98
|
+
(default: ``'x'``); the generator names or name prefix
|
|
99
|
+
|
|
100
|
+
EXAMPLES::
|
|
101
|
+
|
|
102
|
+
sage: Monoids.free(index_set=ZZ)
|
|
103
|
+
Free monoid indexed by Integer Ring
|
|
104
|
+
sage: Monoids().free(ZZ)
|
|
105
|
+
Free monoid indexed by Integer Ring
|
|
106
|
+
sage: F.<x,y,z> = Monoids().free(); F
|
|
107
|
+
Free monoid indexed by {'x', 'y', 'z'}
|
|
108
|
+
"""
|
|
109
|
+
if names is not None:
|
|
110
|
+
if isinstance(names, str):
|
|
111
|
+
from sage.rings.integer_ring import ZZ
|
|
112
|
+
if ',' not in names and index_set in ZZ:
|
|
113
|
+
names = [names + repr(i) for i in range(index_set)]
|
|
114
|
+
else:
|
|
115
|
+
names = names.split(',')
|
|
116
|
+
names = tuple(names)
|
|
117
|
+
if index_set is None:
|
|
118
|
+
index_set = names
|
|
119
|
+
|
|
120
|
+
from sage.monoids.indexed_free_monoid import IndexedFreeMonoid
|
|
121
|
+
return IndexedFreeMonoid(index_set, names=names, **kwds)
|
|
122
|
+
|
|
123
|
+
class ParentMethods:
|
|
124
|
+
|
|
125
|
+
def semigroup_generators(self):
|
|
126
|
+
"""
|
|
127
|
+
Return the generators of ``self`` as a semigroup.
|
|
128
|
+
|
|
129
|
+
The generators of a monoid `M` as a semigroup are the generators
|
|
130
|
+
of `M` as a monoid and the unit.
|
|
131
|
+
|
|
132
|
+
EXAMPLES::
|
|
133
|
+
|
|
134
|
+
sage: M = Monoids().free([1,2,3])
|
|
135
|
+
sage: M.semigroup_generators()
|
|
136
|
+
Family (1, F[1], F[2], F[3])
|
|
137
|
+
"""
|
|
138
|
+
G = self.monoid_generators()
|
|
139
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
140
|
+
if G not in FiniteEnumeratedSets():
|
|
141
|
+
raise NotImplementedError("currently only implemented for finitely generated monoids")
|
|
142
|
+
from sage.sets.family import Family
|
|
143
|
+
return Family((self.one(),) + tuple(G))
|
|
144
|
+
|
|
145
|
+
def prod(self, args):
|
|
146
|
+
r"""
|
|
147
|
+
n-ary product of elements of ``self``.
|
|
148
|
+
|
|
149
|
+
INPUT:
|
|
150
|
+
|
|
151
|
+
- ``args`` -- list (or iterable) of elements of ``self``
|
|
152
|
+
|
|
153
|
+
Returns the product of the elements in ``args``, as an element of
|
|
154
|
+
``self``.
|
|
155
|
+
|
|
156
|
+
EXAMPLES::
|
|
157
|
+
|
|
158
|
+
sage: S = Monoids().example()
|
|
159
|
+
sage: S.prod([S('a'), S('b')])
|
|
160
|
+
'ab'
|
|
161
|
+
"""
|
|
162
|
+
from sage.misc.misc_c import prod
|
|
163
|
+
return prod(args, self.one())
|
|
164
|
+
|
|
165
|
+
def _test_prod(self, **options):
|
|
166
|
+
r"""
|
|
167
|
+
Run basic tests for the product method :meth:`prod` of ``self``.
|
|
168
|
+
|
|
169
|
+
See the documentation for :class:`TestSuite` for information on
|
|
170
|
+
further options.
|
|
171
|
+
|
|
172
|
+
INPUT:
|
|
173
|
+
|
|
174
|
+
- ``options`` -- any keyword arguments accepted by :meth:`_tester`
|
|
175
|
+
|
|
176
|
+
EXAMPLES:
|
|
177
|
+
|
|
178
|
+
By default, this method tests only the elements returned by
|
|
179
|
+
``self.some_elements()``::
|
|
180
|
+
|
|
181
|
+
sage: S = Monoids().example()
|
|
182
|
+
sage: S._test_prod()
|
|
183
|
+
|
|
184
|
+
However, the elements tested can be customized with the
|
|
185
|
+
``elements`` keyword argument::
|
|
186
|
+
|
|
187
|
+
sage: S._test_prod(elements = (S('a'), S('b')))
|
|
188
|
+
"""
|
|
189
|
+
tester = self._tester(**options)
|
|
190
|
+
tester.assertEqual(self.prod([]), self.one())
|
|
191
|
+
for x in tester.some_elements():
|
|
192
|
+
tester.assertEqual(self.prod([x]), x)
|
|
193
|
+
tester.assertEqual(self.prod([x, x]), x**2)
|
|
194
|
+
tester.assertEqual(self.prod([x, x, x]), x**3)
|
|
195
|
+
|
|
196
|
+
def submonoid(self, generators, category=None):
|
|
197
|
+
r"""
|
|
198
|
+
Return the multiplicative submonoid generated by ``generators``.
|
|
199
|
+
|
|
200
|
+
INPUT:
|
|
201
|
+
|
|
202
|
+
- ``generators`` -- a finite family of elements of
|
|
203
|
+
``self``, or a list, iterable, ... that can be converted
|
|
204
|
+
into one (see :class:`Family`).
|
|
205
|
+
|
|
206
|
+
- ``category`` -- a category
|
|
207
|
+
|
|
208
|
+
This is a shorthand for
|
|
209
|
+
:meth:`Semigroups.ParentMethods.subsemigroup` that
|
|
210
|
+
specifies that this is a submonoid, and in particular that
|
|
211
|
+
the unit is ``self.one()``.
|
|
212
|
+
|
|
213
|
+
EXAMPLES::
|
|
214
|
+
|
|
215
|
+
sage: R = IntegerModRing(15)
|
|
216
|
+
sage: M = R.submonoid([R(3), R(5)]); M # needs sage.combinat
|
|
217
|
+
A submonoid of (Ring of integers modulo 15) with 2 generators
|
|
218
|
+
sage: M.list() # needs sage.combinat
|
|
219
|
+
[1, 3, 5, 9, 0, 10, 12, 6]
|
|
220
|
+
|
|
221
|
+
Not the presence of the unit, unlike in::
|
|
222
|
+
|
|
223
|
+
sage: S = R.subsemigroup([R(3), R(5)]); S # needs sage.combinat
|
|
224
|
+
A subsemigroup of (Ring of integers modulo 15) with 2 generators
|
|
225
|
+
sage: S.list() # needs sage.combinat
|
|
226
|
+
[3, 5, 9, 0, 10, 12, 6]
|
|
227
|
+
|
|
228
|
+
This method is really a shorthand for subsemigroup::
|
|
229
|
+
|
|
230
|
+
sage: M2 = R.subsemigroup([R(3), R(5)], one=R.one()) # needs sage.combinat
|
|
231
|
+
sage: M2 is M # needs sage.combinat
|
|
232
|
+
True
|
|
233
|
+
"""
|
|
234
|
+
return self.subsemigroup(generators, one=self.one())
|
|
235
|
+
|
|
236
|
+
class ElementMethods:
|
|
237
|
+
def _div_(left, right):
|
|
238
|
+
r"""
|
|
239
|
+
Default implementation of division, multiplying (on the right) by the inverse.
|
|
240
|
+
|
|
241
|
+
INPUT:
|
|
242
|
+
|
|
243
|
+
- ``left``, ``right`` -- two elements of the same unital monoid
|
|
244
|
+
|
|
245
|
+
.. SEEALSO:: :meth:`__div__`
|
|
246
|
+
|
|
247
|
+
EXAMPLES::
|
|
248
|
+
|
|
249
|
+
sage: # needs sage.combinat sage.groups
|
|
250
|
+
sage: G = FreeGroup(2)
|
|
251
|
+
sage: x0, x1 = G.group_generators()
|
|
252
|
+
sage: c1 = cartesian_product([x0, x1])
|
|
253
|
+
sage: c2 = cartesian_product([x1, x0])
|
|
254
|
+
sage: c1._div_(c2)
|
|
255
|
+
(x0*x1^-1, x1*x0^-1)
|
|
256
|
+
|
|
257
|
+
With this default implementation, division will fail as
|
|
258
|
+
soon as ``right`` is not invertible, even if ``right``
|
|
259
|
+
actually divides ``left``::
|
|
260
|
+
|
|
261
|
+
sage: x = cartesian_product([2, 0])
|
|
262
|
+
sage: y = cartesian_product([1, 1])
|
|
263
|
+
sage: x / y
|
|
264
|
+
(2, 0)
|
|
265
|
+
sage: y / x
|
|
266
|
+
Traceback (most recent call last):
|
|
267
|
+
...
|
|
268
|
+
ZeroDivisionError: rational division by zero
|
|
269
|
+
|
|
270
|
+
TESTS::
|
|
271
|
+
|
|
272
|
+
sage: c1._div_.__module__ # needs sage.combinat sage.groups
|
|
273
|
+
'sage.categories.monoids'
|
|
274
|
+
"""
|
|
275
|
+
return left * ~right
|
|
276
|
+
|
|
277
|
+
def is_one(self):
|
|
278
|
+
r"""
|
|
279
|
+
Return whether ``self`` is the one of the monoid.
|
|
280
|
+
|
|
281
|
+
The default implementation is to compare with ``self.one()``.
|
|
282
|
+
|
|
283
|
+
TESTS::
|
|
284
|
+
|
|
285
|
+
sage: S = Monoids().example()
|
|
286
|
+
sage: S.one().is_one()
|
|
287
|
+
True
|
|
288
|
+
sage: S("aa").is_one()
|
|
289
|
+
False
|
|
290
|
+
"""
|
|
291
|
+
return self == self.parent().one()
|
|
292
|
+
|
|
293
|
+
def _pow_int(self, n):
|
|
294
|
+
r"""
|
|
295
|
+
Return ``self`` to the `n`-th power.
|
|
296
|
+
|
|
297
|
+
INPUT:
|
|
298
|
+
|
|
299
|
+
- ``n`` -- nonnegative integer
|
|
300
|
+
|
|
301
|
+
EXAMPLES::
|
|
302
|
+
|
|
303
|
+
sage: S = Monoids().example()
|
|
304
|
+
sage: S("a") ^ 5
|
|
305
|
+
'aaaaa'
|
|
306
|
+
"""
|
|
307
|
+
return generic_power(self, n)
|
|
308
|
+
|
|
309
|
+
def _pow_naive(self, n):
|
|
310
|
+
r"""
|
|
311
|
+
Return ``self`` to the `n`-th power (naive implementation).
|
|
312
|
+
|
|
313
|
+
INPUT:
|
|
314
|
+
|
|
315
|
+
- ``n`` -- nonnegative integer
|
|
316
|
+
|
|
317
|
+
This naive implementation does not use binary
|
|
318
|
+
exponentiation; there are cases where this is actually
|
|
319
|
+
faster due to size explosion.
|
|
320
|
+
|
|
321
|
+
EXAMPLES::
|
|
322
|
+
|
|
323
|
+
sage: S = Monoids().example()
|
|
324
|
+
sage: x = S("aa")
|
|
325
|
+
sage: [x._pow_naive(i) for i in range(6)]
|
|
326
|
+
['', 'aa', 'aaaa', 'aaaaaa', 'aaaaaaaa', 'aaaaaaaaaa']
|
|
327
|
+
"""
|
|
328
|
+
if not n:
|
|
329
|
+
return self.parent().one()
|
|
330
|
+
result = self
|
|
331
|
+
for i in range(n - 1):
|
|
332
|
+
result *= self
|
|
333
|
+
return result
|
|
334
|
+
|
|
335
|
+
def powers(self, n):
|
|
336
|
+
r"""
|
|
337
|
+
Return the list `[x^0, x^1, \ldots, x^{n-1}]`.
|
|
338
|
+
|
|
339
|
+
EXAMPLES::
|
|
340
|
+
|
|
341
|
+
sage: A = Matrix([[1, 1], [-1, 0]]) # needs sage.modules
|
|
342
|
+
sage: A.powers(6) # needs sage.modules
|
|
343
|
+
[
|
|
344
|
+
[1 0] [ 1 1] [ 0 1] [-1 0] [-1 -1] [ 0 -1]
|
|
345
|
+
[0 1], [-1 0], [-1 -1], [ 0 -1], [ 1 0], [ 1 1]
|
|
346
|
+
]
|
|
347
|
+
"""
|
|
348
|
+
if n < 0:
|
|
349
|
+
raise ValueError("negative number of powers requested")
|
|
350
|
+
elif n == 0:
|
|
351
|
+
return []
|
|
352
|
+
x = self.parent().one()
|
|
353
|
+
l = [x]
|
|
354
|
+
for i in range(n - 1):
|
|
355
|
+
x = x * self
|
|
356
|
+
l.append(x)
|
|
357
|
+
return l
|
|
358
|
+
|
|
359
|
+
def __invert__(self):
|
|
360
|
+
r"""
|
|
361
|
+
Return the multiplicative inverse of ``self``.
|
|
362
|
+
|
|
363
|
+
There is no default implementation, to avoid conflict
|
|
364
|
+
with the default implementation of ``_div_``.
|
|
365
|
+
|
|
366
|
+
EXAMPLES::
|
|
367
|
+
|
|
368
|
+
sage: A = Matrix([[1, 0], [1, 1]]) # needs sage.modules
|
|
369
|
+
sage: ~A # needs sage.modules
|
|
370
|
+
[ 1 0]
|
|
371
|
+
[-1 1]
|
|
372
|
+
"""
|
|
373
|
+
raise NotImplementedError("please implement __invert__")
|
|
374
|
+
|
|
375
|
+
def inverse(self):
|
|
376
|
+
"""
|
|
377
|
+
Return the multiplicative inverse of ``self``.
|
|
378
|
+
|
|
379
|
+
This is an alias for inversion, which can also be invoked
|
|
380
|
+
by ``~x`` for an element ``x``.
|
|
381
|
+
|
|
382
|
+
Nota Bene: Element classes should implement ``__invert__`` only.
|
|
383
|
+
|
|
384
|
+
EXAMPLES::
|
|
385
|
+
|
|
386
|
+
sage: AA(sqrt(~2)).inverse() # needs sage.rings.number_field sage.symbolic
|
|
387
|
+
1.414213562373095?
|
|
388
|
+
"""
|
|
389
|
+
# Nota Bene: Element classes should implement ``__invert__`` only.
|
|
390
|
+
return self.__invert__()
|
|
391
|
+
|
|
392
|
+
class Commutative(CategoryWithAxiom):
|
|
393
|
+
r"""
|
|
394
|
+
Category of commutative (abelian) monoids.
|
|
395
|
+
|
|
396
|
+
A monoid `M` is *commutative* if `xy = yx` for all `x,y \in M`.
|
|
397
|
+
"""
|
|
398
|
+
@staticmethod
|
|
399
|
+
def free(index_set=None, names=None, **kwds):
|
|
400
|
+
r"""
|
|
401
|
+
Return a free abelian monoid on `n` generators or with
|
|
402
|
+
the generators indexed by a set `I`.
|
|
403
|
+
|
|
404
|
+
A free monoid is constructed by specifying either:
|
|
405
|
+
|
|
406
|
+
- the number of generators and/or the names of the generators, or
|
|
407
|
+
- the indexing set for the generators.
|
|
408
|
+
|
|
409
|
+
INPUT:
|
|
410
|
+
|
|
411
|
+
- ``index_set`` -- (optional) an index set for the generators; if
|
|
412
|
+
an integer, then this represents `\{0, 1, \ldots, n-1\}`
|
|
413
|
+
|
|
414
|
+
- ``names`` -- string or list/tuple/iterable of strings
|
|
415
|
+
(default: ``'x'``); the generator names or name prefix
|
|
416
|
+
|
|
417
|
+
EXAMPLES::
|
|
418
|
+
|
|
419
|
+
sage: Monoids.Commutative.free(index_set=ZZ)
|
|
420
|
+
Free abelian monoid indexed by Integer Ring
|
|
421
|
+
sage: Monoids().Commutative().free(ZZ)
|
|
422
|
+
Free abelian monoid indexed by Integer Ring
|
|
423
|
+
sage: F.<x,y,z> = Monoids().Commutative().free(); F
|
|
424
|
+
Free abelian monoid indexed by {'x', 'y', 'z'}
|
|
425
|
+
"""
|
|
426
|
+
if names is not None:
|
|
427
|
+
if isinstance(names, str):
|
|
428
|
+
from sage.rings.integer_ring import ZZ
|
|
429
|
+
if ',' not in names and index_set in ZZ:
|
|
430
|
+
names = [names + repr(i) for i in range(index_set)]
|
|
431
|
+
else:
|
|
432
|
+
names = names.split(',')
|
|
433
|
+
names = tuple(names)
|
|
434
|
+
if index_set is None:
|
|
435
|
+
index_set = names
|
|
436
|
+
|
|
437
|
+
from sage.monoids.indexed_free_monoid import IndexedFreeAbelianMonoid
|
|
438
|
+
return IndexedFreeAbelianMonoid(index_set, names=names, **kwds)
|
|
439
|
+
|
|
440
|
+
class WithRealizations(WithRealizationsCategory):
|
|
441
|
+
|
|
442
|
+
class ParentMethods:
|
|
443
|
+
|
|
444
|
+
def one(self):
|
|
445
|
+
r"""
|
|
446
|
+
Return the unit of this monoid.
|
|
447
|
+
|
|
448
|
+
This default implementation returns the unit of the
|
|
449
|
+
realization of ``self`` given by
|
|
450
|
+
:meth:`~Sets.WithRealizations.ParentMethods.a_realization`.
|
|
451
|
+
|
|
452
|
+
EXAMPLES::
|
|
453
|
+
|
|
454
|
+
sage: A = Sets().WithRealizations().example(); A # needs sage.modules
|
|
455
|
+
The subset algebra of {1, 2, 3} over Rational Field
|
|
456
|
+
sage: A.one.__module__ # needs sage.modules
|
|
457
|
+
'sage.categories.monoids'
|
|
458
|
+
sage: A.one() # needs sage.modules
|
|
459
|
+
F[{}]
|
|
460
|
+
|
|
461
|
+
TESTS::
|
|
462
|
+
|
|
463
|
+
sage: A.one() is A.a_realization().one() # needs sage.modules
|
|
464
|
+
True
|
|
465
|
+
sage: A._test_one() # needs sage.modules
|
|
466
|
+
"""
|
|
467
|
+
return self.a_realization().one()
|
|
468
|
+
|
|
469
|
+
class Subquotients(SubquotientsCategory):
|
|
470
|
+
|
|
471
|
+
class ParentMethods:
|
|
472
|
+
|
|
473
|
+
def one(self):
|
|
474
|
+
"""
|
|
475
|
+
Return the multiplicative unit of this monoid,
|
|
476
|
+
obtained by retracting that of the ambient monoid.
|
|
477
|
+
|
|
478
|
+
EXAMPLES::
|
|
479
|
+
|
|
480
|
+
sage: S = Monoids().Subquotients().example() # todo: not implemented
|
|
481
|
+
sage: S.one() # todo: not implemented
|
|
482
|
+
"""
|
|
483
|
+
return self.retract(self.ambient().one())
|
|
484
|
+
|
|
485
|
+
class Algebras(AlgebrasCategory):
|
|
486
|
+
|
|
487
|
+
def extra_super_categories(self):
|
|
488
|
+
"""
|
|
489
|
+
The algebra of a monoid is a bialgebra and a monoid.
|
|
490
|
+
|
|
491
|
+
EXAMPLES::
|
|
492
|
+
|
|
493
|
+
sage: C = Monoids().Algebras(QQ)
|
|
494
|
+
sage: C.extra_super_categories()
|
|
495
|
+
[Category of bialgebras over Rational Field,
|
|
496
|
+
Category of monoids]
|
|
497
|
+
sage: Monoids().Algebras(QQ).super_categories()
|
|
498
|
+
[Category of bialgebras with basis over Rational Field,
|
|
499
|
+
Category of semigroup algebras over Rational Field,
|
|
500
|
+
Category of unital magma algebras over Rational Field]
|
|
501
|
+
"""
|
|
502
|
+
from sage.categories.bialgebras import Bialgebras
|
|
503
|
+
return [Bialgebras(self.base_ring()), Monoids()]
|
|
504
|
+
|
|
505
|
+
class ParentMethods:
|
|
506
|
+
|
|
507
|
+
def is_field(self, proof=True) -> bool:
|
|
508
|
+
r"""
|
|
509
|
+
Return ``True`` if ``self`` is a field.
|
|
510
|
+
|
|
511
|
+
For a monoid algebra `R S` this is always false unless
|
|
512
|
+
`S` is trivial and the base ring `R` is a field.
|
|
513
|
+
|
|
514
|
+
EXAMPLES::
|
|
515
|
+
|
|
516
|
+
sage: SymmetricGroup(1).algebra(QQ).is_field() # needs sage.combinat sage.groups
|
|
517
|
+
True
|
|
518
|
+
sage: SymmetricGroup(1).algebra(ZZ).is_field() # needs sage.combinat sage.groups
|
|
519
|
+
False
|
|
520
|
+
sage: SymmetricGroup(2).algebra(QQ).is_field() # needs sage.combinat sage.groups
|
|
521
|
+
False
|
|
522
|
+
"""
|
|
523
|
+
if not self.base_ring().is_field(proof):
|
|
524
|
+
return False
|
|
525
|
+
return self.basis().keys().cardinality() == 1
|
|
526
|
+
|
|
527
|
+
@cached_method
|
|
528
|
+
def one_basis(self):
|
|
529
|
+
"""
|
|
530
|
+
Return the unit of the monoid, which indexes the unit of
|
|
531
|
+
this algebra, as per
|
|
532
|
+
:meth:`AlgebrasWithBasis.ParentMethods.one_basis()
|
|
533
|
+
<sage.categories.algebras_with_basis.AlgebrasWithBasis.ParentMethods.one_basis>`.
|
|
534
|
+
|
|
535
|
+
EXAMPLES::
|
|
536
|
+
|
|
537
|
+
sage: # needs sage.modules
|
|
538
|
+
sage: A = Monoids().example().algebra(ZZ)
|
|
539
|
+
sage: A.one_basis()
|
|
540
|
+
''
|
|
541
|
+
sage: A.one()
|
|
542
|
+
B['']
|
|
543
|
+
sage: A(3)
|
|
544
|
+
3*B['']
|
|
545
|
+
"""
|
|
546
|
+
return self.basis().keys().one()
|
|
547
|
+
|
|
548
|
+
@cached_method
|
|
549
|
+
def algebra_generators(self):
|
|
550
|
+
r"""
|
|
551
|
+
Return generators for this algebra.
|
|
552
|
+
|
|
553
|
+
For a monoid algebra, the algebra generators are built
|
|
554
|
+
from the monoid generators if available and from the
|
|
555
|
+
semigroup generators otherwise.
|
|
556
|
+
|
|
557
|
+
.. SEEALSO::
|
|
558
|
+
|
|
559
|
+
- :meth:`Semigroups.Algebras.ParentMethods.algebra_generators`
|
|
560
|
+
- :meth:`MagmaticAlgebras.ParentMethods.algebra_generators()
|
|
561
|
+
<.magmatic_algebras.MagmaticAlgebras.ParentMethods.algebra_generators>`.
|
|
562
|
+
|
|
563
|
+
EXAMPLES::
|
|
564
|
+
|
|
565
|
+
sage: M = Monoids().example(); M
|
|
566
|
+
An example of a monoid:
|
|
567
|
+
the free monoid generated by ('a', 'b', 'c', 'd')
|
|
568
|
+
sage: M.monoid_generators()
|
|
569
|
+
Finite family {'a': 'a', 'b': 'b', 'c': 'c', 'd': 'd'}
|
|
570
|
+
sage: M.algebra(ZZ).algebra_generators() # needs sage.modules
|
|
571
|
+
Finite family {'a': B['a'], 'b': B['b'], 'c': B['c'], 'd': B['d']}
|
|
572
|
+
|
|
573
|
+
sage: Z12 = Monoids().Finite().example(); Z12
|
|
574
|
+
An example of a finite multiplicative monoid:
|
|
575
|
+
the integers modulo 12
|
|
576
|
+
sage: Z12.monoid_generators()
|
|
577
|
+
Traceback (most recent call last):
|
|
578
|
+
...
|
|
579
|
+
AttributeError: 'IntegerModMonoid_with_category' object
|
|
580
|
+
has no attribute 'monoid_generators'...
|
|
581
|
+
sage: Z12.semigroup_generators()
|
|
582
|
+
Family (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
|
|
583
|
+
sage: Z12.algebra(QQ).algebra_generators() # needs sage.modules
|
|
584
|
+
Family (B[0], B[1], B[2], B[3], B[4], B[5], B[6], B[7], B[8], B[9], B[10], B[11])
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
sage: A10 = AlternatingGroup(10) # needs sage.groups
|
|
588
|
+
sage: GroupAlgebras(QQ).example(A10).algebra_generators() # needs sage.groups sage.modules
|
|
589
|
+
Family ((1,2,3,4,5,6,7,8,9), (8,9,10))
|
|
590
|
+
|
|
591
|
+
sage: A = DihedralGroup(3).algebra(QQ); A # needs sage.groups sage.modules
|
|
592
|
+
Algebra of Dihedral group of order 6 as a permutation group
|
|
593
|
+
over Rational Field
|
|
594
|
+
sage: A.algebra_generators() # needs sage.groups sage.modules
|
|
595
|
+
Family ((1,2,3), (1,3))
|
|
596
|
+
"""
|
|
597
|
+
monoid = self.basis().keys()
|
|
598
|
+
try:
|
|
599
|
+
generators = monoid.monoid_generators()
|
|
600
|
+
except AttributeError:
|
|
601
|
+
generators = monoid.semigroup_generators()
|
|
602
|
+
return generators.map(self.monomial)
|
|
603
|
+
|
|
604
|
+
class ElementMethods:
|
|
605
|
+
|
|
606
|
+
def is_central(self):
|
|
607
|
+
r"""
|
|
608
|
+
Return whether the element ``self`` is central.
|
|
609
|
+
|
|
610
|
+
EXAMPLES::
|
|
611
|
+
|
|
612
|
+
sage: SG4 = SymmetricGroupAlgebra(ZZ,4) # needs sage.combinat sage.groups
|
|
613
|
+
sage: SG4(1).is_central() # needs sage.combinat sage.groups
|
|
614
|
+
True
|
|
615
|
+
sage: SG4(Permutation([1,3,2,4])).is_central() # needs sage.combinat sage.groups
|
|
616
|
+
False
|
|
617
|
+
|
|
618
|
+
sage: A = GroupAlgebras(QQ).example(); A # needs sage.combinat sage.groups
|
|
619
|
+
Algebra of Dihedral group of order 8
|
|
620
|
+
as a permutation group over Rational Field
|
|
621
|
+
sage: sum(A.basis()).is_central() # needs sage.combinat sage.groups
|
|
622
|
+
True
|
|
623
|
+
"""
|
|
624
|
+
return all(i * self == self * i
|
|
625
|
+
for i in self.parent().algebra_generators())
|
|
626
|
+
|
|
627
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
628
|
+
"""
|
|
629
|
+
The category of monoids constructed as Cartesian products of monoids.
|
|
630
|
+
|
|
631
|
+
This construction gives the direct product of monoids. See
|
|
632
|
+
:wikipedia:`Direct_product` for more information.
|
|
633
|
+
"""
|
|
634
|
+
def extra_super_categories(self):
|
|
635
|
+
"""
|
|
636
|
+
A Cartesian product of monoids is endowed with a natural
|
|
637
|
+
group structure.
|
|
638
|
+
|
|
639
|
+
EXAMPLES::
|
|
640
|
+
|
|
641
|
+
sage: C = Monoids().CartesianProducts()
|
|
642
|
+
sage: C.extra_super_categories()
|
|
643
|
+
[Category of monoids]
|
|
644
|
+
sage: sorted(C.super_categories(), key=str)
|
|
645
|
+
[Category of Cartesian products of semigroups,
|
|
646
|
+
Category of Cartesian products of unital magmas,
|
|
647
|
+
Category of monoids]
|
|
648
|
+
"""
|
|
649
|
+
return [self.base_category()]
|
|
650
|
+
|
|
651
|
+
class ParentMethods:
|
|
652
|
+
@cached_method
|
|
653
|
+
def monoid_generators(self):
|
|
654
|
+
"""
|
|
655
|
+
Return the generators of ``self``.
|
|
656
|
+
|
|
657
|
+
EXAMPLES::
|
|
658
|
+
|
|
659
|
+
sage: # needs sage.combinat sage.groups
|
|
660
|
+
sage: M = Monoids.free([1, 2, 3])
|
|
661
|
+
sage: N = Monoids.free(['a', 'b'])
|
|
662
|
+
sage: C = cartesian_product([M, N])
|
|
663
|
+
sage: C.monoid_generators()
|
|
664
|
+
Family ((F[1], 1), (F[2], 1), (F[3], 1),
|
|
665
|
+
(1, F['a']), (1, F['b']))
|
|
666
|
+
|
|
667
|
+
An example with an infinitely generated group (a better output
|
|
668
|
+
is needed)::
|
|
669
|
+
|
|
670
|
+
sage: N = Monoids.free(ZZ)
|
|
671
|
+
sage: C = cartesian_product([M, N]) # needs sage.combinat sage.groups
|
|
672
|
+
sage: C.monoid_generators() # needs sage.combinat sage.groups
|
|
673
|
+
Lazy family (gen(i))_{i in The Cartesian product of (...)}
|
|
674
|
+
"""
|
|
675
|
+
F = self.cartesian_factors()
|
|
676
|
+
ids = tuple(M.one() for M in F)
|
|
677
|
+
|
|
678
|
+
def lift(i, gen):
|
|
679
|
+
cur = list(ids)
|
|
680
|
+
cur[i] = gen
|
|
681
|
+
return self._cartesian_product_of_elements(cur)
|
|
682
|
+
from sage.sets.family import Family
|
|
683
|
+
|
|
684
|
+
# Finitely generated
|
|
685
|
+
cat = FiniteEnumeratedSets()
|
|
686
|
+
if all(M.monoid_generators() in cat or
|
|
687
|
+
isinstance(M.monoid_generators(), (tuple, list))
|
|
688
|
+
for M in F):
|
|
689
|
+
ret = [lift(i, gen) for i, M in enumerate(F)
|
|
690
|
+
for gen in M.monoid_generators()]
|
|
691
|
+
return Family(ret)
|
|
692
|
+
|
|
693
|
+
# Infinitely generated
|
|
694
|
+
# This does not return a good output, but it is "correct"
|
|
695
|
+
# TODO: Figure out a better way to do things
|
|
696
|
+
from sage.categories.cartesian_product import cartesian_product
|
|
697
|
+
gens_prod = cartesian_product([Family(M.monoid_generators(),
|
|
698
|
+
lambda g: (i, g))
|
|
699
|
+
for i, M in enumerate(F)])
|
|
700
|
+
return Family(gens_prod, lift, name='gen')
|
|
701
|
+
|
|
702
|
+
class ElementMethods:
|
|
703
|
+
def multiplicative_order(self):
|
|
704
|
+
r"""
|
|
705
|
+
Return the multiplicative order of this element.
|
|
706
|
+
|
|
707
|
+
EXAMPLES::
|
|
708
|
+
|
|
709
|
+
sage: # needs sage.groups sage.modules
|
|
710
|
+
sage: G1 = SymmetricGroup(3)
|
|
711
|
+
sage: G2 = SL(2, 3)
|
|
712
|
+
sage: G = cartesian_product([G1, G2])
|
|
713
|
+
sage: G((G1.gen(0), G2.gen(1))).multiplicative_order()
|
|
714
|
+
12
|
|
715
|
+
"""
|
|
716
|
+
from sage.rings.infinity import Infinity
|
|
717
|
+
orders = [x.multiplicative_order() for x in self.cartesian_factors()]
|
|
718
|
+
if any(o is Infinity for o in orders):
|
|
719
|
+
return Infinity
|
|
720
|
+
else:
|
|
721
|
+
from sage.arith.functions import LCM_list
|
|
722
|
+
return LCM_list(orders)
|
|
723
|
+
|
|
724
|
+
def __invert__(self):
|
|
725
|
+
"""
|
|
726
|
+
Return the inverse.
|
|
727
|
+
|
|
728
|
+
EXAMPLES::
|
|
729
|
+
|
|
730
|
+
sage: # needs sage.groups sage.modules
|
|
731
|
+
sage: a1 = Permutation((4,2,1,3))
|
|
732
|
+
sage: a2 = SL(2, 3)([2,1,1,1])
|
|
733
|
+
sage: h = cartesian_product([a1, a2])
|
|
734
|
+
sage: ~h
|
|
735
|
+
([2, 4, 1, 3], [1 2]
|
|
736
|
+
[2 2])
|
|
737
|
+
"""
|
|
738
|
+
build = self.parent()._cartesian_product_of_elements
|
|
739
|
+
return build([x.__invert__() for x in self.cartesian_factors()])
|