passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,824 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Exterior powers of free modules
|
|
4
|
+
|
|
5
|
+
Given a free module `M` of finite rank over a commutative ring `R`
|
|
6
|
+
and a positive integer `p`, the `p`-*th exterior power of* `M`
|
|
7
|
+
is the set `\Lambda^p(M)` of all alternating contravariant tensors of
|
|
8
|
+
degree `p` on `M`, i.e. of all multilinear maps
|
|
9
|
+
|
|
10
|
+
.. MATH::
|
|
11
|
+
|
|
12
|
+
\underbrace{M^*\times\cdots\times M^*}_{p\ \; \mbox{times}}
|
|
13
|
+
\longrightarrow R
|
|
14
|
+
|
|
15
|
+
that vanish whenever any of two of their arguments are equal
|
|
16
|
+
(`M^*` stands for the dual of `M`).
|
|
17
|
+
Note that `\Lambda^1(M) = M`. The exterior power
|
|
18
|
+
`\Lambda^p(M)` is a free module of rank `\binom{n}{p}` over `R`,
|
|
19
|
+
where `n` is the rank of `M`.
|
|
20
|
+
|
|
21
|
+
Similarly, the `p`-*th exterior power of the dual of* `M`
|
|
22
|
+
is the set `\Lambda^p(M^*)` of all alternating forms of degree `p` on
|
|
23
|
+
`M`, i.e. of all multilinear maps
|
|
24
|
+
|
|
25
|
+
.. MATH::
|
|
26
|
+
|
|
27
|
+
\underbrace{M\times\cdots\times M}_{p\ \; \mbox{times}}
|
|
28
|
+
\longrightarrow R
|
|
29
|
+
|
|
30
|
+
that vanish whenever any of two of their arguments are equal.
|
|
31
|
+
Note that `\Lambda^1(M^*) = M^*` (the dual of `M`). The exterior power
|
|
32
|
+
`\Lambda^p(M^*)` is a free module of rank `\binom{n}{p}` over `R`,
|
|
33
|
+
where `n` is the rank of `M`.
|
|
34
|
+
|
|
35
|
+
The class :class:`ExtPowerFreeModule` implements `\Lambda^p(M)`, while
|
|
36
|
+
the class :class:`ExtPowerDualFreeModule` implements `\Lambda^p(M^*)`.
|
|
37
|
+
|
|
38
|
+
AUTHORS:
|
|
39
|
+
|
|
40
|
+
- Eric Gourgoulhon: initial version, regarding `\Lambda^p(M^*)` only
|
|
41
|
+
(2015); add class for `\Lambda^p(M)` (2017)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
REFERENCES:
|
|
45
|
+
|
|
46
|
+
- \K. Conrad: *Exterior powers* [Con2013]_
|
|
47
|
+
- Chap. 19 of S. Lang: *Algebra* [Lan2002]_
|
|
48
|
+
"""
|
|
49
|
+
# ****************************************************************************
|
|
50
|
+
# Copyright (C) 2017 Eric Gourgoulhon <eric.gourgoulhon@obspm.fr>
|
|
51
|
+
#
|
|
52
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
53
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
54
|
+
# the License, or (at your option) any later version.
|
|
55
|
+
# https://www.gnu.org/licenses/
|
|
56
|
+
# ****************************************************************************
|
|
57
|
+
|
|
58
|
+
from sage.misc.cachefunc import cached_method
|
|
59
|
+
from sage.rings.integer import Integer
|
|
60
|
+
from sage.rings.integer_ring import ZZ
|
|
61
|
+
from sage.tensor.modules.finite_rank_free_module import FiniteRankFreeModule_abstract
|
|
62
|
+
from sage.tensor.modules.free_module_tensor import FreeModuleTensor
|
|
63
|
+
from sage.tensor.modules.alternating_contr_tensor import AlternatingContrTensor
|
|
64
|
+
from sage.tensor.modules.free_module_alt_form import FreeModuleAltForm
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class ExtPowerFreeModule(FiniteRankFreeModule_abstract):
|
|
68
|
+
r"""
|
|
69
|
+
Exterior power of a free module of finite rank over a commutative
|
|
70
|
+
ring.
|
|
71
|
+
|
|
72
|
+
Given a free module `M` of finite rank over a commutative ring `R`
|
|
73
|
+
and a positive integer `p`, the `p`-*th exterior power of* `M` is
|
|
74
|
+
the set `\Lambda^p(M)` of all alternating contravariant tensors of
|
|
75
|
+
degree `p` on `M`, i.e. of all multilinear maps
|
|
76
|
+
|
|
77
|
+
.. MATH::
|
|
78
|
+
|
|
79
|
+
\underbrace{M^*\times\cdots\times M^*}_{p\ \; \mbox{times}}
|
|
80
|
+
\longrightarrow R
|
|
81
|
+
|
|
82
|
+
that vanish whenever any of two of their arguments are equal.
|
|
83
|
+
Note that `\Lambda^1(M) = M`.
|
|
84
|
+
|
|
85
|
+
`\Lambda^p(M)` is a free module of rank `\binom{n}{p}` over
|
|
86
|
+
`R`, where `n` is the rank of `M`.
|
|
87
|
+
Accordingly, the class :class:`ExtPowerFreeModule` inherits from the
|
|
88
|
+
class
|
|
89
|
+
:class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule_abstract`.
|
|
90
|
+
|
|
91
|
+
This is a Sage *parent* class, whose *element* class is
|
|
92
|
+
:class:`~sage.tensor.modules.alternating_contr_tensor.AlternatingContrTensor`
|
|
93
|
+
|
|
94
|
+
INPUT:
|
|
95
|
+
|
|
96
|
+
- ``fmodule`` -- free module `M` of finite rank, as an instance of
|
|
97
|
+
:class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule`
|
|
98
|
+
- ``degree`` -- positive integer; the degree `p` of the alternating
|
|
99
|
+
elements
|
|
100
|
+
- ``name`` -- (default: ``None``) string; name given to `\Lambda^p(M)`
|
|
101
|
+
- ``latex_name`` -- (default: ``None``) string; LaTeX symbol to
|
|
102
|
+
denote `\Lambda^p(M)`
|
|
103
|
+
|
|
104
|
+
EXAMPLES:
|
|
105
|
+
|
|
106
|
+
2nd exterior power of the dual of a free `\ZZ`-module of rank 3::
|
|
107
|
+
|
|
108
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
109
|
+
sage: e = M.basis('e')
|
|
110
|
+
sage: from sage.tensor.modules.ext_pow_free_module import ExtPowerFreeModule
|
|
111
|
+
sage: A = ExtPowerFreeModule(M, 2) ; A
|
|
112
|
+
2nd exterior power of the Rank-3 free module M over the
|
|
113
|
+
Integer Ring
|
|
114
|
+
|
|
115
|
+
Instead of importing ExtPowerFreeModule in the global name space, it is
|
|
116
|
+
recommended to use the module's method
|
|
117
|
+
:meth:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule.exterior_power`::
|
|
118
|
+
|
|
119
|
+
sage: A = M.exterior_power(2) ; A
|
|
120
|
+
2nd exterior power of the Rank-3 free module M over the
|
|
121
|
+
Integer Ring
|
|
122
|
+
sage: latex(A)
|
|
123
|
+
\Lambda^{2}\left(M\right)
|
|
124
|
+
|
|
125
|
+
``A`` is a module (actually a free module) over `\ZZ`::
|
|
126
|
+
|
|
127
|
+
sage: A.category()
|
|
128
|
+
Category of finite dimensional modules over Integer Ring
|
|
129
|
+
sage: A in Modules(ZZ)
|
|
130
|
+
True
|
|
131
|
+
sage: A.rank()
|
|
132
|
+
3
|
|
133
|
+
sage: A.base_ring()
|
|
134
|
+
Integer Ring
|
|
135
|
+
sage: A.base_module()
|
|
136
|
+
Rank-3 free module M over the Integer Ring
|
|
137
|
+
|
|
138
|
+
``A`` is a *parent* object, whose elements are alternating
|
|
139
|
+
contravariant tensors, represented by instances of the class
|
|
140
|
+
:class:`~sage.tensor.modules.alternating_contr_tensor.AlternatingContrTensor`::
|
|
141
|
+
|
|
142
|
+
sage: a = A.an_element() ; a
|
|
143
|
+
Alternating contravariant tensor of degree 2 on the Rank-3 free
|
|
144
|
+
module M over the Integer Ring
|
|
145
|
+
sage: a.display() # expansion with respect to M's default basis (e)
|
|
146
|
+
e_0∧e_1
|
|
147
|
+
sage: from sage.tensor.modules.alternating_contr_tensor import AlternatingContrTensor
|
|
148
|
+
sage: isinstance(a, AlternatingContrTensor)
|
|
149
|
+
True
|
|
150
|
+
sage: a in A
|
|
151
|
+
True
|
|
152
|
+
sage: A.is_parent_of(a)
|
|
153
|
+
True
|
|
154
|
+
|
|
155
|
+
Elements can be constructed from ``A``. In particular, 0 yields
|
|
156
|
+
the zero element of ``A``::
|
|
157
|
+
|
|
158
|
+
sage: A(0)
|
|
159
|
+
Alternating contravariant tensor zero of degree 2 on the Rank-3
|
|
160
|
+
free module M over the Integer Ring
|
|
161
|
+
sage: A(0) is A.zero()
|
|
162
|
+
True
|
|
163
|
+
|
|
164
|
+
while nonzero elements are constructed by providing their components in a
|
|
165
|
+
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 = [[0,3,-1],[-3,0,4],[1,-4,0]]
|
|
170
|
+
sage: a = A(comp, basis=e, name='a') ; a
|
|
171
|
+
Alternating contravariant tensor a of degree 2 on the Rank-3
|
|
172
|
+
free module M over the Integer Ring
|
|
173
|
+
sage: a.display(e)
|
|
174
|
+
a = 3 e_0∧e_1 - e_0∧e_2 + 4 e_1∧e_2
|
|
175
|
+
|
|
176
|
+
An alternative is to construct the alternating contravariant tensor from an
|
|
177
|
+
empty list of components and to set the nonzero components afterwards::
|
|
178
|
+
|
|
179
|
+
sage: a = A([], name='a')
|
|
180
|
+
sage: a.set_comp(e)[0,1] = 3
|
|
181
|
+
sage: a.set_comp(e)[0,2] = -1
|
|
182
|
+
sage: a.set_comp(e)[1,2] = 4
|
|
183
|
+
sage: a.display(e)
|
|
184
|
+
a = 3 e_0∧e_1 - e_0∧e_2 + 4 e_1∧e_2
|
|
185
|
+
|
|
186
|
+
The exterior powers are unique::
|
|
187
|
+
|
|
188
|
+
sage: A is M.exterior_power(2)
|
|
189
|
+
True
|
|
190
|
+
|
|
191
|
+
The exterior power `\Lambda^1(M)` is nothing but `M`::
|
|
192
|
+
|
|
193
|
+
sage: M.exterior_power(1) is M
|
|
194
|
+
True
|
|
195
|
+
|
|
196
|
+
For a degree `p\geq 2`, there is a coercion
|
|
197
|
+
`\Lambda^p(M)\rightarrow T^{(p,0)}(M)`::
|
|
198
|
+
|
|
199
|
+
sage: T20 = M.tensor_module(2,0) ; T20
|
|
200
|
+
Free module of type-(2,0) tensors on the Rank-3 free module M
|
|
201
|
+
over the Integer Ring
|
|
202
|
+
sage: T20.has_coerce_map_from(A)
|
|
203
|
+
True
|
|
204
|
+
|
|
205
|
+
Of course, there is no coercion in the reverse direction::
|
|
206
|
+
|
|
207
|
+
sage: A.has_coerce_map_from(T20)
|
|
208
|
+
False
|
|
209
|
+
|
|
210
|
+
The coercion map `\Lambda^2(M)\rightarrow T^{(2,0)}(M)` in action::
|
|
211
|
+
|
|
212
|
+
sage: ta = T20(a) ; ta
|
|
213
|
+
Type-(2,0) tensor a on the Rank-3 free module M over the Integer Ring
|
|
214
|
+
sage: ta.display(e)
|
|
215
|
+
a = 3 e_0⊗e_1 - e_0⊗e_2 - 3 e_1⊗e_0 + 4 e_1⊗e_2 + e_2⊗e_0 - 4 e_2⊗e_1
|
|
216
|
+
sage: a.display(e)
|
|
217
|
+
a = 3 e_0∧e_1 - e_0∧e_2 + 4 e_1∧e_2
|
|
218
|
+
sage: ta.symmetries() # the antisymmetry is of course preserved
|
|
219
|
+
no symmetry; antisymmetry: (0, 1)
|
|
220
|
+
sage: ta == a # equality as type-(2,0) tensors
|
|
221
|
+
True
|
|
222
|
+
"""
|
|
223
|
+
|
|
224
|
+
Element = AlternatingContrTensor
|
|
225
|
+
|
|
226
|
+
def __init__(self, fmodule, degree, name=None, latex_name=None):
|
|
227
|
+
r"""
|
|
228
|
+
TESTS::
|
|
229
|
+
|
|
230
|
+
sage: from sage.tensor.modules.ext_pow_free_module import ExtPowerFreeModule
|
|
231
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
232
|
+
sage: e = M.basis('e')
|
|
233
|
+
sage: A = ExtPowerFreeModule(M, 2) ; A
|
|
234
|
+
2nd exterior power of the Rank-3 free module M over the
|
|
235
|
+
Integer Ring
|
|
236
|
+
sage: TestSuite(A).run()
|
|
237
|
+
"""
|
|
238
|
+
from sage.arith.misc import binomial
|
|
239
|
+
from sage.typeset.unicode_characters import unicode_bigwedge
|
|
240
|
+
self._fmodule = fmodule
|
|
241
|
+
self._degree = ZZ(degree)
|
|
242
|
+
rank = binomial(fmodule._rank, degree)
|
|
243
|
+
if name is None and fmodule._name is not None:
|
|
244
|
+
name = unicode_bigwedge + r'^{}('.format(degree) \
|
|
245
|
+
+ fmodule._name + ')'
|
|
246
|
+
if latex_name is None and fmodule._latex_name is not None:
|
|
247
|
+
latex_name = r'\Lambda^{' + str(degree) + r'}\left(' \
|
|
248
|
+
+ fmodule._latex_name + r'\right)'
|
|
249
|
+
super().__init__(fmodule._ring, rank,
|
|
250
|
+
name=name, latex_name=latex_name)
|
|
251
|
+
fmodule._all_modules.add(self)
|
|
252
|
+
|
|
253
|
+
def construction(self):
|
|
254
|
+
r"""
|
|
255
|
+
Return the functorial construction of ``self``.
|
|
256
|
+
|
|
257
|
+
This implementation just returns ``None``, as no functorial construction is implemented.
|
|
258
|
+
|
|
259
|
+
TESTS::
|
|
260
|
+
|
|
261
|
+
sage: from sage.tensor.modules.ext_pow_free_module import ExtPowerFreeModule
|
|
262
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
263
|
+
sage: e = M.basis('e')
|
|
264
|
+
sage: A = ExtPowerFreeModule(M, 2)
|
|
265
|
+
sage: A.construction() is None
|
|
266
|
+
True
|
|
267
|
+
"""
|
|
268
|
+
# No construction until https://github.com/sagemath/sage/issues/30242
|
|
269
|
+
# makes this a quotient of TensorFreeModule
|
|
270
|
+
return None
|
|
271
|
+
|
|
272
|
+
#### Parent methods
|
|
273
|
+
|
|
274
|
+
def _element_constructor_(self, comp=[], basis=None, name=None,
|
|
275
|
+
latex_name=None):
|
|
276
|
+
r"""
|
|
277
|
+
Construct an alternating contravariant tensor.
|
|
278
|
+
|
|
279
|
+
EXAMPLES::
|
|
280
|
+
|
|
281
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
282
|
+
sage: e = M.basis('e')
|
|
283
|
+
sage: A = M.exterior_power(2)
|
|
284
|
+
sage: a = A._element_constructor_(0) ; a
|
|
285
|
+
Alternating contravariant tensor zero of degree 2 on the
|
|
286
|
+
Rank-3 free module M over the Integer Ring
|
|
287
|
+
sage: a = A._element_constructor_([], name='a') ; a
|
|
288
|
+
Alternating contravariant tensor a of degree 2 on the Rank-3
|
|
289
|
+
free module M over the Integer Ring
|
|
290
|
+
sage: a[e,0,2], a[e,1,2] = 3, -1
|
|
291
|
+
sage: a.display()
|
|
292
|
+
a = 3 e_0∧e_2 - e_1∧e_2
|
|
293
|
+
"""
|
|
294
|
+
if isinstance(comp, (int, Integer)) and comp == 0:
|
|
295
|
+
return self.zero()
|
|
296
|
+
resu = self.element_class(self._fmodule, self._degree, name=name,
|
|
297
|
+
latex_name=latex_name)
|
|
298
|
+
if comp:
|
|
299
|
+
resu.set_comp(basis)[:] = comp
|
|
300
|
+
return resu
|
|
301
|
+
|
|
302
|
+
def _an_element_(self):
|
|
303
|
+
r"""
|
|
304
|
+
Construct some (unnamed) alternating contravariant tensor.
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: M = FiniteRankFreeModule(QQ, 4, name='M')
|
|
309
|
+
sage: e = M.basis('e')
|
|
310
|
+
sage: a = M.exterior_power(2)._an_element_() ; a
|
|
311
|
+
Alternating contravariant tensor of degree 2 on the 4-dimensional vector space M
|
|
312
|
+
over the Rational Field
|
|
313
|
+
sage: a.display()
|
|
314
|
+
1/2 e_0∧e_1
|
|
315
|
+
sage: a = M.exterior_power(3)._an_element_() ; a
|
|
316
|
+
Alternating contravariant tensor of degree 3 on the 4-dimensional vector space M
|
|
317
|
+
over the Rational Field
|
|
318
|
+
sage: a.display()
|
|
319
|
+
1/2 e_0∧e_1∧e_2
|
|
320
|
+
sage: a = M.exterior_power(4)._an_element_() ; a
|
|
321
|
+
Alternating contravariant tensor of degree 4 on the 4-dimensional vector space M
|
|
322
|
+
over the Rational Field
|
|
323
|
+
sage: a.display()
|
|
324
|
+
1/2 e_0∧e_1∧e_2∧e_3
|
|
325
|
+
|
|
326
|
+
TESTS:
|
|
327
|
+
|
|
328
|
+
When the base module has no default basis, a default
|
|
329
|
+
basis will be set for it::
|
|
330
|
+
|
|
331
|
+
sage: M2 = FiniteRankFreeModule(QQ, 4, name='M2')
|
|
332
|
+
sage: a = M2.exterior_power(2)._an_element_(); a
|
|
333
|
+
Alternating contravariant tensor of degree 2
|
|
334
|
+
on the 4-dimensional vector space M2 over the Rational Field
|
|
335
|
+
sage: a + a
|
|
336
|
+
Alternating contravariant tensor of degree 2
|
|
337
|
+
on the 4-dimensional vector space M2 over the Rational Field
|
|
338
|
+
sage: M2.default_basis()
|
|
339
|
+
Basis (e_0,e_1,e_2,e_3) on the 4-dimensional vector space M2 over the Rational Field
|
|
340
|
+
"""
|
|
341
|
+
resu = self.element_class(self._fmodule, self._degree)
|
|
342
|
+
# Make sure that the base module has a default basis
|
|
343
|
+
self._fmodule.an_element()
|
|
344
|
+
sindex = self._fmodule._sindex
|
|
345
|
+
ind = [sindex + i for i in range(resu._tensor_rank)]
|
|
346
|
+
resu.set_comp()[ind] = self._fmodule._ring.an_element()
|
|
347
|
+
return resu
|
|
348
|
+
|
|
349
|
+
#### End of parent methods
|
|
350
|
+
|
|
351
|
+
@cached_method
|
|
352
|
+
def zero(self):
|
|
353
|
+
r"""
|
|
354
|
+
Return the zero of ``self``.
|
|
355
|
+
|
|
356
|
+
EXAMPLES::
|
|
357
|
+
|
|
358
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
359
|
+
sage: e = M.basis('e')
|
|
360
|
+
sage: A = M.exterior_power(2)
|
|
361
|
+
sage: A.zero()
|
|
362
|
+
Alternating contravariant tensor zero of degree 2 on the Rank-3 free
|
|
363
|
+
module M over the Integer Ring
|
|
364
|
+
sage: A(0) is A.zero()
|
|
365
|
+
True
|
|
366
|
+
"""
|
|
367
|
+
resu = self._element_constructor_(name='zero', latex_name='0')
|
|
368
|
+
for basis in self._fmodule._known_bases:
|
|
369
|
+
resu._add_comp_unsafe(basis)
|
|
370
|
+
# (since new components are initialized to zero)
|
|
371
|
+
resu._is_zero = True # This element is certainly zero
|
|
372
|
+
resu.set_immutable()
|
|
373
|
+
return resu
|
|
374
|
+
|
|
375
|
+
def _repr_(self):
|
|
376
|
+
r"""
|
|
377
|
+
Return a string representation of ``self``.
|
|
378
|
+
|
|
379
|
+
EXAMPLES::
|
|
380
|
+
|
|
381
|
+
sage: M = FiniteRankFreeModule(ZZ, 5, name='M')
|
|
382
|
+
sage: M.exterior_power(2)._repr_()
|
|
383
|
+
'2nd exterior power of the Rank-5 free module M over the Integer Ring'
|
|
384
|
+
sage: M.exterior_power(3)._repr_()
|
|
385
|
+
'3rd exterior power of the Rank-5 free module M over the Integer Ring'
|
|
386
|
+
sage: M.exterior_power(4)._repr_()
|
|
387
|
+
'4th exterior power of the Rank-5 free module M over the Integer Ring'
|
|
388
|
+
sage: M.exterior_power(5)._repr_()
|
|
389
|
+
'5th exterior power of the Rank-5 free module M over the Integer Ring'
|
|
390
|
+
sage: M.exterior_power(21)._repr_()
|
|
391
|
+
'21st exterior power of the Rank-5 free module M over the Integer Ring'
|
|
392
|
+
"""
|
|
393
|
+
description = "{}".format(self._degree.ordinal_str())
|
|
394
|
+
description += " exterior power of the {}".format(self._fmodule)
|
|
395
|
+
return description
|
|
396
|
+
|
|
397
|
+
def base_module(self):
|
|
398
|
+
r"""
|
|
399
|
+
Return the free module on which ``self`` is constructed.
|
|
400
|
+
|
|
401
|
+
OUTPUT:
|
|
402
|
+
|
|
403
|
+
- instance of :class:`FiniteRankFreeModule` representing the
|
|
404
|
+
free module on which the exterior power is defined.
|
|
405
|
+
|
|
406
|
+
EXAMPLES::
|
|
407
|
+
|
|
408
|
+
sage: M = FiniteRankFreeModule(ZZ, 5, name='M')
|
|
409
|
+
sage: A = M.exterior_power(2)
|
|
410
|
+
sage: A.base_module()
|
|
411
|
+
Rank-5 free module M over the Integer Ring
|
|
412
|
+
sage: A.base_module() is M
|
|
413
|
+
True
|
|
414
|
+
"""
|
|
415
|
+
return self._fmodule
|
|
416
|
+
|
|
417
|
+
def degree(self):
|
|
418
|
+
r"""
|
|
419
|
+
Return the degree of ``self``.
|
|
420
|
+
|
|
421
|
+
OUTPUT:
|
|
422
|
+
|
|
423
|
+
- integer `p` such that ``self`` is the exterior power
|
|
424
|
+
`\Lambda^p(M)`
|
|
425
|
+
|
|
426
|
+
EXAMPLES::
|
|
427
|
+
|
|
428
|
+
sage: M = FiniteRankFreeModule(ZZ, 5, name='M')
|
|
429
|
+
sage: A = M.exterior_power(2)
|
|
430
|
+
sage: A.degree()
|
|
431
|
+
2
|
|
432
|
+
sage: M.exterior_power(4).degree()
|
|
433
|
+
4
|
|
434
|
+
"""
|
|
435
|
+
return self._degree
|
|
436
|
+
|
|
437
|
+
#***********************************************************************
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
class ExtPowerDualFreeModule(FiniteRankFreeModule_abstract):
|
|
441
|
+
r"""
|
|
442
|
+
Exterior power of the dual of a free module of finite rank
|
|
443
|
+
over a commutative ring.
|
|
444
|
+
|
|
445
|
+
Given a free module `M` of finite rank over a commutative ring `R`
|
|
446
|
+
and a positive integer `p`, the `p`-*th exterior power of the dual of*
|
|
447
|
+
`M` is the set `\Lambda^p(M^*)` of all alternating forms of degree
|
|
448
|
+
`p` on `M`, i.e. of all multilinear maps
|
|
449
|
+
|
|
450
|
+
.. MATH::
|
|
451
|
+
|
|
452
|
+
\underbrace{M\times\cdots\times M}_{p\ \; \mbox{times}}
|
|
453
|
+
\longrightarrow R
|
|
454
|
+
|
|
455
|
+
that vanish whenever any of two of their arguments are equal.
|
|
456
|
+
Note that `\Lambda^1(M^*) = M^*` (the dual of `M`).
|
|
457
|
+
|
|
458
|
+
`\Lambda^p(M^*)` is a free module of rank `\binom{n}{p}` over
|
|
459
|
+
`R`, where `n` is the rank of `M`.
|
|
460
|
+
Accordingly, the class :class:`ExtPowerDualFreeModule` inherits from
|
|
461
|
+
the class
|
|
462
|
+
:class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule_abstract`.
|
|
463
|
+
|
|
464
|
+
This is a Sage *parent* class, whose *element* class is
|
|
465
|
+
:class:`~sage.tensor.modules.free_module_alt_form.FreeModuleAltForm`.
|
|
466
|
+
|
|
467
|
+
INPUT:
|
|
468
|
+
|
|
469
|
+
- ``fmodule`` -- free module `M` of finite rank, as an instance of
|
|
470
|
+
:class:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule`
|
|
471
|
+
- ``degree`` -- positive integer; the degree `p` of the alternating
|
|
472
|
+
forms
|
|
473
|
+
- ``name`` -- (default: ``None``) string; name given to `\Lambda^p(M^*)`
|
|
474
|
+
- ``latex_name`` -- (default: ``None``) string; LaTeX symbol to
|
|
475
|
+
denote `\Lambda^p(M^*)`
|
|
476
|
+
|
|
477
|
+
EXAMPLES:
|
|
478
|
+
|
|
479
|
+
2nd exterior power of the dual of a free `\ZZ`-module of rank 3::
|
|
480
|
+
|
|
481
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
482
|
+
sage: e = M.basis('e')
|
|
483
|
+
sage: from sage.tensor.modules.ext_pow_free_module import ExtPowerDualFreeModule
|
|
484
|
+
sage: A = ExtPowerDualFreeModule(M, 2) ; A
|
|
485
|
+
2nd exterior power of the dual of the Rank-3 free module M over the
|
|
486
|
+
Integer Ring
|
|
487
|
+
|
|
488
|
+
Instead of importing ExtPowerDualFreeModule in the global name space,
|
|
489
|
+
it is recommended to use the module's method
|
|
490
|
+
:meth:`~sage.tensor.modules.finite_rank_free_module.FiniteRankFreeModule.dual_exterior_power`::
|
|
491
|
+
|
|
492
|
+
sage: A = M.dual_exterior_power(2) ; A
|
|
493
|
+
2nd exterior power of the dual of the Rank-3 free module M over the
|
|
494
|
+
Integer Ring
|
|
495
|
+
sage: latex(A)
|
|
496
|
+
\Lambda^{2}\left(M^*\right)
|
|
497
|
+
|
|
498
|
+
``A`` is a module (actually a free module) over `\ZZ`::
|
|
499
|
+
|
|
500
|
+
sage: A.category()
|
|
501
|
+
Category of finite dimensional modules over Integer Ring
|
|
502
|
+
sage: A in Modules(ZZ)
|
|
503
|
+
True
|
|
504
|
+
sage: A.rank()
|
|
505
|
+
3
|
|
506
|
+
sage: A.base_ring()
|
|
507
|
+
Integer Ring
|
|
508
|
+
sage: A.base_module()
|
|
509
|
+
Rank-3 free module M over the Integer Ring
|
|
510
|
+
|
|
511
|
+
``A`` is a *parent* object, whose elements are alternating forms,
|
|
512
|
+
represented by instances of the class
|
|
513
|
+
:class:`~sage.tensor.modules.free_module_alt_form.FreeModuleAltForm`::
|
|
514
|
+
|
|
515
|
+
sage: a = A.an_element() ; a
|
|
516
|
+
Alternating form of degree 2 on the Rank-3 free module M over the
|
|
517
|
+
Integer Ring
|
|
518
|
+
sage: a.display() # expansion with respect to M's default basis (e)
|
|
519
|
+
e^0∧e^1
|
|
520
|
+
sage: from sage.tensor.modules.free_module_alt_form import FreeModuleAltForm
|
|
521
|
+
sage: isinstance(a, FreeModuleAltForm)
|
|
522
|
+
True
|
|
523
|
+
sage: a in A
|
|
524
|
+
True
|
|
525
|
+
sage: A.is_parent_of(a)
|
|
526
|
+
True
|
|
527
|
+
|
|
528
|
+
Elements can be constructed from ``A``. In particular, 0 yields
|
|
529
|
+
the zero element of ``A``::
|
|
530
|
+
|
|
531
|
+
sage: A(0)
|
|
532
|
+
Alternating form zero of degree 2 on the Rank-3 free module M over the
|
|
533
|
+
Integer Ring
|
|
534
|
+
sage: A(0) is A.zero()
|
|
535
|
+
True
|
|
536
|
+
|
|
537
|
+
while nonzero elements are constructed by providing their components in a
|
|
538
|
+
given basis::
|
|
539
|
+
|
|
540
|
+
sage: e
|
|
541
|
+
Basis (e_0,e_1,e_2) on the Rank-3 free module M over the Integer Ring
|
|
542
|
+
sage: comp = [[0,3,-1],[-3,0,4],[1,-4,0]]
|
|
543
|
+
sage: a = A(comp, basis=e, name='a') ; a
|
|
544
|
+
Alternating form a of degree 2 on the Rank-3 free module M over the
|
|
545
|
+
Integer Ring
|
|
546
|
+
sage: a.display(e)
|
|
547
|
+
a = 3 e^0∧e^1 - e^0∧e^2 + 4 e^1∧e^2
|
|
548
|
+
|
|
549
|
+
An alternative is to construct the alternating form from an empty list of
|
|
550
|
+
components and to set the nonzero components afterwards::
|
|
551
|
+
|
|
552
|
+
sage: a = A([], name='a')
|
|
553
|
+
sage: a.set_comp(e)[0,1] = 3
|
|
554
|
+
sage: a.set_comp(e)[0,2] = -1
|
|
555
|
+
sage: a.set_comp(e)[1,2] = 4
|
|
556
|
+
sage: a.display(e)
|
|
557
|
+
a = 3 e^0∧e^1 - e^0∧e^2 + 4 e^1∧e^2
|
|
558
|
+
|
|
559
|
+
The exterior powers are unique::
|
|
560
|
+
|
|
561
|
+
sage: A is M.dual_exterior_power(2)
|
|
562
|
+
True
|
|
563
|
+
|
|
564
|
+
The exterior power `\Lambda^1(M^*)` is nothing but `M^*`::
|
|
565
|
+
|
|
566
|
+
sage: M.dual_exterior_power(1) is M.dual()
|
|
567
|
+
True
|
|
568
|
+
sage: M.dual()
|
|
569
|
+
Dual of the Rank-3 free module M over the Integer Ring
|
|
570
|
+
sage: latex(M.dual())
|
|
571
|
+
M^*
|
|
572
|
+
|
|
573
|
+
It also coincides with the module of type-`(0,1)` tensors::
|
|
574
|
+
|
|
575
|
+
sage: M.dual_exterior_power(1) is M.tensor_module(0,1)
|
|
576
|
+
True
|
|
577
|
+
|
|
578
|
+
For a degree `p\geq 2`, there is a coercion map
|
|
579
|
+
`\Lambda^p(M^*)\rightarrow T^{(0,p)}(M)`::
|
|
580
|
+
|
|
581
|
+
sage: T02 = M.tensor_module(0,2) ; T02
|
|
582
|
+
Free module of type-(0,2) tensors on the Rank-3 free module M over the
|
|
583
|
+
Integer Ring
|
|
584
|
+
sage: T02.has_coerce_map_from(A)
|
|
585
|
+
True
|
|
586
|
+
sage: A.has_coerce_map_from(T02)
|
|
587
|
+
False
|
|
588
|
+
|
|
589
|
+
The coercion map `\Lambda^2(M^*)\rightarrow T^{(0,2)}(M)` in action::
|
|
590
|
+
|
|
591
|
+
sage: ta = T02(a) ; ta
|
|
592
|
+
Type-(0,2) tensor a on the Rank-3 free module M over the Integer Ring
|
|
593
|
+
sage: ta.display(e)
|
|
594
|
+
a = 3 e^0⊗e^1 - e^0⊗e^2 - 3 e^1⊗e^0 + 4 e^1⊗e^2 + e^2⊗e^0 - 4 e^2⊗e^1
|
|
595
|
+
sage: a.display(e)
|
|
596
|
+
a = 3 e^0∧e^1 - e^0∧e^2 + 4 e^1∧e^2
|
|
597
|
+
sage: ta.symmetries() # the antisymmetry is of course preserved
|
|
598
|
+
no symmetry; antisymmetry: (0, 1)
|
|
599
|
+
"""
|
|
600
|
+
|
|
601
|
+
Element = FreeModuleAltForm
|
|
602
|
+
|
|
603
|
+
def __init__(self, fmodule, degree, name=None, latex_name=None):
|
|
604
|
+
r"""
|
|
605
|
+
TESTS::
|
|
606
|
+
|
|
607
|
+
sage: from sage.tensor.modules.ext_pow_free_module import ExtPowerDualFreeModule
|
|
608
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
609
|
+
sage: e = M.basis('e')
|
|
610
|
+
sage: A = ExtPowerDualFreeModule(M, 2) ; A
|
|
611
|
+
2nd exterior power of the dual of the Rank-3 free module M over
|
|
612
|
+
the Integer Ring
|
|
613
|
+
sage: TestSuite(A).run()
|
|
614
|
+
"""
|
|
615
|
+
from sage.arith.misc import binomial
|
|
616
|
+
from sage.typeset.unicode_characters import unicode_bigwedge
|
|
617
|
+
self._fmodule = fmodule
|
|
618
|
+
self._degree = ZZ(degree)
|
|
619
|
+
rank = binomial(fmodule._rank, degree)
|
|
620
|
+
if name is None and fmodule._name is not None:
|
|
621
|
+
name = unicode_bigwedge + r'^{}('.format(degree) \
|
|
622
|
+
+ fmodule._name + '*)'
|
|
623
|
+
if latex_name is None and fmodule._latex_name is not None:
|
|
624
|
+
latex_name = r'\Lambda^{' + str(degree) + r'}\left(' \
|
|
625
|
+
+ fmodule._latex_name + r'^*\right)'
|
|
626
|
+
super().__init__(fmodule._ring, rank, name=name,
|
|
627
|
+
latex_name=latex_name)
|
|
628
|
+
fmodule._all_modules.add(self)
|
|
629
|
+
|
|
630
|
+
def construction(self):
|
|
631
|
+
r"""
|
|
632
|
+
Return the functorial construction of ``self``.
|
|
633
|
+
|
|
634
|
+
This implementation just returns ``None``, as no functorial construction is implemented.
|
|
635
|
+
|
|
636
|
+
TESTS::
|
|
637
|
+
|
|
638
|
+
sage: from sage.tensor.modules.ext_pow_free_module import ExtPowerDualFreeModule
|
|
639
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
640
|
+
sage: e = M.basis('e')
|
|
641
|
+
sage: A = ExtPowerDualFreeModule(M, 2)
|
|
642
|
+
sage: A.construction() is None
|
|
643
|
+
True
|
|
644
|
+
"""
|
|
645
|
+
# No construction until https://github.com/sagemath/sage/issues/30242
|
|
646
|
+
# makes this a quotient of TensorFreeModule
|
|
647
|
+
return None
|
|
648
|
+
|
|
649
|
+
#### Parent methods
|
|
650
|
+
|
|
651
|
+
def _element_constructor_(self, comp=[], basis=None, name=None,
|
|
652
|
+
latex_name=None):
|
|
653
|
+
r"""
|
|
654
|
+
Construct an alternating form.
|
|
655
|
+
|
|
656
|
+
EXAMPLES::
|
|
657
|
+
|
|
658
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
659
|
+
sage: e = M.basis('e')
|
|
660
|
+
sage: A = M.dual_exterior_power(2)
|
|
661
|
+
sage: a = A._element_constructor_(0) ; a
|
|
662
|
+
Alternating form zero of degree 2 on the Rank-3 free module M over
|
|
663
|
+
the Integer Ring
|
|
664
|
+
sage: a = A._element_constructor_([], name='a') ; a
|
|
665
|
+
Alternating form a of degree 2 on the Rank-3 free module M over
|
|
666
|
+
the Integer Ring
|
|
667
|
+
sage: a[e,0,2], a[e,1,2] = 3, -1
|
|
668
|
+
sage: a.display()
|
|
669
|
+
a = 3 e^0∧e^2 - e^1∧e^2
|
|
670
|
+
"""
|
|
671
|
+
if isinstance(comp, (int, Integer)) and comp == 0:
|
|
672
|
+
return self.zero()
|
|
673
|
+
if isinstance(comp, FreeModuleTensor):
|
|
674
|
+
# coercion of a tensor of type (0,1) to a linear form
|
|
675
|
+
tensor = comp # for readability
|
|
676
|
+
if tensor.tensor_type() == (0,1) and self._degree == 1 and \
|
|
677
|
+
tensor.base_module() is self._fmodule:
|
|
678
|
+
resu = self.element_class(self._fmodule, 1, name=tensor._name,
|
|
679
|
+
latex_name=tensor._latex_name)
|
|
680
|
+
for basis, comp in tensor._components.items():
|
|
681
|
+
resu._components[basis] = comp.copy()
|
|
682
|
+
return resu
|
|
683
|
+
else:
|
|
684
|
+
raise TypeError("cannot coerce the {} ".format(tensor) +
|
|
685
|
+
"to an element of {}".format(self))
|
|
686
|
+
# standard construction
|
|
687
|
+
resu = self.element_class(self._fmodule, self._degree, name=name,
|
|
688
|
+
latex_name=latex_name)
|
|
689
|
+
if comp:
|
|
690
|
+
resu.set_comp(basis)[:] = comp
|
|
691
|
+
return resu
|
|
692
|
+
|
|
693
|
+
def _an_element_(self):
|
|
694
|
+
r"""
|
|
695
|
+
Construct some (unnamed) alternating form.
|
|
696
|
+
|
|
697
|
+
EXAMPLES::
|
|
698
|
+
|
|
699
|
+
sage: M = FiniteRankFreeModule(QQ, 4, name='M')
|
|
700
|
+
sage: e = M.basis('e')
|
|
701
|
+
sage: a = M.dual_exterior_power(2)._an_element_() ; a
|
|
702
|
+
Alternating form of degree 2 on the 4-dimensional vector space M
|
|
703
|
+
over the Rational Field
|
|
704
|
+
sage: a.display()
|
|
705
|
+
1/2 e^0∧e^1
|
|
706
|
+
sage: a = M.dual_exterior_power(3)._an_element_() ; a
|
|
707
|
+
Alternating form of degree 3 on the 4-dimensional vector space M
|
|
708
|
+
over the Rational Field
|
|
709
|
+
sage: a.display()
|
|
710
|
+
1/2 e^0∧e^1∧e^2
|
|
711
|
+
sage: a = M.dual_exterior_power(4)._an_element_() ; a
|
|
712
|
+
Alternating form of degree 4 on the 4-dimensional vector space M
|
|
713
|
+
over the Rational Field
|
|
714
|
+
sage: a.display()
|
|
715
|
+
1/2 e^0∧e^1∧e^2∧e^3
|
|
716
|
+
|
|
717
|
+
TESTS:
|
|
718
|
+
|
|
719
|
+
When the base module has no default basis, a default
|
|
720
|
+
basis will be set for it::
|
|
721
|
+
|
|
722
|
+
sage: M2 = FiniteRankFreeModule(QQ, 4, name='M2')
|
|
723
|
+
sage: a = M2.dual_exterior_power(2)._an_element_(); a
|
|
724
|
+
Alternating form of degree 2 on the 4-dimensional vector space M2 over the Rational Field
|
|
725
|
+
sage: a + a
|
|
726
|
+
Alternating form of degree 2 on the 4-dimensional vector space M2 over the Rational Field
|
|
727
|
+
sage: M2.default_basis()
|
|
728
|
+
Basis (e_0,e_1,e_2,e_3) on the 4-dimensional vector space M2 over the Rational Field
|
|
729
|
+
"""
|
|
730
|
+
resu = self.element_class(self._fmodule, self._degree)
|
|
731
|
+
# Make sure that the base module has a default basis
|
|
732
|
+
self._fmodule.an_element()
|
|
733
|
+
sindex = self._fmodule._sindex
|
|
734
|
+
ind = [sindex + i for i in range(resu._tensor_rank)]
|
|
735
|
+
resu.set_comp()[ind] = self._fmodule._ring.an_element()
|
|
736
|
+
return resu
|
|
737
|
+
|
|
738
|
+
#### End of parent methods
|
|
739
|
+
|
|
740
|
+
@cached_method
|
|
741
|
+
def zero(self):
|
|
742
|
+
r"""
|
|
743
|
+
Return the zero of ``self``.
|
|
744
|
+
|
|
745
|
+
EXAMPLES::
|
|
746
|
+
|
|
747
|
+
sage: M = FiniteRankFreeModule(ZZ, 3, name='M')
|
|
748
|
+
sage: e = M.basis('e')
|
|
749
|
+
sage: A = M.dual_exterior_power(2)
|
|
750
|
+
sage: A.zero()
|
|
751
|
+
Alternating form zero of degree 2 on the Rank-3 free module M over
|
|
752
|
+
the Integer Ring
|
|
753
|
+
sage: A(0) is A.zero()
|
|
754
|
+
True
|
|
755
|
+
"""
|
|
756
|
+
resu = self._element_constructor_(name='zero', latex_name='0')
|
|
757
|
+
for basis in self._fmodule._known_bases:
|
|
758
|
+
resu._components[basis] = resu._new_comp(basis)
|
|
759
|
+
# (since new components are initialized to zero)
|
|
760
|
+
resu._is_zero = True # This element is certainly zero
|
|
761
|
+
resu.set_immutable()
|
|
762
|
+
return resu
|
|
763
|
+
|
|
764
|
+
def _repr_(self):
|
|
765
|
+
r"""
|
|
766
|
+
Return a string representation of ``self``.
|
|
767
|
+
|
|
768
|
+
EXAMPLES::
|
|
769
|
+
|
|
770
|
+
sage: M = FiniteRankFreeModule(ZZ, 5, name='M')
|
|
771
|
+
sage: M.dual_exterior_power(2)._repr_()
|
|
772
|
+
'2nd exterior power of the dual of the Rank-5 free module M over the Integer Ring'
|
|
773
|
+
sage: M.dual_exterior_power(3)._repr_()
|
|
774
|
+
'3rd exterior power of the dual of the Rank-5 free module M over the Integer Ring'
|
|
775
|
+
sage: M.dual_exterior_power(4)._repr_()
|
|
776
|
+
'4th exterior power of the dual of the Rank-5 free module M over the Integer Ring'
|
|
777
|
+
sage: M.dual_exterior_power(5)._repr_()
|
|
778
|
+
'5th exterior power of the dual of the Rank-5 free module M over the Integer Ring'
|
|
779
|
+
sage: M.dual_exterior_power(21)._repr_()
|
|
780
|
+
'21st exterior power of the dual of the Rank-5 free module M over the Integer Ring'
|
|
781
|
+
"""
|
|
782
|
+
description = "{}".format(self._degree.ordinal_str())
|
|
783
|
+
description += " exterior power of the dual of the {}".format(
|
|
784
|
+
self._fmodule)
|
|
785
|
+
return description
|
|
786
|
+
|
|
787
|
+
def base_module(self):
|
|
788
|
+
r"""
|
|
789
|
+
Return the free module on which ``self`` is constructed.
|
|
790
|
+
|
|
791
|
+
OUTPUT:
|
|
792
|
+
|
|
793
|
+
- instance of :class:`FiniteRankFreeModule` representing the free
|
|
794
|
+
module on which the exterior power is defined.
|
|
795
|
+
|
|
796
|
+
EXAMPLES::
|
|
797
|
+
|
|
798
|
+
sage: M = FiniteRankFreeModule(ZZ, 5, name='M')
|
|
799
|
+
sage: A = M.dual_exterior_power(2)
|
|
800
|
+
sage: A.base_module()
|
|
801
|
+
Rank-5 free module M over the Integer Ring
|
|
802
|
+
sage: A.base_module() is M
|
|
803
|
+
True
|
|
804
|
+
"""
|
|
805
|
+
return self._fmodule
|
|
806
|
+
|
|
807
|
+
def degree(self):
|
|
808
|
+
r"""
|
|
809
|
+
Return the degree of ``self``.
|
|
810
|
+
|
|
811
|
+
OUTPUT:
|
|
812
|
+
|
|
813
|
+
- integer `p` such that ``self`` is the exterior power `\Lambda^p(M^*)`
|
|
814
|
+
|
|
815
|
+
EXAMPLES::
|
|
816
|
+
|
|
817
|
+
sage: M = FiniteRankFreeModule(ZZ, 5, name='M')
|
|
818
|
+
sage: A = M.dual_exterior_power(2)
|
|
819
|
+
sage: A.degree()
|
|
820
|
+
2
|
|
821
|
+
sage: M.dual_exterior_power(4).degree()
|
|
822
|
+
4
|
|
823
|
+
"""
|
|
824
|
+
return self._degree
|