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,973 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs
|
|
3
|
+
"""
|
|
4
|
+
Free Lie Algebras
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Travis Scrimshaw (2013-05-03): Initial version
|
|
9
|
+
|
|
10
|
+
REFERENCES:
|
|
11
|
+
|
|
12
|
+
- [Bou1989]_
|
|
13
|
+
- [Reu2003]_
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
# ****************************************************************************
|
|
17
|
+
# Copyright (C) 2013-2017 Travis Scrimshaw <tcscrims at gmail.com>
|
|
18
|
+
#
|
|
19
|
+
# This program is free software: you can redistribute it and/or modify
|
|
20
|
+
# it under the terms of the GNU General Public License as published by
|
|
21
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
22
|
+
# (at your option) any later version.
|
|
23
|
+
# https://www.gnu.org/licenses/
|
|
24
|
+
# *****************************************************************************
|
|
25
|
+
|
|
26
|
+
from sage.misc.abstract_method import abstract_method
|
|
27
|
+
from sage.misc.cachefunc import cached_method
|
|
28
|
+
from sage.misc.bindable_class import BindableClass
|
|
29
|
+
from sage.structure.parent import Parent
|
|
30
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
31
|
+
from sage.structure.indexed_generators import (IndexedGenerators,
|
|
32
|
+
standardize_names_index_set)
|
|
33
|
+
from sage.categories.realizations import Realizations, Category_realization_of_parent
|
|
34
|
+
from sage.categories.lie_algebras import LieAlgebras
|
|
35
|
+
from sage.categories.homset import Hom
|
|
36
|
+
|
|
37
|
+
from sage.algebras.free_algebra import FreeAlgebra
|
|
38
|
+
from sage.algebras.lie_algebras.lie_algebra import FinitelyGeneratedLieAlgebra
|
|
39
|
+
from sage.algebras.lie_algebras.lie_algebra_element import (LieGenerator,
|
|
40
|
+
GradedLieBracket,
|
|
41
|
+
LyndonBracket,
|
|
42
|
+
FreeLieAlgebraElement)
|
|
43
|
+
from sage.algebras.lie_algebras.morphism import LieAlgebraHomomorphism_im_gens
|
|
44
|
+
from sage.misc.superseded import experimental_warning
|
|
45
|
+
|
|
46
|
+
from sage.rings.integer_ring import ZZ
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class FreeLieBasis_abstract(FinitelyGeneratedLieAlgebra, IndexedGenerators, BindableClass):
|
|
50
|
+
"""
|
|
51
|
+
Abstract base class for all bases of a free Lie algebra.
|
|
52
|
+
"""
|
|
53
|
+
def __init__(self, lie, basis_name):
|
|
54
|
+
"""
|
|
55
|
+
Initialize ``self``.
|
|
56
|
+
|
|
57
|
+
EXAMPLES::
|
|
58
|
+
|
|
59
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
60
|
+
sage: L.Hall()
|
|
61
|
+
doctest:warning
|
|
62
|
+
...
|
|
63
|
+
FutureWarning: The Hall basis has not been fully proven correct, but currently no bugs are known
|
|
64
|
+
See https://github.com/sagemath/sage/issues/16823 for details.
|
|
65
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Hall basis
|
|
66
|
+
"""
|
|
67
|
+
self._basis_name = basis_name
|
|
68
|
+
IndexedGenerators.__init__(self, lie._indices, prefix='', bracket=False)
|
|
69
|
+
FinitelyGeneratedLieAlgebra.__init__(self, lie.base_ring(),
|
|
70
|
+
names=lie._names, index_set=lie._indices,
|
|
71
|
+
category=FreeLieAlgebraBases(lie))
|
|
72
|
+
|
|
73
|
+
def _repr_(self):
|
|
74
|
+
"""
|
|
75
|
+
Return a string representation of ``self``.
|
|
76
|
+
|
|
77
|
+
EXAMPLES::
|
|
78
|
+
|
|
79
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
80
|
+
sage: L.Hall()
|
|
81
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Hall basis
|
|
82
|
+
sage: L.Lyndon()
|
|
83
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Lyndon basis
|
|
84
|
+
"""
|
|
85
|
+
return "{} in the {} basis".format(self.realization_of(), self._basis_name)
|
|
86
|
+
|
|
87
|
+
def _repr_term(self, x):
|
|
88
|
+
"""
|
|
89
|
+
Return a string representation for ``x``.
|
|
90
|
+
|
|
91
|
+
EXAMPLES::
|
|
92
|
+
|
|
93
|
+
sage: L = LieAlgebra(QQ, 'x,y')
|
|
94
|
+
sage: H = L.Hall()
|
|
95
|
+
sage: x,y = H.gens()
|
|
96
|
+
sage: H._repr_term(x.leading_support())
|
|
97
|
+
'x'
|
|
98
|
+
sage: a = H([x, y]).leading_support()
|
|
99
|
+
sage: H._repr_term(a)
|
|
100
|
+
'[x, y]'
|
|
101
|
+
"""
|
|
102
|
+
return repr(x)
|
|
103
|
+
|
|
104
|
+
def _latex_term(self, x):
|
|
105
|
+
r"""
|
|
106
|
+
Return a `\LaTeX` representation for ``x``.
|
|
107
|
+
|
|
108
|
+
EXAMPLES::
|
|
109
|
+
|
|
110
|
+
sage: L = LieAlgebra(QQ, 'x,y')
|
|
111
|
+
sage: H = L.Hall()
|
|
112
|
+
sage: x,y = H.gens()
|
|
113
|
+
sage: H._latex_term(x.leading_support())
|
|
114
|
+
'x'
|
|
115
|
+
sage: a = H([x, y]).leading_support()
|
|
116
|
+
sage: H._latex_term(a)
|
|
117
|
+
\left[ x , y \right]
|
|
118
|
+
"""
|
|
119
|
+
return x._latex_()
|
|
120
|
+
|
|
121
|
+
def _ascii_art_term(self, x):
|
|
122
|
+
r"""
|
|
123
|
+
Return an ascii art representation for ``x``.
|
|
124
|
+
|
|
125
|
+
EXAMPLES::
|
|
126
|
+
|
|
127
|
+
sage: L = LieAlgebra(QQ, 'x,y')
|
|
128
|
+
sage: H = L.Hall()
|
|
129
|
+
sage: x,y = H.gens()
|
|
130
|
+
sage: H._ascii_art_term(x.leading_support())
|
|
131
|
+
x
|
|
132
|
+
sage: a = H([x, y]).leading_support()
|
|
133
|
+
sage: H._ascii_art_term(a)
|
|
134
|
+
[x, y]
|
|
135
|
+
"""
|
|
136
|
+
from sage.typeset.ascii_art import ascii_art
|
|
137
|
+
return ascii_art(x)
|
|
138
|
+
|
|
139
|
+
def _unicode_art_term(self, x):
|
|
140
|
+
r"""
|
|
141
|
+
Return a unicode art representation for ``x``.
|
|
142
|
+
|
|
143
|
+
EXAMPLES::
|
|
144
|
+
|
|
145
|
+
sage: L = LieAlgebra(QQ, 'x,y')
|
|
146
|
+
sage: H = L.Hall()
|
|
147
|
+
sage: x,y = H.gens()
|
|
148
|
+
sage: H._unicode_art_term(x.leading_support())
|
|
149
|
+
x
|
|
150
|
+
sage: a = H([x, y]).leading_support()
|
|
151
|
+
sage: H._unicode_art_term(a)
|
|
152
|
+
[x, y]
|
|
153
|
+
"""
|
|
154
|
+
from sage.typeset.unicode_art import unicode_art
|
|
155
|
+
return unicode_art(x)
|
|
156
|
+
|
|
157
|
+
def _element_constructor_(self, x):
|
|
158
|
+
"""
|
|
159
|
+
Convert ``x`` into ``self``.
|
|
160
|
+
|
|
161
|
+
EXAMPLES::
|
|
162
|
+
|
|
163
|
+
sage: L.<x,y> = LieAlgebra(QQ)
|
|
164
|
+
sage: Lyn = L.Lyndon()
|
|
165
|
+
sage: Lyn('x')
|
|
166
|
+
x
|
|
167
|
+
sage: elt = Lyn([x, y]); elt
|
|
168
|
+
[x, y]
|
|
169
|
+
sage: elt.parent() is Lyn
|
|
170
|
+
True
|
|
171
|
+
"""
|
|
172
|
+
if not isinstance(x, list) and x in self._indices:
|
|
173
|
+
return self.monomial(x)
|
|
174
|
+
return super()._element_constructor_(x)
|
|
175
|
+
|
|
176
|
+
def monomial(self, x):
|
|
177
|
+
"""
|
|
178
|
+
Return the monomial indexed by ``x``.
|
|
179
|
+
|
|
180
|
+
EXAMPLES::
|
|
181
|
+
|
|
182
|
+
sage: Lyn = LieAlgebra(QQ, 'x,y').Lyndon()
|
|
183
|
+
sage: x = Lyn.monomial('x'); x
|
|
184
|
+
x
|
|
185
|
+
sage: x.parent() is Lyn
|
|
186
|
+
True
|
|
187
|
+
"""
|
|
188
|
+
if not isinstance(x, (LieGenerator, GradedLieBracket)):
|
|
189
|
+
if isinstance(x, list):
|
|
190
|
+
return super()._element_constructor_(x)
|
|
191
|
+
else:
|
|
192
|
+
i = self._indices.index(x)
|
|
193
|
+
x = LieGenerator(x, i)
|
|
194
|
+
return self.element_class(self, {x: self.base_ring().one()})
|
|
195
|
+
|
|
196
|
+
def _construct_UEA(self):
|
|
197
|
+
"""
|
|
198
|
+
Construct the universal enveloping algebra of ``self``.
|
|
199
|
+
|
|
200
|
+
EXAMPLES::
|
|
201
|
+
|
|
202
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
203
|
+
sage: L._construct_UEA()
|
|
204
|
+
Free Algebra on 2 generators (x, y) over Rational Field
|
|
205
|
+
sage: L.<x> = LieAlgebra(QQ)
|
|
206
|
+
sage: L._construct_UEA()
|
|
207
|
+
Free Algebra on 1 generator (x,) over Rational Field
|
|
208
|
+
"""
|
|
209
|
+
return FreeAlgebra(self.base_ring(), len(self._names), self._names)
|
|
210
|
+
|
|
211
|
+
def is_abelian(self):
|
|
212
|
+
"""
|
|
213
|
+
Return ``True`` if this is an abelian Lie algebra.
|
|
214
|
+
|
|
215
|
+
EXAMPLES::
|
|
216
|
+
|
|
217
|
+
sage: L = LieAlgebra(QQ, 3, 'x')
|
|
218
|
+
sage: L.is_abelian()
|
|
219
|
+
False
|
|
220
|
+
sage: L = LieAlgebra(QQ, 1, 'x')
|
|
221
|
+
sage: L.is_abelian()
|
|
222
|
+
True
|
|
223
|
+
"""
|
|
224
|
+
return len(self._indices) <= 1
|
|
225
|
+
|
|
226
|
+
def basis(self):
|
|
227
|
+
"""
|
|
228
|
+
Return the basis of ``self``.
|
|
229
|
+
|
|
230
|
+
EXAMPLES::
|
|
231
|
+
|
|
232
|
+
sage: L = LieAlgebra(QQ, 3, 'x')
|
|
233
|
+
sage: L.Hall().basis()
|
|
234
|
+
Disjoint union of Lazy family (graded basis(i))_{i in Positive integers}
|
|
235
|
+
"""
|
|
236
|
+
from sage.sets.disjoint_union_enumerated_sets import DisjointUnionEnumeratedSets
|
|
237
|
+
from sage.sets.positive_integers import PositiveIntegers
|
|
238
|
+
from sage.sets.family import Family
|
|
239
|
+
return DisjointUnionEnumeratedSets(Family(PositiveIntegers(), self.graded_basis, name="graded basis"))
|
|
240
|
+
|
|
241
|
+
@cached_method
|
|
242
|
+
def graded_dimension(self, k):
|
|
243
|
+
r"""
|
|
244
|
+
Return the dimension of the ``k``-th graded piece of ``self``.
|
|
245
|
+
|
|
246
|
+
The `k`-th graded part of a free Lie algebra on `n` generators
|
|
247
|
+
has dimension
|
|
248
|
+
|
|
249
|
+
.. MATH::
|
|
250
|
+
|
|
251
|
+
\frac{1}{k} \sum_{d \mid k} \mu(d) n^{k/d},
|
|
252
|
+
|
|
253
|
+
where `\mu` is the Mobius function.
|
|
254
|
+
|
|
255
|
+
REFERENCES:
|
|
256
|
+
|
|
257
|
+
[MKO1998]_
|
|
258
|
+
|
|
259
|
+
EXAMPLES::
|
|
260
|
+
|
|
261
|
+
sage: L = LieAlgebra(QQ, 'x', 3)
|
|
262
|
+
sage: H = L.Hall()
|
|
263
|
+
sage: [H.graded_dimension(i) for i in range(1, 11)]
|
|
264
|
+
[3, 3, 8, 18, 48, 116, 312, 810, 2184, 5880]
|
|
265
|
+
sage: H.graded_dimension(0)
|
|
266
|
+
0
|
|
267
|
+
"""
|
|
268
|
+
if k == 0:
|
|
269
|
+
return 0
|
|
270
|
+
from sage.arith.misc import moebius
|
|
271
|
+
s = len(self.lie_algebra_generators())
|
|
272
|
+
k = ZZ(k) # Make sure we have something that is in ZZ
|
|
273
|
+
return sum(moebius(d) * s**(k // d) for d in k.divisors()) // k
|
|
274
|
+
|
|
275
|
+
@abstract_method
|
|
276
|
+
def graded_basis(self, k):
|
|
277
|
+
"""
|
|
278
|
+
Return the basis for the ``k``-th graded piece of ``self``.
|
|
279
|
+
|
|
280
|
+
EXAMPLES::
|
|
281
|
+
|
|
282
|
+
sage: H = LieAlgebra(QQ, 3, 'x').Hall()
|
|
283
|
+
sage: H.graded_basis(2)
|
|
284
|
+
([x0, x1], [x0, x2], [x1, x2])
|
|
285
|
+
"""
|
|
286
|
+
|
|
287
|
+
@abstract_method
|
|
288
|
+
def _rewrite_bracket(self, l, r):
|
|
289
|
+
"""
|
|
290
|
+
Rewrite the bracket ``[l, r]`` in terms of the given basis.
|
|
291
|
+
|
|
292
|
+
INPUT:
|
|
293
|
+
|
|
294
|
+
- ``l``, ``r`` -- two keys of a basis such that ``l < r``
|
|
295
|
+
|
|
296
|
+
OUTPUT:
|
|
297
|
+
|
|
298
|
+
A dictionary ``{b: c}`` where ``b`` is a basis key
|
|
299
|
+
and ``c`` is the corresponding coefficient.
|
|
300
|
+
|
|
301
|
+
EXAMPLES::
|
|
302
|
+
|
|
303
|
+
sage: L = LieAlgebra(QQ, 'x,y,z')
|
|
304
|
+
sage: H = L.Hall()
|
|
305
|
+
sage: x,y,z = H.gens()
|
|
306
|
+
sage: H([x, [y, [z, x]]]) # indirect doctest
|
|
307
|
+
-[y, [x, [x, z]]] - [[x, y], [x, z]]
|
|
308
|
+
"""
|
|
309
|
+
|
|
310
|
+
Element = FreeLieAlgebraElement
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
class FreeLieAlgebra(Parent, UniqueRepresentation):
|
|
314
|
+
r"""
|
|
315
|
+
The free Lie algebra of a set `X`.
|
|
316
|
+
|
|
317
|
+
The free Lie algebra `\mathfrak{g}_X` of a set `X` is the Lie algebra
|
|
318
|
+
with generators `\{g_x\}_{x \in X}` where there are no other relations
|
|
319
|
+
beyond the defining relations. This can be constructed as
|
|
320
|
+
the free magmatic algebra `M_X` quotiented by the ideal
|
|
321
|
+
generated by `\bigl( xx, xy + yx, x(yz) + y(zx) + z(xy) \bigr)`.
|
|
322
|
+
|
|
323
|
+
EXAMPLES:
|
|
324
|
+
|
|
325
|
+
We first construct the free Lie algebra in the Hall basis::
|
|
326
|
+
|
|
327
|
+
sage: L = LieAlgebra(QQ, 'x,y,z')
|
|
328
|
+
sage: H = L.Hall()
|
|
329
|
+
sage: x,y,z = H.gens()
|
|
330
|
+
sage: h_elt = H([x, [y, z]]) + H([x - H([y, x]), H([x, z])]); h_elt
|
|
331
|
+
[x, [x, z]] + [y, [x, z]] - [z, [x, y]] + [[x, y], [x, z]]
|
|
332
|
+
|
|
333
|
+
We can also use the Lyndon basis and go between the two::
|
|
334
|
+
|
|
335
|
+
sage: Lyn = L.Lyndon()
|
|
336
|
+
sage: l_elt = Lyn([x, [y, z]]) + Lyn([x - Lyn([y, x]), Lyn([x, z])]); l_elt
|
|
337
|
+
[x, [x, z]] + [[x, y], [x, z]] + [x, [y, z]]
|
|
338
|
+
sage: Lyn(h_elt) == l_elt
|
|
339
|
+
True
|
|
340
|
+
sage: H(l_elt) == h_elt
|
|
341
|
+
True
|
|
342
|
+
|
|
343
|
+
TESTS:
|
|
344
|
+
|
|
345
|
+
Check that we can convert between the two bases::
|
|
346
|
+
|
|
347
|
+
sage: L = LieAlgebra(QQ, 'x,y,z')
|
|
348
|
+
sage: Lyn = L.Lyndon()
|
|
349
|
+
sage: H = L.Hall()
|
|
350
|
+
sage: all(Lyn(H(x)) == x for x in Lyn.graded_basis(5))
|
|
351
|
+
True
|
|
352
|
+
sage: all(H(Lyn(x)) == x for x in H.graded_basis(5))
|
|
353
|
+
True
|
|
354
|
+
"""
|
|
355
|
+
@staticmethod
|
|
356
|
+
def __classcall_private__(cls, R, names=None, index_set=None):
|
|
357
|
+
"""
|
|
358
|
+
Normalize input to ensure a unique representation.
|
|
359
|
+
|
|
360
|
+
EXAMPLES::
|
|
361
|
+
|
|
362
|
+
sage: from sage.algebras.lie_algebras.free_lie_algebra import FreeLieAlgebra
|
|
363
|
+
sage: L1 = FreeLieAlgebra(QQ, ['x', 'y', 'z'])
|
|
364
|
+
sage: L2.<x,y,z> = LieAlgebra(QQ)
|
|
365
|
+
sage: L1 is L2
|
|
366
|
+
True
|
|
367
|
+
"""
|
|
368
|
+
names, index_set = standardize_names_index_set(names, index_set)
|
|
369
|
+
return super().__classcall__(cls, R, names, index_set)
|
|
370
|
+
|
|
371
|
+
def __init__(self, R, names, index_set):
|
|
372
|
+
"""
|
|
373
|
+
Initialize ``self``.
|
|
374
|
+
|
|
375
|
+
EXAMPLES::
|
|
376
|
+
|
|
377
|
+
sage: L = LieAlgebra(QQ, 3, 'x')
|
|
378
|
+
sage: TestSuite(L).run(skip=['_test_elements']) # _test_monomial_coefficients fails
|
|
379
|
+
"""
|
|
380
|
+
self._names = names
|
|
381
|
+
self._indices = index_set
|
|
382
|
+
Parent.__init__(self, base=R, names=names,
|
|
383
|
+
category=LieAlgebras(R).WithRealizations())
|
|
384
|
+
|
|
385
|
+
def _repr_(self):
|
|
386
|
+
"""
|
|
387
|
+
Return a string representation of ``self``.
|
|
388
|
+
|
|
389
|
+
EXAMPLES::
|
|
390
|
+
|
|
391
|
+
sage: LieAlgebra(QQ, 3, 'x')
|
|
392
|
+
Free Lie algebra generated by (x0, x1, x2) over Rational Field
|
|
393
|
+
"""
|
|
394
|
+
n = tuple(map(LieGenerator, self._names, range(len(self._names)))) # To remove those stupid quote marks
|
|
395
|
+
return "Free Lie algebra generated by {} over {}".format(n, self.base_ring())
|
|
396
|
+
|
|
397
|
+
def _construct_UEA(self):
|
|
398
|
+
"""
|
|
399
|
+
Construct the universal enveloping algebra of ``self``.
|
|
400
|
+
|
|
401
|
+
EXAMPLES::
|
|
402
|
+
|
|
403
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
404
|
+
sage: L._construct_UEA()
|
|
405
|
+
Free Algebra on 2 generators (x, y) over Rational Field
|
|
406
|
+
"""
|
|
407
|
+
# TODO: Pass the index set along once FreeAlgebra accepts it
|
|
408
|
+
return FreeAlgebra(self.base_ring(), len(self._names), self._names)
|
|
409
|
+
|
|
410
|
+
def lie_algebra_generators(self):
|
|
411
|
+
"""
|
|
412
|
+
Return the Lie algebra generators of ``self`` in the Lyndon basis.
|
|
413
|
+
|
|
414
|
+
EXAMPLES::
|
|
415
|
+
|
|
416
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
417
|
+
sage: L.lie_algebra_generators()
|
|
418
|
+
Finite family {'x': x, 'y': y}
|
|
419
|
+
sage: L.lie_algebra_generators()['x'].parent()
|
|
420
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Lyndon basis
|
|
421
|
+
"""
|
|
422
|
+
return self.Lyndon().lie_algebra_generators()
|
|
423
|
+
|
|
424
|
+
def gens(self) -> tuple:
|
|
425
|
+
"""
|
|
426
|
+
Return the generators of ``self`` in the Lyndon basis.
|
|
427
|
+
|
|
428
|
+
EXAMPLES::
|
|
429
|
+
|
|
430
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
431
|
+
sage: L.gens()
|
|
432
|
+
(x, y)
|
|
433
|
+
sage: L.gens()[0].parent()
|
|
434
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Lyndon basis
|
|
435
|
+
"""
|
|
436
|
+
return self.Lyndon().gens()
|
|
437
|
+
|
|
438
|
+
def gen(self, i):
|
|
439
|
+
"""
|
|
440
|
+
Return the ``i``-th generator of ``self`` in the Lyndon basis.
|
|
441
|
+
|
|
442
|
+
EXAMPLES::
|
|
443
|
+
|
|
444
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
445
|
+
sage: L.gen(0)
|
|
446
|
+
x
|
|
447
|
+
sage: L.gen(1)
|
|
448
|
+
y
|
|
449
|
+
sage: L.gen(0).parent()
|
|
450
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Lyndon basis
|
|
451
|
+
"""
|
|
452
|
+
return self.gens()[i]
|
|
453
|
+
|
|
454
|
+
def a_realization(self):
|
|
455
|
+
r"""
|
|
456
|
+
Return a particular realization of ``self`` (the Lyndon basis).
|
|
457
|
+
|
|
458
|
+
EXAMPLES::
|
|
459
|
+
|
|
460
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
461
|
+
sage: L.a_realization()
|
|
462
|
+
Free Lie algebra generated by (x, y) over Rational Field in the Lyndon basis
|
|
463
|
+
"""
|
|
464
|
+
return self.Lyndon()
|
|
465
|
+
|
|
466
|
+
class Hall(FreeLieBasis_abstract):
|
|
467
|
+
"""
|
|
468
|
+
The free Lie algebra in the Hall basis.
|
|
469
|
+
|
|
470
|
+
The basis keys are objects of class
|
|
471
|
+
:class:`~sage.algebras.lie_algebras.lie_algebra_element.LieObject`,
|
|
472
|
+
each of which is either a
|
|
473
|
+
:class:`~sage.algebras.lie_algebras.lie_algebra_element.LieGenerator`
|
|
474
|
+
(in degree `1`) or a
|
|
475
|
+
:class:`~sage.algebras.lie_algebras.lie_algebra_element.GradedLieBracket`
|
|
476
|
+
(in degree `> 1`).
|
|
477
|
+
"""
|
|
478
|
+
def __init__(self, lie):
|
|
479
|
+
r"""
|
|
480
|
+
EXAMPLES::
|
|
481
|
+
|
|
482
|
+
sage: L = LieAlgebra(QQ, 3, 'x')
|
|
483
|
+
sage: TestSuite(L.Hall()).run(skip=['_test_elements']) # _test_monomial_coefficients fails
|
|
484
|
+
"""
|
|
485
|
+
experimental_warning(16823, "The Hall basis has not been fully proven correct,"
|
|
486
|
+
" but currently no bugs are known")
|
|
487
|
+
FreeLieBasis_abstract.__init__(self, lie, "Hall")
|
|
488
|
+
|
|
489
|
+
# Register the coercions
|
|
490
|
+
Lyn = lie.Lyndon()
|
|
491
|
+
Hom_HL = Hom(self, Lyn)
|
|
492
|
+
Hom_LH = Hom(Lyn, self)
|
|
493
|
+
LieAlgebraHomomorphism_im_gens(Hom_HL, Lyn.gens()).register_as_coercion()
|
|
494
|
+
LieAlgebraHomomorphism_im_gens(Hom_LH, self.gens()).register_as_coercion()
|
|
495
|
+
|
|
496
|
+
@cached_method
|
|
497
|
+
def _generate_hall_set(self, k):
|
|
498
|
+
"""
|
|
499
|
+
Generate the Hall set of grade ``k``.
|
|
500
|
+
|
|
501
|
+
OUTPUT: a sorted tuple of :class:`GradedLieBracket` elements
|
|
502
|
+
|
|
503
|
+
EXAMPLES::
|
|
504
|
+
|
|
505
|
+
sage: L = LieAlgebra(QQ, 3, 'x')
|
|
506
|
+
sage: H = L.Hall()
|
|
507
|
+
sage: H._generate_hall_set(3)
|
|
508
|
+
([x0, [x0, x1]],
|
|
509
|
+
[x0, [x0, x2]],
|
|
510
|
+
[x1, [x0, x1]],
|
|
511
|
+
[x1, [x0, x2]],
|
|
512
|
+
[x1, [x1, x2]],
|
|
513
|
+
[x2, [x0, x1]],
|
|
514
|
+
[x2, [x0, x2]],
|
|
515
|
+
[x2, [x1, x2]])
|
|
516
|
+
"""
|
|
517
|
+
if k <= 0:
|
|
518
|
+
return ()
|
|
519
|
+
if k == 1:
|
|
520
|
+
return tuple(map(LieGenerator, self.variable_names(),
|
|
521
|
+
range(len(self.variable_names()))))
|
|
522
|
+
if k == 2:
|
|
523
|
+
basis = self._generate_hall_set(1)
|
|
524
|
+
ret = [GradedLieBracket(a, b, 2) for i, a in enumerate(basis)
|
|
525
|
+
for b in basis[i+1:]]
|
|
526
|
+
return tuple(ret)
|
|
527
|
+
|
|
528
|
+
# We don't want to do the middle when we're even, so we add 1 and
|
|
529
|
+
# take the floor after dividing by 2.
|
|
530
|
+
ret = [GradedLieBracket(a, b, k) for i in range(1, (k+1) // 2)
|
|
531
|
+
for a in self._generate_hall_set(i)
|
|
532
|
+
for b in self._generate_hall_set(k-i)
|
|
533
|
+
if b._left <= a]
|
|
534
|
+
|
|
535
|
+
# Special case for when k = 4, we get the pairs [[a, b], [x, y]]
|
|
536
|
+
# where a,b,x,y are all grade 1 elements. Thus if we take
|
|
537
|
+
# [a, b] < [x, y], we will always be in the Hall set.
|
|
538
|
+
if k == 4:
|
|
539
|
+
basis = self._generate_hall_set(2)
|
|
540
|
+
for i, a in enumerate(basis):
|
|
541
|
+
for b in basis[i+1:]:
|
|
542
|
+
ret.append(GradedLieBracket(a, b, k))
|
|
543
|
+
# Do the middle case when we are even and k > 4
|
|
544
|
+
elif k % 2 == 0:
|
|
545
|
+
basis = self._generate_hall_set(k // 2) # grade >= 2
|
|
546
|
+
for i, a in enumerate(basis):
|
|
547
|
+
for b in basis[i+1:]:
|
|
548
|
+
if b._left <= a:
|
|
549
|
+
ret.append(GradedLieBracket(a, b, k))
|
|
550
|
+
|
|
551
|
+
# We sort the returned tuple in order to make computing the higher
|
|
552
|
+
# graded parts of the Hall set easier.
|
|
553
|
+
return tuple(sorted(ret))
|
|
554
|
+
|
|
555
|
+
@cached_method
|
|
556
|
+
def graded_basis(self, k):
|
|
557
|
+
"""
|
|
558
|
+
Return the basis for the ``k``-th graded piece of ``self``.
|
|
559
|
+
|
|
560
|
+
EXAMPLES::
|
|
561
|
+
|
|
562
|
+
sage: L = LieAlgebra(QQ, 'x,y,z')
|
|
563
|
+
sage: H = L.Hall()
|
|
564
|
+
sage: H.graded_basis(2)
|
|
565
|
+
([x, y], [x, z], [y, z])
|
|
566
|
+
sage: H.graded_basis(4)
|
|
567
|
+
([x, [x, [x, y]]], [x, [x, [x, z]]],
|
|
568
|
+
[y, [x, [x, y]]], [y, [x, [x, z]]],
|
|
569
|
+
[y, [y, [x, y]]], [y, [y, [x, z]]],
|
|
570
|
+
[y, [y, [y, z]]], [z, [x, [x, y]]],
|
|
571
|
+
[z, [x, [x, z]]], [z, [y, [x, y]]],
|
|
572
|
+
[z, [y, [x, z]]], [z, [y, [y, z]]],
|
|
573
|
+
[z, [z, [x, y]]], [z, [z, [x, z]]],
|
|
574
|
+
[z, [z, [y, z]]], [[x, y], [x, z]],
|
|
575
|
+
[[x, y], [y, z]], [[x, z], [y, z]])
|
|
576
|
+
|
|
577
|
+
TESTS::
|
|
578
|
+
|
|
579
|
+
sage: L = LieAlgebra(QQ, 'x,y,z', 3)
|
|
580
|
+
sage: H = L.Hall()
|
|
581
|
+
sage: [H.graded_dimension(i) for i in range(1, 11)]
|
|
582
|
+
[3, 3, 8, 18, 48, 116, 312, 810, 2184, 5880]
|
|
583
|
+
sage: [len(H.graded_basis(i)) for i in range(1, 11)]
|
|
584
|
+
[3, 3, 8, 18, 48, 116, 312, 810, 2184, 5880]
|
|
585
|
+
"""
|
|
586
|
+
one = self.base_ring().one()
|
|
587
|
+
return tuple([self.element_class(self, {x: one})
|
|
588
|
+
for x in self._generate_hall_set(k)])
|
|
589
|
+
|
|
590
|
+
# We require l < r because it is a requirement and to make the
|
|
591
|
+
# caching more efficient
|
|
592
|
+
@cached_method
|
|
593
|
+
def _rewrite_bracket(self, l, r):
|
|
594
|
+
"""
|
|
595
|
+
Rewrite the bracket ``[l, r]`` in terms of the Hall basis.
|
|
596
|
+
|
|
597
|
+
INPUT:
|
|
598
|
+
|
|
599
|
+
- ``l``, ``r`` -- two keys of the Hall basis with ``l < r``
|
|
600
|
+
|
|
601
|
+
OUTPUT:
|
|
602
|
+
|
|
603
|
+
A dictionary ``{b: c}`` where ``b`` is a Hall basis key
|
|
604
|
+
and ``c`` is the corresponding coefficient.
|
|
605
|
+
|
|
606
|
+
EXAMPLES::
|
|
607
|
+
|
|
608
|
+
sage: L = LieAlgebra(QQ, 'x,y,z')
|
|
609
|
+
sage: H = L.Hall()
|
|
610
|
+
sage: x,y,z = H.gens()
|
|
611
|
+
sage: H([x, [y, [z, x]]]) # indirect doctest
|
|
612
|
+
-[y, [x, [x, z]]] - [[x, y], [x, z]]
|
|
613
|
+
"""
|
|
614
|
+
# NOTE: If r is not a graded Lie bracket, then l cannot be a
|
|
615
|
+
# graded Lie bracket by the order respecting the grading
|
|
616
|
+
if not isinstance(r, GradedLieBracket) or r._left <= l:
|
|
617
|
+
# Compute the grade of the new element
|
|
618
|
+
grade = 0
|
|
619
|
+
# If not a graded Lie bracket, it must be a generator so the grade is 1
|
|
620
|
+
if isinstance(l, GradedLieBracket):
|
|
621
|
+
grade += l._grade
|
|
622
|
+
else:
|
|
623
|
+
grade += 1
|
|
624
|
+
if isinstance(r, GradedLieBracket):
|
|
625
|
+
grade += r._grade
|
|
626
|
+
else:
|
|
627
|
+
grade += 1
|
|
628
|
+
return {GradedLieBracket(l, r, grade): self.base_ring().one()}
|
|
629
|
+
|
|
630
|
+
ret = {}
|
|
631
|
+
|
|
632
|
+
# Rewrite [a, [b, c]] = [b, [a, c]] + [[a, b], c] with a < b < c
|
|
633
|
+
# Compute the left summand
|
|
634
|
+
for m, inner_coeff in self._rewrite_bracket(l, r._right).items():
|
|
635
|
+
if r._left == m:
|
|
636
|
+
continue
|
|
637
|
+
elif r._left < m:
|
|
638
|
+
x, y = r._left, m
|
|
639
|
+
else: # r._left > m
|
|
640
|
+
x, y = m, r._left
|
|
641
|
+
inner_coeff = -inner_coeff
|
|
642
|
+
for b_elt, coeff in self._rewrite_bracket(x, y).items():
|
|
643
|
+
ret[b_elt] = ret.get(b_elt, 0) + coeff * inner_coeff
|
|
644
|
+
|
|
645
|
+
# Compute the right summand
|
|
646
|
+
for m, inner_coeff in self._rewrite_bracket(l, r._left).items():
|
|
647
|
+
if m == r._right:
|
|
648
|
+
continue
|
|
649
|
+
elif m < r._right:
|
|
650
|
+
x, y = m, r._right
|
|
651
|
+
else: # m > r._right
|
|
652
|
+
x, y = r._right, m
|
|
653
|
+
inner_coeff = -inner_coeff
|
|
654
|
+
for b_elt, coeff in self._rewrite_bracket(x, y).items():
|
|
655
|
+
ret[b_elt] = ret.get(b_elt, 0) + coeff * inner_coeff
|
|
656
|
+
|
|
657
|
+
return ret
|
|
658
|
+
|
|
659
|
+
class Lyndon(FreeLieBasis_abstract):
|
|
660
|
+
"""
|
|
661
|
+
The free Lie algebra in the Lyndon basis.
|
|
662
|
+
|
|
663
|
+
The basis keys are objects of class
|
|
664
|
+
:class:`~sage.algebras.lie_algebras.lie_algebra_element.LieObject`,
|
|
665
|
+
each of which is either a
|
|
666
|
+
:class:`~sage.algebras.lie_algebras.lie_algebra_element.LieGenerator`
|
|
667
|
+
(in degree `1`) or a
|
|
668
|
+
:class:`~sage.algebras.lie_algebras.lie_algebra_element.LyndonBracket`
|
|
669
|
+
(in degree `> 1`).
|
|
670
|
+
|
|
671
|
+
TESTS:
|
|
672
|
+
|
|
673
|
+
We check that :issue:`27069` is fixed::
|
|
674
|
+
|
|
675
|
+
sage: Lzxy = LieAlgebra(QQ, ['z','x','y']).Lyndon()
|
|
676
|
+
sage: z,x,y = Lzxy.gens(); z,x,y
|
|
677
|
+
(z, x, y)
|
|
678
|
+
sage: z.bracket(x)
|
|
679
|
+
[z, x]
|
|
680
|
+
sage: y.bracket(z)
|
|
681
|
+
-[z, y]
|
|
682
|
+
"""
|
|
683
|
+
def __init__(self, lie):
|
|
684
|
+
r"""
|
|
685
|
+
EXAMPLES::
|
|
686
|
+
|
|
687
|
+
sage: L = LieAlgebra(QQ, 3, 'x')
|
|
688
|
+
sage: TestSuite(L.Lyndon()).run(skip=['_test_elements']) # _test_monomial_coefficients fails
|
|
689
|
+
"""
|
|
690
|
+
FreeLieBasis_abstract.__init__(self, lie, "Lyndon")
|
|
691
|
+
|
|
692
|
+
@cached_method
|
|
693
|
+
def _rewrite_bracket(self, l, r):
|
|
694
|
+
"""
|
|
695
|
+
Rewrite the bracket ``[l, r]`` in terms of the Lyndon basis.
|
|
696
|
+
|
|
697
|
+
INPUT:
|
|
698
|
+
|
|
699
|
+
- ``l``, ``r`` -- two keys of the Lyndon basis such
|
|
700
|
+
that ``l < r``
|
|
701
|
+
|
|
702
|
+
OUTPUT:
|
|
703
|
+
|
|
704
|
+
A dictionary ``{b: c}`` where ``b`` is a Lyndon basis key
|
|
705
|
+
and ``c`` is the corresponding coefficient.
|
|
706
|
+
|
|
707
|
+
EXAMPLES::
|
|
708
|
+
|
|
709
|
+
sage: L = LieAlgebra(QQ, 'x,y,z')
|
|
710
|
+
sage: Lyn = L.Lyndon()
|
|
711
|
+
sage: x,y,z = Lyn.gens()
|
|
712
|
+
sage: Lyn([x, [y, [z, x]]]) # indirect doctest
|
|
713
|
+
[x, [[x, z], y]]
|
|
714
|
+
"""
|
|
715
|
+
assert l < r, "Order mismatch %s > %s" % (l, r)
|
|
716
|
+
|
|
717
|
+
if self._is_basis_element(l, r):
|
|
718
|
+
# Compute the grade of the new element
|
|
719
|
+
grade = 0
|
|
720
|
+
# If not a graded Lie bracket, it must be a generator so the grade is 1
|
|
721
|
+
if isinstance(l, GradedLieBracket):
|
|
722
|
+
grade += l._grade
|
|
723
|
+
else:
|
|
724
|
+
grade += 1
|
|
725
|
+
if isinstance(r, GradedLieBracket):
|
|
726
|
+
grade += r._grade
|
|
727
|
+
else:
|
|
728
|
+
grade += 1
|
|
729
|
+
return {LyndonBracket(l, r, grade): self.base_ring().one()}
|
|
730
|
+
|
|
731
|
+
ret = {}
|
|
732
|
+
|
|
733
|
+
# Rewrite [[a, b], c] = [a, [b, c]] + [[a, c], b] with a < b < c
|
|
734
|
+
# with a = l._left, b = l._right and c = r.
|
|
735
|
+
# Here, we use the fact that deg(l) > 1, because
|
|
736
|
+
# if we had deg(l) == 1, then the
|
|
737
|
+
# "if self._is_basis_element(l, r)" would already have
|
|
738
|
+
# caught us.
|
|
739
|
+
# For a similar reason, we have b >= c.
|
|
740
|
+
# Compute the left summand
|
|
741
|
+
for m, inner_coeff in self._rewrite_bracket(l._right, r).items():
|
|
742
|
+
if l._left == m:
|
|
743
|
+
continue
|
|
744
|
+
elif l._left < m:
|
|
745
|
+
x, y = l._left, m
|
|
746
|
+
else: # l._left > m
|
|
747
|
+
x, y = m, l._left
|
|
748
|
+
inner_coeff = -inner_coeff
|
|
749
|
+
for b_elt, coeff in self._rewrite_bracket(x, y).items():
|
|
750
|
+
ret[b_elt] = ret.get(b_elt, 0) + coeff * inner_coeff
|
|
751
|
+
|
|
752
|
+
# Compute the right summand
|
|
753
|
+
for m, inner_coeff in self._rewrite_bracket(l._left, r).items():
|
|
754
|
+
if m == l._right:
|
|
755
|
+
continue
|
|
756
|
+
elif m < l._right:
|
|
757
|
+
x, y = m, l._right
|
|
758
|
+
else: # m > l._right
|
|
759
|
+
x, y = l._right, m
|
|
760
|
+
inner_coeff = -inner_coeff
|
|
761
|
+
for b_elt, coeff in self._rewrite_bracket(x, y).items():
|
|
762
|
+
ret[b_elt] = ret.get(b_elt, 0) + coeff * inner_coeff
|
|
763
|
+
|
|
764
|
+
return ret
|
|
765
|
+
|
|
766
|
+
def _is_basis_element(self, l, r):
|
|
767
|
+
"""
|
|
768
|
+
Check if the element ``[l, r]`` formed from
|
|
769
|
+
two basis keys ``l`` and ``r`` is a basis key.
|
|
770
|
+
|
|
771
|
+
EXAMPLES::
|
|
772
|
+
|
|
773
|
+
sage: Lyn = LieAlgebra(QQ, 'x,y,z').Lyndon()
|
|
774
|
+
sage: all(Lyn._is_basis_element(*x.list()[0][0]) for x in Lyn.graded_basis(4))
|
|
775
|
+
True
|
|
776
|
+
"""
|
|
777
|
+
w = tuple(l._index_word + r._index_word)
|
|
778
|
+
if not is_lyndon(w):
|
|
779
|
+
return False
|
|
780
|
+
b = self._standard_bracket(w)
|
|
781
|
+
return b._left == l and b._right == r
|
|
782
|
+
|
|
783
|
+
@cached_method
|
|
784
|
+
def _standard_bracket(self, lw):
|
|
785
|
+
"""
|
|
786
|
+
Return the standard bracketing (a :class:`LieObject`)
|
|
787
|
+
of a Lyndon word ``lw`` using the Lie bracket.
|
|
788
|
+
|
|
789
|
+
INPUT:
|
|
790
|
+
|
|
791
|
+
- ``lw`` -- tuple of positive integers that correspond to
|
|
792
|
+
the indices of the generators
|
|
793
|
+
|
|
794
|
+
EXAMPLES::
|
|
795
|
+
|
|
796
|
+
sage: L = LieAlgebra(QQ, 'x', 3)
|
|
797
|
+
sage: Lyn = L.Lyndon()
|
|
798
|
+
sage: Lyn._standard_bracket((0, 0, 1))
|
|
799
|
+
[x0, [x0, x1]]
|
|
800
|
+
sage: Lyn._standard_bracket((0, 1, 1))
|
|
801
|
+
[[x0, x1], x1]
|
|
802
|
+
"""
|
|
803
|
+
if len(lw) == 1:
|
|
804
|
+
i = lw[0]
|
|
805
|
+
return LieGenerator(self._indices[i], i)
|
|
806
|
+
|
|
807
|
+
for i in range(1, len(lw)):
|
|
808
|
+
if is_lyndon(lw[i:]):
|
|
809
|
+
return LyndonBracket(self._standard_bracket(lw[:i]),
|
|
810
|
+
self._standard_bracket(lw[i:]),
|
|
811
|
+
len(lw))
|
|
812
|
+
|
|
813
|
+
@cached_method
|
|
814
|
+
def graded_basis(self, k):
|
|
815
|
+
"""
|
|
816
|
+
Return the basis for the ``k``-th graded piece of ``self``.
|
|
817
|
+
|
|
818
|
+
EXAMPLES::
|
|
819
|
+
|
|
820
|
+
sage: L = LieAlgebra(QQ, 'x', 3)
|
|
821
|
+
sage: Lyn = L.Lyndon()
|
|
822
|
+
sage: Lyn.graded_basis(1)
|
|
823
|
+
(x0, x1, x2)
|
|
824
|
+
sage: Lyn.graded_basis(2)
|
|
825
|
+
([x0, x1], [x0, x2], [x1, x2])
|
|
826
|
+
sage: Lyn.graded_basis(4)
|
|
827
|
+
([x0, [x0, [x0, x1]]],
|
|
828
|
+
[x0, [x0, [x0, x2]]],
|
|
829
|
+
[x0, [[x0, x1], x1]],
|
|
830
|
+
[x0, [x0, [x1, x2]]],
|
|
831
|
+
[x0, [[x0, x2], x1]],
|
|
832
|
+
[x0, [[x0, x2], x2]],
|
|
833
|
+
[[x0, x1], [x0, x2]],
|
|
834
|
+
[[[x0, x1], x1], x1],
|
|
835
|
+
[x0, [x1, [x1, x2]]],
|
|
836
|
+
[[x0, [x1, x2]], x1],
|
|
837
|
+
[x0, [[x1, x2], x2]],
|
|
838
|
+
[[[x0, x2], x1], x1],
|
|
839
|
+
[[x0, x2], [x1, x2]],
|
|
840
|
+
[[[x0, x2], x2], x1],
|
|
841
|
+
[[[x0, x2], x2], x2],
|
|
842
|
+
[x1, [x1, [x1, x2]]],
|
|
843
|
+
[x1, [[x1, x2], x2]],
|
|
844
|
+
[[[x1, x2], x2], x2])
|
|
845
|
+
|
|
846
|
+
TESTS::
|
|
847
|
+
|
|
848
|
+
sage: L = LieAlgebra(QQ, 'x,y,z', 3)
|
|
849
|
+
sage: Lyn = L.Lyndon()
|
|
850
|
+
sage: [Lyn.graded_dimension(i) for i in range(1, 11)]
|
|
851
|
+
[3, 3, 8, 18, 48, 116, 312, 810, 2184, 5880]
|
|
852
|
+
sage: [len(Lyn.graded_basis(i)) for i in range(1, 11)]
|
|
853
|
+
[3, 3, 8, 18, 48, 116, 312, 810, 2184, 5880]
|
|
854
|
+
"""
|
|
855
|
+
if k <= 0 or not self._indices:
|
|
856
|
+
return []
|
|
857
|
+
|
|
858
|
+
names = self.variable_names()
|
|
859
|
+
one = self.base_ring().one()
|
|
860
|
+
if k == 1:
|
|
861
|
+
return tuple(self.element_class(self, {LieGenerator(n, k): one})
|
|
862
|
+
for k, n in enumerate(names))
|
|
863
|
+
|
|
864
|
+
from sage.combinat.combinat_cython import lyndon_word_iterator
|
|
865
|
+
n = len(self._indices)
|
|
866
|
+
ret = []
|
|
867
|
+
for lw in lyndon_word_iterator(n, k):
|
|
868
|
+
b = self._standard_bracket(tuple(lw))
|
|
869
|
+
ret.append(self.element_class(self, {b: one}))
|
|
870
|
+
return tuple(ret)
|
|
871
|
+
|
|
872
|
+
def pbw_basis(self, **kwds):
|
|
873
|
+
"""
|
|
874
|
+
Return the Poincare-Birkhoff-Witt basis corresponding to ``self``.
|
|
875
|
+
|
|
876
|
+
EXAMPLES::
|
|
877
|
+
|
|
878
|
+
sage: L = LieAlgebra(QQ, 'x,y,z', 3)
|
|
879
|
+
sage: Lyn = L.Lyndon()
|
|
880
|
+
sage: Lyn.pbw_basis()
|
|
881
|
+
The Poincare-Birkhoff-Witt basis of Free Algebra on 3 generators (x, y, z) over Rational Field
|
|
882
|
+
"""
|
|
883
|
+
return self.universal_enveloping_algebra().pbw_basis()
|
|
884
|
+
|
|
885
|
+
poincare_birkhoff_witt_basis = pbw_basis
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
#######################################
|
|
889
|
+
# Category for the realizations
|
|
890
|
+
|
|
891
|
+
class FreeLieAlgebraBases(Category_realization_of_parent):
|
|
892
|
+
r"""
|
|
893
|
+
The category of bases of a free Lie algebra.
|
|
894
|
+
"""
|
|
895
|
+
def __init__(self, base):
|
|
896
|
+
r"""
|
|
897
|
+
Initialize the bases of a free Lie algebra.
|
|
898
|
+
|
|
899
|
+
INPUT:
|
|
900
|
+
|
|
901
|
+
- ``base`` -- a free Lie algebra
|
|
902
|
+
|
|
903
|
+
TESTS::
|
|
904
|
+
|
|
905
|
+
sage: from sage.algebras.lie_algebras.free_lie_algebra import FreeLieAlgebraBases
|
|
906
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
907
|
+
sage: bases = FreeLieAlgebraBases(L)
|
|
908
|
+
sage: L.Hall() in bases
|
|
909
|
+
True
|
|
910
|
+
"""
|
|
911
|
+
Category_realization_of_parent.__init__(self, base)
|
|
912
|
+
|
|
913
|
+
def _repr_(self):
|
|
914
|
+
r"""
|
|
915
|
+
Return the representation of ``self``.
|
|
916
|
+
|
|
917
|
+
EXAMPLES::
|
|
918
|
+
|
|
919
|
+
sage: from sage.algebras.lie_algebras.free_lie_algebra import FreeLieAlgebraBases
|
|
920
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
921
|
+
sage: FreeLieAlgebraBases(L)
|
|
922
|
+
Category of bases of Free Lie algebra generated by (x, y) over Rational Field
|
|
923
|
+
"""
|
|
924
|
+
return "Category of bases of %s" % self.base()
|
|
925
|
+
|
|
926
|
+
def super_categories(self):
|
|
927
|
+
r"""
|
|
928
|
+
The super categories of ``self``.
|
|
929
|
+
|
|
930
|
+
EXAMPLES::
|
|
931
|
+
|
|
932
|
+
sage: from sage.algebras.lie_algebras.free_lie_algebra import FreeLieAlgebraBases
|
|
933
|
+
sage: L.<x, y> = LieAlgebra(QQ)
|
|
934
|
+
sage: bases = FreeLieAlgebraBases(L)
|
|
935
|
+
sage: bases.super_categories()
|
|
936
|
+
[Category of Lie algebras with basis over Rational Field,
|
|
937
|
+
Category of realizations of Free Lie algebra generated by (x, y) over Rational Field]
|
|
938
|
+
"""
|
|
939
|
+
return [LieAlgebras(self.base().base_ring()).WithBasis(), Realizations(self.base())]
|
|
940
|
+
|
|
941
|
+
|
|
942
|
+
def is_lyndon(w) -> bool:
|
|
943
|
+
"""
|
|
944
|
+
Modified form of ``Word(w).is_lyndon()`` which uses the default order
|
|
945
|
+
(this will either be the natural integer order or lex order) and assumes
|
|
946
|
+
the input ``w`` behaves like a nonempty list.
|
|
947
|
+
|
|
948
|
+
This function here is designed for speed.
|
|
949
|
+
|
|
950
|
+
EXAMPLES::
|
|
951
|
+
|
|
952
|
+
sage: from sage.algebras.lie_algebras.free_lie_algebra import is_lyndon
|
|
953
|
+
sage: is_lyndon([1])
|
|
954
|
+
True
|
|
955
|
+
sage: is_lyndon([1,3,1])
|
|
956
|
+
False
|
|
957
|
+
sage: is_lyndon((2,2,3))
|
|
958
|
+
True
|
|
959
|
+
sage: all(is_lyndon(x) for x in LyndonWords(3, 5))
|
|
960
|
+
True
|
|
961
|
+
sage: all(is_lyndon(x) for x in LyndonWords(6, 4))
|
|
962
|
+
True
|
|
963
|
+
"""
|
|
964
|
+
i = 0
|
|
965
|
+
for let in w[1:]:
|
|
966
|
+
if w[i] < let:
|
|
967
|
+
i = 0
|
|
968
|
+
elif w[i] == let:
|
|
969
|
+
i += 1
|
|
970
|
+
else:
|
|
971
|
+
# we found the first word in the Lyndon factorization.
|
|
972
|
+
return False
|
|
973
|
+
return i == 0
|