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,1227 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.graphs sage.modules
|
|
3
|
+
"""
|
|
4
|
+
Integrable representations of affine Lie algebras
|
|
5
|
+
"""
|
|
6
|
+
# ***************************************************************************
|
|
7
|
+
# Copyright (C) 2014, 2105 Daniel Bump <bump at match.stanford.edu>
|
|
8
|
+
# Travis Scrimshaw <tscrim at ucdavis.edu>
|
|
9
|
+
# Valentin Buciumas <buciumas at stanford.edu>
|
|
10
|
+
#
|
|
11
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
12
|
+
# https://www.gnu.org/licenses/
|
|
13
|
+
# ***************************************************************************
|
|
14
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
15
|
+
from sage.structure.category_object import CategoryObject
|
|
16
|
+
from sage.categories.modules import Modules
|
|
17
|
+
from sage.rings.integer_ring import ZZ
|
|
18
|
+
from sage.misc.cachefunc import cached_method
|
|
19
|
+
from sage.matrix.constructor import Matrix
|
|
20
|
+
from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet
|
|
21
|
+
from sage.combinat.root_system.weyl_characters import WeylCharacterRing
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# TODO: Make this a proper parent and implement actions
|
|
25
|
+
class IntegrableRepresentation(UniqueRepresentation, CategoryObject):
|
|
26
|
+
r"""
|
|
27
|
+
An irreducible integrable highest weight representation of
|
|
28
|
+
an affine Lie algebra.
|
|
29
|
+
|
|
30
|
+
INPUT:
|
|
31
|
+
|
|
32
|
+
- ``Lam`` -- a dominant weight in an extended weight lattice
|
|
33
|
+
of affine type
|
|
34
|
+
|
|
35
|
+
REFERENCES:
|
|
36
|
+
|
|
37
|
+
- [Ka1990]_
|
|
38
|
+
|
|
39
|
+
.. [KMPS] Kass, Moody, Patera and Slansky, *Affine Lie algebras,
|
|
40
|
+
weight multiplicities, and branching rules*. Vols. 1, 2. University
|
|
41
|
+
of California Press, Berkeley, CA, 1990.
|
|
42
|
+
|
|
43
|
+
.. [KacPeterson] Kac and Peterson. *Infinite-dimensional Lie algebras,
|
|
44
|
+
theta functions and modular forms*. Adv. in Math. 53 (1984),
|
|
45
|
+
no. 2, 125-264.
|
|
46
|
+
|
|
47
|
+
.. [Carter] Carter, *Lie algebras of finite and affine type*. Cambridge
|
|
48
|
+
University Press, 2005
|
|
49
|
+
|
|
50
|
+
If `\Lambda` is a dominant integral weight for an affine root system,
|
|
51
|
+
there exists a unique integrable representation `V=V_\Lambda` of highest
|
|
52
|
+
weight `\Lambda`. If `\mu` is another weight, let `m(\mu)` denote the
|
|
53
|
+
multiplicity of the weight `\mu` in this representation. The set
|
|
54
|
+
`\operatorname{supp}(V)` of `\mu` such that `m(\mu) > 0` is contained in the
|
|
55
|
+
paraboloid
|
|
56
|
+
|
|
57
|
+
.. MATH::
|
|
58
|
+
|
|
59
|
+
(\Lambda+\rho | \Lambda+\rho) - (\mu+\rho | \mu+\rho) \geq 0
|
|
60
|
+
|
|
61
|
+
where `(\, | \,)` is the invariant inner product on the weight
|
|
62
|
+
lattice and `\rho` is the Weyl vector. Moreover if `m(\mu)>0`
|
|
63
|
+
then `\mu\in\operatorname{supp}(V)` differs from `\Lambda` by an element
|
|
64
|
+
of the root lattice ([Ka1990]_, Propositions 11.3 and 11.4).
|
|
65
|
+
|
|
66
|
+
Let `\delta` be the nullroot, which is the lowest positive imaginary
|
|
67
|
+
root. Then by [Ka1990]_, Proposition 11.3 or Corollary 11.9, for fixed `\mu`
|
|
68
|
+
the function `m(\mu - k\delta)` is a monotone increasing function of
|
|
69
|
+
`k`. It is useful to take `\mu` to be such that this function is nonzero
|
|
70
|
+
if and only if `k \geq 0`. Therefore we make the following definition. If
|
|
71
|
+
`\mu` is such that `m(\mu) \neq 0` but `m(\mu + \delta) = 0` then `\mu` is
|
|
72
|
+
called *maximal*.
|
|
73
|
+
|
|
74
|
+
Since `\delta` is fixed under the action of the affine Weyl group,
|
|
75
|
+
and since the weight multiplicities are Weyl group invariant, the
|
|
76
|
+
function `k \mapsto m(\mu - k \delta)` is unchanged if `\mu` is replaced
|
|
77
|
+
by an equivalent weight. Therefore in tabulating these functions, we may
|
|
78
|
+
assume that `\mu` is dominant. There are only a finite number of dominant
|
|
79
|
+
maximal weights.
|
|
80
|
+
|
|
81
|
+
Since every nonzero weight multiplicity appears in the string
|
|
82
|
+
`\mu - k\delta` for one of the finite number of dominant maximal
|
|
83
|
+
weights `\mu`, it is important to be able to compute these. We may
|
|
84
|
+
do this as follows.
|
|
85
|
+
|
|
86
|
+
EXAMPLES::
|
|
87
|
+
|
|
88
|
+
sage: Lambda = RootSystem(['A',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
89
|
+
sage: IntegrableRepresentation(Lambda[1]+Lambda[2]+Lambda[3]).print_strings()
|
|
90
|
+
2*Lambda[0] + Lambda[2]: 4 31 161 665 2380 7658 22721 63120 166085 417295 1007601 2349655
|
|
91
|
+
Lambda[0] + 2*Lambda[1]: 2 18 99 430 1593 5274 16005 45324 121200 308829 754884 1779570
|
|
92
|
+
Lambda[0] + 2*Lambda[3]: 2 18 99 430 1593 5274 16005 45324 121200 308829 754884 1779570
|
|
93
|
+
Lambda[1] + Lambda[2] + Lambda[3]: 1 10 60 274 1056 3601 11199 32354 88009 227555 563390 1343178
|
|
94
|
+
3*Lambda[2] - delta: 3 21 107 450 1638 5367 16194 45687 121876 310056 757056 1783324
|
|
95
|
+
sage: Lambda = RootSystem(['D',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
96
|
+
sage: IntegrableRepresentation(Lambda[0]+Lambda[1]).print_strings() # long time
|
|
97
|
+
Lambda[0] + Lambda[1]: 1 10 62 293 1165 4097 13120 38997 109036 289575 735870 1799620
|
|
98
|
+
Lambda[3] + Lambda[4] - delta: 3 25 136 590 2205 7391 22780 65613 178660 463842 1155717 2777795
|
|
99
|
+
|
|
100
|
+
In this example, we construct the extended weight lattice of Cartan
|
|
101
|
+
type `A_3^{(1)}`, then define ``Lambda`` to be the fundamental
|
|
102
|
+
weights `(\Lambda_i)_{i \in I}`. We find there are 5 maximal
|
|
103
|
+
dominant weights in irreducible representation of highest weight
|
|
104
|
+
`\Lambda_1 + \Lambda_2 + \Lambda_3`, and we determine their strings.
|
|
105
|
+
|
|
106
|
+
It was shown in [KacPeterson]_ that each string is the set of Fourier
|
|
107
|
+
coefficients of a modular form.
|
|
108
|
+
|
|
109
|
+
Every weight `\mu` such that the weight multiplicity `m(\mu)` is
|
|
110
|
+
nonzero has the form
|
|
111
|
+
|
|
112
|
+
.. MATH::
|
|
113
|
+
|
|
114
|
+
\Lambda - n_0 \alpha_0 - n_1 \alpha_1 - \cdots,
|
|
115
|
+
|
|
116
|
+
where the `n_i` are nonnegative integers. This is represented internally
|
|
117
|
+
as a tuple `(n_0, n_1, n_2, \ldots)`. If you want an individual
|
|
118
|
+
multiplicity you use the method :meth:`m` and supply it with this tuple::
|
|
119
|
+
|
|
120
|
+
sage: Lambda = RootSystem(['C',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
121
|
+
sage: V = IntegrableRepresentation(2*Lambda[0]); V
|
|
122
|
+
Integrable representation of ['C', 2, 1] with highest weight 2*Lambda[0]
|
|
123
|
+
sage: V.m((3,5,3))
|
|
124
|
+
18
|
|
125
|
+
|
|
126
|
+
The :class:`IntegrableRepresentation` class has methods :meth:`to_weight`
|
|
127
|
+
and :meth:`from_weight` to convert between this internal representation
|
|
128
|
+
and the weight lattice::
|
|
129
|
+
|
|
130
|
+
sage: delta = V.weight_lattice().null_root()
|
|
131
|
+
sage: V.to_weight((4,3,2))
|
|
132
|
+
-3*Lambda[0] + 6*Lambda[1] - Lambda[2] - 4*delta
|
|
133
|
+
sage: V.from_weight(-3*Lambda[0] + 6*Lambda[1] - Lambda[2] - 4*delta)
|
|
134
|
+
(4, 3, 2)
|
|
135
|
+
|
|
136
|
+
To get more values, use the depth parameter::
|
|
137
|
+
|
|
138
|
+
sage: L0 = RootSystem(["A",1,1]).weight_lattice(extended=true).fundamental_weight(0); L0
|
|
139
|
+
Lambda[0]
|
|
140
|
+
sage: IntegrableRepresentation(4*L0).print_strings(depth=20)
|
|
141
|
+
4*Lambda[0]: 1 1 3 6 13 23 44 75 131 215 354 561 889 1368 2097 3153 4712 6936 10151 14677
|
|
142
|
+
2*Lambda[0] + 2*Lambda[1] - delta: 1 2 5 10 20 36 66 112 190 310 501 788 1230 1880 2850 4256 6303 9222 13396 19262
|
|
143
|
+
4*Lambda[1] - 2*delta: 1 2 6 11 23 41 75 126 215 347 561 878 1368 2082 3153 4690 6936 10121 14677 21055
|
|
144
|
+
|
|
145
|
+
An example in type `C_2^{(1)}`::
|
|
146
|
+
|
|
147
|
+
sage: Lambda = RootSystem(['C',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
148
|
+
sage: V = IntegrableRepresentation(2*Lambda[0])
|
|
149
|
+
sage: V.print_strings() # long time
|
|
150
|
+
2*Lambda[0]: 1 2 9 26 77 194 477 1084 2387 5010 10227 20198
|
|
151
|
+
Lambda[0] + Lambda[2] - delta: 1 5 18 55 149 372 872 1941 4141 8523 17005 33019
|
|
152
|
+
2*Lambda[1] - delta: 1 4 15 44 122 304 721 1612 3469 7176 14414 28124
|
|
153
|
+
2*Lambda[2] - 2*delta: 2 7 26 72 194 467 1084 2367 5010 10191 20198 38907
|
|
154
|
+
|
|
155
|
+
Examples for twisted affine types::
|
|
156
|
+
|
|
157
|
+
sage: Lambda = RootSystem(["A",2,2]).weight_lattice(extended=True).fundamental_weights()
|
|
158
|
+
sage: IntegrableRepresentation(Lambda[0]).strings()
|
|
159
|
+
{Lambda[0]: [1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56]}
|
|
160
|
+
sage: Lambda = RootSystem(['G',2,1]).dual.weight_lattice(extended=true).fundamental_weights()
|
|
161
|
+
sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[2])
|
|
162
|
+
sage: V.print_strings() # long time
|
|
163
|
+
6*Lambdacheck[0]: 4 28 100 320 944 2460 6064 14300 31968 69020 144676 293916
|
|
164
|
+
3*Lambdacheck[0] + Lambdacheck[1]: 2 16 58 192 588 1568 3952 9520 21644 47456 100906 207536
|
|
165
|
+
4*Lambdacheck[0] + Lambdacheck[2]: 4 22 84 276 800 2124 5288 12470 28116 61056 128304 261972
|
|
166
|
+
2*Lambdacheck[1] - deltacheck: 2 8 32 120 354 980 2576 6244 14498 32480 69776 145528
|
|
167
|
+
Lambdacheck[0] + Lambdacheck[1] + Lambdacheck[2]: 1 6 26 94 294 832 2184 5388 12634 28390 61488 128976
|
|
168
|
+
2*Lambdacheck[0] + 2*Lambdacheck[2]: 2 12 48 164 492 1344 3428 8256 18960 41844 89208 184512
|
|
169
|
+
3*Lambdacheck[2] - deltacheck: 4 16 60 208 592 1584 4032 9552 21728 47776 101068 207888
|
|
170
|
+
sage: Lambda = RootSystem(['A',6,2]).weight_lattice(extended=true).fundamental_weights()
|
|
171
|
+
sage: V = IntegrableRepresentation(Lambda[0]+2*Lambda[1])
|
|
172
|
+
sage: V.print_strings() # long time
|
|
173
|
+
5*Lambda[0]: 3 42 378 2508 13707 64650 272211 1045470 3721815 12425064 39254163 118191378
|
|
174
|
+
3*Lambda[0] + Lambda[2]: 1 23 234 1690 9689 47313 204247 800029 2893198 9786257 31262198 95035357
|
|
175
|
+
Lambda[0] + 2*Lambda[1]: 1 14 154 1160 6920 34756 153523 612354 2248318 7702198 24875351 76341630
|
|
176
|
+
Lambda[0] + Lambda[1] + Lambda[3] - 2*delta: 6 87 751 4779 25060 113971 464842 1736620 6034717 19723537 61152367 181068152
|
|
177
|
+
Lambda[0] + 2*Lambda[2] - 2*delta: 3 54 499 3349 18166 84836 353092 1341250 4725259 15625727 48938396 146190544
|
|
178
|
+
Lambda[0] + 2*Lambda[3] - 4*delta: 15 195 1539 9186 45804 200073 789201 2866560 9723582 31120281 94724550 275919741
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
def __init__(self, Lam):
|
|
182
|
+
"""
|
|
183
|
+
Initialize ``self``.
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: Lambda = RootSystem(['A',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
188
|
+
sage: V = IntegrableRepresentation(Lambda[1]+Lambda[2]+Lambda[3])
|
|
189
|
+
|
|
190
|
+
Some methods required by the category are not implemented::
|
|
191
|
+
|
|
192
|
+
sage: TestSuite(V).run() # known bug (#21387)
|
|
193
|
+
"""
|
|
194
|
+
CategoryObject.__init__(self, base=ZZ, category=Modules(ZZ))
|
|
195
|
+
|
|
196
|
+
self._Lam = Lam
|
|
197
|
+
self._P = Lam.parent()
|
|
198
|
+
self._Q = self._P.root_system.root_lattice()
|
|
199
|
+
|
|
200
|
+
# Store some extra simple computations that appear in tight loops
|
|
201
|
+
self._Lam_rho = self._Lam + self._P.rho()
|
|
202
|
+
|
|
203
|
+
self._cartan_matrix = self._P.root_system.cartan_matrix()
|
|
204
|
+
self._cartan_type = self._P.root_system.cartan_type()
|
|
205
|
+
|
|
206
|
+
self._classical_rank = self._cartan_type.classical().rank()
|
|
207
|
+
self._index_set = self._P.index_set()
|
|
208
|
+
self._index_set_classical = self._cartan_type.classical().index_set()
|
|
209
|
+
self._cminv = self._cartan_type.classical().cartan_matrix().inverse()
|
|
210
|
+
|
|
211
|
+
self._ddict = {}
|
|
212
|
+
self._mdict = {tuple(0 for i in self._index_set): 1}
|
|
213
|
+
# Coerce a classical root into the root lattice Q
|
|
214
|
+
from_cl_root = lambda h: self._Q._from_dict(h._monomial_coefficients)
|
|
215
|
+
self._classical_roots = [from_cl_root(al)
|
|
216
|
+
for al in self._Q.classical().roots()]
|
|
217
|
+
self._classical_positive_roots = [from_cl_root(al)
|
|
218
|
+
for al in self._Q.classical().positive_roots()]
|
|
219
|
+
self._a = self._cartan_type.a() # This is not cached
|
|
220
|
+
self._ac = self._cartan_type.dual().a() # This is not cached
|
|
221
|
+
self._eps = {i: self._a[i] / self._ac[i] for i in self._index_set}
|
|
222
|
+
E = Matrix.diagonal([self._eps[i] for i in self._index_set_classical])
|
|
223
|
+
self._ip = (self._cartan_type.classical().cartan_matrix()*E).inverse()
|
|
224
|
+
|
|
225
|
+
# Extra data for the twisted cases
|
|
226
|
+
if not self._cartan_type.is_untwisted_affine():
|
|
227
|
+
self._classical_short_roots = frozenset(al for al in self._classical_roots
|
|
228
|
+
if self._inner_qq(al,al) == 2)
|
|
229
|
+
|
|
230
|
+
def highest_weight(self):
|
|
231
|
+
"""
|
|
232
|
+
Return the highest weight of ``self``.
|
|
233
|
+
|
|
234
|
+
EXAMPLES::
|
|
235
|
+
|
|
236
|
+
sage: Lambda = RootSystem(['D',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
237
|
+
sage: IntegrableRepresentation(Lambda[0]+2*Lambda[2]).highest_weight()
|
|
238
|
+
Lambda[0] + 2*Lambda[2]
|
|
239
|
+
"""
|
|
240
|
+
return self._Lam
|
|
241
|
+
|
|
242
|
+
def weight_lattice(self):
|
|
243
|
+
"""
|
|
244
|
+
Return the weight lattice associated to ``self``.
|
|
245
|
+
|
|
246
|
+
EXAMPLES::
|
|
247
|
+
|
|
248
|
+
sage: V=IntegrableRepresentation(RootSystem(['E',6,1]).weight_lattice(extended=true).fundamental_weight(0))
|
|
249
|
+
sage: V.weight_lattice()
|
|
250
|
+
Extended weight lattice of the Root system of type ['E', 6, 1]
|
|
251
|
+
"""
|
|
252
|
+
return self._P
|
|
253
|
+
|
|
254
|
+
def root_lattice(self):
|
|
255
|
+
"""
|
|
256
|
+
Return the root lattice associated to ``self``.
|
|
257
|
+
|
|
258
|
+
EXAMPLES::
|
|
259
|
+
|
|
260
|
+
sage: V=IntegrableRepresentation(RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weight(0))
|
|
261
|
+
sage: V.root_lattice()
|
|
262
|
+
Root lattice of the Root system of type ['F', 4, 1]
|
|
263
|
+
"""
|
|
264
|
+
return self._Q
|
|
265
|
+
|
|
266
|
+
@cached_method
|
|
267
|
+
def level(self):
|
|
268
|
+
r"""
|
|
269
|
+
Return the level of ``self``.
|
|
270
|
+
|
|
271
|
+
The level of a highest weight representation `V_{\Lambda}` is
|
|
272
|
+
defined as `(\Lambda | \delta)` See [Ka1990]_ section 12.4.
|
|
273
|
+
|
|
274
|
+
EXAMPLES::
|
|
275
|
+
|
|
276
|
+
sage: Lambda = RootSystem(['G',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
277
|
+
sage: [IntegrableRepresentation(Lambda[i]).level() for i in [0,1,2]]
|
|
278
|
+
[1, 1, 2]
|
|
279
|
+
"""
|
|
280
|
+
return ZZ(self._inner_pq(self._Lam, self._Q.null_root()))
|
|
281
|
+
|
|
282
|
+
@cached_method
|
|
283
|
+
def coxeter_number(self):
|
|
284
|
+
"""
|
|
285
|
+
Return the Coxeter number of the Cartan type of ``self``.
|
|
286
|
+
|
|
287
|
+
The Coxeter number is defined in [Ka1990]_ Chapter 6, and commonly
|
|
288
|
+
denoted `h`.
|
|
289
|
+
|
|
290
|
+
EXAMPLES::
|
|
291
|
+
|
|
292
|
+
sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
293
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
294
|
+
sage: V.coxeter_number()
|
|
295
|
+
12
|
|
296
|
+
"""
|
|
297
|
+
return sum(self._a)
|
|
298
|
+
|
|
299
|
+
@cached_method
|
|
300
|
+
def dual_coxeter_number(self):
|
|
301
|
+
r"""
|
|
302
|
+
Return the dual Coxeter number of the Cartan type of ``self``.
|
|
303
|
+
|
|
304
|
+
The dual Coxeter number is defined in [Ka1990]_ Chapter 6, and commonly
|
|
305
|
+
denoted `h^{\vee}`.
|
|
306
|
+
|
|
307
|
+
EXAMPLES::
|
|
308
|
+
|
|
309
|
+
sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
310
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
311
|
+
sage: V.dual_coxeter_number()
|
|
312
|
+
9
|
|
313
|
+
"""
|
|
314
|
+
return sum(self._ac)
|
|
315
|
+
|
|
316
|
+
def _repr_(self):
|
|
317
|
+
"""
|
|
318
|
+
Return a string representation of ``self``.
|
|
319
|
+
|
|
320
|
+
EXAMPLES::
|
|
321
|
+
|
|
322
|
+
sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
323
|
+
sage: IntegrableRepresentation(Lambda[0])
|
|
324
|
+
Integrable representation of ['F', 4, 1] with highest weight Lambda[0]
|
|
325
|
+
"""
|
|
326
|
+
return "Integrable representation of %s with highest weight %s" % (self._cartan_type, self._Lam)
|
|
327
|
+
|
|
328
|
+
def _latex_(self):
|
|
329
|
+
r"""
|
|
330
|
+
Return a latex representation of ``self``.
|
|
331
|
+
|
|
332
|
+
EXAMPLES::
|
|
333
|
+
|
|
334
|
+
sage: Lambda = RootSystem(['C',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
335
|
+
sage: V = IntegrableRepresentation(Lambda[0]+2*Lambda[3])
|
|
336
|
+
sage: latex(V)
|
|
337
|
+
V_{\Lambda_{0} + 2 \Lambda_{3}}
|
|
338
|
+
"""
|
|
339
|
+
return "V_{{{}}}".format(self._Lam._latex_())
|
|
340
|
+
|
|
341
|
+
def cartan_type(self):
|
|
342
|
+
"""
|
|
343
|
+
Return the Cartan type of ``self``.
|
|
344
|
+
|
|
345
|
+
EXAMPLES::
|
|
346
|
+
|
|
347
|
+
sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
348
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
349
|
+
sage: V.cartan_type()
|
|
350
|
+
['F', 4, 1]
|
|
351
|
+
"""
|
|
352
|
+
return self._cartan_type
|
|
353
|
+
|
|
354
|
+
def _inner_qq(self, qelt1, qelt2):
|
|
355
|
+
"""
|
|
356
|
+
Symmetric form between two elements of the root lattice
|
|
357
|
+
associated to ``self``.
|
|
358
|
+
|
|
359
|
+
EXAMPLES::
|
|
360
|
+
|
|
361
|
+
sage: P = RootSystem(['F',4,1]).weight_lattice(extended=true)
|
|
362
|
+
sage: Lambda = P.fundamental_weights()
|
|
363
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
364
|
+
sage: alpha = V.root_lattice().simple_roots()
|
|
365
|
+
sage: Matrix([[V._inner_qq(alpha[i], alpha[j]) for j in V._index_set] for i in V._index_set])
|
|
366
|
+
[ 2 -1 0 0 0]
|
|
367
|
+
[ -1 2 -1 0 0]
|
|
368
|
+
[ 0 -1 2 -1 0]
|
|
369
|
+
[ 0 0 -1 1 -1/2]
|
|
370
|
+
[ 0 0 0 -1/2 1]
|
|
371
|
+
|
|
372
|
+
.. WARNING::
|
|
373
|
+
|
|
374
|
+
If ``qelt1`` or ``qelt1`` accidentally gets coerced into
|
|
375
|
+
the extended weight lattice, this will return an answer,
|
|
376
|
+
and it will be wrong. To make this code robust, parents
|
|
377
|
+
should be checked. This is not done since in the application
|
|
378
|
+
the parents are known, so checking would unnecessarily slow
|
|
379
|
+
us down.
|
|
380
|
+
"""
|
|
381
|
+
mc1 = qelt1.monomial_coefficients()
|
|
382
|
+
mc2 = qelt2.monomial_coefficients()
|
|
383
|
+
zero = ZZ.zero()
|
|
384
|
+
return sum(mc1.get(i, zero) * mc2.get(j, zero)
|
|
385
|
+
* self._cartan_matrix[i,j] / self._eps[i]
|
|
386
|
+
for i in self._index_set for j in self._index_set)
|
|
387
|
+
|
|
388
|
+
def _inner_pq(self, pelt, qelt):
|
|
389
|
+
"""
|
|
390
|
+
Symmetric form between an element of the weight and root lattices
|
|
391
|
+
associated to ``self``.
|
|
392
|
+
|
|
393
|
+
.. WARNING::
|
|
394
|
+
|
|
395
|
+
If ``qelt`` accidentally gets coerced into the extended weight
|
|
396
|
+
lattice, this will return an answer, and it will be wrong. To make
|
|
397
|
+
this code robust, parents should be checked. This is not done
|
|
398
|
+
since in the application the parents are known, so checking would
|
|
399
|
+
unnecessarily slow us down.
|
|
400
|
+
|
|
401
|
+
EXAMPLES::
|
|
402
|
+
|
|
403
|
+
sage: P = RootSystem(['F',4,1]).weight_lattice(extended=true)
|
|
404
|
+
sage: Lambda = P.fundamental_weights()
|
|
405
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
406
|
+
sage: alpha = V.root_lattice().simple_roots()
|
|
407
|
+
sage: Matrix([[V._inner_pq(P(alpha[i]), alpha[j]) for j in V._index_set] for i in V._index_set])
|
|
408
|
+
[ 2 -1 0 0 0]
|
|
409
|
+
[ -1 2 -1 0 0]
|
|
410
|
+
[ 0 -1 2 -1 0]
|
|
411
|
+
[ 0 0 -1 1 -1/2]
|
|
412
|
+
[ 0 0 0 -1/2 1]
|
|
413
|
+
sage: P = RootSystem(['G',2,1]).weight_lattice(extended=true)
|
|
414
|
+
sage: P = RootSystem(['G',2,1]).weight_lattice(extended=true)
|
|
415
|
+
sage: Lambda = P.fundamental_weights()
|
|
416
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
417
|
+
sage: alpha = V.root_lattice().simple_roots()
|
|
418
|
+
sage: Matrix([[V._inner_pq(Lambda[i],alpha[j]) for j in V._index_set] for i in V._index_set])
|
|
419
|
+
[ 1 0 0]
|
|
420
|
+
[ 0 1/3 0]
|
|
421
|
+
[ 0 0 1]
|
|
422
|
+
"""
|
|
423
|
+
mcp = pelt.monomial_coefficients()
|
|
424
|
+
mcq = qelt.monomial_coefficients()
|
|
425
|
+
zero = ZZ.zero()
|
|
426
|
+
return sum(mcp.get(i, zero) * mcq[i] / self._eps[i] for i in mcq)
|
|
427
|
+
|
|
428
|
+
def _inner_pp(self, pelt1, pelt2):
|
|
429
|
+
"""
|
|
430
|
+
Symmetric form between two elements of the weight lattice
|
|
431
|
+
associated to ``self``.
|
|
432
|
+
|
|
433
|
+
EXAMPLES::
|
|
434
|
+
|
|
435
|
+
sage: P = RootSystem(['G',2,1]).weight_lattice(extended=true)
|
|
436
|
+
sage: Lambda = P.fundamental_weights()
|
|
437
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
438
|
+
sage: alpha = V.root_lattice().simple_roots()
|
|
439
|
+
sage: Matrix([[V._inner_pp(Lambda[i],P(alpha[j])) for j in V._index_set] for i in V._index_set])
|
|
440
|
+
[ 1 0 0]
|
|
441
|
+
[ 0 1/3 0]
|
|
442
|
+
[ 0 0 1]
|
|
443
|
+
sage: Matrix([[V._inner_pp(Lambda[i],Lambda[j]) for j in V._index_set] for i in V._index_set])
|
|
444
|
+
[ 0 0 0]
|
|
445
|
+
[ 0 2/3 1]
|
|
446
|
+
[ 0 1 2]
|
|
447
|
+
"""
|
|
448
|
+
mc1 = pelt1.monomial_coefficients()
|
|
449
|
+
mc2 = pelt2.monomial_coefficients()
|
|
450
|
+
zero = ZZ.zero()
|
|
451
|
+
mc1d = mc1.get('delta', zero)
|
|
452
|
+
mc2d = mc2.get('delta', zero)
|
|
453
|
+
return sum(mc1.get(i,zero) * self._ac[i] * mc2d
|
|
454
|
+
+ mc2.get(i,zero) * self._ac[i] * mc1d
|
|
455
|
+
for i in self._index_set) \
|
|
456
|
+
+ sum(mc1.get(i,zero) * mc2.get(j,zero) * self._ip[ii,ij]
|
|
457
|
+
for ii, i in enumerate(self._index_set_classical)
|
|
458
|
+
for ij, j in enumerate(self._index_set_classical))
|
|
459
|
+
|
|
460
|
+
def to_weight(self, n):
|
|
461
|
+
r"""
|
|
462
|
+
Return the weight associated to the tuple ``n`` in ``self``.
|
|
463
|
+
|
|
464
|
+
If ``n`` is the tuple `(n_1, n_2, \ldots)`, then the associated
|
|
465
|
+
weight is `\Lambda - \sum_i n_i \alpha_i`, where `\Lambda`
|
|
466
|
+
is the weight of the representation.
|
|
467
|
+
|
|
468
|
+
INPUT:
|
|
469
|
+
|
|
470
|
+
- ``n`` -- tuple representing a weight
|
|
471
|
+
|
|
472
|
+
EXAMPLES::
|
|
473
|
+
|
|
474
|
+
sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
475
|
+
sage: V = IntegrableRepresentation(2*Lambda[2])
|
|
476
|
+
sage: V.to_weight((1,0,0))
|
|
477
|
+
-2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta
|
|
478
|
+
"""
|
|
479
|
+
alpha = self._P.simple_roots()
|
|
480
|
+
I = self._index_set
|
|
481
|
+
return self._Lam - self._P.sum(val * alpha[I[i]]
|
|
482
|
+
for i,val in enumerate(n))
|
|
483
|
+
|
|
484
|
+
def _from_weight_helper(self, mu, check=False):
|
|
485
|
+
r"""
|
|
486
|
+
Return the coefficients of a tuple of the weight ``mu`` expressed
|
|
487
|
+
in terms of the simple roots in ``self``.
|
|
488
|
+
|
|
489
|
+
The tuple ``n`` is defined as the tuple `(n_0, n_1, \ldots)`
|
|
490
|
+
such that `\mu = \sum_{i \in I} n_i \alpha_i`.
|
|
491
|
+
|
|
492
|
+
INPUT:
|
|
493
|
+
|
|
494
|
+
- ``mu`` -- an element in the root lattice
|
|
495
|
+
|
|
496
|
+
.. TODO::
|
|
497
|
+
|
|
498
|
+
Implement this as a section map of the inverse of the
|
|
499
|
+
coercion from `Q \to P`.
|
|
500
|
+
|
|
501
|
+
EXAMPLES::
|
|
502
|
+
|
|
503
|
+
sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
504
|
+
sage: V = IntegrableRepresentation(2*Lambda[2])
|
|
505
|
+
sage: V.to_weight((1,0,0))
|
|
506
|
+
-2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta
|
|
507
|
+
sage: delta = V.weight_lattice().null_root()
|
|
508
|
+
sage: V._from_weight_helper(2*Lambda[0] - Lambda[1] - 1*Lambda[2] + delta)
|
|
509
|
+
(1, 0, 0)
|
|
510
|
+
"""
|
|
511
|
+
mu = self._P(mu)
|
|
512
|
+
zero = ZZ.zero()
|
|
513
|
+
n0 = mu.monomial_coefficients().get('delta', zero)
|
|
514
|
+
mu0 = mu - n0 * self._P.simple_root(self._cartan_type.special_node())
|
|
515
|
+
ret = [n0] # This should be in ZZ because it is in the weight lattice
|
|
516
|
+
mc_mu0 = mu0.monomial_coefficients()
|
|
517
|
+
for ii, i in enumerate(self._index_set_classical):
|
|
518
|
+
# -1 for indexing
|
|
519
|
+
ret.append( sum(self._cminv[ii,ij] * mc_mu0.get(j, zero)
|
|
520
|
+
for ij, j in enumerate(self._index_set_classical)) )
|
|
521
|
+
if check:
|
|
522
|
+
return all(x in ZZ for x in ret)
|
|
523
|
+
else:
|
|
524
|
+
return tuple(ZZ(x) for x in ret)
|
|
525
|
+
|
|
526
|
+
def from_weight(self, mu):
|
|
527
|
+
r"""
|
|
528
|
+
Return the tuple `(n_0, n_1, ...)`` such that ``mu`` equals
|
|
529
|
+
`\Lambda - \sum_{i \in I} n_i \alpha_i` in ``self``, where `\Lambda`
|
|
530
|
+
is the highest weight of ``self``.
|
|
531
|
+
|
|
532
|
+
EXAMPLES::
|
|
533
|
+
|
|
534
|
+
sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
535
|
+
sage: V = IntegrableRepresentation(2*Lambda[2])
|
|
536
|
+
sage: V.to_weight((1,0,0))
|
|
537
|
+
-2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta
|
|
538
|
+
sage: delta = V.weight_lattice().null_root()
|
|
539
|
+
sage: V.from_weight(-2*Lambda[0] + Lambda[1] + 3*Lambda[2] - delta)
|
|
540
|
+
(1, 0, 0)
|
|
541
|
+
"""
|
|
542
|
+
return self._from_weight_helper(self._Lam - mu)
|
|
543
|
+
|
|
544
|
+
def s(self, n, i):
|
|
545
|
+
"""
|
|
546
|
+
Return the action of the ``i``-th simple reflection on the
|
|
547
|
+
internal representation of weights by tuples ``n`` in ``self``.
|
|
548
|
+
|
|
549
|
+
EXAMPLES::
|
|
550
|
+
|
|
551
|
+
sage: V = IntegrableRepresentation(RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weight(0))
|
|
552
|
+
sage: [V.s((0,0,0),i) for i in V._index_set]
|
|
553
|
+
[(1, 0, 0), (0, 0, 0), (0, 0, 0)]
|
|
554
|
+
"""
|
|
555
|
+
ret = list(n) # This makes a copy
|
|
556
|
+
ret[i] += self._Lam._monomial_coefficients.get(i, ZZ.zero())
|
|
557
|
+
ret[i] -= sum(val * self._cartan_matrix[i,j] for j,val in enumerate(n))
|
|
558
|
+
return tuple(ret)
|
|
559
|
+
|
|
560
|
+
def to_dominant(self, n):
|
|
561
|
+
"""
|
|
562
|
+
Return the dominant weight in ``self`` equivalent to ``n``
|
|
563
|
+
under the affine Weyl group.
|
|
564
|
+
|
|
565
|
+
EXAMPLES::
|
|
566
|
+
|
|
567
|
+
sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
568
|
+
sage: V = IntegrableRepresentation(3*Lambda[0])
|
|
569
|
+
sage: n = V.to_dominant((13,11,7)); n
|
|
570
|
+
(4, 3, 3)
|
|
571
|
+
sage: V.to_weight(n)
|
|
572
|
+
Lambda[0] + Lambda[1] + Lambda[2] - 4*delta
|
|
573
|
+
"""
|
|
574
|
+
if n in self._ddict:
|
|
575
|
+
return self._ddict[n]
|
|
576
|
+
|
|
577
|
+
path = [n]
|
|
578
|
+
alpha = self._P.simple_roots()
|
|
579
|
+
next = True
|
|
580
|
+
cur_wt = self.to_weight(n)
|
|
581
|
+
|
|
582
|
+
while next:
|
|
583
|
+
if path[-1] in self._ddict:
|
|
584
|
+
path.append( self._ddict[path[-1]] )
|
|
585
|
+
break
|
|
586
|
+
|
|
587
|
+
next = False
|
|
588
|
+
mc = cur_wt.monomial_coefficients()
|
|
589
|
+
# Most weights are dense over the index set
|
|
590
|
+
for i in self._index_set:
|
|
591
|
+
if mc.get(i, 0) < 0:
|
|
592
|
+
m = self.s(path[-1], i)
|
|
593
|
+
if m in self._ddict:
|
|
594
|
+
path.append(self._ddict[m])
|
|
595
|
+
else:
|
|
596
|
+
cur_wt -= (m[i] - path[-1][i]) * alpha[i]
|
|
597
|
+
path.append(m)
|
|
598
|
+
next = True
|
|
599
|
+
break
|
|
600
|
+
|
|
601
|
+
# We don't want any dominant weight to refer to itself in self._ddict
|
|
602
|
+
# as this leads to an infinite loop with self.m() when the dominant
|
|
603
|
+
# weight does not have a known multiplicity.
|
|
604
|
+
v = path.pop()
|
|
605
|
+
for m in path:
|
|
606
|
+
self._ddict[m] = v
|
|
607
|
+
return v
|
|
608
|
+
|
|
609
|
+
def _freudenthal_roots_imaginary(self, nu):
|
|
610
|
+
r"""
|
|
611
|
+
Iterate over the set of imaginary roots `\alpha \in \Delta^+`
|
|
612
|
+
in ``self`` such that `\nu - \alpha \in Q^+`.
|
|
613
|
+
|
|
614
|
+
INPUT:
|
|
615
|
+
|
|
616
|
+
- ``nu`` -- an element in `Q`
|
|
617
|
+
|
|
618
|
+
EXAMPLES::
|
|
619
|
+
|
|
620
|
+
sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
621
|
+
sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
|
|
622
|
+
sage: [list(V._freudenthal_roots_imaginary(V.highest_weight() - mw))
|
|
623
|
+
....: for mw in V.dominant_maximal_weights()]
|
|
624
|
+
[[], [], [], [], []]
|
|
625
|
+
"""
|
|
626
|
+
l = self._from_weight_helper(nu)
|
|
627
|
+
kp = min(l[i] // self._a[i] for i in self._index_set)
|
|
628
|
+
delta = self._Q.null_root()
|
|
629
|
+
for u in range(1, kp+1):
|
|
630
|
+
yield u * delta
|
|
631
|
+
|
|
632
|
+
def _freudenthal_roots_real(self, nu):
|
|
633
|
+
r"""
|
|
634
|
+
Iterate over the set of real positive roots `\alpha \in \Delta^+`
|
|
635
|
+
in ``self`` such that `\nu - \alpha \in Q^+`.
|
|
636
|
+
|
|
637
|
+
See [Ka1990]_ Proposition 6.3 for the way to compute the set of real
|
|
638
|
+
roots for twisted affine case.
|
|
639
|
+
|
|
640
|
+
INPUT:
|
|
641
|
+
|
|
642
|
+
- ``nu`` -- an element in `Q`
|
|
643
|
+
|
|
644
|
+
EXAMPLES::
|
|
645
|
+
|
|
646
|
+
sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
647
|
+
sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
|
|
648
|
+
sage: mw = V.dominant_maximal_weights()[0]
|
|
649
|
+
sage: sorted(V._freudenthal_roots_real(V.highest_weight() - mw), key=str)
|
|
650
|
+
[alpha[1],
|
|
651
|
+
alpha[1] + alpha[2],
|
|
652
|
+
alpha[1] + alpha[2] + alpha[3],
|
|
653
|
+
alpha[2],
|
|
654
|
+
alpha[2] + alpha[3],
|
|
655
|
+
alpha[3]]
|
|
656
|
+
"""
|
|
657
|
+
for al in self._classical_positive_roots:
|
|
658
|
+
if min(self._from_weight_helper(nu-al)) >= 0:
|
|
659
|
+
yield al
|
|
660
|
+
|
|
661
|
+
if self._cartan_type.is_untwisted_affine():
|
|
662
|
+
# untwisted case
|
|
663
|
+
for al in self._classical_roots:
|
|
664
|
+
for ir in self._freudenthal_roots_imaginary(nu-al):
|
|
665
|
+
yield al + ir
|
|
666
|
+
|
|
667
|
+
elif self._cartan_type.type() == 'BC':
|
|
668
|
+
#case A^2_{2l}
|
|
669
|
+
# We have to keep track of the roots we have visited for this case
|
|
670
|
+
ret = set(self._classical_positive_roots)
|
|
671
|
+
for al in self._classical_roots:
|
|
672
|
+
if al in self._classical_short_roots:
|
|
673
|
+
for ir in self._freudenthal_roots_imaginary(nu-al):
|
|
674
|
+
ret.add(al + ir)
|
|
675
|
+
yield al + ir
|
|
676
|
+
else:
|
|
677
|
+
fri = list(self._freudenthal_roots_imaginary(nu-al))
|
|
678
|
+
friset = set(fri)
|
|
679
|
+
for ir in fri:
|
|
680
|
+
if 2*ir in friset:
|
|
681
|
+
ret.add(al + 2*ir)
|
|
682
|
+
yield al + 2*ir
|
|
683
|
+
alpha = self._Q.simple_roots()
|
|
684
|
+
fri = list(self._freudenthal_roots_imaginary(2*nu-al))
|
|
685
|
+
for ir in fri[::2]:
|
|
686
|
+
rt = sum( val // 2 * alpha[i] for i,val in
|
|
687
|
+
enumerate(self._from_weight_helper(al+ir)) )
|
|
688
|
+
if rt not in ret:
|
|
689
|
+
ret.add(rt)
|
|
690
|
+
yield rt
|
|
691
|
+
|
|
692
|
+
elif self._cartan_type.dual().type() == 'G':
|
|
693
|
+
# case D^3_4 in the Kac notation
|
|
694
|
+
for al in self._classical_roots:
|
|
695
|
+
if al in self._classical_short_roots:
|
|
696
|
+
for ir in self._freudenthal_roots_imaginary(nu-al):
|
|
697
|
+
yield al + ir
|
|
698
|
+
else:
|
|
699
|
+
fri = list(self._freudenthal_roots_imaginary(nu-al))
|
|
700
|
+
friset = set(fri)
|
|
701
|
+
for ir in fri:
|
|
702
|
+
if 3*ir in friset:
|
|
703
|
+
yield al + 3*ir
|
|
704
|
+
|
|
705
|
+
elif self._cartan_type.dual().type() in ['B','C','F']:
|
|
706
|
+
#case A^2_{2l-1} or case D^2_{l+1} or case E^2_6:
|
|
707
|
+
for al in self._classical_roots:
|
|
708
|
+
if al in self._classical_short_roots:
|
|
709
|
+
for ir in self._freudenthal_roots_imaginary(nu-al):
|
|
710
|
+
yield al + ir
|
|
711
|
+
else:
|
|
712
|
+
fri = list(self._freudenthal_roots_imaginary(nu-al))
|
|
713
|
+
friset = set(fri)
|
|
714
|
+
for ir in fri:
|
|
715
|
+
if 2*ir in friset:
|
|
716
|
+
yield al + 2*ir
|
|
717
|
+
|
|
718
|
+
def _freudenthal_accum(self, nu, al):
|
|
719
|
+
"""
|
|
720
|
+
Helper method for computing the Freudenthal formula in ``self``.
|
|
721
|
+
|
|
722
|
+
EXAMPLES::
|
|
723
|
+
|
|
724
|
+
sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
725
|
+
sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
|
|
726
|
+
sage: mw = V.dominant_maximal_weights()[0]
|
|
727
|
+
sage: F = V._freudenthal_roots_real(V.highest_weight() - mw)
|
|
728
|
+
sage: sorted([V._freudenthal_accum(mw, al) for al in F])
|
|
729
|
+
[3, 3, 3, 4, 4, 4]
|
|
730
|
+
"""
|
|
731
|
+
ret = 0
|
|
732
|
+
n = list(self._from_weight_helper(self._Lam - nu))
|
|
733
|
+
ip = self._inner_pq(nu, al)
|
|
734
|
+
n_shift = self._from_weight_helper(al)
|
|
735
|
+
ip_shift = self._inner_qq(al, al)
|
|
736
|
+
|
|
737
|
+
while min(n) >= 0:
|
|
738
|
+
# Change in data by adding ``al`` to our current weight
|
|
739
|
+
ip += ip_shift
|
|
740
|
+
for i,val in enumerate(n_shift):
|
|
741
|
+
n[i] -= val
|
|
742
|
+
# Compute the multiplicity
|
|
743
|
+
ret += 2 * self.m(tuple(n)) * ip
|
|
744
|
+
return ret
|
|
745
|
+
|
|
746
|
+
def _m_freudenthal(self, n):
|
|
747
|
+
r"""
|
|
748
|
+
Compute the weight multiplicity using the Freudenthal
|
|
749
|
+
multiplicity formula in ``self``.
|
|
750
|
+
|
|
751
|
+
The multiplicities of the imaginary roots for the twisted
|
|
752
|
+
affine case are different than those for the untwisted case.
|
|
753
|
+
See [Carter]_ Corollary 18.10 for general type and Corollary
|
|
754
|
+
18.15 for `A^2_{2l}`
|
|
755
|
+
|
|
756
|
+
EXAMPLES::
|
|
757
|
+
|
|
758
|
+
sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
759
|
+
sage: V = IntegrableRepresentation(Lambda[0]+Lambda[1]+Lambda[3])
|
|
760
|
+
sage: D = list(V.dominant_maximal_weights())
|
|
761
|
+
sage: D.remove(V.highest_weight())
|
|
762
|
+
sage: [V._m_freudenthal(V.from_weight(mw)) for mw in D]
|
|
763
|
+
[3, 7, 3, 3]
|
|
764
|
+
"""
|
|
765
|
+
if min(n) < 0:
|
|
766
|
+
return 0
|
|
767
|
+
mu = self.to_weight(n)
|
|
768
|
+
I = self._index_set
|
|
769
|
+
al = self._Q._from_dict({I[i]: val for i,val in enumerate(n) if val},
|
|
770
|
+
remove_zeros=False)
|
|
771
|
+
cr = self._classical_rank
|
|
772
|
+
num = sum(self._freudenthal_accum(mu, alr)
|
|
773
|
+
for alr in self._freudenthal_roots_real(self._Lam - mu))
|
|
774
|
+
|
|
775
|
+
if self._cartan_type.is_untwisted_affine():
|
|
776
|
+
num += sum(cr * self._freudenthal_accum(mu, alr)
|
|
777
|
+
for alr in self._freudenthal_roots_imaginary(self._Lam - mu))
|
|
778
|
+
|
|
779
|
+
elif self._cartan_type.dual().type() == 'B': # A_{2n-1}^{(2)}
|
|
780
|
+
val = 1
|
|
781
|
+
for rt in self._freudenthal_roots_imaginary(self._Lam - mu):
|
|
782
|
+
# k-th element (starting from 1) is k*delta
|
|
783
|
+
num += (cr - val) * self._freudenthal_accum(mu, rt)
|
|
784
|
+
val = 1 - val
|
|
785
|
+
|
|
786
|
+
elif self._cartan_type.type() == 'BC': # A_{2n}^{(2)}
|
|
787
|
+
num += sum(cr * self._freudenthal_accum(mu, alr)
|
|
788
|
+
for alr in self._freudenthal_roots_imaginary(self._Lam - mu))
|
|
789
|
+
|
|
790
|
+
elif self._cartan_type.dual() == 'C': # D_{n+1}^{(2)}
|
|
791
|
+
val = 1
|
|
792
|
+
for rt in self._freudenthal_roots_imaginary(self._Lam - mu):
|
|
793
|
+
# k-th element (starting from 1) is k*delta
|
|
794
|
+
num += (cr - (cr - 1)*val) * self._freudenthal_accum(mu, rt)
|
|
795
|
+
val = 1 - val
|
|
796
|
+
|
|
797
|
+
elif self._cartan_type.dual().type() == 'F': # E_6^{(2)}
|
|
798
|
+
val = 1
|
|
799
|
+
for rt in self._freudenthal_roots_imaginary(self._Lam - mu):
|
|
800
|
+
# k-th element (starting from 1) is k*delta
|
|
801
|
+
num += (4 - 2*val) * self._freudenthal_accum(mu, rt)
|
|
802
|
+
val = 1 - val
|
|
803
|
+
|
|
804
|
+
elif self._cartan_type.dual().type() == 'G': # D_4^{(3)} (or dual of G_2^{(1)})
|
|
805
|
+
for k,rt in enumerate(self._freudenthal_roots_imaginary(self._Lam - mu)):
|
|
806
|
+
# k-th element (starting from 1) is k*delta
|
|
807
|
+
if (k+1) % 3 == 0:
|
|
808
|
+
num += 2 * self._freudenthal_accum(mu, rt)
|
|
809
|
+
else:
|
|
810
|
+
num += self._freudenthal_accum(mu, rt)
|
|
811
|
+
|
|
812
|
+
den = 2*self._inner_pq(self._Lam_rho, al) - self._inner_qq(al, al)
|
|
813
|
+
try:
|
|
814
|
+
return ZZ(num / den)
|
|
815
|
+
except TypeError:
|
|
816
|
+
return None
|
|
817
|
+
|
|
818
|
+
def m(self, n):
|
|
819
|
+
r"""
|
|
820
|
+
Return the multiplicity of the weight `\mu` in ``self``, where
|
|
821
|
+
`\mu = \Lambda - \sum_i n_i \alpha_i`.
|
|
822
|
+
|
|
823
|
+
INPUT:
|
|
824
|
+
|
|
825
|
+
- ``n`` -- tuple representing a weight `\mu`
|
|
826
|
+
|
|
827
|
+
EXAMPLES::
|
|
828
|
+
|
|
829
|
+
sage: Lambda = RootSystem(['E',6,1]).weight_lattice(extended=true).fundamental_weights()
|
|
830
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
831
|
+
sage: u = V.highest_weight() - V.weight_lattice().null_root()
|
|
832
|
+
sage: V.from_weight(u)
|
|
833
|
+
(1, 1, 2, 2, 3, 2, 1)
|
|
834
|
+
sage: V.m(V.from_weight(u))
|
|
835
|
+
6
|
|
836
|
+
"""
|
|
837
|
+
# TODO: Make this non-recursive by implementing our own stack
|
|
838
|
+
# The recursion follows:
|
|
839
|
+
# - m
|
|
840
|
+
# - _m_freudenthal
|
|
841
|
+
# - _freudenthal_accum
|
|
842
|
+
if n in self._mdict:
|
|
843
|
+
return self._mdict[n]
|
|
844
|
+
elif n in self._ddict:
|
|
845
|
+
self._mdict[n] = self.m(self._ddict[n])
|
|
846
|
+
m = self.to_dominant(n)
|
|
847
|
+
if m in self._mdict:
|
|
848
|
+
return self._mdict[m]
|
|
849
|
+
ret = self._m_freudenthal(m)
|
|
850
|
+
assert ret is not None, "m: error - failed to compute m{}".format(n)
|
|
851
|
+
self._mdict[n] = ret
|
|
852
|
+
return ret
|
|
853
|
+
|
|
854
|
+
def mult(self, mu):
|
|
855
|
+
"""
|
|
856
|
+
Return the weight multiplicity of ``mu``.
|
|
857
|
+
|
|
858
|
+
INPUT:
|
|
859
|
+
|
|
860
|
+
- ``mu`` -- an element of the weight lattice
|
|
861
|
+
|
|
862
|
+
EXAMPLES::
|
|
863
|
+
|
|
864
|
+
sage: # needs sage.libs.gap
|
|
865
|
+
sage: L = RootSystem("B3~").weight_lattice(extended=True)
|
|
866
|
+
sage: Lambda = L.fundamental_weights()
|
|
867
|
+
sage: delta = L.null_root()
|
|
868
|
+
sage: W = L.weyl_group(prefix='s')
|
|
869
|
+
sage: [s0,s1,s2,s3] = W.simple_reflections()
|
|
870
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
871
|
+
sage: V.mult(Lambda[2] - 2*delta)
|
|
872
|
+
3
|
|
873
|
+
sage: V.mult(Lambda[2] - Lambda[1])
|
|
874
|
+
0
|
|
875
|
+
sage: weights = [w.action(Lambda[1] - 4*delta) for w in [s1,s2,s0*s1*s2*s3]]
|
|
876
|
+
sage: weights
|
|
877
|
+
[-Lambda[1] + Lambda[2] - 4*delta,
|
|
878
|
+
Lambda[1] - 4*delta,
|
|
879
|
+
-Lambda[1] + Lambda[2] - 4*delta]
|
|
880
|
+
sage: [V.mult(mu) for mu in weights]
|
|
881
|
+
[35, 35, 35]
|
|
882
|
+
|
|
883
|
+
TESTS::
|
|
884
|
+
|
|
885
|
+
sage: L = RootSystem("B3~").weight_lattice(extended=True)
|
|
886
|
+
sage: La = L.fundamental_weights()
|
|
887
|
+
sage: V = IntegrableRepresentation(La[0])
|
|
888
|
+
sage: Q = RootSystem("B3~").root_space()
|
|
889
|
+
sage: al = Q.simple_roots()
|
|
890
|
+
sage: V.mult(1/2*al[1])
|
|
891
|
+
0
|
|
892
|
+
"""
|
|
893
|
+
try:
|
|
894
|
+
n = self.from_weight(mu)
|
|
895
|
+
except TypeError:
|
|
896
|
+
return ZZ.zero()
|
|
897
|
+
return self.m(n)
|
|
898
|
+
|
|
899
|
+
@cached_method
|
|
900
|
+
def dominant_maximal_weights(self):
|
|
901
|
+
r"""
|
|
902
|
+
Return the dominant maximal weights of ``self``.
|
|
903
|
+
|
|
904
|
+
A weight `\mu` is *maximal* if it has nonzero multiplicity but
|
|
905
|
+
`\mu + \delta`` has multiplicity zero. There are a finite number
|
|
906
|
+
of dominant maximal weights. Indeed, [Ka1990]_ Proposition 12.6
|
|
907
|
+
shows that the dominant maximal weights are in bijection with
|
|
908
|
+
the classical weights in `k \cdot F` where `F` is the fundamental
|
|
909
|
+
alcove and `k` is the level. The construction used in this
|
|
910
|
+
method is based on that Proposition.
|
|
911
|
+
|
|
912
|
+
EXAMPLES::
|
|
913
|
+
|
|
914
|
+
sage: Lambda = RootSystem(['C',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
915
|
+
sage: IntegrableRepresentation(2*Lambda[0]).dominant_maximal_weights()
|
|
916
|
+
(2*Lambda[0],
|
|
917
|
+
Lambda[0] + Lambda[2] - delta,
|
|
918
|
+
2*Lambda[1] - delta,
|
|
919
|
+
Lambda[1] + Lambda[3] - 2*delta,
|
|
920
|
+
2*Lambda[2] - 2*delta,
|
|
921
|
+
2*Lambda[3] - 3*delta)
|
|
922
|
+
"""
|
|
923
|
+
k = self.level()
|
|
924
|
+
Lambda = self._P.fundamental_weights()
|
|
925
|
+
|
|
926
|
+
def next_level(wt):
|
|
927
|
+
return [wt + Lambda[i] for i in self._index_set_classical
|
|
928
|
+
if (wt + Lambda[i]).level() <= k]
|
|
929
|
+
R = RecursivelyEnumeratedSet([self._P.zero()], next_level)
|
|
930
|
+
candidates = [x + (k - x.level())*Lambda[0] for x in list(R)]
|
|
931
|
+
ret = []
|
|
932
|
+
delta = self._Q.null_root()
|
|
933
|
+
for x in candidates:
|
|
934
|
+
if self._from_weight_helper(self._Lam-x, check=True):
|
|
935
|
+
t = 0
|
|
936
|
+
while self.m(self.from_weight(x - t*delta)) == 0:
|
|
937
|
+
t += 1
|
|
938
|
+
ret.append(x - t*delta)
|
|
939
|
+
return tuple(ret)
|
|
940
|
+
|
|
941
|
+
def string(self, max_weight, depth=12):
|
|
942
|
+
r"""
|
|
943
|
+
Return the list of multiplicities `m(\Lambda - k \delta)` in
|
|
944
|
+
``self``, where `\Lambda` is ``max_weight`` and `k` runs from `0`
|
|
945
|
+
to ``depth``.
|
|
946
|
+
|
|
947
|
+
INPUT:
|
|
948
|
+
|
|
949
|
+
- ``max_weight`` -- a dominant maximal weight
|
|
950
|
+
- ``depth`` -- (default: 12) the maximum value of `k`
|
|
951
|
+
|
|
952
|
+
EXAMPLES::
|
|
953
|
+
|
|
954
|
+
sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
955
|
+
sage: V = IntegrableRepresentation(2*Lambda[0])
|
|
956
|
+
sage: V.string(2*Lambda[0])
|
|
957
|
+
[1, 2, 8, 20, 52, 116, 256, 522, 1045, 1996, 3736, 6780]
|
|
958
|
+
sage: V.string(Lambda[1] + Lambda[2])
|
|
959
|
+
[0, 1, 4, 12, 32, 77, 172, 365, 740, 1445, 2736, 5041]
|
|
960
|
+
"""
|
|
961
|
+
ret = []
|
|
962
|
+
delta = self._Q.null_root()
|
|
963
|
+
cur_weight = max_weight
|
|
964
|
+
for k in range(depth):
|
|
965
|
+
ret.append(self.m( self.from_weight(cur_weight) ))
|
|
966
|
+
cur_weight -= delta
|
|
967
|
+
return ret
|
|
968
|
+
|
|
969
|
+
def strings(self, depth=12):
|
|
970
|
+
"""
|
|
971
|
+
Return the set of dominant maximal weights of ``self``, together
|
|
972
|
+
with the string coefficients for each.
|
|
973
|
+
|
|
974
|
+
OPTIONAL:
|
|
975
|
+
|
|
976
|
+
- ``depth`` -- (default: 12) a parameter indicating how far
|
|
977
|
+
to push computations
|
|
978
|
+
|
|
979
|
+
EXAMPLES::
|
|
980
|
+
|
|
981
|
+
sage: Lambda = RootSystem(['A',1,1]).weight_lattice(extended=true).fundamental_weights()
|
|
982
|
+
sage: V = IntegrableRepresentation(2*Lambda[0])
|
|
983
|
+
sage: S = V.strings(depth=25)
|
|
984
|
+
sage: for k in S:
|
|
985
|
+
....: print("{}: {}".format(k, ' '.join(str(x) for x in S[k])))
|
|
986
|
+
2*Lambda[0]: 1 1 3 5 10 16 28 43 70 105 161 236 350 501 722 1016 1431 1981 2741 3740 5096 6868 9233 12306 16357
|
|
987
|
+
2*Lambda[1] - delta: 1 2 4 7 13 21 35 55 86 130 196 287 420 602 858 1206 1687 2331 3206 4368 5922 7967 10670 14193 18803
|
|
988
|
+
"""
|
|
989
|
+
return {max_weight: self.string(max_weight, depth)
|
|
990
|
+
for max_weight in self.dominant_maximal_weights()}
|
|
991
|
+
|
|
992
|
+
def print_strings(self, depth=12):
|
|
993
|
+
"""
|
|
994
|
+
Print the strings of ``self``.
|
|
995
|
+
|
|
996
|
+
.. SEEALSO::
|
|
997
|
+
|
|
998
|
+
:meth:`strings`
|
|
999
|
+
|
|
1000
|
+
EXAMPLES::
|
|
1001
|
+
|
|
1002
|
+
sage: Lambda = RootSystem(['A',1,1]).weight_lattice(extended=true).fundamental_weights()
|
|
1003
|
+
sage: V = IntegrableRepresentation(2*Lambda[0])
|
|
1004
|
+
sage: V.print_strings(depth=25)
|
|
1005
|
+
2*Lambda[0]: 1 1 3 5 10 16 28 43 70 105 161 236 350 501 722 1016 1431 1981 2741 3740 5096 6868 9233 12306 16357
|
|
1006
|
+
2*Lambda[1] - delta: 1 2 4 7 13 21 35 55 86 130 196 287 420 602 858 1206 1687 2331 3206 4368 5922 7967 10670 14193 18803
|
|
1007
|
+
"""
|
|
1008
|
+
S = self.strings(depth=depth)
|
|
1009
|
+
for mw in self.dominant_maximal_weights():
|
|
1010
|
+
print("{}: {}".format(mw, ' '.join(str(x) for x in S[mw])) )
|
|
1011
|
+
|
|
1012
|
+
def modular_characteristic(self, mu=None):
|
|
1013
|
+
r"""
|
|
1014
|
+
Return the modular characteristic of ``self``.
|
|
1015
|
+
|
|
1016
|
+
The modular characteristic is a rational number introduced
|
|
1017
|
+
by Kac and Peterson [KacPeterson]_, required to interpret the
|
|
1018
|
+
string functions as Fourier coefficients of modular forms. See
|
|
1019
|
+
[Ka1990]_ Section 12.7. Let `k` be the level, and let `h^\vee`
|
|
1020
|
+
be the dual Coxeter number. Then
|
|
1021
|
+
|
|
1022
|
+
.. MATH::
|
|
1023
|
+
|
|
1024
|
+
m_\Lambda = \frac{|\Lambda+\rho|^2}{2(k+h^\vee)}
|
|
1025
|
+
- \frac{|\rho|^2}{2h^\vee}
|
|
1026
|
+
|
|
1027
|
+
If `\mu` is a weight, then
|
|
1028
|
+
|
|
1029
|
+
.. MATH::
|
|
1030
|
+
|
|
1031
|
+
m_{\Lambda,\mu} = m_\Lambda - \frac{|\mu|^2}{2k}.
|
|
1032
|
+
|
|
1033
|
+
OPTIONAL:
|
|
1034
|
+
|
|
1035
|
+
- ``mu`` -- a weight, or alternatively,
|
|
1036
|
+
- ``n`` -- tuple representing a weight `\mu`
|
|
1037
|
+
|
|
1038
|
+
If no optional parameter is specified, this returns `m_\Lambda`.
|
|
1039
|
+
If ``mu`` is specified, it returns `m_{\Lambda,\mu}`. You may
|
|
1040
|
+
use the tuple ``n`` to specify `\mu`. If you do this, `\mu` is
|
|
1041
|
+
`\Lambda - \sum_i n_i \alpha_i`.
|
|
1042
|
+
|
|
1043
|
+
EXAMPLES::
|
|
1044
|
+
|
|
1045
|
+
sage: Lambda = RootSystem(['A',1,1]).weight_lattice(extended=true).fundamental_weights()
|
|
1046
|
+
sage: V = IntegrableRepresentation(3*Lambda[0]+2*Lambda[1])
|
|
1047
|
+
sage: [V.modular_characteristic(x) for x in V.dominant_maximal_weights()]
|
|
1048
|
+
[11/56, -1/280, 111/280]
|
|
1049
|
+
"""
|
|
1050
|
+
if isinstance(mu, tuple):
|
|
1051
|
+
n = mu
|
|
1052
|
+
else:
|
|
1053
|
+
n = self.from_weight(mu)
|
|
1054
|
+
k = self.level()
|
|
1055
|
+
hd = self.dual_coxeter_number()
|
|
1056
|
+
rho = self._P.rho()
|
|
1057
|
+
m_Lambda = self._inner_pp(self._Lam_rho, self._Lam_rho) / (2*(k+hd)) \
|
|
1058
|
+
- self._inner_pp(rho, rho) / (2*hd)
|
|
1059
|
+
if n is None:
|
|
1060
|
+
return m_Lambda
|
|
1061
|
+
mu = self.to_weight(n)
|
|
1062
|
+
return m_Lambda - self._inner_pp(mu,mu) / (2*k)
|
|
1063
|
+
|
|
1064
|
+
def branch(self, i=None, weyl_character_ring=None, sequence=None, depth=5):
|
|
1065
|
+
r"""
|
|
1066
|
+
Return the branching rule on ``self``.
|
|
1067
|
+
|
|
1068
|
+
Removing any node from the extended Dynkin diagram of the affine
|
|
1069
|
+
Lie algebra results in the Dynkin diagram of a classical Lie
|
|
1070
|
+
algebra, which is therefore a Lie subalgebra. For example
|
|
1071
|
+
removing the `0` node from the Dynkin diagram of type ``[X, r, 1]``
|
|
1072
|
+
produces the classical Dynkin diagram of ``[X, r]``.
|
|
1073
|
+
|
|
1074
|
+
Thus for each `i` in the index set, we may restrict ``self`` to
|
|
1075
|
+
the corresponding classical subalgebra. Of course ``self`` is
|
|
1076
|
+
an infinite dimensional representation, but each weight `\mu`
|
|
1077
|
+
is assigned a grading by the number of times the simple root
|
|
1078
|
+
`\alpha_i` appears in `\Lambda-\mu`. Thus the branched
|
|
1079
|
+
representation is graded and we get sequence of finite-dimensional
|
|
1080
|
+
representations which this method is able to compute.
|
|
1081
|
+
|
|
1082
|
+
OPTIONAL:
|
|
1083
|
+
|
|
1084
|
+
- ``i`` -- (default: 0) an element of the index set
|
|
1085
|
+
- ``weyl_character_ring`` -- a WeylCharacterRing
|
|
1086
|
+
- ``sequence`` -- dictionary
|
|
1087
|
+
- ``depth`` -- (default: 5) an upper bound for `k` determining
|
|
1088
|
+
how many terms to give
|
|
1089
|
+
|
|
1090
|
+
In the default case where `i = 0`, you do not need to specify
|
|
1091
|
+
anything else, though you may want to increase the depth if
|
|
1092
|
+
you need more terms.
|
|
1093
|
+
|
|
1094
|
+
EXAMPLES::
|
|
1095
|
+
|
|
1096
|
+
sage: Lambda = RootSystem(['A',2,1]).weight_lattice(extended=true).fundamental_weights()
|
|
1097
|
+
sage: V = IntegrableRepresentation(2*Lambda[0])
|
|
1098
|
+
sage: b = V.branch(); b # needs sage.libs.gap
|
|
1099
|
+
[A2(0,0),
|
|
1100
|
+
A2(1,1),
|
|
1101
|
+
A2(0,0) + 2*A2(1,1) + A2(2,2),
|
|
1102
|
+
2*A2(0,0) + 2*A2(0,3) + 4*A2(1,1) + 2*A2(3,0) + 2*A2(2,2),
|
|
1103
|
+
4*A2(0,0) + 3*A2(0,3) + 10*A2(1,1) + 3*A2(3,0) + A2(1,4) + 6*A2(2,2) + A2(4,1),
|
|
1104
|
+
6*A2(0,0) + 9*A2(0,3) + 20*A2(1,1) + 9*A2(3,0) + 3*A2(1,4) + 12*A2(2,2) + 3*A2(4,1) + A2(3,3)]
|
|
1105
|
+
|
|
1106
|
+
If the parameter ``weyl_character_ring`` is omitted, the ring may be recovered
|
|
1107
|
+
as the parent of one of the branched coefficients::
|
|
1108
|
+
|
|
1109
|
+
sage: A2 = b[0].parent(); A2 # needs sage.libs.gap
|
|
1110
|
+
The Weyl Character Ring of Type A2 with Integer Ring coefficients
|
|
1111
|
+
|
|
1112
|
+
If `i` is not zero then you should specify the :class:`WeylCharacterRing` that you
|
|
1113
|
+
are branching to. This is determined by the Dynkin diagram::
|
|
1114
|
+
|
|
1115
|
+
sage: Lambda = RootSystem(['B',3,1]).weight_lattice(extended=true).fundamental_weights()
|
|
1116
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
1117
|
+
sage: V.cartan_type().dynkin_diagram()
|
|
1118
|
+
O 0
|
|
1119
|
+
|
|
|
1120
|
+
|
|
|
1121
|
+
O---O=>=O
|
|
1122
|
+
1 2 3
|
|
1123
|
+
B3~
|
|
1124
|
+
|
|
1125
|
+
In this example, we observe that removing the `i=2` node from the
|
|
1126
|
+
Dynkin diagram produces a reducible diagram of type ``A1xA1xA1``.
|
|
1127
|
+
Thus we have a branching to
|
|
1128
|
+
`\mathfrak{sl}(2) \times \mathfrak{sl}(2) \times \mathfrak{sl}(2)`::
|
|
1129
|
+
|
|
1130
|
+
sage: A1xA1xA1 = WeylCharacterRing("A1xA1xA1",style='coroots') # needs sage.libs.gap
|
|
1131
|
+
sage: V.branch(i=2,weyl_character_ring=A1xA1xA1) # needs sage.libs.gap
|
|
1132
|
+
[A1xA1xA1(1,0,0),
|
|
1133
|
+
A1xA1xA1(0,1,2),
|
|
1134
|
+
A1xA1xA1(1,0,0) + A1xA1xA1(1,2,0) + A1xA1xA1(1,0,2),
|
|
1135
|
+
A1xA1xA1(2,1,2) + A1xA1xA1(0,1,0) + 2*A1xA1xA1(0,1,2),
|
|
1136
|
+
3*A1xA1xA1(1,0,0) + 2*A1xA1xA1(1,2,0) + A1xA1xA1(1,2,2) + 2*A1xA1xA1(1,0,2) + A1xA1xA1(1,0,4) + A1xA1xA1(3,0,0),
|
|
1137
|
+
A1xA1xA1(2,1,0) + 3*A1xA1xA1(2,1,2) + 2*A1xA1xA1(0,1,0) + 5*A1xA1xA1(0,1,2) + A1xA1xA1(0,1,4) + A1xA1xA1(0,3,2)]
|
|
1138
|
+
|
|
1139
|
+
If the nodes of the two Dynkin diagrams are not in the same order, you
|
|
1140
|
+
must specify an additional parameter, ``sequence`` which gives a dictionary
|
|
1141
|
+
to the affine Dynkin diagram to the classical one.
|
|
1142
|
+
|
|
1143
|
+
EXAMPLES::
|
|
1144
|
+
|
|
1145
|
+
sage: Lambda = RootSystem(['F',4,1]).weight_lattice(extended=true).fundamental_weights()
|
|
1146
|
+
sage: V = IntegrableRepresentation(Lambda[0])
|
|
1147
|
+
sage: V.cartan_type().dynkin_diagram()
|
|
1148
|
+
O---O---O=>=O---O
|
|
1149
|
+
0 1 2 3 4
|
|
1150
|
+
F4~
|
|
1151
|
+
sage: A1xC3 = WeylCharacterRing("A1xC3", style='coroots') # needs sage.groups
|
|
1152
|
+
sage: A1xC3.dynkin_diagram() # needs sage.groups
|
|
1153
|
+
O
|
|
1154
|
+
1
|
|
1155
|
+
O---O=<=O
|
|
1156
|
+
2 3 4
|
|
1157
|
+
A1xC3
|
|
1158
|
+
|
|
1159
|
+
Observe that removing the `i=1` node from the ``F4~`` Dynkin diagram
|
|
1160
|
+
gives the ``A1xC3`` diagram, but the roots are in a different order.
|
|
1161
|
+
The nodes `0, 2, 3, 4` of ``F4~`` correspond to ``1, 4, 3, 2``
|
|
1162
|
+
of ``A1xC3`` and so we encode this in a dictionary::
|
|
1163
|
+
|
|
1164
|
+
sage: # needs sage.groups
|
|
1165
|
+
sage: V.branch(i=1, weyl_character_ring=A1xC3, sequence={0:1,2:4,3:3,4:2}) # long time
|
|
1166
|
+
[A1xC3(1,0,0,0),
|
|
1167
|
+
A1xC3(0,0,0,1),
|
|
1168
|
+
A1xC3(1,0,0,0) + A1xC3(1,2,0,0),
|
|
1169
|
+
A1xC3(2,0,0,1) + A1xC3(0,0,0,1) + A1xC3(0,1,1,0),
|
|
1170
|
+
2*A1xC3(1,0,0,0) + A1xC3(1,0,1,0) + 2*A1xC3(1,2,0,0) + A1xC3(1,0,2,0) + A1xC3(3,0,0,0),
|
|
1171
|
+
2*A1xC3(2,0,0,1) + A1xC3(2,1,1,0) + A1xC3(0,1,0,0) + 3*A1xC3(0,0,0,1) + 2*A1xC3(0,1,1,0) + A1xC3(0,2,0,1)]
|
|
1172
|
+
|
|
1173
|
+
The branch method gives a way of computing the graded dimension of the integrable representation::
|
|
1174
|
+
|
|
1175
|
+
sage: # needs sage.groups
|
|
1176
|
+
sage: Lambda = RootSystem("A1~").weight_lattice(extended=true).fundamental_weights()
|
|
1177
|
+
sage: V=IntegrableRepresentation(Lambda[0])
|
|
1178
|
+
sage: r = [x.degree() for x in V.branch(depth=15)]; r
|
|
1179
|
+
[1, 3, 4, 7, 13, 19, 29, 43, 62, 90, 126, 174, 239, 325, 435, 580]
|
|
1180
|
+
sage: oeis(r) # optional -- internet
|
|
1181
|
+
0: A029552: Expansion of phi(x) / f(-x) in powers of x where phi(), f() are Ramanujan theta functions.
|
|
1182
|
+
"""
|
|
1183
|
+
if i is None:
|
|
1184
|
+
i = self._cartan_type.special_node()
|
|
1185
|
+
if i == self._cartan_type.special_node() or self._cartan_type.type() == 'A':
|
|
1186
|
+
if weyl_character_ring is None:
|
|
1187
|
+
weyl_character_ring = WeylCharacterRing(self._cartan_type.classical(), style='coroots')
|
|
1188
|
+
if weyl_character_ring.cartan_type() != self._cartan_type.classical():
|
|
1189
|
+
raise ValueError("Cartan type of WeylCharacterRing must be %s" % self.cartan_type().classical())
|
|
1190
|
+
elif weyl_character_ring is None:
|
|
1191
|
+
raise ValueError("the argument weyl_character_ring cannot be omitted if i != 0")
|
|
1192
|
+
if sequence is None:
|
|
1193
|
+
sequence = {}
|
|
1194
|
+
for j in self._index_set:
|
|
1195
|
+
if j < i:
|
|
1196
|
+
sequence[j] = j+1
|
|
1197
|
+
elif j > i:
|
|
1198
|
+
sequence[j] = j
|
|
1199
|
+
|
|
1200
|
+
def next_level(x):
|
|
1201
|
+
ret = []
|
|
1202
|
+
for j in self._index_set:
|
|
1203
|
+
t = list(x[0])
|
|
1204
|
+
t[j] += 1
|
|
1205
|
+
t = tuple(t)
|
|
1206
|
+
m = self.m(t)
|
|
1207
|
+
if m > 0 and t[i] <= depth:
|
|
1208
|
+
ret.append((t,m))
|
|
1209
|
+
return ret
|
|
1210
|
+
hwv = (tuple([0 for j in self._index_set]), 1)
|
|
1211
|
+
terms = RecursivelyEnumeratedSet([hwv], next_level)
|
|
1212
|
+
fw = weyl_character_ring.fundamental_weights()
|
|
1213
|
+
P = self.weight_lattice()
|
|
1214
|
+
ret = []
|
|
1215
|
+
for l in range(depth+1):
|
|
1216
|
+
lterms = [x for x in terms if x[0][i] == l]
|
|
1217
|
+
ldict = {}
|
|
1218
|
+
for x in lterms:
|
|
1219
|
+
mc = P(self.to_weight(x[0])).monomial_coefficients()
|
|
1220
|
+
contr = sum(fw[sequence[j]]*mc.get(j,0)
|
|
1221
|
+
for j in self._index_set if j != i).coerce_to_sl()
|
|
1222
|
+
if contr in ldict:
|
|
1223
|
+
ldict[contr] += x[1]
|
|
1224
|
+
else:
|
|
1225
|
+
ldict[contr] = x[1]
|
|
1226
|
+
ret.append(weyl_character_ring.char_from_weights(ldict))
|
|
1227
|
+
return ret
|