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,898 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-categories
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs sage.modules
|
|
3
|
+
r"""
|
|
4
|
+
Regular Crystals
|
|
5
|
+
"""
|
|
6
|
+
#*****************************************************************************
|
|
7
|
+
# Copyright (C) 2013 Anne Schilling <anne at math.ucdavis.edu>
|
|
8
|
+
# Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
9
|
+
#
|
|
10
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
11
|
+
#
|
|
12
|
+
# This code is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
15
|
+
# General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# The full text of the GPL is available at:
|
|
18
|
+
#
|
|
19
|
+
# http://www.gnu.org/licenses/
|
|
20
|
+
#****************************************************************************
|
|
21
|
+
|
|
22
|
+
from sage.misc.cachefunc import cached_method
|
|
23
|
+
from sage.categories.category_singleton import Category_singleton
|
|
24
|
+
from sage.categories.crystals import Crystals
|
|
25
|
+
from sage.categories.tensor import TensorProductsCategory
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class RegularCrystals(Category_singleton):
|
|
29
|
+
r"""
|
|
30
|
+
The category of regular crystals.
|
|
31
|
+
|
|
32
|
+
A crystal is called *regular* if every vertex `b` satisfies
|
|
33
|
+
|
|
34
|
+
.. MATH::
|
|
35
|
+
|
|
36
|
+
\varepsilon_i(b) = \max\{ k \mid e_i^k(b) \neq 0 \} \quad \text{and}
|
|
37
|
+
\quad \varphi_i(b) = \max\{ k \mid f_i^k(b) \neq 0 \}.
|
|
38
|
+
|
|
39
|
+
.. NOTE::
|
|
40
|
+
|
|
41
|
+
Regular crystals are sometimes referred to as *normal*. When only one
|
|
42
|
+
of the conditions (on either `\varphi_i` or `\varepsilon_i`) holds,
|
|
43
|
+
these crystals are sometimes called *seminormal* or *semiregular*.
|
|
44
|
+
|
|
45
|
+
EXAMPLES::
|
|
46
|
+
|
|
47
|
+
sage: C = RegularCrystals()
|
|
48
|
+
sage: C
|
|
49
|
+
Category of regular crystals
|
|
50
|
+
sage: C.super_categories()
|
|
51
|
+
[Category of crystals]
|
|
52
|
+
sage: C.example()
|
|
53
|
+
Highest weight crystal of type A_3 of highest weight omega_1
|
|
54
|
+
|
|
55
|
+
TESTS::
|
|
56
|
+
|
|
57
|
+
sage: TestSuite(C).run()
|
|
58
|
+
sage: B = RegularCrystals().example()
|
|
59
|
+
sage: TestSuite(B).run(verbose = True)
|
|
60
|
+
running ._test_an_element() . . . pass
|
|
61
|
+
running ._test_cardinality() . . . pass
|
|
62
|
+
running ._test_category() . . . pass
|
|
63
|
+
running ._test_construction() . . . pass
|
|
64
|
+
running ._test_elements() . . .
|
|
65
|
+
Running the test suite of self.an_element()
|
|
66
|
+
running ._test_category() . . . pass
|
|
67
|
+
running ._test_eq() . . . pass
|
|
68
|
+
running ._test_new() . . . pass
|
|
69
|
+
running ._test_not_implemented_methods() . . . pass
|
|
70
|
+
running ._test_pickling() . . . pass
|
|
71
|
+
running ._test_stembridge_local_axioms() . . . pass
|
|
72
|
+
pass
|
|
73
|
+
running ._test_elements_eq_reflexive() . . . pass
|
|
74
|
+
running ._test_elements_eq_symmetric() . . . pass
|
|
75
|
+
running ._test_elements_eq_transitive() . . . pass
|
|
76
|
+
running ._test_elements_neq() . . . pass
|
|
77
|
+
running ._test_enumerated_set_contains() . . . pass
|
|
78
|
+
running ._test_enumerated_set_iter_cardinality() . . . pass
|
|
79
|
+
running ._test_enumerated_set_iter_list() . . . pass
|
|
80
|
+
running ._test_eq() . . . pass
|
|
81
|
+
running ._test_fast_iter() . . . pass
|
|
82
|
+
running ._test_new() . . . pass
|
|
83
|
+
running ._test_not_implemented_methods() . . . pass
|
|
84
|
+
running ._test_pickling() . . . pass
|
|
85
|
+
running ._test_some_elements() . . . pass
|
|
86
|
+
running ._test_stembridge_local_axioms() . . . pass
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
@cached_method
|
|
90
|
+
def super_categories(self):
|
|
91
|
+
r"""
|
|
92
|
+
EXAMPLES::
|
|
93
|
+
|
|
94
|
+
sage: RegularCrystals().super_categories()
|
|
95
|
+
[Category of crystals]
|
|
96
|
+
"""
|
|
97
|
+
return [Crystals()]
|
|
98
|
+
|
|
99
|
+
def example(self, n=3):
|
|
100
|
+
"""
|
|
101
|
+
Return an example of highest weight crystals, as per
|
|
102
|
+
:meth:`Category.example`.
|
|
103
|
+
|
|
104
|
+
EXAMPLES::
|
|
105
|
+
|
|
106
|
+
sage: B = RegularCrystals().example(); B
|
|
107
|
+
Highest weight crystal of type A_3 of highest weight omega_1
|
|
108
|
+
"""
|
|
109
|
+
from sage.categories.crystals import Crystals
|
|
110
|
+
return Crystals().example(n)
|
|
111
|
+
|
|
112
|
+
def additional_structure(self):
|
|
113
|
+
r"""
|
|
114
|
+
Return ``None``.
|
|
115
|
+
|
|
116
|
+
Indeed, the category of regular crystals defines no new
|
|
117
|
+
structure: it only relates `\varepsilon_a` and `\varphi_a` to
|
|
118
|
+
`e_a` and `f_a` respectively.
|
|
119
|
+
|
|
120
|
+
.. SEEALSO:: :meth:`Category.additional_structure`
|
|
121
|
+
|
|
122
|
+
.. TODO:: Should this category be a :class:`CategoryWithAxiom`?
|
|
123
|
+
|
|
124
|
+
EXAMPLES::
|
|
125
|
+
|
|
126
|
+
sage: RegularCrystals().additional_structure()
|
|
127
|
+
"""
|
|
128
|
+
return None
|
|
129
|
+
|
|
130
|
+
class MorphismMethods:
|
|
131
|
+
def is_isomorphism(self):
|
|
132
|
+
"""
|
|
133
|
+
Check if ``self`` is a crystal isomorphism, which is true
|
|
134
|
+
if and only if this is a strict embedding with the same number
|
|
135
|
+
of connected components.
|
|
136
|
+
|
|
137
|
+
EXAMPLES::
|
|
138
|
+
|
|
139
|
+
sage: A21 = RootSystem(['A',2,1])
|
|
140
|
+
sage: La = A21.weight_space(extended=True).fundamental_weights()
|
|
141
|
+
sage: B = crystals.LSPaths(La[0])
|
|
142
|
+
sage: La = A21.weight_lattice(extended=True).fundamental_weights()
|
|
143
|
+
sage: C = crystals.GeneralizedYoungWalls(2, La[0])
|
|
144
|
+
sage: H = Hom(B, C)
|
|
145
|
+
sage: from sage.categories.highest_weight_crystals import HighestWeightCrystalMorphism
|
|
146
|
+
sage: class Psi(HighestWeightCrystalMorphism):
|
|
147
|
+
....: def is_strict(self):
|
|
148
|
+
....: return True
|
|
149
|
+
sage: psi = Psi(H, C.module_generators); psi
|
|
150
|
+
['A', 2, 1] Crystal morphism:
|
|
151
|
+
From: The crystal of LS paths of type ['A', 2, 1] and weight Lambda[0]
|
|
152
|
+
To: Highest weight crystal of generalized Young walls
|
|
153
|
+
of Cartan type ['A', 2, 1] and highest weight Lambda[0]
|
|
154
|
+
Defn: (Lambda[0],) |--> []
|
|
155
|
+
sage: psi.is_isomorphism()
|
|
156
|
+
True
|
|
157
|
+
"""
|
|
158
|
+
return (self.is_strict()
|
|
159
|
+
and self.domain().number_of_connected_components() ==
|
|
160
|
+
self.codomain().number_of_connected_components())
|
|
161
|
+
|
|
162
|
+
class ParentMethods:
|
|
163
|
+
|
|
164
|
+
# TODO: this could be a method in Crystals.Algebras.ElementMethods, so that
|
|
165
|
+
# one could do:
|
|
166
|
+
#
|
|
167
|
+
# sage: C = crystals.Tableaux(['A',2], shape=[2,1])
|
|
168
|
+
# sage: M = C.algebra(QQ)
|
|
169
|
+
# sage: m = M.an_element()
|
|
170
|
+
# sage: m.demazure_operator([1,4,2])
|
|
171
|
+
def demazure_operator(self, element, reduced_word):
|
|
172
|
+
r"""
|
|
173
|
+
Return the application of Demazure operators `D_i` for `i` from
|
|
174
|
+
``reduced_word`` on ``element``.
|
|
175
|
+
|
|
176
|
+
INPUT:
|
|
177
|
+
|
|
178
|
+
- ``element`` -- an element of a free module indexed by the
|
|
179
|
+
underlying crystal
|
|
180
|
+
- ``reduced_word`` -- a reduced word of the Weyl group of the
|
|
181
|
+
same type as the underlying crystal
|
|
182
|
+
|
|
183
|
+
OUTPUT: an element of the free module indexed by the underlying crystal
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
188
|
+
sage: C = CombinatorialFreeModule(QQ, T) # needs sage.modules
|
|
189
|
+
sage: t = T.highest_weight_vector()
|
|
190
|
+
sage: b = 2*C(t) # needs sage.modules
|
|
191
|
+
sage: T.demazure_operator(b,[1,2,1]) # needs sage.modules
|
|
192
|
+
2*B[[[1, 1], [2]]] + 2*B[[[1, 2], [2]]] + 2*B[[[1, 3], [2]]]
|
|
193
|
+
+ 2*B[[[1, 1], [3]]] + 2*B[[[1, 2], [3]]] + 2*B[[[1, 3], [3]]]
|
|
194
|
+
+ 2*B[[[2, 2], [3]]] + 2*B[[[2, 3], [3]]]
|
|
195
|
+
|
|
196
|
+
The Demazure operator is idempotent::
|
|
197
|
+
|
|
198
|
+
sage: # needs sage.modules
|
|
199
|
+
sage: T = crystals.Tableaux("A1", shape=[4])
|
|
200
|
+
sage: C = CombinatorialFreeModule(QQ, T)
|
|
201
|
+
sage: b = C(T.module_generators[0]); b
|
|
202
|
+
B[[[1, 1, 1, 1]]]
|
|
203
|
+
sage: e = T.demazure_operator(b,[1]); e
|
|
204
|
+
B[[[1, 1, 1, 1]]] + B[[[1, 1, 1, 2]]] + B[[[1, 1, 2, 2]]]
|
|
205
|
+
+ B[[[1, 2, 2, 2]]] + B[[[2, 2, 2, 2]]]
|
|
206
|
+
sage: e == T.demazure_operator(e,[1])
|
|
207
|
+
True
|
|
208
|
+
sage: all(T.demazure_operator(T.demazure_operator(C(t),[1]),[1])
|
|
209
|
+
....: == T.demazure_operator(C(t),[1]) for t in T)
|
|
210
|
+
True
|
|
211
|
+
"""
|
|
212
|
+
M = element.parent()
|
|
213
|
+
for i in reversed(reduced_word):
|
|
214
|
+
element = M.linear_combination((c.demazure_operator_simple(i), coeff)
|
|
215
|
+
for c, coeff in element)
|
|
216
|
+
return element
|
|
217
|
+
|
|
218
|
+
def demazure_subcrystal(self, element, reduced_word, only_support=True):
|
|
219
|
+
r"""
|
|
220
|
+
Return the subcrystal corresponding to the application of
|
|
221
|
+
Demazure operators `D_i` for `i` from ``reduced_word`` on
|
|
222
|
+
``element``.
|
|
223
|
+
|
|
224
|
+
INPUT:
|
|
225
|
+
|
|
226
|
+
- ``element`` -- an element of a free module indexed by the
|
|
227
|
+
underlying crystal
|
|
228
|
+
- ``reduced_word`` -- a reduced word of the Weyl group of the
|
|
229
|
+
same type as the underlying crystal
|
|
230
|
+
- ``only_support`` -- boolean (default: ``True``); only include
|
|
231
|
+
arrows corresponding to the support of ``reduced_word``
|
|
232
|
+
|
|
233
|
+
OUTPUT: the Demazure subcrystal
|
|
234
|
+
|
|
235
|
+
EXAMPLES::
|
|
236
|
+
|
|
237
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
238
|
+
sage: t = T.highest_weight_vector()
|
|
239
|
+
sage: S = T.demazure_subcrystal(t, [1,2])
|
|
240
|
+
sage: list(S)
|
|
241
|
+
[[[1, 1], [2]], [[1, 2], [2]], [[1, 1], [3]],
|
|
242
|
+
[[1, 2], [3]], [[2, 2], [3]]]
|
|
243
|
+
sage: S = T.demazure_subcrystal(t, [2,1])
|
|
244
|
+
sage: list(S)
|
|
245
|
+
[[[1, 1], [2]], [[1, 2], [2]], [[1, 1], [3]],
|
|
246
|
+
[[1, 3], [2]], [[1, 3], [3]]]
|
|
247
|
+
|
|
248
|
+
We construct an example where we don't only want the arrows
|
|
249
|
+
indicated by the support of the reduced word::
|
|
250
|
+
|
|
251
|
+
sage: K = crystals.KirillovReshetikhin(['A',1,1], 1, 2)
|
|
252
|
+
sage: mg = K.module_generator()
|
|
253
|
+
sage: S = K.demazure_subcrystal(mg, [1])
|
|
254
|
+
sage: S.digraph().edges(sort=True)
|
|
255
|
+
[([[1, 1]], [[1, 2]], 1), ([[1, 2]], [[2, 2]], 1)]
|
|
256
|
+
sage: S = K.demazure_subcrystal(mg, [1], only_support=False)
|
|
257
|
+
sage: S.digraph().edges(sort=True)
|
|
258
|
+
[([[1, 1]], [[1, 2]], 1),
|
|
259
|
+
([[1, 2]], [[1, 1]], 0),
|
|
260
|
+
([[1, 2]], [[2, 2]], 1),
|
|
261
|
+
([[2, 2]], [[1, 2]], 0)]
|
|
262
|
+
"""
|
|
263
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
264
|
+
from sage.rings.rational_field import QQ
|
|
265
|
+
C = CombinatorialFreeModule(QQ, self)
|
|
266
|
+
D = self.demazure_operator(C(element), reduced_word)
|
|
267
|
+
if only_support:
|
|
268
|
+
index_set = tuple(frozenset(reduced_word))
|
|
269
|
+
else:
|
|
270
|
+
index_set = self.cartan_type().index_set()
|
|
271
|
+
return self.subcrystal(contained=D.support(), generators=[element],
|
|
272
|
+
index_set=index_set)
|
|
273
|
+
|
|
274
|
+
def _test_stembridge_local_axioms(self, index_set=None, verbose=False, complete=False, **options):
|
|
275
|
+
r"""
|
|
276
|
+
This implements tests for the Stembridge local characterization
|
|
277
|
+
on the finite crystal ``self``.
|
|
278
|
+
|
|
279
|
+
The current implementation only uses the rules for simply-laced
|
|
280
|
+
types. Crystals of other types should still pass the test, but
|
|
281
|
+
expansion of this test to non-simply laced type would be desirable.
|
|
282
|
+
|
|
283
|
+
One can specify an index set smaller than the full index set of
|
|
284
|
+
the crystal, using the option ``index_set``.
|
|
285
|
+
|
|
286
|
+
Running with ``verbose=True`` will print each node for which a
|
|
287
|
+
local axiom test applies.
|
|
288
|
+
|
|
289
|
+
Running with ``complete=True`` will continue to run the test past
|
|
290
|
+
the first failure of the local axioms. This is probably only
|
|
291
|
+
useful in conjunction with the verbose option, to see all places
|
|
292
|
+
where the local axioms fail.
|
|
293
|
+
|
|
294
|
+
EXAMPLES::
|
|
295
|
+
|
|
296
|
+
sage: T = crystals.Tableaux(['A',3], shape=[2,1])
|
|
297
|
+
sage: T._test_stembridge_local_axioms()
|
|
298
|
+
True
|
|
299
|
+
sage: T._test_stembridge_local_axioms(verbose=True)
|
|
300
|
+
True
|
|
301
|
+
sage: T._test_stembridge_local_axioms(index_set=[1,3])
|
|
302
|
+
True
|
|
303
|
+
|
|
304
|
+
sage: B = Crystals().example(choice='naive')
|
|
305
|
+
sage: B._test_stembridge_local_axioms()
|
|
306
|
+
Traceback (most recent call last):
|
|
307
|
+
...
|
|
308
|
+
AssertionError: None
|
|
309
|
+
"""
|
|
310
|
+
tester = self._tester(**options)
|
|
311
|
+
goodness = True
|
|
312
|
+
i = 0
|
|
313
|
+
for x in self:
|
|
314
|
+
goodness = x._test_stembridge_local_axioms(index_set, verbose)
|
|
315
|
+
if not goodness and not complete:
|
|
316
|
+
tester.fail()
|
|
317
|
+
i += 1
|
|
318
|
+
if i > tester._max_runs:
|
|
319
|
+
return
|
|
320
|
+
tester.assertTrue(goodness)
|
|
321
|
+
return goodness
|
|
322
|
+
|
|
323
|
+
def dual_equivalence_graph(self, X=None, index_set=None, directed=True):
|
|
324
|
+
r"""
|
|
325
|
+
Return the dual equivalence graph indexed by ``index_set``
|
|
326
|
+
on the subset ``X`` of ``self``.
|
|
327
|
+
|
|
328
|
+
Let `b \in B` be an element of weight `0`, so `\varepsilon_j(b)
|
|
329
|
+
= \varphi_j(b)` for all `j \in I`, where `I` is the indexing
|
|
330
|
+
set. We say `b'` is an `i`-elementary dual equivalence
|
|
331
|
+
transformation of `b` (where `i \in I`) if
|
|
332
|
+
|
|
333
|
+
* `\varepsilon_i(b) = 1` and `\varepsilon_{i-1}(b) = 0`, and
|
|
334
|
+
* `b' = f_{i-1} f_i e_{i-1} e_i b`.
|
|
335
|
+
|
|
336
|
+
We can do the inverse procedure by interchanging `i` and `i-1`
|
|
337
|
+
above.
|
|
338
|
+
|
|
339
|
+
.. NOTE::
|
|
340
|
+
|
|
341
|
+
If the index set is not an ordered interval, we let
|
|
342
|
+
`i - 1` mean the index appearing before `i` in `I`.
|
|
343
|
+
|
|
344
|
+
This definition comes from [As2008]_ Section 4 (where our
|
|
345
|
+
`\varphi_j(b)` and `\varepsilon_j(b)` are denoted by
|
|
346
|
+
`\epsilon(b, j)` and `-\delta(b, j)`, respectively).
|
|
347
|
+
|
|
348
|
+
The dual equivalence graph of `B` is defined to be the
|
|
349
|
+
colored graph whose vertices are the elements of `B` of
|
|
350
|
+
weight `0`, and whose edges of color `i` (for `i \in I`)
|
|
351
|
+
connect pairs `\{ b, b' \}` such that `b'` is an
|
|
352
|
+
`i`-elementary dual equivalence transformation of `b`.
|
|
353
|
+
|
|
354
|
+
.. NOTE::
|
|
355
|
+
|
|
356
|
+
This dual equivalence graph is a generalization of
|
|
357
|
+
`\mathcal{G}\left(\mathcal{X}\right)` in [As2008]_
|
|
358
|
+
Section 4 except we do not require
|
|
359
|
+
`\varepsilon_i(b) = 0, 1` for all `i`.
|
|
360
|
+
|
|
361
|
+
This definition can be generalized by choosing a subset `X`
|
|
362
|
+
of the set of all vertices of `B` of weight `0`, and
|
|
363
|
+
restricting the dual equivalence graph to the vertex set
|
|
364
|
+
`X`.
|
|
365
|
+
|
|
366
|
+
INPUT:
|
|
367
|
+
|
|
368
|
+
- ``X`` -- (optional) the vertex set `X` (default:
|
|
369
|
+
the whole set of vertices of ``self`` of weight `0`)
|
|
370
|
+
- ``index_set`` -- (optional) the index set `I`
|
|
371
|
+
(default: the whole index set of ``self``); this has
|
|
372
|
+
to be a subset of the index set of ``self`` (as a list
|
|
373
|
+
or tuple)
|
|
374
|
+
- ``directed`` -- boolean (default: ``True``); whether to have the
|
|
375
|
+
dual equivalence graph be directed, where the head of
|
|
376
|
+
an edge `b - b'` is `b` and the tail is
|
|
377
|
+
`b' = f_{i-1} f_i e_{i-1} e_i b`)
|
|
378
|
+
|
|
379
|
+
.. SEEALSO::
|
|
380
|
+
|
|
381
|
+
:meth:`sage.combinat.partition.Partition.dual_equivalence_graph`
|
|
382
|
+
|
|
383
|
+
EXAMPLES::
|
|
384
|
+
|
|
385
|
+
sage: T = crystals.Tableaux(['A',3], shape=[2,2])
|
|
386
|
+
sage: G = T.dual_equivalence_graph()
|
|
387
|
+
sage: G.edges(sort=True)
|
|
388
|
+
[([[1, 3], [2, 4]], [[1, 2], [3, 4]], 2),
|
|
389
|
+
([[1, 2], [3, 4]], [[1, 3], [2, 4]], 3)]
|
|
390
|
+
sage: T = crystals.Tableaux(['A',4], shape=[3,2])
|
|
391
|
+
sage: G = T.dual_equivalence_graph()
|
|
392
|
+
sage: G.edges(sort=True)
|
|
393
|
+
[([[1, 3, 5], [2, 4]], [[1, 3, 4], [2, 5]], 4),
|
|
394
|
+
([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 2),
|
|
395
|
+
([[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], 2),
|
|
396
|
+
([[1, 2, 5], [3, 4]], [[1, 3, 5], [2, 4]], 3),
|
|
397
|
+
([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 3),
|
|
398
|
+
([[1, 2, 3], [4, 5]], [[1, 2, 4], [3, 5]], 4)]
|
|
399
|
+
|
|
400
|
+
sage: T = crystals.Tableaux(['A',4], shape=[3,1])
|
|
401
|
+
sage: G = T.dual_equivalence_graph(index_set=[1,2,3])
|
|
402
|
+
sage: G.vertices(sort=True)
|
|
403
|
+
[[[1, 3, 4], [2]], [[1, 2, 4], [3]], [[1, 2, 3], [4]]]
|
|
404
|
+
sage: G.edges(sort=True)
|
|
405
|
+
[([[1, 3, 4], [2]], [[1, 2, 4], [3]], 2),
|
|
406
|
+
([[1, 2, 4], [3]], [[1, 2, 3], [4]], 3)]
|
|
407
|
+
|
|
408
|
+
TESTS::
|
|
409
|
+
|
|
410
|
+
sage: T = crystals.Tableaux(['A',4], shape=[3,1])
|
|
411
|
+
sage: G = T.dual_equivalence_graph(index_set=[2,3])
|
|
412
|
+
sage: G.edges(sort=True)
|
|
413
|
+
[([[1, 2, 4], [3]], [[1, 2, 3], [4]], 3),
|
|
414
|
+
([[2, 4, 5], [3]], [[2, 3, 5], [4]], 3)]
|
|
415
|
+
sage: G.vertices(sort=True)
|
|
416
|
+
[[[1, 3, 4], [2]],
|
|
417
|
+
[[1, 2, 4], [3]],
|
|
418
|
+
[[2, 4, 5], [3]],
|
|
419
|
+
[[1, 2, 3], [4]],
|
|
420
|
+
[[2, 3, 5], [4]],
|
|
421
|
+
[[1, 1, 1], [5]],
|
|
422
|
+
[[1, 1, 5], [5]],
|
|
423
|
+
[[1, 5, 5], [5]],
|
|
424
|
+
[[2, 3, 4], [5]]]
|
|
425
|
+
"""
|
|
426
|
+
if index_set is None:
|
|
427
|
+
index_set = self.index_set()
|
|
428
|
+
|
|
429
|
+
def wt_zero(x):
|
|
430
|
+
for i in index_set:
|
|
431
|
+
if x.epsilon(i) != x.phi(i):
|
|
432
|
+
return False
|
|
433
|
+
return True
|
|
434
|
+
|
|
435
|
+
if X is None:
|
|
436
|
+
X = [x for x in self if wt_zero(x)]
|
|
437
|
+
checker = lambda x: True
|
|
438
|
+
elif any(not wt_zero(x) for x in X):
|
|
439
|
+
raise ValueError("the elements are not all weight 0")
|
|
440
|
+
else:
|
|
441
|
+
checker = lambda x: x in X
|
|
442
|
+
|
|
443
|
+
edges = []
|
|
444
|
+
for x in X:
|
|
445
|
+
for k, i in enumerate(index_set[1:]):
|
|
446
|
+
im = index_set[k]
|
|
447
|
+
if x.epsilon(i) == 1 and x.epsilon(im) == 0:
|
|
448
|
+
y = x.e(i).e(im).f(i).f(im)
|
|
449
|
+
if checker(y):
|
|
450
|
+
edges.append([x, y, i])
|
|
451
|
+
from sage.graphs.digraph import DiGraph
|
|
452
|
+
G = DiGraph([X, edges], format='vertices_and_edges', immutable=True)
|
|
453
|
+
from sage.graphs.dot2tex_utils import have_dot2tex
|
|
454
|
+
if have_dot2tex():
|
|
455
|
+
G.set_latex_options(format='dot2tex', edge_labels=True,
|
|
456
|
+
color_by_label=self.cartan_type()._index_set_coloring)
|
|
457
|
+
return G
|
|
458
|
+
|
|
459
|
+
class ElementMethods:
|
|
460
|
+
|
|
461
|
+
def epsilon(self, i):
|
|
462
|
+
r"""
|
|
463
|
+
Return `\varepsilon_i` of ``self``.
|
|
464
|
+
|
|
465
|
+
EXAMPLES::
|
|
466
|
+
|
|
467
|
+
sage: C = crystals.Letters(['A',5])
|
|
468
|
+
sage: C(1).epsilon(1)
|
|
469
|
+
0
|
|
470
|
+
sage: C(2).epsilon(1)
|
|
471
|
+
1
|
|
472
|
+
"""
|
|
473
|
+
assert i in self.index_set()
|
|
474
|
+
x = self.e(i)
|
|
475
|
+
eps = 0
|
|
476
|
+
while x is not None:
|
|
477
|
+
x = x.e(i)
|
|
478
|
+
eps = eps + 1
|
|
479
|
+
return eps
|
|
480
|
+
|
|
481
|
+
def phi(self, i):
|
|
482
|
+
r"""
|
|
483
|
+
Return `\varphi_i` of ``self``.
|
|
484
|
+
|
|
485
|
+
EXAMPLES::
|
|
486
|
+
|
|
487
|
+
sage: C = crystals.Letters(['A',5])
|
|
488
|
+
sage: C(1).phi(1)
|
|
489
|
+
1
|
|
490
|
+
sage: C(2).phi(1)
|
|
491
|
+
0
|
|
492
|
+
"""
|
|
493
|
+
assert i in self.index_set()
|
|
494
|
+
x = self.f(i)
|
|
495
|
+
phi = 0
|
|
496
|
+
while x is not None:
|
|
497
|
+
x = x.f(i)
|
|
498
|
+
phi += 1
|
|
499
|
+
return phi
|
|
500
|
+
|
|
501
|
+
def weight(self):
|
|
502
|
+
"""
|
|
503
|
+
Return the weight of this crystal element.
|
|
504
|
+
|
|
505
|
+
EXAMPLES::
|
|
506
|
+
|
|
507
|
+
sage: C = crystals.Letters(['A',5])
|
|
508
|
+
sage: C(1).weight()
|
|
509
|
+
(1, 0, 0, 0, 0, 0)
|
|
510
|
+
"""
|
|
511
|
+
return self.Phi() - self.Epsilon()
|
|
512
|
+
|
|
513
|
+
def demazure_operator_simple(self, i, ring=None):
|
|
514
|
+
r"""
|
|
515
|
+
Return the Demazure operator `D_i` applied to ``self``.
|
|
516
|
+
|
|
517
|
+
INPUT:
|
|
518
|
+
|
|
519
|
+
- ``i`` -- an element of the index set of the underlying crystal
|
|
520
|
+
- ``ring`` -- (default: ``QQ``) a ring
|
|
521
|
+
|
|
522
|
+
OUTPUT:
|
|
523
|
+
|
|
524
|
+
An element of the ``ring``-free module indexed by the underlying
|
|
525
|
+
crystal.
|
|
526
|
+
|
|
527
|
+
Let `r = \langle \mathrm{wt}(b), \alpha^{\vee}_i \rangle`, then
|
|
528
|
+
`D_i(b)` is defined as follows:
|
|
529
|
+
|
|
530
|
+
- If `r \geq 0`, this returns the sum of the elements obtained
|
|
531
|
+
from ``self`` by application of `f_i^k` for `0 \leq k \leq r`.
|
|
532
|
+
- If `r < 0`, this returns the opposite of the sum of the
|
|
533
|
+
elements obtained by application of `e_i^k` for `0 < k < -r`.
|
|
534
|
+
|
|
535
|
+
REFERENCES:
|
|
536
|
+
|
|
537
|
+
- [Li1995]_
|
|
538
|
+
|
|
539
|
+
- [Ka1993]_
|
|
540
|
+
|
|
541
|
+
EXAMPLES::
|
|
542
|
+
|
|
543
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
544
|
+
sage: t = T(rows=[[1,2],[2]])
|
|
545
|
+
sage: t.demazure_operator_simple(2)
|
|
546
|
+
B[[[1, 2], [2]]] + B[[[1, 3], [2]]] + B[[[1, 3], [3]]]
|
|
547
|
+
sage: t.demazure_operator_simple(2).parent()
|
|
548
|
+
Algebra of The crystal of tableaux of type ['A', 2] and shape(s) [[2, 1]]
|
|
549
|
+
over Integer Ring
|
|
550
|
+
|
|
551
|
+
sage: t.demazure_operator_simple(1)
|
|
552
|
+
0
|
|
553
|
+
|
|
554
|
+
sage: K = crystals.KirillovReshetikhin(['A',2,1],2,1)
|
|
555
|
+
sage: t = K(rows=[[3],[2]])
|
|
556
|
+
sage: t.demazure_operator_simple(0)
|
|
557
|
+
B[[[1, 2]]] + B[[[2, 3]]]
|
|
558
|
+
|
|
559
|
+
TESTS::
|
|
560
|
+
|
|
561
|
+
sage: K = crystals.KirillovReshetikhin(['A',2,1],1,1)
|
|
562
|
+
sage: x = K.an_element(); x
|
|
563
|
+
[[1]]
|
|
564
|
+
sage: x.demazure_operator_simple(0)
|
|
565
|
+
0
|
|
566
|
+
sage: x.demazure_operator_simple(0, ring = QQ).parent()
|
|
567
|
+
Algebra of Kirillov-Reshetikhin crystal of type ['A', 2, 1] with (r,s)=(1,1)
|
|
568
|
+
over Rational Field
|
|
569
|
+
"""
|
|
570
|
+
from sage.rings.integer_ring import ZZ
|
|
571
|
+
if ring is None:
|
|
572
|
+
ring = ZZ
|
|
573
|
+
C = self.parent().algebra(ring)
|
|
574
|
+
r = self.phi(i) - self.epsilon(i)
|
|
575
|
+
if r >= 0:
|
|
576
|
+
l = [self]
|
|
577
|
+
element = self
|
|
578
|
+
for k in range(r):
|
|
579
|
+
element = element.f(i)
|
|
580
|
+
l.append(element)
|
|
581
|
+
return C.sum_of_monomials(l)
|
|
582
|
+
else:
|
|
583
|
+
l = []
|
|
584
|
+
element = self
|
|
585
|
+
for k in range(-r-1):
|
|
586
|
+
element = element.e(i)
|
|
587
|
+
l.append(element)
|
|
588
|
+
return - C.sum_of_monomials(l)
|
|
589
|
+
|
|
590
|
+
def stembridgeDelta_depth(self, i, j):
|
|
591
|
+
r"""
|
|
592
|
+
Return the difference in the `j`-depth of ``self`` and `e_i`
|
|
593
|
+
of ``self``, where `i` and `j` are in the index set of the
|
|
594
|
+
underlying crystal. This function is useful for checking the
|
|
595
|
+
Stembridge local axioms for crystal bases.
|
|
596
|
+
|
|
597
|
+
The `i`-depth of a crystal node `x` is `-\varepsilon_i(x)`.
|
|
598
|
+
|
|
599
|
+
EXAMPLES::
|
|
600
|
+
|
|
601
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
602
|
+
sage: t = T(rows=[[1,2],[2]])
|
|
603
|
+
sage: t.stembridgeDelta_depth(1,2)
|
|
604
|
+
0
|
|
605
|
+
sage: s = T(rows=[[2,3],[3]])
|
|
606
|
+
sage: s.stembridgeDelta_depth(1,2)
|
|
607
|
+
-1
|
|
608
|
+
"""
|
|
609
|
+
if self.e(i) is None:
|
|
610
|
+
return 0
|
|
611
|
+
return -self.e(i).epsilon(j) + self.epsilon(j)
|
|
612
|
+
|
|
613
|
+
def stembridgeDelta_rise(self, i, j):
|
|
614
|
+
r"""
|
|
615
|
+
Return the difference in the `j`-rise of ``self`` and `e_i` of
|
|
616
|
+
``self``, where `i` and `j` are in the index set of the
|
|
617
|
+
underlying crystal. This function is useful for checking the
|
|
618
|
+
Stembridge local axioms for crystal bases.
|
|
619
|
+
|
|
620
|
+
The `i`-rise of a crystal node `x` is `\varphi_i(x)`.
|
|
621
|
+
|
|
622
|
+
EXAMPLES::
|
|
623
|
+
|
|
624
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
625
|
+
sage: t = T(rows=[[1,2],[2]])
|
|
626
|
+
sage: t.stembridgeDelta_rise(1,2)
|
|
627
|
+
-1
|
|
628
|
+
sage: s = T(rows=[[2,3],[3]])
|
|
629
|
+
sage: s.stembridgeDelta_rise(1,2)
|
|
630
|
+
0
|
|
631
|
+
"""
|
|
632
|
+
if self.e(i) is None:
|
|
633
|
+
return 0
|
|
634
|
+
return self.e(i).phi(j) - self.phi(j)
|
|
635
|
+
|
|
636
|
+
def stembridgeDel_depth(self, i, j):
|
|
637
|
+
r"""
|
|
638
|
+
Return the difference in the `j`-depth of ``self`` and `f_i` of
|
|
639
|
+
``self``, where `i` and `j` are in the index set of the
|
|
640
|
+
underlying crystal. This function is useful for checking the
|
|
641
|
+
Stembridge local axioms for crystal bases.
|
|
642
|
+
|
|
643
|
+
The `i`-depth of a crystal node `x` is `\varepsilon_i(x)`.
|
|
644
|
+
|
|
645
|
+
EXAMPLES::
|
|
646
|
+
|
|
647
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
648
|
+
sage: t = T(rows=[[1,1],[2]])
|
|
649
|
+
sage: t.stembridgeDel_depth(1,2)
|
|
650
|
+
0
|
|
651
|
+
sage: s = T(rows=[[1,3],[3]])
|
|
652
|
+
sage: s.stembridgeDel_depth(1,2)
|
|
653
|
+
-1
|
|
654
|
+
"""
|
|
655
|
+
if self.f(i) is None:
|
|
656
|
+
return 0
|
|
657
|
+
return -self.epsilon(j) + self.f(i).epsilon(j)
|
|
658
|
+
|
|
659
|
+
def stembridgeDel_rise(self, i, j):
|
|
660
|
+
r"""
|
|
661
|
+
Return the difference in the `j`-rise of ``self`` and `f_i` of
|
|
662
|
+
``self``, where `i` and `j` are in the index set of the
|
|
663
|
+
underlying crystal. This function is useful for checking the
|
|
664
|
+
Stembridge local axioms for crystal bases.
|
|
665
|
+
|
|
666
|
+
The `i`-rise of a crystal node `x` is `\varphi_i(x)`.
|
|
667
|
+
|
|
668
|
+
EXAMPLES::
|
|
669
|
+
|
|
670
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
671
|
+
sage: t = T(rows=[[1,1],[2]])
|
|
672
|
+
sage: t.stembridgeDel_rise(1,2)
|
|
673
|
+
-1
|
|
674
|
+
sage: s = T(rows=[[1,3],[3]])
|
|
675
|
+
sage: s.stembridgeDel_rise(1,2)
|
|
676
|
+
0
|
|
677
|
+
"""
|
|
678
|
+
if self.f(i) is None:
|
|
679
|
+
return 0
|
|
680
|
+
return self.phi(j)-self.f(i).phi(j)
|
|
681
|
+
|
|
682
|
+
def stembridgeTriple(self, i, j):
|
|
683
|
+
r"""
|
|
684
|
+
Let `A` be the Cartan matrix of the crystal, `x` a crystal element,
|
|
685
|
+
and let `i` and `j` be in the index set of the crystal.
|
|
686
|
+
Further, set
|
|
687
|
+
``b=stembridgeDelta_depth(x,i,j)``, and
|
|
688
|
+
``c=stembridgeDelta_rise(x,i,j))``.
|
|
689
|
+
If ``x.e(i)`` is non-empty, this function returns the triple
|
|
690
|
+
`( A_{ij}, b, c )`; otherwise it returns ``None``.
|
|
691
|
+
By the Stembridge local characterization of crystal bases,
|
|
692
|
+
one should have `A_{ij}=b+c`.
|
|
693
|
+
|
|
694
|
+
EXAMPLES::
|
|
695
|
+
|
|
696
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
697
|
+
sage: t = T(rows=[[1,1],[2]])
|
|
698
|
+
sage: t.stembridgeTriple(1,2)
|
|
699
|
+
sage: s = T(rows=[[1,2],[2]])
|
|
700
|
+
sage: s.stembridgeTriple(1,2)
|
|
701
|
+
(-1, 0, -1)
|
|
702
|
+
|
|
703
|
+
sage: T = crystals.Tableaux(['B',2], shape=[2,1])
|
|
704
|
+
sage: t = T(rows=[[1,2],[2]])
|
|
705
|
+
sage: t.stembridgeTriple(1,2)
|
|
706
|
+
(-2, 0, -2)
|
|
707
|
+
sage: s = T(rows=[[-1,-1],[0]])
|
|
708
|
+
sage: s.stembridgeTriple(1,2)
|
|
709
|
+
(-2, -2, 0)
|
|
710
|
+
sage: u = T(rows=[[0,2],[1]])
|
|
711
|
+
sage: u.stembridgeTriple(1,2)
|
|
712
|
+
(-2, -1, -1)
|
|
713
|
+
"""
|
|
714
|
+
if self.e(i) is None:
|
|
715
|
+
return None
|
|
716
|
+
b = self.stembridgeDelta_depth(i,j)
|
|
717
|
+
c = self.stembridgeDelta_rise(i,j)
|
|
718
|
+
dd = self.cartan_type().dynkin_diagram()
|
|
719
|
+
a = dd[j,i]
|
|
720
|
+
return (a, b, c)
|
|
721
|
+
|
|
722
|
+
def _test_stembridge_local_axioms(self, index_set=None, verbose=False, **options):
|
|
723
|
+
r"""
|
|
724
|
+
This implements tests for the Stembridge local characterization
|
|
725
|
+
on the element of a crystal ``self``.
|
|
726
|
+
|
|
727
|
+
The current implementation only uses the axioms for simply-laced
|
|
728
|
+
types. Crystals of other types should still pass the test, but
|
|
729
|
+
in non-simply-laced types, passing is not a guarantee that the
|
|
730
|
+
crystal arises from a representation.
|
|
731
|
+
|
|
732
|
+
One can specify an index set smaller than the full index set of
|
|
733
|
+
the crystal, using the option ``index_set``.
|
|
734
|
+
|
|
735
|
+
Running with ``verbose=True`` will print warnings when a test fails.
|
|
736
|
+
|
|
737
|
+
REFERENCES:
|
|
738
|
+
|
|
739
|
+
- [Ste2003]_
|
|
740
|
+
|
|
741
|
+
EXAMPLES::
|
|
742
|
+
|
|
743
|
+
sage: T = crystals.Tableaux(['A',2], shape=[2,1])
|
|
744
|
+
sage: t = T(rows=[[1,1],[2]])
|
|
745
|
+
sage: t._test_stembridge_local_axioms()
|
|
746
|
+
True
|
|
747
|
+
sage: t._test_stembridge_local_axioms(index_set=[1,3])
|
|
748
|
+
True
|
|
749
|
+
sage: t._test_stembridge_local_axioms(verbose=True)
|
|
750
|
+
True
|
|
751
|
+
"""
|
|
752
|
+
tester = self._tester(**options)
|
|
753
|
+
goodness = True
|
|
754
|
+
if index_set is None:
|
|
755
|
+
index_set = self.index_set()
|
|
756
|
+
|
|
757
|
+
from sage.combinat.subset import Subsets
|
|
758
|
+
|
|
759
|
+
for (i,j) in Subsets(index_set, 2):
|
|
760
|
+
if self.e(i) is not None and self.e(j) is not None:
|
|
761
|
+
triple = self.stembridgeTriple(i,j)
|
|
762
|
+
#Test axioms P3 and P4.
|
|
763
|
+
if not triple[0] == triple[1]+triple[2] or triple[1] > 0 or triple[2] > 0:
|
|
764
|
+
if verbose:
|
|
765
|
+
print('Warning: Failed axiom P3 or P4 at vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i, j))
|
|
766
|
+
goodness = False
|
|
767
|
+
else:
|
|
768
|
+
tester.fail()
|
|
769
|
+
if self.stembridgeDelta_depth(i,j) == 0:
|
|
770
|
+
#check E_i E_j(x)= E_j E_i(x)
|
|
771
|
+
if self.e(i).e(j) != self.e(j).e(i) or self.e(i).e(j).stembridgeDel_rise(j, i) != 0:
|
|
772
|
+
if verbose:
|
|
773
|
+
print('Warning: Failed axiom P5 at: vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i, j))
|
|
774
|
+
goodness = False
|
|
775
|
+
else:
|
|
776
|
+
tester.fail()
|
|
777
|
+
if self.stembridgeDelta_depth(i,j) == -1 and self.stembridgeDelta_depth(j,i) == -1:
|
|
778
|
+
#check E_i E_j^2 E_i (x)= E_j E_i^2 E_j (x)
|
|
779
|
+
y1 = self.e(j).e(i).e(i).e(j)
|
|
780
|
+
y2 = self.e(j).e(i).e(i).e(j)
|
|
781
|
+
a = y1.stembridgeDel_rise(j, i)
|
|
782
|
+
b = y2.stembridgeDel_rise(i, j)
|
|
783
|
+
if y1 != y2 or a != -1 or b != -1:
|
|
784
|
+
if verbose:
|
|
785
|
+
print('Warning: Failed axiom P6 at: vector ', self, 'i,j=', i, j, 'Stembridge triple:', self.stembridgeTriple(i, j))
|
|
786
|
+
goodness = False
|
|
787
|
+
else:
|
|
788
|
+
tester.fail()
|
|
789
|
+
tester.assertTrue(goodness)
|
|
790
|
+
return goodness
|
|
791
|
+
|
|
792
|
+
def dual_equivalence_class(self, index_set=None):
|
|
793
|
+
r"""
|
|
794
|
+
Return the dual equivalence class indexed by ``index_set``
|
|
795
|
+
of ``self``.
|
|
796
|
+
|
|
797
|
+
The dual equivalence class of an element `b \in B`
|
|
798
|
+
is the set of all elements of `B` reachable from
|
|
799
|
+
`b` via sequences of `i`-elementary dual equivalence
|
|
800
|
+
relations (i.e., `i`-elementary dual equivalence
|
|
801
|
+
transformations and their inverses) for `i` in the index
|
|
802
|
+
set of `B`.
|
|
803
|
+
|
|
804
|
+
For this to be well-defined, the element `b` has to be
|
|
805
|
+
of weight `0` with respect to `I`; that is, we need to have
|
|
806
|
+
`\varepsilon_j(b) = \varphi_j(b)` for all `j \in I`.
|
|
807
|
+
|
|
808
|
+
See [As2008]_. See also :meth:`dual_equivalence_graph` for
|
|
809
|
+
a definition of `i`-elementary dual equivalence
|
|
810
|
+
transformations.
|
|
811
|
+
|
|
812
|
+
INPUT:
|
|
813
|
+
|
|
814
|
+
- ``index_set`` -- (optional) the index set `I`
|
|
815
|
+
(default: the whole index set of the crystal); this has
|
|
816
|
+
to be a subset of the index set of the crystal (as a list
|
|
817
|
+
or tuple)
|
|
818
|
+
|
|
819
|
+
OUTPUT:
|
|
820
|
+
|
|
821
|
+
The dual equivalence class of ``self`` indexed by the
|
|
822
|
+
subset ``index_set``. This class is returned as an
|
|
823
|
+
undirected edge-colored multigraph. The color of an edge
|
|
824
|
+
is the index `i` of the dual equivalence relation it
|
|
825
|
+
encodes.
|
|
826
|
+
|
|
827
|
+
.. SEEALSO::
|
|
828
|
+
|
|
829
|
+
- :meth:`~sage.categories.regular_crystals.RegularCrystals.ParentMethods.dual_equivalence_graph`
|
|
830
|
+
- :meth:`sage.combinat.partition.Partition.dual_equivalence_graph`
|
|
831
|
+
|
|
832
|
+
EXAMPLES::
|
|
833
|
+
|
|
834
|
+
sage: T = crystals.Tableaux(['A',3], shape=[2,2])
|
|
835
|
+
sage: G = T(2,1,4,3).dual_equivalence_class()
|
|
836
|
+
sage: G.edges(sort=True)
|
|
837
|
+
[([[1, 3], [2, 4]], [[1, 2], [3, 4]], 2),
|
|
838
|
+
([[1, 3], [2, 4]], [[1, 2], [3, 4]], 3)]
|
|
839
|
+
sage: T = crystals.Tableaux(['A',4], shape=[3,2])
|
|
840
|
+
sage: G = T(2,1,4,3,5).dual_equivalence_class()
|
|
841
|
+
sage: G.edges(sort=True)
|
|
842
|
+
[([[1, 3, 5], [2, 4]], [[1, 3, 4], [2, 5]], 4),
|
|
843
|
+
([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 2),
|
|
844
|
+
([[1, 3, 5], [2, 4]], [[1, 2, 5], [3, 4]], 3),
|
|
845
|
+
([[1, 3, 4], [2, 5]], [[1, 2, 4], [3, 5]], 2),
|
|
846
|
+
([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 3),
|
|
847
|
+
([[1, 2, 4], [3, 5]], [[1, 2, 3], [4, 5]], 4)]
|
|
848
|
+
"""
|
|
849
|
+
if index_set is None:
|
|
850
|
+
index_set = self.index_set()
|
|
851
|
+
|
|
852
|
+
for i in index_set:
|
|
853
|
+
if self.epsilon(i) != self.phi(i):
|
|
854
|
+
raise ValueError("the element is not weight 0")
|
|
855
|
+
|
|
856
|
+
visited = set()
|
|
857
|
+
todo = {self}
|
|
858
|
+
edges = []
|
|
859
|
+
while todo:
|
|
860
|
+
x = todo.pop()
|
|
861
|
+
visited.add(x)
|
|
862
|
+
for k, i in enumerate(index_set[1:]):
|
|
863
|
+
im = index_set[k]
|
|
864
|
+
if x.epsilon(i) == 1 and x.epsilon(im) == 0:
|
|
865
|
+
y = x.e(i).e(im).f(i).f(im)
|
|
866
|
+
if [y, x, i] not in edges:
|
|
867
|
+
edges.append([x, y, i])
|
|
868
|
+
if y not in visited:
|
|
869
|
+
todo.add(y)
|
|
870
|
+
if x.epsilon(i) == 0 and x.epsilon(im) == 1:
|
|
871
|
+
y = x.e(im).e(i).f(im).f(i)
|
|
872
|
+
if [y, x, i] not in edges:
|
|
873
|
+
edges.append([x, y, i])
|
|
874
|
+
if y not in visited:
|
|
875
|
+
todo.add(y)
|
|
876
|
+
from sage.graphs.graph import Graph
|
|
877
|
+
G = Graph([visited, edges], format='vertices_and_edges',
|
|
878
|
+
immutable=True, multiedges=True)
|
|
879
|
+
from sage.graphs.dot2tex_utils import have_dot2tex
|
|
880
|
+
if have_dot2tex():
|
|
881
|
+
G.set_latex_options(format='dot2tex', edge_labels=True,
|
|
882
|
+
color_by_label=self.cartan_type()._index_set_coloring)
|
|
883
|
+
return G
|
|
884
|
+
|
|
885
|
+
class TensorProducts(TensorProductsCategory):
|
|
886
|
+
"""
|
|
887
|
+
The category of regular crystals constructed by tensor
|
|
888
|
+
product of regular crystals.
|
|
889
|
+
"""
|
|
890
|
+
@cached_method
|
|
891
|
+
def extra_super_categories(self):
|
|
892
|
+
"""
|
|
893
|
+
EXAMPLES::
|
|
894
|
+
|
|
895
|
+
sage: RegularCrystals().TensorProducts().extra_super_categories()
|
|
896
|
+
[Category of regular crystals]
|
|
897
|
+
"""
|
|
898
|
+
return [self.base_category()]
|