passagemath-categories 10.6.31rc3__cp314-cp314-macosx_13_0_arm64.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.31rc3.dist-info/METADATA +156 -0
- passagemath_categories-10.6.31rc3.dist-info/RECORD +717 -0
- passagemath_categories-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_categories-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_categories.dylibs/libgmp.10.dylib +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-314-darwin.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-314-darwin.so +0 -0
- sage/arith/multi_modular.pxd +39 -0
- sage/arith/multi_modular.pyx +994 -0
- sage/arith/rational_reconstruction.cpython-314-darwin.so +0 -0
- sage/arith/rational_reconstruction.pxd +4 -0
- sage/arith/rational_reconstruction.pyx +115 -0
- sage/arith/srange.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/combinat/partitions.pyx +743 -0
- sage/combinat/permutation.py +10168 -0
- sage/combinat/permutation_cython.cpython-314-darwin.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-314-darwin.so +0 -0
- sage/data_structures/binary_search.pxd +3 -0
- sage/data_structures/binary_search.pyx +66 -0
- sage/data_structures/bitset.cpython-314-darwin.so +0 -0
- sage/data_structures/bitset.pxd +40 -0
- sage/data_structures/bitset.pyx +2385 -0
- sage/data_structures/bitset_base.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/ext/fast_callable.pxd +4 -0
- sage/ext/fast_callable.pyx +2746 -0
- sage/ext/fast_eval.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/misc/allocator.pxd +6 -0
- sage/misc/allocator.pyx +47 -0
- sage/misc/binary_tree.cpython-314-darwin.so +0 -0
- sage/misc/binary_tree.pxd +29 -0
- sage/misc/binary_tree.pyx +537 -0
- sage/misc/callable_dict.cpython-314-darwin.so +0 -0
- sage/misc/callable_dict.pyx +89 -0
- sage/misc/citation.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/misc/search.pxd +2 -0
- sage/misc/search.pyx +68 -0
- sage/misc/stopgap.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/factorint.pyx +295 -0
- sage/rings/fast_arith.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/integer.pxd +45 -0
- sage/rings/integer.pyx +7871 -0
- sage/rings/integer_ring.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/polynomial/commutative_polynomial.pxd +6 -0
- sage/rings/polynomial/commutative_polynomial.pyx +24 -0
- sage/rings/polynomial/cyclotomic.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/polynomial/polydict.pxd +45 -0
- sage/rings/polynomial/polydict.pyx +2701 -0
- sage/rings/polynomial/polynomial_compiled.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/rings/real_double.pxd +16 -0
- sage/rings/real_double.pyx +2215 -0
- sage/rings/real_lazy.cpython-314-darwin.so +0 -0
- sage/rings/real_lazy.pxd +30 -0
- sage/rings/real_lazy.pyx +1773 -0
- sage/rings/ring.cpython-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.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-314-darwin.so +0 -0
- sage/tests/cython.pyx +37 -0
- sage/tests/stl_vector.cpython-314-darwin.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,271 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
r"""
|
|
3
|
+
Euclidean domains
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- Teresa Gomez-Diaz (2008): initial version
|
|
8
|
+
|
|
9
|
+
- Julian Rueth (2013-09-13): added euclidean degree, quotient remainder, and
|
|
10
|
+
their tests
|
|
11
|
+
"""
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2008 Teresa Gomez-Diaz (CNRS) <Teresa.Gomez-Diaz@univ-mlv.fr>
|
|
14
|
+
# 2013 Julian Rueth <julian.rueth@fsfe.org>
|
|
15
|
+
#
|
|
16
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
17
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# *****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.categories.category_singleton import Category_singleton
|
|
21
|
+
from sage.categories.principal_ideal_domains import PrincipalIdealDomains
|
|
22
|
+
from sage.misc.abstract_method import abstract_method
|
|
23
|
+
from sage.structure.element import coerce_binop
|
|
24
|
+
from sage.structure.sequence import Sequence
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class EuclideanDomains(Category_singleton):
|
|
28
|
+
"""
|
|
29
|
+
The category of constructive euclidean domains, i.e., one can divide
|
|
30
|
+
producing a quotient and a remainder where the remainder is either zero or
|
|
31
|
+
its :meth:`ElementMethods.euclidean_degree` is smaller than the divisor.
|
|
32
|
+
|
|
33
|
+
EXAMPLES::
|
|
34
|
+
|
|
35
|
+
sage: EuclideanDomains()
|
|
36
|
+
Category of euclidean domains
|
|
37
|
+
sage: EuclideanDomains().super_categories()
|
|
38
|
+
[Category of principal ideal domains]
|
|
39
|
+
|
|
40
|
+
TESTS::
|
|
41
|
+
|
|
42
|
+
sage: TestSuite(EuclideanDomains()).run()
|
|
43
|
+
"""
|
|
44
|
+
def super_categories(self):
|
|
45
|
+
"""
|
|
46
|
+
EXAMPLES::
|
|
47
|
+
|
|
48
|
+
sage: EuclideanDomains().super_categories()
|
|
49
|
+
[Category of principal ideal domains]
|
|
50
|
+
"""
|
|
51
|
+
return [PrincipalIdealDomains()]
|
|
52
|
+
|
|
53
|
+
class ParentMethods:
|
|
54
|
+
def is_euclidean_domain(self):
|
|
55
|
+
"""
|
|
56
|
+
Return ``True``, since this in an object of the category of Euclidean domains.
|
|
57
|
+
|
|
58
|
+
EXAMPLES::
|
|
59
|
+
|
|
60
|
+
sage: Parent(QQ,category=EuclideanDomains()).is_euclidean_domain()
|
|
61
|
+
True
|
|
62
|
+
"""
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
def gcd_free_basis(self, elts):
|
|
66
|
+
r"""
|
|
67
|
+
Compute a set of coprime elements that can be used to express the
|
|
68
|
+
elements of ``elts``.
|
|
69
|
+
|
|
70
|
+
INPUT:
|
|
71
|
+
|
|
72
|
+
- ``elts`` -- a sequence of elements of ``self``
|
|
73
|
+
|
|
74
|
+
OUTPUT:
|
|
75
|
+
|
|
76
|
+
A GCD-free basis (also called a coprime base) of ``elts``; that is,
|
|
77
|
+
a set of pairwise relatively prime elements of ``self`` such that
|
|
78
|
+
any element of ``elts`` can be written as a product of elements of
|
|
79
|
+
the set.
|
|
80
|
+
|
|
81
|
+
ALGORITHM:
|
|
82
|
+
|
|
83
|
+
Naive implementation of the algorithm described in Section 4.8 of
|
|
84
|
+
Bach & Shallit [BS1996]_.
|
|
85
|
+
|
|
86
|
+
EXAMPLES::
|
|
87
|
+
|
|
88
|
+
sage: ZZ.gcd_free_basis([1])
|
|
89
|
+
[]
|
|
90
|
+
sage: ZZ.gcd_free_basis([4, 30, 14, 49])
|
|
91
|
+
[2, 15, 7]
|
|
92
|
+
|
|
93
|
+
sage: Pol.<x> = QQ[]
|
|
94
|
+
sage: sorted(Pol.gcd_free_basis([
|
|
95
|
+
....: (x+1)^3*(x+2)^3*(x+3), (x+1)*(x+2)*(x+3),
|
|
96
|
+
....: (x+1)*(x+2)*(x+4)]))
|
|
97
|
+
[x + 3, x + 4, x^2 + 3*x + 2]
|
|
98
|
+
|
|
99
|
+
TESTS::
|
|
100
|
+
|
|
101
|
+
sage: R.<x> = QQ[]
|
|
102
|
+
sage: QQ.gcd_free_basis([x+1,x+2])
|
|
103
|
+
Traceback (most recent call last):
|
|
104
|
+
...
|
|
105
|
+
TypeError: unable to convert x + 1 to an element of Rational Field
|
|
106
|
+
"""
|
|
107
|
+
def refine(a, b):
|
|
108
|
+
g = a.gcd(b)
|
|
109
|
+
if g.is_unit():
|
|
110
|
+
return (a, set(), b)
|
|
111
|
+
l1, s1, r1 = refine(a//g, g)
|
|
112
|
+
l2, s2, r2 = refine(r1, b//g)
|
|
113
|
+
s1.update(s2)
|
|
114
|
+
s1.add(l2)
|
|
115
|
+
return (l1, s1, r2)
|
|
116
|
+
elts = Sequence(elts, universe=self)
|
|
117
|
+
res = set()
|
|
118
|
+
if len(elts) == 1:
|
|
119
|
+
res.update(elts)
|
|
120
|
+
else:
|
|
121
|
+
r = elts[-1]
|
|
122
|
+
for t in self.gcd_free_basis(elts[:-1]):
|
|
123
|
+
l, s, r = refine(t, r)
|
|
124
|
+
res.update(s)
|
|
125
|
+
res.add(l)
|
|
126
|
+
res.add(r)
|
|
127
|
+
units = [x for x in res if x.is_unit()]
|
|
128
|
+
res.difference_update(units)
|
|
129
|
+
return Sequence(res, universe=self, check=False)
|
|
130
|
+
|
|
131
|
+
def _test_euclidean_degree(self, **options):
|
|
132
|
+
r"""
|
|
133
|
+
Test that the assumptions on a Euclidean degree are met.
|
|
134
|
+
|
|
135
|
+
EXAMPLES::
|
|
136
|
+
|
|
137
|
+
sage: R.<x> = QQ[]
|
|
138
|
+
sage: R._test_euclidean_degree()
|
|
139
|
+
|
|
140
|
+
.. SEEALSO::
|
|
141
|
+
|
|
142
|
+
:meth:`_test_quo_rem`
|
|
143
|
+
"""
|
|
144
|
+
tester = self._tester(**options)
|
|
145
|
+
S = [s for s in tester.some_elements() if not s.is_zero()]
|
|
146
|
+
|
|
147
|
+
min_degree = self.one().euclidean_degree()
|
|
148
|
+
|
|
149
|
+
from sage.rings.semirings.non_negative_integer_semiring import NN
|
|
150
|
+
for a in S:
|
|
151
|
+
tester.assertIn(a.euclidean_degree(), NN)
|
|
152
|
+
tester.assertGreaterEqual(a.euclidean_degree(), min_degree)
|
|
153
|
+
tester.assertEqual(a.euclidean_degree() == min_degree, a.is_unit())
|
|
154
|
+
|
|
155
|
+
from sage.misc.misc import some_tuples
|
|
156
|
+
for a,b in some_tuples(S, 2, tester._max_runs):
|
|
157
|
+
p = a * b
|
|
158
|
+
# For rings which are not exact, we might get something that
|
|
159
|
+
# acts like a zero divisor.
|
|
160
|
+
# Therefore we skip the product if it evaluates to zero.
|
|
161
|
+
# Let the category of Domains handle the test for zero divisors.
|
|
162
|
+
if p.is_zero():
|
|
163
|
+
continue
|
|
164
|
+
tester.assertLessEqual(a.euclidean_degree(), p.euclidean_degree())
|
|
165
|
+
|
|
166
|
+
def _test_quo_rem(self, **options):
|
|
167
|
+
r"""
|
|
168
|
+
Test that the assumptions on a quotient with remainder of an
|
|
169
|
+
euclidean domain are met.
|
|
170
|
+
|
|
171
|
+
EXAMPLES::
|
|
172
|
+
|
|
173
|
+
sage: R.<x> = QQ[]
|
|
174
|
+
sage: R._test_quo_rem()
|
|
175
|
+
|
|
176
|
+
.. SEEALSO::
|
|
177
|
+
|
|
178
|
+
:meth:`_test_euclidean_degree`
|
|
179
|
+
"""
|
|
180
|
+
tester = self._tester(**options)
|
|
181
|
+
S = tester.some_elements()
|
|
182
|
+
from sage.misc.misc import some_tuples
|
|
183
|
+
for a,b in some_tuples(S, 2, tester._max_runs):
|
|
184
|
+
if b.is_zero():
|
|
185
|
+
tester.assertRaises(ZeroDivisionError, lambda: a.quo_rem(b))
|
|
186
|
+
else:
|
|
187
|
+
q,r = a.quo_rem(b)
|
|
188
|
+
tester.assertIn(q, self)
|
|
189
|
+
tester.assertIn(r, self)
|
|
190
|
+
tester.assertEqual(a,q*b+r)
|
|
191
|
+
if r != 0:
|
|
192
|
+
tester.assertLess(r.euclidean_degree(), b.euclidean_degree())
|
|
193
|
+
|
|
194
|
+
class ElementMethods:
|
|
195
|
+
@abstract_method
|
|
196
|
+
def euclidean_degree(self):
|
|
197
|
+
r"""
|
|
198
|
+
Return the degree of this element as an element of a Euclidean
|
|
199
|
+
domain, i.e., for elements `a`, `b` the euclidean degree `f`
|
|
200
|
+
satisfies the usual properties:
|
|
201
|
+
|
|
202
|
+
1. if `b` is not zero, then there are elements `q` and `r` such
|
|
203
|
+
that `a = bq + r` with `r = 0` or `f(r) < f(b)`
|
|
204
|
+
2. if `a,b` are not zero, then `f(a) \leq f(ab)`
|
|
205
|
+
|
|
206
|
+
.. NOTE::
|
|
207
|
+
|
|
208
|
+
The name ``euclidean_degree`` was chosen because the euclidean
|
|
209
|
+
function has different names in different contexts, e.g.,
|
|
210
|
+
absolute value for integers, degree for polynomials.
|
|
211
|
+
|
|
212
|
+
OUTPUT:
|
|
213
|
+
|
|
214
|
+
For nonzero elements, a natural number. For the zero element, this
|
|
215
|
+
might raise an exception or produce some other output, depending on
|
|
216
|
+
the implementation.
|
|
217
|
+
|
|
218
|
+
EXAMPLES::
|
|
219
|
+
|
|
220
|
+
sage: R.<x> = QQ[]
|
|
221
|
+
sage: x.euclidean_degree()
|
|
222
|
+
1
|
|
223
|
+
sage: ZZ.one().euclidean_degree()
|
|
224
|
+
1
|
|
225
|
+
"""
|
|
226
|
+
|
|
227
|
+
@coerce_binop
|
|
228
|
+
def gcd(self, other):
|
|
229
|
+
"""
|
|
230
|
+
Return the greatest common divisor of this element and ``other``.
|
|
231
|
+
|
|
232
|
+
INPUT:
|
|
233
|
+
|
|
234
|
+
- ``other`` -- an element in the same ring as ``self``
|
|
235
|
+
|
|
236
|
+
ALGORITHM:
|
|
237
|
+
|
|
238
|
+
Algorithm 3.2.1 in [Coh1993]_.
|
|
239
|
+
|
|
240
|
+
EXAMPLES::
|
|
241
|
+
|
|
242
|
+
sage: R.<x> = PolynomialRing(QQ, sparse=True)
|
|
243
|
+
sage: EuclideanDomains().element_class.gcd(x,x+1)
|
|
244
|
+
-1
|
|
245
|
+
"""
|
|
246
|
+
A = self
|
|
247
|
+
B = other
|
|
248
|
+
while not B.is_zero():
|
|
249
|
+
Q, R = A.quo_rem(B)
|
|
250
|
+
A = B
|
|
251
|
+
B = R
|
|
252
|
+
return A
|
|
253
|
+
|
|
254
|
+
@abstract_method
|
|
255
|
+
def quo_rem(self, other):
|
|
256
|
+
r"""
|
|
257
|
+
Return the quotient and remainder of the division of this element
|
|
258
|
+
by the nonzero element ``other``.
|
|
259
|
+
|
|
260
|
+
INPUT:
|
|
261
|
+
|
|
262
|
+
- ``other`` -- an element in the same euclidean domain
|
|
263
|
+
|
|
264
|
+
OUTPUT: a pair of elements
|
|
265
|
+
|
|
266
|
+
EXAMPLES::
|
|
267
|
+
|
|
268
|
+
sage: R.<x> = QQ[]
|
|
269
|
+
sage: x.quo_rem(x)
|
|
270
|
+
(1, 0)
|
|
271
|
+
"""
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.combinat
|
|
3
|
+
r"""
|
|
4
|
+
Examples of algebras with basis
|
|
5
|
+
"""
|
|
6
|
+
#*****************************************************************************
|
|
7
|
+
# Copyright (C) 2008-2009 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
8
|
+
#
|
|
9
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
10
|
+
# http://www.gnu.org/licenses/
|
|
11
|
+
#*****************************************************************************
|
|
12
|
+
|
|
13
|
+
from sage.misc.cachefunc import cached_method
|
|
14
|
+
from sage.sets.family import Family
|
|
15
|
+
from sage.categories.algebras_with_basis import AlgebrasWithBasis
|
|
16
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
17
|
+
from sage.combinat.words.words import Words
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class FreeAlgebra(CombinatorialFreeModule):
|
|
21
|
+
r"""
|
|
22
|
+
An example of an algebra with basis: the free algebra.
|
|
23
|
+
|
|
24
|
+
This class illustrates a minimal implementation of an algebra with basis.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, R, alphabet=("a", "b", "c")):
|
|
28
|
+
"""
|
|
29
|
+
EXAMPLES::
|
|
30
|
+
|
|
31
|
+
sage: A = AlgebrasWithBasis(QQ).example(); A # needs sage.modules
|
|
32
|
+
An example of an algebra with basis: the free algebra on the generators ('a', 'b', 'c') over Rational Field
|
|
33
|
+
sage: TestSuite(A).run() # needs sage.modules
|
|
34
|
+
"""
|
|
35
|
+
self._alphabet = alphabet
|
|
36
|
+
CombinatorialFreeModule.__init__(self, R,
|
|
37
|
+
Words(alphabet, infinite=False),
|
|
38
|
+
category=AlgebrasWithBasis(R))
|
|
39
|
+
|
|
40
|
+
def _repr_(self):
|
|
41
|
+
"""
|
|
42
|
+
EXAMPLES::
|
|
43
|
+
|
|
44
|
+
sage: AlgebrasWithBasis(QQ).example() # indirect doctest # needs sage.modules
|
|
45
|
+
An example of an algebra with basis: the free algebra on the generators ('a', 'b', 'c') over Rational Field
|
|
46
|
+
"""
|
|
47
|
+
return "An example of an algebra with basis: the free algebra on the generators %s over %s" % (self._alphabet, self.base_ring())
|
|
48
|
+
|
|
49
|
+
@cached_method
|
|
50
|
+
def one_basis(self):
|
|
51
|
+
"""
|
|
52
|
+
Return the empty word, which index the one of this algebra,
|
|
53
|
+
as per :meth:`AlgebrasWithBasis.ParentMethods.one_basis`.
|
|
54
|
+
|
|
55
|
+
EXAMPLES::
|
|
56
|
+
|
|
57
|
+
sage: A = AlgebrasWithBasis(QQ).example() # needs sage.modules
|
|
58
|
+
sage: A.one_basis() # needs sage.modules
|
|
59
|
+
word:
|
|
60
|
+
sage: A.one() # needs sage.modules
|
|
61
|
+
B[word: ]
|
|
62
|
+
"""
|
|
63
|
+
return self.basis().keys()([])
|
|
64
|
+
|
|
65
|
+
def product_on_basis(self, w1, w2):
|
|
66
|
+
r"""
|
|
67
|
+
Product of basis elements, as per
|
|
68
|
+
:meth:`AlgebrasWithBasis.ParentMethods.product_on_basis`.
|
|
69
|
+
|
|
70
|
+
EXAMPLES::
|
|
71
|
+
|
|
72
|
+
sage: # needs sage.modules
|
|
73
|
+
sage: A = AlgebrasWithBasis(QQ).example()
|
|
74
|
+
sage: Words = A.basis().keys()
|
|
75
|
+
sage: A.product_on_basis(Words("acb"), Words("cba"))
|
|
76
|
+
B[word: acbcba]
|
|
77
|
+
sage: (a,b,c) = A.algebra_generators()
|
|
78
|
+
sage: a * (1-b)^2 * c
|
|
79
|
+
B[word: abbc] - 2*B[word: abc] + B[word: ac]
|
|
80
|
+
"""
|
|
81
|
+
return self.basis()[w1 + w2]
|
|
82
|
+
|
|
83
|
+
@cached_method
|
|
84
|
+
def algebra_generators(self):
|
|
85
|
+
r"""
|
|
86
|
+
Return the generators of this algebra, as per :meth:`~.magmatic_algebras.MagmaticAlgebras.ParentMethods.algebra_generators`.
|
|
87
|
+
|
|
88
|
+
EXAMPLES::
|
|
89
|
+
|
|
90
|
+
sage: A = AlgebrasWithBasis(QQ).example(); A # needs sage.modules
|
|
91
|
+
An example of an algebra with basis: the free algebra on the generators ('a', 'b', 'c') over Rational Field
|
|
92
|
+
sage: A.algebra_generators() # needs sage.modules
|
|
93
|
+
Family (B[word: a], B[word: b], B[word: c])
|
|
94
|
+
"""
|
|
95
|
+
Words = self.basis().keys()
|
|
96
|
+
return Family( [self.monomial(Words(a)) for a in self._alphabet] )
|
|
97
|
+
# FIXME: use this once the keys argument of FiniteFamily will be honoured
|
|
98
|
+
# for the specifying the order of the elements in the family
|
|
99
|
+
#return Family(self._alphabet, lambda a: self.term(self.basis().keys()(a)))
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
Example = FreeAlgebra
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
"""
|
|
3
|
+
Examples of commutative additive monoids
|
|
4
|
+
"""
|
|
5
|
+
#*****************************************************************************
|
|
6
|
+
# Copyright (C) 2008-2009 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
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.structure.parent import Parent
|
|
14
|
+
from sage.categories.commutative_additive_monoids import CommutativeAdditiveMonoids
|
|
15
|
+
from .commutative_additive_semigroups import FreeCommutativeAdditiveSemigroup
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class FreeCommutativeAdditiveMonoid(FreeCommutativeAdditiveSemigroup):
|
|
19
|
+
r"""
|
|
20
|
+
An example of a commutative additive monoid: the free commutative monoid.
|
|
21
|
+
|
|
22
|
+
This class illustrates a minimal implementation of a commutative monoid.
|
|
23
|
+
|
|
24
|
+
EXAMPLES::
|
|
25
|
+
|
|
26
|
+
sage: S = CommutativeAdditiveMonoids().example(); S
|
|
27
|
+
An example of a commutative monoid: the free commutative monoid generated by ('a', 'b', 'c', 'd')
|
|
28
|
+
|
|
29
|
+
sage: S.category()
|
|
30
|
+
Category of commutative additive monoids
|
|
31
|
+
|
|
32
|
+
This is the free semigroup generated by::
|
|
33
|
+
|
|
34
|
+
sage: S.additive_semigroup_generators()
|
|
35
|
+
Family (a, b, c, d)
|
|
36
|
+
|
|
37
|
+
with product rule given by `a \times b = a` for all `a, b`::
|
|
38
|
+
|
|
39
|
+
sage: (a,b,c,d) = S.additive_semigroup_generators()
|
|
40
|
+
|
|
41
|
+
We conclude by running systematic tests on this commutative monoid::
|
|
42
|
+
|
|
43
|
+
sage: TestSuite(S).run(verbose = True)
|
|
44
|
+
running ._test_additive_associativity() . . . pass
|
|
45
|
+
running ._test_an_element() . . . pass
|
|
46
|
+
running ._test_cardinality() . . . pass
|
|
47
|
+
running ._test_category() . . . pass
|
|
48
|
+
running ._test_construction() . . . pass
|
|
49
|
+
running ._test_elements() . . .
|
|
50
|
+
Running the test suite of self.an_element()
|
|
51
|
+
running ._test_category() . . . pass
|
|
52
|
+
running ._test_eq() . . . pass
|
|
53
|
+
running ._test_new() . . . pass
|
|
54
|
+
running ._test_nonzero_equal() . . . pass
|
|
55
|
+
running ._test_not_implemented_methods() . . . pass
|
|
56
|
+
running ._test_pickling() . . . pass
|
|
57
|
+
pass
|
|
58
|
+
running ._test_elements_eq_reflexive() . . . pass
|
|
59
|
+
running ._test_elements_eq_symmetric() . . . pass
|
|
60
|
+
running ._test_elements_eq_transitive() . . . pass
|
|
61
|
+
running ._test_elements_neq() . . . pass
|
|
62
|
+
running ._test_eq() . . . pass
|
|
63
|
+
running ._test_new() . . . pass
|
|
64
|
+
running ._test_not_implemented_methods() . . . pass
|
|
65
|
+
running ._test_pickling() . . . pass
|
|
66
|
+
running ._test_some_elements() . . . pass
|
|
67
|
+
running ._test_zero() . . . pass
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __init__(self, alphabet=('a','b','c','d')):
|
|
71
|
+
r"""
|
|
72
|
+
The free commutative monoid.
|
|
73
|
+
|
|
74
|
+
INPUT:
|
|
75
|
+
|
|
76
|
+
- ``alphabet`` -- tuple of strings; the generators of the monoid
|
|
77
|
+
|
|
78
|
+
EXAMPLES::
|
|
79
|
+
|
|
80
|
+
sage: M = CommutativeAdditiveMonoids().example(alphabet=('a','b','c')); M
|
|
81
|
+
An example of a commutative monoid: the free commutative monoid generated by ('a', 'b', 'c')
|
|
82
|
+
|
|
83
|
+
TESTS::
|
|
84
|
+
|
|
85
|
+
sage: TestSuite(M).run()
|
|
86
|
+
"""
|
|
87
|
+
self.alphabet = alphabet
|
|
88
|
+
Parent.__init__(self, category=CommutativeAdditiveMonoids())
|
|
89
|
+
|
|
90
|
+
def _repr_(self):
|
|
91
|
+
r"""
|
|
92
|
+
TESTS::
|
|
93
|
+
|
|
94
|
+
sage: M = CommutativeAdditiveMonoids().example(alphabet=('a','b','c'))
|
|
95
|
+
sage: M._repr_()
|
|
96
|
+
"An example of a commutative monoid: the free commutative monoid generated by ('a', 'b', 'c')"
|
|
97
|
+
"""
|
|
98
|
+
return "An example of a commutative monoid: the free commutative monoid generated by %s" % (self.alphabet,)
|
|
99
|
+
|
|
100
|
+
@cached_method
|
|
101
|
+
def zero(self):
|
|
102
|
+
r"""
|
|
103
|
+
Return the zero of this additive monoid, as per :meth:`CommutativeAdditiveMonoids.ParentMethods.zero`.
|
|
104
|
+
|
|
105
|
+
EXAMPLES::
|
|
106
|
+
|
|
107
|
+
sage: M = CommutativeAdditiveMonoids().example(); M
|
|
108
|
+
An example of a commutative monoid: the free commutative monoid generated by ('a', 'b', 'c', 'd')
|
|
109
|
+
sage: M.zero()
|
|
110
|
+
0
|
|
111
|
+
"""
|
|
112
|
+
return self(())
|
|
113
|
+
|
|
114
|
+
class Element(FreeCommutativeAdditiveSemigroup.Element):
|
|
115
|
+
def __bool__(self) -> bool:
|
|
116
|
+
"""
|
|
117
|
+
Check if ``self`` is not the zero of the monoid
|
|
118
|
+
|
|
119
|
+
EXAMPLES::
|
|
120
|
+
|
|
121
|
+
sage: M = CommutativeAdditiveMonoids().example()
|
|
122
|
+
sage: bool(M.zero())
|
|
123
|
+
False
|
|
124
|
+
sage: [bool(m) for m in M.additive_semigroup_generators()]
|
|
125
|
+
[True, True, True, True]
|
|
126
|
+
"""
|
|
127
|
+
return any(self.value.values())
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
Example = FreeCommutativeAdditiveMonoid
|