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,780 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Tensor products of free modules
|
|
4
|
+
|
|
5
|
+
The class :class:`TensorFreeModule` implements tensor products of the type
|
|
6
|
+
|
|
7
|
+
.. MATH::
|
|
8
|
+
|
|
9
|
+
T^{(k,l)}(M) = \underbrace{M\otimes\cdots\otimes M}_{k\ \; \mbox{times}}
|
|
10
|
+
\otimes \underbrace{M^*\otimes\cdots\otimes M^*}_{l\ \; \mbox{times}},
|
|
11
|
+
|
|
12
|
+
where `M` is a free module of finite rank over a commutative ring `R` and
|
|
13
|
+
`M^*=\mathrm{Hom}_R(M,R)` is the dual of `M`.
|
|
14
|
+
Note that `T^{(1,0)}(M) = M` and `T^{(0,1)}(M) = M^*`.
|
|
15
|
+
|
|
16
|
+
Thanks to the canonical isomorphism `M^{**} \simeq M` (which holds since `M`
|
|
17
|
+
is a free module of finite rank), `T^{(k,l)}(M)` can be identified with the
|
|
18
|
+
set of tensors of type `(k,l)` defined as multilinear maps
|
|
19
|
+
|
|
20
|
+
.. MATH::
|
|
21
|
+
|
|
22
|
+
\underbrace{M^*\times\cdots\times M^*}_{k\ \; \mbox{times}}
|
|
23
|
+
\times \underbrace{M\times\cdots\times M}_{l\ \; \mbox{times}}
|
|
24
|
+
\longrightarrow R
|
|
25
|
+
|
|
26
|
+
Accordingly, :class:`TensorFreeModule` is a Sage *parent* class, whose
|
|
27
|
+
*element* class is
|
|
28
|
+
:class:`~sage.tensor.modules.free_module_tensor.FreeModuleTensor`.
|
|
29
|
+
|
|
30
|
+
`T^{(k,l)}(M)` is itself a free module over `R`, of rank `n^{k+l}`, `n`
|
|
31
|
+
being the rank of `M`. Accordingly the class :class:`TensorFreeModule`
|
|
32
|
+
inherits from the class
|
|
33
|
+
:class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule_abstract`.
|
|
34
|
+
|
|
35
|
+
.. TODO::
|
|
36
|
+
|
|
37
|
+
implement more general tensor products, i.e. tensor product of the type
|
|
38
|
+
`M_1\otimes\cdots\otimes M_n`, where the `M_i`'s are `n` free modules of
|
|
39
|
+
finite rank over the same ring `R`.
|
|
40
|
+
|
|
41
|
+
AUTHORS:
|
|
42
|
+
|
|
43
|
+
- Eric Gourgoulhon, Michal Bejger (2014-2015): initial version
|
|
44
|
+
|
|
45
|
+
REFERENCES:
|
|
46
|
+
|
|
47
|
+
- \K. Conrad: *Tensor products* [Con2015]_
|
|
48
|
+
- Chap. 21 (Exer. 4) of R. Godement: *Algebra* [God1968]_
|
|
49
|
+
- Chap. 16 of S. Lang: *Algebra* [Lan2002]_
|
|
50
|
+
"""
|
|
51
|
+
# ****************************************************************************
|
|
52
|
+
# Copyright (C) 2015 Eric Gourgoulhon <eric.gourgoulhon@obspm.fr>
|
|
53
|
+
# Copyright (C) 2015 Michal Bejger <bejger@camk.edu.pl>
|
|
54
|
+
#
|
|
55
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
56
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
57
|
+
# the License, or (at your option) any later version.
|
|
58
|
+
# https://www.gnu.org/licenses/
|
|
59
|
+
# ****************************************************************************
|
|
60
|
+
|
|
61
|
+
from sage.categories.modules import Modules
|
|
62
|
+
from sage.misc.cachefunc import cached_method
|
|
63
|
+
from sage.tensor.modules.finite_rank_free_module import FiniteRankFreeModule_abstract
|
|
64
|
+
from sage.tensor.modules.free_module_tensor import FreeModuleTensor
|
|
65
|
+
from sage.tensor.modules.alternating_contr_tensor import AlternatingContrTensor
|
|
66
|
+
from sage.tensor.modules.free_module_alt_form import FreeModuleAltForm
|
|
67
|
+
from sage.tensor.modules.free_module_morphism import \
|
|
68
|
+
FiniteRankFreeModuleMorphism
|
|
69
|
+
from sage.tensor.modules.free_module_automorphism import FreeModuleAutomorphism
|
|
70
|
+
from sage.tensor.modules.reflexive_module import ReflexiveModule_tensor
|
|
71
|
+
|
|
72
|
+
from .tensor_free_submodule_basis import TensorFreeSubmoduleBasis_sym
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class TensorFreeModule(ReflexiveModule_tensor, FiniteRankFreeModule_abstract):
|
|
76
|
+
r"""
|
|
77
|
+
Class for the free modules over a commutative ring `R` that are
|
|
78
|
+
tensor products of a given free module `M` over `R` with itself and its
|
|
79
|
+
dual `M^*`:
|
|
80
|
+
|
|
81
|
+
.. MATH::
|
|
82
|
+
|
|
83
|
+
T^{(k,l)}(M) = \underbrace{M\otimes\cdots\otimes M}_{k\ \; \mbox{times}}
|
|
84
|
+
\otimes \underbrace{M^*\otimes\cdots\otimes M^*}_{l\ \; \mbox{times}}
|
|
85
|
+
|
|
86
|
+
As recalled above, `T^{(k,l)}(M)` can be canonically identified with the
|
|
87
|
+
set of tensors of type `(k,l)` on `M`.
|
|
88
|
+
|
|
89
|
+
This is a Sage *parent* class, whose *element* class is
|
|
90
|
+
:class:`~sage.tensor.modules.free_module_tensor.FreeModuleTensor`.
|
|
91
|
+
|
|
92
|
+
INPUT:
|
|
93
|
+
|
|
94
|
+
- ``fmodule`` -- free module `M` of finite rank over a commutative ring
|
|
95
|
+
`R`, as an instance of
|
|
96
|
+
:class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule`
|
|
97
|
+
- ``tensor_type`` -- pair ``(k, l)`` with ``k`` being the contravariant
|
|
98
|
+
rank and ``l`` the covariant rank
|
|
99
|
+
- ``name`` -- (default: ``None``) string; name given to the tensor module
|
|
100
|
+
- ``latex_name`` -- (default: ``None``) string; LaTeX symbol to denote the
|
|
101
|
+
tensor module; if none is provided, it is set to ``name``
|
|
102
|
+
|
|
103
|
+
EXAMPLES:
|
|
104
|
+
|
|
105
|
+
Set of tensors of type `(1,2)` on a free `\ZZ`-module of rank 3::
|
|
106
|
+
|
|
107
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
108
|
+
sage: e = M.basis('e')
|
|
109
|
+
sage: from sage.tensor.modules.tensor_free_module import TensorFreeModule
|
|
110
|
+
sage: T = TensorFreeModule(M, (1,2)) ; T
|
|
111
|
+
Free module of type-(1,2) tensors on the
|
|
112
|
+
Rank-3 free module M over the Integer Ring
|
|
113
|
+
|
|
114
|
+
Instead of importing TensorFreeModule in the global name space, it is
|
|
115
|
+
recommended to use the module's method
|
|
116
|
+
:meth:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule.tensor_module`::
|
|
117
|
+
|
|
118
|
+
sage: T = M.tensor_module(1,2) ; T
|
|
119
|
+
Free module of type-(1,2) tensors on the
|
|
120
|
+
Rank-3 free module M over the Integer Ring
|
|
121
|
+
sage: latex(T)
|
|
122
|
+
T^{(1, 2)}\left(M\right)
|
|
123
|
+
|
|
124
|
+
The module ``M`` itself is considered as the set of tensors of
|
|
125
|
+
type `(1,0)`::
|
|
126
|
+
|
|
127
|
+
sage: M is M.tensor_module(1,0)
|
|
128
|
+
True
|
|
129
|
+
|
|
130
|
+
``T`` is a module (actually a free module) over `\ZZ`::
|
|
131
|
+
|
|
132
|
+
sage: T.category()
|
|
133
|
+
Category of tensor products of finite dimensional modules over Integer Ring
|
|
134
|
+
sage: T in Modules(ZZ)
|
|
135
|
+
True
|
|
136
|
+
sage: T.rank()
|
|
137
|
+
27
|
|
138
|
+
sage: T.base_ring()
|
|
139
|
+
Integer Ring
|
|
140
|
+
sage: T.base_module()
|
|
141
|
+
Rank-3 free module M over the Integer Ring
|
|
142
|
+
|
|
143
|
+
``T`` is a *parent* object, whose elements are instances of
|
|
144
|
+
:class:`~sage.tensor.modules.free_module_tensor.FreeModuleTensor`::
|
|
145
|
+
|
|
146
|
+
sage: t = T.an_element() ; t
|
|
147
|
+
Type-(1,2) tensor on the Rank-3 free module M over the Integer Ring
|
|
148
|
+
sage: from sage.tensor.modules.free_module_tensor import FreeModuleTensor
|
|
149
|
+
sage: isinstance(t, FreeModuleTensor)
|
|
150
|
+
True
|
|
151
|
+
sage: t in T
|
|
152
|
+
True
|
|
153
|
+
sage: T.is_parent_of(t)
|
|
154
|
+
True
|
|
155
|
+
|
|
156
|
+
Elements can be constructed from ``T``. In particular, 0 yields
|
|
157
|
+
the zero element of ``T``::
|
|
158
|
+
|
|
159
|
+
sage: T(0)
|
|
160
|
+
Type-(1,2) tensor zero on the Rank-3 free module M over the Integer Ring
|
|
161
|
+
sage: T(0) is T.zero()
|
|
162
|
+
True
|
|
163
|
+
|
|
164
|
+
while nonzero elements are constructed by providing their components in
|
|
165
|
+
a given basis::
|
|
166
|
+
|
|
167
|
+
sage: e
|
|
168
|
+
Basis (e_0,e_1,e_2) on the Rank-3 free module M over the Integer Ring
|
|
169
|
+
sage: comp = [[[i-j+k for k in range(3)] for j in range(3)] for i in range(3)]
|
|
170
|
+
sage: t = T(comp, basis=e, name='t') ; t
|
|
171
|
+
Type-(1,2) tensor t on the Rank-3 free module M over the Integer Ring
|
|
172
|
+
sage: t.comp(e)[:]
|
|
173
|
+
[[[0, 1, 2], [-1, 0, 1], [-2, -1, 0]],
|
|
174
|
+
[[1, 2, 3], [0, 1, 2], [-1, 0, 1]],
|
|
175
|
+
[[2, 3, 4], [1, 2, 3], [0, 1, 2]]]
|
|
176
|
+
sage: t.display(e)
|
|
177
|
+
t = e_0⊗e^0⊗e^1 + 2 e_0⊗e^0⊗e^2 - e_0⊗e^1⊗e^0 + e_0⊗e^1⊗e^2
|
|
178
|
+
- 2 e_0⊗e^2⊗e^0 - e_0⊗e^2⊗e^1 + e_1⊗e^0⊗e^0 + 2 e_1⊗e^0⊗e^1
|
|
179
|
+
+ 3 e_1⊗e^0⊗e^2 + e_1⊗e^1⊗e^1 + 2 e_1⊗e^1⊗e^2 - e_1⊗e^2⊗e^0
|
|
180
|
+
+ e_1⊗e^2⊗e^2 + 2 e_2⊗e^0⊗e^0 + 3 e_2⊗e^0⊗e^1 + 4 e_2⊗e^0⊗e^2
|
|
181
|
+
+ e_2⊗e^1⊗e^0 + 2 e_2⊗e^1⊗e^1 + 3 e_2⊗e^1⊗e^2 + e_2⊗e^2⊗e^1
|
|
182
|
+
+ 2 e_2⊗e^2⊗e^2
|
|
183
|
+
|
|
184
|
+
An alternative is to construct the tensor from an empty list of components
|
|
185
|
+
and to set the nonzero components afterwards::
|
|
186
|
+
|
|
187
|
+
sage: t = T([], name='t')
|
|
188
|
+
sage: t.set_comp(e)[0,1,1] = -3
|
|
189
|
+
sage: t.set_comp(e)[2,0,1] = 4
|
|
190
|
+
sage: t.display(e)
|
|
191
|
+
t = -3 e_0⊗e^1⊗e^1 + 4 e_2⊗e^0⊗e^1
|
|
192
|
+
|
|
193
|
+
See the documentation of
|
|
194
|
+
:class:`~sage.tensor.modules.free_module_tensor.FreeModuleTensor`
|
|
195
|
+
for the full list of arguments that can be provided to the __call__
|
|
196
|
+
operator. For instance, to construct a tensor symmetric with respect to the
|
|
197
|
+
last two indices::
|
|
198
|
+
|
|
199
|
+
sage: t = T([], name='t', sym=(1,2))
|
|
200
|
+
sage: t.set_comp(e)[0,1,1] = -3
|
|
201
|
+
sage: t.set_comp(e)[2,0,1] = 4
|
|
202
|
+
sage: t.display(e) # notice that t^2_{10} has be set equal to t^2_{01} by symmetry
|
|
203
|
+
t = -3 e_0⊗e^1⊗e^1 + 4 e_2⊗e^0⊗e^1 + 4 e_2⊗e^1⊗e^0
|
|
204
|
+
|
|
205
|
+
The tensor modules over a given module `M` are unique::
|
|
206
|
+
|
|
207
|
+
sage: T is M.tensor_module(1,2)
|
|
208
|
+
True
|
|
209
|
+
|
|
210
|
+
There is a coercion map from `\Lambda^p(M^*)`, the set of alternating
|
|
211
|
+
forms of degree `p`, to `T^{(0,p)}(M)`::
|
|
212
|
+
|
|
213
|
+
sage: L2 = M.dual_exterior_power(2) ; L2
|
|
214
|
+
2nd exterior power of the dual of the Rank-3 free module M over the
|
|
215
|
+
Integer Ring
|
|
216
|
+
sage: T02 = M.tensor_module(0,2) ; T02
|
|
217
|
+
Free module of type-(0,2) tensors on the Rank-3 free module M over the
|
|
218
|
+
Integer Ring
|
|
219
|
+
sage: T02.has_coerce_map_from(L2)
|
|
220
|
+
True
|
|
221
|
+
|
|
222
|
+
Of course, for `p\geq 2`, there is no coercion in the reverse direction,
|
|
223
|
+
since not every tensor of type `(0,p)` is alternating::
|
|
224
|
+
|
|
225
|
+
sage: L2.has_coerce_map_from(T02)
|
|
226
|
+
False
|
|
227
|
+
|
|
228
|
+
The coercion map `\Lambda^2(M^*)\rightarrow T^{(0,2)}(M)` in action::
|
|
229
|
+
|
|
230
|
+
sage: a = M.alternating_form(2, name='a') ; a
|
|
231
|
+
Alternating form a of degree 2 on the Rank-3 free module M over the
|
|
232
|
+
Integer Ring
|
|
233
|
+
sage: a[0,1], a[1,2] = 4, -3
|
|
234
|
+
sage: a.display(e)
|
|
235
|
+
a = 4 e^0∧e^1 - 3 e^1∧e^2
|
|
236
|
+
sage: a.parent() is L2
|
|
237
|
+
True
|
|
238
|
+
sage: ta = T02(a) ; ta
|
|
239
|
+
Type-(0,2) tensor a on the Rank-3 free module M over the Integer Ring
|
|
240
|
+
sage: ta.display(e)
|
|
241
|
+
a = 4 e^0⊗e^1 - 4 e^1⊗e^0 - 3 e^1⊗e^2 + 3 e^2⊗e^1
|
|
242
|
+
sage: ta.symmetries() # the antisymmetry is of course preserved
|
|
243
|
+
no symmetry; antisymmetry: (0, 1)
|
|
244
|
+
|
|
245
|
+
For the degree `p=1`, we have the identity `\Lambda^1(M^*) = T^{(0,1)}(M) = M^*`::
|
|
246
|
+
|
|
247
|
+
sage: M.dual_exterior_power(1) is M.tensor_module(0,1)
|
|
248
|
+
True
|
|
249
|
+
sage: M.tensor_module(0,1) is M.dual()
|
|
250
|
+
True
|
|
251
|
+
|
|
252
|
+
There is a canonical identification between tensors of type `(1,1)` and
|
|
253
|
+
endomorphisms of module `M`. Accordingly, coercion maps have been
|
|
254
|
+
implemented between `T^{(1,1)}(M)` and `\mathrm{End}(M)` (the module of
|
|
255
|
+
all endomorphisms of `M`, see
|
|
256
|
+
:class:`~sage.tensor.modules.free_module_homset.FreeModuleHomset`)::
|
|
257
|
+
|
|
258
|
+
sage: T11 = M.tensor_module(1,1) ; T11
|
|
259
|
+
Free module of type-(1,1) tensors on the Rank-3 free module M over the
|
|
260
|
+
Integer Ring
|
|
261
|
+
sage: End(M)
|
|
262
|
+
Set of Morphisms from Rank-3 free module M over the Integer Ring
|
|
263
|
+
to Rank-3 free module M over the Integer Ring
|
|
264
|
+
in Category of finite dimensional modules over Integer Ring
|
|
265
|
+
sage: T11.has_coerce_map_from(End(M))
|
|
266
|
+
True
|
|
267
|
+
sage: End(M).has_coerce_map_from(T11)
|
|
268
|
+
True
|
|
269
|
+
|
|
270
|
+
The coercion map `\mathrm{End}(M)\rightarrow T^{(1,1)}(M)` in action::
|
|
271
|
+
|
|
272
|
+
sage: phi = End(M).an_element() ; phi
|
|
273
|
+
Generic endomorphism of Rank-3 free module M over the Integer Ring
|
|
274
|
+
sage: phi.matrix(e)
|
|
275
|
+
[1 1 1]
|
|
276
|
+
[1 1 1]
|
|
277
|
+
[1 1 1]
|
|
278
|
+
sage: tphi = T11(phi) ; tphi # image of phi by the coercion map
|
|
279
|
+
Type-(1,1) tensor on the Rank-3 free module M over the Integer Ring
|
|
280
|
+
sage: tphi[:]
|
|
281
|
+
[1 1 1]
|
|
282
|
+
[1 1 1]
|
|
283
|
+
[1 1 1]
|
|
284
|
+
sage: t = M.tensor((1,1))
|
|
285
|
+
sage: t[0,0], t[1,1], t[2,2] = -1,-2,-3
|
|
286
|
+
sage: t[:]
|
|
287
|
+
[-1 0 0]
|
|
288
|
+
[ 0 -2 0]
|
|
289
|
+
[ 0 0 -3]
|
|
290
|
+
sage: s = t + phi ; s # phi is coerced to a type-(1,1) tensor prior to the addition
|
|
291
|
+
Type-(1,1) tensor on the Rank-3 free module M over the Integer Ring
|
|
292
|
+
sage: s[:]
|
|
293
|
+
[ 0 1 1]
|
|
294
|
+
[ 1 -1 1]
|
|
295
|
+
[ 1 1 -2]
|
|
296
|
+
|
|
297
|
+
The coercion map `T^{(1,1)}(M) \rightarrow \mathrm{End}(M)` in action::
|
|
298
|
+
|
|
299
|
+
sage: phi1 = End(M)(tphi) ; phi1
|
|
300
|
+
Generic endomorphism of Rank-3 free module M over the Integer Ring
|
|
301
|
+
sage: phi1 == phi
|
|
302
|
+
True
|
|
303
|
+
sage: s = phi + t ; s # t is coerced to an endomorphism prior to the addition
|
|
304
|
+
Generic endomorphism of Rank-3 free module M over the Integer Ring
|
|
305
|
+
sage: s.matrix(e)
|
|
306
|
+
[ 0 1 1]
|
|
307
|
+
[ 1 -1 1]
|
|
308
|
+
[ 1 1 -2]
|
|
309
|
+
|
|
310
|
+
There is a coercion `\mathrm{GL}(M)\rightarrow T^{(1,1)}(M)`, i.e. from
|
|
311
|
+
automorphisms of `M` to type-`(1,1)` tensors on `M`::
|
|
312
|
+
|
|
313
|
+
sage: GL = M.general_linear_group() ; GL
|
|
314
|
+
General linear group of the Rank-3 free module M over the Integer Ring
|
|
315
|
+
sage: T11.has_coerce_map_from(GL)
|
|
316
|
+
True
|
|
317
|
+
|
|
318
|
+
The coercion map `\mathrm{GL}(M)\rightarrow T^{(1,1)}(M)` in action::
|
|
319
|
+
|
|
320
|
+
sage: a = GL.an_element() ; a
|
|
321
|
+
Automorphism of the Rank-3 free module M over the Integer Ring
|
|
322
|
+
sage: a.matrix(e)
|
|
323
|
+
[ 1 0 0]
|
|
324
|
+
[ 0 -1 0]
|
|
325
|
+
[ 0 0 1]
|
|
326
|
+
sage: ta = T11(a) ; ta
|
|
327
|
+
Type-(1,1) tensor on the Rank-3 free module M over the Integer Ring
|
|
328
|
+
sage: ta.display(e)
|
|
329
|
+
e_0⊗e^0 - e_1⊗e^1 + e_2⊗e^2
|
|
330
|
+
sage: a.display(e)
|
|
331
|
+
e_0⊗e^0 - e_1⊗e^1 + e_2⊗e^2
|
|
332
|
+
|
|
333
|
+
Of course, there is no coercion in the reverse direction, since not
|
|
334
|
+
every type-`(1,1)` tensor is invertible::
|
|
335
|
+
|
|
336
|
+
sage: GL.has_coerce_map_from(T11)
|
|
337
|
+
False
|
|
338
|
+
"""
|
|
339
|
+
|
|
340
|
+
Element = FreeModuleTensor
|
|
341
|
+
|
|
342
|
+
def __init__(self, fmodule, tensor_type, name=None, latex_name=None, category=None):
|
|
343
|
+
r"""
|
|
344
|
+
TESTS::
|
|
345
|
+
|
|
346
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
347
|
+
sage: T = M.tensor_module(2, 3)
|
|
348
|
+
sage: TestSuite(T).run()
|
|
349
|
+
"""
|
|
350
|
+
self._fmodule = fmodule
|
|
351
|
+
self._tensor_type = tuple(tensor_type)
|
|
352
|
+
ring = fmodule._ring
|
|
353
|
+
rank = pow(fmodule._rank, tensor_type[0] + tensor_type[1])
|
|
354
|
+
if self._tensor_type == (0,1): # case of the dual
|
|
355
|
+
category = Modules(ring).FiniteDimensional().or_subcategory(category)
|
|
356
|
+
if name is None and fmodule._name is not None:
|
|
357
|
+
name = fmodule._name + '*'
|
|
358
|
+
if latex_name is None and fmodule._latex_name is not None:
|
|
359
|
+
latex_name = fmodule._latex_name + r'^*'
|
|
360
|
+
else:
|
|
361
|
+
category = Modules(ring).FiniteDimensional().TensorProducts().or_subcategory(category)
|
|
362
|
+
if name is None and fmodule._name is not None:
|
|
363
|
+
name = 'T^' + str(self._tensor_type) + '(' + fmodule._name + \
|
|
364
|
+
')'
|
|
365
|
+
if latex_name is None and fmodule._latex_name is not None:
|
|
366
|
+
latex_name = r'T^{' + str(self._tensor_type) + r'}\left(' + \
|
|
367
|
+
fmodule._latex_name + r'\right)'
|
|
368
|
+
super().__init__(fmodule._ring, rank, name=name, latex_name=latex_name, category=category)
|
|
369
|
+
fmodule._all_modules.add(self)
|
|
370
|
+
|
|
371
|
+
#### Parent Methods
|
|
372
|
+
|
|
373
|
+
def _element_constructor_(self, comp=[], basis=None, name=None,
|
|
374
|
+
latex_name=None, sym=None, antisym=None):
|
|
375
|
+
r"""
|
|
376
|
+
Construct a tensor.
|
|
377
|
+
|
|
378
|
+
EXAMPLES::
|
|
379
|
+
|
|
380
|
+
sage: M = FiniteRankFreeModule(QQ, 2, name='M')
|
|
381
|
+
sage: T = M.tensor_module(1,1)
|
|
382
|
+
sage: T._element_constructor_(0) is T.zero()
|
|
383
|
+
True
|
|
384
|
+
sage: e = M.basis('e')
|
|
385
|
+
sage: t = T._element_constructor_(comp=[[2,0],[1/2,-3]], basis=e,
|
|
386
|
+
....: name='t') ; t
|
|
387
|
+
Type-(1,1) tensor t on the 2-dimensional vector space M over the
|
|
388
|
+
Rational Field
|
|
389
|
+
sage: t.display()
|
|
390
|
+
t = 2 e_0⊗e^0 + 1/2 e_1⊗e^0 - 3 e_1⊗e^1
|
|
391
|
+
sage: t.parent()
|
|
392
|
+
Free module of type-(1,1) tensors on the 2-dimensional vector
|
|
393
|
+
space M over the Rational Field
|
|
394
|
+
sage: t.parent() is T
|
|
395
|
+
True
|
|
396
|
+
"""
|
|
397
|
+
from sage.rings.integer import Integer
|
|
398
|
+
if isinstance(comp, (int, Integer)) and comp == 0:
|
|
399
|
+
return self.zero()
|
|
400
|
+
if isinstance(comp, FiniteRankFreeModuleMorphism):
|
|
401
|
+
# coercion of an endomorphism to a type-(1,1) tensor:
|
|
402
|
+
endo = comp # for readability
|
|
403
|
+
if self._tensor_type == (1,1) and endo.is_endomorphism() and \
|
|
404
|
+
self._fmodule is endo.domain():
|
|
405
|
+
resu = self.element_class(self._fmodule, (1,1),
|
|
406
|
+
name=endo._name,
|
|
407
|
+
latex_name=endo._latex_name,
|
|
408
|
+
parent=self)
|
|
409
|
+
for basis, mat in endo._matrices.items():
|
|
410
|
+
resu.add_comp(basis[0])[:] = mat
|
|
411
|
+
else:
|
|
412
|
+
raise TypeError("cannot coerce the {}".format(endo) +
|
|
413
|
+
" to an element of {}".format(self))
|
|
414
|
+
elif isinstance(comp, AlternatingContrTensor):
|
|
415
|
+
# coercion of an alternating contravariant tensor of degree
|
|
416
|
+
# p to a type-(p,0) tensor:
|
|
417
|
+
tensor = comp # for readability
|
|
418
|
+
p = tensor.degree()
|
|
419
|
+
if self._tensor_type != (p,0) or \
|
|
420
|
+
self._fmodule != tensor.base_module():
|
|
421
|
+
raise TypeError("cannot coerce the {}".format(tensor) +
|
|
422
|
+
" to an element of {}".format(self))
|
|
423
|
+
if p == 1:
|
|
424
|
+
asym = None
|
|
425
|
+
else:
|
|
426
|
+
asym = range(p)
|
|
427
|
+
resu = self.element_class(self._fmodule, (p,0),
|
|
428
|
+
name=tensor._name,
|
|
429
|
+
latex_name=tensor._latex_name,
|
|
430
|
+
antisym=asym,
|
|
431
|
+
parent=self)
|
|
432
|
+
for basis, comp in tensor._components.items():
|
|
433
|
+
resu._components[basis] = comp.copy()
|
|
434
|
+
elif isinstance(comp, FreeModuleAltForm):
|
|
435
|
+
# coercion of an alternating form to a type-(0,p) tensor:
|
|
436
|
+
form = comp # for readability
|
|
437
|
+
p = form.degree()
|
|
438
|
+
if self._tensor_type != (0,p) or \
|
|
439
|
+
self._fmodule != form.base_module():
|
|
440
|
+
raise TypeError("cannot coerce the {}".format(form) +
|
|
441
|
+
" to an element of {}".format(self))
|
|
442
|
+
if p == 1:
|
|
443
|
+
asym = None
|
|
444
|
+
else:
|
|
445
|
+
asym = range(p)
|
|
446
|
+
resu = self.element_class(self._fmodule, (0,p), name=form._name,
|
|
447
|
+
latex_name=form._latex_name,
|
|
448
|
+
antisym=asym,
|
|
449
|
+
parent=self)
|
|
450
|
+
for basis, comp in form._components.items():
|
|
451
|
+
resu._components[basis] = comp.copy()
|
|
452
|
+
elif isinstance(comp, FreeModuleAutomorphism):
|
|
453
|
+
# coercion of an automorphism to a type-(1,1) tensor:
|
|
454
|
+
autom = comp # for readability
|
|
455
|
+
if self._tensor_type != (1,1) or \
|
|
456
|
+
self._fmodule != autom.base_module():
|
|
457
|
+
raise TypeError("cannot coerce the {}".format(autom) +
|
|
458
|
+
" to an element of {}".format(self))
|
|
459
|
+
resu = self.element_class(self._fmodule, (1,1), name=autom._name,
|
|
460
|
+
latex_name=autom._latex_name,
|
|
461
|
+
parent=self)
|
|
462
|
+
for basis, comp in autom._components.items():
|
|
463
|
+
resu._components[basis] = comp.copy()
|
|
464
|
+
elif isinstance(comp, FreeModuleTensor):
|
|
465
|
+
tensor = comp
|
|
466
|
+
if self._tensor_type != tensor._tensor_type or \
|
|
467
|
+
self._fmodule != tensor.base_module():
|
|
468
|
+
raise TypeError("cannot coerce the {}".format(tensor) +
|
|
469
|
+
" to an element of {}".format(self))
|
|
470
|
+
resu = self.element_class(self._fmodule, self._tensor_type,
|
|
471
|
+
name=name, latex_name=latex_name,
|
|
472
|
+
sym=sym, antisym=antisym,
|
|
473
|
+
parent=self)
|
|
474
|
+
for basis, comp in tensor._components.items():
|
|
475
|
+
resu._components[basis] = comp.copy()
|
|
476
|
+
else:
|
|
477
|
+
# Standard construction:
|
|
478
|
+
resu = self.element_class(self._fmodule, self._tensor_type,
|
|
479
|
+
name=name, latex_name=latex_name,
|
|
480
|
+
sym=sym, antisym=antisym, parent=self)
|
|
481
|
+
if comp:
|
|
482
|
+
resu.set_comp(basis)[:] = comp
|
|
483
|
+
return resu
|
|
484
|
+
|
|
485
|
+
@cached_method
|
|
486
|
+
def zero(self):
|
|
487
|
+
r"""
|
|
488
|
+
Return the zero of ``self``.
|
|
489
|
+
|
|
490
|
+
EXAMPLES::
|
|
491
|
+
|
|
492
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
493
|
+
sage: e = M.basis('e')
|
|
494
|
+
sage: T11 = M.tensor_module(1,1)
|
|
495
|
+
sage: T11.zero()
|
|
496
|
+
Type-(1,1) tensor zero on the Rank-3 free module M over the Integer
|
|
497
|
+
Ring
|
|
498
|
+
|
|
499
|
+
The zero element is cached::
|
|
500
|
+
|
|
501
|
+
sage: T11.zero() is T11(0)
|
|
502
|
+
True
|
|
503
|
+
"""
|
|
504
|
+
resu = self._element_constructor_(name='zero', latex_name='0')
|
|
505
|
+
for basis in self._fmodule._known_bases:
|
|
506
|
+
resu._add_comp_unsafe(basis)
|
|
507
|
+
# (since new components are initialized to zero)
|
|
508
|
+
resu._is_zero = True # This element is certainly zero
|
|
509
|
+
resu.set_immutable()
|
|
510
|
+
return resu
|
|
511
|
+
|
|
512
|
+
def _an_element_(self):
|
|
513
|
+
r"""
|
|
514
|
+
Construct some (unnamed) element of ``self``.
|
|
515
|
+
|
|
516
|
+
EXAMPLES::
|
|
517
|
+
|
|
518
|
+
sage: M = FiniteRankFreeModule(QQ, 2, name='M')
|
|
519
|
+
sage: T = M.tensor_module(1,1)
|
|
520
|
+
sage: t = T._an_element_() ; t
|
|
521
|
+
Type-(1,1) tensor on the 2-dimensional vector space M over the
|
|
522
|
+
Rational Field
|
|
523
|
+
sage: t.display()
|
|
524
|
+
1/2 e_0⊗e^0
|
|
525
|
+
sage: t.parent() is T
|
|
526
|
+
True
|
|
527
|
+
sage: M.tensor_module(2,3)._an_element_().display()
|
|
528
|
+
1/2 e_0⊗e_0⊗e^0⊗e^0⊗e^0
|
|
529
|
+
|
|
530
|
+
TESTS::
|
|
531
|
+
|
|
532
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
533
|
+
sage: e = M.basis('e')
|
|
534
|
+
sage: T60M = M.tensor_module(6, 0)
|
|
535
|
+
sage: Sym0123x45M = M.tensor_module(6, 0, sym=((0, 1, 2, 3), (4, 5)))
|
|
536
|
+
sage: t = Sym0123x45M._an_element_()
|
|
537
|
+
sage: t.parent() is Sym0123x45M
|
|
538
|
+
True
|
|
539
|
+
"""
|
|
540
|
+
resu = self([])
|
|
541
|
+
# Make sure that the base module has a default basis
|
|
542
|
+
self._fmodule.an_element()
|
|
543
|
+
sindex = self._fmodule._sindex
|
|
544
|
+
ind = [sindex for i in range(resu._tensor_rank)]
|
|
545
|
+
resu.set_comp()[ind] = self._fmodule._ring.an_element()
|
|
546
|
+
return resu
|
|
547
|
+
|
|
548
|
+
def _coerce_map_from_(self, other):
|
|
549
|
+
r"""
|
|
550
|
+
Determine whether coercion to ``self`` exists from other parent.
|
|
551
|
+
|
|
552
|
+
EXAMPLES:
|
|
553
|
+
|
|
554
|
+
Sets of module endomorphisms coerce to type-`(1,1)` tensor modules::
|
|
555
|
+
|
|
556
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
557
|
+
sage: e = M.basis('e')
|
|
558
|
+
sage: M.tensor_module(1,1)._coerce_map_from_(End(M))
|
|
559
|
+
True
|
|
560
|
+
|
|
561
|
+
but not to tensor modules of other types::
|
|
562
|
+
|
|
563
|
+
sage: M.tensor_module(0,2)._coerce_map_from_(End(M))
|
|
564
|
+
False
|
|
565
|
+
|
|
566
|
+
and not to type-`(1,1)` tensor modules defined on another free module::
|
|
567
|
+
|
|
568
|
+
sage: N = FiniteRankFreeModule(ZZ, 3, name='N')
|
|
569
|
+
sage: f = N.basis('f')
|
|
570
|
+
sage: M.tensor_module(1,1)._coerce_map_from_(End(N))
|
|
571
|
+
False
|
|
572
|
+
|
|
573
|
+
There is no coercion if the module morphisms are not endomorphisms::
|
|
574
|
+
|
|
575
|
+
sage: M.tensor_module(1,1)._coerce_map_from_(Hom(M,N))
|
|
576
|
+
False
|
|
577
|
+
|
|
578
|
+
Coercion from alternating contravariant tensors::
|
|
579
|
+
|
|
580
|
+
sage: M.tensor_module(2,0)._coerce_map_from_(M.exterior_power(2))
|
|
581
|
+
True
|
|
582
|
+
sage: M.tensor_module(2,0)._coerce_map_from_(M.exterior_power(3))
|
|
583
|
+
False
|
|
584
|
+
sage: M.tensor_module(2,0)._coerce_map_from_(N.exterior_power(2))
|
|
585
|
+
False
|
|
586
|
+
|
|
587
|
+
Coercion from alternating forms::
|
|
588
|
+
|
|
589
|
+
sage: M.tensor_module(0,2)._coerce_map_from_(M.dual_exterior_power(2))
|
|
590
|
+
True
|
|
591
|
+
sage: M.tensor_module(0,2)._coerce_map_from_(M.dual_exterior_power(3))
|
|
592
|
+
False
|
|
593
|
+
sage: M.tensor_module(0,2)._coerce_map_from_(N.dual_exterior_power(2))
|
|
594
|
+
False
|
|
595
|
+
|
|
596
|
+
Coercion from submodules::
|
|
597
|
+
|
|
598
|
+
sage: Sym01M = M.tensor_module(2, 0, sym=((0, 1)))
|
|
599
|
+
sage: M.tensor_module(2,0)._coerce_map_from_(Sym01M)
|
|
600
|
+
True
|
|
601
|
+
"""
|
|
602
|
+
from .free_module_homset import FreeModuleHomset
|
|
603
|
+
from .ext_pow_free_module import (ExtPowerFreeModule,
|
|
604
|
+
ExtPowerDualFreeModule)
|
|
605
|
+
from .free_module_linear_group import FreeModuleLinearGroup
|
|
606
|
+
if isinstance(other, FreeModuleHomset):
|
|
607
|
+
# Coercion of an endomorphism to a type-(1,1) tensor:
|
|
608
|
+
if self._tensor_type == (1,1):
|
|
609
|
+
return other.is_endomorphism_set() and \
|
|
610
|
+
self._fmodule is other.domain()
|
|
611
|
+
else:
|
|
612
|
+
return False
|
|
613
|
+
if isinstance(other, ExtPowerFreeModule):
|
|
614
|
+
# Coercion of an alternating contravariant tensor to a
|
|
615
|
+
# type-(p,0) tensor:
|
|
616
|
+
return self._tensor_type == (other.degree(), 0) and \
|
|
617
|
+
self._fmodule is other.base_module()
|
|
618
|
+
if isinstance(other, ExtPowerDualFreeModule):
|
|
619
|
+
# Coercion of an alternating form to a type-(0,p) tensor:
|
|
620
|
+
return self._tensor_type == (0, other.degree()) and \
|
|
621
|
+
self._fmodule is other.base_module()
|
|
622
|
+
if isinstance(other, FreeModuleLinearGroup):
|
|
623
|
+
# Coercion of an automorphism to a type-(1,1) tensor:
|
|
624
|
+
return self._tensor_type == (1,1) and \
|
|
625
|
+
self._fmodule is other.base_module()
|
|
626
|
+
try:
|
|
627
|
+
if other.is_submodule(self):
|
|
628
|
+
return True
|
|
629
|
+
except AttributeError:
|
|
630
|
+
pass
|
|
631
|
+
return False
|
|
632
|
+
|
|
633
|
+
#### End of parent methods
|
|
634
|
+
|
|
635
|
+
def _repr_(self):
|
|
636
|
+
r"""
|
|
637
|
+
Return a string representation of ``self``.
|
|
638
|
+
|
|
639
|
+
EXAMPLES::
|
|
640
|
+
|
|
641
|
+
sage: M = FiniteRankFreeModule(QQ, 2, name='M')
|
|
642
|
+
sage: M.tensor_module(1,1)
|
|
643
|
+
Free module of type-(1,1) tensors on the 2-dimensional vector space
|
|
644
|
+
M over the Rational Field
|
|
645
|
+
"""
|
|
646
|
+
description = "Free module of type-({},{}) tensors on the {}".format(
|
|
647
|
+
self._tensor_type[0], self._tensor_type[1], self._fmodule)
|
|
648
|
+
return description
|
|
649
|
+
|
|
650
|
+
def base_module(self):
|
|
651
|
+
r"""
|
|
652
|
+
Return the free module on which ``self`` is constructed.
|
|
653
|
+
|
|
654
|
+
OUTPUT:
|
|
655
|
+
|
|
656
|
+
- instance of :class:`FiniteRankFreeModule` representing the free
|
|
657
|
+
module on which the tensor module is defined.
|
|
658
|
+
|
|
659
|
+
EXAMPLES:
|
|
660
|
+
|
|
661
|
+
Base module of a type-`(1,2)` tensor module::
|
|
662
|
+
|
|
663
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
664
|
+
sage: T = M.tensor_module(1,2)
|
|
665
|
+
sage: T.base_module()
|
|
666
|
+
Rank-3 free module M over the Integer Ring
|
|
667
|
+
sage: T.base_module() is M
|
|
668
|
+
True
|
|
669
|
+
"""
|
|
670
|
+
return self._fmodule
|
|
671
|
+
|
|
672
|
+
def tensor_type(self):
|
|
673
|
+
r"""
|
|
674
|
+
Return the tensor type of ``self``.
|
|
675
|
+
|
|
676
|
+
OUTPUT:
|
|
677
|
+
|
|
678
|
+
- pair `(k,l)` such that ``self`` is the module tensor product
|
|
679
|
+
`T^{(k,l)}(M)`
|
|
680
|
+
|
|
681
|
+
EXAMPLES::
|
|
682
|
+
|
|
683
|
+
sage: M = FiniteRankFreeModule(ZZ, 3)
|
|
684
|
+
sage: T = M.tensor_module(1,2)
|
|
685
|
+
sage: T.tensor_type()
|
|
686
|
+
(1, 2)
|
|
687
|
+
"""
|
|
688
|
+
return self._tensor_type
|
|
689
|
+
|
|
690
|
+
@cached_method
|
|
691
|
+
def basis(self, symbol, latex_symbol=None, from_family=None,
|
|
692
|
+
indices=None, latex_indices=None, symbol_dual=None,
|
|
693
|
+
latex_symbol_dual=None):
|
|
694
|
+
r"""
|
|
695
|
+
Return the standard basis of ``self`` corresponding to a basis of the base module.
|
|
696
|
+
|
|
697
|
+
INPUT:
|
|
698
|
+
|
|
699
|
+
- ``symbol``, ``indices`` -- passed to the base module's method
|
|
700
|
+
:meth:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule.basis`
|
|
701
|
+
to select a basis of the :meth:`base_module` of ``self``,
|
|
702
|
+
or to create it.
|
|
703
|
+
|
|
704
|
+
- other parameters -- passed to
|
|
705
|
+
:meth:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule.basis`; when
|
|
706
|
+
the basis does not exist yet, it will be created using these parameters.
|
|
707
|
+
|
|
708
|
+
EXAMPLES::
|
|
709
|
+
|
|
710
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
711
|
+
sage: T = M.tensor_module(1,1)
|
|
712
|
+
sage: e_T = T.basis('e'); e_T
|
|
713
|
+
Standard basis on the
|
|
714
|
+
Free module of type-(1,1) tensors on the Rank-3 free module M over the Integer Ring
|
|
715
|
+
induced by Basis (e_0,e_1,e_2) on the Rank-3 free module M over the Integer Ring
|
|
716
|
+
sage: for a in e_T: a.display()
|
|
717
|
+
e_0⊗e^0
|
|
718
|
+
e_0⊗e^1
|
|
719
|
+
e_0⊗e^2
|
|
720
|
+
e_1⊗e^0
|
|
721
|
+
e_1⊗e^1
|
|
722
|
+
e_1⊗e^2
|
|
723
|
+
e_2⊗e^0
|
|
724
|
+
e_2⊗e^1
|
|
725
|
+
e_2⊗e^2
|
|
726
|
+
|
|
727
|
+
sage: Sym2M = M.tensor_module(2, 0, sym=range(2))
|
|
728
|
+
sage: e_Sym2M = Sym2M.basis('e'); e_Sym2M
|
|
729
|
+
Standard basis on the
|
|
730
|
+
Free module of fully symmetric type-(2,0) tensors on the Rank-3 free module M over the Integer Ring
|
|
731
|
+
induced by Basis (e_0,e_1,e_2) on the Rank-3 free module M over the Integer Ring
|
|
732
|
+
sage: for a in e_Sym2M: a.display()
|
|
733
|
+
e_0⊗e_0
|
|
734
|
+
e_0⊗e_1 + e_1⊗e_0
|
|
735
|
+
e_0⊗e_2 + e_2⊗e_0
|
|
736
|
+
e_1⊗e_1
|
|
737
|
+
e_1⊗e_2 + e_2⊗e_1
|
|
738
|
+
e_2⊗e_2
|
|
739
|
+
|
|
740
|
+
sage: M = FiniteRankFreeModule(ZZ, 2)
|
|
741
|
+
sage: e = M.basis('e')
|
|
742
|
+
sage: f = M.basis('f', from_family=(-e[1], e[0]))
|
|
743
|
+
sage: for b in f: b.display()
|
|
744
|
+
f_0 = -e_1
|
|
745
|
+
f_1 = e_0
|
|
746
|
+
sage: S = M.tensor_module(2, 0, sym=(0,1))
|
|
747
|
+
sage: fS = S.basis('f')
|
|
748
|
+
sage: for b in fS: b.display()
|
|
749
|
+
e_1⊗e_1
|
|
750
|
+
-e_0⊗e_1 - e_1⊗e_0
|
|
751
|
+
e_0⊗e_0
|
|
752
|
+
sage: for b in fS: b.display(f)
|
|
753
|
+
f_0⊗f_0
|
|
754
|
+
f_0⊗f_1 + f_1⊗f_0
|
|
755
|
+
f_1⊗f_1
|
|
756
|
+
"""
|
|
757
|
+
return TensorFreeSubmoduleBasis_sym(self, symbol=symbol, latex_symbol=latex_symbol,
|
|
758
|
+
indices=indices, latex_indices=latex_indices,
|
|
759
|
+
symbol_dual=symbol_dual, latex_symbol_dual=latex_symbol_dual)
|
|
760
|
+
|
|
761
|
+
@cached_method
|
|
762
|
+
def _basis_sym(self):
|
|
763
|
+
r"""
|
|
764
|
+
Return an instance of :class:`~sage.tensor.modules.comp.Components`.
|
|
765
|
+
|
|
766
|
+
This implementation returns an instance without symmetry.
|
|
767
|
+
|
|
768
|
+
The subclass :class:`~sage.tensor.modules.tensor_free_submodule.TensorFreeSubmodule_sym`
|
|
769
|
+
overrides this method to encode the prescribed symmetry of the submodule.
|
|
770
|
+
|
|
771
|
+
EXAMPLES::
|
|
772
|
+
|
|
773
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
774
|
+
sage: T = M.tensor_module(1,1)
|
|
775
|
+
sage: c = T._basis_sym(); c
|
|
776
|
+
2-indices components w.r.t. (0, 1, 2)
|
|
777
|
+
"""
|
|
778
|
+
frame = tuple(self.base_module().irange())
|
|
779
|
+
tensor = self.ambient()()
|
|
780
|
+
return tensor._new_comp(frame)
|