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,149 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Magmas and Additive Magmas
|
|
4
|
+
"""
|
|
5
|
+
#*****************************************************************************
|
|
6
|
+
# Copyright (C) 2010 Nicolas Borie <nicolas.borie@math.u-psud.fr>
|
|
7
|
+
#
|
|
8
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
9
|
+
# http://www.gnu.org/licenses/
|
|
10
|
+
#******************************************************************************
|
|
11
|
+
|
|
12
|
+
from sage.misc.cachefunc import cached_method
|
|
13
|
+
from sage.misc.lazy_import import LazyImport
|
|
14
|
+
from sage.categories.category_singleton import Category_singleton
|
|
15
|
+
from sage.categories.cartesian_product import CartesianProductsCategory
|
|
16
|
+
from sage.categories.additive_magmas import AdditiveMagmas
|
|
17
|
+
from sage.categories.magmas import Magmas
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class MagmasAndAdditiveMagmas(Category_singleton):
|
|
21
|
+
"""
|
|
22
|
+
The category of sets `(S, +, *)` with an additive operation '+' and
|
|
23
|
+
a multiplicative operation `*`
|
|
24
|
+
|
|
25
|
+
EXAMPLES::
|
|
26
|
+
|
|
27
|
+
sage: from sage.categories.magmas_and_additive_magmas import MagmasAndAdditiveMagmas
|
|
28
|
+
sage: C = MagmasAndAdditiveMagmas(); C
|
|
29
|
+
Category of magmas and additive magmas
|
|
30
|
+
|
|
31
|
+
This is the base category for the categories of rings and their variants::
|
|
32
|
+
|
|
33
|
+
sage: C.Distributive()
|
|
34
|
+
Category of distributive magmas and additive magmas
|
|
35
|
+
sage: C.Distributive().Associative().AdditiveAssociative().AdditiveCommutative().AdditiveUnital().AdditiveInverse()
|
|
36
|
+
Category of rngs
|
|
37
|
+
sage: C.Distributive().Associative().AdditiveAssociative().AdditiveCommutative().AdditiveUnital().Unital()
|
|
38
|
+
Category of semirings
|
|
39
|
+
sage: C.Distributive().Associative().AdditiveAssociative().AdditiveCommutative().AdditiveUnital().AdditiveInverse().Unital()
|
|
40
|
+
Category of rings
|
|
41
|
+
|
|
42
|
+
This category is really meant to represent the intersection of the
|
|
43
|
+
categories of :class:`Magmas` and :class:`AdditiveMagmas`; however
|
|
44
|
+
Sage's infrastructure does not allow yet to model this::
|
|
45
|
+
|
|
46
|
+
sage: Magmas() & AdditiveMagmas()
|
|
47
|
+
Join of Category of magmas and Category of additive magmas
|
|
48
|
+
|
|
49
|
+
sage: Magmas() & AdditiveMagmas() # todo: not implemented
|
|
50
|
+
Category of magmas and additive magmas
|
|
51
|
+
|
|
52
|
+
TESTS::
|
|
53
|
+
|
|
54
|
+
sage: TestSuite(MagmasAndAdditiveMagmas()).run()
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
class SubcategoryMethods:
|
|
58
|
+
|
|
59
|
+
@cached_method
|
|
60
|
+
def Distributive(self):
|
|
61
|
+
r"""
|
|
62
|
+
Return the full subcategory of the objects of ``self``
|
|
63
|
+
where `*` is distributive on `+`.
|
|
64
|
+
|
|
65
|
+
A :class:`magma <Magmas>` and :class:`additive magma
|
|
66
|
+
<AdditiveMagmas>` `M` is *distributive* if, for all
|
|
67
|
+
`x,y,z \in M`,
|
|
68
|
+
|
|
69
|
+
.. MATH::
|
|
70
|
+
|
|
71
|
+
x * (y+z) = x*y + x*z \text{ and } (x+y) * z = x*z + y*z
|
|
72
|
+
|
|
73
|
+
EXAMPLES::
|
|
74
|
+
|
|
75
|
+
sage: from sage.categories.magmas_and_additive_magmas import MagmasAndAdditiveMagmas
|
|
76
|
+
sage: C = MagmasAndAdditiveMagmas().Distributive(); C
|
|
77
|
+
Category of distributive magmas and additive magmas
|
|
78
|
+
|
|
79
|
+
.. NOTE::
|
|
80
|
+
|
|
81
|
+
Given that Sage does not know that
|
|
82
|
+
:class:`MagmasAndAdditiveMagmas` is the intersection
|
|
83
|
+
of :class:`Magmas` and :class:`AdditiveMagmas`, this
|
|
84
|
+
method is not available for::
|
|
85
|
+
|
|
86
|
+
sage: Magmas() & AdditiveMagmas()
|
|
87
|
+
Join of Category of magmas and Category of additive magmas
|
|
88
|
+
|
|
89
|
+
Still, the natural syntax works::
|
|
90
|
+
|
|
91
|
+
sage: (Magmas() & AdditiveMagmas()).Distributive()
|
|
92
|
+
Category of distributive magmas and additive magmas
|
|
93
|
+
|
|
94
|
+
thanks to a workaround implemented in
|
|
95
|
+
:meth:`Magmas.SubcategoryMethods.Distributive`::
|
|
96
|
+
|
|
97
|
+
sage: (Magmas() & AdditiveMagmas()).Distributive.__module__
|
|
98
|
+
'sage.categories.magmas'
|
|
99
|
+
|
|
100
|
+
TESTS::
|
|
101
|
+
|
|
102
|
+
sage: TestSuite(C).run()
|
|
103
|
+
sage: Fields().Distributive.__module__
|
|
104
|
+
'sage.categories.magmas_and_additive_magmas'
|
|
105
|
+
"""
|
|
106
|
+
return self._with_axiom('Distributive')
|
|
107
|
+
|
|
108
|
+
def super_categories(self):
|
|
109
|
+
"""
|
|
110
|
+
EXAMPLES::
|
|
111
|
+
|
|
112
|
+
sage: from sage.categories.magmas_and_additive_magmas import MagmasAndAdditiveMagmas
|
|
113
|
+
sage: MagmasAndAdditiveMagmas().super_categories()
|
|
114
|
+
[Category of magmas, Category of additive magmas]
|
|
115
|
+
"""
|
|
116
|
+
return [Magmas(), AdditiveMagmas()]
|
|
117
|
+
|
|
118
|
+
def additional_structure(self):
|
|
119
|
+
r"""
|
|
120
|
+
Return ``None``.
|
|
121
|
+
|
|
122
|
+
Indeed, this category is meant to represent the join of
|
|
123
|
+
:class:`AdditiveMagmas` and :class:`Magmas`. As such, it
|
|
124
|
+
defines no additional structure.
|
|
125
|
+
|
|
126
|
+
.. SEEALSO:: :meth:`Category.additional_structure`
|
|
127
|
+
|
|
128
|
+
EXAMPLES::
|
|
129
|
+
|
|
130
|
+
sage: from sage.categories.magmas_and_additive_magmas import MagmasAndAdditiveMagmas
|
|
131
|
+
sage: MagmasAndAdditiveMagmas().additional_structure()
|
|
132
|
+
"""
|
|
133
|
+
return None
|
|
134
|
+
|
|
135
|
+
Distributive = LazyImport('sage.categories.distributive_magmas_and_additive_magmas', 'DistributiveMagmasAndAdditiveMagmas', at_startup=True)
|
|
136
|
+
|
|
137
|
+
class CartesianProducts(CartesianProductsCategory):
|
|
138
|
+
def extra_super_categories(self):
|
|
139
|
+
r"""
|
|
140
|
+
Implement the fact that this structure is stable under Cartesian
|
|
141
|
+
products.
|
|
142
|
+
|
|
143
|
+
TESTS::
|
|
144
|
+
|
|
145
|
+
sage: from sage.categories.magmas_and_additive_magmas import MagmasAndAdditiveMagmas
|
|
146
|
+
sage: MagmasAndAdditiveMagmas().CartesianProducts().extra_super_categories()
|
|
147
|
+
[Category of magmas and additive magmas]
|
|
148
|
+
"""
|
|
149
|
+
return [MagmasAndAdditiveMagmas()]
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Non-unital non-associative algebras
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2011 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
|
+
from sage.misc.abstract_method import abstract_method
|
|
13
|
+
from sage.misc.cachefunc import cached_method
|
|
14
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
15
|
+
from sage.misc.lazy_import import LazyImport
|
|
16
|
+
from sage.categories.category import Category
|
|
17
|
+
from sage.categories.category_types import Category_over_base_ring
|
|
18
|
+
from sage.categories.category_with_axiom import CategoryWithAxiom_over_base_ring
|
|
19
|
+
from sage.categories.magmas import Magmas
|
|
20
|
+
from sage.categories.additive_magmas import AdditiveMagmas
|
|
21
|
+
from sage.categories.modules import Modules
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class MagmaticAlgebras(Category_over_base_ring):
|
|
25
|
+
"""
|
|
26
|
+
The category of algebras over a given base ring.
|
|
27
|
+
|
|
28
|
+
An algebra over a ring `R` is a module over `R` endowed with a
|
|
29
|
+
bilinear multiplication.
|
|
30
|
+
|
|
31
|
+
.. WARNING::
|
|
32
|
+
|
|
33
|
+
:class:`MagmaticAlgebras` will eventually replace the current
|
|
34
|
+
:class:`Algebras` for consistency with
|
|
35
|
+
e.g. :wikipedia:`Algebras` which assumes neither associativity
|
|
36
|
+
nor the existence of a unit (see :issue:`15043`).
|
|
37
|
+
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: from sage.categories.magmatic_algebras import MagmaticAlgebras
|
|
41
|
+
sage: C = MagmaticAlgebras(ZZ); C
|
|
42
|
+
Category of magmatic algebras over Integer Ring
|
|
43
|
+
sage: C.super_categories()
|
|
44
|
+
[Category of additive commutative additive associative additive
|
|
45
|
+
unital distributive magmas and additive magmas,
|
|
46
|
+
Category of modules over Integer Ring]
|
|
47
|
+
|
|
48
|
+
TESTS::
|
|
49
|
+
|
|
50
|
+
sage: TestSuite(C).run()
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
@cached_method
|
|
54
|
+
def super_categories(self):
|
|
55
|
+
"""
|
|
56
|
+
EXAMPLES::
|
|
57
|
+
|
|
58
|
+
sage: from sage.categories.magmatic_algebras import MagmaticAlgebras
|
|
59
|
+
sage: MA = MagmaticAlgebras(ZZ)
|
|
60
|
+
sage: MA.super_categories()
|
|
61
|
+
[Category of additive commutative additive associative additive
|
|
62
|
+
unital distributive magmas and additive magmas,
|
|
63
|
+
Category of modules over Integer Ring]
|
|
64
|
+
|
|
65
|
+
sage: from sage.categories.additive_semigroups import AdditiveSemigroups
|
|
66
|
+
sage: MA.is_subcategory((AdditiveSemigroups() & Magmas()).Distributive())
|
|
67
|
+
True
|
|
68
|
+
"""
|
|
69
|
+
R = self.base_ring()
|
|
70
|
+
# Note: The specifications impose `self` to be a subcategory
|
|
71
|
+
# of the join of its super categories. Here the join is non
|
|
72
|
+
# trivial, since some of the axioms of Modules (like the
|
|
73
|
+
# commutativity of '+') are added to the left hand side. We
|
|
74
|
+
# might want the infrastructure to take this join for us.
|
|
75
|
+
return Category.join([(Magmas() & AdditiveMagmas()).Distributive(), Modules(R)], as_list=True)
|
|
76
|
+
|
|
77
|
+
def additional_structure(self):
|
|
78
|
+
r"""
|
|
79
|
+
Return ``None``.
|
|
80
|
+
|
|
81
|
+
Indeed, the category of (magmatic) algebras defines no new
|
|
82
|
+
structure: a morphism of modules and of magmas between two
|
|
83
|
+
(magmatic) algebras is a (magmatic) algebra morphism.
|
|
84
|
+
|
|
85
|
+
.. SEEALSO:: :meth:`Category.additional_structure`
|
|
86
|
+
|
|
87
|
+
.. TODO::
|
|
88
|
+
|
|
89
|
+
This category should be a
|
|
90
|
+
:class:`~sage.categories.category_with_axiom.CategoryWithAxiom`,
|
|
91
|
+
the axiom specifying the compatibility between the magma and
|
|
92
|
+
module structure.
|
|
93
|
+
|
|
94
|
+
EXAMPLES::
|
|
95
|
+
|
|
96
|
+
sage: from sage.categories.magmatic_algebras import MagmaticAlgebras
|
|
97
|
+
sage: MagmaticAlgebras(ZZ).additional_structure()
|
|
98
|
+
"""
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
Associative = LazyImport('sage.categories.associative_algebras', 'AssociativeAlgebras', at_startup=True)
|
|
102
|
+
Unital = LazyImport('sage.categories.unital_algebras', 'UnitalAlgebras', at_startup=True)
|
|
103
|
+
|
|
104
|
+
class ParentMethods:
|
|
105
|
+
|
|
106
|
+
@abstract_method(optional=True)
|
|
107
|
+
def algebra_generators(self):
|
|
108
|
+
"""
|
|
109
|
+
Return a family of generators of this algebra.
|
|
110
|
+
|
|
111
|
+
EXAMPLES::
|
|
112
|
+
|
|
113
|
+
sage: F = AlgebrasWithBasis(QQ).example(); F # needs sage.combinat sage.modules
|
|
114
|
+
An example of an algebra with basis:
|
|
115
|
+
the free algebra on the generators ('a', 'b', 'c') over Rational Field
|
|
116
|
+
sage: F.algebra_generators() # needs sage.combinat sage.modules
|
|
117
|
+
Family (B[word: a], B[word: b], B[word: c])
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
class WithBasis(CategoryWithAxiom_over_base_ring):
|
|
121
|
+
|
|
122
|
+
class ParentMethods:
|
|
123
|
+
|
|
124
|
+
def algebra_generators(self):
|
|
125
|
+
r"""
|
|
126
|
+
Return generators for this algebra.
|
|
127
|
+
|
|
128
|
+
This default implementation returns the basis of this algebra.
|
|
129
|
+
|
|
130
|
+
OUTPUT: a family
|
|
131
|
+
|
|
132
|
+
.. SEEALSO::
|
|
133
|
+
|
|
134
|
+
- :meth:`~sage.categories.modules_with_basis.ModulesWithBasis.ParentMethods.basis`
|
|
135
|
+
- :meth:`MagmaticAlgebras.ParentMethods.algebra_generators`
|
|
136
|
+
|
|
137
|
+
EXAMPLES::
|
|
138
|
+
|
|
139
|
+
sage: D4 = DescentAlgebra(QQ, 4).B() # needs sage.combinat sage.groups sage.modules
|
|
140
|
+
sage: D4.algebra_generators() # needs sage.combinat sage.groups sage.modules
|
|
141
|
+
Lazy family (...)_{i in Compositions of 4}
|
|
142
|
+
|
|
143
|
+
sage: R.<x> = ZZ[]
|
|
144
|
+
sage: P = PartitionAlgebra(1, x, R) # needs sage.combinat sage.modules
|
|
145
|
+
sage: P.algebra_generators() # needs sage.combinat sage.modules
|
|
146
|
+
Lazy family (Term map
|
|
147
|
+
from Partition diagrams of order 1
|
|
148
|
+
to Partition Algebra of rank 1 with parameter x
|
|
149
|
+
over Univariate Polynomial Ring in x
|
|
150
|
+
over Integer Ring(i))_{i in Partition diagrams of order 1}
|
|
151
|
+
"""
|
|
152
|
+
return self.basis()
|
|
153
|
+
|
|
154
|
+
@abstract_method(optional=True)
|
|
155
|
+
def product_on_basis(self, i, j):
|
|
156
|
+
"""
|
|
157
|
+
The product of the algebra on the basis (optional).
|
|
158
|
+
|
|
159
|
+
INPUT:
|
|
160
|
+
|
|
161
|
+
- ``i``, ``j`` -- the indices of two elements of the
|
|
162
|
+
basis of ``self``
|
|
163
|
+
|
|
164
|
+
Return the product of the two corresponding basis elements
|
|
165
|
+
indexed by ``i`` and ``j``.
|
|
166
|
+
|
|
167
|
+
If implemented, :meth:`product` is defined from
|
|
168
|
+
it by bilinearity.
|
|
169
|
+
|
|
170
|
+
EXAMPLES::
|
|
171
|
+
|
|
172
|
+
sage: A = AlgebrasWithBasis(QQ).example() # needs sage.combinat sage.modules
|
|
173
|
+
sage: Word = A.basis().keys() # needs sage.combinat sage.modules
|
|
174
|
+
sage: A.product_on_basis(Word("abc"), Word("cba")) # needs sage.combinat sage.modules
|
|
175
|
+
B[word: abccba]
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
@lazy_attribute
|
|
179
|
+
def product(self):
|
|
180
|
+
"""
|
|
181
|
+
The product of the algebra, as per
|
|
182
|
+
:meth:`Magmas.ParentMethods.product()
|
|
183
|
+
<sage.categories.magmas.Magmas.ParentMethods.product>`
|
|
184
|
+
|
|
185
|
+
By default, this is implemented using one of the following
|
|
186
|
+
methods, in the specified order:
|
|
187
|
+
|
|
188
|
+
- :meth:`.product_on_basis`
|
|
189
|
+
- :meth:`.product_by_coercion`
|
|
190
|
+
|
|
191
|
+
EXAMPLES::
|
|
192
|
+
|
|
193
|
+
sage: A = AlgebrasWithBasis(QQ).example() # needs sage.combinat sage.modules
|
|
194
|
+
sage: a, b, c = A.algebra_generators() # needs sage.combinat sage.modules
|
|
195
|
+
sage: A.product(a + 2*b, 3*c) # needs sage.combinat sage.modules
|
|
196
|
+
3*B[word: ac] + 6*B[word: bc]
|
|
197
|
+
"""
|
|
198
|
+
if self.product_on_basis is not NotImplemented:
|
|
199
|
+
return self._product_from_product_on_basis_multiply
|
|
200
|
+
# return self._module_morphism(self._module_morphism(self.product_on_basis, position = 0, codomain=self),
|
|
201
|
+
# position = 1)
|
|
202
|
+
elif hasattr(self, "product_by_coercion"):
|
|
203
|
+
return self.product_by_coercion
|
|
204
|
+
else:
|
|
205
|
+
return NotImplemented
|
|
206
|
+
|
|
207
|
+
# Provides a product using the product_on_basis by calling linear_combination only once
|
|
208
|
+
def _product_from_product_on_basis_multiply( self, left, right ):
|
|
209
|
+
r"""
|
|
210
|
+
Compute the product of two elements by extending
|
|
211
|
+
bilinearly the method :meth:`product_on_basis`.
|
|
212
|
+
|
|
213
|
+
EXAMPLES::
|
|
214
|
+
|
|
215
|
+
sage: A = AlgebrasWithBasis(QQ).example(); A # needs sage.combinat sage.modules
|
|
216
|
+
An example of an algebra with basis:
|
|
217
|
+
the free algebra on the generators ('a', 'b', 'c') over Rational Field
|
|
218
|
+
sage: a, b, c = A.algebra_generators() # needs sage.combinat sage.modules
|
|
219
|
+
sage: A._product_from_product_on_basis_multiply(a*b + 2*c, a - b) # needs sage.combinat sage.modules
|
|
220
|
+
B[word: aba] - B[word: abb] + 2*B[word: ca] - 2*B[word: cb]
|
|
221
|
+
"""
|
|
222
|
+
return self.linear_combination((self.product_on_basis(mon_left, mon_right), coeff_left * coeff_right )
|
|
223
|
+
for (mon_left, coeff_left) in left.monomial_coefficients(copy=False).items()
|
|
224
|
+
for (mon_right, coeff_right) in right.monomial_coefficients(copy=False).items() )
|
|
225
|
+
|
|
226
|
+
class FiniteDimensional(CategoryWithAxiom_over_base_ring):
|
|
227
|
+
class ParentMethods:
|
|
228
|
+
def to_finite_dimensional_algebra(self, names='e', assume_associative=True, assume_unital=True):
|
|
229
|
+
r"""
|
|
230
|
+
Return ``self`` as a :class:`sage.algebras.finite_dimensional_algebra.FiniteDimensionalAlgebra`.
|
|
231
|
+
|
|
232
|
+
This forgets the indexing of the basis, flattening the
|
|
233
|
+
elements into vectors.
|
|
234
|
+
The name of the vectors can be passed via the ``names``
|
|
235
|
+
parameter.
|
|
236
|
+
|
|
237
|
+
To convert an element `v` of ``self`` into the
|
|
238
|
+
``FiniteDimensionalAlgebra`` ``F`` returned by this method,
|
|
239
|
+
use ``F(v.to_vector())``. For the inverse direction,
|
|
240
|
+
use ``self.from_vector(v.vector())``.
|
|
241
|
+
|
|
242
|
+
INPUT:
|
|
243
|
+
|
|
244
|
+
- ``names`` -- string (default: ``'e'``); names for the basis
|
|
245
|
+
elements
|
|
246
|
+
|
|
247
|
+
- ``assume_associative`` -- boolean (default: ``False``); if
|
|
248
|
+
``True``, then the category is set to ``category.Associative()``
|
|
249
|
+
and methods requiring associativity assume this
|
|
250
|
+
|
|
251
|
+
- ``assume_unital`` -- boolean (default: ``False``); if
|
|
252
|
+
``True``, then the category is set to ``category.Unital()``
|
|
253
|
+
and methods requiring unitality assume this
|
|
254
|
+
|
|
255
|
+
EXAMPLES::
|
|
256
|
+
|
|
257
|
+
sage: # needs sage.combinat sage.modules
|
|
258
|
+
sage: B = DescentAlgebra(QQ,3).B()
|
|
259
|
+
sage: list(B.basis())
|
|
260
|
+
[B[1, 1, 1], B[1, 2], B[2, 1], B[3]]
|
|
261
|
+
sage: B_fda = B.to_finite_dimensional_algebra(); B_fda
|
|
262
|
+
Finite-dimensional algebra of degree 4 over Rational Field
|
|
263
|
+
sage: e = B_fda.basis(); e
|
|
264
|
+
Finite family {0: e0, 1: e1, 2: e2, 3: e3}
|
|
265
|
+
sage: x = e[1] * e[2]; x
|
|
266
|
+
e0 + e1
|
|
267
|
+
sage: y = B[1,2] * B[2,1]; y
|
|
268
|
+
B[1, 1, 1] + B[1, 2]
|
|
269
|
+
sage: B_fda(y.to_vector()) == x
|
|
270
|
+
True
|
|
271
|
+
sage: B.from_vector(x.vector()) == y
|
|
272
|
+
True
|
|
273
|
+
"""
|
|
274
|
+
from sage.algebras.finite_dimensional_algebras.finite_dimensional_algebra import FiniteDimensionalAlgebra
|
|
275
|
+
R = self.base_ring()
|
|
276
|
+
return FiniteDimensionalAlgebra(R, [x.to_matrix(side="right").transpose()
|
|
277
|
+
for x in self.basis()],
|
|
278
|
+
names=names,
|
|
279
|
+
assume_associative=assume_associative,
|
|
280
|
+
assume_unital=assume_unital)
|
|
281
|
+
|
|
282
|
+
@cached_method
|
|
283
|
+
def derivations_basis(self):
|
|
284
|
+
r"""
|
|
285
|
+
Return a basis for the Lie algebra of derivations
|
|
286
|
+
of ``self`` as matrices.
|
|
287
|
+
|
|
288
|
+
A derivation `D` of an algebra is an endomorphism of `A`
|
|
289
|
+
such that
|
|
290
|
+
|
|
291
|
+
.. MATH::
|
|
292
|
+
|
|
293
|
+
D(ab) = D(a) b + a D(b)
|
|
294
|
+
|
|
295
|
+
for all `a, b \in A`. The set of all derivations
|
|
296
|
+
form a Lie algebra.
|
|
297
|
+
|
|
298
|
+
EXAMPLES:
|
|
299
|
+
|
|
300
|
+
We construct the Heisenberg Lie algebra as a
|
|
301
|
+
multiplicative algebra::
|
|
302
|
+
|
|
303
|
+
sage: # needs sage.combinat sage.modules
|
|
304
|
+
sage: p_mult = matrix([[0,0,0], [0,0,-1], [0,0,0]])
|
|
305
|
+
sage: q_mult = matrix([[0,0,1], [0,0,0], [0,0,0]])
|
|
306
|
+
sage: A = algebras.FiniteDimensional(QQ,
|
|
307
|
+
....: [p_mult, q_mult, matrix(QQ, 3, 3)], 'p,q,z')
|
|
308
|
+
sage: A.inject_variables()
|
|
309
|
+
Defining p, q, z
|
|
310
|
+
sage: p * q
|
|
311
|
+
z
|
|
312
|
+
sage: q * p
|
|
313
|
+
-z
|
|
314
|
+
sage: A.derivations_basis()
|
|
315
|
+
(
|
|
316
|
+
[1 0 0] [0 1 0] [0 0 0] [0 0 0] [0 0 0] [0 0 0]
|
|
317
|
+
[0 0 0] [0 0 0] [1 0 0] [0 1 0] [0 0 0] [0 0 0]
|
|
318
|
+
[0 0 1], [0 0 0], [0 0 0], [0 0 1], [1 0 0], [0 1 0]
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
We construct another example using the exterior algebra
|
|
322
|
+
and verify we obtain a derivation::
|
|
323
|
+
|
|
324
|
+
sage: # needs sage.combinat sage.modules
|
|
325
|
+
sage: A = algebras.Exterior(QQ, 1)
|
|
326
|
+
sage: A.derivations_basis()
|
|
327
|
+
(
|
|
328
|
+
[0 0]
|
|
329
|
+
[0 1]
|
|
330
|
+
)
|
|
331
|
+
sage: D = A.module_morphism(matrix=A.derivations_basis()[0],
|
|
332
|
+
....: codomain=A)
|
|
333
|
+
sage: one, e = A.basis()
|
|
334
|
+
sage: all(D(a*b) == D(a) * b + a * D(b)
|
|
335
|
+
....: for a in A.basis() for b in A.basis())
|
|
336
|
+
True
|
|
337
|
+
|
|
338
|
+
REFERENCES:
|
|
339
|
+
|
|
340
|
+
:wikipedia:`Derivation_(differential_algebra)`
|
|
341
|
+
"""
|
|
342
|
+
R = self.base_ring()
|
|
343
|
+
B = self.basis()
|
|
344
|
+
keys = list(B.keys())
|
|
345
|
+
scoeffs = {(j,y,i): c for y in keys for i in keys
|
|
346
|
+
for j,c in (B[y]*B[i]).monomial_coefficients(copy=False).items()
|
|
347
|
+
}
|
|
348
|
+
zero = R.zero()
|
|
349
|
+
data = {}
|
|
350
|
+
N = len(keys)
|
|
351
|
+
for ii,i in enumerate(keys):
|
|
352
|
+
for ij,j in enumerate(keys):
|
|
353
|
+
for il,l in enumerate(keys):
|
|
354
|
+
row = ii + N * ij + N**2 * il
|
|
355
|
+
for ik,k in enumerate(keys):
|
|
356
|
+
data[row,ik+N*il] = (data.get((row,ik+N*il), zero)
|
|
357
|
+
+ scoeffs.get((k, i, j), zero))
|
|
358
|
+
data[row,ii+N*ik] = (data.get((row,ii+N*ik), zero)
|
|
359
|
+
- scoeffs.get((l, k, j), zero))
|
|
360
|
+
data[row,ij+N*ik] = (data.get((row,ij+N*ik), zero)
|
|
361
|
+
- scoeffs.get((l, i, k), zero))
|
|
362
|
+
from sage.matrix.constructor import matrix
|
|
363
|
+
mat = matrix(R, data, sparse=True)
|
|
364
|
+
return tuple([matrix(R, N, N, list(b))
|
|
365
|
+
for b in mat.right_kernel().basis()])
|