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,1044 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Additive magmas
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2010-2014 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# https://www.gnu.org/licenses/
|
|
10
|
+
# *****************************************************************************
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from typing import Self # type: ignore (Python >= 3.11)
|
|
14
|
+
except ImportError:
|
|
15
|
+
from typing_extensions import Self # type: ignore (Python 3.10)
|
|
16
|
+
|
|
17
|
+
from sage.categories.algebra_functor import AlgebrasCategory
|
|
18
|
+
from sage.categories.cartesian_product import CartesianProductsCategory
|
|
19
|
+
from sage.categories.category_singleton import Category_singleton
|
|
20
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom
|
|
21
|
+
from sage.categories.homsets import HomsetsCategory
|
|
22
|
+
from sage.categories.sets_cat import Sets
|
|
23
|
+
from sage.categories.with_realizations import WithRealizationsCategory
|
|
24
|
+
from sage.misc.abstract_method import abstract_method
|
|
25
|
+
from sage.misc.cachefunc import cached_method
|
|
26
|
+
from sage.misc.lazy_import import LazyImport
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class AdditiveMagmas(Category_singleton):
|
|
30
|
+
"""
|
|
31
|
+
The category of additive magmas.
|
|
32
|
+
|
|
33
|
+
An additive magma is a set endowed with a binary operation `+`.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: AdditiveMagmas()
|
|
38
|
+
Category of additive magmas
|
|
39
|
+
sage: AdditiveMagmas().super_categories()
|
|
40
|
+
[Category of sets]
|
|
41
|
+
sage: AdditiveMagmas().all_super_categories()
|
|
42
|
+
[Category of additive magmas,
|
|
43
|
+
Category of sets,
|
|
44
|
+
Category of sets with partial maps,
|
|
45
|
+
Category of objects]
|
|
46
|
+
|
|
47
|
+
The following axioms are defined by this category::
|
|
48
|
+
|
|
49
|
+
sage: AdditiveMagmas().AdditiveAssociative()
|
|
50
|
+
Category of additive semigroups
|
|
51
|
+
sage: AdditiveMagmas().AdditiveUnital()
|
|
52
|
+
Category of additive unital additive magmas
|
|
53
|
+
sage: AdditiveMagmas().AdditiveCommutative()
|
|
54
|
+
Category of additive commutative additive magmas
|
|
55
|
+
sage: AdditiveMagmas().AdditiveUnital().AdditiveInverse()
|
|
56
|
+
Category of additive inverse additive unital additive magmas
|
|
57
|
+
sage: C = AdditiveMagmas().AdditiveAssociative().AdditiveCommutative(); C
|
|
58
|
+
Category of commutative additive semigroups
|
|
59
|
+
sage: C.AdditiveUnital()
|
|
60
|
+
Category of commutative additive monoids
|
|
61
|
+
sage: C.AdditiveUnital().AdditiveInverse()
|
|
62
|
+
Category of commutative additive groups
|
|
63
|
+
|
|
64
|
+
TESTS::
|
|
65
|
+
|
|
66
|
+
sage: C = AdditiveMagmas()
|
|
67
|
+
sage: TestSuite(C).run()
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def super_categories(self):
|
|
71
|
+
"""
|
|
72
|
+
EXAMPLES::
|
|
73
|
+
|
|
74
|
+
sage: AdditiveMagmas().super_categories()
|
|
75
|
+
[Category of sets]
|
|
76
|
+
"""
|
|
77
|
+
return [Sets()]
|
|
78
|
+
|
|
79
|
+
def __lean_init__(self):
|
|
80
|
+
return 'has_add'
|
|
81
|
+
|
|
82
|
+
class SubcategoryMethods:
|
|
83
|
+
|
|
84
|
+
@cached_method
|
|
85
|
+
def AdditiveAssociative(self):
|
|
86
|
+
r"""
|
|
87
|
+
Return the full subcategory of the additive associative
|
|
88
|
+
objects of ``self``.
|
|
89
|
+
|
|
90
|
+
An :class:`additive magma <AdditiveMagmas>` `M` is
|
|
91
|
+
*associative* if, for all `x,y,z \in M`,
|
|
92
|
+
|
|
93
|
+
.. MATH:: x + (y + z) = (x + y) + z
|
|
94
|
+
|
|
95
|
+
.. SEEALSO:: :wikipedia:`Associative_property`
|
|
96
|
+
|
|
97
|
+
EXAMPLES::
|
|
98
|
+
|
|
99
|
+
sage: AdditiveMagmas().AdditiveAssociative()
|
|
100
|
+
Category of additive semigroups
|
|
101
|
+
|
|
102
|
+
TESTS::
|
|
103
|
+
|
|
104
|
+
sage: TestSuite(AdditiveMagmas().AdditiveAssociative()).run()
|
|
105
|
+
sage: Rings().AdditiveAssociative.__module__
|
|
106
|
+
'sage.categories.additive_magmas'
|
|
107
|
+
"""
|
|
108
|
+
return self._with_axiom('AdditiveAssociative')
|
|
109
|
+
|
|
110
|
+
@cached_method
|
|
111
|
+
def AdditiveCommutative(self):
|
|
112
|
+
r"""
|
|
113
|
+
Return the full subcategory of the commutative objects of ``self``.
|
|
114
|
+
|
|
115
|
+
An :class:`additive magma <AdditiveMagmas>` `M` is
|
|
116
|
+
*commutative* if, for all `x,y \in M`,
|
|
117
|
+
|
|
118
|
+
.. MATH:: x + y = y + x
|
|
119
|
+
|
|
120
|
+
.. SEEALSO:: :wikipedia:`Commutative_property`
|
|
121
|
+
|
|
122
|
+
EXAMPLES::
|
|
123
|
+
|
|
124
|
+
sage: AdditiveMagmas().AdditiveCommutative()
|
|
125
|
+
Category of additive commutative additive magmas
|
|
126
|
+
sage: C = AdditiveMagmas().AdditiveAssociative().AdditiveUnital()
|
|
127
|
+
sage: C.AdditiveCommutative()
|
|
128
|
+
Category of commutative additive monoids
|
|
129
|
+
sage: C.AdditiveCommutative() is CommutativeAdditiveMonoids()
|
|
130
|
+
True
|
|
131
|
+
|
|
132
|
+
TESTS::
|
|
133
|
+
|
|
134
|
+
sage: TestSuite(AdditiveMagmas().AdditiveCommutative()).run()
|
|
135
|
+
sage: Rings().AdditiveCommutative.__module__
|
|
136
|
+
'sage.categories.additive_magmas'
|
|
137
|
+
"""
|
|
138
|
+
return self._with_axiom('AdditiveCommutative')
|
|
139
|
+
|
|
140
|
+
@cached_method
|
|
141
|
+
def AdditiveUnital(self):
|
|
142
|
+
r"""
|
|
143
|
+
Return the subcategory of the unital objects of ``self``.
|
|
144
|
+
|
|
145
|
+
An :class:`additive magma <AdditiveMagmas>` `M` is *unital*
|
|
146
|
+
if it admits an element `0`, called *neutral element*,
|
|
147
|
+
such that for all `x \in M`,
|
|
148
|
+
|
|
149
|
+
.. MATH:: 0 + x = x + 0 = x
|
|
150
|
+
|
|
151
|
+
This element is necessarily unique, and should be provided
|
|
152
|
+
as ``M.zero()``.
|
|
153
|
+
|
|
154
|
+
.. SEEALSO:: :wikipedia:`Unital_magma#unital`
|
|
155
|
+
|
|
156
|
+
EXAMPLES::
|
|
157
|
+
|
|
158
|
+
sage: AdditiveMagmas().AdditiveUnital()
|
|
159
|
+
Category of additive unital additive magmas
|
|
160
|
+
sage: from sage.categories.additive_semigroups import AdditiveSemigroups
|
|
161
|
+
sage: AdditiveSemigroups().AdditiveUnital()
|
|
162
|
+
Category of additive monoids
|
|
163
|
+
sage: CommutativeAdditiveMonoids().AdditiveUnital()
|
|
164
|
+
Category of commutative additive monoids
|
|
165
|
+
|
|
166
|
+
TESTS::
|
|
167
|
+
|
|
168
|
+
sage: TestSuite(AdditiveMagmas().AdditiveUnital()).run()
|
|
169
|
+
sage: CommutativeAdditiveSemigroups().AdditiveUnital.__module__
|
|
170
|
+
'sage.categories.additive_magmas'
|
|
171
|
+
"""
|
|
172
|
+
return self._with_axiom("AdditiveUnital")
|
|
173
|
+
|
|
174
|
+
AdditiveAssociative = LazyImport('sage.categories.additive_semigroups', 'AdditiveSemigroups', at_startup=True)
|
|
175
|
+
|
|
176
|
+
class ParentMethods:
|
|
177
|
+
|
|
178
|
+
def summation(self, x, y):
|
|
179
|
+
r"""
|
|
180
|
+
Return the sum of ``x`` and ``y``.
|
|
181
|
+
|
|
182
|
+
The binary addition operator of this additive magma.
|
|
183
|
+
|
|
184
|
+
INPUT:
|
|
185
|
+
|
|
186
|
+
- ``x``, ``y`` -- elements of this additive magma
|
|
187
|
+
|
|
188
|
+
EXAMPLES::
|
|
189
|
+
|
|
190
|
+
sage: S = CommutativeAdditiveSemigroups().example()
|
|
191
|
+
sage: (a,b,c,d) = S.additive_semigroup_generators()
|
|
192
|
+
sage: S.summation(a, b)
|
|
193
|
+
a + b
|
|
194
|
+
|
|
195
|
+
A parent in ``AdditiveMagmas()`` must
|
|
196
|
+
either implement :meth:`.summation` in the parent class or
|
|
197
|
+
``_add_`` in the element class. By default, the addition
|
|
198
|
+
method on elements ``x._add_(y)`` calls
|
|
199
|
+
``S.summation(x,y)``, and reciprocally.
|
|
200
|
+
|
|
201
|
+
As a bonus effect, ``S.summation`` by itself models the
|
|
202
|
+
binary function from ``S`` to ``S``::
|
|
203
|
+
|
|
204
|
+
sage: bin = S.summation
|
|
205
|
+
sage: bin(a,b)
|
|
206
|
+
a + b
|
|
207
|
+
|
|
208
|
+
Here, ``S.summation`` is just a bound method. Whenever
|
|
209
|
+
possible, it is recommended to enrich ``S.summation`` with
|
|
210
|
+
extra mathematical structure. Lazy attributes can come
|
|
211
|
+
handy for this.
|
|
212
|
+
|
|
213
|
+
.. TODO:: Add an example.
|
|
214
|
+
"""
|
|
215
|
+
return x + y
|
|
216
|
+
|
|
217
|
+
summation_from_element_class_add = summation
|
|
218
|
+
|
|
219
|
+
def __init_extra__(self):
|
|
220
|
+
"""
|
|
221
|
+
TESTS::
|
|
222
|
+
|
|
223
|
+
sage: S = CommutativeAdditiveSemigroups().example()
|
|
224
|
+
sage: (a,b,c,d) = S.additive_semigroup_generators()
|
|
225
|
+
sage: a + b # indirect doctest
|
|
226
|
+
a + b
|
|
227
|
+
sage: a.__class__._add_ == a.__class__._add_parent
|
|
228
|
+
True
|
|
229
|
+
"""
|
|
230
|
+
# This should instead register the summation to the coercion model
|
|
231
|
+
# But this is not yet implemented in the coercion model
|
|
232
|
+
if (self.summation != self.summation_from_element_class_add) and hasattr(self, "element_class") and hasattr(self.element_class, "_add_parent"):
|
|
233
|
+
self.element_class._add_ = self.element_class._add_parent
|
|
234
|
+
|
|
235
|
+
def addition_table(self, names='letters', elements=None):
|
|
236
|
+
r"""
|
|
237
|
+
Return a table describing the addition operation.
|
|
238
|
+
|
|
239
|
+
.. NOTE::
|
|
240
|
+
|
|
241
|
+
The order of the elements in the row and column
|
|
242
|
+
headings is equal to the order given by the table's
|
|
243
|
+
:meth:`~sage.matrix.operation_table.OperationTable.column_keys`
|
|
244
|
+
method. The association can also be retrieved with the
|
|
245
|
+
:meth:`~sage.matrix.operation_table.OperationTable.translation`
|
|
246
|
+
method.
|
|
247
|
+
|
|
248
|
+
INPUT:
|
|
249
|
+
|
|
250
|
+
- ``names`` -- the type of names used:
|
|
251
|
+
|
|
252
|
+
* ``'letters'`` -- lowercase ASCII letters are used
|
|
253
|
+
for a base 26 representation of the elements'
|
|
254
|
+
positions in the list given by
|
|
255
|
+
:meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
|
|
256
|
+
padded to a common width with leading 'a's.
|
|
257
|
+
* ``'digits'`` -- base 10 representation of the
|
|
258
|
+
elements' positions in the list given by
|
|
259
|
+
:meth:`~sage.matrix.operation_table.OperationTable.column_keys`,
|
|
260
|
+
padded to a common width with leading zeros.
|
|
261
|
+
* ``'elements'`` -- the string representations
|
|
262
|
+
of the elements themselves.
|
|
263
|
+
* a list - a list of strings, where the length
|
|
264
|
+
of the list equals the number of elements.
|
|
265
|
+
|
|
266
|
+
- ``elements`` -- (default: ``None``) A list of
|
|
267
|
+
elements of the additive magma, in forms that
|
|
268
|
+
can be coerced into the structure, eg. their
|
|
269
|
+
string representations. This may be used to
|
|
270
|
+
impose an alternate ordering on the elements,
|
|
271
|
+
perhaps when this is used in the context of a
|
|
272
|
+
particular structure. The default is to use
|
|
273
|
+
whatever ordering the ``S.list`` method returns.
|
|
274
|
+
Or the ``elements`` can be a subset which is
|
|
275
|
+
closed under the operation. In particular,
|
|
276
|
+
this can be used when the base set is infinite.
|
|
277
|
+
|
|
278
|
+
OUTPUT:
|
|
279
|
+
|
|
280
|
+
The addition table as an object of the class
|
|
281
|
+
:class:`~sage.matrix.operation_table.OperationTable`
|
|
282
|
+
which defines several methods for manipulating and
|
|
283
|
+
displaying the table. See the documentation there
|
|
284
|
+
for full details to supplement the documentation
|
|
285
|
+
here.
|
|
286
|
+
|
|
287
|
+
EXAMPLES:
|
|
288
|
+
|
|
289
|
+
All that is required is that an algebraic structure
|
|
290
|
+
has an addition defined.The default is to represent
|
|
291
|
+
elements as lowercase ASCII letters. ::
|
|
292
|
+
|
|
293
|
+
sage: R = IntegerModRing(5)
|
|
294
|
+
sage: R.addition_table() # needs sage.modules
|
|
295
|
+
+ a b c d e
|
|
296
|
+
+----------
|
|
297
|
+
a| a b c d e
|
|
298
|
+
b| b c d e a
|
|
299
|
+
c| c d e a b
|
|
300
|
+
d| d e a b c
|
|
301
|
+
e| e a b c d
|
|
302
|
+
|
|
303
|
+
The ``names`` argument allows displaying the elements in
|
|
304
|
+
different ways. Requesting ``elements`` will use the
|
|
305
|
+
representation of the elements of the set. Requesting
|
|
306
|
+
``digits`` will include leading zeros as padding. ::
|
|
307
|
+
|
|
308
|
+
sage: R = IntegerModRing(11)
|
|
309
|
+
sage: P = R.addition_table(names='elements'); P # needs sage.modules
|
|
310
|
+
+ 0 1 2 3 4 5 6 7 8 9 10
|
|
311
|
+
+---------------------------------
|
|
312
|
+
0| 0 1 2 3 4 5 6 7 8 9 10
|
|
313
|
+
1| 1 2 3 4 5 6 7 8 9 10 0
|
|
314
|
+
2| 2 3 4 5 6 7 8 9 10 0 1
|
|
315
|
+
3| 3 4 5 6 7 8 9 10 0 1 2
|
|
316
|
+
4| 4 5 6 7 8 9 10 0 1 2 3
|
|
317
|
+
5| 5 6 7 8 9 10 0 1 2 3 4
|
|
318
|
+
6| 6 7 8 9 10 0 1 2 3 4 5
|
|
319
|
+
7| 7 8 9 10 0 1 2 3 4 5 6
|
|
320
|
+
8| 8 9 10 0 1 2 3 4 5 6 7
|
|
321
|
+
9| 9 10 0 1 2 3 4 5 6 7 8
|
|
322
|
+
10| 10 0 1 2 3 4 5 6 7 8 9
|
|
323
|
+
|
|
324
|
+
sage: T = R.addition_table(names='digits'); T # needs sage.modules
|
|
325
|
+
+ 00 01 02 03 04 05 06 07 08 09 10
|
|
326
|
+
+---------------------------------
|
|
327
|
+
00| 00 01 02 03 04 05 06 07 08 09 10
|
|
328
|
+
01| 01 02 03 04 05 06 07 08 09 10 00
|
|
329
|
+
02| 02 03 04 05 06 07 08 09 10 00 01
|
|
330
|
+
03| 03 04 05 06 07 08 09 10 00 01 02
|
|
331
|
+
04| 04 05 06 07 08 09 10 00 01 02 03
|
|
332
|
+
05| 05 06 07 08 09 10 00 01 02 03 04
|
|
333
|
+
06| 06 07 08 09 10 00 01 02 03 04 05
|
|
334
|
+
07| 07 08 09 10 00 01 02 03 04 05 06
|
|
335
|
+
08| 08 09 10 00 01 02 03 04 05 06 07
|
|
336
|
+
09| 09 10 00 01 02 03 04 05 06 07 08
|
|
337
|
+
10| 10 00 01 02 03 04 05 06 07 08 09
|
|
338
|
+
|
|
339
|
+
Specifying the elements in an alternative order can provide
|
|
340
|
+
more insight into how the operation behaves. ::
|
|
341
|
+
|
|
342
|
+
sage: S = IntegerModRing(7)
|
|
343
|
+
sage: elts = [0, 3, 6, 2, 5, 1, 4]
|
|
344
|
+
sage: S.addition_table(elements=elts) # needs sage.modules
|
|
345
|
+
+ a b c d e f g
|
|
346
|
+
+--------------
|
|
347
|
+
a| a b c d e f g
|
|
348
|
+
b| b c d e f g a
|
|
349
|
+
c| c d e f g a b
|
|
350
|
+
d| d e f g a b c
|
|
351
|
+
e| e f g a b c d
|
|
352
|
+
f| f g a b c d e
|
|
353
|
+
g| g a b c d e f
|
|
354
|
+
|
|
355
|
+
The ``elements`` argument can be used to provide
|
|
356
|
+
a subset of the elements of the structure. The subset
|
|
357
|
+
must be closed under the operation. Elements need only
|
|
358
|
+
be in a form that can be coerced into the set. The
|
|
359
|
+
``names`` argument can also be used to request that
|
|
360
|
+
the elements be represented with their usual string
|
|
361
|
+
representation. ::
|
|
362
|
+
|
|
363
|
+
sage: T = IntegerModRing(12)
|
|
364
|
+
sage: elts = [0, 3, 6, 9]
|
|
365
|
+
sage: T.addition_table(names='elements', elements=elts) # needs sage.modules
|
|
366
|
+
+ 0 3 6 9
|
|
367
|
+
+--------
|
|
368
|
+
0| 0 3 6 9
|
|
369
|
+
3| 3 6 9 0
|
|
370
|
+
6| 6 9 0 3
|
|
371
|
+
9| 9 0 3 6
|
|
372
|
+
|
|
373
|
+
The table returned can be manipulated in various ways. See
|
|
374
|
+
the documentation for
|
|
375
|
+
:class:`~sage.matrix.operation_table.OperationTable` for more
|
|
376
|
+
comprehensive documentation. ::
|
|
377
|
+
|
|
378
|
+
sage: # needs sage.modules
|
|
379
|
+
sage: R = IntegerModRing(3)
|
|
380
|
+
sage: T = R.addition_table()
|
|
381
|
+
sage: T.column_keys()
|
|
382
|
+
(0, 1, 2)
|
|
383
|
+
sage: sorted(T.translation().items())
|
|
384
|
+
[('a', 0), ('b', 1), ('c', 2)]
|
|
385
|
+
sage: T.change_names(['x', 'y', 'z'])
|
|
386
|
+
sage: sorted(T.translation().items())
|
|
387
|
+
[('x', 0), ('y', 1), ('z', 2)]
|
|
388
|
+
sage: T
|
|
389
|
+
+ x y z
|
|
390
|
+
+------
|
|
391
|
+
x| x y z
|
|
392
|
+
y| y z x
|
|
393
|
+
z| z x y
|
|
394
|
+
"""
|
|
395
|
+
import operator
|
|
396
|
+
|
|
397
|
+
from sage.matrix.operation_table import OperationTable
|
|
398
|
+
return OperationTable(self, operation=operator.add,
|
|
399
|
+
names=names, elements=elements)
|
|
400
|
+
|
|
401
|
+
class ElementMethods:
|
|
402
|
+
|
|
403
|
+
@abstract_method(optional=True)
|
|
404
|
+
def _add_(self, right):
|
|
405
|
+
"""
|
|
406
|
+
Return the sum of ``self`` and ``right``.
|
|
407
|
+
|
|
408
|
+
INPUT:
|
|
409
|
+
|
|
410
|
+
- ``self``, ``right`` -- two elements with the same parent
|
|
411
|
+
|
|
412
|
+
OUTPUT: an element of the same parent
|
|
413
|
+
|
|
414
|
+
EXAMPLES::
|
|
415
|
+
|
|
416
|
+
sage: F = CommutativeAdditiveSemigroups().example()
|
|
417
|
+
sage: (a,b,c,d) = F.additive_semigroup_generators()
|
|
418
|
+
sage: a._add_(b)
|
|
419
|
+
a + b
|
|
420
|
+
"""
|
|
421
|
+
|
|
422
|
+
def _add_parent(self, other):
|
|
423
|
+
r"""
|
|
424
|
+
Return the sum of the two elements, calculated using
|
|
425
|
+
the ``summation`` method of the parent.
|
|
426
|
+
|
|
427
|
+
This is the default implementation of _add_ if
|
|
428
|
+
``summation`` is implemented in the parent.
|
|
429
|
+
|
|
430
|
+
INPUT:
|
|
431
|
+
|
|
432
|
+
- ``other`` -- an element of the parent of ``self``
|
|
433
|
+
|
|
434
|
+
OUTPUT: an element of the parent of ``self``
|
|
435
|
+
|
|
436
|
+
EXAMPLES::
|
|
437
|
+
|
|
438
|
+
sage: S = CommutativeAdditiveSemigroups().example()
|
|
439
|
+
sage: (a,b,c,d) = S.additive_semigroup_generators()
|
|
440
|
+
sage: a._add_parent(b)
|
|
441
|
+
a + b
|
|
442
|
+
"""
|
|
443
|
+
return self.parent().summation(self, other)
|
|
444
|
+
|
|
445
|
+
class Homsets(HomsetsCategory):
|
|
446
|
+
def extra_super_categories(self):
|
|
447
|
+
"""
|
|
448
|
+
Implement the fact that a homset between two magmas is a magma.
|
|
449
|
+
|
|
450
|
+
EXAMPLES::
|
|
451
|
+
|
|
452
|
+
sage: AdditiveMagmas().Homsets().extra_super_categories()
|
|
453
|
+
[Category of additive magmas]
|
|
454
|
+
sage: AdditiveMagmas().Homsets().super_categories()
|
|
455
|
+
[Category of additive magmas, Category of homsets]
|
|
456
|
+
"""
|
|
457
|
+
return [AdditiveMagmas()]
|
|
458
|
+
|
|
459
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
460
|
+
def extra_super_categories(self):
|
|
461
|
+
"""
|
|
462
|
+
Implement the fact that a Cartesian product of additive magmas is
|
|
463
|
+
an additive magma.
|
|
464
|
+
|
|
465
|
+
EXAMPLES::
|
|
466
|
+
|
|
467
|
+
sage: C = AdditiveMagmas().CartesianProducts()
|
|
468
|
+
sage: C.extra_super_categories()
|
|
469
|
+
[Category of additive magmas]
|
|
470
|
+
sage: C.super_categories()
|
|
471
|
+
[Category of additive magmas, Category of Cartesian products of sets]
|
|
472
|
+
sage: C.axioms()
|
|
473
|
+
frozenset()
|
|
474
|
+
"""
|
|
475
|
+
return [AdditiveMagmas()]
|
|
476
|
+
|
|
477
|
+
class ElementMethods:
|
|
478
|
+
def _add_(self, right):
|
|
479
|
+
r"""
|
|
480
|
+
EXAMPLES::
|
|
481
|
+
|
|
482
|
+
sage: # needs sage.rings.finite_rings
|
|
483
|
+
sage: G5 = GF(5); G8 = GF(4, 'x'); GG = G5.cartesian_product(G8)
|
|
484
|
+
sage: e = GG((G5(1), G8.primitive_element())); e
|
|
485
|
+
(1, x)
|
|
486
|
+
sage: e + e
|
|
487
|
+
(2, 0)
|
|
488
|
+
|
|
489
|
+
sage: # needs sage.groups sage.modules
|
|
490
|
+
sage: e = groups.misc.AdditiveCyclic(8)
|
|
491
|
+
sage: x = e.cartesian_product(e)((e(1), e(2)))
|
|
492
|
+
sage: x
|
|
493
|
+
(1, 2)
|
|
494
|
+
sage: 4 * x
|
|
495
|
+
(4, 0)
|
|
496
|
+
"""
|
|
497
|
+
return self.parent()._cartesian_product_of_elements(
|
|
498
|
+
x + y for x, y in zip(self.cartesian_factors(),
|
|
499
|
+
right.cartesian_factors()))
|
|
500
|
+
|
|
501
|
+
class Algebras(AlgebrasCategory):
|
|
502
|
+
|
|
503
|
+
def extra_super_categories(self):
|
|
504
|
+
"""
|
|
505
|
+
EXAMPLES::
|
|
506
|
+
|
|
507
|
+
sage: AdditiveMagmas().Algebras(QQ).extra_super_categories()
|
|
508
|
+
[Category of magmatic algebras with basis over Rational Field]
|
|
509
|
+
|
|
510
|
+
sage: AdditiveMagmas().Algebras(QQ).super_categories()
|
|
511
|
+
[Category of magmatic algebras with basis over Rational Field,
|
|
512
|
+
Category of set algebras over Rational Field]
|
|
513
|
+
"""
|
|
514
|
+
from sage.categories.magmatic_algebras import MagmaticAlgebras
|
|
515
|
+
return [MagmaticAlgebras(self.base_ring()).WithBasis()]
|
|
516
|
+
|
|
517
|
+
class ParentMethods:
|
|
518
|
+
|
|
519
|
+
@cached_method
|
|
520
|
+
def algebra_generators(self):
|
|
521
|
+
r"""
|
|
522
|
+
The generators of this algebra, as per
|
|
523
|
+
:meth:`MagmaticAlgebras.ParentMethods.algebra_generators()
|
|
524
|
+
<.magmatic_algebras.MagmaticAlgebras.ParentMethods.algebra_generators>`.
|
|
525
|
+
|
|
526
|
+
They correspond to the generators of the additive semigroup.
|
|
527
|
+
|
|
528
|
+
EXAMPLES::
|
|
529
|
+
|
|
530
|
+
sage: S = CommutativeAdditiveSemigroups().example(); S
|
|
531
|
+
An example of a commutative semigroup:
|
|
532
|
+
the free commutative semigroup generated by ('a', 'b', 'c', 'd')
|
|
533
|
+
sage: A = S.algebra(QQ) # needs sage.modules
|
|
534
|
+
sage: A.algebra_generators() # needs sage.modules
|
|
535
|
+
Family (B[a], B[b], B[c], B[d])
|
|
536
|
+
|
|
537
|
+
.. TODO::
|
|
538
|
+
|
|
539
|
+
This doctest does not actually test this method,
|
|
540
|
+
but rather the method of the same name for
|
|
541
|
+
``AdditiveSemigroups``. Find a better doctest!
|
|
542
|
+
"""
|
|
543
|
+
return self.basis().keys().additive_semigroup_generators().map(self.monomial)
|
|
544
|
+
|
|
545
|
+
def product_on_basis(self, g1, g2):
|
|
546
|
+
r"""
|
|
547
|
+
Product, on basis elements, as per
|
|
548
|
+
:meth:`MagmaticAlgebras.WithBasis.ParentMethods.product_on_basis()
|
|
549
|
+
<.magmatic_algebras.MagmaticAlgebras.WithBasis.ParentMethods.product_on_basis>`.
|
|
550
|
+
|
|
551
|
+
The product of two basis elements is induced by the
|
|
552
|
+
addition of the corresponding elements of the group.
|
|
553
|
+
|
|
554
|
+
EXAMPLES::
|
|
555
|
+
|
|
556
|
+
sage: S = CommutativeAdditiveSemigroups().example(); S
|
|
557
|
+
An example of a commutative semigroup:
|
|
558
|
+
the free commutative semigroup generated by ('a', 'b', 'c', 'd')
|
|
559
|
+
sage: A = S.algebra(QQ) # needs sage.modules
|
|
560
|
+
sage: a, b, c, d = A.algebra_generators() # needs sage.modules
|
|
561
|
+
sage: a * d * b # needs sage.modules
|
|
562
|
+
B[a + b + d]
|
|
563
|
+
|
|
564
|
+
.. TODO::
|
|
565
|
+
|
|
566
|
+
This doctest does not actually test this method,
|
|
567
|
+
but rather the method of the same name for
|
|
568
|
+
``AdditiveSemigroups``. Find a better doctest!
|
|
569
|
+
"""
|
|
570
|
+
return self.monomial(g1 + g2)
|
|
571
|
+
|
|
572
|
+
class AdditiveCommutative(CategoryWithAxiom):
|
|
573
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
574
|
+
def extra_super_categories(self):
|
|
575
|
+
"""
|
|
576
|
+
Implement the fact that a Cartesian product of commutative
|
|
577
|
+
additive magmas is a commutative additive magma.
|
|
578
|
+
|
|
579
|
+
EXAMPLES::
|
|
580
|
+
|
|
581
|
+
sage: C = AdditiveMagmas().AdditiveCommutative().CartesianProducts()
|
|
582
|
+
sage: C.extra_super_categories()
|
|
583
|
+
[Category of additive commutative additive magmas]
|
|
584
|
+
sage: C.axioms()
|
|
585
|
+
frozenset({'AdditiveCommutative'})
|
|
586
|
+
"""
|
|
587
|
+
return [AdditiveMagmas().AdditiveCommutative()]
|
|
588
|
+
|
|
589
|
+
class Algebras(AlgebrasCategory):
|
|
590
|
+
def extra_super_categories(self):
|
|
591
|
+
"""
|
|
592
|
+
Implement the fact that the algebra of a commutative additive
|
|
593
|
+
magmas is commutative.
|
|
594
|
+
|
|
595
|
+
EXAMPLES::
|
|
596
|
+
|
|
597
|
+
sage: C = AdditiveMagmas().AdditiveCommutative().Algebras(QQ)
|
|
598
|
+
sage: C.extra_super_categories()
|
|
599
|
+
[Category of commutative magmas]
|
|
600
|
+
|
|
601
|
+
sage: C.super_categories()
|
|
602
|
+
[Category of additive magma algebras over Rational Field,
|
|
603
|
+
Category of commutative magmas]
|
|
604
|
+
"""
|
|
605
|
+
from sage.categories.magmas import Magmas
|
|
606
|
+
return [Magmas().Commutative()]
|
|
607
|
+
|
|
608
|
+
class AdditiveUnital(CategoryWithAxiom):
|
|
609
|
+
|
|
610
|
+
def additional_structure(self) -> Self:
|
|
611
|
+
r"""
|
|
612
|
+
Return whether ``self`` is a structure category.
|
|
613
|
+
|
|
614
|
+
.. SEEALSO:: :meth:`Category.additional_structure`
|
|
615
|
+
|
|
616
|
+
The category of unital additive magmas defines the zero as
|
|
617
|
+
additional structure, and this zero shall be preserved by
|
|
618
|
+
morphisms.
|
|
619
|
+
|
|
620
|
+
EXAMPLES::
|
|
621
|
+
|
|
622
|
+
sage: AdditiveMagmas().AdditiveUnital().additional_structure()
|
|
623
|
+
Category of additive unital additive magmas
|
|
624
|
+
"""
|
|
625
|
+
return self
|
|
626
|
+
|
|
627
|
+
class SubcategoryMethods:
|
|
628
|
+
|
|
629
|
+
@cached_method
|
|
630
|
+
def AdditiveInverse(self):
|
|
631
|
+
r"""
|
|
632
|
+
Return the full subcategory of the additive inverse objects
|
|
633
|
+
of ``self``.
|
|
634
|
+
|
|
635
|
+
An inverse :class:`additive magma <AdditiveMagmas>` is
|
|
636
|
+
a :class:`unital additive magma <AdditiveMagmas.Unital>`
|
|
637
|
+
such that every element admits both an additive
|
|
638
|
+
inverse on the left and on the right. Such an additive
|
|
639
|
+
magma is also called an *additive loop*.
|
|
640
|
+
|
|
641
|
+
.. SEEALSO::
|
|
642
|
+
|
|
643
|
+
:wikipedia:`Inverse_element`, :wikipedia:`Quasigroup`
|
|
644
|
+
|
|
645
|
+
EXAMPLES::
|
|
646
|
+
|
|
647
|
+
sage: AdditiveMagmas().AdditiveUnital().AdditiveInverse()
|
|
648
|
+
Category of additive inverse additive unital additive magmas
|
|
649
|
+
sage: from sage.categories.additive_monoids import AdditiveMonoids
|
|
650
|
+
sage: AdditiveMonoids().AdditiveInverse()
|
|
651
|
+
Category of additive groups
|
|
652
|
+
|
|
653
|
+
TESTS::
|
|
654
|
+
|
|
655
|
+
sage: TestSuite(AdditiveMagmas().AdditiveUnital().AdditiveInverse()).run()
|
|
656
|
+
sage: CommutativeAdditiveMonoids().AdditiveInverse.__module__
|
|
657
|
+
'sage.categories.additive_magmas'
|
|
658
|
+
"""
|
|
659
|
+
return self._with_axiom("AdditiveInverse")
|
|
660
|
+
|
|
661
|
+
class ParentMethods:
|
|
662
|
+
|
|
663
|
+
def _test_zero(self, **options):
|
|
664
|
+
r"""
|
|
665
|
+
Test that ``self.zero()`` is an element of ``self`` and
|
|
666
|
+
is neutral for the addition.
|
|
667
|
+
|
|
668
|
+
INPUT:
|
|
669
|
+
|
|
670
|
+
- ``options`` -- any keyword arguments accepted
|
|
671
|
+
by :meth:`_tester`
|
|
672
|
+
|
|
673
|
+
EXAMPLES:
|
|
674
|
+
|
|
675
|
+
By default, this method tests only the elements returned by
|
|
676
|
+
``self.some_elements()``::
|
|
677
|
+
|
|
678
|
+
sage: S = CommutativeAdditiveMonoids().example()
|
|
679
|
+
sage: S._test_zero()
|
|
680
|
+
|
|
681
|
+
However, the elements tested can be customized with the
|
|
682
|
+
``elements`` keyword argument::
|
|
683
|
+
|
|
684
|
+
sage: (a,b,c,d) = S.additive_semigroup_generators()
|
|
685
|
+
sage: S._test_zero(elements = (a, a+c))
|
|
686
|
+
|
|
687
|
+
See the documentation for :class:`TestSuite` for
|
|
688
|
+
more information.
|
|
689
|
+
"""
|
|
690
|
+
tester = self._tester(**options)
|
|
691
|
+
zero = self.zero()
|
|
692
|
+
# TODO: also call is_zero once it will work
|
|
693
|
+
tester.assertTrue(self.is_parent_of(zero))
|
|
694
|
+
for x in tester.some_elements():
|
|
695
|
+
tester.assertEqual(x + zero, x)
|
|
696
|
+
# Check that zero is immutable if it looks like we can:
|
|
697
|
+
if hasattr(zero, "is_immutable"):
|
|
698
|
+
tester.assertEqual(zero.is_immutable(), True)
|
|
699
|
+
if hasattr(zero, "is_mutable"):
|
|
700
|
+
tester.assertEqual(zero.is_mutable(), False)
|
|
701
|
+
# Check that bool behave consistently on zero
|
|
702
|
+
tester.assertFalse(bool(self.zero()))
|
|
703
|
+
|
|
704
|
+
@cached_method
|
|
705
|
+
def zero(self):
|
|
706
|
+
"""
|
|
707
|
+
Return the zero of this additive magma, that is the unique
|
|
708
|
+
neutral element for `+`.
|
|
709
|
+
|
|
710
|
+
The default implementation is to coerce ``0`` into ``self``.
|
|
711
|
+
|
|
712
|
+
It is recommended to override this method because the
|
|
713
|
+
coercion from the integers:
|
|
714
|
+
|
|
715
|
+
- is not always meaningful (except for `0`), and
|
|
716
|
+
- often uses ``self.zero()`` otherwise.
|
|
717
|
+
|
|
718
|
+
EXAMPLES::
|
|
719
|
+
|
|
720
|
+
sage: S = CommutativeAdditiveMonoids().example()
|
|
721
|
+
sage: S.zero()
|
|
722
|
+
0
|
|
723
|
+
"""
|
|
724
|
+
# TODO: add a test that actually exercise this default implementation
|
|
725
|
+
return self(0)
|
|
726
|
+
|
|
727
|
+
def is_empty(self):
|
|
728
|
+
r"""
|
|
729
|
+
Return whether this set is empty.
|
|
730
|
+
|
|
731
|
+
Since this set is an additive magma it has a zero element and
|
|
732
|
+
hence is not empty. This method thus always returns ``False``.
|
|
733
|
+
|
|
734
|
+
EXAMPLES::
|
|
735
|
+
|
|
736
|
+
sage: # needs sage.modules
|
|
737
|
+
sage: A = AdditiveAbelianGroup([3, 3])
|
|
738
|
+
sage: A in AdditiveMagmas()
|
|
739
|
+
True
|
|
740
|
+
sage: A.is_empty()
|
|
741
|
+
False
|
|
742
|
+
|
|
743
|
+
sage: B = CommutativeAdditiveMonoids().example()
|
|
744
|
+
sage: B.is_empty()
|
|
745
|
+
False
|
|
746
|
+
|
|
747
|
+
TESTS:
|
|
748
|
+
|
|
749
|
+
We check that the method ``is_empty`` is inherited from this
|
|
750
|
+
category in both examples above::
|
|
751
|
+
|
|
752
|
+
sage: A.is_empty.__module__ # needs sage.modules
|
|
753
|
+
'sage.categories.additive_magmas'
|
|
754
|
+
sage: B.is_empty.__module__
|
|
755
|
+
'sage.categories.additive_magmas'
|
|
756
|
+
"""
|
|
757
|
+
return False
|
|
758
|
+
|
|
759
|
+
class ElementMethods:
|
|
760
|
+
# TODO: merge with the implementation in Element which currently
|
|
761
|
+
# overrides this one, and further requires self.parent()(0) to work.
|
|
762
|
+
#
|
|
763
|
+
# def is_zero(self):
|
|
764
|
+
# """
|
|
765
|
+
# Returns whether self is the zero of the magma
|
|
766
|
+
#
|
|
767
|
+
# The default implementation, is to compare with ``self.zero()``.
|
|
768
|
+
#
|
|
769
|
+
# TESTS::
|
|
770
|
+
#
|
|
771
|
+
# sage: S = CommutativeAdditiveMonoids().example()
|
|
772
|
+
# sage: S.zero().is_zero()
|
|
773
|
+
# True
|
|
774
|
+
# sage: S("aa").is_zero()
|
|
775
|
+
# False
|
|
776
|
+
# """
|
|
777
|
+
# return self == self.parent().zero()
|
|
778
|
+
|
|
779
|
+
@abstract_method
|
|
780
|
+
def __bool__(self):
|
|
781
|
+
"""
|
|
782
|
+
Return whether ``self`` is not zero.
|
|
783
|
+
|
|
784
|
+
All parents in the category ``CommutativeAdditiveMonoids()``
|
|
785
|
+
should implement this method.
|
|
786
|
+
|
|
787
|
+
.. NOTE:: This is currently not useful because this method is
|
|
788
|
+
overridden by ``Element``.
|
|
789
|
+
|
|
790
|
+
TESTS::
|
|
791
|
+
|
|
792
|
+
sage: S = CommutativeAdditiveMonoids().example()
|
|
793
|
+
sage: bool(S.zero())
|
|
794
|
+
False
|
|
795
|
+
sage: bool(S.an_element())
|
|
796
|
+
True
|
|
797
|
+
"""
|
|
798
|
+
|
|
799
|
+
def _test_nonzero_equal(self, **options):
|
|
800
|
+
r"""
|
|
801
|
+
Test that ``.__bool__()`` behave consistently
|
|
802
|
+
with `` == 0``.
|
|
803
|
+
|
|
804
|
+
TESTS::
|
|
805
|
+
|
|
806
|
+
sage: S = CommutativeAdditiveMonoids().example()
|
|
807
|
+
sage: S.zero()._test_nonzero_equal()
|
|
808
|
+
sage: S.an_element()._test_nonzero_equal()
|
|
809
|
+
"""
|
|
810
|
+
tester = self._tester(**options)
|
|
811
|
+
tester.assertEqual(bool(self), self != self.parent().zero())
|
|
812
|
+
tester.assertEqual(not self, self == self.parent().zero())
|
|
813
|
+
|
|
814
|
+
def _sub_(left, right):
|
|
815
|
+
r"""
|
|
816
|
+
Default implementation of difference.
|
|
817
|
+
|
|
818
|
+
EXAMPLES::
|
|
819
|
+
|
|
820
|
+
sage: F = CombinatorialFreeModule(QQ, ['a', 'b']) # needs sage.modules
|
|
821
|
+
sage: a, b = F.basis() # needs sage.modules
|
|
822
|
+
sage: a - b # needs sage.modules
|
|
823
|
+
B['a'] - B['b']
|
|
824
|
+
|
|
825
|
+
TESTS:
|
|
826
|
+
|
|
827
|
+
Check that :issue:`18275` is fixed::
|
|
828
|
+
|
|
829
|
+
sage: C = GF(5).cartesian_product(GF(5))
|
|
830
|
+
sage: C.one() - C.one()
|
|
831
|
+
(0, 0)
|
|
832
|
+
"""
|
|
833
|
+
return left + (-right)
|
|
834
|
+
|
|
835
|
+
def __neg__(self):
|
|
836
|
+
"""
|
|
837
|
+
Return the negation of ``self``, if it exists.
|
|
838
|
+
|
|
839
|
+
This top-level implementation delegates the job to
|
|
840
|
+
``_neg_``, for those additive unital magmas which may
|
|
841
|
+
choose to implement it instead of ``__neg__`` for
|
|
842
|
+
consistency.
|
|
843
|
+
|
|
844
|
+
EXAMPLES::
|
|
845
|
+
|
|
846
|
+
sage: F = CombinatorialFreeModule(QQ, ['a', 'b']) # needs sage.modules
|
|
847
|
+
sage: a, b = F.basis() # needs sage.modules
|
|
848
|
+
sage: -b # needs sage.modules
|
|
849
|
+
-B['b']
|
|
850
|
+
|
|
851
|
+
TESTS::
|
|
852
|
+
|
|
853
|
+
sage: # needs sage.modules
|
|
854
|
+
sage: F = CombinatorialFreeModule(ZZ, ['a', 'b'])
|
|
855
|
+
sage: a, b = F.gens()
|
|
856
|
+
sage: FF = cartesian_product((F, F))
|
|
857
|
+
sage: x = cartesian_product([a, 2*a-3*b]); x
|
|
858
|
+
B[(0, 'a')] + 2*B[(1, 'a')] - 3*B[(1, 'b')]
|
|
859
|
+
sage: x.parent() is FF
|
|
860
|
+
True
|
|
861
|
+
sage: -x
|
|
862
|
+
-B[(0, 'a')] - 2*B[(1, 'a')] + 3*B[(1, 'b')]
|
|
863
|
+
"""
|
|
864
|
+
return self._neg_()
|
|
865
|
+
|
|
866
|
+
class Homsets(HomsetsCategory):
|
|
867
|
+
def extra_super_categories(self):
|
|
868
|
+
"""
|
|
869
|
+
Implement the fact that a homset between two unital additive
|
|
870
|
+
magmas is a unital additive magma.
|
|
871
|
+
|
|
872
|
+
EXAMPLES::
|
|
873
|
+
|
|
874
|
+
sage: AdditiveMagmas().AdditiveUnital().Homsets().extra_super_categories()
|
|
875
|
+
[Category of additive unital additive magmas]
|
|
876
|
+
sage: AdditiveMagmas().AdditiveUnital().Homsets().super_categories()
|
|
877
|
+
[Category of additive unital additive magmas, Category of homsets]
|
|
878
|
+
"""
|
|
879
|
+
return [AdditiveMagmas().AdditiveUnital()]
|
|
880
|
+
|
|
881
|
+
class ParentMethods:
|
|
882
|
+
|
|
883
|
+
@cached_method
|
|
884
|
+
def zero(self):
|
|
885
|
+
"""
|
|
886
|
+
EXAMPLES::
|
|
887
|
+
|
|
888
|
+
sage: R = QQ['x']
|
|
889
|
+
sage: H = Hom(ZZ, R, AdditiveMagmas().AdditiveUnital())
|
|
890
|
+
sage: f = H.zero()
|
|
891
|
+
sage: f
|
|
892
|
+
Generic morphism:
|
|
893
|
+
From: Integer Ring
|
|
894
|
+
To: Univariate Polynomial Ring in x over Rational Field
|
|
895
|
+
sage: f(3)
|
|
896
|
+
0
|
|
897
|
+
sage: f(3) is R.zero()
|
|
898
|
+
True
|
|
899
|
+
|
|
900
|
+
TESTS:
|
|
901
|
+
|
|
902
|
+
sage: TestSuite(f).run()
|
|
903
|
+
"""
|
|
904
|
+
from sage.misc.constant_function import ConstantFunction
|
|
905
|
+
return self(ConstantFunction(self.codomain().zero()))
|
|
906
|
+
|
|
907
|
+
class AdditiveInverse(CategoryWithAxiom):
|
|
908
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
909
|
+
def extra_super_categories(self):
|
|
910
|
+
"""
|
|
911
|
+
Implement the fact that a Cartesian product of additive magmas
|
|
912
|
+
with inverses is an additive magma with inverse.
|
|
913
|
+
|
|
914
|
+
EXAMPLES::
|
|
915
|
+
|
|
916
|
+
sage: C = AdditiveMagmas().AdditiveUnital().AdditiveInverse().CartesianProducts()
|
|
917
|
+
sage: C.extra_super_categories()
|
|
918
|
+
[Category of additive inverse additive unital additive magmas]
|
|
919
|
+
sage: sorted(C.axioms())
|
|
920
|
+
['AdditiveInverse', 'AdditiveUnital']
|
|
921
|
+
"""
|
|
922
|
+
return [AdditiveMagmas().AdditiveUnital().AdditiveInverse()]
|
|
923
|
+
|
|
924
|
+
class ElementMethods:
|
|
925
|
+
def _neg_(self):
|
|
926
|
+
"""
|
|
927
|
+
Return the negation of ``self``.
|
|
928
|
+
|
|
929
|
+
EXAMPLES::
|
|
930
|
+
|
|
931
|
+
sage: x = cartesian_product((GF(7)(2), 17)); x
|
|
932
|
+
(2, 17)
|
|
933
|
+
sage: -x
|
|
934
|
+
(5, -17)
|
|
935
|
+
|
|
936
|
+
TESTS::
|
|
937
|
+
|
|
938
|
+
sage: C = AdditiveMagmas().AdditiveUnital().AdditiveInverse().CartesianProducts()
|
|
939
|
+
sage: x.parent() in C
|
|
940
|
+
True
|
|
941
|
+
"""
|
|
942
|
+
return self.parent()._cartesian_product_of_elements(
|
|
943
|
+
[-x for x in self.cartesian_factors()])
|
|
944
|
+
|
|
945
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
946
|
+
def extra_super_categories(self):
|
|
947
|
+
"""
|
|
948
|
+
Implement the fact that a Cartesian product of unital additive
|
|
949
|
+
magmas is a unital additive magma.
|
|
950
|
+
|
|
951
|
+
EXAMPLES::
|
|
952
|
+
|
|
953
|
+
sage: C = AdditiveMagmas().AdditiveUnital().CartesianProducts()
|
|
954
|
+
sage: C.extra_super_categories()
|
|
955
|
+
[Category of additive unital additive magmas]
|
|
956
|
+
sage: C.axioms()
|
|
957
|
+
frozenset({'AdditiveUnital'})
|
|
958
|
+
"""
|
|
959
|
+
return [AdditiveMagmas().AdditiveUnital()]
|
|
960
|
+
|
|
961
|
+
class ParentMethods:
|
|
962
|
+
def zero(self):
|
|
963
|
+
r"""
|
|
964
|
+
Return the zero of this group.
|
|
965
|
+
|
|
966
|
+
EXAMPLES::
|
|
967
|
+
|
|
968
|
+
sage: GF(8, 'x').cartesian_product(GF(5)).zero() # needs sage.rings.finite_rings
|
|
969
|
+
(0, 0)
|
|
970
|
+
"""
|
|
971
|
+
return self._cartesian_product_of_elements(
|
|
972
|
+
_.zero() for _ in self.cartesian_factors())
|
|
973
|
+
|
|
974
|
+
class Algebras(AlgebrasCategory):
|
|
975
|
+
|
|
976
|
+
def extra_super_categories(self):
|
|
977
|
+
"""
|
|
978
|
+
EXAMPLES::
|
|
979
|
+
|
|
980
|
+
sage: C = AdditiveMagmas().AdditiveUnital().Algebras(QQ)
|
|
981
|
+
sage: C.extra_super_categories()
|
|
982
|
+
[Category of unital magmas]
|
|
983
|
+
|
|
984
|
+
sage: C.super_categories()
|
|
985
|
+
[Category of additive magma algebras over Rational Field,
|
|
986
|
+
Category of unital algebras with basis over Rational Field]
|
|
987
|
+
"""
|
|
988
|
+
from sage.categories.magmas import Magmas
|
|
989
|
+
return [Magmas().Unital()]
|
|
990
|
+
|
|
991
|
+
class ParentMethods:
|
|
992
|
+
|
|
993
|
+
@cached_method
|
|
994
|
+
def one_basis(self):
|
|
995
|
+
"""
|
|
996
|
+
Return the zero of this additive magma, which index the
|
|
997
|
+
one of this algebra, as per
|
|
998
|
+
:meth:`AlgebrasWithBasis.ParentMethods.one_basis()
|
|
999
|
+
<sage.categories.algebras_with_basis.AlgebrasWithBasis.ParentMethods.one_basis>`.
|
|
1000
|
+
|
|
1001
|
+
EXAMPLES::
|
|
1002
|
+
|
|
1003
|
+
sage: # needs sage.modules
|
|
1004
|
+
sage: S = CommutativeAdditiveMonoids().example(); S
|
|
1005
|
+
An example of a commutative monoid:
|
|
1006
|
+
the free commutative monoid generated by ('a', 'b', 'c', 'd')
|
|
1007
|
+
sage: A = S.algebra(ZZ)
|
|
1008
|
+
sage: A.one_basis()
|
|
1009
|
+
0
|
|
1010
|
+
sage: A.one()
|
|
1011
|
+
B[0]
|
|
1012
|
+
sage: A(3)
|
|
1013
|
+
3*B[0]
|
|
1014
|
+
"""
|
|
1015
|
+
return self.basis().keys().zero()
|
|
1016
|
+
|
|
1017
|
+
class WithRealizations(WithRealizationsCategory):
|
|
1018
|
+
|
|
1019
|
+
class ParentMethods:
|
|
1020
|
+
|
|
1021
|
+
def zero(self):
|
|
1022
|
+
r"""
|
|
1023
|
+
Return the zero of this unital additive magma.
|
|
1024
|
+
|
|
1025
|
+
This default implementation returns the zero of the
|
|
1026
|
+
realization of ``self`` given by
|
|
1027
|
+
:meth:`~Sets.WithRealizations.ParentMethods.a_realization`.
|
|
1028
|
+
|
|
1029
|
+
EXAMPLES::
|
|
1030
|
+
|
|
1031
|
+
sage: A = Sets().WithRealizations().example(); A # needs sage.modules
|
|
1032
|
+
The subset algebra of {1, 2, 3} over Rational Field
|
|
1033
|
+
sage: A.zero.__module__ # needs sage.modules
|
|
1034
|
+
'sage.categories.additive_magmas'
|
|
1035
|
+
sage: A.zero() # needs sage.modules
|
|
1036
|
+
0
|
|
1037
|
+
|
|
1038
|
+
TESTS::
|
|
1039
|
+
|
|
1040
|
+
sage: A.zero() is A.a_realization().zero() # needs sage.modules
|
|
1041
|
+
True
|
|
1042
|
+
sage: A._test_zero() # needs sage.modules
|
|
1043
|
+
"""
|
|
1044
|
+
return self.a_realization().zero()
|