passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_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 +808 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-bb76a5fc.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.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-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.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-musl.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-musl.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-musl.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-musl.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,1203 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.graphs sage.libs.gap sage.groups
|
|
3
|
+
r"""
|
|
4
|
+
Hecke algebra representations
|
|
5
|
+
"""
|
|
6
|
+
# ***************************************************************************
|
|
7
|
+
# Copyright (C) 2013 Nicolas M. Thiery <nthiery at users.sf.net>
|
|
8
|
+
# Anne Schilling <anne at math.ucdavis.edu>
|
|
9
|
+
#
|
|
10
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
11
|
+
# https://www.gnu.org/licenses/
|
|
12
|
+
# ***************************************************************************
|
|
13
|
+
import functools
|
|
14
|
+
from sage.misc.abstract_method import abstract_method
|
|
15
|
+
from sage.misc.cachefunc import cached_method
|
|
16
|
+
from sage.misc.fast_methods import WithEqualityById
|
|
17
|
+
from sage.structure.sage_object import SageObject
|
|
18
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
19
|
+
from sage.sets.family import Family
|
|
20
|
+
from sage.combinat.subset import Subsets
|
|
21
|
+
from sage.rings.infinity import infinity
|
|
22
|
+
from sage.rings.integer_ring import ZZ
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class HeckeAlgebraRepresentation(WithEqualityById, SageObject):
|
|
26
|
+
r"""
|
|
27
|
+
A representation of an (affine) Hecke algebra given by the action of the `T` generators.
|
|
28
|
+
|
|
29
|
+
Let `F_i` be a family of operators implementing an action of the
|
|
30
|
+
operators `(T_i)_{i\in I}` of the Hecke algebra on some vector
|
|
31
|
+
space ``domain``, given by their action on the basis of
|
|
32
|
+
``domain``. This constructs the family of operators `(F_w)_{w\in
|
|
33
|
+
W}` describing the action of all elements of the basis
|
|
34
|
+
`(T_w)_{w\in W}` of the Hecke algebra. This is achieved by
|
|
35
|
+
linearity on the first argument, and applying recursively the
|
|
36
|
+
`F_i` along a reduced word for `w=s_{i_1}\cdots s_{i_k}`:
|
|
37
|
+
|
|
38
|
+
.. MATH::
|
|
39
|
+
|
|
40
|
+
F_w (x) = F_{i_k}\circ\cdots\circ F_{i_1}(x) .
|
|
41
|
+
|
|
42
|
+
INPUT:
|
|
43
|
+
|
|
44
|
+
- ``domain`` -- a vector space
|
|
45
|
+
- ``f`` -- a function ``f(l,i)`` taking a basis element `l` of ``domain`` and an index `i`, and returning `F_i`
|
|
46
|
+
- ``cartan_type`` -- the Cartan type of the Hecke algebra
|
|
47
|
+
- ``q1``, ``q2`` -- the eigenvalues of the generators `T` of the Hecke algebra
|
|
48
|
+
- ``side`` -- ``'left'`` or ``'right'`` (default: ``'right'``)
|
|
49
|
+
whether this is a left or right representation
|
|
50
|
+
|
|
51
|
+
EXAMPLES::
|
|
52
|
+
|
|
53
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
54
|
+
sage: q1, q2 = K.gens()
|
|
55
|
+
sage: KW = WeylGroup(["A",3]).algebra(QQ)
|
|
56
|
+
sage: H = KW.demazure_lusztig_operators(q1,q2); H
|
|
57
|
+
A representation of the (q1, q2)-Hecke algebra of type ['A', 3, 1]
|
|
58
|
+
on Algebra of Weyl Group of type ['A', 3]
|
|
59
|
+
(as a matrix group acting on the ambient space)
|
|
60
|
+
over Rational Field
|
|
61
|
+
|
|
62
|
+
Among other things, it implements the `T_w` operators, their
|
|
63
|
+
inverses and compositions thereof::
|
|
64
|
+
|
|
65
|
+
sage: H.Tw((1,2))
|
|
66
|
+
Generic endomorphism of Algebra of Weyl Group of type ['A', 3]
|
|
67
|
+
(as a matrix group acting on the ambient space) over Rational Field
|
|
68
|
+
|
|
69
|
+
and the Cherednik operators `Y^{\lambda^\vee}`::
|
|
70
|
+
|
|
71
|
+
sage: H.Y()
|
|
72
|
+
Lazy family (...)_{i in Coroot lattice of the Root system of type ['A', 3, 1]}
|
|
73
|
+
|
|
74
|
+
TESTS::
|
|
75
|
+
|
|
76
|
+
sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
|
|
77
|
+
sage: W = SymmetricGroup(3)
|
|
78
|
+
sage: domain = W.algebra(QQ)
|
|
79
|
+
sage: action = lambda x,i: domain.monomial(x.apply_simple_reflection(i, side='right'))
|
|
80
|
+
sage: r = HeckeAlgebraRepresentation(domain, action, CartanType(["A",2]), 1, -1)
|
|
81
|
+
sage: hash(r) # random
|
|
82
|
+
3
|
|
83
|
+
|
|
84
|
+
REFERENCES:
|
|
85
|
+
|
|
86
|
+
- [HST2008]_
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
def __init__(self, domain, on_basis, cartan_type, q1, q2, q=ZZ.one(), side='right'):
|
|
90
|
+
r"""
|
|
91
|
+
TESTS::
|
|
92
|
+
|
|
93
|
+
sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
|
|
94
|
+
sage: W = SymmetricGroup(3)
|
|
95
|
+
sage: domain = W.algebra(QQ)
|
|
96
|
+
sage: action = lambda x,i: domain.monomial(x.apply_simple_reflection(i, side='right'))
|
|
97
|
+
sage: HeckeAlgebraRepresentation(domain, action, CartanType(["A",2]), 1, -1)
|
|
98
|
+
A representation of the (1, -1)-Hecke algebra of type ['A', 2] on Symmetric group algebra of order 3 over Rational Field
|
|
99
|
+
"""
|
|
100
|
+
self._domain = domain
|
|
101
|
+
self._Ti_on_basis = on_basis
|
|
102
|
+
self._q1 = q1 # should check / coerce into the base ring
|
|
103
|
+
self._q2 = q2
|
|
104
|
+
self._q = q
|
|
105
|
+
self._cartan_type = cartan_type
|
|
106
|
+
self._side = side
|
|
107
|
+
|
|
108
|
+
def _repr_(self):
|
|
109
|
+
r"""
|
|
110
|
+
EXAMPLES::
|
|
111
|
+
|
|
112
|
+
sage: WeylGroup(["A",3]).algebra(QQ).demazure_lusztig_operators(-1,1)._repr_()
|
|
113
|
+
"A representation of the (-1, 1)-Hecke algebra of type ['A', 3, 1]
|
|
114
|
+
on Algebra of Weyl Group of type ['A', 3]
|
|
115
|
+
(as a matrix group acting on the ambient space) over Rational Field"
|
|
116
|
+
"""
|
|
117
|
+
return "A representation of the %s-Hecke algebra of type %s on %s" % ((self._q1,self._q2), self.cartan_type(), self.domain())
|
|
118
|
+
|
|
119
|
+
@cached_method
|
|
120
|
+
def parameters(self, i):
|
|
121
|
+
r"""
|
|
122
|
+
Return `q_1,q_2` such that `(T_i-q_1)(T_i-q_2) = 0`.
|
|
123
|
+
|
|
124
|
+
EXAMPLES::
|
|
125
|
+
|
|
126
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
127
|
+
sage: q1, q2 = K.gens()
|
|
128
|
+
sage: KW = WeylGroup(["A",3]).algebra(QQ)
|
|
129
|
+
sage: H = KW.demazure_lusztig_operators(q1,q2)
|
|
130
|
+
sage: H.parameters(1)
|
|
131
|
+
(q1, q2)
|
|
132
|
+
|
|
133
|
+
sage: H = KW.demazure_lusztig_operators(1,-1)
|
|
134
|
+
sage: H.parameters(1)
|
|
135
|
+
(1, -1)
|
|
136
|
+
|
|
137
|
+
.. TODO::
|
|
138
|
+
|
|
139
|
+
At this point, this method is constant. It's meant as a
|
|
140
|
+
starting point for implementing parameters depending on
|
|
141
|
+
the node `i` of the Dynkin diagram.
|
|
142
|
+
"""
|
|
143
|
+
return self._q1, self._q2
|
|
144
|
+
|
|
145
|
+
def cartan_type(self):
|
|
146
|
+
r"""
|
|
147
|
+
Return the Cartan type of ``self``.
|
|
148
|
+
|
|
149
|
+
EXAMPLES::
|
|
150
|
+
|
|
151
|
+
sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
|
|
152
|
+
sage: KW = SymmetricGroup(3).algebra(QQ)
|
|
153
|
+
sage: action = lambda x,i: KW.monomial(x.apply_simple_reflection(i, side='right'))
|
|
154
|
+
sage: H = HeckeAlgebraRepresentation(KW, action, CartanType(["A",2]), 1, -1)
|
|
155
|
+
sage: H.cartan_type()
|
|
156
|
+
['A', 2]
|
|
157
|
+
|
|
158
|
+
sage: H = WeylGroup(["A",3]).algebra(QQ).demazure_lusztig_operators(-1,1)
|
|
159
|
+
sage: H.cartan_type()
|
|
160
|
+
['A', 3, 1]
|
|
161
|
+
"""
|
|
162
|
+
return self._cartan_type
|
|
163
|
+
|
|
164
|
+
def domain(self):
|
|
165
|
+
r"""
|
|
166
|
+
Return the domain of ``self``.
|
|
167
|
+
|
|
168
|
+
EXAMPLES::
|
|
169
|
+
|
|
170
|
+
sage: H = WeylGroup(["A",3]).algebra(QQ).demazure_lusztig_operators(-1,1)
|
|
171
|
+
sage: H.domain()
|
|
172
|
+
Algebra of Weyl Group of type ['A', 3] (as a matrix group
|
|
173
|
+
acting on the ambient space) over Rational Field
|
|
174
|
+
"""
|
|
175
|
+
return self._domain
|
|
176
|
+
|
|
177
|
+
def Ti_on_basis(self, x, i):
|
|
178
|
+
r"""
|
|
179
|
+
The `T_i` operators, on basis elements.
|
|
180
|
+
|
|
181
|
+
INPUT:
|
|
182
|
+
|
|
183
|
+
- ``x`` -- the index of a basis element
|
|
184
|
+
- ``i`` -- the index of a generator
|
|
185
|
+
|
|
186
|
+
EXAMPLES::
|
|
187
|
+
|
|
188
|
+
sage: W = WeylGroup("A3")
|
|
189
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
190
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
191
|
+
sage: q1, q2 = K.gens()
|
|
192
|
+
sage: KW = W.algebra(K)
|
|
193
|
+
sage: rho = KW.demazure_lusztig_operators(q1,q2)
|
|
194
|
+
sage: w = W.an_element()
|
|
195
|
+
sage: rho.Ti_on_basis(w,1)
|
|
196
|
+
q1*1231
|
|
197
|
+
"""
|
|
198
|
+
return self._Ti_on_basis(x, i)
|
|
199
|
+
|
|
200
|
+
def Ti_inverse_on_basis(self, x, i):
|
|
201
|
+
r"""
|
|
202
|
+
The `T_i^{-1}` operators, on basis elements.
|
|
203
|
+
|
|
204
|
+
INPUT:
|
|
205
|
+
|
|
206
|
+
- ``x`` -- the index of a basis element
|
|
207
|
+
- ``i`` -- the index of a generator
|
|
208
|
+
|
|
209
|
+
EXAMPLES::
|
|
210
|
+
|
|
211
|
+
sage: W = WeylGroup("A3")
|
|
212
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
213
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
214
|
+
sage: q1, q2 = K.gens()
|
|
215
|
+
sage: KW = W.algebra(K)
|
|
216
|
+
sage: rho = KW.demazure_lusztig_operators(q1,q2)
|
|
217
|
+
sage: w = W.an_element()
|
|
218
|
+
sage: rho.Ti_inverse_on_basis(w, 1)
|
|
219
|
+
-1/q2*1231 + ((q1+q2)/(q1*q2))*123
|
|
220
|
+
"""
|
|
221
|
+
q1 = self._q1
|
|
222
|
+
q2 = self._q2
|
|
223
|
+
return (self._domain.term(x, q1+q2) - self.Ti_on_basis(x, i))/(q1*q2)
|
|
224
|
+
|
|
225
|
+
@cached_method
|
|
226
|
+
def on_basis(self, x, word, signs=None, scalar=None):
|
|
227
|
+
r"""
|
|
228
|
+
Action of product of `T_i` and `T_i^{-1}` on `x`.
|
|
229
|
+
|
|
230
|
+
INPUT:
|
|
231
|
+
|
|
232
|
+
- ``x`` -- the index of a basis element
|
|
233
|
+
- ``word`` -- word of indices of generators
|
|
234
|
+
- ``signs`` -- (default: ``None``) sequence of signs of same length as
|
|
235
|
+
``word``; determines which operators are supposed to be taken as
|
|
236
|
+
inverses.
|
|
237
|
+
- ``scalar`` -- (default: ``None``) scalar to multiply the answer by
|
|
238
|
+
|
|
239
|
+
EXAMPLES::
|
|
240
|
+
|
|
241
|
+
sage: from sage.combinat.root_system.hecke_algebra_representation import HeckeAlgebraRepresentation
|
|
242
|
+
sage: W = SymmetricGroup(3)
|
|
243
|
+
sage: domain = W.algebra(QQ)
|
|
244
|
+
sage: action = lambda x,i: domain.monomial(x.apply_simple_reflection(i, side='right'))
|
|
245
|
+
sage: rho = HeckeAlgebraRepresentation(domain, action, CartanType(["A",2]), 1, -1)
|
|
246
|
+
|
|
247
|
+
sage: rho.on_basis(W.one(), (1,2,1))
|
|
248
|
+
(1,3)
|
|
249
|
+
|
|
250
|
+
sage: word = (1,2)
|
|
251
|
+
sage: u = W.from_reduced_word(word)
|
|
252
|
+
sage: for w in W: assert rho.on_basis(w, word) == domain.monomial(w*u)
|
|
253
|
+
|
|
254
|
+
The next example tests the signs::
|
|
255
|
+
|
|
256
|
+
sage: W = WeylGroup("A3")
|
|
257
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
258
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
259
|
+
sage: q1, q2 = K.gens()
|
|
260
|
+
sage: KW = W.algebra(K)
|
|
261
|
+
sage: rho = KW.demazure_lusztig_operators(q1,q2)
|
|
262
|
+
sage: w = W.an_element(); w
|
|
263
|
+
123
|
|
264
|
+
sage: rho.on_basis(w, (1,), signs=(-1,))
|
|
265
|
+
-1/q2*1231 + ((q1+q2)/(q1*q2))*123
|
|
266
|
+
sage: rho.on_basis(w, (1,), signs=( 1,))
|
|
267
|
+
q1*1231
|
|
268
|
+
sage: rho.on_basis(w, (1,1), signs=(1,-1))
|
|
269
|
+
123
|
|
270
|
+
sage: rho.on_basis(w, (1,1), signs=(-1,1))
|
|
271
|
+
123
|
|
272
|
+
"""
|
|
273
|
+
l = len(word)
|
|
274
|
+
if l == 0:
|
|
275
|
+
return self._domain.monomial(x)
|
|
276
|
+
rec = self.on_basis(x, word[:-1], signs)
|
|
277
|
+
i = word[l-1]
|
|
278
|
+
if signs is not None and signs[l-1] == -1:
|
|
279
|
+
operator = self.Ti_inverse_on_basis
|
|
280
|
+
else:
|
|
281
|
+
operator = self.Ti_on_basis
|
|
282
|
+
result = self._domain.linear_combination((operator(l, i), c)
|
|
283
|
+
for l,c in rec)
|
|
284
|
+
if scalar is None:
|
|
285
|
+
return result
|
|
286
|
+
else:
|
|
287
|
+
return scalar * result
|
|
288
|
+
|
|
289
|
+
def straighten_word(self, word):
|
|
290
|
+
r"""
|
|
291
|
+
Return a tuple of indices of generators after some straightening.
|
|
292
|
+
|
|
293
|
+
INPUT:
|
|
294
|
+
|
|
295
|
+
- ``word`` -- a list/tuple of indices of generators, the index
|
|
296
|
+
of a generator, or an object with a reduced word method
|
|
297
|
+
|
|
298
|
+
OUTPUT: a tuple of indices of generators
|
|
299
|
+
|
|
300
|
+
EXAMPLES::
|
|
301
|
+
|
|
302
|
+
sage: W = WeylGroup(["A",3])
|
|
303
|
+
sage: H = W.algebra(QQ).demazure_lusztig_operators(-1,1)
|
|
304
|
+
sage: H.straighten_word(1)
|
|
305
|
+
(1,)
|
|
306
|
+
sage: H.straighten_word((2,1))
|
|
307
|
+
(2, 1)
|
|
308
|
+
sage: H.straighten_word([2,1])
|
|
309
|
+
(2, 1)
|
|
310
|
+
sage: H.straighten_word(W.an_element())
|
|
311
|
+
(1, 2, 3)
|
|
312
|
+
"""
|
|
313
|
+
if hasattr(word, "reduced_word"):
|
|
314
|
+
word = word.reduced_word()
|
|
315
|
+
if isinstance(word, list):
|
|
316
|
+
word = tuple(word)
|
|
317
|
+
elif not isinstance(word, tuple):
|
|
318
|
+
word = (word,)
|
|
319
|
+
return word
|
|
320
|
+
|
|
321
|
+
def Tw(self, word, signs=None, scalar=None):
|
|
322
|
+
r"""
|
|
323
|
+
Return `T_w`.
|
|
324
|
+
|
|
325
|
+
INPUT:
|
|
326
|
+
|
|
327
|
+
- ``word`` -- a word `i_1,\dots,i_k` for some element `w` of the Weyl group
|
|
328
|
+
See :meth:`straighten_word` for how this word can be specified
|
|
329
|
+
|
|
330
|
+
- ``signs`` -- list `\epsilon_1,\dots,\epsilon_k` of the
|
|
331
|
+
same length as ``word`` with `\epsilon_i =\pm 1` or
|
|
332
|
+
``None`` for `1,\dots,1` (default: ``None``)
|
|
333
|
+
|
|
334
|
+
- ``scalar`` -- an element `c` of the base ring or ``None``
|
|
335
|
+
for `1` (default: ``None``)
|
|
336
|
+
|
|
337
|
+
OUTPUT: a module morphism implementing
|
|
338
|
+
|
|
339
|
+
.. MATH::
|
|
340
|
+
|
|
341
|
+
T_w = T_{i_k} \circ \cdots \circ T_{i_1}
|
|
342
|
+
|
|
343
|
+
in left action notation; that is `T_{i_1}` is applied first,
|
|
344
|
+
then `T_{i_2}`, etc.
|
|
345
|
+
|
|
346
|
+
More generally, if ``scalar`` or ``signs`` is specified, the
|
|
347
|
+
morphism implements
|
|
348
|
+
|
|
349
|
+
.. MATH::
|
|
350
|
+
|
|
351
|
+
c T_{i_k}^{\epsilon_k} \circ \cdots \circ T_{i_1}^{\epsilon_k}.
|
|
352
|
+
|
|
353
|
+
EXAMPLES::
|
|
354
|
+
|
|
355
|
+
sage: W = WeylGroup("A3")
|
|
356
|
+
sage: W.element_class._repr_=lambda x: ('e' if not x.reduced_word()
|
|
357
|
+
....: else "".join(str(i) for i in x.reduced_word()))
|
|
358
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
359
|
+
sage: q1, q2 = K.gens()
|
|
360
|
+
sage: KW = W.algebra(K)
|
|
361
|
+
sage: x = KW.an_element(); x
|
|
362
|
+
123 + 3*2312 + 2*31 + e
|
|
363
|
+
|
|
364
|
+
sage: T = KW.demazure_lusztig_operators(q1,q2)
|
|
365
|
+
sage: T12 = T.Tw( (1,2) )
|
|
366
|
+
sage: T12(KW.one())
|
|
367
|
+
q1^2*12
|
|
368
|
+
|
|
369
|
+
This is `T_2 \circ T_1`::
|
|
370
|
+
|
|
371
|
+
sage: T[2](T[1](KW.one()))
|
|
372
|
+
q1^2*12
|
|
373
|
+
sage: T[1](T[2](KW.one()))
|
|
374
|
+
q1^2*21
|
|
375
|
+
sage: T12(x) == T[2](T[1](x))
|
|
376
|
+
True
|
|
377
|
+
|
|
378
|
+
Now with signs and scalar coefficient we construct `3 T_2 \circ T_1^{-1}`::
|
|
379
|
+
|
|
380
|
+
sage: phi = T.Tw((1,2), (-1,1), 3)
|
|
381
|
+
sage: phi(KW.one())
|
|
382
|
+
-3*q1/q2*12 + ((3*q1+3*q2)/q2)*2
|
|
383
|
+
sage: phi(T[1](x)) == 3*T[2](x)
|
|
384
|
+
True
|
|
385
|
+
|
|
386
|
+
For debugging purposes, one can recover the input data::
|
|
387
|
+
|
|
388
|
+
sage: phi.word
|
|
389
|
+
(1, 2)
|
|
390
|
+
sage: phi.signs
|
|
391
|
+
(-1, 1)
|
|
392
|
+
sage: phi.scalar
|
|
393
|
+
3
|
|
394
|
+
"""
|
|
395
|
+
word = self.straighten_word(word)
|
|
396
|
+
result = self._domain.module_morphism(functools.partial(self.on_basis, word=word, signs=signs, scalar=scalar),
|
|
397
|
+
codomain=self._domain)
|
|
398
|
+
# For debugging purpose, make the parameters easily accessible:
|
|
399
|
+
result.word = word
|
|
400
|
+
result.signs = signs
|
|
401
|
+
result.scalar = scalar
|
|
402
|
+
return result
|
|
403
|
+
|
|
404
|
+
def Tw_inverse(self, word):
|
|
405
|
+
r"""
|
|
406
|
+
Return `T_w^{-1}`.
|
|
407
|
+
|
|
408
|
+
This is essentially a shorthand for :meth:`Tw` with all minus signs.
|
|
409
|
+
|
|
410
|
+
.. TODO:: Add an example where `T_i\ne T_i^{-1}`
|
|
411
|
+
|
|
412
|
+
EXAMPLES::
|
|
413
|
+
|
|
414
|
+
sage: W = WeylGroup(["A",3])
|
|
415
|
+
sage: W.element_class._repr_ = lambda x: "".join(str(i) for i in x.reduced_word())
|
|
416
|
+
sage: KW = W.algebra(QQ)
|
|
417
|
+
sage: rho = KW.demazure_lusztig_operators(1, -1)
|
|
418
|
+
sage: x = KW.monomial(W.an_element()); x
|
|
419
|
+
123
|
|
420
|
+
sage: word = [1,2]
|
|
421
|
+
sage: rho.Tw(word)(x)
|
|
422
|
+
12312
|
|
423
|
+
sage: rho.Tw_inverse(word)(x)
|
|
424
|
+
12321
|
|
425
|
+
|
|
426
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
427
|
+
sage: q1, q2 = K.gens()
|
|
428
|
+
sage: KW = W.algebra(K)
|
|
429
|
+
sage: rho = KW.demazure_lusztig_operators(q1, q2)
|
|
430
|
+
sage: x = KW.monomial(W.an_element()); x
|
|
431
|
+
123
|
|
432
|
+
sage: rho.Tw_inverse(word)(x)
|
|
433
|
+
1/q2^2*12321 - ((q1+q2)/(q1*q2^2))*1231 - ((q1+q2)/(q1*q2^2))*1232
|
|
434
|
+
+ ((q1^2+2*q1*q2+q2^2)/(q1^2*q2^2))*123
|
|
435
|
+
sage: rho.Tw(word)(_)
|
|
436
|
+
123
|
|
437
|
+
"""
|
|
438
|
+
word = tuple(reversed(self.straighten_word(word)))
|
|
439
|
+
signs = (-1,) * len(word)
|
|
440
|
+
return self.Tw(word, signs)
|
|
441
|
+
|
|
442
|
+
__getitem__ = Tw # for backward compatibility
|
|
443
|
+
|
|
444
|
+
def _test_relations(self, **options):
|
|
445
|
+
r"""
|
|
446
|
+
Test that this family of operators satisfies the Iwahori Hecke relations.
|
|
447
|
+
|
|
448
|
+
EXAMPLES::
|
|
449
|
+
|
|
450
|
+
sage: L = RootSystem(["A",3]).ambient_space()
|
|
451
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
452
|
+
sage: q1, q2 = K.gens()
|
|
453
|
+
sage: KL = L.algebra(K)
|
|
454
|
+
sage: T = KL.demazure_lusztig_operators(q1,q2)
|
|
455
|
+
sage: T._test_relations()
|
|
456
|
+
"""
|
|
457
|
+
tester = self._tester(**options)
|
|
458
|
+
cartan_type = self.cartan_type()
|
|
459
|
+
# In some use cases, the operators are not defined everywhere.
|
|
460
|
+
# This allows to specify which elements the tests
|
|
461
|
+
# should be run on. This does not work when calling this
|
|
462
|
+
# method indirectly via TestSuite though.
|
|
463
|
+
elements = options.get('elements', self.domain().some_elements())
|
|
464
|
+
q1 = self._q1
|
|
465
|
+
q2 = self._q2
|
|
466
|
+
T = self
|
|
467
|
+
|
|
468
|
+
def Ti(x, i, c):
|
|
469
|
+
return T[i](x)+c*x
|
|
470
|
+
|
|
471
|
+
try:
|
|
472
|
+
# Check the quadratic relation
|
|
473
|
+
for i in cartan_type.index_set():
|
|
474
|
+
for x in elements:
|
|
475
|
+
tester.assertTrue(Ti(Ti(x,i,-q2),i,-q1).is_zero())
|
|
476
|
+
G = cartan_type.coxeter_diagram()
|
|
477
|
+
# Check the braid relation
|
|
478
|
+
for (i, j) in Subsets(cartan_type.index_set(), 2):
|
|
479
|
+
if G.has_edge(i,j):
|
|
480
|
+
o = G.edge_label(i,j)
|
|
481
|
+
else:
|
|
482
|
+
o = 2
|
|
483
|
+
if o == infinity:
|
|
484
|
+
continue
|
|
485
|
+
for x in elements:
|
|
486
|
+
y = x
|
|
487
|
+
for k in range(o):
|
|
488
|
+
x = T[i](x)
|
|
489
|
+
y = T[j](y)
|
|
490
|
+
y,x = x,y
|
|
491
|
+
tester.assertEqual(x, y)
|
|
492
|
+
except ImportError:
|
|
493
|
+
pass
|
|
494
|
+
|
|
495
|
+
def _test_inverse(self, **options):
|
|
496
|
+
r"""
|
|
497
|
+
Test the `T_w^{-1}` operators.
|
|
498
|
+
|
|
499
|
+
EXAMPLES::
|
|
500
|
+
|
|
501
|
+
sage: L = RootSystem(["A",3]).ambient_space()
|
|
502
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
503
|
+
sage: q1, q2 = K.gens()
|
|
504
|
+
sage: KL = L.algebra(K)
|
|
505
|
+
sage: T = KL.demazure_lusztig_operators(q1,q2)
|
|
506
|
+
sage: T._test_inverse()
|
|
507
|
+
"""
|
|
508
|
+
tester = self._tester(**options)
|
|
509
|
+
elements = self.domain().some_elements()
|
|
510
|
+
q1 = self._q1
|
|
511
|
+
q2 = self._q2
|
|
512
|
+
try:
|
|
513
|
+
if q1.is_unit() and q2.is_unit():
|
|
514
|
+
I = self.cartan_type().index_set()
|
|
515
|
+
for w in [[i] for i in I] + [tuple(I)]:
|
|
516
|
+
Tw = self.Tw(w)
|
|
517
|
+
Tw_inverse = self.Tw_inverse(w)
|
|
518
|
+
for x in elements:
|
|
519
|
+
tester.assertEqual(Tw_inverse(Tw(x)), x)
|
|
520
|
+
tester.assertEqual(Tw(Tw_inverse(x)), x)
|
|
521
|
+
except ImportError:
|
|
522
|
+
pass
|
|
523
|
+
|
|
524
|
+
def Y_lambdacheck(self, lambdacheck):
|
|
525
|
+
r"""
|
|
526
|
+
Return the Cherednik operators `Y^{\lambda^\vee}` for this representation of an affine Hecke algebra.
|
|
527
|
+
|
|
528
|
+
INPUT:
|
|
529
|
+
|
|
530
|
+
- ``lambdacheck`` -- an element of the coroot lattice for this
|
|
531
|
+
Cartan type
|
|
532
|
+
|
|
533
|
+
EXAMPLES::
|
|
534
|
+
|
|
535
|
+
sage: W = WeylGroup(["B",2])
|
|
536
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
537
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
538
|
+
sage: q1, q2 = K.gens()
|
|
539
|
+
sage: KW = W.algebra(K)
|
|
540
|
+
|
|
541
|
+
We take `q_2` and `q_1` as eigenvalues to match with the notations of [HST2008]_ ::
|
|
542
|
+
|
|
543
|
+
sage: rho = KW.demazure_lusztig_operators(q2, q1)
|
|
544
|
+
sage: L = rho.Y().keys()
|
|
545
|
+
sage: alpha = L.simple_roots()
|
|
546
|
+
sage: Y0 = rho.Y_lambdacheck(alpha[0])
|
|
547
|
+
sage: Y1 = rho.Y_lambdacheck(alpha[1])
|
|
548
|
+
sage: Y2 = rho.Y_lambdacheck(alpha[2])
|
|
549
|
+
|
|
550
|
+
sage: x = KW.monomial(W.an_element()); x
|
|
551
|
+
12
|
|
552
|
+
sage: Y1(x)
|
|
553
|
+
-((q1^2+2*q1*q2+q2^2)/(-q2^2))*2121
|
|
554
|
+
+ ((q1^3+q1^2*q2+q1*q2^2+q2^3)/(-q1*q2^2))*121
|
|
555
|
+
+ ((q1^2+q1*q2)/(-q2^2))*212 - (q1^2/(-q2^2))*12
|
|
556
|
+
sage: Y2(x)
|
|
557
|
+
-((q1^4+q1^3*q2+q1*q2^3+q2^4)/(-q1^3*q2))*2121
|
|
558
|
+
+ ((q1^3+q1^2*q2+q1*q2^2+q2^3)/(-q1^2*q2))*121
|
|
559
|
+
+ (q2^3/(-q1^3))*12
|
|
560
|
+
sage: Y1(Y2(x))
|
|
561
|
+
((q1*q2+q2^2)/q1^2)*212 - q2/q1*12
|
|
562
|
+
sage: Y2(Y1(x))
|
|
563
|
+
((q1*q2+q2^2)/q1^2)*212 - q2/q1*12
|
|
564
|
+
|
|
565
|
+
The `Y` operators commute::
|
|
566
|
+
|
|
567
|
+
sage: Y0(Y1(x)) - Y1(Y0(x))
|
|
568
|
+
0
|
|
569
|
+
sage: Y2(Y1(x)) - Y1(Y2(x))
|
|
570
|
+
0
|
|
571
|
+
|
|
572
|
+
In the classical root lattice, `\alpha_0 + \alpha_1 + \alpha_2 = 0`::
|
|
573
|
+
|
|
574
|
+
sage: Y0(Y1(Y2(x)))
|
|
575
|
+
12
|
|
576
|
+
|
|
577
|
+
Lemma 7.2 of [HST2008]_::
|
|
578
|
+
|
|
579
|
+
sage: w0 = KW.monomial(W.long_element())
|
|
580
|
+
sage: rho.Tw(0)(w0)
|
|
581
|
+
q2
|
|
582
|
+
sage: rho.Tw_inverse(1)(w0)
|
|
583
|
+
1/q2*212
|
|
584
|
+
sage: rho.Tw_inverse(2)(w0)
|
|
585
|
+
1/q2*121
|
|
586
|
+
|
|
587
|
+
Lemma 7.5 of [HST2008]_::
|
|
588
|
+
|
|
589
|
+
sage: Y0(w0)
|
|
590
|
+
q1^2/q2^2*2121
|
|
591
|
+
sage: Y1(w0)
|
|
592
|
+
(q2/(-q1))*2121
|
|
593
|
+
sage: Y2(w0)
|
|
594
|
+
(q2/(-q1))*2121
|
|
595
|
+
|
|
596
|
+
.. TODO::
|
|
597
|
+
|
|
598
|
+
Add more tests
|
|
599
|
+
|
|
600
|
+
Add tests in type BC affine where the null coroot
|
|
601
|
+
`\delta^\vee` can have non trivial coefficient in term of
|
|
602
|
+
`\alpha_0`
|
|
603
|
+
|
|
604
|
+
.. SEEALSO::
|
|
605
|
+
|
|
606
|
+
- [HST2008]_ for the formula in terms of `q_1, q_2`
|
|
607
|
+
"""
|
|
608
|
+
#Q_check = self.Y().keys()
|
|
609
|
+
#assert Q_check.is_parent_of(lambdacheck)
|
|
610
|
+
Q_check = lambdacheck.parent()
|
|
611
|
+
|
|
612
|
+
# Alcove walks and the like are currently only implemented in
|
|
613
|
+
# (co)weight lattice realizations; so we embed lambdacheck in
|
|
614
|
+
# the weight lattice containing Q_check; we actually use the
|
|
615
|
+
# (co)weight space, because the alcove walks currently uses
|
|
616
|
+
# rho_classical and, in type BC, the later does not have
|
|
617
|
+
# integral coefficients:
|
|
618
|
+
|
|
619
|
+
# sage: RootSystem(["BC",2,2]).coweight_lattice().rho_classical()
|
|
620
|
+
|
|
621
|
+
# On the other hand, at this point we need the expression of
|
|
622
|
+
# lambdacheck in Q_check in order to use the translation
|
|
623
|
+
# factors (the analogue is not implemented in the (co)weight
|
|
624
|
+
# lattice)
|
|
625
|
+
P_check = Q_check.root_system.weight_space()
|
|
626
|
+
assert P_check.has_coerce_map_from(Q_check)
|
|
627
|
+
alphacheck = P_check.simple_roots()
|
|
628
|
+
c = Q_check.cartan_type().translation_factors()
|
|
629
|
+
t = P_check.linear_combination( (alphacheck[i], c[i] * coeff) for i,coeff in lambdacheck )
|
|
630
|
+
# In type BC, c[i] may introduce rational coefficients
|
|
631
|
+
# If we want to work in the lattice we might want to use the
|
|
632
|
+
# following workaround after the fact ...
|
|
633
|
+
# from sage.rings.integer import Integer
|
|
634
|
+
# t = t.map_coefficients(Integer)
|
|
635
|
+
word = P_check.reduced_word_of_translation(t)
|
|
636
|
+
signs = tuple(P_check.signs_of_alcovewalk(word))
|
|
637
|
+
# At this point, this is more or less of a guess, but that
|
|
638
|
+
# works for our two main examples (action of affine W on W,
|
|
639
|
+
# and Macdonald polynomials)
|
|
640
|
+
if self._side == "left":
|
|
641
|
+
word = tuple(reversed(word))
|
|
642
|
+
signs = tuple(reversed(signs))
|
|
643
|
+
# The power of q implements the fact that Y^\deltacheck = 1/q.
|
|
644
|
+
# The classical simple coroots have no \deltacheck term.
|
|
645
|
+
# alpha[0] has a \deltacheck with coefficient one
|
|
646
|
+
# (recall that Sage's \deltacheck is usually the null coroot,
|
|
647
|
+
# but its double in type BC; this is compensated by the fact
|
|
648
|
+
# that Sage's q is the square of the usual one in this case;
|
|
649
|
+
# so we can ignore this see the discussion in
|
|
650
|
+
# sage.combinat.root_system.weight_space.WeightSpace).
|
|
651
|
+
special_node = Q_check.cartan_type().special_node()
|
|
652
|
+
scalar = (-self._q1*self._q2)**(-sum(signs)/2) * self._q**(-lambdacheck[special_node])
|
|
653
|
+
return self.Tw(word, signs, scalar)
|
|
654
|
+
|
|
655
|
+
def Y(self, base_ring=ZZ):
|
|
656
|
+
r"""
|
|
657
|
+
Return the Cherednik operators `Y` for this representation of an affine Hecke algebra.
|
|
658
|
+
|
|
659
|
+
INPUT:
|
|
660
|
+
|
|
661
|
+
- ``self`` -- a representation of an affine Hecke algebra
|
|
662
|
+
- ``base_ring`` -- the base ring of the coroot lattice
|
|
663
|
+
|
|
664
|
+
This is a family of operators indexed by the coroot lattice
|
|
665
|
+
for this Cartan type. In practice this is currently indexed
|
|
666
|
+
instead by the affine coroot lattice, even if this indexing is
|
|
667
|
+
not one to one, in order to allow for `Y[\alpha^\vee_0]`.
|
|
668
|
+
|
|
669
|
+
EXAMPLES::
|
|
670
|
+
|
|
671
|
+
sage: W = WeylGroup(["A",3])
|
|
672
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
673
|
+
sage: q1, q2 = K.gens()
|
|
674
|
+
sage: KW = W.algebra(K)
|
|
675
|
+
sage: rho = KW.demazure_lusztig_operators(q2, q1)
|
|
676
|
+
sage: Y = rho.Y(); Y
|
|
677
|
+
Lazy family (...(i))_{i in Coroot lattice of the Root system of type ['A', 3, 1]}
|
|
678
|
+
"""
|
|
679
|
+
if not self.cartan_type().is_affine():
|
|
680
|
+
raise ValueError("The Cherednik operators are only defined for representations of affine Hecke algebra")
|
|
681
|
+
L = self.cartan_type().root_system().coroot_space(base_ring)
|
|
682
|
+
return Family(L, self.Y_lambdacheck)
|
|
683
|
+
|
|
684
|
+
def _test_Y(self, **options):
|
|
685
|
+
r"""
|
|
686
|
+
Test the `T_w^{-1}` operators.
|
|
687
|
+
|
|
688
|
+
EXAMPLES::
|
|
689
|
+
|
|
690
|
+
sage: W = WeylGroup(["B",3])
|
|
691
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
692
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
693
|
+
sage: q1, q2 = K.gens()
|
|
694
|
+
sage: KW = W.algebra(K)
|
|
695
|
+
sage: rho = KW.demazure_lusztig_operators(q1, q2, affine=True)
|
|
696
|
+
sage: rho._test_Y() # long time (4s)
|
|
697
|
+
"""
|
|
698
|
+
tester = self._tester(**options)
|
|
699
|
+
if self.cartan_type().is_affine():
|
|
700
|
+
elements = self.domain().some_elements()
|
|
701
|
+
Y = self.Y()
|
|
702
|
+
L = Y.keys()
|
|
703
|
+
I = L.index_set()
|
|
704
|
+
alpha = L.simple_roots()
|
|
705
|
+
Yi = Family(I, lambda i: Y[alpha[i]])
|
|
706
|
+
for Y1, Y2 in Subsets(Yi,2):
|
|
707
|
+
for x in elements:
|
|
708
|
+
tester.assertEqual(Y1(Y2(x)), Y2(Y1(x)))
|
|
709
|
+
|
|
710
|
+
def Y_eigenvectors(self):
|
|
711
|
+
r"""
|
|
712
|
+
Return the family of eigenvectors for the Cherednik operators `Y` of this representation of an affine Hecke algebra.
|
|
713
|
+
|
|
714
|
+
INPUT:
|
|
715
|
+
|
|
716
|
+
- ``self`` -- a representation of an affine Hecke algebra
|
|
717
|
+
- ``base_ring`` -- the base ring of the coroot lattice
|
|
718
|
+
|
|
719
|
+
EXAMPLES::
|
|
720
|
+
|
|
721
|
+
sage: W = WeylGroup(["B",2])
|
|
722
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
723
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
724
|
+
sage: q1, q2 = K.gens()
|
|
725
|
+
sage: KW = W.algebra(K)
|
|
726
|
+
sage: rho = KW.demazure_lusztig_operators(q1, q2, affine=True)
|
|
727
|
+
sage: E = rho.Y_eigenvectors()
|
|
728
|
+
sage: E.keys()
|
|
729
|
+
Weyl Group of type ['B', 2] (as a matrix group acting on the ambient space)
|
|
730
|
+
sage: w0 = W.long_element()
|
|
731
|
+
|
|
732
|
+
To set the recurrence up properly, one often needs to customize
|
|
733
|
+
the :meth:`CherednikOperatorsEigenvectors.affine_lift`
|
|
734
|
+
and :meth:`CherednikOperatorsEigenvectors.affine_retract`
|
|
735
|
+
methods. This would usually be done by subclassing
|
|
736
|
+
:class:`CherednikOperatorsEigenvectors`; here we just override
|
|
737
|
+
the methods directly.
|
|
738
|
+
|
|
739
|
+
In this particular case, we multiply by `w_0` to take into
|
|
740
|
+
account that `w_0` is the seed for the recursion::
|
|
741
|
+
|
|
742
|
+
sage: E.affine_lift = w0._mul_
|
|
743
|
+
sage: E.affine_retract = w0._mul_
|
|
744
|
+
|
|
745
|
+
sage: E[w0]
|
|
746
|
+
2121
|
|
747
|
+
sage: E.eigenvalues(E[w0])
|
|
748
|
+
[q2^2/q1^2, q1/(-q2), q1/(-q2)]
|
|
749
|
+
|
|
750
|
+
This step is taken care of automatically if one instead calls
|
|
751
|
+
the specialization
|
|
752
|
+
:meth:`sage.coxeter_groups.CoxeterGroups.Algebras.demazure_lusztig_eigenvectors`.
|
|
753
|
+
|
|
754
|
+
Now we can compute all eigenvectors::
|
|
755
|
+
|
|
756
|
+
sage: [E[w] for w in W]
|
|
757
|
+
[2121 - 121 - 212 + 12 + 21 - 1 - 2 + ,
|
|
758
|
+
-2121 + 212,
|
|
759
|
+
(q2/(q1-q2))*2121 + (q2/(-q1+q2))*121 + (q2/(-q1+q2))*212 - 12 - (q2/(-q1+q2))*21 + 2,
|
|
760
|
+
-(q2^2/(-q1^2+q1*q2-q2^2))*2121 - 121 + (q2^2/(-q1^2+q1*q2-q2^2))*212 + 21,
|
|
761
|
+
-((q1^2+q2^2)/(q1^2-q1*q2+q2^2))*2121 - ((q1^2+q2^2)/(-q1^2+q1*q2-q2^2))*121
|
|
762
|
+
- (q2^2/(-q1^2+q1*q2-q2^2))*212 + (q2^2/(-q1^2+q1*q2-q2^2))*12 - 21 + 1,
|
|
763
|
+
2121,
|
|
764
|
+
(q2/(-q1+q2))*2121 - (q2/(-q1+q2))*121 - 212 + 12,
|
|
765
|
+
-2121 + 121]
|
|
766
|
+
"""
|
|
767
|
+
if not self.cartan_type().is_affine():
|
|
768
|
+
raise ValueError("The Cherednik operators are only defined for representations of affine Hecke algebra")
|
|
769
|
+
return CherednikOperatorsEigenvectors(self)
|
|
770
|
+
|
|
771
|
+
# TODO: this should probably inherit from family!
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
class CherednikOperatorsEigenvectors(UniqueRepresentation, SageObject):
|
|
775
|
+
r"""
|
|
776
|
+
A class for the family of eigenvectors of the `Y` Cherednik
|
|
777
|
+
operators for a module over a (Double) Affine Hecke algebra
|
|
778
|
+
|
|
779
|
+
INPUT:
|
|
780
|
+
|
|
781
|
+
- ``T`` -- a family `(T_i)_{i\in I}` implementing the action of
|
|
782
|
+
the generators of an affine Hecke algebra on ``self``.
|
|
783
|
+
The intertwiner operators are built from these.
|
|
784
|
+
|
|
785
|
+
- ``T_Y`` -- a family `(T^Y_i)_{i\in I}` implementing the action
|
|
786
|
+
of the generators of an affine Hecke algebra on ``self``. By
|
|
787
|
+
default, this is ``T``. But this can be used to get the action
|
|
788
|
+
of the full Double Affine Hecke Algebra. The `Y` operators are
|
|
789
|
+
built from the ``T_Y``.
|
|
790
|
+
|
|
791
|
+
This returns a function `\mu\mapsto E_\mu` which uses intertwining
|
|
792
|
+
operators to calculate recursively eigenvectors `E_\mu` for the
|
|
793
|
+
action of the torus of the affine Hecke algebra with eigenvalue
|
|
794
|
+
given by `f`. Namely:
|
|
795
|
+
|
|
796
|
+
.. MATH::
|
|
797
|
+
|
|
798
|
+
E_\mu.Y^{\lambda^\vee} = f(\lambda^\vee, \mu) E_\mu
|
|
799
|
+
|
|
800
|
+
Assumptions:
|
|
801
|
+
|
|
802
|
+
- ``seed(mu)`` initializes the recurrence by returning an
|
|
803
|
+
appropriate eigenvector `E_\mu` for `\mu` trivial enough. For
|
|
804
|
+
example, for nonsymmetric Macdonald polynomials ``seed(mu)``
|
|
805
|
+
returns the monomial `X^\mu` for a minuscule weight `\mu`.
|
|
806
|
+
|
|
807
|
+
- `f` is almost equivariant. Namely, `f(\lambda^\vee,\mu) =
|
|
808
|
+
f(\lambda^\vee s_i, twist(\mu,i))` whenever `i` is a descent of
|
|
809
|
+
`\mu`.
|
|
810
|
+
|
|
811
|
+
- `twist(\mu, i)` maps `\mu` closer to the dominant
|
|
812
|
+
chamber whenever `i` is a descent of `\mu`.
|
|
813
|
+
|
|
814
|
+
.. TODO::
|
|
815
|
+
|
|
816
|
+
Add tests for the above assumptions, and also that the
|
|
817
|
+
classical operators `T_1, \ldots, T_n` from `T` and `T_Y` coincide.
|
|
818
|
+
"""
|
|
819
|
+
|
|
820
|
+
def __init__(self, T, T_Y=None, normalized=True):
|
|
821
|
+
r"""
|
|
822
|
+
INPUT:
|
|
823
|
+
|
|
824
|
+
- ``T`` -- a family `(T_i)_{i\in I}` implementing the action of
|
|
825
|
+
the generators of an affine Hecke algebra on ``self``
|
|
826
|
+
|
|
827
|
+
- ``T_Y`` -- a family `(T^Y_i)_{i\in I}` implementing the action
|
|
828
|
+
of the generators of an affine Hecke algebra on ``self``. By
|
|
829
|
+
default, this is ``T``.
|
|
830
|
+
|
|
831
|
+
- ``normalized`` -- boolean (default: ``True``); whether the
|
|
832
|
+
eigenvector `E_\mu` is normalized so that `\mu` has
|
|
833
|
+
coefficient `1`.
|
|
834
|
+
|
|
835
|
+
TESTS::
|
|
836
|
+
|
|
837
|
+
sage: from sage.combinat.root_system.hecke_algebra_representation import CherednikOperatorsEigenvectors
|
|
838
|
+
sage: W = WeylGroup(["B",3])
|
|
839
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
840
|
+
sage: q1, q2 = K.gens()
|
|
841
|
+
sage: KW = W.algebra(K)
|
|
842
|
+
sage: rho = KW.demazure_lusztig_operators(q1, q2, affine=True)
|
|
843
|
+
sage: E = CherednikOperatorsEigenvectors(rho); E
|
|
844
|
+
<sage.combinat.root_system.hecke_algebra_representation.CherednikOperatorsEigenvectors object at ...>
|
|
845
|
+
sage: E.keys()
|
|
846
|
+
Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
|
|
847
|
+
sage: E.domain()
|
|
848
|
+
Algebra of Weyl Group of type ['B', 3] (as a matrix group acting on the ambient space)
|
|
849
|
+
over Fraction Field of Multivariate Polynomial Ring in q1, q2 over Rational Field
|
|
850
|
+
sage: E._T == E._T_Y
|
|
851
|
+
True
|
|
852
|
+
"""
|
|
853
|
+
self._T = T
|
|
854
|
+
if T_Y is None:
|
|
855
|
+
T_Y = T
|
|
856
|
+
self._T_Y = T_Y
|
|
857
|
+
self._normalized = normalized
|
|
858
|
+
|
|
859
|
+
@cached_method
|
|
860
|
+
def cartan_type(self):
|
|
861
|
+
r"""
|
|
862
|
+
Return Cartan type of ``self``.
|
|
863
|
+
|
|
864
|
+
EXAMPLES::
|
|
865
|
+
|
|
866
|
+
sage: W = WeylGroup(["B",3])
|
|
867
|
+
sage: K = QQ['q1,q2']
|
|
868
|
+
sage: q1, q2 = K.gens()
|
|
869
|
+
sage: KW = W.algebra(K)
|
|
870
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
871
|
+
sage: E.cartan_type()
|
|
872
|
+
['B', 3, 1]
|
|
873
|
+
|
|
874
|
+
sage: NonSymmetricMacdonaldPolynomials(["B", 2, 1]).cartan_type() # needs sage.graphs
|
|
875
|
+
['B', 2, 1]
|
|
876
|
+
"""
|
|
877
|
+
return self._T_Y.cartan_type()
|
|
878
|
+
|
|
879
|
+
def domain(self):
|
|
880
|
+
r"""
|
|
881
|
+
The module on which the affine Hecke algebra acts.
|
|
882
|
+
|
|
883
|
+
EXAMPLES::
|
|
884
|
+
|
|
885
|
+
sage: W = WeylGroup(["B",3])
|
|
886
|
+
sage: K = QQ['q1,q2']
|
|
887
|
+
sage: q1, q2 = K.gens()
|
|
888
|
+
sage: KW = W.algebra(K)
|
|
889
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
890
|
+
sage: E.domain()
|
|
891
|
+
Algebra of Weyl Group of type ['B', 3]
|
|
892
|
+
(as a matrix group acting on the ambient space)
|
|
893
|
+
over Multivariate Polynomial Ring in q1, q2 over Rational Field
|
|
894
|
+
"""
|
|
895
|
+
return self._T.domain()
|
|
896
|
+
|
|
897
|
+
def keys(self):
|
|
898
|
+
r"""
|
|
899
|
+
The index set for the eigenvectors.
|
|
900
|
+
|
|
901
|
+
By default, this assumes that the eigenvectors span the full
|
|
902
|
+
affine Hecke algebra module and that the eigenvectors have
|
|
903
|
+
the same indexing as the basis of this module.
|
|
904
|
+
|
|
905
|
+
EXAMPLES::
|
|
906
|
+
|
|
907
|
+
sage: W = WeylGroup(["A",3])
|
|
908
|
+
sage: K = QQ['q1,q2']
|
|
909
|
+
sage: q1, q2 = K.gens()
|
|
910
|
+
sage: KW = W.algebra(K)
|
|
911
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
912
|
+
sage: E.keys()
|
|
913
|
+
Weyl Group of type ['A', 3] (as a matrix group acting on the ambient space)
|
|
914
|
+
"""
|
|
915
|
+
return self._T.domain().basis().keys()
|
|
916
|
+
|
|
917
|
+
def seed(self, mu):
|
|
918
|
+
r"""
|
|
919
|
+
Return the eigenvector for `\mu` minuscule.
|
|
920
|
+
|
|
921
|
+
INPUT:
|
|
922
|
+
|
|
923
|
+
- ``mu`` -- an element `\mu` of the indexing set
|
|
924
|
+
|
|
925
|
+
OUTPUT: an element of ``T.domain()``
|
|
926
|
+
|
|
927
|
+
This default implementation returns the monomial indexed by `\mu`.
|
|
928
|
+
|
|
929
|
+
EXAMPLES::
|
|
930
|
+
|
|
931
|
+
sage: W = WeylGroup(["A",3])
|
|
932
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
933
|
+
sage: K = QQ['q1,q2']
|
|
934
|
+
sage: q1, q2 = K.gens()
|
|
935
|
+
sage: KW = W.algebra(K)
|
|
936
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
937
|
+
sage: E.seed(W.long_element())
|
|
938
|
+
123121
|
|
939
|
+
"""
|
|
940
|
+
return self.domain().monomial(mu)
|
|
941
|
+
|
|
942
|
+
@abstract_method
|
|
943
|
+
def affine_lift(self, mu):
|
|
944
|
+
r"""
|
|
945
|
+
Lift the index ``\mu`` to a space admitting an action of the affine Weyl group.
|
|
946
|
+
|
|
947
|
+
INPUT:
|
|
948
|
+
|
|
949
|
+
- ``mu`` -- an element `\mu` of the indexing set
|
|
950
|
+
|
|
951
|
+
In this space, one should have ``first_descent`` and
|
|
952
|
+
``apply_simple_reflection`` act properly.
|
|
953
|
+
|
|
954
|
+
EXAMPLES::
|
|
955
|
+
|
|
956
|
+
sage: W = WeylGroup(["A",3])
|
|
957
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
958
|
+
sage: K = QQ['q1,q2']
|
|
959
|
+
sage: q1, q2 = K.gens()
|
|
960
|
+
sage: KW = W.algebra(K)
|
|
961
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
962
|
+
sage: w = W.an_element(); w
|
|
963
|
+
123
|
|
964
|
+
sage: E.affine_lift(w)
|
|
965
|
+
121
|
|
966
|
+
"""
|
|
967
|
+
|
|
968
|
+
@abstract_method
|
|
969
|
+
def affine_retract(self, mu):
|
|
970
|
+
r"""
|
|
971
|
+
Retract `\mu` from a space admitting an action of the affine Weyl group.
|
|
972
|
+
|
|
973
|
+
EXAMPLES::
|
|
974
|
+
|
|
975
|
+
sage: W = WeylGroup(["A",3])
|
|
976
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
977
|
+
sage: K = QQ['q1,q2']
|
|
978
|
+
sage: q1, q2 = K.gens()
|
|
979
|
+
sage: KW = W.algebra(K)
|
|
980
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
981
|
+
sage: w = W.an_element(); w
|
|
982
|
+
123
|
|
983
|
+
sage: E.affine_retract(E.affine_lift(w)) == w
|
|
984
|
+
True
|
|
985
|
+
"""
|
|
986
|
+
|
|
987
|
+
def Y(self):
|
|
988
|
+
r"""
|
|
989
|
+
Return the Cherednik operators.
|
|
990
|
+
|
|
991
|
+
EXAMPLES::
|
|
992
|
+
|
|
993
|
+
sage: W = WeylGroup(["B",2])
|
|
994
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
995
|
+
sage: q1, q2 = K.gens()
|
|
996
|
+
sage: KW = W.algebra(K)
|
|
997
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
998
|
+
sage: E.Y()
|
|
999
|
+
Lazy family (...)_{i in Coroot lattice of the Root system of type ['B', 2, 1]}
|
|
1000
|
+
"""
|
|
1001
|
+
return self._T_Y.Y()
|
|
1002
|
+
|
|
1003
|
+
def eigenvalues(self, mu):
|
|
1004
|
+
r"""
|
|
1005
|
+
Return the eigenvalues of `Y_{\alpha_0},\dots,Y_{\alpha_n}` on `E_\mu`.
|
|
1006
|
+
|
|
1007
|
+
INPUT:
|
|
1008
|
+
|
|
1009
|
+
- ``mu`` -- the index `\mu` of an eigenvector or a tentative eigenvector
|
|
1010
|
+
|
|
1011
|
+
EXAMPLES::
|
|
1012
|
+
|
|
1013
|
+
sage: W = WeylGroup(["B",2])
|
|
1014
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1015
|
+
sage: q1, q2 = K.gens()
|
|
1016
|
+
sage: KW = W.algebra(K)
|
|
1017
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
1018
|
+
sage: w0 = W.long_element()
|
|
1019
|
+
sage: E.eigenvalues(w0)
|
|
1020
|
+
[q2^2/q1^2, q1/(-q2), q1/(-q2)]
|
|
1021
|
+
sage: w = W.an_element()
|
|
1022
|
+
sage: E.eigenvalues(w)
|
|
1023
|
+
[(-q2)/q1, (-q2^2)/(-q1^2), q1^3/(-q2^3)]
|
|
1024
|
+
"""
|
|
1025
|
+
alphacheck = self.Y().keys().simple_roots()
|
|
1026
|
+
return [self.eigenvalue(mu, alphacheck[i]) for i in self.cartan_type().index_set()]
|
|
1027
|
+
|
|
1028
|
+
@cached_method
|
|
1029
|
+
def eigenvalue(self, mu, l):
|
|
1030
|
+
r"""
|
|
1031
|
+
Return the eigenvalue of `Y_{\lambda^\vee}` on `E_\mu` computed by applying `Y_{\lambda^\vee}` on `E_\mu`.
|
|
1032
|
+
|
|
1033
|
+
INPUT:
|
|
1034
|
+
|
|
1035
|
+
- ``mu`` -- the index `\mu` of an eigenvector, or a tentative eigenvector
|
|
1036
|
+
- ``l`` -- the index `\lambda^\vee` of a Cherednik operator in ``self.Y_index_set()``
|
|
1037
|
+
|
|
1038
|
+
This default implementation applies explicitly `Y_\mu` to `E_\lambda`.
|
|
1039
|
+
|
|
1040
|
+
EXAMPLES::
|
|
1041
|
+
|
|
1042
|
+
sage: W = WeylGroup(["B",2])
|
|
1043
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1044
|
+
sage: q1, q2 = K.gens()
|
|
1045
|
+
sage: KW = W.algebra(K)
|
|
1046
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
1047
|
+
sage: w0 = W.long_element()
|
|
1048
|
+
sage: Y = E.Y()
|
|
1049
|
+
sage: alphacheck = Y.keys().simple_roots()
|
|
1050
|
+
sage: E.eigenvalue(w0, alphacheck[1])
|
|
1051
|
+
q1/(-q2)
|
|
1052
|
+
sage: E.eigenvalue(w0, alphacheck[2])
|
|
1053
|
+
q1/(-q2)
|
|
1054
|
+
sage: E.eigenvalue(w0, alphacheck[0])
|
|
1055
|
+
q2^2/q1^2
|
|
1056
|
+
|
|
1057
|
+
The following checks that all `E_w` are eigenvectors, with
|
|
1058
|
+
eigenvalue given by Lemma 7.5 of [HST2008]_ (checked for
|
|
1059
|
+
`A_2`, `A_3`)::
|
|
1060
|
+
|
|
1061
|
+
sage: Pcheck = Y.keys()
|
|
1062
|
+
sage: Wcheck = Pcheck.weyl_group()
|
|
1063
|
+
sage: P0check = Pcheck.classical()
|
|
1064
|
+
sage: def height(root):
|
|
1065
|
+
....: return sum(P0check(root).coefficients())
|
|
1066
|
+
sage: def eigenvalue(w, mu):
|
|
1067
|
+
....: return (-q2/q1)^height(Wcheck.from_reduced_word(w.reduced_word()).action(mu))
|
|
1068
|
+
sage: all(E.eigenvalue(w, a) == eigenvalue(w, a) for w in E.keys() for a in Y.keys().simple_roots()) # long time (2.5s)
|
|
1069
|
+
True
|
|
1070
|
+
"""
|
|
1071
|
+
Y = self.Y()
|
|
1072
|
+
assert Y.keys().is_parent_of(l)
|
|
1073
|
+
if self.keys().is_parent_of(mu):
|
|
1074
|
+
Emu = self[mu]
|
|
1075
|
+
elif self.domain().is_parent_of(mu):
|
|
1076
|
+
Emu = mu
|
|
1077
|
+
else:
|
|
1078
|
+
raise TypeError("input should be a (tentative) eigenvector or an index thereof")
|
|
1079
|
+
res = Y[l](Emu)
|
|
1080
|
+
if not res:
|
|
1081
|
+
return self.domain().base_ring().zero()
|
|
1082
|
+
t = res.leading_support()
|
|
1083
|
+
assert t == Emu.leading_support()
|
|
1084
|
+
c = res[t] / Emu[t]
|
|
1085
|
+
assert res == Emu*c, "not an eigenvector!!!"
|
|
1086
|
+
return c
|
|
1087
|
+
|
|
1088
|
+
def twist(self, mu, i):
|
|
1089
|
+
r"""
|
|
1090
|
+
Act by `s_i` on `\mu`.
|
|
1091
|
+
|
|
1092
|
+
By default, this calls the method ``apply_simple_reflection``.
|
|
1093
|
+
|
|
1094
|
+
EXAMPLES::
|
|
1095
|
+
|
|
1096
|
+
sage: W = WeylGroup(["B",3])
|
|
1097
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
1098
|
+
sage: K = QQ['q1,q2']
|
|
1099
|
+
sage: q1, q2 = K.gens()
|
|
1100
|
+
sage: KW = W.algebra(K)
|
|
1101
|
+
sage: T = KW.demazure_lusztig_operators(q1, q2, affine=True)
|
|
1102
|
+
sage: E = T.Y_eigenvectors()
|
|
1103
|
+
sage: w = W.an_element(); w
|
|
1104
|
+
123
|
|
1105
|
+
sage: E.twist(w,1)
|
|
1106
|
+
1231
|
|
1107
|
+
"""
|
|
1108
|
+
return mu.apply_simple_reflection(i)
|
|
1109
|
+
|
|
1110
|
+
@cached_method
|
|
1111
|
+
def hecke_parameters(self, i):
|
|
1112
|
+
r"""
|
|
1113
|
+
Return the Hecke parameters for index ``i``.
|
|
1114
|
+
|
|
1115
|
+
EXAMPLES::
|
|
1116
|
+
|
|
1117
|
+
sage: W = WeylGroup(["B",3])
|
|
1118
|
+
sage: K = QQ['q1,q2']
|
|
1119
|
+
sage: q1, q2 = K.gens()
|
|
1120
|
+
sage: KW = W.algebra(K)
|
|
1121
|
+
sage: T = KW.demazure_lusztig_operators(q1, q2, affine=True)
|
|
1122
|
+
sage: E = T.Y_eigenvectors()
|
|
1123
|
+
sage: E.hecke_parameters(1)
|
|
1124
|
+
(q1, q2)
|
|
1125
|
+
sage: E.hecke_parameters(2)
|
|
1126
|
+
(q1, q2)
|
|
1127
|
+
sage: E.hecke_parameters(0)
|
|
1128
|
+
(q1, q2)
|
|
1129
|
+
"""
|
|
1130
|
+
return self._T.parameters(i)
|
|
1131
|
+
|
|
1132
|
+
@cached_method
|
|
1133
|
+
def __getitem__(self, mu):
|
|
1134
|
+
r"""
|
|
1135
|
+
Return the eigenvector `E_\mu`.
|
|
1136
|
+
|
|
1137
|
+
INPUT:
|
|
1138
|
+
|
|
1139
|
+
- ``mu`` -- the index `\mu` of an eigenvector
|
|
1140
|
+
|
|
1141
|
+
EXAMPLES::
|
|
1142
|
+
|
|
1143
|
+
sage: W = WeylGroup(["A",3])
|
|
1144
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
1145
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1146
|
+
sage: q1, q2 = K.gens()
|
|
1147
|
+
sage: KW = W.algebra(K)
|
|
1148
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
1149
|
+
sage: w0 = W.long_element()
|
|
1150
|
+
sage: E[w0]
|
|
1151
|
+
123121
|
|
1152
|
+
"""
|
|
1153
|
+
L0 = self.keys()
|
|
1154
|
+
assert L0.is_parent_of(mu)
|
|
1155
|
+
alphacheck = self.Y().keys().simple_roots()
|
|
1156
|
+
muaff = self.affine_lift(mu)
|
|
1157
|
+
i = muaff.first_descent()
|
|
1158
|
+
if i is None:
|
|
1159
|
+
return self.seed(mu)
|
|
1160
|
+
muaffi = self.twist(muaff, i)
|
|
1161
|
+
mui = self.affine_retract(muaffi)
|
|
1162
|
+
E_mui = self[mui]
|
|
1163
|
+
q1, q2 = self.hecke_parameters(i)
|
|
1164
|
+
coroot = alphacheck[i]
|
|
1165
|
+
ct = self.cartan_type()
|
|
1166
|
+
special_node = ct.special_node()
|
|
1167
|
+
if i == special_node:
|
|
1168
|
+
a = ct.a()[special_node]
|
|
1169
|
+
else:
|
|
1170
|
+
a = 1
|
|
1171
|
+
Yi = self.eigenvalue(mui, -coroot)
|
|
1172
|
+
result = self._T.Tw(i)(E_mui) - (q1+q2)*Yi**(a-1)/(1-Yi**a)*E_mui
|
|
1173
|
+
if self._normalized:
|
|
1174
|
+
coeff = result.coefficient(mu)
|
|
1175
|
+
result /= coeff
|
|
1176
|
+
return result
|
|
1177
|
+
|
|
1178
|
+
def recursion(self, mu):
|
|
1179
|
+
r"""
|
|
1180
|
+
Return the indices used in the recursion.
|
|
1181
|
+
|
|
1182
|
+
INPUT:
|
|
1183
|
+
|
|
1184
|
+
- ``mu`` -- the index `\mu` of an eigenvector
|
|
1185
|
+
|
|
1186
|
+
EXAMPLES::
|
|
1187
|
+
|
|
1188
|
+
sage: W = WeylGroup(["A",3])
|
|
1189
|
+
sage: W.element_class._repr_=lambda x: "".join(str(i) for i in x.reduced_word())
|
|
1190
|
+
sage: K = QQ['q1,q2'].fraction_field()
|
|
1191
|
+
sage: q1, q2 = K.gens()
|
|
1192
|
+
sage: KW = W.algebra(K)
|
|
1193
|
+
sage: E = KW.demazure_lusztig_eigenvectors(q1, q2)
|
|
1194
|
+
sage: w0 = W.long_element()
|
|
1195
|
+
sage: E.recursion(w0)
|
|
1196
|
+
[]
|
|
1197
|
+
sage: w = W.an_element(); w
|
|
1198
|
+
123
|
|
1199
|
+
sage: E.recursion(w)
|
|
1200
|
+
[1, 2, 1]
|
|
1201
|
+
"""
|
|
1202
|
+
muaff = self.affine_lift(mu)
|
|
1203
|
+
return muaff.reduced_word()
|