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,1060 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.combinat
|
|
3
|
+
r"""
|
|
4
|
+
Finitely generated free graded left modules over connected graded algebras
|
|
5
|
+
|
|
6
|
+
Let `A` be a connected graded algebra. Some methods here require in
|
|
7
|
+
addition that `A` be an algebra over a field or a PID and that Sage
|
|
8
|
+
has a description of a basis for `A`.
|
|
9
|
+
|
|
10
|
+
For example, let `p` be a prime number. The mod `p` Steenrod algebra
|
|
11
|
+
`A_p` is a connected algebra over the finite field of `p` elements.
|
|
12
|
+
Many of the modules presented here will be defined over `A_p`, or one
|
|
13
|
+
of its sub-Hopf algebras. E.g.::
|
|
14
|
+
|
|
15
|
+
sage: A = SteenrodAlgebra(p=2)
|
|
16
|
+
|
|
17
|
+
However, the current implementation can use any connected graded
|
|
18
|
+
algebra that has a graded basis where each graded part is finite
|
|
19
|
+
dimensional. Another good family is the exterior algebras::
|
|
20
|
+
|
|
21
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
22
|
+
|
|
23
|
+
A free module is defined by the graded algebra and an ordered tuple
|
|
24
|
+
of degrees for the generators::
|
|
25
|
+
|
|
26
|
+
sage: M = A.free_graded_module(generator_degrees=(0,1))
|
|
27
|
+
sage: M
|
|
28
|
+
Free graded left module on 2 generators over
|
|
29
|
+
mod 2 Steenrod algebra, milnor basis
|
|
30
|
+
|
|
31
|
+
sage: F.<a,b,c> = E.free_graded_module((0,3,6))
|
|
32
|
+
sage: F
|
|
33
|
+
Free graded left module on 3 generators over
|
|
34
|
+
The exterior algebra of rank 3 over Rational Field
|
|
35
|
+
|
|
36
|
+
The resulting free modules will have generators in the degrees as specified::
|
|
37
|
+
|
|
38
|
+
sage: M.generator_degrees()
|
|
39
|
+
(0, 1)
|
|
40
|
+
sage: F.generator_degrees()
|
|
41
|
+
(0, 3, 6)
|
|
42
|
+
|
|
43
|
+
The default names for the generators are ``g[degree]`` if they are in
|
|
44
|
+
distinct degrees, ``g[degree, i]`` otherwise. They can be given other
|
|
45
|
+
names, as was done when creating the module ``F``::
|
|
46
|
+
|
|
47
|
+
sage: M.generators()
|
|
48
|
+
(g[0], g[1])
|
|
49
|
+
sage: F.generators()
|
|
50
|
+
(a, b, c)
|
|
51
|
+
|
|
52
|
+
The connectivity of a module over a connected graded algebra is the minimum
|
|
53
|
+
degree of all its module generators. Thus, if the module is non-trivial, the
|
|
54
|
+
connectivity is an integer::
|
|
55
|
+
|
|
56
|
+
sage: M.connectivity()
|
|
57
|
+
0
|
|
58
|
+
|
|
59
|
+
Module elements
|
|
60
|
+
---------------
|
|
61
|
+
|
|
62
|
+
For an `A`-module with generators `\{g_i\}_{i=1}^N`, any homogeneous element
|
|
63
|
+
of degree `n` has the form
|
|
64
|
+
|
|
65
|
+
.. MATH::
|
|
66
|
+
|
|
67
|
+
x = \sum_{i=1}^N a_i\cdot g_i\,,
|
|
68
|
+
|
|
69
|
+
where `a_i\in A_{n-\deg(g_i)}` for all `i`. The ordered set `\{a_i\}`
|
|
70
|
+
is referred to as the coefficients of `x`.
|
|
71
|
+
|
|
72
|
+
You can produce module elements from a given set of coefficients::
|
|
73
|
+
|
|
74
|
+
sage: coeffs = [Sq(5), Sq(1,1)]
|
|
75
|
+
sage: x = M(coeffs); x
|
|
76
|
+
Sq(5)*g[0] + Sq(1,1)*g[1]
|
|
77
|
+
|
|
78
|
+
You can also use the module action::
|
|
79
|
+
|
|
80
|
+
sage: Sq(2) * x
|
|
81
|
+
(Sq(4,1)+Sq(7))*g[0] + Sq(3,1)*g[1]
|
|
82
|
+
|
|
83
|
+
Each nonzero element has a well-defined degree::
|
|
84
|
+
|
|
85
|
+
sage: x.degree()
|
|
86
|
+
5
|
|
87
|
+
|
|
88
|
+
However the zero element does not::
|
|
89
|
+
|
|
90
|
+
sage: zero = M.zero(); zero
|
|
91
|
+
0
|
|
92
|
+
sage: zero.degree()
|
|
93
|
+
Traceback (most recent call last):
|
|
94
|
+
...
|
|
95
|
+
ValueError: the zero element does not have a well-defined degree
|
|
96
|
+
|
|
97
|
+
Any two elements can be added as long as they are in the same degree::
|
|
98
|
+
|
|
99
|
+
sage: y = M.an_element(5); y
|
|
100
|
+
Sq(2,1)*g[0] + Sq(4)*g[1]
|
|
101
|
+
sage: x + y
|
|
102
|
+
(Sq(2,1)+Sq(5))*g[0] + (Sq(1,1)+Sq(4))*g[1]
|
|
103
|
+
|
|
104
|
+
or when at least one of them is zero::
|
|
105
|
+
|
|
106
|
+
sage: x + zero == x
|
|
107
|
+
True
|
|
108
|
+
|
|
109
|
+
Finally, additive inverses exist::
|
|
110
|
+
|
|
111
|
+
sage: x - x
|
|
112
|
+
0
|
|
113
|
+
|
|
114
|
+
For every integer `n`, the set of module elements of degree `n` form
|
|
115
|
+
a free module over the ground ring `k`. A basis for this free module
|
|
116
|
+
can be computed::
|
|
117
|
+
|
|
118
|
+
sage: M.basis_elements(5)
|
|
119
|
+
(Sq(2,1)*g[0], Sq(5)*g[0], Sq(1,1)*g[1], Sq(4)*g[1])
|
|
120
|
+
|
|
121
|
+
together with a corresponding free module presentation::
|
|
122
|
+
|
|
123
|
+
sage: M.vector_presentation(5)
|
|
124
|
+
Vector space of dimension 4 over Finite Field of size 2
|
|
125
|
+
|
|
126
|
+
Given any element, its coordinates with respect to this basis can be computed::
|
|
127
|
+
|
|
128
|
+
sage: v = x.vector_presentation(); v
|
|
129
|
+
(0, 1, 1, 0)
|
|
130
|
+
|
|
131
|
+
Going the other way, any element can be constructed by specifying its
|
|
132
|
+
coordinates::
|
|
133
|
+
|
|
134
|
+
sage: x_ = M.element_from_coordinates((0,1,1,0), 5)
|
|
135
|
+
sage: x_
|
|
136
|
+
Sq(5)*g[0] + Sq(1,1)*g[1]
|
|
137
|
+
sage: x_ == x
|
|
138
|
+
True
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
Module homomorphisms
|
|
142
|
+
--------------------
|
|
143
|
+
|
|
144
|
+
Homomorphisms of free graded `A`-modules `M\to N` are linear maps of their
|
|
145
|
+
underlying free `k`-module which commute with the `A`-module structure.
|
|
146
|
+
|
|
147
|
+
To create a homomorphism, first create the object modeling the set of all
|
|
148
|
+
such homomorphisms using the free function ``Hom``::
|
|
149
|
+
|
|
150
|
+
sage: M = A.free_graded_module((0,1))
|
|
151
|
+
sage: N.<c2> = A.free_graded_module((2,))
|
|
152
|
+
sage: homspace = Hom(M, N); homspace
|
|
153
|
+
Set of Morphisms from Free graded left module on 2 generators
|
|
154
|
+
over mod 2 Steenrod algebra, milnor basis
|
|
155
|
+
to Free graded left module on 1 generator
|
|
156
|
+
over mod 2 Steenrod algebra, milnor basis
|
|
157
|
+
in Category of finite dimensional graded modules with basis
|
|
158
|
+
over mod 2 Steenrod algebra, milnor basis
|
|
159
|
+
|
|
160
|
+
Just as module elements, homomorphisms are created using the homspace
|
|
161
|
+
object. The only argument is a list of module elements in the codomain,
|
|
162
|
+
corresponding to the module generators of the domain::
|
|
163
|
+
|
|
164
|
+
sage: values = [Sq(2)*c2, Sq(2)*Sq(1)*c2]
|
|
165
|
+
sage: f = homspace(values)
|
|
166
|
+
|
|
167
|
+
The resulting homomorphism is the one sending the `i`-th generator of the
|
|
168
|
+
domain to the `i`-th codomain value given::
|
|
169
|
+
|
|
170
|
+
sage: f
|
|
171
|
+
Module morphism:
|
|
172
|
+
From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
|
|
173
|
+
To: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
|
|
174
|
+
Defn: g[0] |--> Sq(2)*c2
|
|
175
|
+
g[1] |--> (Sq(0,1)+Sq(3))*c2
|
|
176
|
+
|
|
177
|
+
Convenience methods exist for creating the trivial morphism::
|
|
178
|
+
|
|
179
|
+
sage: homspace.zero()
|
|
180
|
+
Module morphism:
|
|
181
|
+
From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
|
|
182
|
+
To: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
|
|
183
|
+
Defn: g[0] |--> 0
|
|
184
|
+
g[1] |--> 0
|
|
185
|
+
|
|
186
|
+
as well as the identity endomorphism::
|
|
187
|
+
|
|
188
|
+
sage: Hom(M, M).identity()
|
|
189
|
+
Module endomorphism of Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
|
|
190
|
+
Defn: g[0] |--> g[0]
|
|
191
|
+
g[1] |--> g[1]
|
|
192
|
+
|
|
193
|
+
Homomorphisms can be evaluated on elements of the domain module::
|
|
194
|
+
|
|
195
|
+
sage: v1 = f(Sq(7)*M.generator(0)); v1
|
|
196
|
+
Sq(3,2)*c2
|
|
197
|
+
|
|
198
|
+
sage: v2 = f(Sq(17)*M.generator(1)); v2
|
|
199
|
+
(Sq(11,3)+Sq(13,0,1)+Sq(17,1))*c2
|
|
200
|
+
|
|
201
|
+
and they respect the module action::
|
|
202
|
+
|
|
203
|
+
sage: v1 == Sq(7)*f(M.generator(0))
|
|
204
|
+
True
|
|
205
|
+
|
|
206
|
+
sage: v2 == Sq(17)*f(M.generator(1))
|
|
207
|
+
True
|
|
208
|
+
|
|
209
|
+
Any non-trivial homomorphism has a well-defined degree::
|
|
210
|
+
|
|
211
|
+
sage: f.degree()
|
|
212
|
+
4
|
|
213
|
+
|
|
214
|
+
but just as module elements, the trivial homomorphism does not::
|
|
215
|
+
|
|
216
|
+
sage: zero_map = homspace.zero()
|
|
217
|
+
sage: zero_map.degree()
|
|
218
|
+
Traceback (most recent call last):
|
|
219
|
+
...
|
|
220
|
+
ValueError: the zero morphism does not have a well-defined degree
|
|
221
|
+
|
|
222
|
+
Any two homomorphisms can be added as long as they are of the same degree::
|
|
223
|
+
|
|
224
|
+
sage: f2 = homspace([Sq(2)*c2, Sq(3)*c2])
|
|
225
|
+
sage: f + f2
|
|
226
|
+
Module morphism:
|
|
227
|
+
From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
|
|
228
|
+
To: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
|
|
229
|
+
Defn: g[0] |--> 0
|
|
230
|
+
g[1] |--> Sq(0,1)*c2
|
|
231
|
+
|
|
232
|
+
or when at least one of them is zero::
|
|
233
|
+
|
|
234
|
+
sage: f + zero_map == f
|
|
235
|
+
True
|
|
236
|
+
|
|
237
|
+
Finally, additive inverses exist::
|
|
238
|
+
|
|
239
|
+
sage: f - f == 0
|
|
240
|
+
True
|
|
241
|
+
|
|
242
|
+
The restriction of a homomorphism to the free module of `n`-dimensional
|
|
243
|
+
module elements is a linear transformation::
|
|
244
|
+
|
|
245
|
+
sage: f_4 = f.vector_presentation(4); f_4
|
|
246
|
+
Vector space morphism represented by the matrix:
|
|
247
|
+
[0 1 0]
|
|
248
|
+
[1 1 1]
|
|
249
|
+
[0 1 0]
|
|
250
|
+
[0 0 0]
|
|
251
|
+
Domain: Vector space of dimension 4 over Finite Field of size 2
|
|
252
|
+
Codomain: Vector space of dimension 3 over Finite Field of size 2
|
|
253
|
+
|
|
254
|
+
This is compatible with the vector presentations of its domain and codomain
|
|
255
|
+
modules::
|
|
256
|
+
|
|
257
|
+
sage: f.domain() is M
|
|
258
|
+
True
|
|
259
|
+
sage: f.codomain() is N
|
|
260
|
+
True
|
|
261
|
+
sage: f_4.domain() is M.vector_presentation(4)
|
|
262
|
+
True
|
|
263
|
+
sage: f_4.codomain() is N.vector_presentation(4 + f.degree())
|
|
264
|
+
True
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
AUTHORS:
|
|
268
|
+
|
|
269
|
+
- Robert R. Bruner, Michael J. Catanzaro (2012): Initial version.
|
|
270
|
+
- Sverre Lunoee--Nielsen and Koen van Woerden (2019-11-29): Updated the
|
|
271
|
+
original software to Sage version 8.9.
|
|
272
|
+
- Sverre Lunoee--Nielsen (2020-07-01): Refactored the code and added
|
|
273
|
+
new documentation and tests.
|
|
274
|
+
"""
|
|
275
|
+
|
|
276
|
+
# *****************************************************************************
|
|
277
|
+
# Copyright (C) 2019 Robert R. Bruner <rrb@math.wayne.edu>
|
|
278
|
+
# and Michael J. Catanzaro <mike@math.wayne.edu>
|
|
279
|
+
#
|
|
280
|
+
# This program is free software: you can redistribute it and/or modify
|
|
281
|
+
# it under the terms of the GNU General Public License as published by
|
|
282
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
283
|
+
# (at your option) any later version.
|
|
284
|
+
# https://www.gnu.org/licenses/
|
|
285
|
+
# ****************************************************************************
|
|
286
|
+
|
|
287
|
+
from sage.misc.cachefunc import cached_method
|
|
288
|
+
from sage.modules.free_module import FreeModule
|
|
289
|
+
from sage.modules.fp_graded.free_element import FreeGradedModuleElement
|
|
290
|
+
from sage.rings.infinity import infinity
|
|
291
|
+
from sage.categories.graded_modules import GradedModules
|
|
292
|
+
from sage.categories.principal_ideal_domains import PrincipalIdealDomains
|
|
293
|
+
from sage.categories.homset import Hom
|
|
294
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
class FreeGradedModule(CombinatorialFreeModule):
|
|
298
|
+
r"""
|
|
299
|
+
Create a finitely generated free graded module over a connected
|
|
300
|
+
graded algebra, with generators in specified degrees.
|
|
301
|
+
|
|
302
|
+
INPUT:
|
|
303
|
+
|
|
304
|
+
- ``algebra`` -- the graded connected algebra over which the module is
|
|
305
|
+
defined; this algebra must be equipped with a graded basis
|
|
306
|
+
|
|
307
|
+
- ``generator_degrees`` -- tuple of integers defining the number
|
|
308
|
+
of generators of the module, and their degrees
|
|
309
|
+
|
|
310
|
+
- ``names`` -- (optional) the names of the generators. If ``names``
|
|
311
|
+
is a comma-separated string like ``'a, b, c'``, then those will
|
|
312
|
+
be the names. Otherwise, for example if ``names`` is ``abc``,
|
|
313
|
+
then the names will be ``abc(d,i)``.
|
|
314
|
+
|
|
315
|
+
By default, if all generators are in distinct degrees, then the
|
|
316
|
+
``names`` of the generators will have the form ``g_{d}`` where
|
|
317
|
+
``d`` is the degree of the generator. If the degrees are not
|
|
318
|
+
distinct, then the generators will be called ``g_{d,i}`` where
|
|
319
|
+
``d`` is the degree and ``i`` is its index in the list of
|
|
320
|
+
generators in that degree.
|
|
321
|
+
|
|
322
|
+
EXAMPLES::
|
|
323
|
+
|
|
324
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
325
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
326
|
+
sage: M = FreeGradedModule(E, (-1,3))
|
|
327
|
+
sage: M
|
|
328
|
+
Free graded left module on 2 generators over
|
|
329
|
+
The exterior algebra of rank 3 over Rational Field
|
|
330
|
+
sage: M.generator_degrees()
|
|
331
|
+
(-1, 3)
|
|
332
|
+
sage: a, b = M.generators()
|
|
333
|
+
sage: (x*y*b).degree()
|
|
334
|
+
5
|
|
335
|
+
|
|
336
|
+
``names`` of generators::
|
|
337
|
+
|
|
338
|
+
sage: M.generators()
|
|
339
|
+
(g[-1], g[3])
|
|
340
|
+
sage: FreeGradedModule(E, (0, 0, 2)).generators()
|
|
341
|
+
(g[0, 0], g[0, 1], g[2, 0])
|
|
342
|
+
sage: FreeGradedModule(E, (0, 0, 2), names='x, y, z').generators()
|
|
343
|
+
(x, y, z)
|
|
344
|
+
sage: FreeGradedModule(E, (0, 0, 2), names='xyz').generators()
|
|
345
|
+
(xyz[0, 0], xyz[0, 1], xyz[2, 0])
|
|
346
|
+
|
|
347
|
+
``names`` can also be defined implicitly using Sage's ``M.<...>`` syntax::
|
|
348
|
+
|
|
349
|
+
sage: A = SteenrodAlgebra(2)
|
|
350
|
+
sage: M.<x,y,z> = FreeGradedModule(A, (-2,2,4))
|
|
351
|
+
sage: M
|
|
352
|
+
Free graded left module on 3 generators over
|
|
353
|
+
mod 2 Steenrod algebra, milnor basis
|
|
354
|
+
sage: M.gens()
|
|
355
|
+
(x, y, z)
|
|
356
|
+
"""
|
|
357
|
+
def __classcall__(cls, algebra, generator_degrees, category=None,
|
|
358
|
+
names=None, prefix=None, **kwds):
|
|
359
|
+
"""
|
|
360
|
+
Normalize input to ensure a unique representation.
|
|
361
|
+
|
|
362
|
+
EXAMPLES::
|
|
363
|
+
|
|
364
|
+
sage: E.<x,y> = ExteriorAlgebra(QQ)
|
|
365
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
366
|
+
sage: M1 = FreeGradedModule(E, [1, 0, 2], names='a,b,c')
|
|
367
|
+
sage: M2.<a,b,c> = FreeGradedModule(E, (1, 0, 2))
|
|
368
|
+
sage: M1 is M2
|
|
369
|
+
True
|
|
370
|
+
"""
|
|
371
|
+
if algebra.base_ring() not in PrincipalIdealDomains():
|
|
372
|
+
raise ValueError('the ground ring of the algebra must be a PID')
|
|
373
|
+
|
|
374
|
+
generator_degrees = tuple(generator_degrees)
|
|
375
|
+
category = GradedModules(algebra).WithBasis().FiniteDimensional().or_subcategory(category)
|
|
376
|
+
if names is not None:
|
|
377
|
+
from sage.structure.category_object import normalize_names
|
|
378
|
+
names = normalize_names(-1, names)
|
|
379
|
+
if len(generator_degrees) > 1:
|
|
380
|
+
if len(names) == 1:
|
|
381
|
+
if prefix is None:
|
|
382
|
+
prefix = names[0]
|
|
383
|
+
names = None # if prefix is specified and takes priority
|
|
384
|
+
if names is not None and len(names) != len(generator_degrees):
|
|
385
|
+
raise ValueError("the names do not correspond to the generators")
|
|
386
|
+
if prefix is None:
|
|
387
|
+
prefix = 'g'
|
|
388
|
+
return super().__classcall__(cls, algebra=algebra,
|
|
389
|
+
generator_degrees=generator_degrees,
|
|
390
|
+
category=category, names=names,
|
|
391
|
+
prefix=prefix, **kwds)
|
|
392
|
+
|
|
393
|
+
def __init__(self, algebra, generator_degrees, category, names=None, **kwds):
|
|
394
|
+
r"""
|
|
395
|
+
Create a finitely generated free graded module over a connected graded
|
|
396
|
+
algebra.
|
|
397
|
+
|
|
398
|
+
TESTS::
|
|
399
|
+
|
|
400
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
401
|
+
sage: A = SteenrodAlgebra(2)
|
|
402
|
+
sage: TestSuite(FreeGradedModule(A, (-2,2,4))).run()
|
|
403
|
+
"""
|
|
404
|
+
# If generator_degrees is [d_0, d_1, ...], then
|
|
405
|
+
# the generators are indexed by (0,d_0), (1,d_1), ...
|
|
406
|
+
keys = list(enumerate(generator_degrees))
|
|
407
|
+
self._generator_degrees = generator_degrees
|
|
408
|
+
|
|
409
|
+
keys = []
|
|
410
|
+
degs_so_far = {}
|
|
411
|
+
unique = True
|
|
412
|
+
for i in generator_degrees:
|
|
413
|
+
if i in degs_so_far:
|
|
414
|
+
idx = degs_so_far[i] + 1
|
|
415
|
+
degs_so_far[i] += 1
|
|
416
|
+
unique = False
|
|
417
|
+
else:
|
|
418
|
+
idx = 0
|
|
419
|
+
degs_so_far[i] = 0
|
|
420
|
+
keys.append((i, idx))
|
|
421
|
+
if unique:
|
|
422
|
+
keys = [i[0] for i in keys]
|
|
423
|
+
kwds['iterate_key'] = True
|
|
424
|
+
|
|
425
|
+
# Call the base class constructor.
|
|
426
|
+
CombinatorialFreeModule.__init__(self, algebra,
|
|
427
|
+
basis_keys=keys,
|
|
428
|
+
category=category,
|
|
429
|
+
names=names,
|
|
430
|
+
**kwds)
|
|
431
|
+
|
|
432
|
+
Element = FreeGradedModuleElement
|
|
433
|
+
|
|
434
|
+
def change_ring(self, algebra):
|
|
435
|
+
r"""
|
|
436
|
+
Change the base ring of ``self``.
|
|
437
|
+
|
|
438
|
+
INPUT:
|
|
439
|
+
|
|
440
|
+
- ``algebra`` -- a connected graded algebra
|
|
441
|
+
|
|
442
|
+
OUTPUT:
|
|
443
|
+
|
|
444
|
+
The free graded module over ``algebra`` defined with the same
|
|
445
|
+
number of generators of the same degrees as ``self``.
|
|
446
|
+
|
|
447
|
+
EXAMPLES::
|
|
448
|
+
|
|
449
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
450
|
+
sage: A = SteenrodAlgebra(2)
|
|
451
|
+
sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
|
|
452
|
+
|
|
453
|
+
sage: M = FreeGradedModule(A, [0,1])
|
|
454
|
+
sage: N = M.change_ring(A2); N
|
|
455
|
+
Free graded left module on 2 generators over sub-Hopf algebra of
|
|
456
|
+
mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
|
|
457
|
+
|
|
458
|
+
Changing back yields the original module::
|
|
459
|
+
|
|
460
|
+
sage: N.change_ring(A) is M
|
|
461
|
+
True
|
|
462
|
+
"""
|
|
463
|
+
# We use the base class to avoid the category mixed one
|
|
464
|
+
return type(self).__base__(algebra, self.generator_degrees(),
|
|
465
|
+
prefix=self.prefix(), names=self._names)
|
|
466
|
+
|
|
467
|
+
def _repr_(self):
|
|
468
|
+
r"""
|
|
469
|
+
Construct a string representation of ``self``.
|
|
470
|
+
|
|
471
|
+
TESTS::
|
|
472
|
+
|
|
473
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
474
|
+
sage: A = SteenrodAlgebra(2)
|
|
475
|
+
sage: M = FreeGradedModule(A, (0,2,4))
|
|
476
|
+
sage: M
|
|
477
|
+
Free graded left module on 3 generators over
|
|
478
|
+
mod 2 Steenrod algebra, milnor basis
|
|
479
|
+
"""
|
|
480
|
+
return ("Free graded left module on %s generator%s over %s"
|
|
481
|
+
% (len(self._generator_degrees),
|
|
482
|
+
"" if len(self._generator_degrees) == 1 else "s",
|
|
483
|
+
self.base_ring()))
|
|
484
|
+
|
|
485
|
+
def generator_degrees(self):
|
|
486
|
+
r"""
|
|
487
|
+
The degrees of the module generators.
|
|
488
|
+
|
|
489
|
+
OUTPUT:
|
|
490
|
+
|
|
491
|
+
A tuple containing the degrees of the generators for this
|
|
492
|
+
module, in the order that the generators were given when
|
|
493
|
+
``self`` was constructed.
|
|
494
|
+
|
|
495
|
+
EXAMPLES::
|
|
496
|
+
|
|
497
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
498
|
+
sage: A = SteenrodAlgebra(2)
|
|
499
|
+
sage: M = FreeGradedModule(A, (-2,2,4))
|
|
500
|
+
sage: M.generator_degrees()
|
|
501
|
+
(-2, 2, 4)
|
|
502
|
+
"""
|
|
503
|
+
return self._generator_degrees
|
|
504
|
+
|
|
505
|
+
def is_trivial(self) -> bool:
|
|
506
|
+
r"""
|
|
507
|
+
Return ``True`` if this module is trivial and ``False`` otherwise.
|
|
508
|
+
|
|
509
|
+
EXAMPLES::
|
|
510
|
+
|
|
511
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
512
|
+
sage: A = SteenrodAlgebra(2)
|
|
513
|
+
sage: FreeGradedModule(A, (-2,2,4)).is_trivial()
|
|
514
|
+
False
|
|
515
|
+
sage: FreeGradedModule(A, ()).is_trivial()
|
|
516
|
+
True
|
|
517
|
+
"""
|
|
518
|
+
return not self._generator_degrees
|
|
519
|
+
|
|
520
|
+
def connectivity(self):
|
|
521
|
+
r"""
|
|
522
|
+
The connectivity of ``self``.
|
|
523
|
+
|
|
524
|
+
OUTPUT:
|
|
525
|
+
|
|
526
|
+
An integer equal to the minimal degree of all the generators, if
|
|
527
|
+
this module is non-trivial. Otherwise, `+\infty`.
|
|
528
|
+
|
|
529
|
+
EXAMPLES::
|
|
530
|
+
|
|
531
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
532
|
+
sage: A = SteenrodAlgebra(2)
|
|
533
|
+
sage: M = FreeGradedModule(A, (-2,2,4))
|
|
534
|
+
sage: M.connectivity()
|
|
535
|
+
-2
|
|
536
|
+
|
|
537
|
+
TESTS::
|
|
538
|
+
|
|
539
|
+
sage: M = FreeGradedModule(A, ())
|
|
540
|
+
sage: M.is_trivial()
|
|
541
|
+
True
|
|
542
|
+
sage: M.connectivity()
|
|
543
|
+
+Infinity
|
|
544
|
+
"""
|
|
545
|
+
return min(self.generator_degrees() + (infinity,))
|
|
546
|
+
|
|
547
|
+
def _element_constructor_(self, coefficients):
|
|
548
|
+
r"""
|
|
549
|
+
Construct any element of ``self``.
|
|
550
|
+
|
|
551
|
+
INPUT:
|
|
552
|
+
|
|
553
|
+
- ``coefficients`` -- tuple of coefficient (i.e. elements of the
|
|
554
|
+
algebra for this module), an element of FreeGradedModule, or the
|
|
555
|
+
zero integer constant
|
|
556
|
+
|
|
557
|
+
OUTPUT:
|
|
558
|
+
|
|
559
|
+
An instance of the element class with coefficients from
|
|
560
|
+
``coefficients``, the element ``coefficients`` if it already
|
|
561
|
+
was an element, or the zero module element.
|
|
562
|
+
|
|
563
|
+
EXAMPLES::
|
|
564
|
+
|
|
565
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
566
|
+
sage: A = SteenrodAlgebra(2)
|
|
567
|
+
sage: M.<a,b,c> = FreeGradedModule(A, (0,2,4))
|
|
568
|
+
|
|
569
|
+
sage: zero = M(0); zero
|
|
570
|
+
0
|
|
571
|
+
|
|
572
|
+
sage: e = M((Sq(4), Sq(2), 1)); e
|
|
573
|
+
Sq(4)*a + Sq(2)*b + c
|
|
574
|
+
|
|
575
|
+
sage: e is M(e)
|
|
576
|
+
True
|
|
577
|
+
"""
|
|
578
|
+
if isinstance(coefficients, self.element_class):
|
|
579
|
+
return coefficients
|
|
580
|
+
|
|
581
|
+
if not coefficients:
|
|
582
|
+
return self.zero()
|
|
583
|
+
|
|
584
|
+
A = self.base_ring()
|
|
585
|
+
return self._from_dict({b: A(c) for (c, b) in zip(coefficients, self._indices) if c},
|
|
586
|
+
remove_zeros=False)
|
|
587
|
+
|
|
588
|
+
def an_element(self, n=None):
|
|
589
|
+
r"""
|
|
590
|
+
Return an element of ``self``.
|
|
591
|
+
|
|
592
|
+
This function chooses deterministically an element of the module
|
|
593
|
+
in the given degree.
|
|
594
|
+
|
|
595
|
+
INPUT:
|
|
596
|
+
|
|
597
|
+
- ``n`` -- (optional) the degree of the element to construct
|
|
598
|
+
|
|
599
|
+
OUTPUT:
|
|
600
|
+
|
|
601
|
+
An element (of the given degree if specified).
|
|
602
|
+
|
|
603
|
+
EXAMPLES::
|
|
604
|
+
|
|
605
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
606
|
+
sage: A = SteenrodAlgebra(2)
|
|
607
|
+
sage: M = FreeGradedModule(A, (0,2,4))
|
|
608
|
+
sage: M.an_element(172)
|
|
609
|
+
Sq(0,0,2,0,1,0,1)*g[0] + Sq(0,4,0,0,1,0,1)*g[2] + Sq(7,1,0,0,1,0,1)*g[4]
|
|
610
|
+
|
|
611
|
+
Zero is the only element in the trivial module::
|
|
612
|
+
|
|
613
|
+
sage: FreeGradedModule(A, ()).an_element()
|
|
614
|
+
0
|
|
615
|
+
"""
|
|
616
|
+
if not self._generator_degrees:
|
|
617
|
+
return self.zero()
|
|
618
|
+
|
|
619
|
+
if n is None:
|
|
620
|
+
n = max(self.generator_degrees()) + 7
|
|
621
|
+
|
|
622
|
+
coefficients = []
|
|
623
|
+
for g in self.generator_degrees():
|
|
624
|
+
basis = self.base_ring().basis(n - g) if n >= g else ()
|
|
625
|
+
# All of the algebra generators in basis will bring the
|
|
626
|
+
# module generator in dimension g to dimension
|
|
627
|
+
# g + (topDimension - g) = topDimension. Picking any one of them
|
|
628
|
+
# will do, so we pick the one with index (g (mod l)).
|
|
629
|
+
l = len(basis)
|
|
630
|
+
if l:
|
|
631
|
+
coefficients.append(basis[g % l])
|
|
632
|
+
else:
|
|
633
|
+
coefficients.append(self.base_ring().zero())
|
|
634
|
+
|
|
635
|
+
return self(coefficients)
|
|
636
|
+
|
|
637
|
+
# @cached_method
|
|
638
|
+
def basis_elements(self, n):
|
|
639
|
+
r"""
|
|
640
|
+
Return a basis for the free module of degree ``n`` module elements.
|
|
641
|
+
|
|
642
|
+
.. NOTE::
|
|
643
|
+
|
|
644
|
+
Suppose ``self`` is a module over the graded algebra `A` with
|
|
645
|
+
base ring `R`. This returns a basis as a free module over `R`,
|
|
646
|
+
not a basis as a free module over `A`.
|
|
647
|
+
|
|
648
|
+
INPUT:
|
|
649
|
+
|
|
650
|
+
- ``n`` -- integer
|
|
651
|
+
|
|
652
|
+
OUTPUT:
|
|
653
|
+
|
|
654
|
+
A sequence of homogeneous module elements of degree ``n``, which
|
|
655
|
+
is a basis for the free module of all degree ``n`` module elements.
|
|
656
|
+
|
|
657
|
+
.. SEEALSO::
|
|
658
|
+
|
|
659
|
+
:meth:`vector_presentation`, :meth:`element_from_coordinates`
|
|
660
|
+
|
|
661
|
+
EXAMPLES::
|
|
662
|
+
|
|
663
|
+
sage: A = SteenrodAlgebra(2)
|
|
664
|
+
sage: M.<m0, m2, m4> = A.free_graded_module((0,2,4))
|
|
665
|
+
sage: M.basis_elements(8)
|
|
666
|
+
(Sq(1,0,1)*m0,
|
|
667
|
+
Sq(2,2)*m0,
|
|
668
|
+
Sq(5,1)*m0,
|
|
669
|
+
Sq(8)*m0,
|
|
670
|
+
Sq(0,2)*m2,
|
|
671
|
+
Sq(3,1)*m2,
|
|
672
|
+
Sq(6)*m2,
|
|
673
|
+
Sq(1,1)*m4,
|
|
674
|
+
Sq(4)*m4)
|
|
675
|
+
"""
|
|
676
|
+
return tuple([self.term(self._indices[i], coeff)
|
|
677
|
+
for i in range(len(self._generator_degrees))
|
|
678
|
+
for coeff in self._basis_coeffs(n, i)])
|
|
679
|
+
|
|
680
|
+
def _basis_coeffs(self, d, i):
|
|
681
|
+
r"""
|
|
682
|
+
Return a basis for the free module of degree ``d`` module elements
|
|
683
|
+
corresponding to the ``i``-th generator.
|
|
684
|
+
|
|
685
|
+
.. NOTE::
|
|
686
|
+
|
|
687
|
+
Suppose ``self`` is a module over the graded algebra `A` with
|
|
688
|
+
base ring `R`. This returns a basis as a free module over `R`,
|
|
689
|
+
not a basis as a free module over `A`.
|
|
690
|
+
|
|
691
|
+
INPUT:
|
|
692
|
+
|
|
693
|
+
- ``d`` -- integer; the degree
|
|
694
|
+
- ``i`` -- integer; the factor
|
|
695
|
+
|
|
696
|
+
EXAMPLES::
|
|
697
|
+
|
|
698
|
+
sage: A = SteenrodAlgebra(2)
|
|
699
|
+
sage: M = A.free_graded_module((0,1))
|
|
700
|
+
sage: M._basis_coeffs(3, 0)
|
|
701
|
+
(Sq(0,1), Sq(3))
|
|
702
|
+
sage: M._basis_coeffs(3, 1)
|
|
703
|
+
(Sq(2),)
|
|
704
|
+
"""
|
|
705
|
+
return self._cached_basis_coeffs(d - self._generator_degrees[i])
|
|
706
|
+
|
|
707
|
+
@cached_method
|
|
708
|
+
def _cached_basis_coeffs(self, d):
|
|
709
|
+
"""
|
|
710
|
+
Return the basis for the degree ``d`` part of the base algebra.
|
|
711
|
+
|
|
712
|
+
EXAMPLES::
|
|
713
|
+
|
|
714
|
+
sage: E.<x,y> = ExteriorAlgebra(QQ)
|
|
715
|
+
sage: M = E.free_graded_module((0,0,1))
|
|
716
|
+
sage: M._cached_basis_coeffs(0)
|
|
717
|
+
(1,)
|
|
718
|
+
sage: M._cached_basis_coeffs(1)
|
|
719
|
+
(x, y)
|
|
720
|
+
sage: M._cached_basis_coeffs(2)
|
|
721
|
+
(x*y,)
|
|
722
|
+
sage: M._cached_basis_coeffs(3)
|
|
723
|
+
()
|
|
724
|
+
"""
|
|
725
|
+
return tuple(self.base_ring().basis(d))
|
|
726
|
+
|
|
727
|
+
@cached_method
|
|
728
|
+
def element_from_coordinates(self, coordinates, n):
|
|
729
|
+
r"""
|
|
730
|
+
The module element of degree ``n`` having the given coordinates
|
|
731
|
+
with respect to the basis of module elements given by
|
|
732
|
+
:meth:`basis_elements`.
|
|
733
|
+
|
|
734
|
+
INPUT:
|
|
735
|
+
|
|
736
|
+
- ``coordinates`` -- a sequence of elements of the ground ring
|
|
737
|
+
- ``n`` -- integer
|
|
738
|
+
|
|
739
|
+
OUTPUT: a module element of degree ``n``
|
|
740
|
+
|
|
741
|
+
.. SEEALSO::
|
|
742
|
+
|
|
743
|
+
:meth:`vector_presentation`, and :meth:`basis_elements`.
|
|
744
|
+
|
|
745
|
+
EXAMPLES::
|
|
746
|
+
|
|
747
|
+
sage: A = SteenrodAlgebra(2)
|
|
748
|
+
sage: M = A.free_graded_module((0,1))
|
|
749
|
+
sage: x = M.element_from_coordinates((0,1,0,1), 5); x
|
|
750
|
+
Sq(5)*g[0] + Sq(4)*g[1]
|
|
751
|
+
sage: basis = M.basis_elements(5)
|
|
752
|
+
sage: y = 0*basis[0] + 1*basis[1] + 0*basis[2] + 1*basis[3]
|
|
753
|
+
sage: x == y
|
|
754
|
+
True
|
|
755
|
+
|
|
756
|
+
sage: M.element_from_coordinates((0,0,0,0), 5)
|
|
757
|
+
0
|
|
758
|
+
"""
|
|
759
|
+
D = self.vector_presentation(n).dimension()
|
|
760
|
+
if len(coordinates) != D:
|
|
761
|
+
raise ValueError('the given coordinate vector has incorrect length (%d); '
|
|
762
|
+
'it should have length %d' % (len(coordinates), D))
|
|
763
|
+
|
|
764
|
+
# Performance testing using this real life example:
|
|
765
|
+
#
|
|
766
|
+
# sage: A = SteenrodAlgebra(2)
|
|
767
|
+
# sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
768
|
+
# sage: rels = [[Sq(1),0,0,0], [Sq(2),0,0,0], [Sq(4),0,0,0], [Sq(8),0,0,0],
|
|
769
|
+
# ....: [0,Sq(1),0,0], [0,Sq(2),0,0], [0,Sq(4),0,0], [Sq(31),Sq(14),0,0],
|
|
770
|
+
# ....: [0,Sq(20),0,0], [0,0,Sq(1),0], [0,0,Sq(2),0], [0,Sq(31),Sq(6),0],
|
|
771
|
+
# ....: [0,0,Sq(8),0], [0,0,0,Sq(1)], [0,0,Sq(31),Sq(2)], [0,0,0,Sq(4)], [0,0,0,Sq(8)] ]
|
|
772
|
+
# sage: M = SteenrodFPModule(A, [0, 17, 42, 71], relations=rels)
|
|
773
|
+
# sage: res = M.resolution(2, top_dim=30, verbose=True)
|
|
774
|
+
#
|
|
775
|
+
# This function was called a total of 2897 times during the computation,
|
|
776
|
+
# and the total running time of the entire computation dropped from
|
|
777
|
+
# 57 to 21 seconds by adding the optimization.
|
|
778
|
+
|
|
779
|
+
ret = {}
|
|
780
|
+
A = self.base_ring()
|
|
781
|
+
j = 0
|
|
782
|
+
for i, key in enumerate(self._indices):
|
|
783
|
+
B = self._basis_coeffs(n, i)
|
|
784
|
+
coeff = A.linear_combination((b, coordinates[j + ind])
|
|
785
|
+
for ind, b in enumerate(B))
|
|
786
|
+
if coeff:
|
|
787
|
+
ret[key] = coeff
|
|
788
|
+
j += len(B)
|
|
789
|
+
|
|
790
|
+
if not ret:
|
|
791
|
+
return self.zero()
|
|
792
|
+
return self.element_class(self, ret)
|
|
793
|
+
|
|
794
|
+
@cached_method
|
|
795
|
+
def vector_presentation(self, n):
|
|
796
|
+
r"""
|
|
797
|
+
Return a free module over the ground ring of the module algebra
|
|
798
|
+
isomorphic to the degree ``n`` elements of ``self``.
|
|
799
|
+
|
|
800
|
+
Let `\mathcal{k}` be the ground ring of the algebra over this module
|
|
801
|
+
is defined, and let `M_n` be the free module of module elements of
|
|
802
|
+
degree ``n``.
|
|
803
|
+
|
|
804
|
+
The return value of this function is the free module
|
|
805
|
+
`\mathcal{k}^{r}` where `r = dim(M_n)`.
|
|
806
|
+
|
|
807
|
+
The isomorphism between `k^{r}` and `M_n` is given by the
|
|
808
|
+
bijection taking the standard basis element `e_i` to the `i`-th
|
|
809
|
+
element of the array returned by :meth:`basis_elements`.
|
|
810
|
+
|
|
811
|
+
INPUT:
|
|
812
|
+
|
|
813
|
+
- ``n`` -- integer degree
|
|
814
|
+
|
|
815
|
+
OUTPUT:
|
|
816
|
+
|
|
817
|
+
A free module over the ground ring of the algebra over which
|
|
818
|
+
``self`` is defined, isomorphic to the free module of module
|
|
819
|
+
elements of degree ``n``.
|
|
820
|
+
|
|
821
|
+
.. SEEALSO::
|
|
822
|
+
|
|
823
|
+
:meth:`basis_elements`, :meth:`element_from_coordinates`
|
|
824
|
+
|
|
825
|
+
EXAMPLES::
|
|
826
|
+
|
|
827
|
+
sage: A1 = SteenrodAlgebra(2, profile=[2,1])
|
|
828
|
+
sage: M.<x> = A1.free_graded_module((0,))
|
|
829
|
+
sage: M.vector_presentation(3)
|
|
830
|
+
Vector space of dimension 2 over Finite Field of size 2
|
|
831
|
+
sage: M.basis_elements(3)
|
|
832
|
+
(Sq(0,1)*x, Sq(3)*x)
|
|
833
|
+
sage: [M.vector_presentation(i).dimension() for i in range(-2, 9)]
|
|
834
|
+
[0, 0, 1, 1, 1, 2, 1, 1, 1, 0, 0]
|
|
835
|
+
|
|
836
|
+
TESTS::
|
|
837
|
+
|
|
838
|
+
sage: A = SteenrodAlgebra(2)
|
|
839
|
+
sage: M = A.free_graded_module((0,2,4))
|
|
840
|
+
sage: V = M[4]; V
|
|
841
|
+
Vector space of dimension 4 over Finite Field of size 2
|
|
842
|
+
sage: V.dimension()
|
|
843
|
+
4
|
|
844
|
+
"""
|
|
845
|
+
m = len(self._generator_degrees)
|
|
846
|
+
return FreeModule(self.base_ring().base_ring(), sum(len(self._basis_coeffs(n, i))
|
|
847
|
+
for i in range(m)))
|
|
848
|
+
|
|
849
|
+
__getitem__ = vector_presentation
|
|
850
|
+
|
|
851
|
+
def generator(self, index):
|
|
852
|
+
r"""
|
|
853
|
+
Return the module generator with the given index.
|
|
854
|
+
|
|
855
|
+
EXAMPLES::
|
|
856
|
+
|
|
857
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
858
|
+
sage: A = SteenrodAlgebra(2)
|
|
859
|
+
sage: M = FreeGradedModule(A, (0,2,4))
|
|
860
|
+
sage: M.generator(0)
|
|
861
|
+
g[0]
|
|
862
|
+
sage: M.generator(1)
|
|
863
|
+
g[2]
|
|
864
|
+
sage: M.generator(2)
|
|
865
|
+
g[4]
|
|
866
|
+
"""
|
|
867
|
+
try:
|
|
868
|
+
return self.gens()[index]
|
|
869
|
+
except IndexError:
|
|
870
|
+
raise ValueError('the parent module has generators in the index '
|
|
871
|
+
'range [0, %s]; generator %s does not exist' %
|
|
872
|
+
(len(self.generator_degrees()) - 1, index))
|
|
873
|
+
|
|
874
|
+
gen = generator
|
|
875
|
+
|
|
876
|
+
def generators(self):
|
|
877
|
+
r"""
|
|
878
|
+
Return all the module generators.
|
|
879
|
+
|
|
880
|
+
EXAMPLES::
|
|
881
|
+
|
|
882
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
883
|
+
sage: A = SteenrodAlgebra(2)
|
|
884
|
+
sage: M = FreeGradedModule(A, (-2,1))
|
|
885
|
+
sage: M.generators()
|
|
886
|
+
(g[-2], g[1])
|
|
887
|
+
"""
|
|
888
|
+
return self.gens()
|
|
889
|
+
|
|
890
|
+
def _Hom_(self, Y, category):
|
|
891
|
+
r"""
|
|
892
|
+
The internal hook used by the free function
|
|
893
|
+
:meth:`sage.categories.homset.hom.Hom` to create homsets
|
|
894
|
+
involving ``self``.
|
|
895
|
+
|
|
896
|
+
TESTS::
|
|
897
|
+
|
|
898
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
899
|
+
sage: A = SteenrodAlgebra(2)
|
|
900
|
+
sage: M = FreeGradedModule(A, (0,1))
|
|
901
|
+
sage: M._Hom_(M, category=None)
|
|
902
|
+
Set of Morphisms from Free graded left module on 2 generators
|
|
903
|
+
over mod 2 Steenrod algebra, milnor basis
|
|
904
|
+
to Free graded left module on 2 generators
|
|
905
|
+
over mod 2 Steenrod algebra, milnor basis
|
|
906
|
+
in Category of finite dimensional graded modules with basis
|
|
907
|
+
over mod 2 Steenrod algebra, milnor basis
|
|
908
|
+
|
|
909
|
+
sage: from sage.modules.fp_graded.module import FPModule
|
|
910
|
+
sage: F = FPModule(A, [1,3])
|
|
911
|
+
sage: Hom(M, F)
|
|
912
|
+
Set of Morphisms from Free graded left module on 2 generators ...
|
|
913
|
+
"""
|
|
914
|
+
from .free_homspace import FreeGradedModuleHomspace
|
|
915
|
+
return FreeGradedModuleHomspace(self, Y, category)
|
|
916
|
+
|
|
917
|
+
def suspension(self, t):
|
|
918
|
+
r"""
|
|
919
|
+
Suspend ``self`` by the given degree ``t``.
|
|
920
|
+
|
|
921
|
+
INPUT:
|
|
922
|
+
|
|
923
|
+
- ``t`` -- integer
|
|
924
|
+
|
|
925
|
+
OUTPUT:
|
|
926
|
+
|
|
927
|
+
A module which is isomorphic to this module by a shift
|
|
928
|
+
of degrees by the integer ``t``.
|
|
929
|
+
|
|
930
|
+
EXAMPLES::
|
|
931
|
+
|
|
932
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
933
|
+
sage: A = SteenrodAlgebra(2)
|
|
934
|
+
sage: M = FreeGradedModule(A, (0,2,4))
|
|
935
|
+
sage: M.suspension(4).generator_degrees()
|
|
936
|
+
(4, 6, 8)
|
|
937
|
+
sage: M.suspension(-4).generator_degrees()
|
|
938
|
+
(-4, -2, 0)
|
|
939
|
+
"""
|
|
940
|
+
degs = tuple(g + t for g in self.generator_degrees())
|
|
941
|
+
return FreeGradedModule(algebra=self.base_ring(),
|
|
942
|
+
generator_degrees=degs)
|
|
943
|
+
|
|
944
|
+
def has_relations(self) -> bool:
|
|
945
|
+
r"""
|
|
946
|
+
Return ``False`` as this has no relations.
|
|
947
|
+
|
|
948
|
+
This is for compatibility with
|
|
949
|
+
:class:`~sage.modules.fp_graded.module.FPModule`.
|
|
950
|
+
|
|
951
|
+
EXAMPLES::
|
|
952
|
+
|
|
953
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
954
|
+
sage: A = SteenrodAlgebra(2)
|
|
955
|
+
sage: F = FreeGradedModule(A, (-2,2,4))
|
|
956
|
+
sage: F.has_relations()
|
|
957
|
+
False
|
|
958
|
+
"""
|
|
959
|
+
return False
|
|
960
|
+
|
|
961
|
+
def relations(self):
|
|
962
|
+
r"""
|
|
963
|
+
Return the relations of ``self``, which is ``()``.
|
|
964
|
+
|
|
965
|
+
This is for compatibility with
|
|
966
|
+
:class:`~sage.modules.fp_graded.module.FPModule`.
|
|
967
|
+
|
|
968
|
+
EXAMPLES::
|
|
969
|
+
|
|
970
|
+
sage: from sage.modules.fp_graded.free_module import FreeGradedModule
|
|
971
|
+
sage: A = SteenrodAlgebra(2)
|
|
972
|
+
sage: F = FreeGradedModule(A, (-2,2,4))
|
|
973
|
+
sage: F.relations()
|
|
974
|
+
()
|
|
975
|
+
"""
|
|
976
|
+
return ()
|
|
977
|
+
|
|
978
|
+
def resolution(self, k, top_dim=None, verbose=False):
|
|
979
|
+
r"""
|
|
980
|
+
Return a free resolution of ``self`` of length ``k``.
|
|
981
|
+
|
|
982
|
+
Since ``self`` is free, the initial map in the resolution will
|
|
983
|
+
be the identity, and the rest of the maps will be zero.
|
|
984
|
+
|
|
985
|
+
INPUT:
|
|
986
|
+
|
|
987
|
+
- ``k`` -- nonnegative integer
|
|
988
|
+
- ``top_dim`` -- stop the computation at this degree. Ignored,
|
|
989
|
+
for compatibility with
|
|
990
|
+
:meth:`sage.modules.fp_graded.module.FPModule.resolution`.
|
|
991
|
+
- ``verbose`` -- boolean (default: ``False``); controls whether log
|
|
992
|
+
messages should be emitted
|
|
993
|
+
|
|
994
|
+
OUTPUT:
|
|
995
|
+
|
|
996
|
+
A list of homomorphisms `[1_M, 0, 0, \ldots, 0]` consisting of
|
|
997
|
+
the identity map on this module followed by zero maps. Other
|
|
998
|
+
than this module, the other modules in the resolution will be
|
|
999
|
+
zero.
|
|
1000
|
+
|
|
1001
|
+
EXAMPLES::
|
|
1002
|
+
|
|
1003
|
+
sage: E.<x,y,z> = ExteriorAlgebra(QQ)
|
|
1004
|
+
sage: M = E.free_graded_module((1,2))
|
|
1005
|
+
sage: M.resolution(0)
|
|
1006
|
+
[Module endomorphism of Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field
|
|
1007
|
+
Defn: g[1] |--> g[1]
|
|
1008
|
+
g[2] |--> g[2]]
|
|
1009
|
+
sage: M.resolution(1)
|
|
1010
|
+
[Module endomorphism of Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field
|
|
1011
|
+
Defn: g[1] |--> g[1]
|
|
1012
|
+
g[2] |--> g[2],
|
|
1013
|
+
Module morphism:
|
|
1014
|
+
From: Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field
|
|
1015
|
+
To: Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field]
|
|
1016
|
+
sage: M.resolution(4)
|
|
1017
|
+
[Module endomorphism of Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field
|
|
1018
|
+
Defn: g[1] |--> g[1]
|
|
1019
|
+
g[2] |--> g[2],
|
|
1020
|
+
Module morphism:
|
|
1021
|
+
From: Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field
|
|
1022
|
+
To: Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field,
|
|
1023
|
+
Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field,
|
|
1024
|
+
Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field,
|
|
1025
|
+
Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field]
|
|
1026
|
+
"""
|
|
1027
|
+
if k < 0:
|
|
1028
|
+
raise ValueError('the length of the resolution must be nonnegative')
|
|
1029
|
+
|
|
1030
|
+
# The first map \epsilon is the identity map
|
|
1031
|
+
ret_complex = [Hom(self, self).identity()]
|
|
1032
|
+
|
|
1033
|
+
if k == 0:
|
|
1034
|
+
return ret_complex
|
|
1035
|
+
|
|
1036
|
+
# All subsequent maps are trivial since self is free
|
|
1037
|
+
T = self.base_ring().free_graded_module(())
|
|
1038
|
+
ret_complex.append(Hom(T, self).zero())
|
|
1039
|
+
|
|
1040
|
+
if k == 1:
|
|
1041
|
+
return ret_complex
|
|
1042
|
+
|
|
1043
|
+
return ret_complex + [Hom(T, T).zero()] * (k - 1)
|
|
1044
|
+
|
|
1045
|
+
def minimal_presentation(self, top_dim=None, verbose=False):
|
|
1046
|
+
r"""
|
|
1047
|
+
Return a minimal presentation of ``self``.
|
|
1048
|
+
|
|
1049
|
+
OUTPUT: the identity morphism as ``self`` is free
|
|
1050
|
+
|
|
1051
|
+
EXAMPLES::
|
|
1052
|
+
|
|
1053
|
+
sage: from sage.modules.fp_graded.module import FPModule
|
|
1054
|
+
sage: A2 = SteenrodAlgebra(2)
|
|
1055
|
+
|
|
1056
|
+
sage: M = A2.free_graded_module([0,1])
|
|
1057
|
+
sage: M.minimal_presentation().is_identity()
|
|
1058
|
+
True
|
|
1059
|
+
"""
|
|
1060
|
+
return Hom(self, self).identity()
|