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,853 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.groups
|
|
3
|
+
r"""
|
|
4
|
+
Weyl Groups
|
|
5
|
+
"""
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2009 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
8
|
+
#
|
|
9
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
10
|
+
# https://www.gnu.org/licenses/
|
|
11
|
+
# *****************************************************************************
|
|
12
|
+
|
|
13
|
+
from sage.misc.cachefunc import cached_method, cached_in_parent_method
|
|
14
|
+
from sage.misc.lazy_import import LazyImport
|
|
15
|
+
from sage.categories.category_singleton import Category_singleton
|
|
16
|
+
from sage.categories.coxeter_groups import CoxeterGroups
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class WeylGroups(Category_singleton):
|
|
20
|
+
r"""
|
|
21
|
+
The category of Weyl groups.
|
|
22
|
+
|
|
23
|
+
See the :wikipedia:`Wikipedia page of Weyl Groups <Weyl_group>`.
|
|
24
|
+
|
|
25
|
+
EXAMPLES::
|
|
26
|
+
|
|
27
|
+
sage: WeylGroups()
|
|
28
|
+
Category of Weyl groups
|
|
29
|
+
sage: WeylGroups().super_categories()
|
|
30
|
+
[Category of Coxeter groups]
|
|
31
|
+
|
|
32
|
+
Here are some examples::
|
|
33
|
+
|
|
34
|
+
sage: WeylGroups().example() # todo: not implemented
|
|
35
|
+
sage: FiniteWeylGroups().example()
|
|
36
|
+
The symmetric group on {0, ..., 3}
|
|
37
|
+
sage: AffineWeylGroups().example() # todo: not implemented
|
|
38
|
+
sage: WeylGroup(["B", 3])
|
|
39
|
+
Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
|
|
40
|
+
|
|
41
|
+
This one will eventually be also in this category::
|
|
42
|
+
|
|
43
|
+
sage: SymmetricGroup(4)
|
|
44
|
+
Symmetric group of order 4! as a permutation group
|
|
45
|
+
|
|
46
|
+
TESTS::
|
|
47
|
+
|
|
48
|
+
sage: C = WeylGroups()
|
|
49
|
+
sage: TestSuite(C).run()
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
def super_categories(self):
|
|
53
|
+
r"""
|
|
54
|
+
EXAMPLES::
|
|
55
|
+
|
|
56
|
+
sage: WeylGroups().super_categories()
|
|
57
|
+
[Category of Coxeter groups]
|
|
58
|
+
"""
|
|
59
|
+
return [CoxeterGroups()]
|
|
60
|
+
|
|
61
|
+
def additional_structure(self):
|
|
62
|
+
r"""
|
|
63
|
+
Return ``None``.
|
|
64
|
+
|
|
65
|
+
Indeed, the category of Weyl groups defines no additional
|
|
66
|
+
structure: Weyl groups are a special class of Coxeter groups.
|
|
67
|
+
|
|
68
|
+
.. SEEALSO:: :meth:`Category.additional_structure`
|
|
69
|
+
|
|
70
|
+
.. TODO:: Should this category be a :class:`CategoryWithAxiom`?
|
|
71
|
+
|
|
72
|
+
EXAMPLES::
|
|
73
|
+
|
|
74
|
+
sage: WeylGroups().additional_structure()
|
|
75
|
+
"""
|
|
76
|
+
return None
|
|
77
|
+
|
|
78
|
+
Finite = LazyImport('sage.categories.finite_weyl_groups', 'FiniteWeylGroups')
|
|
79
|
+
|
|
80
|
+
class ParentMethods:
|
|
81
|
+
def coxeter_matrix(self):
|
|
82
|
+
"""
|
|
83
|
+
Return the Coxeter matrix associated to ``self``.
|
|
84
|
+
|
|
85
|
+
EXAMPLES::
|
|
86
|
+
|
|
87
|
+
sage: G = WeylGroup(['A',3])
|
|
88
|
+
sage: G.coxeter_matrix()
|
|
89
|
+
[1 3 2]
|
|
90
|
+
[3 1 3]
|
|
91
|
+
[2 3 1]
|
|
92
|
+
"""
|
|
93
|
+
return self.cartan_type().coxeter_matrix()
|
|
94
|
+
|
|
95
|
+
def pieri_factors(self, *args, **keywords):
|
|
96
|
+
r"""
|
|
97
|
+
Return the set of Pieri factors in this Weyl group.
|
|
98
|
+
|
|
99
|
+
For any type, the set of Pieri factors forms a lower ideal
|
|
100
|
+
in Bruhat order, generated by all the conjugates of some
|
|
101
|
+
special element of the Weyl group. In type `A_n`, this
|
|
102
|
+
special element is `s_n\cdots s_1`, and the conjugates are
|
|
103
|
+
obtained by rotating around this reduced word.
|
|
104
|
+
|
|
105
|
+
These are used to compute Stanley symmetric functions.
|
|
106
|
+
|
|
107
|
+
.. SEEALSO::
|
|
108
|
+
|
|
109
|
+
* :meth:`WeylGroups.ElementMethods.stanley_symmetric_function`
|
|
110
|
+
* :mod:`sage.combinat.root_system.pieri_factors`
|
|
111
|
+
|
|
112
|
+
EXAMPLES::
|
|
113
|
+
|
|
114
|
+
sage: W = WeylGroup(['A',5,1])
|
|
115
|
+
sage: PF = W.pieri_factors()
|
|
116
|
+
sage: PF.cardinality()
|
|
117
|
+
63
|
|
118
|
+
|
|
119
|
+
sage: W = WeylGroup(['B',3])
|
|
120
|
+
sage: PF = W.pieri_factors()
|
|
121
|
+
sage: sorted([w.reduced_word() for w in PF])
|
|
122
|
+
[[],
|
|
123
|
+
[1],
|
|
124
|
+
[1, 2],
|
|
125
|
+
[1, 2, 1],
|
|
126
|
+
[1, 2, 3],
|
|
127
|
+
[1, 2, 3, 1],
|
|
128
|
+
[1, 2, 3, 2],
|
|
129
|
+
[1, 2, 3, 2, 1],
|
|
130
|
+
[2],
|
|
131
|
+
[2, 1],
|
|
132
|
+
[2, 3],
|
|
133
|
+
[2, 3, 1],
|
|
134
|
+
[2, 3, 2],
|
|
135
|
+
[2, 3, 2, 1],
|
|
136
|
+
[3],
|
|
137
|
+
[3, 1],
|
|
138
|
+
[3, 1, 2],
|
|
139
|
+
[3, 1, 2, 1],
|
|
140
|
+
[3, 2],
|
|
141
|
+
[3, 2, 1]]
|
|
142
|
+
sage: W = WeylGroup(['C',4,1])
|
|
143
|
+
sage: PF = W.pieri_factors()
|
|
144
|
+
sage: W.from_reduced_word([3,2,0]) in PF
|
|
145
|
+
True
|
|
146
|
+
"""
|
|
147
|
+
# Do not remove this line which makes sure the pieri factor
|
|
148
|
+
# code is properly inserted inside the Cartan Types
|
|
149
|
+
import sage.combinat.root_system.pieri_factors
|
|
150
|
+
assert sage.combinat.root_system.pieri_factors
|
|
151
|
+
ct = self.cartan_type()
|
|
152
|
+
if hasattr(ct, "PieriFactors"):
|
|
153
|
+
return ct.PieriFactors(self, *args, **keywords)
|
|
154
|
+
raise NotImplementedError("Pieri factors for type {}".format(ct))
|
|
155
|
+
|
|
156
|
+
def bruhat_cone(self, x, y, side='upper', backend='cdd'):
|
|
157
|
+
r"""
|
|
158
|
+
Return the (upper or lower) Bruhat cone associated to the interval ``[x,y]``.
|
|
159
|
+
|
|
160
|
+
To a cover relation `v \prec w` in strong Bruhat order you can assign a positive
|
|
161
|
+
root `\beta` given by the unique reflection `s_\beta` such that `s_\beta v = w`.
|
|
162
|
+
|
|
163
|
+
The upper Bruhat cone of the interval `[x,y]` is the non-empty, polyhedral cone generated
|
|
164
|
+
by the roots corresponding to `x \prec a` for all atoms `a` in the interval.
|
|
165
|
+
The lower Bruhat cone of the interval `[x,y]` is the non-empty, polyhedral cone generated
|
|
166
|
+
by the roots corresponding to `c \prec y` for all coatoms `c` in the interval.
|
|
167
|
+
|
|
168
|
+
INPUT:
|
|
169
|
+
|
|
170
|
+
- ``x`` -- an element in the group `W`
|
|
171
|
+
|
|
172
|
+
- ``y`` -- an element in the group `W`
|
|
173
|
+
|
|
174
|
+
- ``side`` -- (default: ``'upper'``) must be one of the following:
|
|
175
|
+
|
|
176
|
+
* ``'upper'`` -- return the upper Bruhat cone of the interval [``x``, ``y``]
|
|
177
|
+
* ``'lower'`` -- return the lower Bruhat cone of the interval [``x``, ``y``]
|
|
178
|
+
|
|
179
|
+
- ``backend`` -- string (default: ``'cdd'``); the backend to use to create the polyhedron
|
|
180
|
+
|
|
181
|
+
EXAMPLES::
|
|
182
|
+
|
|
183
|
+
sage: W = WeylGroup(['A',2])
|
|
184
|
+
sage: x = W.from_reduced_word([1])
|
|
185
|
+
sage: y = W.w0
|
|
186
|
+
sage: W.bruhat_cone(x, y) # needs cddexec_gmp
|
|
187
|
+
A 2-dimensional polyhedron in QQ^3
|
|
188
|
+
defined as the convex hull of 1 vertex and 2 rays
|
|
189
|
+
|
|
190
|
+
sage: W = WeylGroup(['E',6])
|
|
191
|
+
sage: x = W.one()
|
|
192
|
+
sage: y = W.w0
|
|
193
|
+
sage: W.bruhat_cone(x, y, side='lower') # needs cddexec_gmp
|
|
194
|
+
A 6-dimensional polyhedron in QQ^8
|
|
195
|
+
defined as the convex hull of 1 vertex and 6 rays
|
|
196
|
+
|
|
197
|
+
TESTS::
|
|
198
|
+
|
|
199
|
+
sage: W = WeylGroup(['A',2])
|
|
200
|
+
sage: x = W.one()
|
|
201
|
+
sage: y = W.w0
|
|
202
|
+
sage: W.bruhat_cone(x, y, side='nonsense')
|
|
203
|
+
Traceback (most recent call last):
|
|
204
|
+
...
|
|
205
|
+
ValueError: side must be either 'upper' or 'lower'
|
|
206
|
+
|
|
207
|
+
REFERENCES:
|
|
208
|
+
|
|
209
|
+
- [Dy1994]_
|
|
210
|
+
- [JS2021]_
|
|
211
|
+
"""
|
|
212
|
+
from sage.modules.free_module_element import vector
|
|
213
|
+
if side == 'upper':
|
|
214
|
+
roots = [vector((x * r * x.inverse()).reflection_to_root().to_ambient())
|
|
215
|
+
for z, r in x.bruhat_upper_covers_reflections()
|
|
216
|
+
if z.bruhat_le(y)]
|
|
217
|
+
elif side == 'lower':
|
|
218
|
+
roots = [vector((y * r * y.inverse()).reflection_to_root().to_ambient())
|
|
219
|
+
for z, r in y.bruhat_lower_covers_reflections()
|
|
220
|
+
if x.bruhat_le(z)]
|
|
221
|
+
else:
|
|
222
|
+
raise ValueError("side must be either 'upper' or 'lower'")
|
|
223
|
+
|
|
224
|
+
from sage.geometry.polyhedron.constructor import Polyhedron
|
|
225
|
+
return Polyhedron(vertices=[vector([0] * self.degree())],
|
|
226
|
+
rays=roots,
|
|
227
|
+
ambient_dim=self.degree(),
|
|
228
|
+
backend=backend)
|
|
229
|
+
|
|
230
|
+
@cached_method
|
|
231
|
+
def quantum_bruhat_graph(self, index_set=()):
|
|
232
|
+
r"""
|
|
233
|
+
Return the quantum Bruhat graph of the quotient of the Weyl
|
|
234
|
+
group by a parabolic subgroup `W_J`.
|
|
235
|
+
|
|
236
|
+
INPUT:
|
|
237
|
+
|
|
238
|
+
- ``index_set`` -- (default: ()) a tuple `J` of nodes of
|
|
239
|
+
the Dynkin diagram
|
|
240
|
+
|
|
241
|
+
By default, the value for ``index_set`` indicates that the
|
|
242
|
+
subgroup is trivial and the quotient is the full Weyl group.
|
|
243
|
+
|
|
244
|
+
EXAMPLES::
|
|
245
|
+
|
|
246
|
+
sage: W = WeylGroup(['A',3], prefix='s')
|
|
247
|
+
sage: g = W.quantum_bruhat_graph((1,3))
|
|
248
|
+
sage: g
|
|
249
|
+
Parabolic Quantum Bruhat Graph of Weyl Group of type ['A', 3]
|
|
250
|
+
(as a matrix group acting on the ambient space)
|
|
251
|
+
for nodes (1, 3): Digraph on 6 vertices
|
|
252
|
+
sage: g.vertices(sort=True)
|
|
253
|
+
[s2*s3*s1*s2, s3*s1*s2, s1*s2, s3*s2, s2, 1]
|
|
254
|
+
sage: g.edges(sort=True)
|
|
255
|
+
[(s2*s3*s1*s2, s2, alpha[2]),
|
|
256
|
+
(s3*s1*s2, s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3]),
|
|
257
|
+
(s3*s1*s2, 1, alpha[2]),
|
|
258
|
+
(s1*s2, s3*s1*s2, alpha[2] + alpha[3]),
|
|
259
|
+
(s3*s2, s3*s1*s2, alpha[1] + alpha[2]),
|
|
260
|
+
(s2, s1*s2, alpha[1] + alpha[2]),
|
|
261
|
+
(s2, s3*s2, alpha[2] + alpha[3]),
|
|
262
|
+
(1, s2, alpha[2])]
|
|
263
|
+
sage: W = WeylGroup(['A',3,1], prefix='s')
|
|
264
|
+
sage: g = W.quantum_bruhat_graph()
|
|
265
|
+
Traceback (most recent call last):
|
|
266
|
+
...
|
|
267
|
+
ValueError: the Cartan type ['A', 3, 1] is not finite
|
|
268
|
+
"""
|
|
269
|
+
if not self.cartan_type().is_finite():
|
|
270
|
+
raise ValueError("the Cartan type {} is not finite".format(self.cartan_type()))
|
|
271
|
+
|
|
272
|
+
# This is a modified form of quantum_bruhat_successors.
|
|
273
|
+
# It does not do any error checking and also is more efficient
|
|
274
|
+
# with how it handles memory and checks by using data stored
|
|
275
|
+
# at this function level rather than recomputing everything.
|
|
276
|
+
lattice = self.cartan_type().root_system().root_lattice()
|
|
277
|
+
NPR = lattice.nonparabolic_positive_roots(index_set)
|
|
278
|
+
NPR_sum = sum(NPR)
|
|
279
|
+
NPR_data = {}
|
|
280
|
+
double_rho = lattice.sum(lattice.positive_roots()) # = 2 * \rho
|
|
281
|
+
for alpha in NPR:
|
|
282
|
+
ref = alpha.associated_reflection()
|
|
283
|
+
alphacheck = alpha.associated_coroot()
|
|
284
|
+
NPR_data[alpha] = [self.from_reduced_word(ref), # the element
|
|
285
|
+
len(ref) == double_rho.scalar(alphacheck) - 1, # is_quantum
|
|
286
|
+
NPR_sum.scalar(alphacheck)] # the scalar
|
|
287
|
+
# We also create a temporary cache of lengths as they are
|
|
288
|
+
# relatively expensive to compute and needed frequently
|
|
289
|
+
visited = {}
|
|
290
|
+
todo = {self.one()}
|
|
291
|
+
len_cache = {}
|
|
292
|
+
|
|
293
|
+
def length(x):
|
|
294
|
+
if x in len_cache:
|
|
295
|
+
return len_cache[x]
|
|
296
|
+
len_cache[x] = x.length()
|
|
297
|
+
return len_cache[x]
|
|
298
|
+
while todo:
|
|
299
|
+
x = todo.pop()
|
|
300
|
+
w_length_plus_one = length(x) + 1
|
|
301
|
+
adj = {}
|
|
302
|
+
for alpha in NPR:
|
|
303
|
+
elt, is_quantum, scalar = NPR_data[alpha]
|
|
304
|
+
wr = x * elt
|
|
305
|
+
wrc = wr.coset_representative(index_set)
|
|
306
|
+
# coset_representative returns wr if nothing gets changed
|
|
307
|
+
if wrc is wr and length(wrc) == w_length_plus_one:
|
|
308
|
+
if wrc not in visited:
|
|
309
|
+
todo.add(wrc)
|
|
310
|
+
adj[wr] = alpha
|
|
311
|
+
elif is_quantum and length(wrc) == w_length_plus_one - scalar:
|
|
312
|
+
if wrc not in visited:
|
|
313
|
+
todo.add(wrc)
|
|
314
|
+
adj[wrc] = alpha
|
|
315
|
+
visited[x] = adj
|
|
316
|
+
|
|
317
|
+
from sage.graphs.digraph import DiGraph
|
|
318
|
+
return DiGraph(visited,
|
|
319
|
+
name="Parabolic Quantum Bruhat Graph of %s for nodes %s" % (self, index_set),
|
|
320
|
+
format='dict_of_dicts',
|
|
321
|
+
data_structure='static_sparse')
|
|
322
|
+
|
|
323
|
+
class ElementMethods:
|
|
324
|
+
|
|
325
|
+
def is_pieri_factor(self):
|
|
326
|
+
r"""
|
|
327
|
+
Return whether ``self`` is a Pieri factor, as used for
|
|
328
|
+
computing Stanley symmetric functions.
|
|
329
|
+
|
|
330
|
+
.. SEEALSO::
|
|
331
|
+
|
|
332
|
+
* :meth:`stanley_symmetric_function`
|
|
333
|
+
* :meth:`WeylGroups.ParentMethods.pieri_factors`
|
|
334
|
+
|
|
335
|
+
EXAMPLES::
|
|
336
|
+
|
|
337
|
+
sage: W = WeylGroup(['A',5,1])
|
|
338
|
+
sage: W.from_reduced_word([3,2,5]).is_pieri_factor()
|
|
339
|
+
True
|
|
340
|
+
sage: W.from_reduced_word([3,2,4,5]).is_pieri_factor()
|
|
341
|
+
False
|
|
342
|
+
|
|
343
|
+
sage: W = WeylGroup(['C',4,1])
|
|
344
|
+
sage: W.from_reduced_word([0,2,1]).is_pieri_factor()
|
|
345
|
+
True
|
|
346
|
+
sage: W.from_reduced_word([0,2,1,0]).is_pieri_factor()
|
|
347
|
+
False
|
|
348
|
+
|
|
349
|
+
sage: W = WeylGroup(['B',3])
|
|
350
|
+
sage: W.from_reduced_word([3,2,3]).is_pieri_factor()
|
|
351
|
+
False
|
|
352
|
+
sage: W.from_reduced_word([2,1,2]).is_pieri_factor()
|
|
353
|
+
True
|
|
354
|
+
"""
|
|
355
|
+
|
|
356
|
+
return self in self.parent().pieri_factors()
|
|
357
|
+
|
|
358
|
+
def left_pieri_factorizations(self, max_length=None):
|
|
359
|
+
r"""
|
|
360
|
+
Return all factorizations of ``self`` as `uv`, where `u`
|
|
361
|
+
is a Pieri factor and `v` is an element of the Weyl group.
|
|
362
|
+
|
|
363
|
+
.. SEEALSO::
|
|
364
|
+
|
|
365
|
+
* :meth:`WeylGroups.ParentMethods.pieri_factors`
|
|
366
|
+
* :mod:`sage.combinat.root_system.pieri_factors`
|
|
367
|
+
|
|
368
|
+
EXAMPLES:
|
|
369
|
+
|
|
370
|
+
If we take `w = w_0` the maximal element of a strict parabolic
|
|
371
|
+
subgroup of type `A_{n_1} \times \cdots \times A_{n_k}`, then the Pieri
|
|
372
|
+
factorizations are in correspondence with all Pieri factors, and
|
|
373
|
+
there are `\prod 2^{n_i}` of them::
|
|
374
|
+
|
|
375
|
+
sage: W = WeylGroup(['A', 4, 1])
|
|
376
|
+
sage: W.from_reduced_word([]).left_pieri_factorizations().cardinality()
|
|
377
|
+
1
|
|
378
|
+
sage: W.from_reduced_word([1]).left_pieri_factorizations().cardinality()
|
|
379
|
+
2
|
|
380
|
+
sage: W.from_reduced_word([1,2,1]).left_pieri_factorizations().cardinality()
|
|
381
|
+
4
|
|
382
|
+
sage: W.from_reduced_word([1,2,3,1,2,1]).left_pieri_factorizations().cardinality()
|
|
383
|
+
8
|
|
384
|
+
|
|
385
|
+
sage: W.from_reduced_word([1,3]).left_pieri_factorizations().cardinality()
|
|
386
|
+
4
|
|
387
|
+
sage: W.from_reduced_word([1,3,4,3]).left_pieri_factorizations().cardinality()
|
|
388
|
+
8
|
|
389
|
+
|
|
390
|
+
sage: W.from_reduced_word([2,1]).left_pieri_factorizations().cardinality()
|
|
391
|
+
3
|
|
392
|
+
sage: W.from_reduced_word([1,2]).left_pieri_factorizations().cardinality()
|
|
393
|
+
2
|
|
394
|
+
sage: [W.from_reduced_word([1,2]).left_pieri_factorizations(max_length=i).cardinality()
|
|
395
|
+
....: for i in [-1, 0, 1, 2]]
|
|
396
|
+
[0, 1, 2, 2]
|
|
397
|
+
|
|
398
|
+
sage: W = WeylGroup(['C',4,1])
|
|
399
|
+
sage: w = W.from_reduced_word([0,3,2,1,0])
|
|
400
|
+
sage: w.left_pieri_factorizations().cardinality()
|
|
401
|
+
7
|
|
402
|
+
sage: [(u.reduced_word(),v.reduced_word())
|
|
403
|
+
....: for (u,v) in w.left_pieri_factorizations()]
|
|
404
|
+
[([], [3, 2, 0, 1, 0]),
|
|
405
|
+
([0], [3, 2, 1, 0]),
|
|
406
|
+
([3], [2, 0, 1, 0]),
|
|
407
|
+
([3, 0], [2, 1, 0]),
|
|
408
|
+
([3, 2], [0, 1, 0]),
|
|
409
|
+
([3, 2, 0], [1, 0]),
|
|
410
|
+
([3, 2, 0, 1], [0])]
|
|
411
|
+
|
|
412
|
+
sage: W = WeylGroup(['B',4,1])
|
|
413
|
+
sage: W.from_reduced_word([0,2,1,0]).left_pieri_factorizations().cardinality()
|
|
414
|
+
6
|
|
415
|
+
"""
|
|
416
|
+
if max_length is None:
|
|
417
|
+
from sage.rings.infinity import infinity
|
|
418
|
+
max_length = infinity
|
|
419
|
+
pieri_factors = self.parent().pieri_factors()
|
|
420
|
+
|
|
421
|
+
def predicate(u):
|
|
422
|
+
return u in pieri_factors and u.length() <= max_length
|
|
423
|
+
|
|
424
|
+
return self.binary_factorizations(predicate)
|
|
425
|
+
|
|
426
|
+
@cached_in_parent_method
|
|
427
|
+
def stanley_symmetric_function_as_polynomial(self, max_length=None):
|
|
428
|
+
r"""
|
|
429
|
+
Return a multivariate generating function for the number
|
|
430
|
+
of factorizations of a Weyl group element into Pieri
|
|
431
|
+
factors of decreasing length, weighted by a statistic on
|
|
432
|
+
Pieri factors.
|
|
433
|
+
|
|
434
|
+
.. SEEALSO::
|
|
435
|
+
|
|
436
|
+
* :meth:`stanley_symmetric_function`
|
|
437
|
+
* :meth:`WeylGroups.ParentMethods.pieri_factors`
|
|
438
|
+
* :mod:`sage.combinat.root_system.pieri_factors`
|
|
439
|
+
|
|
440
|
+
INPUT:
|
|
441
|
+
|
|
442
|
+
- ``self`` -- an element `w` of a Weyl group `W`
|
|
443
|
+
- ``max_length`` -- nonnegative integer or infinity (default: infinity)
|
|
444
|
+
|
|
445
|
+
Returns the generating series for the Pieri factorizations
|
|
446
|
+
`w = u_1 \cdots u_k`, where `u_i` is a Pieri factor for
|
|
447
|
+
all `i`, `l(w) = \sum_{i=1}^k l(u_i)` and
|
|
448
|
+
``max_length`` `\geq l(u_1) \geq \cdots \geq l(u_k)`.
|
|
449
|
+
|
|
450
|
+
A factorization `u_1 \cdots u_k` contributes a monomial of
|
|
451
|
+
the form `\prod_i x_{l(u_i)}`, with coefficient given by
|
|
452
|
+
`\prod_i 2^{c(u_i)}`, where `c` is a type-dependent
|
|
453
|
+
statistic on Pieri factors, as returned by the method
|
|
454
|
+
``u[i].stanley_symm_poly_weight()``.
|
|
455
|
+
|
|
456
|
+
EXAMPLES::
|
|
457
|
+
|
|
458
|
+
sage: W = WeylGroup(['A', 3, 1])
|
|
459
|
+
sage: W.from_reduced_word([]).stanley_symmetric_function_as_polynomial()
|
|
460
|
+
1
|
|
461
|
+
sage: W.from_reduced_word([1]).stanley_symmetric_function_as_polynomial()
|
|
462
|
+
x1
|
|
463
|
+
sage: W.from_reduced_word([1,2]).stanley_symmetric_function_as_polynomial()
|
|
464
|
+
x1^2
|
|
465
|
+
sage: W.from_reduced_word([2,1]).stanley_symmetric_function_as_polynomial()
|
|
466
|
+
x1^2 + x2
|
|
467
|
+
sage: W.from_reduced_word([1,2,1]).stanley_symmetric_function_as_polynomial()
|
|
468
|
+
2*x1^3 + x1*x2
|
|
469
|
+
sage: W.from_reduced_word([1,2,1,0]).stanley_symmetric_function_as_polynomial()
|
|
470
|
+
3*x1^4 + 2*x1^2*x2 + x2^2 + x1*x3
|
|
471
|
+
sage: x = W.from_reduced_word([1,2,3,1,2,1,0])
|
|
472
|
+
sage: x.stanley_symmetric_function_as_polynomial() # long time
|
|
473
|
+
22*x1^7 + 11*x1^5*x2 + 5*x1^3*x2^2 + 3*x1^4*x3 + 2*x1*x2^3 + x1^2*x2*x3
|
|
474
|
+
sage: y = W.from_reduced_word([3,1,2,0,3,1,0])
|
|
475
|
+
sage: y.stanley_symmetric_function_as_polynomial() # long time
|
|
476
|
+
8*x1^7 + 4*x1^5*x2 + 2*x1^3*x2^2 + x1*x2^3
|
|
477
|
+
|
|
478
|
+
sage: W = WeylGroup(['C',3,1])
|
|
479
|
+
sage: W.from_reduced_word([0,2,1,0]).stanley_symmetric_function_as_polynomial()
|
|
480
|
+
32*x1^4 + 16*x1^2*x2 + 8*x2^2 + 4*x1*x3
|
|
481
|
+
|
|
482
|
+
sage: W = WeylGroup(['B',3,1])
|
|
483
|
+
sage: W.from_reduced_word([3,2,1]).stanley_symmetric_function_as_polynomial()
|
|
484
|
+
2*x1^3 + x1*x2 + 1/2*x3
|
|
485
|
+
|
|
486
|
+
Algorithm: Induction on the left Pieri factors. Note that
|
|
487
|
+
this induction preserves subsets of `W` which are stable
|
|
488
|
+
by taking right factors, and in particular Grassmanian
|
|
489
|
+
elements.
|
|
490
|
+
"""
|
|
491
|
+
if max_length is None:
|
|
492
|
+
from sage.rings.infinity import infinity
|
|
493
|
+
max_length = infinity
|
|
494
|
+
W = self.parent()
|
|
495
|
+
pieri_factors = W.pieri_factors()
|
|
496
|
+
from sage.rings.rational_field import QQ
|
|
497
|
+
R = QQ[','.join('x%s' % l for l in range(1, pieri_factors.max_length() + 1))]
|
|
498
|
+
x = R.gens()
|
|
499
|
+
if self.is_one():
|
|
500
|
+
return R.one()
|
|
501
|
+
|
|
502
|
+
return R(sum(2**(pieri_factors.stanley_symm_poly_weight(u)) * x[u.length() - 1] * v.stanley_symmetric_function_as_polynomial(max_length=u.length())
|
|
503
|
+
for (u, v) in self.left_pieri_factorizations(max_length)
|
|
504
|
+
if u != W.one()))
|
|
505
|
+
|
|
506
|
+
def stanley_symmetric_function(self):
|
|
507
|
+
r"""
|
|
508
|
+
Return the affine Stanley symmetric function indexed by ``self``.
|
|
509
|
+
|
|
510
|
+
INPUT:
|
|
511
|
+
|
|
512
|
+
- ``self`` -- an element `w` of a Weyl group
|
|
513
|
+
|
|
514
|
+
Returns the affine Stanley symmetric function indexed by
|
|
515
|
+
`w`. Stanley symmetric functions are defined as generating
|
|
516
|
+
series of the factorizations of `w` into Pieri factors and
|
|
517
|
+
weighted by a statistic on Pieri factors.
|
|
518
|
+
|
|
519
|
+
.. SEEALSO::
|
|
520
|
+
|
|
521
|
+
* :meth:`stanley_symmetric_function_as_polynomial`
|
|
522
|
+
* :meth:`WeylGroups.ParentMethods.pieri_factors`
|
|
523
|
+
* :mod:`sage.combinat.root_system.pieri_factors`
|
|
524
|
+
|
|
525
|
+
EXAMPLES::
|
|
526
|
+
|
|
527
|
+
sage: W = WeylGroup(['A', 3, 1])
|
|
528
|
+
sage: W.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
|
|
529
|
+
8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
|
|
530
|
+
+ 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]
|
|
531
|
+
sage: A = AffinePermutationGroup(['A',3,1])
|
|
532
|
+
sage: A.from_reduced_word([3,1,2,0,3,1,0]).stanley_symmetric_function()
|
|
533
|
+
8*m[1, 1, 1, 1, 1, 1, 1] + 4*m[2, 1, 1, 1, 1, 1]
|
|
534
|
+
+ 2*m[2, 2, 1, 1, 1] + m[2, 2, 2, 1]
|
|
535
|
+
|
|
536
|
+
sage: W = WeylGroup(['C',3,1])
|
|
537
|
+
sage: W.from_reduced_word([0,2,1,0]).stanley_symmetric_function()
|
|
538
|
+
32*m[1, 1, 1, 1] + 16*m[2, 1, 1] + 8*m[2, 2] + 4*m[3, 1]
|
|
539
|
+
|
|
540
|
+
sage: W = WeylGroup(['B',3,1])
|
|
541
|
+
sage: W.from_reduced_word([3,2,1]).stanley_symmetric_function()
|
|
542
|
+
2*m[1, 1, 1] + m[2, 1] + 1/2*m[3]
|
|
543
|
+
|
|
544
|
+
sage: W = WeylGroup(['B',4])
|
|
545
|
+
sage: w = W.from_reduced_word([3,2,3,1])
|
|
546
|
+
sage: w.stanley_symmetric_function() # long time (6s on sage.math, 2011)
|
|
547
|
+
48*m[1, 1, 1, 1] + 24*m[2, 1, 1] + 12*m[2, 2] + 8*m[3, 1] + 2*m[4]
|
|
548
|
+
|
|
549
|
+
sage: A = AffinePermutationGroup(['A',4,1])
|
|
550
|
+
sage: a = A([-2,0,1,4,12])
|
|
551
|
+
sage: a.stanley_symmetric_function()
|
|
552
|
+
6*m[1, 1, 1, 1, 1, 1, 1, 1] + 5*m[2, 1, 1, 1, 1, 1, 1]
|
|
553
|
+
+ 4*m[2, 2, 1, 1, 1, 1] + 3*m[2, 2, 2, 1, 1] + 2*m[2, 2, 2, 2]
|
|
554
|
+
+ 4*m[3, 1, 1, 1, 1, 1] + 3*m[3, 2, 1, 1, 1] + 2*m[3, 2, 2, 1]
|
|
555
|
+
+ 2*m[3, 3, 1, 1] + m[3, 3, 2] + 3*m[4, 1, 1, 1, 1]
|
|
556
|
+
+ 2*m[4, 2, 1, 1] + m[4, 2, 2] + m[4, 3, 1]
|
|
557
|
+
|
|
558
|
+
One more example (:issue:`14095`)::
|
|
559
|
+
|
|
560
|
+
sage: G = SymmetricGroup(4)
|
|
561
|
+
sage: w = G.from_reduced_word([3,2,3,1])
|
|
562
|
+
sage: w.stanley_symmetric_function()
|
|
563
|
+
3*m[1, 1, 1, 1] + 2*m[2, 1, 1] + m[2, 2] + m[3, 1]
|
|
564
|
+
|
|
565
|
+
REFERENCES:
|
|
566
|
+
|
|
567
|
+
- [BH1994]_
|
|
568
|
+
|
|
569
|
+
- [Lam2008]_
|
|
570
|
+
|
|
571
|
+
- [LSS2009]_
|
|
572
|
+
|
|
573
|
+
- [Pon2010]_
|
|
574
|
+
"""
|
|
575
|
+
from sage.rings.rational_field import QQ
|
|
576
|
+
from sage.combinat.sf.sf import SymmetricFunctions
|
|
577
|
+
|
|
578
|
+
m = SymmetricFunctions(QQ).monomial()
|
|
579
|
+
return m.from_polynomial_exp(self.stanley_symmetric_function_as_polynomial())
|
|
580
|
+
|
|
581
|
+
@cached_in_parent_method
|
|
582
|
+
def reflection_to_root(self):
|
|
583
|
+
r"""
|
|
584
|
+
Return the root associated with the reflection ``self``.
|
|
585
|
+
|
|
586
|
+
EXAMPLES::
|
|
587
|
+
|
|
588
|
+
sage: W = WeylGroup(['C',2], prefix='s')
|
|
589
|
+
sage: W.from_reduced_word([1,2,1]).reflection_to_root()
|
|
590
|
+
2*alpha[1] + alpha[2]
|
|
591
|
+
sage: W.from_reduced_word([1,2]).reflection_to_root()
|
|
592
|
+
Traceback (most recent call last):
|
|
593
|
+
...
|
|
594
|
+
ValueError: s1*s2 is not a reflection
|
|
595
|
+
sage: W.long_element().reflection_to_root()
|
|
596
|
+
Traceback (most recent call last):
|
|
597
|
+
...
|
|
598
|
+
ValueError: s2*s1*s2*s1 is not a reflection
|
|
599
|
+
"""
|
|
600
|
+
i = self.first_descent()
|
|
601
|
+
if i is None:
|
|
602
|
+
raise ValueError("{} is not a reflection".format(self))
|
|
603
|
+
if self == self.parent().simple_reflection(i):
|
|
604
|
+
return self.parent().cartan_type().root_system().root_lattice().simple_root(i)
|
|
605
|
+
rsi = self.apply_simple_reflection(i)
|
|
606
|
+
if not rsi.has_descent(i, side='left'):
|
|
607
|
+
raise ValueError("{} is not a reflection".format(self))
|
|
608
|
+
return rsi.apply_simple_reflection(i, side='left').reflection_to_root().simple_reflection(i)
|
|
609
|
+
|
|
610
|
+
@cached_in_parent_method
|
|
611
|
+
def reflection_to_coroot(self):
|
|
612
|
+
r"""
|
|
613
|
+
Return the coroot associated with the reflection ``self``.
|
|
614
|
+
|
|
615
|
+
EXAMPLES::
|
|
616
|
+
|
|
617
|
+
sage: W = WeylGroup(['C',2], prefix='s')
|
|
618
|
+
sage: W.from_reduced_word([1,2,1]).reflection_to_coroot()
|
|
619
|
+
alphacheck[1] + alphacheck[2]
|
|
620
|
+
sage: W.from_reduced_word([1,2]).reflection_to_coroot()
|
|
621
|
+
Traceback (most recent call last):
|
|
622
|
+
...
|
|
623
|
+
ValueError: s1*s2 is not a reflection
|
|
624
|
+
sage: W.long_element().reflection_to_coroot()
|
|
625
|
+
Traceback (most recent call last):
|
|
626
|
+
...
|
|
627
|
+
ValueError: s2*s1*s2*s1 is not a reflection
|
|
628
|
+
"""
|
|
629
|
+
i = self.first_descent()
|
|
630
|
+
if i is None:
|
|
631
|
+
raise ValueError("{} is not a reflection".format(self))
|
|
632
|
+
if self == self.parent().simple_reflection(i):
|
|
633
|
+
return self.parent().cartan_type().root_system().root_lattice().simple_coroot(i)
|
|
634
|
+
rsi = self.apply_simple_reflection(i)
|
|
635
|
+
if not rsi.has_descent(i, side='left'):
|
|
636
|
+
raise ValueError("{} is not a reflection".format(self))
|
|
637
|
+
return rsi.apply_simple_reflection(i, side='left').reflection_to_coroot().simple_reflection(i)
|
|
638
|
+
|
|
639
|
+
def inversions(self, side='right', inversion_type='reflections'):
|
|
640
|
+
"""
|
|
641
|
+
Return the set of inversions of ``self``.
|
|
642
|
+
|
|
643
|
+
INPUT:
|
|
644
|
+
|
|
645
|
+
- ``side`` -- 'right' (default) or 'left'
|
|
646
|
+
- ``inversion_type`` -- 'reflections' (default), 'roots', or 'coroots'
|
|
647
|
+
|
|
648
|
+
OUTPUT:
|
|
649
|
+
|
|
650
|
+
For reflections, the set of reflections r in the Weyl group such that
|
|
651
|
+
``self`` ``r`` < ``self``. For (co)roots, the set of positive (co)roots that are sent
|
|
652
|
+
by ``self`` to negative (co)roots; their associated reflections are described above.
|
|
653
|
+
|
|
654
|
+
If ``side`` is 'left', the inverse Weyl group element is used.
|
|
655
|
+
|
|
656
|
+
EXAMPLES::
|
|
657
|
+
|
|
658
|
+
sage: W = WeylGroup(['C',2], prefix='s')
|
|
659
|
+
sage: w = W.from_reduced_word([1,2])
|
|
660
|
+
sage: w.inversions()
|
|
661
|
+
[s2, s2*s1*s2]
|
|
662
|
+
sage: w.inversions(inversion_type = 'reflections')
|
|
663
|
+
[s2, s2*s1*s2]
|
|
664
|
+
sage: w.inversions(inversion_type = 'roots')
|
|
665
|
+
[alpha[2], alpha[1] + alpha[2]]
|
|
666
|
+
sage: w.inversions(inversion_type = 'coroots')
|
|
667
|
+
[alphacheck[2], alphacheck[1] + 2*alphacheck[2]]
|
|
668
|
+
sage: w.inversions(side = 'left')
|
|
669
|
+
[s1, s1*s2*s1]
|
|
670
|
+
sage: w.inversions(side = 'left', inversion_type = 'roots')
|
|
671
|
+
[alpha[1], 2*alpha[1] + alpha[2]]
|
|
672
|
+
sage: w.inversions(side = 'left', inversion_type = 'coroots')
|
|
673
|
+
[alphacheck[1], alphacheck[1] + alphacheck[2]]
|
|
674
|
+
"""
|
|
675
|
+
if side == 'left':
|
|
676
|
+
self = self.inverse()
|
|
677
|
+
reflections = self.inversions_as_reflections()
|
|
678
|
+
if inversion_type == 'reflections':
|
|
679
|
+
return reflections
|
|
680
|
+
if inversion_type == 'roots':
|
|
681
|
+
return [r.reflection_to_root() for r in reflections]
|
|
682
|
+
if inversion_type == 'coroots':
|
|
683
|
+
return [r.reflection_to_coroot() for r in reflections]
|
|
684
|
+
raise ValueError(f"inversion_type {inversion_type} is invalid")
|
|
685
|
+
|
|
686
|
+
def inversion_arrangement(self, side='right'):
|
|
687
|
+
r"""
|
|
688
|
+
Return the inversion hyperplane arrangement of ``self``.
|
|
689
|
+
|
|
690
|
+
INPUT:
|
|
691
|
+
|
|
692
|
+
- ``side`` -- ``'right'`` (default) or ``'left'``
|
|
693
|
+
|
|
694
|
+
OUTPUT:
|
|
695
|
+
|
|
696
|
+
A (central) hyperplane arrangement whose hyperplanes correspond
|
|
697
|
+
to the inversions of ``self`` given as roots.
|
|
698
|
+
|
|
699
|
+
The ``side`` parameter determines on which side
|
|
700
|
+
to compute the inversions.
|
|
701
|
+
|
|
702
|
+
EXAMPLES::
|
|
703
|
+
|
|
704
|
+
sage: W = WeylGroup(['A',3])
|
|
705
|
+
sage: w = W.from_reduced_word([1, 2, 3, 1, 2])
|
|
706
|
+
sage: A = w.inversion_arrangement(); A
|
|
707
|
+
Arrangement of 5 hyperplanes of dimension 3 and rank 3
|
|
708
|
+
sage: A.hyperplanes()
|
|
709
|
+
(Hyperplane 0*a1 + 0*a2 + a3 + 0,
|
|
710
|
+
Hyperplane 0*a1 + a2 + 0*a3 + 0,
|
|
711
|
+
Hyperplane 0*a1 + a2 + a3 + 0,
|
|
712
|
+
Hyperplane a1 + a2 + 0*a3 + 0,
|
|
713
|
+
Hyperplane a1 + a2 + a3 + 0)
|
|
714
|
+
|
|
715
|
+
The identity element gives the empty arrangement::
|
|
716
|
+
|
|
717
|
+
sage: W = WeylGroup(['A',3])
|
|
718
|
+
sage: W.one().inversion_arrangement()
|
|
719
|
+
Empty hyperplane arrangement of dimension 3
|
|
720
|
+
"""
|
|
721
|
+
inv = self.inversions(side=side, inversion_type='roots')
|
|
722
|
+
from sage.geometry.hyperplane_arrangement.arrangement import HyperplaneArrangements
|
|
723
|
+
I = self.parent().cartan_type().index_set()
|
|
724
|
+
from sage.rings.rational_field import QQ
|
|
725
|
+
H = HyperplaneArrangements(QQ, tuple(['a{}'.format(i) for i in I]))
|
|
726
|
+
gens = H.gens()
|
|
727
|
+
if not inv:
|
|
728
|
+
return H()
|
|
729
|
+
return H([sum(c * gens[I.index(i)] for (i, c) in root)
|
|
730
|
+
for root in inv])
|
|
731
|
+
|
|
732
|
+
def bruhat_lower_covers_coroots(self):
|
|
733
|
+
r"""
|
|
734
|
+
Return all 2-tuples (``v``, `\alpha`) where ``v`` is covered
|
|
735
|
+
by ``self`` and `\alpha` is the positive coroot such that
|
|
736
|
+
``self`` = ``v`` `s_\alpha` where `s_\alpha` is
|
|
737
|
+
the reflection orthogonal to `\alpha`.
|
|
738
|
+
|
|
739
|
+
ALGORITHM:
|
|
740
|
+
|
|
741
|
+
See :meth:`.bruhat_lower_covers` and
|
|
742
|
+
:meth:`.bruhat_lower_covers_reflections` for Coxeter groups.
|
|
743
|
+
|
|
744
|
+
EXAMPLES::
|
|
745
|
+
|
|
746
|
+
sage: W = WeylGroup(['A',3], prefix='s')
|
|
747
|
+
sage: w = W.from_reduced_word([3,1,2,1])
|
|
748
|
+
sage: w.bruhat_lower_covers_coroots()
|
|
749
|
+
[(s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3]),
|
|
750
|
+
(s3*s2*s1, alphacheck[2]), (s3*s1*s2, alphacheck[1])]
|
|
751
|
+
"""
|
|
752
|
+
return [(x[0], x[1].reflection_to_coroot())
|
|
753
|
+
for x in self.bruhat_lower_covers_reflections()]
|
|
754
|
+
|
|
755
|
+
def bruhat_upper_covers_coroots(self):
|
|
756
|
+
r"""
|
|
757
|
+
Return all 2-tuples (``v``, `\alpha`) where ``v`` is covers ``self`` and `\alpha`
|
|
758
|
+
is the positive coroot such that ``self`` = ``v`` `s_\alpha` where `s_\alpha` is
|
|
759
|
+
the reflection orthogonal to `\alpha`.
|
|
760
|
+
|
|
761
|
+
ALGORITHM:
|
|
762
|
+
|
|
763
|
+
See :meth:`~CoxeterGroups.ElementMethods.bruhat_upper_covers` and :meth:`.bruhat_upper_covers_reflections` for Coxeter groups.
|
|
764
|
+
|
|
765
|
+
EXAMPLES::
|
|
766
|
+
|
|
767
|
+
sage: W = WeylGroup(['A',4], prefix='s')
|
|
768
|
+
sage: w = W.from_reduced_word([3,1,2,1])
|
|
769
|
+
sage: w.bruhat_upper_covers_coroots()
|
|
770
|
+
[(s1*s2*s3*s2*s1, alphacheck[3]),
|
|
771
|
+
(s2*s3*s1*s2*s1, alphacheck[2] + alphacheck[3]),
|
|
772
|
+
(s3*s4*s1*s2*s1, alphacheck[4]),
|
|
773
|
+
(s4*s3*s1*s2*s1, alphacheck[1] + alphacheck[2] + alphacheck[3] + alphacheck[4])]
|
|
774
|
+
"""
|
|
775
|
+
return [(x[0], x[1].reflection_to_coroot())
|
|
776
|
+
for x in self.bruhat_upper_covers_reflections()]
|
|
777
|
+
|
|
778
|
+
def quantum_bruhat_successors(self, index_set=None, roots=False, quantum_only=False):
|
|
779
|
+
r"""
|
|
780
|
+
Return the successors of ``self`` in the quantum Bruhat graph
|
|
781
|
+
on the parabolic quotient of the Weyl group determined by the
|
|
782
|
+
subset of Dynkin nodes ``index_set``.
|
|
783
|
+
|
|
784
|
+
INPUT:
|
|
785
|
+
|
|
786
|
+
- ``self`` -- a Weyl group element, which is assumed to
|
|
787
|
+
be of minimum length in its coset with respect to the
|
|
788
|
+
parabolic subgroup
|
|
789
|
+
|
|
790
|
+
- ``index_set`` -- (default: ``None``) indicates the set of
|
|
791
|
+
simple reflections used to generate the parabolic subgroup;
|
|
792
|
+
the default value indicates that the subgroup is the identity
|
|
793
|
+
|
|
794
|
+
- ``roots`` -- boolean (default: ``False``); if ``True``, returns
|
|
795
|
+
the list of 2-tuples (``w``, `\alpha`) where ``w`` is a successor
|
|
796
|
+
and `\alpha` is the positive root associated with the
|
|
797
|
+
successor relation
|
|
798
|
+
|
|
799
|
+
- ``quantum_only`` -- boolean (default: ``False``); if ``True``,
|
|
800
|
+
returns only the quantum successors
|
|
801
|
+
|
|
802
|
+
EXAMPLES::
|
|
803
|
+
|
|
804
|
+
sage: W = WeylGroup(['A',3], prefix='s')
|
|
805
|
+
sage: w = W.from_reduced_word([3,1,2])
|
|
806
|
+
sage: w.quantum_bruhat_successors([1], roots = True)
|
|
807
|
+
[(s3, alpha[2]), (s1*s2*s3*s2, alpha[3]),
|
|
808
|
+
(s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
|
|
809
|
+
sage: w.quantum_bruhat_successors([1,3])
|
|
810
|
+
[1, s2*s3*s1*s2]
|
|
811
|
+
sage: w.quantum_bruhat_successors(roots = True)
|
|
812
|
+
[(s3*s1*s2*s1, alpha[1]),
|
|
813
|
+
(s3*s1, alpha[2]),
|
|
814
|
+
(s1*s2*s3*s2, alpha[3]),
|
|
815
|
+
(s2*s3*s1*s2, alpha[1] + alpha[2] + alpha[3])]
|
|
816
|
+
sage: w.quantum_bruhat_successors()
|
|
817
|
+
[s3*s1*s2*s1, s3*s1, s1*s2*s3*s2, s2*s3*s1*s2]
|
|
818
|
+
sage: w.quantum_bruhat_successors(quantum_only = True)
|
|
819
|
+
[s3*s1]
|
|
820
|
+
sage: w = W.from_reduced_word([2,3])
|
|
821
|
+
sage: w.quantum_bruhat_successors([1,3])
|
|
822
|
+
Traceback (most recent call last):
|
|
823
|
+
...
|
|
824
|
+
ValueError: s2*s3 is not of minimum length in its coset
|
|
825
|
+
of the parabolic subgroup generated by the reflections (1, 3)
|
|
826
|
+
"""
|
|
827
|
+
W = self.parent()
|
|
828
|
+
if not W.cartan_type().is_finite():
|
|
829
|
+
raise ValueError("the Cartan type {} is not finite".format(W.cartan_type()))
|
|
830
|
+
if index_set is None:
|
|
831
|
+
index_set = []
|
|
832
|
+
else:
|
|
833
|
+
index_set = list(index_set)
|
|
834
|
+
index_set = tuple(index_set)
|
|
835
|
+
if self != self.coset_representative(index_set):
|
|
836
|
+
raise ValueError("{} is not of minimum length in its coset of the parabolic subgroup generated by the reflections {}".format(self, index_set))
|
|
837
|
+
lattice = W.cartan_type().root_system().root_lattice()
|
|
838
|
+
w_length_plus_one = self.length() + 1
|
|
839
|
+
successors = []
|
|
840
|
+
for alpha in lattice.nonparabolic_positive_roots(index_set):
|
|
841
|
+
wr = self * W.from_reduced_word(alpha.associated_reflection())
|
|
842
|
+
wrc = wr.coset_representative(index_set)
|
|
843
|
+
if wrc == wr and wr.length() == w_length_plus_one and not quantum_only:
|
|
844
|
+
if roots:
|
|
845
|
+
successors.append((wr, alpha))
|
|
846
|
+
else:
|
|
847
|
+
successors.append(wr)
|
|
848
|
+
elif alpha.quantum_root() and wrc.length() == w_length_plus_one - lattice.nonparabolic_positive_root_sum(index_set).scalar(alpha.associated_coroot()):
|
|
849
|
+
if roots:
|
|
850
|
+
successors.append((wrc, alpha))
|
|
851
|
+
else:
|
|
852
|
+
successors.append(wrc)
|
|
853
|
+
return successors
|