passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,1147 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.graphs sage.libs.gap
|
|
3
|
+
r"""
|
|
4
|
+
Pieri factors
|
|
5
|
+
"""
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2009-2010 Steven Pon <spon at math.ucdavis.edu>
|
|
8
|
+
# Anne Schilling < anne at math.ucdavis.edu>
|
|
9
|
+
# Nicolas M. Thiery <nthiery at users.sf.net>
|
|
10
|
+
#
|
|
11
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
12
|
+
# https://www.gnu.org/licenses/
|
|
13
|
+
# *****************************************************************************
|
|
14
|
+
|
|
15
|
+
from sage.categories.finite_enumerated_sets import FiniteEnumeratedSets
|
|
16
|
+
import sage.combinat.ranker
|
|
17
|
+
from sage.combinat.root_system.root_system import RootSystem
|
|
18
|
+
from sage.combinat.root_system.weyl_group import WeylGroup
|
|
19
|
+
from sage.misc.cachefunc import cached_method
|
|
20
|
+
from sage.misc.call import attrcall
|
|
21
|
+
from sage.misc.constant_function import ConstantFunction
|
|
22
|
+
from sage.misc.lazy_import import lazy_import
|
|
23
|
+
from sage.misc.misc_c import prod
|
|
24
|
+
from sage.rings.infinity import infinity
|
|
25
|
+
from sage.rings.integer import Integer
|
|
26
|
+
from sage.rings.rational_field import QQ
|
|
27
|
+
from sage.sets.recursively_enumerated_set import RecursivelyEnumeratedSet
|
|
28
|
+
from sage.structure.parent import Parent
|
|
29
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
30
|
+
|
|
31
|
+
lazy_import('sage.graphs.digraph', 'DiGraph')
|
|
32
|
+
lazy_import('sage.combinat.root_system.dynkin_diagram', 'DynkinDiagram')
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class PieriFactors(UniqueRepresentation, Parent):
|
|
36
|
+
r"""
|
|
37
|
+
An abstract class for sets of Pieri factors, used for constructing
|
|
38
|
+
Stanley symmetric functions. The set of Pieri factors for a given
|
|
39
|
+
type can be realized as an order ideal of the Bruhat order poset
|
|
40
|
+
generated by a certain set of maximal elements.
|
|
41
|
+
|
|
42
|
+
.. SEEALSO::
|
|
43
|
+
|
|
44
|
+
- :meth:`WeylGroups.ParentMethods.pieri_factors`
|
|
45
|
+
- :meth:`WeylGroups.ElementMethods.stanley_symmetric_function`
|
|
46
|
+
|
|
47
|
+
EXAMPLES::
|
|
48
|
+
|
|
49
|
+
sage: W = WeylGroup(['A',4])
|
|
50
|
+
sage: PF = W.pieri_factors()
|
|
51
|
+
sage: PF.an_element().reduced_word()
|
|
52
|
+
[4, 3, 2, 1]
|
|
53
|
+
sage: Waff = WeylGroup(['A',4,1])
|
|
54
|
+
sage: PFaff = Waff.pieri_factors()
|
|
55
|
+
sage: Waff.from_reduced_word(PF.an_element().reduced_word()) in PFaff
|
|
56
|
+
True
|
|
57
|
+
|
|
58
|
+
sage: W = WeylGroup(['B',3,1])
|
|
59
|
+
sage: PF = W.pieri_factors()
|
|
60
|
+
sage: W.from_reduced_word([2,3,2]) in PF.elements()
|
|
61
|
+
True
|
|
62
|
+
sage: PF.cardinality()
|
|
63
|
+
47
|
|
64
|
+
|
|
65
|
+
sage: W = WeylGroup(['C',3,1])
|
|
66
|
+
sage: PF = W.pieri_factors()
|
|
67
|
+
sage: PF.generating_series()
|
|
68
|
+
6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
|
|
69
|
+
sage: sorted(w.reduced_word() for w in PF if w.length() == 2)
|
|
70
|
+
[[0, 1], [1, 0], [1, 2], [2, 0], [2, 1],
|
|
71
|
+
[2, 3], [3, 0], [3, 1], [3, 2]]
|
|
72
|
+
|
|
73
|
+
REFERENCES:
|
|
74
|
+
|
|
75
|
+
- [FoSta1994]_
|
|
76
|
+
- [BH1994]_
|
|
77
|
+
- [Lam1996]_
|
|
78
|
+
- [Lam2008]_
|
|
79
|
+
- [LSS2009]_
|
|
80
|
+
- [Pon2010]_
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
def _repr_(self):
|
|
84
|
+
r"""
|
|
85
|
+
String representation.
|
|
86
|
+
|
|
87
|
+
EXAMPLES::
|
|
88
|
+
|
|
89
|
+
sage: WeylGroup(["A", 2, 1]).pieri_factors() # indirect doctest
|
|
90
|
+
Pieri factors for Weyl Group of type ['A', 2, 1] (as a matrix group acting on the root space)
|
|
91
|
+
"""
|
|
92
|
+
return "Pieri factors for %s" % self.W
|
|
93
|
+
|
|
94
|
+
def __contains__(self, w):
|
|
95
|
+
r"""
|
|
96
|
+
Test for containment.
|
|
97
|
+
|
|
98
|
+
EXAMPLES::
|
|
99
|
+
|
|
100
|
+
sage: W = WeylGroup(['C',3,1])
|
|
101
|
+
sage: w = W.from_reduced_word([3,2,1,0])
|
|
102
|
+
sage: PF = W.pieri_factors()
|
|
103
|
+
sage: w in PF
|
|
104
|
+
True
|
|
105
|
+
sage: w = W.from_reduced_word([1,0,1])
|
|
106
|
+
sage: w in PF
|
|
107
|
+
True
|
|
108
|
+
sage: w = W.from_reduced_word([1,0,1,0])
|
|
109
|
+
sage: w in PF
|
|
110
|
+
False
|
|
111
|
+
sage: w = W.from_reduced_word([0,1,2,3,2,1,0])
|
|
112
|
+
sage: w in PF
|
|
113
|
+
False
|
|
114
|
+
sage: w = W.from_reduced_word([2,0,3,2,1])
|
|
115
|
+
sage: w in PF
|
|
116
|
+
True
|
|
117
|
+
|
|
118
|
+
sage: W = WeylGroup(['B',4,1])
|
|
119
|
+
sage: PF = W.pieri_factors()
|
|
120
|
+
sage: w = W.from_reduced_word([1,2,4,3,1])
|
|
121
|
+
sage: w in PF
|
|
122
|
+
True
|
|
123
|
+
sage: w = W.from_reduced_word([1,2,4,3,1,0])
|
|
124
|
+
sage: w in PF
|
|
125
|
+
False
|
|
126
|
+
sage: w = W.from_reduced_word([2,3,4,3,2,1,0])
|
|
127
|
+
sage: w in PF
|
|
128
|
+
True
|
|
129
|
+
|
|
130
|
+
sage: W = WeylGroup(['A',4])
|
|
131
|
+
sage: PF = W.pieri_factors()
|
|
132
|
+
sage: W.from_reduced_word([4,3,1]) in PF
|
|
133
|
+
True
|
|
134
|
+
sage: W.from_reduced_word([1,2]) in PF
|
|
135
|
+
False
|
|
136
|
+
"""
|
|
137
|
+
if w not in self.W:
|
|
138
|
+
return False
|
|
139
|
+
return any(w.bruhat_le(m) for m in self.maximal_elements())
|
|
140
|
+
|
|
141
|
+
@cached_method
|
|
142
|
+
def elements(self):
|
|
143
|
+
r"""
|
|
144
|
+
Return the elements of ``self``.
|
|
145
|
+
|
|
146
|
+
Those are constructed as the elements below the maximal
|
|
147
|
+
elements of ``self`` in Bruhat order.
|
|
148
|
+
|
|
149
|
+
OUTPUT: a :class:`RecursivelyEnumeratedSet_generic` object
|
|
150
|
+
|
|
151
|
+
EXAMPLES::
|
|
152
|
+
|
|
153
|
+
sage: PF = WeylGroup(['A',3]).pieri_factors()
|
|
154
|
+
sage: sorted(w.reduced_word() for w in PF.elements())
|
|
155
|
+
[[], [1], [2], [2, 1], [3], [3, 1], [3, 2], [3, 2, 1]]
|
|
156
|
+
|
|
157
|
+
.. SEEALSO:: :meth:`maximal_elements`
|
|
158
|
+
|
|
159
|
+
.. TODO::
|
|
160
|
+
|
|
161
|
+
Possibly remove this method and instead have this class
|
|
162
|
+
inherit from :class:`RecursivelyEnumeratedSet_generic`.
|
|
163
|
+
"""
|
|
164
|
+
return RecursivelyEnumeratedSet(self.maximal_elements(),
|
|
165
|
+
attrcall('bruhat_lower_covers'), structure=None,
|
|
166
|
+
enumeration='naive')
|
|
167
|
+
|
|
168
|
+
def __iter__(self):
|
|
169
|
+
r"""
|
|
170
|
+
Return an iterator over the elements of ``self``.
|
|
171
|
+
|
|
172
|
+
EXAMPLES::
|
|
173
|
+
|
|
174
|
+
sage: PF = WeylGroup(['A',3,1]).pieri_factors()
|
|
175
|
+
sage: f = PF.__iter__()
|
|
176
|
+
sage: [next(f).reduced_word() for i in range(5)]
|
|
177
|
+
[[], [0], [1], [2], [3]]
|
|
178
|
+
"""
|
|
179
|
+
return iter(self.elements())
|
|
180
|
+
|
|
181
|
+
def generating_series(self, weight=None):
|
|
182
|
+
r"""
|
|
183
|
+
Return a length generating series for the elements of ``self``.
|
|
184
|
+
|
|
185
|
+
EXAMPLES::
|
|
186
|
+
|
|
187
|
+
sage: PF = WeylGroup(['C',3,1]).pieri_factors()
|
|
188
|
+
sage: PF.generating_series()
|
|
189
|
+
6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
|
|
190
|
+
|
|
191
|
+
sage: PF = WeylGroup(['B',4]).pieri_factors()
|
|
192
|
+
sage: PF.generating_series()
|
|
193
|
+
z^7 + 6*z^6 + 14*z^5 + 18*z^4 + 15*z^3 + 9*z^2 + 4*z + 1
|
|
194
|
+
"""
|
|
195
|
+
if weight is None:
|
|
196
|
+
weight = self.default_weight()
|
|
197
|
+
|
|
198
|
+
return sum(weight(w.length()) for w in self)
|
|
199
|
+
|
|
200
|
+
@cached_method
|
|
201
|
+
def default_weight(self):
|
|
202
|
+
r"""
|
|
203
|
+
Return the function `i\mapsto z^i`, where `z` is the
|
|
204
|
+
generator of ``QQ['z']``.
|
|
205
|
+
|
|
206
|
+
EXAMPLES::
|
|
207
|
+
|
|
208
|
+
sage: W = WeylGroup(["A", 3, 1])
|
|
209
|
+
sage: weight = W.pieri_factors().default_weight()
|
|
210
|
+
sage: weight(1)
|
|
211
|
+
z
|
|
212
|
+
sage: weight(5)
|
|
213
|
+
z^5
|
|
214
|
+
|
|
215
|
+
TESTS::
|
|
216
|
+
|
|
217
|
+
sage: weight(4) in QQ['z']
|
|
218
|
+
True
|
|
219
|
+
sage: weight(0) in QQ['z']
|
|
220
|
+
True
|
|
221
|
+
sage: weight(0).parent() == QQ['z'] # todo: not implemented
|
|
222
|
+
True
|
|
223
|
+
"""
|
|
224
|
+
R = QQ['z']
|
|
225
|
+
z = R.gen()
|
|
226
|
+
return lambda i: z**i
|
|
227
|
+
|
|
228
|
+
def _test_maximal_elements(self, **options):
|
|
229
|
+
r"""
|
|
230
|
+
Check that the conjectural type-free definition of Pieri
|
|
231
|
+
factors matches with the proven type-specific definition.
|
|
232
|
+
|
|
233
|
+
.. SEEALSO:: :class:`TestSuite`.
|
|
234
|
+
|
|
235
|
+
EXAMPLES::
|
|
236
|
+
|
|
237
|
+
sage: W = WeylGroup(['A',4,1])
|
|
238
|
+
sage: PF = W.pieri_factors()
|
|
239
|
+
sage: PF._test_maximal_elements()
|
|
240
|
+
sage: WeylGroup(['B',5]).pieri_factors()._test_maximal_elements()
|
|
241
|
+
|
|
242
|
+
TESTS::
|
|
243
|
+
|
|
244
|
+
sage: W = WeylGroup(['C',4,1])
|
|
245
|
+
sage: PF = W.pieri_factors()
|
|
246
|
+
sage: PF._test_maximal_elements()
|
|
247
|
+
sage: WeylGroup(['D',5,1]).pieri_factors()._test_maximal_elements()
|
|
248
|
+
sage: WeylGroup(['A',5,1]).pieri_factors()._test_maximal_elements()
|
|
249
|
+
sage: WeylGroup(['B',5,1]).pieri_factors()._test_maximal_elements()
|
|
250
|
+
"""
|
|
251
|
+
tester = self._tester(**options)
|
|
252
|
+
tester.assertEqual(set(self.maximal_elements()),
|
|
253
|
+
set(self.maximal_elements_combinatorial()))
|
|
254
|
+
|
|
255
|
+
@cached_method
|
|
256
|
+
def max_length(self):
|
|
257
|
+
r"""
|
|
258
|
+
Return the maximal length of a Pieri factor.
|
|
259
|
+
|
|
260
|
+
EXAMPLES:
|
|
261
|
+
|
|
262
|
+
In type A and A affine, this is `n`::
|
|
263
|
+
|
|
264
|
+
sage: WeylGroup(['A',5]).pieri_factors().max_length()
|
|
265
|
+
5
|
|
266
|
+
sage: WeylGroup(['A',5,1]).pieri_factors().max_length()
|
|
267
|
+
5
|
|
268
|
+
|
|
269
|
+
In type B and B affine, this is `2n-1`::
|
|
270
|
+
|
|
271
|
+
sage: WeylGroup(['B',5,1]).pieri_factors().max_length()
|
|
272
|
+
9
|
|
273
|
+
sage: WeylGroup(['B',5]).pieri_factors().max_length()
|
|
274
|
+
9
|
|
275
|
+
|
|
276
|
+
In type C affine this is `2n`::
|
|
277
|
+
|
|
278
|
+
sage: WeylGroup(['C',5,1]).pieri_factors().max_length()
|
|
279
|
+
10
|
|
280
|
+
|
|
281
|
+
In type D affine this is `2n-2`::
|
|
282
|
+
|
|
283
|
+
sage: WeylGroup(['D',5,1]).pieri_factors().max_length()
|
|
284
|
+
8
|
|
285
|
+
"""
|
|
286
|
+
return self.maximal_elements()[0].length()
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
class PieriFactors_finite_type(PieriFactors):
|
|
290
|
+
r"""
|
|
291
|
+
The Pieri factors of finite type A are the restriction of the
|
|
292
|
+
Pieri factors of affine type A to finite permutations (under the
|
|
293
|
+
canonical embedding of finite type A into the affine Weyl group),
|
|
294
|
+
and the Pieri factors of finite type B are the restriction of the
|
|
295
|
+
Pieri factors of affine type C. The finite type D Pieri factors
|
|
296
|
+
are (weakly) conjectured to be the restriction of the Pieri
|
|
297
|
+
factors of affine type D.
|
|
298
|
+
"""
|
|
299
|
+
|
|
300
|
+
def maximal_elements(self):
|
|
301
|
+
r"""
|
|
302
|
+
The current algorithm uses the fact that the maximal Pieri factors
|
|
303
|
+
of affine type A,B,C, or D either contain a finite Weyl group
|
|
304
|
+
element, or contain an affine Weyl group element whose reflection
|
|
305
|
+
by `s_0` gets a finite Weyl group element, and that either of
|
|
306
|
+
these finite group elements will serve as a maximal element for
|
|
307
|
+
finite Pieri factors. A better algorithm is desirable.
|
|
308
|
+
|
|
309
|
+
EXAMPLES::
|
|
310
|
+
|
|
311
|
+
sage: PF = WeylGroup(['A',5]).pieri_factors()
|
|
312
|
+
sage: [v.reduced_word() for v in PF.maximal_elements()]
|
|
313
|
+
[[5, 4, 3, 2, 1]]
|
|
314
|
+
|
|
315
|
+
sage: WeylGroup(['B',4]).pieri_factors().maximal_elements()
|
|
316
|
+
[
|
|
317
|
+
[-1 0 0 0]
|
|
318
|
+
[ 0 1 0 0]
|
|
319
|
+
[ 0 0 1 0]
|
|
320
|
+
[ 0 0 0 1]
|
|
321
|
+
]
|
|
322
|
+
"""
|
|
323
|
+
ct = self.W.cartan_type()
|
|
324
|
+
|
|
325
|
+
# The following line may need to be changed when generalizing to more than types A and B.
|
|
326
|
+
if ct.type() != 'A' and ct.type() != 'B':
|
|
327
|
+
raise NotImplementedError("currently only implemented for finite types A and B")
|
|
328
|
+
|
|
329
|
+
ct_aff = ct.dual().affine()
|
|
330
|
+
|
|
331
|
+
max_elts_affine = WeylGroup(ct_aff).pieri_factors().maximal_elements()
|
|
332
|
+
|
|
333
|
+
for w in max_elts_affine:
|
|
334
|
+
if 0 not in w.reduced_word():
|
|
335
|
+
return [self.W.from_reduced_word(w.reduced_word())]
|
|
336
|
+
for w in max_elts_affine:
|
|
337
|
+
if 0 not in w.apply_simple_reflection(0).reduced_word():
|
|
338
|
+
return [self.W.from_reduced_word(w.apply_simple_reflection(0).reduced_word())]
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
class PieriFactors_affine_type(PieriFactors):
|
|
342
|
+
|
|
343
|
+
def maximal_elements(self):
|
|
344
|
+
r"""
|
|
345
|
+
Return the maximal elements of ``self`` with respect to Bruhat order.
|
|
346
|
+
|
|
347
|
+
The current implementation is via a conjectural type-free
|
|
348
|
+
formula. Use :meth:`maximal_elements_combinatorial` for proven
|
|
349
|
+
type-specific implementations. To compare type-free and
|
|
350
|
+
type-specific (combinatorial) implementations, use method
|
|
351
|
+
:meth:`_test_maximal_elements`.
|
|
352
|
+
|
|
353
|
+
EXAMPLES::
|
|
354
|
+
|
|
355
|
+
sage: W = WeylGroup(['A',4,1])
|
|
356
|
+
sage: PF = W.pieri_factors()
|
|
357
|
+
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
|
|
358
|
+
[[0, 4, 3, 2], [1, 0, 4, 3], [2, 1, 0, 4], [3, 2, 1, 0], [4, 3, 2, 1]]
|
|
359
|
+
|
|
360
|
+
sage: W = WeylGroup(RootSystem(["C",3,1]).weight_space())
|
|
361
|
+
sage: PF = W.pieri_factors()
|
|
362
|
+
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
|
|
363
|
+
[[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
|
|
364
|
+
[2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]
|
|
365
|
+
|
|
366
|
+
sage: W = WeylGroup(RootSystem(["B",3,1]).weight_space())
|
|
367
|
+
sage: PF = W.pieri_factors()
|
|
368
|
+
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
|
|
369
|
+
[[0, 2, 3, 2, 0], [1, 0, 2, 3, 2], [1, 2, 3, 2, 1],
|
|
370
|
+
[2, 1, 0, 2, 3], [2, 3, 2, 1, 0], [3, 2, 1, 0, 2]]
|
|
371
|
+
|
|
372
|
+
sage: W = WeylGroup(['D',4,1])
|
|
373
|
+
sage: PF = W.pieri_factors()
|
|
374
|
+
sage: sorted([w.reduced_word() for w in PF.maximal_elements()], key=str)
|
|
375
|
+
[[0, 2, 4, 3, 2, 0], [1, 0, 2, 4, 3, 2], [1, 2, 4, 3, 2, 1],
|
|
376
|
+
[2, 1, 0, 2, 4, 3], [2, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3],
|
|
377
|
+
[4, 2, 1, 0, 2, 4], [4, 3, 2, 1, 0, 2]]
|
|
378
|
+
"""
|
|
379
|
+
ct = self.W.cartan_type()
|
|
380
|
+
s = ct.translation_factors()[1]
|
|
381
|
+
R = RootSystem(ct).weight_space()
|
|
382
|
+
Lambda = R.fundamental_weights()
|
|
383
|
+
orbit = [R.reduced_word_of_translation(x)
|
|
384
|
+
for x in (s*(Lambda[1]-Lambda[1].level()*Lambda[0]))._orbit_iter()]
|
|
385
|
+
return [self.W.from_reduced_word(x) for x in orbit]
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
class PieriFactors_type_A(PieriFactors_finite_type):
|
|
389
|
+
r"""
|
|
390
|
+
The set of Pieri factors for finite type A.
|
|
391
|
+
|
|
392
|
+
This is the set of elements of the Weyl group that have a reduced
|
|
393
|
+
word that is strictly decreasing. This may also be viewed as the
|
|
394
|
+
restriction of affine type A Pieri factors to finite Weyl group
|
|
395
|
+
elements.
|
|
396
|
+
"""
|
|
397
|
+
|
|
398
|
+
def __init__(self, W):
|
|
399
|
+
r"""
|
|
400
|
+
EXAMPLES::
|
|
401
|
+
|
|
402
|
+
sage: PF = WeylGroup(['A',5]).pieri_factors()
|
|
403
|
+
sage: PF
|
|
404
|
+
Pieri factors for Weyl Group of type ['A', 5] (as a matrix group acting on the ambient space)
|
|
405
|
+
|
|
406
|
+
TESTS::
|
|
407
|
+
|
|
408
|
+
sage: PF = WeylGroup(['A',3]).pieri_factors()
|
|
409
|
+
sage: PF.__class__
|
|
410
|
+
<class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_A_with_category'>
|
|
411
|
+
sage: TestSuite(PF).run()
|
|
412
|
+
"""
|
|
413
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
414
|
+
self.W = W
|
|
415
|
+
|
|
416
|
+
def maximal_elements_combinatorial(self):
|
|
417
|
+
r"""
|
|
418
|
+
Return the maximal Pieri factors, using the type A
|
|
419
|
+
combinatorial description.
|
|
420
|
+
|
|
421
|
+
EXAMPLES::
|
|
422
|
+
|
|
423
|
+
sage: W = WeylGroup(['A',4])
|
|
424
|
+
sage: PF = W.pieri_factors()
|
|
425
|
+
sage: PF.maximal_elements_combinatorial()[0].reduced_word()
|
|
426
|
+
[4, 3, 2, 1]
|
|
427
|
+
"""
|
|
428
|
+
return [self.W.from_reduced_word(range(self.W.cartan_type().n, 0, -1))]
|
|
429
|
+
|
|
430
|
+
def stanley_symm_poly_weight(self, w):
|
|
431
|
+
r"""
|
|
432
|
+
EXAMPLES::
|
|
433
|
+
|
|
434
|
+
sage: W = WeylGroup(['A',4])
|
|
435
|
+
sage: PF = W.pieri_factors()
|
|
436
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1]))
|
|
437
|
+
0
|
|
438
|
+
"""
|
|
439
|
+
return 0
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
class PieriFactors_type_B(PieriFactors_finite_type):
|
|
443
|
+
r"""
|
|
444
|
+
The type B finite Pieri factors are realized as the set of
|
|
445
|
+
elements that have a reduced word that is a subword of
|
|
446
|
+
`12...(n-1)n(n-1)...21`. They are the restriction of the type C
|
|
447
|
+
affine Pieri factors to the set of finite Weyl group elements
|
|
448
|
+
under the usual embedding.
|
|
449
|
+
"""
|
|
450
|
+
|
|
451
|
+
def __init__(self, W):
|
|
452
|
+
r"""
|
|
453
|
+
EXAMPLES::
|
|
454
|
+
|
|
455
|
+
sage: WeylGroup(['B',5]).pieri_factors()
|
|
456
|
+
Pieri factors for Weyl Group of type ['B', 5] (as a matrix group acting on the ambient space)
|
|
457
|
+
|
|
458
|
+
TESTS::
|
|
459
|
+
|
|
460
|
+
sage: PF = WeylGroup(['B',3]).pieri_factors()
|
|
461
|
+
sage: PF.__class__
|
|
462
|
+
<class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_B_with_category'>
|
|
463
|
+
sage: TestSuite(PF).run()
|
|
464
|
+
"""
|
|
465
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
466
|
+
self.W = W
|
|
467
|
+
|
|
468
|
+
def maximal_elements_combinatorial(self):
|
|
469
|
+
r"""
|
|
470
|
+
Return the maximal Pieri factors, using the type B
|
|
471
|
+
combinatorial description.
|
|
472
|
+
|
|
473
|
+
EXAMPLES::
|
|
474
|
+
|
|
475
|
+
sage: PF = WeylGroup(['B',4]).pieri_factors()
|
|
476
|
+
sage: PF.maximal_elements_combinatorial()[0].reduced_word()
|
|
477
|
+
[1, 2, 3, 4, 3, 2, 1]
|
|
478
|
+
"""
|
|
479
|
+
N = self.W.cartan_type().n
|
|
480
|
+
li = list(range(1, N)) + list(range(N, 0, -1))
|
|
481
|
+
return [self.W.from_reduced_word(li)]
|
|
482
|
+
|
|
483
|
+
def stanley_symm_poly_weight(self, w):
|
|
484
|
+
r"""
|
|
485
|
+
Weight used in computing Stanley symmetric polynomials of type `B`.
|
|
486
|
+
|
|
487
|
+
The weight for finite type B is the number of components
|
|
488
|
+
of the support of an element minus the number of occurrences
|
|
489
|
+
of `n` in a reduced word.
|
|
490
|
+
|
|
491
|
+
EXAMPLES::
|
|
492
|
+
|
|
493
|
+
sage: W = WeylGroup(['B',5])
|
|
494
|
+
sage: PF = W.pieri_factors()
|
|
495
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,1,5]))
|
|
496
|
+
2
|
|
497
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([3,4,5]))
|
|
498
|
+
0
|
|
499
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,2,3,4,5,4]))
|
|
500
|
+
0
|
|
501
|
+
"""
|
|
502
|
+
r = w.reduced_word().count(self.W.n)
|
|
503
|
+
return WeylGroup(self.W.cartan_type().dual().affine()).pieri_factors().stanley_symm_poly_weight(w) - r
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
class PieriFactors_type_A_affine(PieriFactors_affine_type):
|
|
507
|
+
r"""
|
|
508
|
+
The set of Pieri factors for type A affine, that is the set of
|
|
509
|
+
elements of the Weyl Group which are cyclically decreasing.
|
|
510
|
+
|
|
511
|
+
Those are used for constructing (affine) Stanley symmetric functions.
|
|
512
|
+
|
|
513
|
+
The Pieri factors are in bijection with the proper subsets of the
|
|
514
|
+
``index_set``. The bijection is given by the support. Namely, let `f`
|
|
515
|
+
be a Pieri factor, and `red` a reduced word for `f`. No simple
|
|
516
|
+
reflection appears twice in red, and the support `S` of `red`
|
|
517
|
+
(that is the `i` such that `s_i` appears in `red`) does not depend
|
|
518
|
+
on the reduced word).
|
|
519
|
+
"""
|
|
520
|
+
|
|
521
|
+
@staticmethod
|
|
522
|
+
def __classcall__(cls, W, min_length=0, max_length=infinity,
|
|
523
|
+
min_support=frozenset(), max_support=None):
|
|
524
|
+
r"""
|
|
525
|
+
TESTS::
|
|
526
|
+
|
|
527
|
+
sage: W = WeylGroup(['A',5,1])
|
|
528
|
+
sage: PF1 = sage.combinat.root_system.pieri_factors.PieriFactors_type_A_affine(W)
|
|
529
|
+
sage: PF2 = W.pieri_factors()
|
|
530
|
+
sage: PF3 = W.pieri_factors(min_support = [])
|
|
531
|
+
sage: PF4 = W.pieri_factors(max_support = [0,1,2,3,4,5])
|
|
532
|
+
sage: PF5 = W.pieri_factors(max_length = 10)
|
|
533
|
+
sage: PF6 = W.pieri_factors(min_length = 0)
|
|
534
|
+
sage: PF2 is PF1, PF3 is PF1, PF4 is PF1, PF5 is PF1, PF6 is PF1
|
|
535
|
+
(True, True, True, True, True)
|
|
536
|
+
"""
|
|
537
|
+
assert W.cartan_type().is_affine() and W.cartan_type().letter == 'A'
|
|
538
|
+
|
|
539
|
+
# We use Python's frozenset's rather that Sage's Set's because
|
|
540
|
+
# the latter do not yet support the issubset method
|
|
541
|
+
min_support = frozenset(min_support)
|
|
542
|
+
if max_support is None:
|
|
543
|
+
max_support = frozenset(W.index_set())
|
|
544
|
+
else:
|
|
545
|
+
max_support = frozenset(max_support)
|
|
546
|
+
min_length = max(min_length, len(min_support))
|
|
547
|
+
max_length = min(len(max_support), max_length, len(W.index_set()) - 1)
|
|
548
|
+
return super().__classcall__(cls, W, min_length, max_length, min_support, max_support)
|
|
549
|
+
|
|
550
|
+
def __init__(self, W, min_length, max_length, min_support, max_support):
|
|
551
|
+
r"""
|
|
552
|
+
INPUT:
|
|
553
|
+
|
|
554
|
+
- ``W`` -- a Weyl group of affine type `A`
|
|
555
|
+
- ``min_length``, ``max_length`` -- nonnegative integers
|
|
556
|
+
- ``min_support``, ``max_support`` -- subsets of the index set of `W`
|
|
557
|
+
|
|
558
|
+
EXAMPLES::
|
|
559
|
+
|
|
560
|
+
sage: PF = WeylGroup(["A", 3, 1]).pieri_factors(); PF
|
|
561
|
+
Pieri factors for Weyl Group of type ['A', 3, 1] (as a matrix group acting on the root space)
|
|
562
|
+
|
|
563
|
+
TESTS::
|
|
564
|
+
|
|
565
|
+
sage: PF = WeylGroup(['A',3,1]).pieri_factors()
|
|
566
|
+
sage: PF.__class__
|
|
567
|
+
<class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_A_affine_with_category'>
|
|
568
|
+
sage: TestSuite(PF).run()
|
|
569
|
+
|
|
570
|
+
sage: PF = WeylGroup(['A',3,1]).pieri_factors(min_length = 3)
|
|
571
|
+
sage: [w.reduced_word() for w in PF]
|
|
572
|
+
[[2, 1, 0], [1, 0, 3], [0, 3, 2], [3, 2, 1]]
|
|
573
|
+
|
|
574
|
+
sage: PF = WeylGroup(['A',4,1]).pieri_factors(min_support = [0,2])
|
|
575
|
+
sage: [w.reduced_word() for w in PF]
|
|
576
|
+
[[2, 0], [2, 1, 0], [3, 2, 0], [0, 4, 2], [3, 2, 1, 0], [2, 1, 0, 4], [0, 4, 3, 2]]
|
|
577
|
+
|
|
578
|
+
sage: PF = WeylGroup(['A',5,1]).pieri_factors(min_support = [0,1,2], max_support = [0,1,2,3])
|
|
579
|
+
sage: [w.reduced_word() for w in PF]
|
|
580
|
+
[[2, 1, 0], [3, 2, 1, 0]]
|
|
581
|
+
|
|
582
|
+
sage: PF = WeylGroup(['A',5,1]).pieri_factors(min_length = 2, max_length = 5)
|
|
583
|
+
sage: PF.generating_series()
|
|
584
|
+
6*z^5 + 15*z^4 + 20*z^3 + 15*z^2
|
|
585
|
+
"""
|
|
586
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
587
|
+
self.W = W
|
|
588
|
+
|
|
589
|
+
self._min_support = frozenset(min_support)
|
|
590
|
+
self._max_support = frozenset(max_support)
|
|
591
|
+
|
|
592
|
+
if not self._min_support.issubset(self._max_support):
|
|
593
|
+
raise ValueError("the min support must be a subset "
|
|
594
|
+
"of the max support")
|
|
595
|
+
|
|
596
|
+
self._extra_support = self._max_support.difference(self._min_support)
|
|
597
|
+
|
|
598
|
+
self._min_length = min_length
|
|
599
|
+
self._max_length = max_length
|
|
600
|
+
|
|
601
|
+
def subset(self, length):
|
|
602
|
+
r"""
|
|
603
|
+
Return the subset of the elements of ``self`` of length ``length``.
|
|
604
|
+
|
|
605
|
+
INPUT:
|
|
606
|
+
|
|
607
|
+
- ``length`` -- nonnegative integer
|
|
608
|
+
|
|
609
|
+
EXAMPLES::
|
|
610
|
+
|
|
611
|
+
sage: PF = WeylGroup(["A", 3, 1]).pieri_factors(); PF
|
|
612
|
+
Pieri factors for Weyl Group of type ['A', 3, 1] (as a matrix group acting on the root space)
|
|
613
|
+
sage: PF3 = PF.subset(length = 2)
|
|
614
|
+
sage: PF3.cardinality()
|
|
615
|
+
6
|
|
616
|
+
|
|
617
|
+
TESTS:
|
|
618
|
+
|
|
619
|
+
We check that there is no reference effect (there was at some point!)::
|
|
620
|
+
|
|
621
|
+
sage: PF.cardinality()
|
|
622
|
+
15
|
|
623
|
+
"""
|
|
624
|
+
return self.__class__(self.W,
|
|
625
|
+
min_support=self._min_support,
|
|
626
|
+
max_support=self._max_support,
|
|
627
|
+
min_length=length,
|
|
628
|
+
max_length=length)
|
|
629
|
+
|
|
630
|
+
def maximal_elements_combinatorial(self):
|
|
631
|
+
r"""
|
|
632
|
+
Return the maximal Pieri factors, using the affine type A
|
|
633
|
+
combinatorial description.
|
|
634
|
+
|
|
635
|
+
EXAMPLES::
|
|
636
|
+
|
|
637
|
+
sage: W = WeylGroup(['A',4,1])
|
|
638
|
+
sage: PF = W.pieri_factors()
|
|
639
|
+
sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
|
|
640
|
+
[[3, 2, 1, 0], [2, 1, 0, 4], [1, 0, 4, 3], [0, 4, 3, 2], [4, 3, 2, 1]]
|
|
641
|
+
"""
|
|
642
|
+
return self.subset(self._max_length)
|
|
643
|
+
|
|
644
|
+
def _test_maximal_elements(self, **options):
|
|
645
|
+
r"""
|
|
646
|
+
Same as :meth:`PieriFactors._test_maximal_elements`, but skips
|
|
647
|
+
the tests if ``self`` is not the full set of Pieri factors.
|
|
648
|
+
|
|
649
|
+
EXAMPLES::
|
|
650
|
+
|
|
651
|
+
sage: W = WeylGroup(['A',4,1])
|
|
652
|
+
sage: W.pieri_factors()._test_maximal_elements(verbose = True)
|
|
653
|
+
sage: W.pieri_factors(min_length = 1)._test_maximal_elements(verbose = True)
|
|
654
|
+
Strict subset of the Pieri factors; skipping test
|
|
655
|
+
"""
|
|
656
|
+
tester = self._tester(**options)
|
|
657
|
+
index_set = self.W.index_set()
|
|
658
|
+
if self._min_length > 0 or self._max_length < len(self.W.index_set())-1 or self._max_support != frozenset(index_set):
|
|
659
|
+
tester.info("\n Strict subset of the Pieri factors; skipping test")
|
|
660
|
+
return
|
|
661
|
+
return super()._test_maximal_elements(**options)
|
|
662
|
+
|
|
663
|
+
def __contains__(self, w):
|
|
664
|
+
r"""
|
|
665
|
+
Return whether ``w`` is in ``self``.
|
|
666
|
+
|
|
667
|
+
EXAMPLES::
|
|
668
|
+
|
|
669
|
+
sage: W = WeylGroup(['A',6,1])
|
|
670
|
+
sage: PF = W.pieri_factors()
|
|
671
|
+
sage: w=W.from_reduced_word([4,3,1,0,6])
|
|
672
|
+
sage: w in PF
|
|
673
|
+
True
|
|
674
|
+
sage: w=W.from_reduced_word([4,3,1,0,2])
|
|
675
|
+
sage: w in PF
|
|
676
|
+
False
|
|
677
|
+
sage: w=W.from_reduced_word([4,3,1,0,6,0])
|
|
678
|
+
sage: w in PF
|
|
679
|
+
False
|
|
680
|
+
sage: w=W.from_reduced_word([])
|
|
681
|
+
sage: w in PF
|
|
682
|
+
True
|
|
683
|
+
sage: w=W.from_reduced_word([3,2,1,0])
|
|
684
|
+
sage: w in PF
|
|
685
|
+
True
|
|
686
|
+
|
|
687
|
+
sage: W=WeylGroup(['A',3,1])
|
|
688
|
+
sage: PF = W.pieri_factors()
|
|
689
|
+
sage: w=W.from_reduced_word([3,2,1,0])
|
|
690
|
+
sage: w in PF
|
|
691
|
+
False
|
|
692
|
+
"""
|
|
693
|
+
if w not in self.W:
|
|
694
|
+
raise ValueError("{} is not an element of the Weyl group".format(w))
|
|
695
|
+
n = len(self.W.index_set()) - 1
|
|
696
|
+
red = w.reduced_word()
|
|
697
|
+
support = set(red)
|
|
698
|
+
|
|
699
|
+
if len(support) < len(red): # There should be no repetitions
|
|
700
|
+
return False
|
|
701
|
+
|
|
702
|
+
if not (self._min_length <= len(support) and
|
|
703
|
+
len(support) <= self._max_length and
|
|
704
|
+
self._min_support.issubset(support) and
|
|
705
|
+
support.issubset(self._max_support)):
|
|
706
|
+
return False
|
|
707
|
+
|
|
708
|
+
[rank, unrank] = sage.combinat.ranker.from_list(red)
|
|
709
|
+
for i in red:
|
|
710
|
+
j = (i + 1) % (n + 1)
|
|
711
|
+
if j in support:
|
|
712
|
+
if rank(i) < rank(j):
|
|
713
|
+
return False
|
|
714
|
+
return True
|
|
715
|
+
|
|
716
|
+
def __getitem__(self, support):
|
|
717
|
+
r"""
|
|
718
|
+
Return the cyclically decreasing element associated with ``support``.
|
|
719
|
+
|
|
720
|
+
INPUT:
|
|
721
|
+
|
|
722
|
+
- ``support`` -- a proper subset of the index_set, as a list or set
|
|
723
|
+
|
|
724
|
+
EXAMPLES::
|
|
725
|
+
|
|
726
|
+
sage: W = WeylGroup(["A", 5, 1])
|
|
727
|
+
sage: W.pieri_factors()[[0,1,2,3,5]].reduced_word()
|
|
728
|
+
[3, 2, 1, 0, 5]
|
|
729
|
+
sage: W.pieri_factors()[[0,1,3,4,5]].reduced_word()
|
|
730
|
+
[1, 0, 5, 4, 3]
|
|
731
|
+
sage: W.pieri_factors()[[0,1,2,3,4]].reduced_word()
|
|
732
|
+
[4, 3, 2, 1, 0]
|
|
733
|
+
"""
|
|
734
|
+
index_set = sorted(self.W.index_set())
|
|
735
|
+
support = sorted(support)
|
|
736
|
+
if not set(support).issubset(set(index_set)) or support == index_set:
|
|
737
|
+
raise ValueError("the support must be a proper subset of the index set")
|
|
738
|
+
if not support:
|
|
739
|
+
return self.W.one()
|
|
740
|
+
s = self.W.simple_reflections()
|
|
741
|
+
i = 0
|
|
742
|
+
while i < len(support) and support[i] == index_set[i]:
|
|
743
|
+
i += 1
|
|
744
|
+
# This finds the first hole: either ley[i] is maximal or support[i] < support[i+1]+1
|
|
745
|
+
return prod((s[j] for j in list(reversed(support[0:i])) + list(reversed(support[i:]))), self.W.one())
|
|
746
|
+
|
|
747
|
+
def cardinality(self):
|
|
748
|
+
r"""
|
|
749
|
+
Return the cardinality of ``self``.
|
|
750
|
+
|
|
751
|
+
EXAMPLES::
|
|
752
|
+
|
|
753
|
+
sage: WeylGroup(["A", 3, 1]).pieri_factors().cardinality()
|
|
754
|
+
15
|
|
755
|
+
"""
|
|
756
|
+
if self._min_length == len(self._min_support) and self._max_length == len(self._max_support) - 1:
|
|
757
|
+
return Integer(2**(len(self._extra_support)) - 1)
|
|
758
|
+
return self.generating_series(weight=ConstantFunction(1))
|
|
759
|
+
|
|
760
|
+
def generating_series(self, weight=None):
|
|
761
|
+
r"""
|
|
762
|
+
Return a length generating series for the elements of ``self``.
|
|
763
|
+
|
|
764
|
+
EXAMPLES::
|
|
765
|
+
|
|
766
|
+
sage: W = WeylGroup(["A", 3, 1])
|
|
767
|
+
sage: W.pieri_factors().cardinality()
|
|
768
|
+
15
|
|
769
|
+
sage: W.pieri_factors().generating_series()
|
|
770
|
+
4*z^3 + 6*z^2 + 4*z + 1
|
|
771
|
+
"""
|
|
772
|
+
if weight is None:
|
|
773
|
+
weight = self.default_weight()
|
|
774
|
+
l_min = len(self._min_support)
|
|
775
|
+
l_max = len(self._max_support)
|
|
776
|
+
return sum(Integer(l_max - l_min).binomial(l - l_min) * weight(l)
|
|
777
|
+
for l in range(self._min_length, self._max_length + 1))
|
|
778
|
+
|
|
779
|
+
def __iter__(self):
|
|
780
|
+
r"""
|
|
781
|
+
Return an iterator over the elements of ``self``.
|
|
782
|
+
|
|
783
|
+
EXAMPLES::
|
|
784
|
+
|
|
785
|
+
sage: W = WeylGroup(['A',4,1])
|
|
786
|
+
sage: PF = W.pieri_factors()
|
|
787
|
+
sage: f = PF.__iter__()
|
|
788
|
+
sage: next(f)
|
|
789
|
+
[1 0 0 0 0]
|
|
790
|
+
[0 1 0 0 0]
|
|
791
|
+
[0 0 1 0 0]
|
|
792
|
+
[0 0 0 1 0]
|
|
793
|
+
[0 0 0 0 1]
|
|
794
|
+
sage: [next(f).reduced_word() for i in range(6)]
|
|
795
|
+
[[0], [1], [2], [3], [4], [1, 0]]
|
|
796
|
+
"""
|
|
797
|
+
from sage.combinat.subset import Subsets
|
|
798
|
+
for l in range(self._min_length, self._max_length + 1):
|
|
799
|
+
for extra in Subsets(self._extra_support,
|
|
800
|
+
l - len(self._min_support)):
|
|
801
|
+
yield self[self._min_support.union(extra)]
|
|
802
|
+
|
|
803
|
+
def stanley_symm_poly_weight(self, w):
|
|
804
|
+
r"""
|
|
805
|
+
Weight used in computing (affine) Stanley symmetric polynomials
|
|
806
|
+
for affine type A.
|
|
807
|
+
|
|
808
|
+
EXAMPLES::
|
|
809
|
+
|
|
810
|
+
sage: W = WeylGroup(['A',5,1])
|
|
811
|
+
sage: PF = W.pieri_factors()
|
|
812
|
+
sage: PF.stanley_symm_poly_weight(W.one())
|
|
813
|
+
0
|
|
814
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,4,2,1,0]))
|
|
815
|
+
0
|
|
816
|
+
"""
|
|
817
|
+
return 0
|
|
818
|
+
|
|
819
|
+
|
|
820
|
+
class PieriFactors_type_C_affine(PieriFactors_affine_type):
|
|
821
|
+
r"""
|
|
822
|
+
The type C affine Pieri factors are realized as the order ideal (in Bruhat
|
|
823
|
+
order) generated by cyclic rotations of the element with unique reduced word
|
|
824
|
+
`123...(n-1)n(n-1)...3210`.
|
|
825
|
+
|
|
826
|
+
EXAMPLES::
|
|
827
|
+
|
|
828
|
+
sage: W = WeylGroup(['C',3,1])
|
|
829
|
+
sage: PF = W.pieri_factors()
|
|
830
|
+
sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
|
|
831
|
+
[[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [1, 2, 3, 2, 1, 0],
|
|
832
|
+
[2, 1, 0, 1, 2, 3], [2, 3, 2, 1, 0, 1], [3, 2, 1, 0, 1, 2]]
|
|
833
|
+
"""
|
|
834
|
+
|
|
835
|
+
def __init__(self, W):
|
|
836
|
+
r"""
|
|
837
|
+
TESTS::
|
|
838
|
+
|
|
839
|
+
sage: PF = WeylGroup(['C',3,1]).pieri_factors()
|
|
840
|
+
sage: PF.__class__
|
|
841
|
+
<class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_C_affine_with_category'>
|
|
842
|
+
sage: TestSuite(PF).run() # long time (4s on sage.math, 2011)
|
|
843
|
+
"""
|
|
844
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
845
|
+
self.W = W
|
|
846
|
+
|
|
847
|
+
@cached_method
|
|
848
|
+
def maximal_elements_combinatorial(self):
|
|
849
|
+
r"""
|
|
850
|
+
Return the maximal Pieri factors, using the affine type C
|
|
851
|
+
combinatorial description.
|
|
852
|
+
|
|
853
|
+
EXAMPLES::
|
|
854
|
+
|
|
855
|
+
sage: PF = WeylGroup(['C',3,1]).pieri_factors()
|
|
856
|
+
sage: [w.reduced_word() for w in PF.maximal_elements_combinatorial()]
|
|
857
|
+
[[0, 1, 2, 3, 2, 1], [1, 0, 1, 2, 3, 2], [2, 1, 0, 1, 2, 3], [3, 2, 1, 0, 1, 2], [2, 3, 2, 1, 0, 1], [1, 2, 3, 2, 1, 0]]
|
|
858
|
+
"""
|
|
859
|
+
n = self.W.n
|
|
860
|
+
rho = self.W.from_reduced_word(range(1, n-1))*self.W.from_reduced_word(range(n-1,-1,-1))
|
|
861
|
+
rotations = []
|
|
862
|
+
for i in range(2 * (n - 1)):
|
|
863
|
+
rho = rho.apply_simple_reflections(rho.descents()).apply_simple_reflections(rho.descents(), side='left')
|
|
864
|
+
rotations.append(rho)
|
|
865
|
+
return rotations
|
|
866
|
+
|
|
867
|
+
def stanley_symm_poly_weight(self, w):
|
|
868
|
+
r"""
|
|
869
|
+
Return the weight of a Pieri factor to be used in the definition of
|
|
870
|
+
Stanley symmetric functions.
|
|
871
|
+
|
|
872
|
+
For type C, this weight is the number of connected components
|
|
873
|
+
of the support (the indices appearing in a reduced word) of an
|
|
874
|
+
element.
|
|
875
|
+
|
|
876
|
+
EXAMPLES::
|
|
877
|
+
|
|
878
|
+
sage: W = WeylGroup(['C',5,1])
|
|
879
|
+
sage: PF = W.pieri_factors()
|
|
880
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3]))
|
|
881
|
+
2
|
|
882
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([1,3,2,0]))
|
|
883
|
+
1
|
|
884
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,3,0]))
|
|
885
|
+
3
|
|
886
|
+
sage: PF.stanley_symm_poly_weight(W.one())
|
|
887
|
+
0
|
|
888
|
+
"""
|
|
889
|
+
# The algorithm="delete" is a workaround when the set of
|
|
890
|
+
# vertices is empty, in which case subgraph tries another
|
|
891
|
+
# method which turns out to currently fail with Dynkin diagrams
|
|
892
|
+
return DiGraph(DynkinDiagram(w.parent().cartan_type())).subgraph(set(w.reduced_word()), algorithm='delete').connected_components_number()
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
class PieriFactors_type_B_affine(PieriFactors_affine_type):
|
|
896
|
+
r"""
|
|
897
|
+
The type B affine Pieri factors are realized as the order ideal (in Bruhat
|
|
898
|
+
order) generated by the following elements:
|
|
899
|
+
|
|
900
|
+
- cyclic rotations of the element with reduced word
|
|
901
|
+
`234...(n-1)n(n-1)...3210`,
|
|
902
|
+
except for `123...n...320` and `023...n...321`.
|
|
903
|
+
- `123...(n-1)n(n-1)...321`
|
|
904
|
+
- `023...(n-1)n(n-1)...320`
|
|
905
|
+
|
|
906
|
+
EXAMPLES::
|
|
907
|
+
|
|
908
|
+
sage: W = WeylGroup(['B',4,1])
|
|
909
|
+
sage: PF = W.pieri_factors()
|
|
910
|
+
sage: W.from_reduced_word([2,3,4,3,2,1,0]) in PF.maximal_elements()
|
|
911
|
+
True
|
|
912
|
+
sage: W.from_reduced_word([0,2,3,4,3,2,1]) in PF.maximal_elements()
|
|
913
|
+
False
|
|
914
|
+
sage: W.from_reduced_word([1,0,2,3,4,3,2]) in PF.maximal_elements()
|
|
915
|
+
True
|
|
916
|
+
sage: W.from_reduced_word([0,2,3,4,3,2,0]) in PF.maximal_elements()
|
|
917
|
+
True
|
|
918
|
+
sage: W.from_reduced_word([0,2,0]) in PF
|
|
919
|
+
True
|
|
920
|
+
"""
|
|
921
|
+
|
|
922
|
+
def __init__(self, W):
|
|
923
|
+
r"""
|
|
924
|
+
|
|
925
|
+
TESTS::
|
|
926
|
+
|
|
927
|
+
sage: PF = WeylGroup(["B",3,1]).pieri_factors()
|
|
928
|
+
sage: PF.__class__
|
|
929
|
+
<class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_B_affine_with_category'>
|
|
930
|
+
sage: TestSuite(PF).run()
|
|
931
|
+
"""
|
|
932
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
933
|
+
self.W = W
|
|
934
|
+
|
|
935
|
+
@cached_method
|
|
936
|
+
def maximal_elements_combinatorial(self):
|
|
937
|
+
r"""
|
|
938
|
+
Return the maximal Pieri factors, using the affine type B
|
|
939
|
+
combinatorial description.
|
|
940
|
+
|
|
941
|
+
EXAMPLES::
|
|
942
|
+
|
|
943
|
+
sage: W = WeylGroup(['B',4,1])
|
|
944
|
+
sage: [u.reduced_word() for u in W.pieri_factors().maximal_elements_combinatorial()]
|
|
945
|
+
[[1, 0, 2, 3, 4, 3, 2], [2, 1, 0, 2, 3, 4, 3], [3, 2, 1, 0, 2, 3, 4], [4, 3, 2, 1, 0, 2, 3], [3, 4, 3, 2, 1, 0, 2], [2, 3, 4, 3, 2, 1, 0], [1, 2, 3, 4, 3, 2, 1], [0, 2, 3, 4, 3, 2, 0]]
|
|
946
|
+
"""
|
|
947
|
+
n = self.W.n
|
|
948
|
+
rho = self.W.from_reduced_word(range(2,n-1))*self.W.from_reduced_word(range(n-1,-1,-1))
|
|
949
|
+
rotations = []
|
|
950
|
+
for i in range(2 * (n - 2)):
|
|
951
|
+
rho = rho.apply_simple_reflections(rho.descents()).apply_simple_reflections(rho.descents(), side='left')
|
|
952
|
+
rotations.append(rho)
|
|
953
|
+
rotations.append(self.W.from_reduced_word(range(1,n-1))*self.W.from_reduced_word(range(n-1,0,-1)))
|
|
954
|
+
rotations.append(self.W.from_reduced_word([0])*self.W.from_reduced_word(range(2,n-1))*self.W.from_reduced_word(range(n-1,1,-1))*self.W.from_reduced_word([0]))
|
|
955
|
+
return rotations
|
|
956
|
+
|
|
957
|
+
def stanley_symm_poly_weight(self, w):
|
|
958
|
+
r"""
|
|
959
|
+
Return the weight of a Pieri factor to be used in the definition of
|
|
960
|
+
Stanley symmetric functions.
|
|
961
|
+
|
|
962
|
+
For type B, this weight involves the number of components of
|
|
963
|
+
the complement of the support of an element, where we consider
|
|
964
|
+
0 and 1 to be one node -- if 1 is in the support, then we
|
|
965
|
+
pretend 0 in the support, and vice versa. We also consider 0
|
|
966
|
+
and 1 to be one node for the purpose of counting components of
|
|
967
|
+
the complement (as if the Dynkin diagram were that of type C).
|
|
968
|
+
Let n be the rank of the affine Weyl group in question (if
|
|
969
|
+
type ``['B',k,1]`` then we have n = k+1). Let ``chi(v.length() < n-1)``
|
|
970
|
+
be the indicator function that is 1 if the length of v is
|
|
971
|
+
smaller than n-1, and 0 if the length of v is greater than or
|
|
972
|
+
equal to n-1. If we call ``c'(v)`` the number of components of
|
|
973
|
+
the complement of the support of v, then the type B weight is
|
|
974
|
+
given by ``weight = c'(v) - chi(v.length() < n-1)``.
|
|
975
|
+
|
|
976
|
+
EXAMPLES::
|
|
977
|
+
|
|
978
|
+
sage: W = WeylGroup(['B',5,1])
|
|
979
|
+
sage: PF = W.pieri_factors()
|
|
980
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,3]))
|
|
981
|
+
1
|
|
982
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,1,3]))
|
|
983
|
+
1
|
|
984
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3]))
|
|
985
|
+
1
|
|
986
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,3,4,5]))
|
|
987
|
+
0
|
|
988
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([0,5]))
|
|
989
|
+
0
|
|
990
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,5,4,3,0]))
|
|
991
|
+
-1
|
|
992
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([4,5,4,3,0]))
|
|
993
|
+
0
|
|
994
|
+
"""
|
|
995
|
+
ct = w.parent().cartan_type()
|
|
996
|
+
support = set(w.reduced_word())
|
|
997
|
+
if 1 in support or 0 in support:
|
|
998
|
+
support_complement = set(ct.index_set()).difference(support).difference(set([0, 1]))
|
|
999
|
+
else:
|
|
1000
|
+
support_complement = set(ct.index_set()).difference(support).difference(set([0]))
|
|
1001
|
+
return DiGraph(DynkinDiagram(ct)).subgraph(support_complement, algorithm='delete').connected_components_number() - 1
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
class PieriFactors_type_D_affine(PieriFactors_affine_type):
|
|
1005
|
+
r"""
|
|
1006
|
+
The type D affine Pieri factors are realized as the order ideal
|
|
1007
|
+
(in Bruhat order) generated by the following elements:
|
|
1008
|
+
|
|
1009
|
+
* cyclic rotations of the element with reduced word
|
|
1010
|
+
`234...(n-2)n(n-1)(n-2)...3210`
|
|
1011
|
+
such that 1 and 0 are always adjacent and (n-1) and n are always adjacent.
|
|
1012
|
+
* `123...(n-2)n(n-1)(n-2)...321`
|
|
1013
|
+
* `023...(n-2)n(n-1)(n-2)...320`
|
|
1014
|
+
* `n(n-2)...2102...(n-2)n`
|
|
1015
|
+
* `(n-1)(n-2)...2102...(n-2)(n-1)`
|
|
1016
|
+
|
|
1017
|
+
EXAMPLES::
|
|
1018
|
+
|
|
1019
|
+
sage: W = WeylGroup(['D',5,1])
|
|
1020
|
+
sage: PF = W.pieri_factors()
|
|
1021
|
+
sage: W.from_reduced_word([3,2,1,0]) in PF
|
|
1022
|
+
True
|
|
1023
|
+
sage: W.from_reduced_word([0,3,2,1]) in PF
|
|
1024
|
+
False
|
|
1025
|
+
sage: W.from_reduced_word([0,1,3,2]) in PF
|
|
1026
|
+
True
|
|
1027
|
+
sage: W.from_reduced_word([2,0,1,3]) in PF
|
|
1028
|
+
True
|
|
1029
|
+
sage: sorted([u.reduced_word() for u in PF.maximal_elements()], key=str)
|
|
1030
|
+
[[0, 2, 3, 5, 4, 3, 2, 0], [1, 0, 2, 3, 5, 4, 3, 2], [1, 2, 3, 5, 4, 3, 2, 1],
|
|
1031
|
+
[2, 1, 0, 2, 3, 5, 4, 3], [2, 3, 5, 4, 3, 2, 1, 0], [3, 2, 1, 0, 2, 3, 5, 4],
|
|
1032
|
+
[3, 5, 4, 3, 2, 1, 0, 2], [4, 3, 2, 1, 0, 2, 3, 4], [5, 3, 2, 1, 0, 2, 3, 5],
|
|
1033
|
+
[5, 4, 3, 2, 1, 0, 2, 3]]
|
|
1034
|
+
"""
|
|
1035
|
+
|
|
1036
|
+
def __init__(self, W):
|
|
1037
|
+
r"""
|
|
1038
|
+
TESTS::
|
|
1039
|
+
|
|
1040
|
+
sage: PF = WeylGroup(["D",4,1]).pieri_factors()
|
|
1041
|
+
sage: PF.__class__
|
|
1042
|
+
<class 'sage.combinat.root_system.pieri_factors.PieriFactors_type_D_affine_with_category'>
|
|
1043
|
+
sage: TestSuite(PF).run() # long time
|
|
1044
|
+
"""
|
|
1045
|
+
Parent.__init__(self, category=FiniteEnumeratedSets())
|
|
1046
|
+
self.W = W
|
|
1047
|
+
|
|
1048
|
+
@cached_method
|
|
1049
|
+
def maximal_elements_combinatorial(self):
|
|
1050
|
+
r"""
|
|
1051
|
+
Return the maximal Pieri factors, using the affine type D
|
|
1052
|
+
combinatorial description.
|
|
1053
|
+
|
|
1054
|
+
EXAMPLES::
|
|
1055
|
+
|
|
1056
|
+
sage: W = WeylGroup(['D',5,1])
|
|
1057
|
+
sage: PF = W.pieri_factors()
|
|
1058
|
+
sage: set(PF.maximal_elements_combinatorial()) == set(PF.maximal_elements())
|
|
1059
|
+
True
|
|
1060
|
+
"""
|
|
1061
|
+
n = self.W.n
|
|
1062
|
+
rho = self.W.from_reduced_word(range(2,n))*self.W.from_reduced_word(range(n-3,-1,-1))
|
|
1063
|
+
rotations = []
|
|
1064
|
+
for i in range(2 * (n - 3)):
|
|
1065
|
+
rho = rho.apply_simple_reflections(rho.descents()).apply_simple_reflections(rho.descents(),side='left')
|
|
1066
|
+
rotations.append(rho)
|
|
1067
|
+
|
|
1068
|
+
rotations.append(self.W.from_reduced_word(range(1,n))*self.W.from_reduced_word(range(n-3,0,-1)))
|
|
1069
|
+
rotations.append(self.W.from_reduced_word([0])*self.W.from_reduced_word(range(2,n))*self.W.from_reduced_word(range(n-3,1,-1))*self.W.from_reduced_word([0]))
|
|
1070
|
+
rotations.append(self.W.from_reduced_word(range(n-2,-1,-1))*self.W.from_reduced_word(range(2,n-1)))
|
|
1071
|
+
rotations.append(self.W.from_reduced_word([n-1])*self.W.from_reduced_word(range(n-3,-1,-1))*self.W.from_reduced_word(range(2,n-2))*self.W.from_reduced_word([n-1]))
|
|
1072
|
+
return rotations
|
|
1073
|
+
|
|
1074
|
+
def stanley_symm_poly_weight(self, w):
|
|
1075
|
+
r"""
|
|
1076
|
+
Return the weight of `w`, to be used in the definition of
|
|
1077
|
+
Stanley symmetric functions.
|
|
1078
|
+
|
|
1079
|
+
INPUT:
|
|
1080
|
+
|
|
1081
|
+
- ``w`` -- a Pieri factor for this type
|
|
1082
|
+
|
|
1083
|
+
For type `D`, this weight involves
|
|
1084
|
+
the number of components of the complement of the support of
|
|
1085
|
+
an element, where we consider `0` and `1` to be one node -- if `1`
|
|
1086
|
+
is in the support, then we pretend `0` in the support, and vice
|
|
1087
|
+
versa. Similarly with `n-1` and `n`. We also consider `0` and
|
|
1088
|
+
`1`, `n-1` and `n` to be one node for the purpose of counting
|
|
1089
|
+
components of the complement (as if the Dynkin diagram were
|
|
1090
|
+
that of type `C`).
|
|
1091
|
+
|
|
1092
|
+
Type D Stanley symmetric polynomial weights are still
|
|
1093
|
+
conjectural. The given weight comes from conditions on
|
|
1094
|
+
elements of the affine Fomin-Stanley subalgebra, but work is
|
|
1095
|
+
needed to show this weight is correct for affine Stanley
|
|
1096
|
+
symmetric functions -- see [LSS2009, Pon2010]_ for details.
|
|
1097
|
+
|
|
1098
|
+
EXAMPLES::
|
|
1099
|
+
|
|
1100
|
+
sage: W = WeylGroup(['D', 5, 1])
|
|
1101
|
+
sage: PF = W.pieri_factors()
|
|
1102
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1]))
|
|
1103
|
+
0
|
|
1104
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2,1,0]))
|
|
1105
|
+
0
|
|
1106
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([5,2]))
|
|
1107
|
+
1
|
|
1108
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([]))
|
|
1109
|
+
0
|
|
1110
|
+
|
|
1111
|
+
sage: W = WeylGroup(['D',7,1])
|
|
1112
|
+
sage: PF = W.pieri_factors()
|
|
1113
|
+
sage: PF.stanley_symm_poly_weight(W.from_reduced_word([2,4,6]))
|
|
1114
|
+
2
|
|
1115
|
+
"""
|
|
1116
|
+
ct = w.parent().cartan_type()
|
|
1117
|
+
support = set(w.reduced_word())
|
|
1118
|
+
n = w.parent().n
|
|
1119
|
+
if 1 in support or 0 in support:
|
|
1120
|
+
support = support.union(set([1])).difference(set([0]))
|
|
1121
|
+
if n in support or n - 1 in support:
|
|
1122
|
+
support = support.union(set([n - 2])).difference(set([n - 1]))
|
|
1123
|
+
support_complement = set(range(1, n - 1)).difference(support)
|
|
1124
|
+
return DiGraph(DynkinDiagram(ct)).subgraph(support_complement).connected_components_number() - 1
|
|
1125
|
+
|
|
1126
|
+
|
|
1127
|
+
# Inserts those classes in CartanTypes
|
|
1128
|
+
from sage.combinat.root_system import type_A_affine, type_B_affine, type_C_affine, type_D_affine, type_A, type_B
|
|
1129
|
+
type_A_affine.CartanType.PieriFactors = PieriFactors_type_A_affine
|
|
1130
|
+
type_B_affine.CartanType.PieriFactors = PieriFactors_type_B_affine
|
|
1131
|
+
type_C_affine.CartanType.PieriFactors = PieriFactors_type_C_affine
|
|
1132
|
+
type_D_affine.CartanType.PieriFactors = PieriFactors_type_D_affine
|
|
1133
|
+
type_A.CartanType.PieriFactors = PieriFactors_type_A
|
|
1134
|
+
type_B.CartanType.PieriFactors = PieriFactors_type_B
|
|
1135
|
+
|
|
1136
|
+
# Pieri factors for these types have not yet been mathematically
|
|
1137
|
+
# introduced rigorously
|
|
1138
|
+
#
|
|
1139
|
+
# import type_C, type_D, type_E, type_F, type_G, type_E_affine, type_F_affine, type_G_affine
|
|
1140
|
+
#type_C.CartanType.PieriFactors = PieriFactors_type_C
|
|
1141
|
+
#type_D.CartanType.PieriFactors = PieriFactors_type_D
|
|
1142
|
+
#type_E.CartanType.PieriFactors = PieriFactors_type_E
|
|
1143
|
+
#type_F.CartanType.PieriFactors = PieriFactors_type_F
|
|
1144
|
+
#type_G.CartanType.PieriFactors = PieriFactors_type_G
|
|
1145
|
+
#type_E_affine.CartanType.PieriFactors = PieriFactors_type_E_affine
|
|
1146
|
+
#type_F_affine.CartanType.PieriFactors = PieriFactors_type_F_affine
|
|
1147
|
+
#type_G_affine.CartanType.PieriFactors = PieriFactors_type_G_affine
|