passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.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 +5 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
- passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-aarch64-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-aarch64-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-aarch64-linux-musl.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-aarch64-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-aarch64-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,967 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs
|
|
3
|
+
r"""
|
|
4
|
+
Subalgebras and ideals of Lie algebras
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Eero Hakavuori (2018-08-29): initial version
|
|
9
|
+
- Travis Scrimshaw (2025-05-21): make all Lie subalgebras use elements
|
|
10
|
+
in the ambient Lie algebra
|
|
11
|
+
"""
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2018 Eero Hakavuori <eero.hakavuori@gmail.com>
|
|
14
|
+
# 2025 Travis Scrimshaw <tcscrims at gmail.com>
|
|
15
|
+
#
|
|
16
|
+
# This program is free software: you can redistribute it and/or modify
|
|
17
|
+
# it under the terms of the GNU General Public License as published by
|
|
18
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
19
|
+
# (at your option) any later version.
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
from sage.algebras.lie_algebras.lie_algebra_element import LieSubalgebraElementWrapper
|
|
23
|
+
from sage.categories.lie_algebras import LieAlgebras
|
|
24
|
+
from sage.categories.homset import Hom
|
|
25
|
+
from sage.categories.morphism import SetMorphism
|
|
26
|
+
from sage.matrix.constructor import matrix
|
|
27
|
+
from sage.misc.cachefunc import cached_method
|
|
28
|
+
from sage.misc.lazy_attribute import lazy_attribute
|
|
29
|
+
from sage.sets.family import Family
|
|
30
|
+
from sage.sets.finite_enumerated_set import FiniteEnumeratedSet
|
|
31
|
+
from sage.structure.parent import Parent
|
|
32
|
+
from sage.structure.element import parent, Element
|
|
33
|
+
from sage.structure.unique_representation import UniqueRepresentation
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class LieSubalgebra_finite_dimensional_with_basis(Parent, UniqueRepresentation):
|
|
37
|
+
r"""
|
|
38
|
+
A Lie subalgebra of a finite dimensional Lie algebra with basis.
|
|
39
|
+
|
|
40
|
+
INPUT:
|
|
41
|
+
|
|
42
|
+
- ``ambient`` -- the Lie algebra containing the subalgebra
|
|
43
|
+
- ``gens`` -- list of generators of the subalgebra
|
|
44
|
+
- ``ideal`` -- boolean (default: ``False``); if ``True``, then ``gens``
|
|
45
|
+
is interpreted as the generating set of an ideal instead of a subalgebra
|
|
46
|
+
- ``order`` -- (optional) the key used to sort the indices of ``ambient``
|
|
47
|
+
- ``category`` -- (optional) a subcategory of subobjects of finite
|
|
48
|
+
dimensional Lie algebras with basis
|
|
49
|
+
|
|
50
|
+
EXAMPLES:
|
|
51
|
+
|
|
52
|
+
Subalgebras and ideals are defined by giving a list of generators::
|
|
53
|
+
|
|
54
|
+
sage: L = lie_algebras.Heisenberg(QQ, 1)
|
|
55
|
+
sage: X, Y, Z = L.basis()
|
|
56
|
+
sage: S = L.subalgebra([X, Z]); S
|
|
57
|
+
Subalgebra generated by (p1, z) of Heisenberg algebra of rank 1 over Rational Field
|
|
58
|
+
sage: I = L.ideal([X, Z]); I
|
|
59
|
+
Ideal (p1, z) of Heisenberg algebra of rank 1 over Rational Field
|
|
60
|
+
|
|
61
|
+
An ideal is in general larger than the subalgebra with the same generators::
|
|
62
|
+
|
|
63
|
+
sage: S = L.subalgebra(Y)
|
|
64
|
+
sage: S.basis()
|
|
65
|
+
Finite family {'q1': q1}
|
|
66
|
+
sage: I = L.ideal(Y)
|
|
67
|
+
sage: I.basis()
|
|
68
|
+
Finite family {'q1': q1, 'z': z}
|
|
69
|
+
|
|
70
|
+
The zero dimensional subalgebra can be created by giving 0 as a generator
|
|
71
|
+
or with an empty list of generators::
|
|
72
|
+
|
|
73
|
+
sage: L.<X,Y,Z> = LieAlgebra(QQ, {('X','Y'): {'Z': 1}})
|
|
74
|
+
sage: S1 = L.subalgebra(0)
|
|
75
|
+
sage: S2 = L.subalgebra([])
|
|
76
|
+
sage: S1 is S2
|
|
77
|
+
True
|
|
78
|
+
sage: S1.basis()
|
|
79
|
+
Finite family {}
|
|
80
|
+
|
|
81
|
+
Elements of the ambient Lie algebra can be reduced modulo an
|
|
82
|
+
ideal or subalgebra::
|
|
83
|
+
|
|
84
|
+
sage: # needs sage.symbolic
|
|
85
|
+
sage: L.<X,Y,Z> = LieAlgebra(SR, {('X','Y'): {'Z': 1}})
|
|
86
|
+
sage: I = L.ideal(Y)
|
|
87
|
+
sage: I.reduce(X + 2*Y + 3*Z)
|
|
88
|
+
X
|
|
89
|
+
sage: S = L.subalgebra(Y)
|
|
90
|
+
sage: S.reduce(X + 2*Y + 3*Z)
|
|
91
|
+
X + 3*Z
|
|
92
|
+
|
|
93
|
+
The reduction gives elements in a fixed complementary subspace.
|
|
94
|
+
When the base ring is a field, the complementary subspace is spanned by
|
|
95
|
+
those basis elements which are not leading supports of the basis::
|
|
96
|
+
|
|
97
|
+
sage: # needs sage.symbolic
|
|
98
|
+
sage: I = L.ideal(X + Y)
|
|
99
|
+
sage: I.basis()
|
|
100
|
+
Finite family {'Y': X + Y, 'Z': Z}
|
|
101
|
+
sage: el = var('x')*X + var('y')*Y + var('z')*Z; el
|
|
102
|
+
x*X + y*Y + z*Z
|
|
103
|
+
sage: I.reduce(el)
|
|
104
|
+
(x-y)*X
|
|
105
|
+
|
|
106
|
+
Giving a different ``order`` may change the reduction of elements::
|
|
107
|
+
|
|
108
|
+
sage: I = L.ideal(X + Y, order=lambda s: ['Z','Y','X'].index(s)) # needs sage.symbolic
|
|
109
|
+
sage: I.basis() # needs sage.symbolic
|
|
110
|
+
Finite family {'Z': Z, 'X': X + Y}
|
|
111
|
+
sage: I.reduce(el) # needs sage.symbolic
|
|
112
|
+
(-x+y)*Y
|
|
113
|
+
|
|
114
|
+
A subalgebra of a subalgebra is a subalgebra of the original::
|
|
115
|
+
|
|
116
|
+
sage: sc = {('X','Y'): {'Z': 1}, ('X','Z'): {'W': 1}}
|
|
117
|
+
sage: L.<X,Y,Z,W> = LieAlgebra(QQ, sc)
|
|
118
|
+
sage: S1 = L.subalgebra([Y, Z, W]); S1
|
|
119
|
+
Subalgebra generated by (Y, Z, W) of Lie algebra on 4 generators (X, Y, Z, W) over Rational Field
|
|
120
|
+
sage: S2 = S1.subalgebra(S1.gens()[1:]); S2
|
|
121
|
+
Subalgebra generated by (Z, W) of Lie algebra on 4 generators (X, Y, Z, W) over Rational Field
|
|
122
|
+
sage: S3 = S2.subalgebra(S2.gens()[1:]); S3
|
|
123
|
+
Subalgebra generated by (W) of Lie algebra on 4 generators (X, Y, Z, W) over Rational Field
|
|
124
|
+
|
|
125
|
+
An ideal of an ideal is not necessarily an ideal of the original::
|
|
126
|
+
|
|
127
|
+
sage: I = L.ideal(Y); I
|
|
128
|
+
Ideal (Y) of Lie algebra on 4 generators (X, Y, Z, W) over Rational Field
|
|
129
|
+
sage: J = I.ideal(Z); J
|
|
130
|
+
Ideal (Z) of Ideal (Y) of Lie algebra on 4 generators (X, Y, Z, W) over Rational Field
|
|
131
|
+
sage: J.basis()
|
|
132
|
+
Finite family {'Z': Z}
|
|
133
|
+
sage: J.is_ideal(L)
|
|
134
|
+
False
|
|
135
|
+
sage: K = L.ideal(J.basis().list())
|
|
136
|
+
sage: K.basis()
|
|
137
|
+
Finite family {'Z': Z, 'W': W}
|
|
138
|
+
|
|
139
|
+
TESTS:
|
|
140
|
+
|
|
141
|
+
Test suites::
|
|
142
|
+
|
|
143
|
+
sage: sc = {('X','Y'): {'Z': 1}, ('X','Z'): {'W': 1}}
|
|
144
|
+
sage: L.<X,Y,Z,W> = LieAlgebra(QQ, sc)
|
|
145
|
+
sage: S = L.subalgebra(X + Y)
|
|
146
|
+
sage: TestSuite(S).run()
|
|
147
|
+
sage: I = L.ideal(X + Y)
|
|
148
|
+
sage: TestSuite(I).run()
|
|
149
|
+
|
|
150
|
+
Verify that subalgebras and ideals of nilpotent Lie algebras are nilpotent::
|
|
151
|
+
|
|
152
|
+
sage: L = LieAlgebra(QQ, 3, step=4)
|
|
153
|
+
sage: x,y,z = L.homogeneous_component_basis(1)
|
|
154
|
+
sage: S = L.subalgebra([x, y])
|
|
155
|
+
sage: S in LieAlgebras(QQ).Nilpotent()
|
|
156
|
+
True
|
|
157
|
+
sage: S.step()
|
|
158
|
+
4
|
|
159
|
+
sage: I = L.ideal(z)
|
|
160
|
+
sage: I in LieAlgebras(QQ).Nilpotent()
|
|
161
|
+
True
|
|
162
|
+
sage: I.step()
|
|
163
|
+
3
|
|
164
|
+
|
|
165
|
+
Test computation for a nested ideal::
|
|
166
|
+
|
|
167
|
+
sage: sc = {('X','Y'): {'Z': 1}, ('X','Z'): {'W': 1}}
|
|
168
|
+
sage: L.<X,Y,Z,W> = LieAlgebra(QQ, sc)
|
|
169
|
+
sage: I = L.ideal(Y)
|
|
170
|
+
sage: J = I.ideal(Z)
|
|
171
|
+
sage: J.reduce(I(Z) + I(W))
|
|
172
|
+
W
|
|
173
|
+
"""
|
|
174
|
+
@staticmethod
|
|
175
|
+
def __classcall_private__(cls, ambient, gens, ideal_of=None,
|
|
176
|
+
order=None, category=None):
|
|
177
|
+
"""
|
|
178
|
+
Normalize input to ensure a unique representation.
|
|
179
|
+
|
|
180
|
+
EXAMPLES:
|
|
181
|
+
|
|
182
|
+
Various ways to input one generator::
|
|
183
|
+
|
|
184
|
+
sage: L.<X,Y> = LieAlgebra(QQ, {('X','Y'): {'X': 1}})
|
|
185
|
+
sage: S1 = L.subalgebra(X)
|
|
186
|
+
sage: S2 = L.subalgebra((X,))
|
|
187
|
+
sage: S3 = L.subalgebra([X])
|
|
188
|
+
sage: S1 is S2 and S2 is S3
|
|
189
|
+
True
|
|
190
|
+
|
|
191
|
+
Zero generators are ignored::
|
|
192
|
+
|
|
193
|
+
sage: S1 = L.subalgebra(X)
|
|
194
|
+
sage: S2 = L.subalgebra((X, 0))
|
|
195
|
+
sage: S3 = L.subalgebra([X, 0, 0])
|
|
196
|
+
sage: S1 is S2 and S2 is S3
|
|
197
|
+
True
|
|
198
|
+
sage: T1 = L.subalgebra(0)
|
|
199
|
+
sage: T2 = L.subalgebra([])
|
|
200
|
+
sage: T3 = L.subalgebra([0, 0])
|
|
201
|
+
sage: T1 is T2 and T2 is T3
|
|
202
|
+
True
|
|
203
|
+
|
|
204
|
+
Subalgebras generated by a subalgebra returns the same subalgebra::
|
|
205
|
+
|
|
206
|
+
sage: S1 = L.subalgebra(X)
|
|
207
|
+
sage: S2 = L.subalgebra(S1)
|
|
208
|
+
sage: S1 is S2
|
|
209
|
+
True
|
|
210
|
+
|
|
211
|
+
We can have subalgebras generated by subalgebras::
|
|
212
|
+
|
|
213
|
+
sage: scoeffs = {('a','d'): {'a':1}, ('a','e'): {'b':-1},
|
|
214
|
+
....: ('b','d'): {'b':1}, ('b','e'): {'a':1},
|
|
215
|
+
....: ('d','e'): {'c':1}}
|
|
216
|
+
sage: L.<a,b,c,d,e> = LieAlgebra(QQ, scoeffs)
|
|
217
|
+
sage: S1 = L.subalgebra(a)
|
|
218
|
+
sage: S2 = L.subalgebra([b, e])
|
|
219
|
+
sage: S = L.subalgebra([S1, S2])
|
|
220
|
+
sage: S
|
|
221
|
+
Subalgebra generated by (a, a, b, e) of Lie algebra on
|
|
222
|
+
5 generators (a, b, c, d, e) over Rational Field
|
|
223
|
+
sage: S.basis()
|
|
224
|
+
Finite family {'a': a, 'b': b, 'e': e}
|
|
225
|
+
|
|
226
|
+
Check that other container-like objects are handled properly
|
|
227
|
+
(:issue:`40137`)::
|
|
228
|
+
|
|
229
|
+
sage: L.<a,b,c,d> = LieAlgebra(QQ, {('a','b'): {'c': 1, 'd':1}})
|
|
230
|
+
sage: A = L.ideal([b, c, d])
|
|
231
|
+
sage: B = L.ideal([b, c+d])
|
|
232
|
+
sage: A.ideal(B)
|
|
233
|
+
Ideal (b, c + d) of Ideal (b, c, d) of Lie algebra on 4 generators
|
|
234
|
+
(a, b, c, d) over Rational Field
|
|
235
|
+
sage: A.ideal(B.basis())
|
|
236
|
+
Ideal (b, c + d) of Ideal (b, c, d) of Lie algebra on 4 generators
|
|
237
|
+
(a, b, c, d) over Rational Field
|
|
238
|
+
"""
|
|
239
|
+
if isinstance(ambient, LieSubalgebra_finite_dimensional_with_basis):
|
|
240
|
+
ambient = ambient._ambient
|
|
241
|
+
if isinstance(gens, LieSubalgebra_finite_dimensional_with_basis):
|
|
242
|
+
if gens._ideal_of is ideal_of:
|
|
243
|
+
return gens
|
|
244
|
+
gens = gens.lie_algebra_generators()
|
|
245
|
+
if isinstance(gens, Element):
|
|
246
|
+
gens = [gens]
|
|
247
|
+
new_gens = []
|
|
248
|
+
|
|
249
|
+
# make sure all elements belong to the ambient Lie algebra
|
|
250
|
+
for gen in gens:
|
|
251
|
+
if isinstance(gen, LieSubalgebra_finite_dimensional_with_basis):
|
|
252
|
+
new_gens.extend(ambient(b) for b in gen.basis())
|
|
253
|
+
elif not gen.is_zero():
|
|
254
|
+
new_gens.append(ambient(gen))
|
|
255
|
+
gens = tuple(new_gens)
|
|
256
|
+
|
|
257
|
+
cat = LieAlgebras(ambient.base_ring()).FiniteDimensional().WithBasis()
|
|
258
|
+
category = cat.Subobjects().or_subcategory(category)
|
|
259
|
+
if ambient in LieAlgebras(ambient.base_ring()).Nilpotent():
|
|
260
|
+
category = category.Nilpotent()
|
|
261
|
+
|
|
262
|
+
return super().__classcall__(cls, ambient, gens, ideal_of,
|
|
263
|
+
order, category)
|
|
264
|
+
|
|
265
|
+
def __init__(self, ambient, gens, ideal_of, order=None, category=None):
|
|
266
|
+
r"""
|
|
267
|
+
Initialize ``self``.
|
|
268
|
+
|
|
269
|
+
TESTS::
|
|
270
|
+
|
|
271
|
+
sage: L.<X,Y,Z> = LieAlgebra(QQ, {('X','Y'): {'Z': 1}})
|
|
272
|
+
sage: S = L.subalgebra(X)
|
|
273
|
+
sage: TestSuite(S).run()
|
|
274
|
+
sage: I = L.ideal(X)
|
|
275
|
+
sage: TestSuite(I).run()
|
|
276
|
+
|
|
277
|
+
Check that :issue:`34006` is fixed::
|
|
278
|
+
|
|
279
|
+
sage: S.gens()[0].parent() is S
|
|
280
|
+
True
|
|
281
|
+
"""
|
|
282
|
+
self._ambient = ambient
|
|
283
|
+
self._ideal_of = ideal_of
|
|
284
|
+
|
|
285
|
+
# initialize helper variables for ordering
|
|
286
|
+
if order is None:
|
|
287
|
+
if hasattr(ambient, "_basis_key"):
|
|
288
|
+
order = ambient._basis_key
|
|
289
|
+
else:
|
|
290
|
+
order = lambda x: x
|
|
291
|
+
self._order = order
|
|
292
|
+
self._reversed_indices = sorted(ambient.indices(), key=order,
|
|
293
|
+
reverse=True)
|
|
294
|
+
# helper to reorder a vector that has been jumbled by the above
|
|
295
|
+
self._reorganized_indices = [self._reversed_indices.index(i)
|
|
296
|
+
for i in ambient.indices()]
|
|
297
|
+
|
|
298
|
+
super().__init__(ambient.base_ring(), category=category)
|
|
299
|
+
|
|
300
|
+
self._gens = tuple([self.element_class(self, g) for g in gens])
|
|
301
|
+
|
|
302
|
+
# register a coercion to the ambient Lie algebra
|
|
303
|
+
H = Hom(self, ambient)
|
|
304
|
+
f = SetMorphism(H, self.lift)
|
|
305
|
+
ambient.register_coercion(f)
|
|
306
|
+
|
|
307
|
+
def __contains__(self, x):
|
|
308
|
+
r"""
|
|
309
|
+
Return ``True`` if ``x`` is an element of ``self``.
|
|
310
|
+
|
|
311
|
+
EXAMPLES:
|
|
312
|
+
|
|
313
|
+
Elements of the ambient Lie algebra are contained in the subalgebra
|
|
314
|
+
if they are iterated brackets of the generators::
|
|
315
|
+
|
|
316
|
+
sage: sc = {('x','y'): {'z': 1}, ('x','z'): {'w': 1}}
|
|
317
|
+
sage: L.<x,y,z,w,u> = LieAlgebra(QQ, sc)
|
|
318
|
+
sage: S = L.subalgebra([x, y])
|
|
319
|
+
sage: z in S
|
|
320
|
+
True
|
|
321
|
+
sage: w in S
|
|
322
|
+
True
|
|
323
|
+
sage: u in S
|
|
324
|
+
False
|
|
325
|
+
|
|
326
|
+
TESTS::
|
|
327
|
+
|
|
328
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
329
|
+
sage: I = L.subalgebra(x)
|
|
330
|
+
sage: I(x) in I
|
|
331
|
+
True
|
|
332
|
+
"""
|
|
333
|
+
if x in self._ambient:
|
|
334
|
+
x = self._ambient(x)
|
|
335
|
+
return x.to_vector() in self.module()
|
|
336
|
+
return super().__contains__(x)
|
|
337
|
+
|
|
338
|
+
def __getitem__(self, x):
|
|
339
|
+
r"""
|
|
340
|
+
If `x` is a pair `(a, b)`, return the Lie bracket `[a, b]`.
|
|
341
|
+
Otherwise try to return the `x`-th element of ``self``.
|
|
342
|
+
|
|
343
|
+
This replicates the convenience syntax for Lie brackets of Lie algebras.
|
|
344
|
+
|
|
345
|
+
EXAMPLES::
|
|
346
|
+
|
|
347
|
+
sage: L.<x,y, z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
348
|
+
sage: S = L.subalgebra([x, y])
|
|
349
|
+
sage: a = S(x); b = S(y)
|
|
350
|
+
sage: S[a, b]
|
|
351
|
+
z
|
|
352
|
+
sage: S[a, a + S[a,b]]
|
|
353
|
+
0
|
|
354
|
+
"""
|
|
355
|
+
if isinstance(x, tuple) and len(x) == 2:
|
|
356
|
+
return self(x[0])._bracket_(self(x[1]))
|
|
357
|
+
return super().__getitem__(x)
|
|
358
|
+
|
|
359
|
+
def _repr_(self):
|
|
360
|
+
r"""
|
|
361
|
+
Return a string representation of ``self``.
|
|
362
|
+
|
|
363
|
+
EXAMPLES::
|
|
364
|
+
|
|
365
|
+
sage: L.<X,Y> = LieAlgebra(QQ, abelian=True)
|
|
366
|
+
sage: L.subalgebra([X, Y])
|
|
367
|
+
Subalgebra generated by (X, Y) of Abelian Lie algebra on 2 generators (X, Y) over Rational Field
|
|
368
|
+
sage: L.ideal([X, Y])
|
|
369
|
+
Ideal (X, Y) of Abelian Lie algebra on 2 generators (X, Y) over Rational Field
|
|
370
|
+
"""
|
|
371
|
+
if self._ideal_of is not None:
|
|
372
|
+
return "Ideal {} of {}".format(self._repr_short(), self._ideal_of)
|
|
373
|
+
|
|
374
|
+
return "Subalgebra generated by {} of {}".format(self._repr_short(), self.ambient())
|
|
375
|
+
|
|
376
|
+
def _repr_short(self):
|
|
377
|
+
"""
|
|
378
|
+
Represent the list of generators.
|
|
379
|
+
|
|
380
|
+
EXAMPLES::
|
|
381
|
+
|
|
382
|
+
sage: L.<X,Y> = LieAlgebra(QQ, abelian=True)
|
|
383
|
+
sage: L.ideal([X, Y])._repr_short()
|
|
384
|
+
'(X, Y)'
|
|
385
|
+
sage: L.ideal(X)._repr_short()
|
|
386
|
+
'(X)'
|
|
387
|
+
sage: L.subalgebra(X)._repr_short()
|
|
388
|
+
'(X)'
|
|
389
|
+
"""
|
|
390
|
+
return '(%s)' % (', '.join(str(X) for X in self.gens()))
|
|
391
|
+
|
|
392
|
+
def _an_element_(self):
|
|
393
|
+
r"""
|
|
394
|
+
Return an element of ``self``.
|
|
395
|
+
|
|
396
|
+
EXAMPLES::
|
|
397
|
+
|
|
398
|
+
sage: L.<X,Y> = LieAlgebra(QQ, abelian=True)
|
|
399
|
+
sage: S = L.subalgebra([X, Y])
|
|
400
|
+
sage: S._an_element_()
|
|
401
|
+
X
|
|
402
|
+
"""
|
|
403
|
+
return next(iter(self.lie_algebra_generators()))
|
|
404
|
+
|
|
405
|
+
def _element_constructor_(self, x):
|
|
406
|
+
"""
|
|
407
|
+
Convert ``x`` into ``self``.
|
|
408
|
+
|
|
409
|
+
EXAMPLES:
|
|
410
|
+
|
|
411
|
+
Elements of subalgebras are created directly from elements
|
|
412
|
+
of the ambient Lie algebra::
|
|
413
|
+
|
|
414
|
+
sage: L.<x,y,z,w> = LieAlgebra(ZZ, {('x','y'): {'z': 1}})
|
|
415
|
+
sage: S = L.subalgebra([x, y])
|
|
416
|
+
sage: S(y)
|
|
417
|
+
y
|
|
418
|
+
sage: S(y).parent()
|
|
419
|
+
Subalgebra generated by (x, y) of Lie algebra on 4 generators (x, y, z, w) over Integer Ring
|
|
420
|
+
|
|
421
|
+
A vector contained in the module corresponding to the subalgebra is
|
|
422
|
+
interpreted as a coordinate vector::
|
|
423
|
+
|
|
424
|
+
sage: S.module()
|
|
425
|
+
Free module of degree 4 and rank 3 over Integer Ring
|
|
426
|
+
User basis matrix:
|
|
427
|
+
[1 0 0 0]
|
|
428
|
+
[0 1 0 0]
|
|
429
|
+
[0 0 1 0]
|
|
430
|
+
sage: S(vector(ZZ, [2, 3, 5, 0]))
|
|
431
|
+
2*x + 3*y + 5*z
|
|
432
|
+
|
|
433
|
+
A list of 2 elements is interpreted as a Lie bracket::
|
|
434
|
+
|
|
435
|
+
sage: S([S(x), S(y)])
|
|
436
|
+
z
|
|
437
|
+
sage: S([S(x), S(y)]) == S(L[x, y])
|
|
438
|
+
True
|
|
439
|
+
"""
|
|
440
|
+
P = parent(x)
|
|
441
|
+
if P is self:
|
|
442
|
+
return x
|
|
443
|
+
if P == self._ambient:
|
|
444
|
+
return self.retract(x)
|
|
445
|
+
if isinstance(P, type(self)) and P._ambient == self._ambient:
|
|
446
|
+
return self.retract(x.value)
|
|
447
|
+
|
|
448
|
+
if x in self.module():
|
|
449
|
+
return self.from_vector(x)
|
|
450
|
+
|
|
451
|
+
if isinstance(x, list) and len(x) == 2:
|
|
452
|
+
return self(x[0])._bracket_(self(x[1]))
|
|
453
|
+
|
|
454
|
+
return super()._element_constructor_(x)
|
|
455
|
+
|
|
456
|
+
def _to_m(self, X):
|
|
457
|
+
r"""
|
|
458
|
+
Return the vector of an element of the ambient Lie algebra with indices
|
|
459
|
+
reorganized in decreasing order according to ``self._order``.
|
|
460
|
+
|
|
461
|
+
This is used internally for submodule computations, so that the pivot
|
|
462
|
+
elements in the echelon form are given by
|
|
463
|
+
:meth:`~sage.categories.modules_with_basis.ModulesWithBasis.ElementMethods.leading_term`
|
|
464
|
+
using the sort key ``self._order``.
|
|
465
|
+
|
|
466
|
+
INPUT:
|
|
467
|
+
|
|
468
|
+
- ``X`` -- an element of the ambient Lie algebra
|
|
469
|
+
|
|
470
|
+
EXAMPLES:
|
|
471
|
+
|
|
472
|
+
If the basis is in increasing order, it is reversed::
|
|
473
|
+
|
|
474
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
475
|
+
sage: I = L.ideal([x, z])
|
|
476
|
+
sage: el = x + 2*y + 3*z
|
|
477
|
+
sage: el.to_vector()
|
|
478
|
+
(1, 2, 3)
|
|
479
|
+
sage: I._to_m(el)
|
|
480
|
+
(3, 2, 1)
|
|
481
|
+
|
|
482
|
+
This follows the reverse order of the ambient basis order::
|
|
483
|
+
|
|
484
|
+
sage: L.<x,z,y> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
485
|
+
sage: I = L.ideal([x, z])
|
|
486
|
+
sage: el = x + 2*y + 3*z
|
|
487
|
+
sage: el.to_vector()
|
|
488
|
+
(1, 3, 2)
|
|
489
|
+
sage: I._to_m(el)
|
|
490
|
+
(2, 3, 1)
|
|
491
|
+
"""
|
|
492
|
+
mc = X.monomial_coefficients()
|
|
493
|
+
M = self._ambient.module()
|
|
494
|
+
R = M.base_ring()
|
|
495
|
+
B = M.basis()
|
|
496
|
+
return M.sum(R(mc[self._reversed_indices[i]]) * B[i]
|
|
497
|
+
for i in range(len(B)) if self._reversed_indices[i] in mc)
|
|
498
|
+
|
|
499
|
+
def _from_m(self, v):
|
|
500
|
+
r"""
|
|
501
|
+
Return the element of the ambient Lie algebra from a reorganized vector.
|
|
502
|
+
|
|
503
|
+
This is used internally for submodule computations, so that the pivot
|
|
504
|
+
elements in the echelon form are given by
|
|
505
|
+
:meth:`~sage.categories.modules_with_basis.ModulesWithBasis.ElementMethods.leading_term`
|
|
506
|
+
using the sort key `self._order`.
|
|
507
|
+
|
|
508
|
+
INPUT:
|
|
509
|
+
|
|
510
|
+
- ``v`` -- a vector
|
|
511
|
+
|
|
512
|
+
EXAMPLES:
|
|
513
|
+
|
|
514
|
+
Unscrambling of a vector when the basis is in increasing order::
|
|
515
|
+
|
|
516
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
517
|
+
sage: I = L.ideal([x, z])
|
|
518
|
+
sage: I._from_m([3, 2, 1])
|
|
519
|
+
x + 2*y + 3*z
|
|
520
|
+
|
|
521
|
+
The map is the inverse of :meth:`_to_m`::
|
|
522
|
+
|
|
523
|
+
sage: L.<c,a,e,f,b,d> = LieAlgebra(QQ, abelian=True)
|
|
524
|
+
sage: S = L.subalgebra(L.basis().list())
|
|
525
|
+
sage: v = S._to_m(c + 2*a + 3*e + 4*f + 5*b + 6*d); v
|
|
526
|
+
(6, 5, 4, 3, 2, 1)
|
|
527
|
+
sage: S._from_m(v)
|
|
528
|
+
c + 2*a + 3*e + 4*f + 5*b + 6*d
|
|
529
|
+
sage: all(S._from_m(S._to_m(X)) == X for X in L.some_elements())
|
|
530
|
+
True
|
|
531
|
+
"""
|
|
532
|
+
L = self.ambient()
|
|
533
|
+
M = L.module()
|
|
534
|
+
R = M.base_ring()
|
|
535
|
+
v_self = M.coordinate_vector(v)
|
|
536
|
+
B = M.basis()
|
|
537
|
+
v_sorted = M.sum(R(v_self[self._reorganized_indices[i]]) * B[i]
|
|
538
|
+
for i in range(len(B)))
|
|
539
|
+
return L.from_vector(v_sorted)
|
|
540
|
+
|
|
541
|
+
@lazy_attribute
|
|
542
|
+
def _indices(self):
|
|
543
|
+
r"""
|
|
544
|
+
Return the set of indices for the basis of ``self``.
|
|
545
|
+
|
|
546
|
+
EXAMPLES::
|
|
547
|
+
|
|
548
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, abelian=True)
|
|
549
|
+
sage: S = L.subalgebra([x, y])
|
|
550
|
+
sage: S._indices
|
|
551
|
+
{'x', 'y'}
|
|
552
|
+
sage: [S.basis()[k] for k in S._indices]
|
|
553
|
+
[x, y]
|
|
554
|
+
"""
|
|
555
|
+
return FiniteEnumeratedSet(self.basis().keys())
|
|
556
|
+
|
|
557
|
+
def indices(self):
|
|
558
|
+
r"""
|
|
559
|
+
Return the set of indices for the basis of ``self``.
|
|
560
|
+
|
|
561
|
+
EXAMPLES::
|
|
562
|
+
|
|
563
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, abelian=True)
|
|
564
|
+
sage: S = L.subalgebra([x+y, z])
|
|
565
|
+
sage: S.indices()
|
|
566
|
+
{'y', 'z'}
|
|
567
|
+
sage: [S.basis()[k] for k in S.indices()]
|
|
568
|
+
[x + y, z]
|
|
569
|
+
"""
|
|
570
|
+
return self._indices
|
|
571
|
+
|
|
572
|
+
@cached_method
|
|
573
|
+
def zero(self):
|
|
574
|
+
r"""
|
|
575
|
+
Return the element `0`.
|
|
576
|
+
|
|
577
|
+
EXAMPLES::
|
|
578
|
+
|
|
579
|
+
sage: L.<x,y> = LieAlgebra(QQ, abelian=True)
|
|
580
|
+
sage: S = L.subalgebra(x)
|
|
581
|
+
sage: S.zero()
|
|
582
|
+
0
|
|
583
|
+
sage: S.zero() == S(L.zero())
|
|
584
|
+
True
|
|
585
|
+
"""
|
|
586
|
+
return self.element_class(self, self.ambient().zero())
|
|
587
|
+
|
|
588
|
+
def ambient(self):
|
|
589
|
+
r"""
|
|
590
|
+
Return the ambient Lie algebra of ``self``.
|
|
591
|
+
|
|
592
|
+
EXAMPLES::
|
|
593
|
+
|
|
594
|
+
sage: L.<x,y> = LieAlgebra(QQ, abelian=True)
|
|
595
|
+
sage: S = L.subalgebra(x)
|
|
596
|
+
sage: S.ambient() is L
|
|
597
|
+
True
|
|
598
|
+
"""
|
|
599
|
+
return self._ambient
|
|
600
|
+
|
|
601
|
+
def lift(self, X):
|
|
602
|
+
r"""
|
|
603
|
+
Coerce an element ``X`` of ``self`` into the ambient Lie algebra.
|
|
604
|
+
|
|
605
|
+
INPUT:
|
|
606
|
+
|
|
607
|
+
- ``X`` -- an element of ``self``
|
|
608
|
+
|
|
609
|
+
EXAMPLES::
|
|
610
|
+
|
|
611
|
+
sage: L.<x,y> = LieAlgebra(QQ, abelian=True)
|
|
612
|
+
sage: S = L.subalgebra(x)
|
|
613
|
+
sage: sx = S(x); sx
|
|
614
|
+
x
|
|
615
|
+
sage: sx.parent()
|
|
616
|
+
Subalgebra generated by (x) of Abelian Lie algebra on 2 generators (x, y) over Rational Field
|
|
617
|
+
sage: a = S.lift(sx); a
|
|
618
|
+
x
|
|
619
|
+
sage: a.parent()
|
|
620
|
+
Abelian Lie algebra on 2 generators (x, y) over Rational Field
|
|
621
|
+
"""
|
|
622
|
+
return X.value
|
|
623
|
+
|
|
624
|
+
def retract(self, X):
|
|
625
|
+
r"""
|
|
626
|
+
Retract ``X`` to ``self``.
|
|
627
|
+
|
|
628
|
+
INPUT:
|
|
629
|
+
|
|
630
|
+
- ``X`` -- an element of the ambient Lie algebra
|
|
631
|
+
|
|
632
|
+
EXAMPLES:
|
|
633
|
+
|
|
634
|
+
Retraction to a subalgebra of a free nilpotent Lie algebra::
|
|
635
|
+
|
|
636
|
+
sage: L = LieAlgebra(QQ, 3, step=2)
|
|
637
|
+
sage: L.inject_variables()
|
|
638
|
+
Defining X_1, X_2, X_3, X_12, X_13, X_23
|
|
639
|
+
sage: S = L.subalgebra([X_1, X_2])
|
|
640
|
+
sage: el = S.retract(2*X_1 + 3*X_2 + 5*X_12); el
|
|
641
|
+
2*X_1 + 3*X_2 + 5*X_12
|
|
642
|
+
sage: el.parent()
|
|
643
|
+
Subalgebra generated by (X_1, X_2) of Free Nilpotent Lie algebra on
|
|
644
|
+
6 generators (X_1, X_2, X_3, X_12, X_13, X_23) over Rational Field
|
|
645
|
+
|
|
646
|
+
Retraction raises an error if the element is not contained in the
|
|
647
|
+
subalgebra::
|
|
648
|
+
|
|
649
|
+
sage: S.retract(X_3)
|
|
650
|
+
Traceback (most recent call last):
|
|
651
|
+
...
|
|
652
|
+
ValueError: the element X_3 is not in Subalgebra generated
|
|
653
|
+
by (X_1, X_2) of Free Nilpotent Lie algebra on 6 generators
|
|
654
|
+
(X_1, X_2, X_3, X_12, X_13, X_23) over Rational Field
|
|
655
|
+
"""
|
|
656
|
+
X = self._ambient(X)
|
|
657
|
+
if X not in self:
|
|
658
|
+
raise ValueError("the element %s is not in %s" % (X, self))
|
|
659
|
+
|
|
660
|
+
return self.element_class(self, X)
|
|
661
|
+
|
|
662
|
+
def gens(self) -> tuple:
|
|
663
|
+
r"""
|
|
664
|
+
Return the generating set of ``self``.
|
|
665
|
+
|
|
666
|
+
EXAMPLES::
|
|
667
|
+
|
|
668
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
669
|
+
sage: S = L.subalgebra(x)
|
|
670
|
+
sage: S.gens()
|
|
671
|
+
(x,)
|
|
672
|
+
"""
|
|
673
|
+
return self._gens
|
|
674
|
+
|
|
675
|
+
def lie_algebra_generators(self):
|
|
676
|
+
r"""
|
|
677
|
+
Return the generating set of ``self`` as a Lie algebra.
|
|
678
|
+
|
|
679
|
+
EXAMPLES:
|
|
680
|
+
|
|
681
|
+
The Lie algebra generators of a subalgebra are the original generators::
|
|
682
|
+
|
|
683
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
684
|
+
sage: S = L.subalgebra(x)
|
|
685
|
+
sage: S.lie_algebra_generators()
|
|
686
|
+
(x,)
|
|
687
|
+
|
|
688
|
+
The Lie algebra generators of an ideal is usually a larger set::
|
|
689
|
+
|
|
690
|
+
sage: I = L.ideal(x)
|
|
691
|
+
sage: I.lie_algebra_generators()
|
|
692
|
+
Finite family {'x': x, 'z': z}
|
|
693
|
+
"""
|
|
694
|
+
if self._ideal_of is not None:
|
|
695
|
+
return self.basis()
|
|
696
|
+
return self._gens
|
|
697
|
+
|
|
698
|
+
@cached_method
|
|
699
|
+
def basis(self):
|
|
700
|
+
r"""
|
|
701
|
+
Return a basis of ``self``.
|
|
702
|
+
|
|
703
|
+
EXAMPLES:
|
|
704
|
+
|
|
705
|
+
A basis of a subalgebra::
|
|
706
|
+
|
|
707
|
+
sage: sc = {('a','b'): {'c': 1}, ('a','c'): {'d': 1}}
|
|
708
|
+
sage: L.<a,b,c,d> = LieAlgebra(QQ, sc)
|
|
709
|
+
sage: L.subalgebra([a + b, c + d]).basis()
|
|
710
|
+
Finite family {'b': a + b, 'c': c, 'd': d}
|
|
711
|
+
|
|
712
|
+
A basis of an ideal::
|
|
713
|
+
|
|
714
|
+
sage: sc = {('x','y'): {'z': 1}, ('x','z'): {'w': 1}}
|
|
715
|
+
sage: L.<x,y,z,w> = LieAlgebra(QQ, sc)
|
|
716
|
+
sage: L.ideal([x + y + z + w]).basis()
|
|
717
|
+
Finite family {'y': x + y, 'z': z, 'w': w}
|
|
718
|
+
|
|
719
|
+
This also works for Lie algebras whose natural basis elements
|
|
720
|
+
are not comparable (but have a well-defined basis ordering)::
|
|
721
|
+
|
|
722
|
+
sage: sl3 = LieAlgebra(QQ, cartan_type=['A',2])
|
|
723
|
+
sage: D = sl3.derived_subalgebra()
|
|
724
|
+
sage: len(D.basis())
|
|
725
|
+
8
|
|
726
|
+
sage: e = list(sl3.e())
|
|
727
|
+
sage: sl3.ideal(e).dimension()
|
|
728
|
+
8
|
|
729
|
+
sage: sl3.subalgebra(e).dimension()
|
|
730
|
+
3
|
|
731
|
+
"""
|
|
732
|
+
ambient = self._ambient
|
|
733
|
+
if self._ideal_of is not None:
|
|
734
|
+
L = self._ideal_of
|
|
735
|
+
B = [self._to_m(ambient(X)) for X in L.basis()]
|
|
736
|
+
else:
|
|
737
|
+
L = ambient
|
|
738
|
+
B = [self._to_m(X) for X in ambient.basis()]
|
|
739
|
+
|
|
740
|
+
m = ambient.module()
|
|
741
|
+
sm = m.submodule([self._to_m(X.value) for X in self.gens()])
|
|
742
|
+
d = 0
|
|
743
|
+
|
|
744
|
+
while sm.dimension() > d:
|
|
745
|
+
d = sm.dimension()
|
|
746
|
+
SB = sm.basis()
|
|
747
|
+
if self._ideal_of is None:
|
|
748
|
+
B = SB
|
|
749
|
+
|
|
750
|
+
brackets = [self._to_m(ambient.bracket(self._from_m(v), self._from_m(w)))
|
|
751
|
+
for v in B for w in SB]
|
|
752
|
+
sm = m.submodule(sm.basis() + brackets)
|
|
753
|
+
|
|
754
|
+
basis = [self.element_class(self, self._from_m(v))
|
|
755
|
+
for v in sm.echelonized_basis()]
|
|
756
|
+
|
|
757
|
+
indices = [self.lift(X).leading_support(key=self._order) for X in basis]
|
|
758
|
+
basis = dict(zip(indices, basis))
|
|
759
|
+
indices.sort(key=self._order)
|
|
760
|
+
|
|
761
|
+
return Family(indices, basis.__getitem__)
|
|
762
|
+
|
|
763
|
+
@cached_method
|
|
764
|
+
def leading_monomials(self):
|
|
765
|
+
r"""
|
|
766
|
+
Return the set of leading monomials of the basis of ``self``.
|
|
767
|
+
|
|
768
|
+
EXAMPLES:
|
|
769
|
+
|
|
770
|
+
A basis of an ideal and the corresponding leading monomials::
|
|
771
|
+
|
|
772
|
+
sage: sc = {('a','b'): {'c': 2}, ('a','c'): {'d': 4}}
|
|
773
|
+
sage: L.<a,b,c,d> = LieAlgebra(ZZ, sc)
|
|
774
|
+
sage: I = L.ideal(a + b)
|
|
775
|
+
sage: I.basis()
|
|
776
|
+
Finite family {'b': a + b, 'c': 2*c, 'd': 4*d}
|
|
777
|
+
sage: I.leading_monomials()
|
|
778
|
+
Family (b, c, d)
|
|
779
|
+
|
|
780
|
+
A different ordering can give different leading monomials::
|
|
781
|
+
|
|
782
|
+
sage: key = lambda s: ['d','c','b','a'].index(s)
|
|
783
|
+
sage: I = L.ideal(a + b, order=key)
|
|
784
|
+
sage: I.basis()
|
|
785
|
+
Finite family {'d': 4*d, 'c': 2*c, 'a': a + b}
|
|
786
|
+
sage: I.leading_monomials()
|
|
787
|
+
Family (d, c, a)
|
|
788
|
+
"""
|
|
789
|
+
return Family(self.lift(X).leading_monomial(key=self._order)
|
|
790
|
+
for X in self.basis())
|
|
791
|
+
|
|
792
|
+
def from_vector(self, v, order=None, coerce=False):
|
|
793
|
+
r"""
|
|
794
|
+
Return the element of ``self`` corresponding to the vector ``v``.
|
|
795
|
+
|
|
796
|
+
INPUT:
|
|
797
|
+
|
|
798
|
+
- ``v`` -- a vector in ``self.module()`` or ``self.ambient().module()``
|
|
799
|
+
|
|
800
|
+
EXAMPLES:
|
|
801
|
+
|
|
802
|
+
An element from a vector of the intrinsic module::
|
|
803
|
+
|
|
804
|
+
sage: L.<X,Y,Z> = LieAlgebra(ZZ, abelian=True)
|
|
805
|
+
sage: L.dimension()
|
|
806
|
+
3
|
|
807
|
+
sage: S = L.subalgebra([X, Y])
|
|
808
|
+
sage: S.dimension()
|
|
809
|
+
2
|
|
810
|
+
sage: el = S.from_vector([1, 2]); el
|
|
811
|
+
X + 2*Y
|
|
812
|
+
sage: el.parent() == S
|
|
813
|
+
True
|
|
814
|
+
|
|
815
|
+
An element from a vector of the ambient module
|
|
816
|
+
|
|
817
|
+
sage: el = S.from_vector([1, 2, 0]); el
|
|
818
|
+
X + 2*Y
|
|
819
|
+
sage: el.parent() == S
|
|
820
|
+
True
|
|
821
|
+
"""
|
|
822
|
+
if len(v) == self._ambient.dimension():
|
|
823
|
+
return self.retract(self._ambient.from_vector(v))
|
|
824
|
+
return super().from_vector(v)
|
|
825
|
+
|
|
826
|
+
def basis_matrix(self):
|
|
827
|
+
r"""
|
|
828
|
+
Return the basis matrix of ``self`` as a submodule
|
|
829
|
+
of the ambient Lie algebra.
|
|
830
|
+
|
|
831
|
+
EXAMPLES::
|
|
832
|
+
|
|
833
|
+
sage: L.<X,Y,Z> = LieAlgebra(ZZ, {('X','Y'): {'Z': 3}})
|
|
834
|
+
sage: S1 = L.subalgebra([4*X + Y, Y])
|
|
835
|
+
sage: S1.basis_matrix()
|
|
836
|
+
[ 4 0 0]
|
|
837
|
+
[ 0 1 0]
|
|
838
|
+
[ 0 0 12]
|
|
839
|
+
sage: K.<X,Y,Z> = LieAlgebra(QQ, {('X','Y'): {'Z': 3}})
|
|
840
|
+
sage: S2 = K.subalgebra([4*X + Y, Y])
|
|
841
|
+
sage: S2.basis_matrix()
|
|
842
|
+
[1 0 0]
|
|
843
|
+
[0 1 0]
|
|
844
|
+
[0 0 1]
|
|
845
|
+
"""
|
|
846
|
+
return self.module().basis_matrix()
|
|
847
|
+
|
|
848
|
+
@cached_method
|
|
849
|
+
def module(self, sparse=False):
|
|
850
|
+
r"""
|
|
851
|
+
Return the submodule of the ambient Lie algebra
|
|
852
|
+
corresponding to ``self``.
|
|
853
|
+
|
|
854
|
+
EXAMPLES::
|
|
855
|
+
|
|
856
|
+
sage: L.<X,Y,Z> = LieAlgebra(ZZ, {('X','Y'): {'Z': 3}})
|
|
857
|
+
sage: S = L.subalgebra([X, Y])
|
|
858
|
+
sage: S.module()
|
|
859
|
+
Free module of degree 3 and rank 3 over Integer Ring
|
|
860
|
+
User basis matrix:
|
|
861
|
+
[1 0 0]
|
|
862
|
+
[0 1 0]
|
|
863
|
+
[0 0 3]
|
|
864
|
+
"""
|
|
865
|
+
try:
|
|
866
|
+
m = self._ambient.module(sparse=sparse)
|
|
867
|
+
except TypeError:
|
|
868
|
+
m = self._ambient.module()
|
|
869
|
+
ambientbasis = [self.lift(X).to_vector() for X in self.basis()]
|
|
870
|
+
return m.submodule_with_basis(ambientbasis)
|
|
871
|
+
|
|
872
|
+
@cached_method
|
|
873
|
+
def is_ideal(self, A):
|
|
874
|
+
"""
|
|
875
|
+
Return if ``self`` is an ideal of ``A``.
|
|
876
|
+
|
|
877
|
+
EXAMPLES:
|
|
878
|
+
|
|
879
|
+
Some subalgebras are ideals::
|
|
880
|
+
|
|
881
|
+
sage: L.<x,y,z> = LieAlgebra(QQ, {('x','y'): {'z': 1}})
|
|
882
|
+
sage: S1 = L.subalgebra([x])
|
|
883
|
+
sage: S1.is_ideal(L)
|
|
884
|
+
False
|
|
885
|
+
sage: S2 = L.subalgebra([x, y])
|
|
886
|
+
sage: S2.is_ideal(L)
|
|
887
|
+
True
|
|
888
|
+
sage: S3 = L.subalgebra([y, z])
|
|
889
|
+
sage: S3.is_ideal(L)
|
|
890
|
+
True
|
|
891
|
+
|
|
892
|
+
All ideals are ideals::
|
|
893
|
+
|
|
894
|
+
sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x': 1}})
|
|
895
|
+
sage: I = L.ideal(x)
|
|
896
|
+
sage: I.is_ideal(L)
|
|
897
|
+
True
|
|
898
|
+
sage: I.is_ideal(I)
|
|
899
|
+
True
|
|
900
|
+
|
|
901
|
+
TESTS::
|
|
902
|
+
|
|
903
|
+
sage: L.<x,y> = LieAlgebra(QQ, {('x','y'): {'x': 1}})
|
|
904
|
+
sage: I = L.ideal(x)
|
|
905
|
+
sage: L.is_ideal(I)
|
|
906
|
+
False
|
|
907
|
+
"""
|
|
908
|
+
if A is self._ideal_of:
|
|
909
|
+
return True
|
|
910
|
+
return super().is_ideal(A)
|
|
911
|
+
|
|
912
|
+
class Element(LieSubalgebraElementWrapper):
|
|
913
|
+
def adjoint_matrix(self, sparse=False):
|
|
914
|
+
"""
|
|
915
|
+
Return the matrix of the adjoint action of ``self``.
|
|
916
|
+
|
|
917
|
+
EXAMPLES::
|
|
918
|
+
|
|
919
|
+
sage: MS = MatrixSpace(QQ, 2)
|
|
920
|
+
sage: m = MS([[0, -1], [1, 0]])
|
|
921
|
+
sage: L = LieAlgebra(associative=MS)
|
|
922
|
+
sage: S = L.subalgebra([m])
|
|
923
|
+
sage: S.basis()
|
|
924
|
+
Finite family {(1, 0): [ 0 -1]
|
|
925
|
+
[ 1 0]}
|
|
926
|
+
sage: x = S.basis()[1,0]
|
|
927
|
+
sage: x.parent() is S
|
|
928
|
+
True
|
|
929
|
+
sage: x.adjoint_matrix()
|
|
930
|
+
[0]
|
|
931
|
+
|
|
932
|
+
sage: m1 = MS([[0, 1], [0, 0]])
|
|
933
|
+
sage: m2 = MS([[0, 0], [1, 0]])
|
|
934
|
+
sage: S = L.subalgebra([m1, m2])
|
|
935
|
+
sage: e,f = S.lie_algebra_generators()
|
|
936
|
+
sage: ascii_art([b.value.value for b in S.basis()])
|
|
937
|
+
[ [0 1] [0 0] [-1 0] ]
|
|
938
|
+
[ [0 0], [1 0], [ 0 1] ]
|
|
939
|
+
sage: E = e.adjoint_matrix(); E
|
|
940
|
+
[ 0 0 2]
|
|
941
|
+
[ 0 0 0]
|
|
942
|
+
[ 0 -1 0]
|
|
943
|
+
sage: F = f.adjoint_matrix(); F
|
|
944
|
+
[ 0 0 0]
|
|
945
|
+
[ 0 0 -2]
|
|
946
|
+
[ 1 0 0]
|
|
947
|
+
sage: h = e.bracket(f)
|
|
948
|
+
sage: E * F - F * E == h.adjoint_matrix()
|
|
949
|
+
True
|
|
950
|
+
|
|
951
|
+
TESTS:
|
|
952
|
+
|
|
953
|
+
Check that :issue:`34006` is fixed::
|
|
954
|
+
|
|
955
|
+
sage: MS = MatrixSpace(QQ, 2)
|
|
956
|
+
sage: m = MS([[0, -1], [1, 0]])
|
|
957
|
+
sage: L = LieAlgebra(associative=MS)
|
|
958
|
+
sage: S = L.subalgebra([m])
|
|
959
|
+
sage: S.killing_form_matrix()
|
|
960
|
+
[0]
|
|
961
|
+
"""
|
|
962
|
+
P = self.parent()
|
|
963
|
+
basis = P.basis()
|
|
964
|
+
M = P.module(sparse=sparse)
|
|
965
|
+
return matrix(self.base_ring(),
|
|
966
|
+
[M.coordinate_vector(P.bracket(self, b).to_vector(sparse=sparse))
|
|
967
|
+
for b in basis], sparse=sparse).transpose()
|