passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,1214 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Group algebras of root lattice realizations
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2013 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
7
|
+
# Anne Schilling <anne at math.ucdavis.edu>
|
|
8
|
+
# Mark Shimozono <mshimo at vt.edu>
|
|
9
|
+
# Daniel Bump
|
|
10
|
+
#
|
|
11
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
12
|
+
# https://www.gnu.org/licenses/
|
|
13
|
+
# ****************************************************************************
|
|
14
|
+
import functools
|
|
15
|
+
import operator
|
|
16
|
+
from sage.misc.cachefunc import cached_method
|
|
17
|
+
from sage.misc.lazy_import import lazy_import
|
|
18
|
+
from sage.misc.misc_c import prod
|
|
19
|
+
from sage.categories.algebra_functor import AlgebrasCategory
|
|
20
|
+
lazy_import('sage.rings.integer_ring', 'ZZ')
|
|
21
|
+
from sage.modules.free_module_element import vector
|
|
22
|
+
from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class Algebras(AlgebrasCategory):
|
|
26
|
+
"""
|
|
27
|
+
The category of group algebras of root lattice realizations.
|
|
28
|
+
|
|
29
|
+
This includes typically weight rings (group algebras of weight lattices).
|
|
30
|
+
|
|
31
|
+
TESTS::
|
|
32
|
+
|
|
33
|
+
sage: for ct in CartanType.samples(crystallographic=True): # long time
|
|
34
|
+
....: TestSuite(RootSystem(ct).root_lattice().algebra(QQ)).run()
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
class ParentMethods:
|
|
38
|
+
|
|
39
|
+
def _repr_(self):
|
|
40
|
+
r"""
|
|
41
|
+
EXAMPLES::
|
|
42
|
+
|
|
43
|
+
sage: RootSystem(["A",2,1]).ambient_space().algebra(QQ) # indirect doctest
|
|
44
|
+
Algebra of the Ambient space of the Root system of type ['A', 2, 1] over Rational Field
|
|
45
|
+
"""
|
|
46
|
+
return "Algebra of the %s over %s" % (self.basis().keys(), self.base_ring())
|
|
47
|
+
|
|
48
|
+
def some_elements(self):
|
|
49
|
+
r"""
|
|
50
|
+
Return some elements of the algebra ``self``.
|
|
51
|
+
|
|
52
|
+
EXAMPLES::
|
|
53
|
+
|
|
54
|
+
sage: A = RootSystem(["A",2,1]).ambient_space().algebra(QQ)
|
|
55
|
+
sage: A.some_elements()
|
|
56
|
+
[B[2*e[0] + 2*e[1] + 3*e[2]]...]
|
|
57
|
+
sage: A.some_elements() # needs sage.graphs
|
|
58
|
+
[B[2*e[0] + 2*e[1] + 3*e[2]],
|
|
59
|
+
B[-e[0] + e[2] + e['delta']],
|
|
60
|
+
B[e[0] - e[1]],
|
|
61
|
+
B[e[1] - e[2]],
|
|
62
|
+
B[e['deltacheck']],
|
|
63
|
+
B[e[0] + e['deltacheck']],
|
|
64
|
+
B[e[0] + e[1] + e['deltacheck']]]
|
|
65
|
+
|
|
66
|
+
sage: A = RootSystem(["B",2]).weight_space().algebra(QQ)
|
|
67
|
+
sage: A.some_elements()
|
|
68
|
+
[B[2*Lambda[1] + 2*Lambda[2]], ...B[Lambda[1]], B[Lambda[2]]]
|
|
69
|
+
sage: A.some_elements() # needs sage.graphs
|
|
70
|
+
[B[2*Lambda[1] + 2*Lambda[2]],
|
|
71
|
+
B[2*Lambda[1] - 2*Lambda[2]],
|
|
72
|
+
B[-Lambda[1] + 2*Lambda[2]],
|
|
73
|
+
B[Lambda[1]],
|
|
74
|
+
B[Lambda[2]]]
|
|
75
|
+
"""
|
|
76
|
+
return [self.monomial(weight) for weight in self.basis().keys().some_elements()]
|
|
77
|
+
|
|
78
|
+
@cached_method
|
|
79
|
+
def cartan_type(self):
|
|
80
|
+
r"""
|
|
81
|
+
Return the Cartan type of ``self``.
|
|
82
|
+
|
|
83
|
+
EXAMPLES::
|
|
84
|
+
|
|
85
|
+
sage: A = RootSystem(["A",2,1]).ambient_space().algebra(QQ)
|
|
86
|
+
sage: A.cartan_type()
|
|
87
|
+
['A', 2, 1]
|
|
88
|
+
sage: A = RootSystem(["B",2]).weight_space().algebra(QQ)
|
|
89
|
+
sage: A.cartan_type()
|
|
90
|
+
['B', 2]
|
|
91
|
+
"""
|
|
92
|
+
return self.basis().keys().cartan_type()
|
|
93
|
+
|
|
94
|
+
def from_polynomial(self, p):
|
|
95
|
+
"""
|
|
96
|
+
Construct an element of ``self`` from a polynomial `p`.
|
|
97
|
+
|
|
98
|
+
INPUT:
|
|
99
|
+
|
|
100
|
+
- ``p`` -- a polynomial
|
|
101
|
+
|
|
102
|
+
EXAMPLES::
|
|
103
|
+
|
|
104
|
+
sage: L = RootSystem(["A",2]).ambient_lattice()
|
|
105
|
+
sage: KL = L.algebra(QQ)
|
|
106
|
+
sage: x,y,z = QQ['x,y,z'].gens()
|
|
107
|
+
sage: KL.from_polynomial(x)
|
|
108
|
+
B[(1, 0, 0)]
|
|
109
|
+
sage: KL.from_polynomial(x^2*y + 2*y - z)
|
|
110
|
+
B[(2, 1, 0)] + 2*B[(0, 1, 0)] - B[(0, 0, 1)]
|
|
111
|
+
|
|
112
|
+
TESTS::
|
|
113
|
+
|
|
114
|
+
sage: KL.from_polynomial(x).leading_support().parent() is L
|
|
115
|
+
True
|
|
116
|
+
sage: KL.from_polynomial(x-x)
|
|
117
|
+
0
|
|
118
|
+
sage: KL.from_polynomial(x-x).parent() is KL
|
|
119
|
+
True
|
|
120
|
+
|
|
121
|
+
.. TODO:: make this work for Laurent polynomials too
|
|
122
|
+
"""
|
|
123
|
+
L = self.basis().keys()
|
|
124
|
+
return self.sum_of_terms((L.from_vector(vector(t)), c)
|
|
125
|
+
for t, c in p.monomial_coefficients().items())
|
|
126
|
+
|
|
127
|
+
@cached_method
|
|
128
|
+
def divided_difference_on_basis(self, weight, i):
|
|
129
|
+
r"""
|
|
130
|
+
Return the result of applying the `i`-th divided difference on ``weight``.
|
|
131
|
+
|
|
132
|
+
INPUT:
|
|
133
|
+
|
|
134
|
+
- ``weight`` -- a weight
|
|
135
|
+
- ``i`` -- an element of the index set
|
|
136
|
+
|
|
137
|
+
.. TODO:: type free definition (Viviane's definition uses that we are in the ambient space)
|
|
138
|
+
|
|
139
|
+
EXAMPLES::
|
|
140
|
+
|
|
141
|
+
sage: L = RootSystem(["A",1]).ambient_space()
|
|
142
|
+
sage: KL = L.algebra(QQ)
|
|
143
|
+
sage: KL.divided_difference_on_basis(L((2,2)), 1) # todo: not implemented
|
|
144
|
+
0
|
|
145
|
+
sage: KL.divided_difference_on_basis(L((3,0)), 1) # todo: not implemented
|
|
146
|
+
B[(2, 0)] + B[(1, 1)] + B[(0, 2)]
|
|
147
|
+
sage: KL.divided_difference_on_basis(L((0,3)), 1) # todo: not implemented
|
|
148
|
+
-B[(2, 0)] - B[(1, 1)] - B[(0, 2)]
|
|
149
|
+
|
|
150
|
+
In type `A` and in the ambient lattice, we recover the
|
|
151
|
+
usual action of divided differences polynomials::
|
|
152
|
+
|
|
153
|
+
sage: x,y = QQ['x,y'].gens()
|
|
154
|
+
sage: d = lambda p: (p - p(y,x)) / (x-y)
|
|
155
|
+
sage: d(x^2*y^2)
|
|
156
|
+
0
|
|
157
|
+
sage: d(x^3)
|
|
158
|
+
x^2 + x*y + y^2
|
|
159
|
+
sage: d(y^3)
|
|
160
|
+
-x^2 - x*y - y^2
|
|
161
|
+
"""
|
|
162
|
+
raise NotImplementedError()
|
|
163
|
+
|
|
164
|
+
@cached_method
|
|
165
|
+
def isobaric_divided_difference_on_basis(self, weight, i):
|
|
166
|
+
r"""
|
|
167
|
+
Return the result of applying the `i`-th isobaric divided difference on ``weight``.
|
|
168
|
+
|
|
169
|
+
INPUT:
|
|
170
|
+
|
|
171
|
+
- ``weight`` -- a weight
|
|
172
|
+
- ``i`` -- an element of the index set
|
|
173
|
+
|
|
174
|
+
.. SEEALSO:: :meth:`demazure_operators`
|
|
175
|
+
|
|
176
|
+
EXAMPLES::
|
|
177
|
+
|
|
178
|
+
sage: L = RootSystem(["A",1]).ambient_space()
|
|
179
|
+
sage: KL = L.algebra(QQ)
|
|
180
|
+
sage: KL.isobaric_divided_difference_on_basis(L((2,2)), 1)
|
|
181
|
+
B[(2, 2)]
|
|
182
|
+
sage: KL.isobaric_divided_difference_on_basis(L((3,0)), 1)
|
|
183
|
+
B[(1, 2)] + B[(2, 1)] + B[(3, 0)] + B[(0, 3)]
|
|
184
|
+
sage: KL.isobaric_divided_difference_on_basis(L((0,3)), 1)
|
|
185
|
+
-B[(1, 2)] - B[(2, 1)]
|
|
186
|
+
|
|
187
|
+
In type `A` and in the ambient lattice, we recover the
|
|
188
|
+
usual action of divided differences on polynomials::
|
|
189
|
+
|
|
190
|
+
sage: x,y = QQ['x,y'].gens()
|
|
191
|
+
sage: d = lambda p: (x*p - (x*p)(y,x)) / (x-y)
|
|
192
|
+
sage: d(x^2*y^2)
|
|
193
|
+
x^2*y^2
|
|
194
|
+
sage: d(x^3)
|
|
195
|
+
x^3 + x^2*y + x*y^2 + y^3
|
|
196
|
+
sage: d(y^3)
|
|
197
|
+
-x^2*y - x*y^2
|
|
198
|
+
|
|
199
|
+
REFERENCES:
|
|
200
|
+
|
|
201
|
+
.. [Lascoux2003] Alain Lascoux, Symmetric functions and combinatorial operators on polynomials,
|
|
202
|
+
CBMS Regional Conference Series in Mathematics, 99, 2003.
|
|
203
|
+
"""
|
|
204
|
+
P = self.basis().keys() # the root lattice realization
|
|
205
|
+
n = weight.scalar(P.simple_coroot(i))
|
|
206
|
+
if n not in ZZ:
|
|
207
|
+
raise ValueError("the weight does not have an integral scalar product with the coroot")
|
|
208
|
+
alphai = P.simple_root(i)
|
|
209
|
+
if n >= 0:
|
|
210
|
+
return self.sum_of_monomials(weight-j*alphai for j in range(n + 1))
|
|
211
|
+
return -self.sum_of_monomials(weight-j*alphai for j in range(n + 1, 0))
|
|
212
|
+
|
|
213
|
+
def demazure_operators(self):
|
|
214
|
+
r"""
|
|
215
|
+
Return the Demazure operators acting on ``self``.
|
|
216
|
+
|
|
217
|
+
The `i`-th Demazure operator is defined by:
|
|
218
|
+
|
|
219
|
+
.. MATH::
|
|
220
|
+
|
|
221
|
+
\pi_i = \frac{ 1 - e^{-\alpha_i}s_i }{ 1-e^{-\alpha_i} }
|
|
222
|
+
|
|
223
|
+
It acts on `e^\lambda`, for `\lambda` a weight, by:
|
|
224
|
+
|
|
225
|
+
.. MATH::
|
|
226
|
+
|
|
227
|
+
\pi_i e^\lambda = \frac{e^\lambda - e^{-\alpha_i+s_i\lambda}}{1-e^{-\alpha_i}}
|
|
228
|
+
|
|
229
|
+
This matches with Lascoux' definition [Lascoux2003]_ of `\pi_i`, and
|
|
230
|
+
with the `i`-th Demazure operator of [Kumar1987]_, which also works for
|
|
231
|
+
general Kac-Moody types.
|
|
232
|
+
|
|
233
|
+
REFERENCES:
|
|
234
|
+
|
|
235
|
+
.. [Kumar1987] \S. Kumar, Demazure character formula in arbitrary Kac-Moody setting,
|
|
236
|
+
Invent. Math. 89 (1987), no. 2, 395-423.
|
|
237
|
+
|
|
238
|
+
EXAMPLES:
|
|
239
|
+
|
|
240
|
+
We compute some Schur functions, as images of dominant
|
|
241
|
+
monomials under the action of the maximal isobaric divided
|
|
242
|
+
difference `\Delta_{w_0}`::
|
|
243
|
+
|
|
244
|
+
sage: L = RootSystem(["A",2]).ambient_lattice()
|
|
245
|
+
sage: KL = L.algebra(QQ)
|
|
246
|
+
sage: w0 = tuple(L.weyl_group().long_element().reduced_word()) # needs sage.libs.gap
|
|
247
|
+
sage: pi = KL.demazure_operators()
|
|
248
|
+
sage: pi0 = pi[w0] # needs sage.libs.gap
|
|
249
|
+
sage: pi0(KL.monomial(L((2,1)))) # needs sage.libs.gap
|
|
250
|
+
2*B[(1, 1, 1)] + B[(1, 2, 0)] + B[(1, 0, 2)] + B[(2, 1, 0)]
|
|
251
|
+
+ B[(2, 0, 1)] + B[(0, 1, 2)] + B[(0, 2, 1)]
|
|
252
|
+
|
|
253
|
+
Let us make the result into an actual polynomial::
|
|
254
|
+
|
|
255
|
+
sage: P = QQ['x,y,z']
|
|
256
|
+
sage: pi0(KL.monomial(L((2,1)))).expand(P.gens()) # needs sage.libs.gap
|
|
257
|
+
x^2*y + x*y^2 + x^2*z + 2*x*y*z + y^2*z + x*z^2 + y*z^2
|
|
258
|
+
|
|
259
|
+
This is indeed a Schur function::
|
|
260
|
+
|
|
261
|
+
sage: s = SymmetricFunctions(QQ).s() # needs sage.combinat
|
|
262
|
+
sage: s[2,1].expand(3, P.variable_names()) # needs sage.combinat
|
|
263
|
+
x^2*y + x*y^2 + x^2*z + 2*x*y*z + y^2*z + x*z^2 + y*z^2
|
|
264
|
+
|
|
265
|
+
Let us check this systematically on Schur functions of degree 6::
|
|
266
|
+
|
|
267
|
+
sage: for p in Partitions(6, max_length=3).list(): # needs sage.combinat sage.libs.gap
|
|
268
|
+
....: assert (s.monomial(p).expand(3, P.variable_names())
|
|
269
|
+
....: == pi0(KL.monomial(L(tuple(p)))).expand(P.gens()))
|
|
270
|
+
|
|
271
|
+
We check systematically that these operators satisfy the Iwahori-Hecke algebra relations::
|
|
272
|
+
|
|
273
|
+
sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
|
|
274
|
+
....: L = RootSystem(cartan_type).weight_lattice()
|
|
275
|
+
....: KL = L.algebra(QQ)
|
|
276
|
+
....: T = KL.demazure_operators()
|
|
277
|
+
....: T._test_relations()
|
|
278
|
+
|
|
279
|
+
sage: L = RootSystem(['A',1,1]).weight_lattice()
|
|
280
|
+
sage: KL = L.algebra(QQ)
|
|
281
|
+
sage: T = KL.demazure_operators()
|
|
282
|
+
sage: T._test_relations()
|
|
283
|
+
|
|
284
|
+
.. WARNING::
|
|
285
|
+
|
|
286
|
+
The Demazure operators are only defined if all the
|
|
287
|
+
elements in the support have integral scalar products
|
|
288
|
+
with the coroots (basically, they are in the weight
|
|
289
|
+
lattice). Otherwise an error is raised::
|
|
290
|
+
|
|
291
|
+
sage: L = RootSystem(CartanType(["G",2]).dual()).ambient_space()
|
|
292
|
+
sage: KL = L.algebra(QQ)
|
|
293
|
+
sage: pi = KL.demazure_operators()
|
|
294
|
+
sage: pi[1](KL.monomial(L([0,0,1])))
|
|
295
|
+
Traceback (most recent call last):
|
|
296
|
+
...
|
|
297
|
+
ValueError: the weight does not have an integral scalar product with the coroot
|
|
298
|
+
"""
|
|
299
|
+
return HeckeAlgebraRepresentation(self, self.isobaric_divided_difference_on_basis, self.cartan_type(), 0, 1, side='left')
|
|
300
|
+
|
|
301
|
+
def _test_demazure_operators(self, **options):
|
|
302
|
+
"""
|
|
303
|
+
Test that the Demazure operators satisfy their defining formulas.
|
|
304
|
+
|
|
305
|
+
EXAMPLES::
|
|
306
|
+
|
|
307
|
+
sage: RootSystem(["A",2]).root_lattice().algebra(QQ)._test_demazure_operators()
|
|
308
|
+
"""
|
|
309
|
+
tester = self._tester(**options)
|
|
310
|
+
try:
|
|
311
|
+
pi = self.demazure_operators()
|
|
312
|
+
L = self.basis().keys()
|
|
313
|
+
alpha = L.simple_roots()
|
|
314
|
+
alphacheck = L.simple_coroots()
|
|
315
|
+
s = L.simple_reflections()
|
|
316
|
+
for i in self.cartan_type().index_set():
|
|
317
|
+
emalphai = self.monomial(-alpha[i]) # X^{-\alpha_i}
|
|
318
|
+
for weight in L.some_elements():
|
|
319
|
+
if weight.scalar(alphacheck[i]) not in ZZ:
|
|
320
|
+
# Demazure operators are not defined in this case
|
|
321
|
+
continue
|
|
322
|
+
x = self.monomial(weight)
|
|
323
|
+
result = pi[i](x)
|
|
324
|
+
tester.assertEqual(result * (self.one() - emalphai),
|
|
325
|
+
x - emalphai * x.map_support(s[i]))
|
|
326
|
+
except ImportError:
|
|
327
|
+
pass
|
|
328
|
+
|
|
329
|
+
def demazure_lusztig_operator_on_basis(self, weight, i, q1, q2, convention='antidominant'):
|
|
330
|
+
r"""
|
|
331
|
+
Return the result of applying the `i`-th Demazure-Lusztig operator on ``weight``.
|
|
332
|
+
|
|
333
|
+
INPUT:
|
|
334
|
+
|
|
335
|
+
- ``weight`` -- an element `\lambda` of the weight lattice
|
|
336
|
+
- ``i`` -- an element of the index set
|
|
337
|
+
- ``q1``, ``q2`` -- two elements of the ground ring
|
|
338
|
+
- ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
|
|
339
|
+
|
|
340
|
+
See :meth:`demazure_lusztig_operators` for the details.
|
|
341
|
+
|
|
342
|
+
EXAMPLES::
|
|
343
|
+
|
|
344
|
+
sage: L = RootSystem(["A",1]).ambient_space()
|
|
345
|
+
sage: K = QQ['q1,q2']
|
|
346
|
+
sage: q1, q2 = K.gens()
|
|
347
|
+
sage: KL = L.algebra(K)
|
|
348
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, q1, q2)
|
|
349
|
+
q1*B[(2, 2)]
|
|
350
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, q1, q2)
|
|
351
|
+
(q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
|
|
352
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, q1, q2)
|
|
353
|
+
-(q1+q2)*B[(1, 2)] - (q1+q2)*B[(2, 1)] - q2*B[(3, 0)]
|
|
354
|
+
|
|
355
|
+
At `q_1=1` and `q_2=0` we recover the action of the isobaric divided differences `\pi_i`::
|
|
356
|
+
|
|
357
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, 1, 0)
|
|
358
|
+
B[(2, 2)]
|
|
359
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, 1, 0)
|
|
360
|
+
B[(1, 2)] + B[(2, 1)] + B[(3, 0)] + B[(0, 3)]
|
|
361
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, 1, 0)
|
|
362
|
+
-B[(1, 2)] - B[(2, 1)]
|
|
363
|
+
|
|
364
|
+
Or `1-\pi_i` for ``bar=True``::
|
|
365
|
+
|
|
366
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, 1, 0, convention='bar')
|
|
367
|
+
0
|
|
368
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, 1, 0, convention='bar')
|
|
369
|
+
-B[(1, 2)] - B[(2, 1)] - B[(0, 3)]
|
|
370
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, 1, 0, convention='bar')
|
|
371
|
+
B[(1, 2)] + B[(2, 1)] + B[(0, 3)]
|
|
372
|
+
|
|
373
|
+
At `q_1=1` and `q_2=-1` we recover the action of the simple reflection `s_i`::
|
|
374
|
+
|
|
375
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((2,2)), 1, 1, -1)
|
|
376
|
+
B[(2, 2)]
|
|
377
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((3,0)), 1, 1, -1)
|
|
378
|
+
B[(0, 3)]
|
|
379
|
+
sage: KL.demazure_lusztig_operator_on_basis(L((0,3)), 1, 1, -1)
|
|
380
|
+
B[(3, 0)]
|
|
381
|
+
"""
|
|
382
|
+
if convention == "dominant":
|
|
383
|
+
weight = -weight
|
|
384
|
+
pi_on_weight = self.isobaric_divided_difference_on_basis(weight, i)
|
|
385
|
+
if convention == "bar":
|
|
386
|
+
pi_on_weight = self.monomial(weight) - pi_on_weight
|
|
387
|
+
result = (q1+q2) * pi_on_weight - self.term(weight.simple_reflection(i), q2)
|
|
388
|
+
if convention == "dominant":
|
|
389
|
+
return result.map_support(operator.neg)
|
|
390
|
+
else:
|
|
391
|
+
return result
|
|
392
|
+
|
|
393
|
+
def demazure_lusztig_operators(self, q1, q2, convention='antidominant'):
|
|
394
|
+
r"""
|
|
395
|
+
Return the Demazure-Lusztig operators acting on ``self``.
|
|
396
|
+
|
|
397
|
+
INPUT:
|
|
398
|
+
|
|
399
|
+
- ``q1``, ``q2`` -- two elements of the ground ring
|
|
400
|
+
- ``convention`` -- "antidominant", "bar", or "dominant" (default: ``'antidominant'``)
|
|
401
|
+
|
|
402
|
+
If `R` is the parent weight ring, the Demazure-Lusztig
|
|
403
|
+
operator `T_i` is the linear map `R\rightarrow R` obtained
|
|
404
|
+
by interpolating between the isobaric divided difference
|
|
405
|
+
operator `\pi_i` (see :meth:`.isobaric_divided_difference_on_basis`)
|
|
406
|
+
and the simple reflection `s_i`.
|
|
407
|
+
|
|
408
|
+
.. MATH::
|
|
409
|
+
|
|
410
|
+
(q_1+q_2) \pi_i - q_2 s_i
|
|
411
|
+
|
|
412
|
+
The Demazure-Lusztig operators give the usual
|
|
413
|
+
representation of the operator `T_i` of the (affine) Hecke
|
|
414
|
+
algebra with eigenvalues `q_1` and `q_2` associated to the
|
|
415
|
+
Weyl group.
|
|
416
|
+
|
|
417
|
+
Several variants are available to match with various
|
|
418
|
+
conventions used in the literature:
|
|
419
|
+
|
|
420
|
+
- "bar" replaces `\pi_i` in the formula above by
|
|
421
|
+
`\overline{\pi}_i = (1-\pi_i)`.
|
|
422
|
+
- "dominant" conjugates the operator by
|
|
423
|
+
`x^\lambda \mapsto x^-\lambda`.
|
|
424
|
+
|
|
425
|
+
The names dominant and antidominant for the conventions were chosen with regards to
|
|
426
|
+
the nonsymmetric Macdonald polynomials. The `Y` operators for the Macdonald polynomials
|
|
427
|
+
in the "dominant" convention satisfy `Y_\lambda = T_{t_{\lambda}}` for `\lambda` dominant.
|
|
428
|
+
This is also the convention used in [Haiman06]_. For the "antidominant" convention,
|
|
429
|
+
`Y_\lambda = T_{t_{\lambda}}` with `\lambda` antidominant.
|
|
430
|
+
|
|
431
|
+
.. SEEALSO::
|
|
432
|
+
|
|
433
|
+
- :meth:`demazure_lusztig_operator_on_basis`.
|
|
434
|
+
- :class:`~.non_symmetric_macdonald_polynomials.NonSymmetricMacdonaldPolynomials`.
|
|
435
|
+
|
|
436
|
+
REFERENCES:
|
|
437
|
+
|
|
438
|
+
.. [Lusztig1985] \G. Lusztig,
|
|
439
|
+
*Equivariant K-theory and representations of Hecke algebras*,
|
|
440
|
+
Proc. Amer. Math. Soc. 94 (1985), no. 2, 337-342.
|
|
441
|
+
|
|
442
|
+
.. [Cherednik1995] \I. Cherednik,
|
|
443
|
+
*Nonsymmetric Macdonald polynomials*. IMRN 10, 483-515 (1995).
|
|
444
|
+
|
|
445
|
+
EXAMPLES::
|
|
446
|
+
|
|
447
|
+
sage: L = RootSystem(["A",1]).ambient_space()
|
|
448
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
449
|
+
sage: q1, q2 = K.gens()
|
|
450
|
+
sage: KL = L.algebra(K)
|
|
451
|
+
sage: T = KL.demazure_lusztig_operators(q1, q2)
|
|
452
|
+
sage: Tbar = KL.demazure_lusztig_operators(q1, q2, convention='bar')
|
|
453
|
+
sage: Tdominant = KL.demazure_lusztig_operators(q1, q2,
|
|
454
|
+
....: convention='dominant')
|
|
455
|
+
sage: x = KL.monomial(L((3,0)))
|
|
456
|
+
sage: T[1](x)
|
|
457
|
+
(q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
|
|
458
|
+
sage: Tbar[1](x)
|
|
459
|
+
-(q1+q2)*B[(1, 2)] - (q1+q2)*B[(2, 1)] - (q1+2*q2)*B[(0, 3)]
|
|
460
|
+
sage: Tbar[1](x) + T[1](x)
|
|
461
|
+
(q1+q2)*B[(3, 0)] - 2*q2*B[(0, 3)]
|
|
462
|
+
sage: Tdominant[1](x)
|
|
463
|
+
-(q1+q2)*B[(1, 2)] - (q1+q2)*B[(2, 1)] - q2*B[(0, 3)]
|
|
464
|
+
|
|
465
|
+
sage: Tdominant.Tw_inverse(1)(KL.monomial(-L.simple_root(1)))
|
|
466
|
+
-((q1+q2)/(q1*q2))*B[(0, 0)] - 1/q2*B[(1, -1)]
|
|
467
|
+
|
|
468
|
+
We repeat similar computation in the affine setting::
|
|
469
|
+
|
|
470
|
+
sage: L = RootSystem(["A",2,1]).ambient_space()
|
|
471
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
472
|
+
sage: q1, q2 = K.gens()
|
|
473
|
+
sage: KL = L.algebra(K)
|
|
474
|
+
sage: T = KL.demazure_lusztig_operators(q1, q2)
|
|
475
|
+
sage: Tbar = KL.demazure_lusztig_operators(q1, q2, convention='bar')
|
|
476
|
+
sage: Tdominant = KL.demazure_lusztig_operators(q1, q2,
|
|
477
|
+
....: convention='dominant')
|
|
478
|
+
sage: e = L.basis()
|
|
479
|
+
sage: x = KL.monomial(3*e[0])
|
|
480
|
+
sage: T[1](x)
|
|
481
|
+
(q1+q2)*B[e[0] + 2*e[1]] + (q1+q2)*B[2*e[0] + e[1]]
|
|
482
|
+
+ (q1+q2)*B[3*e[0]] + q1*B[3*e[1]]
|
|
483
|
+
sage: Tbar[1](x)
|
|
484
|
+
-(q1+q2)*B[e[0] + 2*e[1]] - (q1+q2)*B[2*e[0] + e[1]] - (q1+2*q2)*B[3*e[1]]
|
|
485
|
+
sage: Tbar[1](x) + T[1](x)
|
|
486
|
+
(q1+q2)*B[3*e[0]] - 2*q2*B[3*e[1]]
|
|
487
|
+
sage: Tdominant[1](x)
|
|
488
|
+
-(q1+q2)*B[e[0] + 2*e[1]] - (q1+q2)*B[2*e[0] + e[1]] - q2*B[3*e[1]]
|
|
489
|
+
sage: Tdominant.Tw_inverse(1)(KL.monomial(-L.simple_root(1)))
|
|
490
|
+
-((q1+q2)/(q1*q2))*B[0] - 1/q2*B[e[0] - e[1]]
|
|
491
|
+
|
|
492
|
+
One can obtain iterated operators by passing a reduced
|
|
493
|
+
word or an element of the Weyl group::
|
|
494
|
+
|
|
495
|
+
sage: T[1,2](x)
|
|
496
|
+
(q1^2+2*q1*q2+q2^2)*B[e[0] + e[1] + e[2]] +
|
|
497
|
+
(q1^2+2*q1*q2+q2^2)*B[e[0] + 2*e[1]] +
|
|
498
|
+
(q1^2+q1*q2)*B[e[0] + 2*e[2]] + (q1^2+2*q1*q2+q2^2)*B[2*e[0] + e[1]] +
|
|
499
|
+
(q1^2+q1*q2)*B[2*e[0] + e[2]] + (q1^2+q1*q2)*B[3*e[0]] +
|
|
500
|
+
(q1^2+q1*q2)*B[e[1] + 2*e[2]] + (q1^2+q1*q2)*B[2*e[1] + e[2]] +
|
|
501
|
+
(q1^2+q1*q2)*B[3*e[1]] + q1^2*B[3*e[2]]
|
|
502
|
+
|
|
503
|
+
and use that to check, for example, the braid relations::
|
|
504
|
+
|
|
505
|
+
sage: T[1,2,1](x) - T[2,1,2](x)
|
|
506
|
+
0
|
|
507
|
+
|
|
508
|
+
The operators satisfy the relations of the affine Hecke
|
|
509
|
+
algebra with parameters `q_1`, `q_2`::
|
|
510
|
+
|
|
511
|
+
sage: T._test_relations()
|
|
512
|
+
sage: Tdominant._test_relations()
|
|
513
|
+
sage: Tbar._test_relations() #-q2,q1+2*q2 # todo: not implemented: set the appropriate eigenvalues!
|
|
514
|
+
|
|
515
|
+
And the `\bar{T}` are basically the inverses of the `T` s::
|
|
516
|
+
|
|
517
|
+
sage: Tinv = KL.demazure_lusztig_operators(2/q1 + 1/q2, -1/q1,
|
|
518
|
+
....: convention='bar')
|
|
519
|
+
sage: [Tinv[1](T[1](x)) - x for x in KL.some_elements()] # needs sage.graphs
|
|
520
|
+
[0, 0, 0, 0, 0, 0, 0]
|
|
521
|
+
|
|
522
|
+
We check that `\Lambda_1-\Lambda_0` is an eigenvector for
|
|
523
|
+
the `Y` s in affine type::
|
|
524
|
+
|
|
525
|
+
sage: K = QQ['q,q1,q2'].fraction_field()
|
|
526
|
+
sage: q,q1,q2 = K.gens()
|
|
527
|
+
sage: L = RootSystem(["A",2,1]).ambient_space()
|
|
528
|
+
sage: L0 = L.classical()
|
|
529
|
+
sage: Lambda = L.fundamental_weights() # needs sage.graphs
|
|
530
|
+
sage: alphacheck = L0.simple_coroots()
|
|
531
|
+
sage: KL = L.algebra(K)
|
|
532
|
+
sage: T = KL.demazure_lusztig_operators(q1, q2, convention='dominant')
|
|
533
|
+
sage: Y = T.Y()
|
|
534
|
+
sage: alphacheck = Y.keys().alpha() # alpha of coroot lattice is alphacheck
|
|
535
|
+
sage: alphacheck
|
|
536
|
+
Finite family {0: alphacheck[0], 1: alphacheck[1], 2: alphacheck[2]}
|
|
537
|
+
sage: x = KL.monomial(Lambda[1] - Lambda[0]); x # needs sage.graphs
|
|
538
|
+
B[e[0]]
|
|
539
|
+
|
|
540
|
+
In fact it is not exactly an eigenvector, but the extra
|
|
541
|
+
'\delta` term is to be interpreted as a `q` parameter::
|
|
542
|
+
|
|
543
|
+
sage: # needs sage.graphs
|
|
544
|
+
sage: Y[alphacheck[0]](KL.one())
|
|
545
|
+
q2^2/q1^2*B[0]
|
|
546
|
+
sage: Y[alphacheck[1]](x)
|
|
547
|
+
-(q2^2/(-q1^2))*B[e[0] - e['delta']]
|
|
548
|
+
sage: Y[alphacheck[2]](x)
|
|
549
|
+
(q1/(-q2))*B[e[0]]
|
|
550
|
+
sage: KL.q_project(Y[alphacheck[1]](x),q)
|
|
551
|
+
-(q2^2/(-q*q1^2))*B[(1, 0, 0)]
|
|
552
|
+
|
|
553
|
+
sage: # needs sage.graphs
|
|
554
|
+
sage: KL.q_project(x, q)
|
|
555
|
+
B[(1, 0, 0)]
|
|
556
|
+
sage: KL.q_project(Y[alphacheck[0]](x),q)
|
|
557
|
+
-q*q1/q2*B[(1, 0, 0)]
|
|
558
|
+
sage: KL.q_project(Y[alphacheck[1]](x),q)
|
|
559
|
+
-(q2^2/(-q*q1^2))*B[(1, 0, 0)]
|
|
560
|
+
sage: KL.q_project(Y[alphacheck[2]](x),q)
|
|
561
|
+
(q1/(-q2))*B[(1, 0, 0)]
|
|
562
|
+
|
|
563
|
+
We now check systematically that the Demazure-Lusztig
|
|
564
|
+
operators satisfy the relations of the Iwahori-Hecke
|
|
565
|
+
algebra::
|
|
566
|
+
|
|
567
|
+
sage: K = QQ['q1,q2']
|
|
568
|
+
sage: q1, q2 = K.gens()
|
|
569
|
+
sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
|
|
570
|
+
....: L = RootSystem(cartan_type).root_lattice()
|
|
571
|
+
....: KL = L.algebra(K)
|
|
572
|
+
....: T = KL.demazure_lusztig_operators(q1,q2)
|
|
573
|
+
....: T._test_relations()
|
|
574
|
+
|
|
575
|
+
sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
|
|
576
|
+
....: L = RootSystem(cartan_type).weight_lattice()
|
|
577
|
+
....: KL = L.algebra(K)
|
|
578
|
+
....: T = KL.demazure_lusztig_operators(q1,q2)
|
|
579
|
+
....: T._test_relations()
|
|
580
|
+
|
|
581
|
+
Recall that the Demazure-Lusztig operators are only
|
|
582
|
+
defined when all monomials belong to the weight lattice.
|
|
583
|
+
Thus, in the group algebra of the ambient space, we need
|
|
584
|
+
to specify explicitly the elements on which to run the
|
|
585
|
+
tests::
|
|
586
|
+
|
|
587
|
+
sage: for cartan_type in CartanType.samples(crystallographic=True): # long time (12s)
|
|
588
|
+
....: L = RootSystem(cartan_type).ambient_space()
|
|
589
|
+
....: KL = L.algebra(K)
|
|
590
|
+
....: weight_lattice = RootSystem(cartan_type).weight_lattice(extended=L.is_extended())
|
|
591
|
+
....: elements = [ KL.monomial(L(weight)) for weight in weight_lattice.some_elements() ]
|
|
592
|
+
....: T = KL.demazure_lusztig_operators(q1,q2)
|
|
593
|
+
....: T._test_relations(elements=elements)
|
|
594
|
+
"""
|
|
595
|
+
T_on_basis = functools.partial(self.demazure_lusztig_operator_on_basis,
|
|
596
|
+
q1=q1, q2=q2, convention=convention)
|
|
597
|
+
return HeckeAlgebraRepresentation(self, T_on_basis, self.cartan_type(), q1, q2, side='left')
|
|
598
|
+
|
|
599
|
+
def demazure_lusztig_operator_on_classical_on_basis(self, weight, i, q, q1, q2, convention='antidominant'):
|
|
600
|
+
r"""
|
|
601
|
+
Return the result of applying the `i`-th Demazure-Lusztig operator on the classical weight ``weight`` embedded at level 0.
|
|
602
|
+
|
|
603
|
+
INPUT:
|
|
604
|
+
|
|
605
|
+
- ``weight`` -- a classical weight `\lambda`
|
|
606
|
+
- ``i`` -- an element of the index set
|
|
607
|
+
- ``q1``, ``q2`` -- two elements of the ground ring
|
|
608
|
+
- ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
|
|
609
|
+
|
|
610
|
+
See :meth:`demazure_lusztig_operators` for the details.
|
|
611
|
+
|
|
612
|
+
.. TODO::
|
|
613
|
+
|
|
614
|
+
- Optimize the code to only do the embedding/projection for T_0
|
|
615
|
+
- Add an option to specify at which level one wants to
|
|
616
|
+
work. Currently this is level 0.
|
|
617
|
+
|
|
618
|
+
EXAMPLES::
|
|
619
|
+
|
|
620
|
+
sage: L = RootSystem(["A",1,1]).ambient_space()
|
|
621
|
+
sage: L0 = L.classical()
|
|
622
|
+
sage: K = QQ['q,q1,q2']
|
|
623
|
+
sage: q, q1, q2 = K.gens()
|
|
624
|
+
sage: KL = L.algebra(K)
|
|
625
|
+
sage: KL0 = L0.algebra(K)
|
|
626
|
+
|
|
627
|
+
These operators coincide with the usual Demazure-Lusztig
|
|
628
|
+
operators::
|
|
629
|
+
|
|
630
|
+
sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((2,2)), # needs sage.graphs
|
|
631
|
+
....: 1, q, q1, q2)
|
|
632
|
+
q1*B[(2, 2)]
|
|
633
|
+
sage: KL0.demazure_lusztig_operator_on_basis(L0((2,2)), 1, q1, q2)
|
|
634
|
+
q1*B[(2, 2)]
|
|
635
|
+
|
|
636
|
+
sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((3,0)), # needs sage.graphs
|
|
637
|
+
....: 1, q, q1, q2)
|
|
638
|
+
(q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
|
|
639
|
+
sage: KL0.demazure_lusztig_operator_on_basis(L0((3,0)), 1, q1, q2)
|
|
640
|
+
(q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
|
|
641
|
+
|
|
642
|
+
except that we now have an action of `T_0`, which introduces some `q` s::
|
|
643
|
+
|
|
644
|
+
sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((2,2)), # needs sage.graphs
|
|
645
|
+
....: 0, q, q1, q2)
|
|
646
|
+
q1*B[(2, 2)]
|
|
647
|
+
sage: KL.demazure_lusztig_operator_on_classical_on_basis(L0((3,0)), # needs sage.graphs
|
|
648
|
+
....: 0, q, q1, q2)
|
|
649
|
+
-(q^2*q1+q^2*q2)*B[(1, 2)] - (q*q1+q*q2)*B[(2, 1)] - q^3*q2*B[(0, 3)]
|
|
650
|
+
"""
|
|
651
|
+
L = self.basis().keys()
|
|
652
|
+
weight = L.embed_at_level(weight, 0)
|
|
653
|
+
return self.q_project(self.demazure_lusztig_operator_on_basis(weight, i, q1, q2, convention=convention), q)
|
|
654
|
+
|
|
655
|
+
def demazure_lusztig_operators_on_classical(self, q, q1, q2, convention='antidominant'):
|
|
656
|
+
r"""
|
|
657
|
+
Return the Demazure-Lusztig operators acting at level 1 on ``self.classical()``.
|
|
658
|
+
|
|
659
|
+
INPUT:
|
|
660
|
+
|
|
661
|
+
- ``q``, ``q1``, ``q2`` -- three elements of the ground ring
|
|
662
|
+
- ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
|
|
663
|
+
|
|
664
|
+
Let `KL` be the group algebra of an affine weight lattice
|
|
665
|
+
realization `L`. The Demazure-Lusztig operators for `KL`
|
|
666
|
+
act on the group algebra of the corresponding classical
|
|
667
|
+
weight lattice by embedding it at level 1, and projecting
|
|
668
|
+
back.
|
|
669
|
+
|
|
670
|
+
.. SEEALSO::
|
|
671
|
+
|
|
672
|
+
- :meth:`demazure_lusztig_operators`.
|
|
673
|
+
- :meth:`demazure_lusztig_operator_on_classical_on_basis`.
|
|
674
|
+
- :meth:`q_project`
|
|
675
|
+
|
|
676
|
+
EXAMPLES::
|
|
677
|
+
|
|
678
|
+
sage: L = RootSystem(["A",1,1]).ambient_space()
|
|
679
|
+
sage: K = QQ['q,q1,q2'].fraction_field()
|
|
680
|
+
sage: q, q1, q2 = K.gens()
|
|
681
|
+
sage: KL = L.algebra(K)
|
|
682
|
+
sage: KL0 = KL.classical()
|
|
683
|
+
sage: L0 = KL0.basis().keys()
|
|
684
|
+
sage: T = KL.demazure_lusztig_operators_on_classical(q, q1, q2) # needs sage.graphs
|
|
685
|
+
|
|
686
|
+
sage: x = KL0.monomial(L0((3,0))); x
|
|
687
|
+
B[(3, 0)]
|
|
688
|
+
|
|
689
|
+
For `T_1,\dots` we recover the usual Demazure-Lusztig operators::
|
|
690
|
+
|
|
691
|
+
sage: T[1](x) # needs sage.graphs
|
|
692
|
+
(q1+q2)*B[(1, 2)] + (q1+q2)*B[(2, 1)] + (q1+q2)*B[(3, 0)] + q1*B[(0, 3)]
|
|
693
|
+
|
|
694
|
+
For `T_0`, we can note that, in the projection, `\delta`
|
|
695
|
+
is mapped to `q`::
|
|
696
|
+
|
|
697
|
+
sage: T[0](x) # needs sage.graphs
|
|
698
|
+
-(q^2*q1+q^2*q2)*B[(1, 2)] - (q*q1+q*q2)*B[(2, 1)] - q^3*q2*B[(0, 3)]
|
|
699
|
+
|
|
700
|
+
Note that there is no translation part, and in particular
|
|
701
|
+
1 is an eigenvector for all `T_i`'s::
|
|
702
|
+
|
|
703
|
+
sage: # needs sage.graphs
|
|
704
|
+
sage: T[0](KL0.one())
|
|
705
|
+
q1*B[(0, 0)]
|
|
706
|
+
sage: T[1](KL0.one())
|
|
707
|
+
q1*B[(0, 0)]
|
|
708
|
+
sage: Y = T.Y()
|
|
709
|
+
sage: alphacheck = Y.keys().simple_roots()
|
|
710
|
+
sage: Y[alphacheck[0]](KL0.one())
|
|
711
|
+
-q2/(q*q1)*B[(0, 0)]
|
|
712
|
+
|
|
713
|
+
Matching with Ion Bogdan's hand calculations from 3/15/2013::
|
|
714
|
+
|
|
715
|
+
sage: L = RootSystem(["A",1,1]).weight_space(extended=True)
|
|
716
|
+
sage: K = QQ['q,u'].fraction_field()
|
|
717
|
+
sage: q, u = K.gens()
|
|
718
|
+
sage: KL = L.algebra(K)
|
|
719
|
+
sage: KL0 = KL.classical()
|
|
720
|
+
sage: L0 = KL0.basis().keys()
|
|
721
|
+
sage: omega = L0.fundamental_weights()
|
|
722
|
+
|
|
723
|
+
sage: # needs sage.graphs
|
|
724
|
+
sage: T = KL.demazure_lusztig_operators_on_classical(q, u, -1/u,
|
|
725
|
+
....: convention='dominant')
|
|
726
|
+
sage: Y = T.Y()
|
|
727
|
+
sage: alphacheck = Y.keys().simple_roots()
|
|
728
|
+
sage: Ydelta = Y[Y.keys().null_root()]
|
|
729
|
+
sage: Ydelta.word, Ydelta.signs, Ydelta.scalar
|
|
730
|
+
((), (), 1/q)
|
|
731
|
+
sage: Y1 = Y[alphacheck[1]]
|
|
732
|
+
sage: Y1.word, Y1.signs, Y1.scalar # This is T_0 T_1 (T_1 acts first, then T_0); Ion gets T_1 T_0
|
|
733
|
+
((1, 0), (1, 1), 1)
|
|
734
|
+
sage: Y0 = Y[alphacheck[0]]
|
|
735
|
+
sage: Y0.word, Y0.signs, Y0.scalar # This is 1/q T_1^-1 T_0^-1
|
|
736
|
+
((0, 1), (-1, -1), 1/q)
|
|
737
|
+
|
|
738
|
+
Note that the following computations use the "dominant" convention::
|
|
739
|
+
|
|
740
|
+
sage: # needs sage.graphs
|
|
741
|
+
sage: T0 = T.Tw(0)
|
|
742
|
+
sage: T0(KL0.monomial(omega[1]))
|
|
743
|
+
q*u*B[-Lambda[1]] + ((u^2-1)/u)*B[Lambda[1]]
|
|
744
|
+
sage: T0(KL0.monomial(2*omega[1]))
|
|
745
|
+
((q*u^2-q)/u)*B[0] + q^2*u*B[-2*Lambda[1]] + ((u^2-1)/u)*B[2*Lambda[1]]
|
|
746
|
+
sage: T0(KL0.monomial(-omega[1]))
|
|
747
|
+
1/(q*u)*B[Lambda[1]]
|
|
748
|
+
sage: T0(KL0.monomial(-2*omega[1]))
|
|
749
|
+
-((u^2-1)/(q*u))*B[0] + 1/(q^2*u)*B[2*Lambda[1]]
|
|
750
|
+
"""
|
|
751
|
+
# In type BC dual we used q^2 and q elsewhere
|
|
752
|
+
# Not sure this is the right thing to do or just a workaround ...
|
|
753
|
+
# This probably makes up for the fact that, in type BC
|
|
754
|
+
# dual, the null coroot is twice Sage's deltacheck
|
|
755
|
+
# whereas the null root is delta. So we need to map delta
|
|
756
|
+
# to q^2 in the q_projection.
|
|
757
|
+
# Should this go in q_project instead?
|
|
758
|
+
ct = self.cartan_type()
|
|
759
|
+
a0check = ct.acheck()[ct.special_node()]
|
|
760
|
+
T_on_basis = functools.partial(self.demazure_lusztig_operator_on_classical_on_basis,
|
|
761
|
+
q1=q1, q2=q2, q=q**a0check, convention=convention)
|
|
762
|
+
return HeckeAlgebraRepresentation(self.classical(), T_on_basis, self.cartan_type(), q1=q1, q2=q2, q=q, side='left')
|
|
763
|
+
|
|
764
|
+
@cached_method
|
|
765
|
+
def T0_check_on_basis(self, q1, q2, convention='antidominant'):
|
|
766
|
+
r"""
|
|
767
|
+
Return the `T_0^\vee` operator acting on the basis.
|
|
768
|
+
|
|
769
|
+
This implements the formula for `T_{0'}` in Section 6.12 of [Haiman06]_.
|
|
770
|
+
|
|
771
|
+
REFERENCES:
|
|
772
|
+
|
|
773
|
+
.. [Haiman06] \M. Haiman, Cherednik algebras, Macdonald polynomials and combinatorics, ICM 2006.
|
|
774
|
+
|
|
775
|
+
.. WARNING::
|
|
776
|
+
|
|
777
|
+
The current implementation probably returns just
|
|
778
|
+
nonsense, if the convention is not "dominant".
|
|
779
|
+
|
|
780
|
+
EXAMPLES::
|
|
781
|
+
|
|
782
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
783
|
+
sage: q1,q2 = K.gens()
|
|
784
|
+
|
|
785
|
+
sage: L = RootSystem(["A",1,1]).ambient_space()
|
|
786
|
+
sage: L0 = L.classical()
|
|
787
|
+
sage: KL = L.algebra(K)
|
|
788
|
+
sage: some_weights = L.fundamental_weights() # needs sage.graphs
|
|
789
|
+
sage: f = KL.T0_check_on_basis(q1,q2, convention='dominant') # needs sage.graphs
|
|
790
|
+
sage: f(L0.zero()) # needs sage.graphs
|
|
791
|
+
(q1+q2)*B[(0, 0)] + q1*B[(1, -1)]
|
|
792
|
+
|
|
793
|
+
sage: L = RootSystem(["A",3,1]).ambient_space()
|
|
794
|
+
sage: L0 = L.classical()
|
|
795
|
+
sage: KL = L.algebra(K)
|
|
796
|
+
sage: some_weights = L0.fundamental_weights()
|
|
797
|
+
sage: f = KL.T0_check_on_basis(q1,q2, convention='dominant') # needs sage.graphs
|
|
798
|
+
sage: f(L0.zero()) # not checked # needs sage.graphs
|
|
799
|
+
(q1+q2)*B[(0, 0, 0, 0)] + q1^3/q2^2*B[(1, 0, 0, -1)]
|
|
800
|
+
|
|
801
|
+
The following results have not been checked::
|
|
802
|
+
|
|
803
|
+
sage: for x in some_weights: # needs sage.graphs
|
|
804
|
+
....: print("{} : {}".format(x, f(x)))
|
|
805
|
+
(1, 0, 0, 0) : q1*B[(1, 0, 0, 0)]
|
|
806
|
+
(1, 1, 0, 0) : q1*B[(1, 1, 0, 0)]
|
|
807
|
+
(1, 1, 1, 0) : q1*B[(1, 1, 1, 0)]
|
|
808
|
+
|
|
809
|
+
Some examples for type `B_2^{(1)}` dual::
|
|
810
|
+
|
|
811
|
+
sage: L = RootSystem("B2~*").ambient_space()
|
|
812
|
+
sage: L0 = L.classical()
|
|
813
|
+
sage: e = L.basis()
|
|
814
|
+
sage: K = QQ['q,u'].fraction_field()
|
|
815
|
+
sage: q,u = K.gens()
|
|
816
|
+
sage: q1 = u
|
|
817
|
+
sage: q2 = -1/u
|
|
818
|
+
sage: KL = L.algebra(K)
|
|
819
|
+
sage: KL0 = KL.classical()
|
|
820
|
+
sage: f = KL.T0_check_on_basis(q1,q2, convention='dominant') # needs sage.graphs
|
|
821
|
+
sage: T = KL.twisted_demazure_lusztig_operators(q1,q2, convention='dominant')
|
|
822
|
+
|
|
823
|
+
Direct calculation::
|
|
824
|
+
|
|
825
|
+
sage: T.Tw(0)(KL0.monomial(L0([0,0]))) # needs sage.graphs
|
|
826
|
+
((u^2-1)/u)*B[(0, 0)] + u^3*B[(1, 1)]
|
|
827
|
+
sage: KL.T0_check_on_basis(q1,q2, convention='dominant')(L0([0,0])) # needs sage.graphs
|
|
828
|
+
((u^2-1)/u)*B[(0, 0)] + u^3*B[(1, 1)]
|
|
829
|
+
|
|
830
|
+
Step by step calculation, comparing by hand with Mark Shimozono::
|
|
831
|
+
|
|
832
|
+
sage: res = T.Tw(2)(KL0.monomial(L0([0,0]))); res
|
|
833
|
+
u*B[(0, 0)]
|
|
834
|
+
sage: res = res * KL0.monomial(L0([-1,1])); res
|
|
835
|
+
u*B[(-1, 1)]
|
|
836
|
+
sage: res = T.Tw_inverse(1)(res); res
|
|
837
|
+
(u^2-1)*B[(0, 0)] + u^2*B[(1, -1)]
|
|
838
|
+
sage: res = T.Tw_inverse(2)(res); res
|
|
839
|
+
((u^2-1)/u)*B[(0, 0)] + u^3*B[(1, 1)]
|
|
840
|
+
"""
|
|
841
|
+
L = self.basis().keys()
|
|
842
|
+
ct = L.cartan_type()
|
|
843
|
+
special_node = ct.special_node()
|
|
844
|
+
a0 = ct.a()[special_node]
|
|
845
|
+
A0 = self.classical()
|
|
846
|
+
T = A0.demazure_lusztig_operators(q1, q2, convention=convention)
|
|
847
|
+
# TODO: use the formula expressing the inverse of T as a Demazure Lusztig operator? Or go through the affine action of T_0 for the dual
|
|
848
|
+
L0 = A0.basis().keys()
|
|
849
|
+
# The dominant short root of the classical system
|
|
850
|
+
if ct.type() == 'BC':
|
|
851
|
+
# CHECKME: this is not exactly phi, but phi rescaled
|
|
852
|
+
# appropriately so that it's in the orbit of the
|
|
853
|
+
# simple classical roots
|
|
854
|
+
phi = -a0*L0(L.simple_roots()[0])
|
|
855
|
+
else:
|
|
856
|
+
phi = L0(L0.root_system.coroot_lattice().highest_root().associated_coroot())
|
|
857
|
+
# Variant: try to fetch it from the other affinization; something like:
|
|
858
|
+
# The a0 only has an influence in type BC; it handles the fact that alpha_0
|
|
859
|
+
# is not in the orbit of the classical roots
|
|
860
|
+
#phi1 = - L0(L'.other_affinization().simple_roots()[special_node]) * a0
|
|
861
|
+
#assert phi == phi1
|
|
862
|
+
|
|
863
|
+
j, v = phi.to_simple_root(reduced_word=True)
|
|
864
|
+
translation = A0.monomial(-L0.simple_root(j)/a0)
|
|
865
|
+
Tv = T[v]
|
|
866
|
+
Tinv = T.Tw_inverse(v+(j,))
|
|
867
|
+
|
|
868
|
+
def T0_check(weight):
|
|
869
|
+
return -q1*q2*Tinv( translation * Tv(A0.monomial(weight)))
|
|
870
|
+
# For debugging purposes
|
|
871
|
+
T0_check.phi = phi
|
|
872
|
+
T0_check.j = j
|
|
873
|
+
T0_check.v = v
|
|
874
|
+
return T0_check
|
|
875
|
+
|
|
876
|
+
@cached_method
|
|
877
|
+
def classical(self):
|
|
878
|
+
"""
|
|
879
|
+
Return the group algebra of the corresponding classical lattice.
|
|
880
|
+
|
|
881
|
+
EXAMPLES::
|
|
882
|
+
|
|
883
|
+
sage: KL = RootSystem(["A",2,1]).ambient_space().algebra(QQ)
|
|
884
|
+
sage: KL.classical()
|
|
885
|
+
Algebra of the Ambient space of the Root system of type ['A', 2] over Rational Field
|
|
886
|
+
"""
|
|
887
|
+
return self.basis().keys().classical().algebra(self.base_ring())
|
|
888
|
+
|
|
889
|
+
def q_project_on_basis(self, l, q):
|
|
890
|
+
r"""
|
|
891
|
+
Return the monomial `c * cl(l)` in the group algebra of the classical lattice.
|
|
892
|
+
|
|
893
|
+
INPUT:
|
|
894
|
+
|
|
895
|
+
- ``l`` -- an element of the root lattice realization
|
|
896
|
+
- ``q`` -- an element of the ground ring
|
|
897
|
+
|
|
898
|
+
Here, `cl(l)` is the projection of `l` in the classical
|
|
899
|
+
lattice, and `c` is the coefficient of `l` in `\delta`.
|
|
900
|
+
|
|
901
|
+
.. SEEALSO:: :meth:`q_project_on_basis`
|
|
902
|
+
|
|
903
|
+
EXAMPLES::
|
|
904
|
+
|
|
905
|
+
sage: K = QQ['q'].fraction_field()
|
|
906
|
+
sage: q = K.gen()
|
|
907
|
+
sage: KL = RootSystem(["A",2,1]).ambient_space().algebra(K)
|
|
908
|
+
sage: L = KL.basis().keys()
|
|
909
|
+
sage: e = L.basis()
|
|
910
|
+
sage: KL.q_project_on_basis(4*e[1] + 3*e[2]
|
|
911
|
+
....: + e['deltacheck'] - 2*e['delta'], q)
|
|
912
|
+
1/q^2*B[(0, 4, 3)]
|
|
913
|
+
"""
|
|
914
|
+
KL0 = self.classical()
|
|
915
|
+
L0 = KL0.basis().keys()
|
|
916
|
+
return KL0.term(L0(l), q**l["delta"])
|
|
917
|
+
|
|
918
|
+
def q_project(self, x, q):
|
|
919
|
+
r"""
|
|
920
|
+
Implement the `q`-projection morphism from ``self`` to the group algebra of the classical space.
|
|
921
|
+
|
|
922
|
+
INPUT:
|
|
923
|
+
|
|
924
|
+
- ``x`` -- an element of the group algebra of ``self``
|
|
925
|
+
- ``q`` -- an element of the ground ring
|
|
926
|
+
|
|
927
|
+
This is an algebra morphism mapping `\delta` to `q` and
|
|
928
|
+
`X^b` to its classical counterpart for the other elements
|
|
929
|
+
`b` of the basis of the realization.
|
|
930
|
+
|
|
931
|
+
EXAMPLES::
|
|
932
|
+
|
|
933
|
+
sage: K = QQ['q'].fraction_field()
|
|
934
|
+
sage: q = K.gen()
|
|
935
|
+
sage: KL = RootSystem(["A",2,1]).ambient_space().algebra(K)
|
|
936
|
+
sage: L = KL.basis().keys()
|
|
937
|
+
sage: e = L.basis()
|
|
938
|
+
sage: x = (KL.an_element()
|
|
939
|
+
....: + KL.monomial(4*e[1] + 3*e[2]
|
|
940
|
+
....: + e['deltacheck'] - 2*e['delta'])); x
|
|
941
|
+
B[2*e[0] + 2*e[1] + 3*e[2]]
|
|
942
|
+
+ B[4*e[1] + 3*e[2] - 2*e['delta'] + e['deltacheck']]
|
|
943
|
+
sage: KL.q_project(x, q)
|
|
944
|
+
B[(2, 2, 3)] + 1/q^2*B[(0, 4, 3)]
|
|
945
|
+
|
|
946
|
+
sage: KL = RootSystem(["BC",3,2]).ambient_space().algebra(K)
|
|
947
|
+
sage: L = KL.basis().keys()
|
|
948
|
+
sage: e = L.basis()
|
|
949
|
+
sage: x = (KL.an_element()
|
|
950
|
+
....: + KL.monomial(4*e[1] + 3*e[2]
|
|
951
|
+
....: + e['deltacheck'] - 2*e['delta'])); x
|
|
952
|
+
B[2*e[0] + 2*e[1] + 3*e[2]]
|
|
953
|
+
+ B[4*e[1] + 3*e[2] - 2*e['delta'] + e['deltacheck']]
|
|
954
|
+
sage: KL.q_project(x, q)
|
|
955
|
+
B[(2, 2, 3)] + 1/q^2*B[(0, 4, 3)]
|
|
956
|
+
|
|
957
|
+
.. WARNING::
|
|
958
|
+
|
|
959
|
+
Recall that the null root, usually denoted `\delta`,
|
|
960
|
+
is in fact ``a[0]\delta`` in Sage's notation, in order
|
|
961
|
+
to avoid half integer coefficients (this only makes a
|
|
962
|
+
difference in type BC). Similarly, what's usually
|
|
963
|
+
denoted `q` is in fact ``q^a[0]`` in Sage's notations,
|
|
964
|
+
to avoid manipulating square roots::
|
|
965
|
+
|
|
966
|
+
sage: KL.q_project(KL.monomial(L.null_root()),q) # needs sage.graphs
|
|
967
|
+
q^2*B[(0, 0, 0)]
|
|
968
|
+
"""
|
|
969
|
+
L0 = self.classical()
|
|
970
|
+
return L0.linear_combination( (self.q_project_on_basis(l, q), c) for l,c in x )
|
|
971
|
+
|
|
972
|
+
def twisted_demazure_lusztig_operator_on_basis(self, weight, i, q1, q2, convention='antidominant'):
|
|
973
|
+
r"""
|
|
974
|
+
Return the twisted Demazure-Lusztig operator acting on the basis.
|
|
975
|
+
|
|
976
|
+
INPUT:
|
|
977
|
+
|
|
978
|
+
- ``weight`` -- an element `\lambda` of the weight lattice
|
|
979
|
+
- ``i`` -- an element of the index set
|
|
980
|
+
- ``q1``, ``q2`` -- two elements of the ground ring
|
|
981
|
+
- ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
|
|
982
|
+
|
|
983
|
+
.. SEEALSO:: :meth:`twisted_demazure_lusztig_operators`
|
|
984
|
+
|
|
985
|
+
EXAMPLES::
|
|
986
|
+
|
|
987
|
+
sage: L = RootSystem(["A",3,1]).ambient_space()
|
|
988
|
+
sage: e = L.basis()
|
|
989
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
990
|
+
sage: q1, q2 = K.gens()
|
|
991
|
+
sage: KL = L.algebra(K)
|
|
992
|
+
sage: Lambda = L.classical().fundamental_weights()
|
|
993
|
+
sage: KL.twisted_demazure_lusztig_operator_on_basis(
|
|
994
|
+
....: Lambda[1] + 2*Lambda[2], 1, q1, q2, convention='dominant')
|
|
995
|
+
-q2*B[(2, 3, 0, 0)]
|
|
996
|
+
sage: KL.twisted_demazure_lusztig_operator_on_basis(
|
|
997
|
+
....: Lambda[1] + 2*Lambda[2], 2, q1, q2, convention='dominant')
|
|
998
|
+
-(q1+q2)*B[(3, 1, 1, 0)] - q2*B[(3, 0, 2, 0)]
|
|
999
|
+
sage: KL.twisted_demazure_lusztig_operator_on_basis(
|
|
1000
|
+
....: Lambda[1] + 2*Lambda[2], 3, q1, q2, convention='dominant')
|
|
1001
|
+
q1*B[(3, 2, 0, 0)]
|
|
1002
|
+
sage: KL.twisted_demazure_lusztig_operator_on_basis( # needs sage.graphs
|
|
1003
|
+
....: Lambda[1]+2*Lambda[2], 0, q1, q2, convention='dominant')
|
|
1004
|
+
((q1*q2+q2^2)/q1)*B[(1, 2, 1, 1)] + ((q1*q2+q2^2)/q1)*B[(1, 2, 2, 0)]
|
|
1005
|
+
+ q2^2/q1*B[(1, 2, 0, 2)] + ((q1^2+2*q1*q2+q2^2)/q1)*B[(2, 1, 1, 1)]
|
|
1006
|
+
+ ((q1^2+2*q1*q2+q2^2)/q1)*B[(2, 1, 2, 0)]
|
|
1007
|
+
+ ((q1*q2+q2^2)/q1)*B[(2, 1, 0, 2)]
|
|
1008
|
+
+ ((q1^2+2*q1*q2+q2^2)/q1)*B[(2, 2, 1, 0)]
|
|
1009
|
+
+ ((q1*q2+q2^2)/q1)*B[(2, 2, 0, 1)]
|
|
1010
|
+
"""
|
|
1011
|
+
if i == 0: # should use the special node
|
|
1012
|
+
if convention != "dominant":
|
|
1013
|
+
raise NotImplementedError("The twisted Demazure-Lusztig operator T_0 is only implemented in the dominant convention")
|
|
1014
|
+
return self.T0_check_on_basis(q1, q2, convention=convention)(weight)
|
|
1015
|
+
else:
|
|
1016
|
+
L = self.classical()
|
|
1017
|
+
return L.demazure_lusztig_operators(q1, q2, convention=convention)[i](L.monomial(weight))
|
|
1018
|
+
|
|
1019
|
+
def twisted_demazure_lusztig_operators(self, q1, q2, convention='antidominant'):
|
|
1020
|
+
r"""
|
|
1021
|
+
Return the twisted Demazure-Lusztig operators acting on ``self``.
|
|
1022
|
+
|
|
1023
|
+
INPUT:
|
|
1024
|
+
|
|
1025
|
+
- ``q1``, ``q2`` -- two elements of the ground ring
|
|
1026
|
+
- ``convention`` -- ``'antidominant'``, ``'bar'``, or ``'dominant'`` (default: ``'antidominant'``)
|
|
1027
|
+
|
|
1028
|
+
.. WARNING::
|
|
1029
|
+
|
|
1030
|
+
- the code is currently only tested for `q_1q_2=-1`
|
|
1031
|
+
- only the ``'dominant'`` convention is functional for `i=0`
|
|
1032
|
+
|
|
1033
|
+
For `T_1,\ldots,T_n`, these operators are the usual
|
|
1034
|
+
Demazure-Lusztig operators. On the other hand, the
|
|
1035
|
+
operator `T_0` is twisted::
|
|
1036
|
+
|
|
1037
|
+
sage: L = RootSystem(["A",3,1]).ambient_space()
|
|
1038
|
+
sage: e = L.basis()
|
|
1039
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1040
|
+
sage: q1, q2 = K.gens()
|
|
1041
|
+
sage: KL = L.algebra(K)
|
|
1042
|
+
sage: T = KL.twisted_demazure_lusztig_operators(q1, q2, convention='dominant')
|
|
1043
|
+
sage: T._test_relations()
|
|
1044
|
+
|
|
1045
|
+
TESTS:
|
|
1046
|
+
|
|
1047
|
+
The following computations were checked with Mark Shimozono for type `A_1^{(1)}`::
|
|
1048
|
+
|
|
1049
|
+
sage: L = RootSystem(["A",1,1]).ambient_space()
|
|
1050
|
+
sage: e = L.basis()
|
|
1051
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1052
|
+
sage: q1,q2 = K.gens()
|
|
1053
|
+
sage: KL = L.algebra(K)
|
|
1054
|
+
sage: T = KL.twisted_demazure_lusztig_operators(q1, q2, convention='dominant')
|
|
1055
|
+
sage: T._test_relations()
|
|
1056
|
+
sage: L0 = L.classical()
|
|
1057
|
+
sage: alpha = L0.simple_roots()
|
|
1058
|
+
sage: T.Ti_on_basis(L0.zero(), 1)
|
|
1059
|
+
q1*B[(0, 0)]
|
|
1060
|
+
sage: T.Ti_inverse_on_basis(L0.zero(), 1)
|
|
1061
|
+
1/q1*B[(0, 0)]
|
|
1062
|
+
sage: T.Ti_on_basis(alpha[1], 1)
|
|
1063
|
+
-(q1+q2)*B[(0, 0)] - q2*B[(-1, 1)]
|
|
1064
|
+
sage: T.Ti_inverse_on_basis(alpha[1], 1)
|
|
1065
|
+
((q1+q2)/(q1*q2))*B[(0, 0)] + 1/q1*B[(-1, 1)] + ((q1+q2)/(q1*q2))*B[(1, -1)]
|
|
1066
|
+
sage: T.Ti_on_basis(L0.zero(), 0) # needs sage.graphs
|
|
1067
|
+
(q1+q2)*B[(0, 0)] + q1*B[(1, -1)]
|
|
1068
|
+
|
|
1069
|
+
The next computations were checked with Mark Shimozono for type `A_2^{(1)}`::
|
|
1070
|
+
|
|
1071
|
+
sage: L = RootSystem(["A",2,1]).ambient_space()
|
|
1072
|
+
sage: e = L.basis()
|
|
1073
|
+
sage: K = QQ['u'].fraction_field()
|
|
1074
|
+
sage: u = K.gen()
|
|
1075
|
+
sage: KL = L.algebra(K)
|
|
1076
|
+
sage: T = KL.twisted_demazure_lusztig_operators(u, -~u, convention='dominant')
|
|
1077
|
+
sage: T._test_relations()
|
|
1078
|
+
sage: L0 = L.classical()
|
|
1079
|
+
sage: KL0 = L0.algebra(K)
|
|
1080
|
+
sage: alpha = L0.simple_roots()
|
|
1081
|
+
|
|
1082
|
+
sage: phi = L0.highest_root(); phi
|
|
1083
|
+
(1, 0, -1)
|
|
1084
|
+
sage: phi.to_simple_root(reduced_word=True)
|
|
1085
|
+
(2, (1,))
|
|
1086
|
+
sage: res = T.Ti_on_basis(L0([1,0,1]), 1); res
|
|
1087
|
+
1/u*B[(0, 1, 1)]
|
|
1088
|
+
sage: res = res * KL0.monomial(-alpha[2]); res
|
|
1089
|
+
1/u*B[(0, 0, 2)]
|
|
1090
|
+
sage: res = T.Tw_inverse(2)(res); res
|
|
1091
|
+
((u^2-1)/u^2)*B[(0, 1, 1)] + B[(0, 2, 0)]
|
|
1092
|
+
sage: res = T.Tw_inverse(1)(res); res
|
|
1093
|
+
((u^2-1)/u)*B[(1, 1, 0)] + ((u^2-1)/u)*B[(1, 0, 1)] + u*B[(2, 0, 0)]
|
|
1094
|
+
|
|
1095
|
+
.. TODO::
|
|
1096
|
+
|
|
1097
|
+
Choose a good set of Cartan Type to run on. Rank >4 is
|
|
1098
|
+
too big. But `C_1` and `B_1` are boring.
|
|
1099
|
+
|
|
1100
|
+
We now check systematically that those operators satisfy
|
|
1101
|
+
the relations of the Iwahori-Hecke algebra::
|
|
1102
|
+
|
|
1103
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1104
|
+
sage: q1, q2 = K.gens()
|
|
1105
|
+
sage: for cartan_type in CartanType.samples(affine=True, crystallographic=True): # long time (12s)
|
|
1106
|
+
....: if cartan_type.rank() > 4: continue
|
|
1107
|
+
....: if cartan_type.type() == 'BC': continue
|
|
1108
|
+
....: KL = RootSystem(cartan_type).weight_lattice().algebra(K)
|
|
1109
|
+
....: T = KL.twisted_demazure_lusztig_operators(q1, q2, convention='dominant')
|
|
1110
|
+
....: T._test_relations()
|
|
1111
|
+
|
|
1112
|
+
.. TODO::
|
|
1113
|
+
|
|
1114
|
+
Investigate why `T_0^\vee` currently does not satisfy
|
|
1115
|
+
the quadratic relation in type `BC`. This should
|
|
1116
|
+
hopefully be fixed when `T_0^\vee` will have a more
|
|
1117
|
+
uniform implementation::
|
|
1118
|
+
|
|
1119
|
+
sage: cartan_type = CartanType(["BC",1,2])
|
|
1120
|
+
sage: KL = RootSystem(cartan_type).weight_lattice().algebra(K)
|
|
1121
|
+
sage: T = KL.twisted_demazure_lusztig_operators(q1,q2, convention='dominant')
|
|
1122
|
+
sage: T._test_relations() # needs sage.graphs
|
|
1123
|
+
Traceback (most recent call last):
|
|
1124
|
+
... tester.assertTrue(Ti(Ti(x,i,-q2),i,-q1).is_zero()) ...
|
|
1125
|
+
AssertionError: False is not true
|
|
1126
|
+
|
|
1127
|
+
Comparison with T0::
|
|
1128
|
+
|
|
1129
|
+
sage: L = RootSystem(["A",2,1]).ambient_space()
|
|
1130
|
+
sage: e = L.basis()
|
|
1131
|
+
sage: K = QQ['t,q'].fraction_field()
|
|
1132
|
+
sage: t,q = K.gens()
|
|
1133
|
+
sage: q1 = t
|
|
1134
|
+
sage: q2 = -1
|
|
1135
|
+
sage: KL = L.algebra(K)
|
|
1136
|
+
sage: L0 = L.classical()
|
|
1137
|
+
sage: T = KL.demazure_lusztig_operators(q1,q2, convention='dominant')
|
|
1138
|
+
sage: def T0(*l0): return KL.q_project(T[0].on_basis()(L.embed_at_level(L0(l0), 1)), q)
|
|
1139
|
+
sage: T0_check_on_basis = KL.T0_check_on_basis(q1, q2, # needs sage.graphs
|
|
1140
|
+
....: convention='dominant')
|
|
1141
|
+
sage: def T0c(*l0): return T0_check_on_basis(L0(l0))
|
|
1142
|
+
|
|
1143
|
+
sage: T0(0,0,1) # not double checked # needs sage.graphs
|
|
1144
|
+
-((t-1)/q)*B[(1, 0, 0)] + 1/q^2*B[(2, 0, -1)]
|
|
1145
|
+
sage: T0c(0,0,1) # needs sage.graphs
|
|
1146
|
+
(t^2-t)*B[(1, 0, 0)] + (t^2-t)*B[(1, 1, -1)] + t^2*B[(2, 0, -1)] + (t-1)*B[(0, 0, 1)]
|
|
1147
|
+
"""
|
|
1148
|
+
T_on_basis = functools.partial(self.twisted_demazure_lusztig_operator_on_basis,
|
|
1149
|
+
q1=q1, q2=q2, convention=convention)
|
|
1150
|
+
return HeckeAlgebraRepresentation(self.classical(),
|
|
1151
|
+
T_on_basis,
|
|
1152
|
+
self.cartan_type().classical().dual().affine().dual(),
|
|
1153
|
+
q1, q2,
|
|
1154
|
+
side='left')
|
|
1155
|
+
|
|
1156
|
+
class ElementMethods:
|
|
1157
|
+
|
|
1158
|
+
def acted_upon(self, w):
|
|
1159
|
+
"""
|
|
1160
|
+
Implement the action of ``w`` on ``self``.
|
|
1161
|
+
|
|
1162
|
+
INPUT:
|
|
1163
|
+
|
|
1164
|
+
- ``w`` -- an element of the Weyl group acting on the underlying weight lattice realization
|
|
1165
|
+
|
|
1166
|
+
EXAMPLES::
|
|
1167
|
+
|
|
1168
|
+
sage: L = RootSystem(["A",3]).ambient_space()
|
|
1169
|
+
sage: W = L.weyl_group() # needs sage.libs.gap
|
|
1170
|
+
sage: M = L.algebra(QQ['q','t'])
|
|
1171
|
+
sage: m = M.an_element(); m # TODO: investigate why we don't get something more interesting
|
|
1172
|
+
B[(2, 2, 3, 0)]
|
|
1173
|
+
sage: m = (m+1)^2; m
|
|
1174
|
+
B[(0, 0, 0, 0)] + 2*B[(2, 2, 3, 0)] + B[(4, 4, 6, 0)]
|
|
1175
|
+
sage: w = W.an_element(); w.reduced_word() # needs sage.libs.gap
|
|
1176
|
+
[1, 2, 3]
|
|
1177
|
+
sage: m.acted_upon(w) # needs sage.libs.gap
|
|
1178
|
+
B[(0, 0, 0, 0)] + 2*B[(0, 2, 2, 3)] + B[(0, 4, 4, 6)]
|
|
1179
|
+
"""
|
|
1180
|
+
return self.map_support(w.action)
|
|
1181
|
+
|
|
1182
|
+
def expand(self, alphabet):
|
|
1183
|
+
"""
|
|
1184
|
+
Expand ``self`` into variables in the ``alphabet``.
|
|
1185
|
+
|
|
1186
|
+
INPUT:
|
|
1187
|
+
|
|
1188
|
+
- ``alphabet`` -- a non empty list/tuple of (invertible) variables in a ring to expand in
|
|
1189
|
+
|
|
1190
|
+
EXAMPLES::
|
|
1191
|
+
|
|
1192
|
+
sage: L = RootSystem(["A",2]).ambient_lattice()
|
|
1193
|
+
sage: KL = L.algebra(QQ)
|
|
1194
|
+
sage: p = KL.an_element() + KL.sum_of_monomials(L.some_elements()); p
|
|
1195
|
+
B[(1, 0, 0)] + B[(1, -1, 0)] + B[(1, 1, 0)] + 2*B[(2, 2, 3)] + B[(0, 1, -1)]
|
|
1196
|
+
sage: F = LaurentPolynomialRing(QQ, 'x,y,z')
|
|
1197
|
+
sage: p.expand(F.gens())
|
|
1198
|
+
2*x^2*y^2*z^3 + x*y + x + y*z^-1 + x*y^-1
|
|
1199
|
+
|
|
1200
|
+
TESTS::
|
|
1201
|
+
|
|
1202
|
+
sage: type(p.expand(F.gens()))
|
|
1203
|
+
<class 'sage.rings.polynomial.laurent_polynomial_mpair.LaurentPolynomial_mpair'>
|
|
1204
|
+
|
|
1205
|
+
sage: p = KL.zero()
|
|
1206
|
+
sage: p.expand(F.gens())
|
|
1207
|
+
0
|
|
1208
|
+
sage: type(p.expand(F.gens()))
|
|
1209
|
+
<class 'sage.rings.polynomial.laurent_polynomial_mpair.LaurentPolynomial_mpair'>
|
|
1210
|
+
"""
|
|
1211
|
+
codomain = alphabet[0].parent()
|
|
1212
|
+
return codomain.sum(c * prod(X**int(n)
|
|
1213
|
+
for X, n in zip(alphabet, vector(m)))
|
|
1214
|
+
for m, c in self)
|