passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_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 +808 -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-0cd532bd.so.1 +0 -0
- passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-bb76a5fc.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-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.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-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.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-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-x86_64-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-x86_64-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-x86_64-linux-musl.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-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-musl.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-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-x86_64-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-x86_64-linux-musl.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-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-x86_64-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,404 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.combinat
|
|
3
|
+
r"""
|
|
4
|
+
Homomorphisms of finitely presented modules over the Steenrod algebra
|
|
5
|
+
|
|
6
|
+
This class implements construction and basic manipulation of homomorphisms
|
|
7
|
+
between :mod:`finitely presented graded modules
|
|
8
|
+
<sage.modules.fp_graded.steenrod.module>` over the mod `p` Steenrod algebra.
|
|
9
|
+
|
|
10
|
+
AUTHORS:
|
|
11
|
+
|
|
12
|
+
- Robert R. Bruner, Michael J. Catanzaro (2012): Initial version.
|
|
13
|
+
- Sverre Lunoee--Nielsen and Koen van Woerden (2019-11-29): Updated the
|
|
14
|
+
original software to Sage version 8.9.
|
|
15
|
+
- Sverre Lunoee--Nielsen (2020-07-01): Refactored the code and added
|
|
16
|
+
new documentation and tests.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
# ****************************************************************************
|
|
20
|
+
# Copyright (C) 2011 Robert R. Bruner <rrb@math.wayne.edu>
|
|
21
|
+
# and Michael J. Catanzaro <mike@math.wayne.edu>
|
|
22
|
+
#
|
|
23
|
+
# This program is free software: you can redistribute it and/or modify
|
|
24
|
+
# it under the terms of the GNU General Public License as published by
|
|
25
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
26
|
+
# (at your option) any later version.
|
|
27
|
+
# https://www.gnu.org/licenses/
|
|
28
|
+
# ****************************************************************************
|
|
29
|
+
|
|
30
|
+
from sage.categories.homset import Hom
|
|
31
|
+
|
|
32
|
+
from sage.algebras.steenrod.steenrod_algebra import SteenrodAlgebra_generic
|
|
33
|
+
from sage.modules.fp_graded.morphism import FPModuleMorphism
|
|
34
|
+
from sage.modules.fp_graded.free_morphism import FreeGradedModuleMorphism
|
|
35
|
+
from .profile import enveloping_profile_elements
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class SteenrodFPModuleMorphism(FPModuleMorphism):
|
|
39
|
+
def profile(self):
|
|
40
|
+
r"""
|
|
41
|
+
Return a finite profile over which ``self`` can be defined.
|
|
42
|
+
|
|
43
|
+
This is in some ways the key method for these morphisms. As
|
|
44
|
+
discussed in the "Theoretical background" section of
|
|
45
|
+
:mod:`sage.modules.fp_graded.steenrod.module`, any
|
|
46
|
+
homomorphism of finitely presented modules over the Steenrod
|
|
47
|
+
algebra can be defined over a finite-dimensional sub-Hopf
|
|
48
|
+
algebra, and this method identifies such a sub-Hopf algebra
|
|
49
|
+
and returns its profile function.
|
|
50
|
+
|
|
51
|
+
EXAMPLES::
|
|
52
|
+
|
|
53
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
54
|
+
sage: A = SteenrodAlgebra(2)
|
|
55
|
+
sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
|
|
56
|
+
sage: one = Hom(M,M).identity()
|
|
57
|
+
sage: one.profile()
|
|
58
|
+
(2, 1)
|
|
59
|
+
sage: zero = Hom(M,M).zero()
|
|
60
|
+
sage: zero.profile()
|
|
61
|
+
(2, 1)
|
|
62
|
+
sage: A_fin = SteenrodAlgebra(2, profile=(2,1))
|
|
63
|
+
sage: M_fin = M.change_ring(A_fin)
|
|
64
|
+
|
|
65
|
+
Change the ring of the module ``M``::
|
|
66
|
+
|
|
67
|
+
sage: M_fin.change_ring(A) is M
|
|
68
|
+
True
|
|
69
|
+
|
|
70
|
+
We can change rings to the finite sub-Hopf algebra defined by
|
|
71
|
+
the profile we just computed::
|
|
72
|
+
|
|
73
|
+
sage: one_fin = one.change_ring(A_fin)
|
|
74
|
+
sage: one_fin.domain()
|
|
75
|
+
Finitely presented left module on 2 generators and 2 relations over
|
|
76
|
+
sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [2, 1]
|
|
77
|
+
|
|
78
|
+
If we change back to the full Steenrod algebra, we are back where
|
|
79
|
+
we started::
|
|
80
|
+
|
|
81
|
+
sage: one_fin.change_ring(A) == one
|
|
82
|
+
True
|
|
83
|
+
"""
|
|
84
|
+
def _flatten(f):
|
|
85
|
+
return [c for value in f for c in value.dense_coefficient_list()]
|
|
86
|
+
|
|
87
|
+
elements = (_flatten(self.domain().relations())
|
|
88
|
+
+ _flatten(self.codomain().relations())
|
|
89
|
+
+ _flatten(self.values()))
|
|
90
|
+
elements = [a for a in elements if a not in (0, 1)]
|
|
91
|
+
|
|
92
|
+
return enveloping_profile_elements(elements,
|
|
93
|
+
char=self.base_ring().characteristic())
|
|
94
|
+
|
|
95
|
+
def is_injective(self, top_dim=None, verbose=False) -> bool:
|
|
96
|
+
r"""
|
|
97
|
+
Return ``True`` if ``self`` is injective.
|
|
98
|
+
|
|
99
|
+
INPUT:
|
|
100
|
+
|
|
101
|
+
- ``top_dim`` -- (optional) stop the computation at this degree; if
|
|
102
|
+
not specified, this is determined using :meth:`profile`
|
|
103
|
+
- ``verbose`` -- boolean (default: ``False``); whether log messages are
|
|
104
|
+
printed
|
|
105
|
+
|
|
106
|
+
EXAMPLES::
|
|
107
|
+
|
|
108
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
109
|
+
sage: A = SteenrodAlgebra(2)
|
|
110
|
+
sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
|
|
111
|
+
sage: S = SteenrodFPModule(A, [0], [[Sq(2)]])
|
|
112
|
+
sage: f = Hom(S, M)([M([0,1])])
|
|
113
|
+
sage: f.is_injective()
|
|
114
|
+
True
|
|
115
|
+
sage: g = Hom(S, M).zero()
|
|
116
|
+
sage: g.is_injective()
|
|
117
|
+
False
|
|
118
|
+
sage: z = Hom(SteenrodFPModule(A, []), M).zero()
|
|
119
|
+
sage: z.is_injective()
|
|
120
|
+
True
|
|
121
|
+
sage: z.is_zero()
|
|
122
|
+
True
|
|
123
|
+
"""
|
|
124
|
+
algebra = self.base_ring()
|
|
125
|
+
finite_algebra = SteenrodAlgebra_generic(algebra.prime(), profile=self.profile())
|
|
126
|
+
return FPModuleMorphism.is_injective(self.change_ring(finite_algebra),
|
|
127
|
+
top_dim=top_dim, verbose=verbose)
|
|
128
|
+
|
|
129
|
+
def kernel_inclusion(self, top_dim=None, verbose=False):
|
|
130
|
+
r"""
|
|
131
|
+
Return the kernel of ``self`` as a morphism.
|
|
132
|
+
|
|
133
|
+
INPUT:
|
|
134
|
+
|
|
135
|
+
- ``top_dim`` -- (optional) stop the computation at this degree; if
|
|
136
|
+
not specified, this is determined using :meth:`profile`
|
|
137
|
+
- ``verbose`` -- boolean (default: ``False``); whether log messages are
|
|
138
|
+
printed
|
|
139
|
+
|
|
140
|
+
OUTPUT: an injective homomorphism into the domain ``self`` which is
|
|
141
|
+
onto the kernel of this homomorphism.
|
|
142
|
+
|
|
143
|
+
EXAMPLES::
|
|
144
|
+
|
|
145
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
146
|
+
sage: A = SteenrodAlgebra(2)
|
|
147
|
+
sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
|
|
148
|
+
sage: S = SteenrodFPModule(A, [0], [[Sq(2)]])
|
|
149
|
+
sage: f = Hom(S, M)([M([0,1])])
|
|
150
|
+
sage: f.is_injective()
|
|
151
|
+
True
|
|
152
|
+
sage: k = f.kernel_inclusion()
|
|
153
|
+
sage: k == 0
|
|
154
|
+
True
|
|
155
|
+
|
|
156
|
+
Since k is both trivial and injective, its domain should
|
|
157
|
+
be the zero module::
|
|
158
|
+
|
|
159
|
+
sage: k.domain().is_trivial()
|
|
160
|
+
True
|
|
161
|
+
|
|
162
|
+
sage: g = Hom(S, M)([M([Sq(3),Sq(2)])])
|
|
163
|
+
sage: h = g.kernel_inclusion()
|
|
164
|
+
sage: h.is_identity()
|
|
165
|
+
True
|
|
166
|
+
sage: ker = h.domain();
|
|
167
|
+
sage: ker is S
|
|
168
|
+
True
|
|
169
|
+
|
|
170
|
+
So `g` had to be trivial::
|
|
171
|
+
|
|
172
|
+
sage: g.is_zero()
|
|
173
|
+
True
|
|
174
|
+
"""
|
|
175
|
+
return self._action(FPModuleMorphism.kernel_inclusion, top_dim=top_dim, verbose=verbose)
|
|
176
|
+
|
|
177
|
+
def cokernel_projection(self, verbose=False):
|
|
178
|
+
r"""
|
|
179
|
+
Compute the map to the cokernel of ``self``.
|
|
180
|
+
|
|
181
|
+
INPUT:
|
|
182
|
+
|
|
183
|
+
- ``verbose`` -- boolean (default: ``False``); whether log messages are
|
|
184
|
+
printed
|
|
185
|
+
|
|
186
|
+
OUTPUT:
|
|
187
|
+
|
|
188
|
+
The natural projection from the codomain of this homomorphism
|
|
189
|
+
to its cokernel.
|
|
190
|
+
|
|
191
|
+
EXAMPLES::
|
|
192
|
+
|
|
193
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
194
|
+
sage: A1 = SteenrodAlgebra(2, profile=(2,1))
|
|
195
|
+
sage: M = SteenrodFPModule(A1, [0], [[Sq(2)]])
|
|
196
|
+
sage: F = SteenrodFPModule(A1, [0])
|
|
197
|
+
|
|
198
|
+
sage: r = Hom(F, M)([A1.Sq(1)*M.generator(0)])
|
|
199
|
+
sage: co = r.cokernel_projection(); co
|
|
200
|
+
Module morphism:
|
|
201
|
+
From: Finitely presented left module on 1 generator and 1 relation over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [2, 1]
|
|
202
|
+
To: Finitely presented left module on 1 generator and 2 relations over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [2, 1]
|
|
203
|
+
Defn: g[0] |--> g[0]
|
|
204
|
+
|
|
205
|
+
sage: co.domain().is_trivial()
|
|
206
|
+
False
|
|
207
|
+
"""
|
|
208
|
+
from .module import SteenrodFPModule
|
|
209
|
+
new_relations = ([x.dense_coefficient_list()
|
|
210
|
+
for x in self.codomain().relations()] +
|
|
211
|
+
[x.dense_coefficient_list() for x in self._values])
|
|
212
|
+
|
|
213
|
+
coker = SteenrodFPModule(self.base_ring(),
|
|
214
|
+
self.codomain().generator_degrees(),
|
|
215
|
+
relations=tuple(new_relations))
|
|
216
|
+
|
|
217
|
+
projection = Hom(self.codomain(), coker)(coker.generators())
|
|
218
|
+
|
|
219
|
+
return projection
|
|
220
|
+
|
|
221
|
+
def image(self, top_dim=None, verbose=False):
|
|
222
|
+
r"""
|
|
223
|
+
Return the image of ``self``.
|
|
224
|
+
|
|
225
|
+
INPUT:
|
|
226
|
+
|
|
227
|
+
- ``top_dim`` -- integer (optional); used by this function to stop the
|
|
228
|
+
computation at the given degree
|
|
229
|
+
- ``verbose`` -- boolean (default: ``False``); whether log messages are
|
|
230
|
+
printed
|
|
231
|
+
|
|
232
|
+
OUTPUT:
|
|
233
|
+
|
|
234
|
+
An injective homomorphism into the codomain of ``self`` which is
|
|
235
|
+
onto the image of ``self``.
|
|
236
|
+
|
|
237
|
+
EXAMPLES::
|
|
238
|
+
|
|
239
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
240
|
+
sage: A = SteenrodAlgebra(2)
|
|
241
|
+
sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
|
|
242
|
+
sage: S = SteenrodFPModule(A, [0], [[Sq(2)]])
|
|
243
|
+
sage: f = Hom(S, M)([M([0,1])])
|
|
244
|
+
sage: f.is_injective()
|
|
245
|
+
True
|
|
246
|
+
sage: i = f.image(); i
|
|
247
|
+
Module morphism:
|
|
248
|
+
From: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
|
|
249
|
+
To: Finitely presented left module on 2 generators and 2 relations over mod 2 Steenrod algebra, milnor basis
|
|
250
|
+
Defn: g[1] |--> g[1]
|
|
251
|
+
sage: i.codomain() is M
|
|
252
|
+
True
|
|
253
|
+
|
|
254
|
+
Lift the map ``f`` over the inclusion ``i``::
|
|
255
|
+
|
|
256
|
+
sage: f_ = f.lift(i)
|
|
257
|
+
sage: f_.is_injective()
|
|
258
|
+
True
|
|
259
|
+
sage: f_.is_surjective()
|
|
260
|
+
True
|
|
261
|
+
|
|
262
|
+
sage: g = Hom(S, M)([M([Sq(3),Sq(2)])])
|
|
263
|
+
sage: j = g.image(); j
|
|
264
|
+
Module morphism:
|
|
265
|
+
From: Free graded left module on 0 generators over mod 2 Steenrod algebra, milnor basis
|
|
266
|
+
To: Finitely presented left module on 2 generators and 2 relations over mod 2 Steenrod algebra, milnor basis
|
|
267
|
+
|
|
268
|
+
So ``g`` had to be trivial::
|
|
269
|
+
|
|
270
|
+
sage: g.is_zero()
|
|
271
|
+
True
|
|
272
|
+
"""
|
|
273
|
+
return self._action(FPModuleMorphism.image, top_dim=top_dim, verbose=verbose)
|
|
274
|
+
|
|
275
|
+
def _resolve_kernel(self, top_dim=None, verbose=False):
|
|
276
|
+
r"""
|
|
277
|
+
Resolve the kernel of this homomorphism by a free module.
|
|
278
|
+
|
|
279
|
+
INPUT:
|
|
280
|
+
|
|
281
|
+
- ``top_dim`` -- (optional) stop the computation at this degree; if
|
|
282
|
+
not specified, this is determined using :meth:`profile`
|
|
283
|
+
- ``verbose`` -- boolean (default: ``False``); whether log messages are
|
|
284
|
+
printed
|
|
285
|
+
|
|
286
|
+
OUTPUT: a homomorphism `j: F \rightarrow D` where `D` is the domain of
|
|
287
|
+
this homomorphism, `F` is free and such that `\ker(self) = \operatorname{im}(j)`.
|
|
288
|
+
|
|
289
|
+
TESTS::
|
|
290
|
+
|
|
291
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
292
|
+
sage: A = SteenrodAlgebra(2)
|
|
293
|
+
sage: F = SteenrodFPModule(A, [0,0])
|
|
294
|
+
sage: L = SteenrodFPModule(A, [0,0], [[Sq(3),Sq(0,1)], [0,Sq(2)]])
|
|
295
|
+
sage: f = Hom(F, L)([L([Sq(2),0]), L([0, Sq(2)])])
|
|
296
|
+
sage: f._resolve_kernel()
|
|
297
|
+
Module morphism:
|
|
298
|
+
From: Free graded left module on 3 generators over mod 2 Steenrod algebra, milnor basis
|
|
299
|
+
To: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
|
|
300
|
+
Defn: g[0, 0] |--> g[0, 1]
|
|
301
|
+
g[3, 0] |--> Sq(0,1)*g[0, 0]
|
|
302
|
+
g[3, 1] |--> Sq(3)*g[0, 0]
|
|
303
|
+
|
|
304
|
+
An odd primary example::
|
|
305
|
+
|
|
306
|
+
sage: A3 = SteenrodAlgebra(3)
|
|
307
|
+
sage: F0 = A3.free_graded_module([32, 40])
|
|
308
|
+
sage: F1 = A3.free_graded_module([0])
|
|
309
|
+
sage: g0 = F1.generator(0)
|
|
310
|
+
sage: f = Hom(F0, F1)([A3.P(8)*g0, (A3.P(6,1))*g0])
|
|
311
|
+
sage: f._resolve_kernel()
|
|
312
|
+
Module morphism:
|
|
313
|
+
From: Free graded left module on 5 generators over mod 3 Steenrod algebra, milnor basis
|
|
314
|
+
To: Free graded left module on 2 generators over mod 3 Steenrod algebra, milnor basis
|
|
315
|
+
Defn: g[36] |--> P(1)*g[32]
|
|
316
|
+
g[44] |--> P(3)*g[32] + (2P(1))*g[40]
|
|
317
|
+
g[56] |--> P(6)*g[32] + P(0,1)*g[40]
|
|
318
|
+
g[64] |--> P(0,2)*g[32] + (2P(6))*g[40]
|
|
319
|
+
g[72] |--> P(6,1)*g[32]
|
|
320
|
+
"""
|
|
321
|
+
return self._action(FPModuleMorphism._resolve_kernel, top_dim=top_dim, verbose=verbose)
|
|
322
|
+
|
|
323
|
+
def _resolve_image(self, top_dim=None, verbose=False):
|
|
324
|
+
r"""
|
|
325
|
+
Resolve the image of this homomorphism by a free module.
|
|
326
|
+
|
|
327
|
+
INPUT:
|
|
328
|
+
|
|
329
|
+
- ``top_dim`` -- (optional) stop the computation at this degree; if
|
|
330
|
+
not specified, this is determined using :meth:`profile`
|
|
331
|
+
- ``verbose`` -- boolean (default: ``False``); whether log messages are
|
|
332
|
+
printed
|
|
333
|
+
|
|
334
|
+
OUTPUT: a homomorphism `j: F \rightarrow C` where `C` is the codomain
|
|
335
|
+
of this homomorphism, `F` is free, and
|
|
336
|
+
`\operatorname{im}(self) = \operatorname{im}(j)`.
|
|
337
|
+
|
|
338
|
+
TESTS::
|
|
339
|
+
|
|
340
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
341
|
+
sage: A = SteenrodAlgebra(2)
|
|
342
|
+
sage: F = SteenrodFPModule(A, [0,0])
|
|
343
|
+
sage: L = SteenrodFPModule(A, [0,0], [[Sq(3),Sq(0,1)], [0,Sq(2)]])
|
|
344
|
+
sage: f = Hom(F, L)([L([Sq(2),0]), L([0, Sq(2)])])
|
|
345
|
+
sage: f._resolve_image()
|
|
346
|
+
Module morphism:
|
|
347
|
+
From: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
|
|
348
|
+
To: Finitely presented left module on 2 generators and 2 relations over mod 2 Steenrod algebra, milnor basis
|
|
349
|
+
Defn: g[2] |--> Sq(2)*g[0, 0]
|
|
350
|
+
"""
|
|
351
|
+
return self._action(FPModuleMorphism._resolve_image, top_dim=top_dim, verbose=verbose)
|
|
352
|
+
|
|
353
|
+
def _action(self, method, *args, **kwds):
|
|
354
|
+
r"""
|
|
355
|
+
Changes the ground ring to a finite algebra, acts by the given method
|
|
356
|
+
and changes back into the original ground ring before returning.
|
|
357
|
+
|
|
358
|
+
TESTS::
|
|
359
|
+
|
|
360
|
+
sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
|
|
361
|
+
sage: from sage.modules.fp_graded.morphism import FPModuleMorphism
|
|
362
|
+
sage: A = SteenrodAlgebra(2)
|
|
363
|
+
sage: F = SteenrodFPModule(A, [0])
|
|
364
|
+
sage: L = SteenrodFPModule(A, [0], [[Sq(3)]])
|
|
365
|
+
sage: f = Hom(F, L)([L([Sq(2)])])
|
|
366
|
+
sage: f._action(FPModuleMorphism._resolve_image, verbose=True)
|
|
367
|
+
Computing using the profile:
|
|
368
|
+
(2, 1)
|
|
369
|
+
Resolving the image in the range of dimensions [0, 8]: 0 1 2 3 4 5 6 7 8.
|
|
370
|
+
Module morphism:
|
|
371
|
+
From: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
|
|
372
|
+
To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
|
|
373
|
+
Defn: g[2] |--> Sq(2)*g[0]
|
|
374
|
+
"""
|
|
375
|
+
small_profile = self.profile()
|
|
376
|
+
|
|
377
|
+
if kwds.get('verbose', False):
|
|
378
|
+
print('Computing using the profile:')
|
|
379
|
+
print(small_profile)
|
|
380
|
+
|
|
381
|
+
algebra = self.base_ring()
|
|
382
|
+
|
|
383
|
+
# Choose a finite sub Hopf-algebra of the original algebra.
|
|
384
|
+
finite_algebra = SteenrodAlgebra_generic(algebra.prime(), profile=small_profile)
|
|
385
|
+
|
|
386
|
+
# Perform the chosen action on the module after having changed rings
|
|
387
|
+
# to the finite algebra.
|
|
388
|
+
fp_result = method(self.change_ring(finite_algebra), *args, **kwds)
|
|
389
|
+
|
|
390
|
+
# Change back to the original algebra and also from FPModule
|
|
391
|
+
# to SteenrodFPModule, and return the result.
|
|
392
|
+
#
|
|
393
|
+
# This is very clunky. Clean it up!
|
|
394
|
+
f = fp_result.change_ring(self.base_ring())
|
|
395
|
+
M = f.domain()
|
|
396
|
+
N = f.codomain()
|
|
397
|
+
new_values = [N.linear_combination(zip(N.generators(),
|
|
398
|
+
v.dense_coefficient_list()))
|
|
399
|
+
for v in f.values()]
|
|
400
|
+
return Hom(M, N)(new_values)
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
class SteenrodFreeModuleMorphism(FreeGradedModuleMorphism, SteenrodFPModuleMorphism):
|
|
404
|
+
pass
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Functions for computing the profiles of sub-Hopf algebras of the
|
|
4
|
+
mod p Steenrod algebra.
|
|
5
|
+
|
|
6
|
+
In particular, the main functions are :func:`profile_elt` and
|
|
7
|
+
:func:`enveloping_profile_elements`, which compute the profile
|
|
8
|
+
function for the smallest sub-Hopf algebra of the Steenrod algebra
|
|
9
|
+
containing the given elements.
|
|
10
|
+
|
|
11
|
+
See :func:`SteenrodAlgebra
|
|
12
|
+
<sage.algebras.steenrod.steenrod_algebra.SteenrodAlgebra>`
|
|
13
|
+
:mod:`sage.algebras.steenrod.steenrod_algebra` for information about
|
|
14
|
+
profile functions.
|
|
15
|
+
|
|
16
|
+
AUTHORS:
|
|
17
|
+
|
|
18
|
+
- Robert R. Bruner, Michael J. Catanzaro (2012): initial version
|
|
19
|
+
- John Palmieri (2022): cleanup, modifications
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
# ****************************************************************************
|
|
23
|
+
# Copyright (C) 2011 Robert R. Bruner <rrb@math.wayne.edu> and
|
|
24
|
+
# Michael J. Catanzaro <mike@math.wayne.edu>
|
|
25
|
+
#
|
|
26
|
+
# This program is free software: you can redistribute it and/or modify
|
|
27
|
+
# it under the terms of the GNU General Public License as published by
|
|
28
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
29
|
+
# (at your option) any later version.
|
|
30
|
+
# https://www.gnu.org/licenses/
|
|
31
|
+
# ****************************************************************************
|
|
32
|
+
|
|
33
|
+
from itertools import zip_longest
|
|
34
|
+
from sage.rings.integer_ring import ZZ
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def profile_elt(elt, char=2):
|
|
38
|
+
"""
|
|
39
|
+
Return the smallest sub-Hopf algebra containing ``elt``.
|
|
40
|
+
|
|
41
|
+
INPUT:
|
|
42
|
+
|
|
43
|
+
- ``elt`` -- element of the Steenrod algebra (or a sub-Hopf algebra
|
|
44
|
+
of it) or list(s) representing it
|
|
45
|
+
- ``char`` -- (default: 2) the characteristic
|
|
46
|
+
|
|
47
|
+
``elt`` could also be a list (when ``char=2``) or a pair of lists
|
|
48
|
+
(otherwise), in which case it is treated as corresponding to an
|
|
49
|
+
element of the Steenrod algebra: ``(a, b, c) <-> Sq(a, b, c)`` or
|
|
50
|
+
``((a, b, c), (x, y, z)) <-> Q_a Q_b Q_c P(x, y, z)``.
|
|
51
|
+
|
|
52
|
+
OUTPUT: the profile function corresponding to the smallest
|
|
53
|
+
sub-Hopf algebra containing the element passed
|
|
54
|
+
|
|
55
|
+
EXAMPLES::
|
|
56
|
+
|
|
57
|
+
sage: from sage.modules.fp_graded.steenrod.profile import profile_elt
|
|
58
|
+
sage: A2 = SteenrodAlgebra(2)
|
|
59
|
+
sage: profile_elt(A2.Sq(2))
|
|
60
|
+
(2, 1)
|
|
61
|
+
sage: profile_elt(A2.Sq(4,8))
|
|
62
|
+
(3, 4, 3, 2, 1)
|
|
63
|
+
|
|
64
|
+
sage: B = SteenrodAlgebra(3)
|
|
65
|
+
sage: b = B.an_element(); b
|
|
66
|
+
2 Q_1 Q_3 P(2,1)
|
|
67
|
+
sage: profile_elt(b, char=3)
|
|
68
|
+
((1, 1), (1, 2, 1, 2))
|
|
69
|
+
sage: profile_elt(B.P(2,1), char=3)
|
|
70
|
+
((1, 1), ())
|
|
71
|
+
sage: profile_elt(B.Q(2), char=3)
|
|
72
|
+
((0,), (1, 1, 2))
|
|
73
|
+
"""
|
|
74
|
+
try:
|
|
75
|
+
# Convert element of the Steenrod algebra to iterable(s).
|
|
76
|
+
elt = elt.leading_support()
|
|
77
|
+
except AttributeError:
|
|
78
|
+
# Not in the Steenrod algebra so presumably already in the
|
|
79
|
+
# right form.
|
|
80
|
+
pass
|
|
81
|
+
|
|
82
|
+
if char == 2:
|
|
83
|
+
minprofile = [max(0, ZZ(n).exact_log(char) + 1) for n in elt]
|
|
84
|
+
return find_min_profile(minprofile, char)
|
|
85
|
+
|
|
86
|
+
# odd primes:
|
|
87
|
+
alistQ, alistP = elt
|
|
88
|
+
minprofileP = [max(0, ZZ(n).exact_log(char) + 1) for n in alistP]
|
|
89
|
+
if not alistQ:
|
|
90
|
+
minpQ = []
|
|
91
|
+
else:
|
|
92
|
+
minpQ = [1] * (max(alistQ) + 1)
|
|
93
|
+
for j in alistQ:
|
|
94
|
+
minpQ[j] = 2
|
|
95
|
+
return find_min_profile((minprofileP, minpQ), char=char)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def enveloping_profile_elements(alist, char=2):
|
|
99
|
+
r"""
|
|
100
|
+
Return the profile function for the smallest sub-Hopf algebra
|
|
101
|
+
containing the list of elements passed.
|
|
102
|
+
|
|
103
|
+
INPUT:
|
|
104
|
+
|
|
105
|
+
- ``alist`` -- list of Steenrod algebra elements
|
|
106
|
+
- ``char`` -- (default: 2) the characteristic
|
|
107
|
+
|
|
108
|
+
As with :func:`profile_elt`, the entries of ``alist`` could also
|
|
109
|
+
be iterables or pairs of iterables.
|
|
110
|
+
|
|
111
|
+
OUTPUT: the profile function for the minimum sub-algebra
|
|
112
|
+
containing all the elements of ``alist``
|
|
113
|
+
|
|
114
|
+
EXAMPLES::
|
|
115
|
+
|
|
116
|
+
sage: from sage.modules.fp_graded.steenrod.profile import enveloping_profile_elements
|
|
117
|
+
sage: enveloping_profile_elements([Sq(2),Sq(4)])
|
|
118
|
+
(3, 2, 1)
|
|
119
|
+
sage: enveloping_profile_elements([Sq(4)])
|
|
120
|
+
(3, 2, 1)
|
|
121
|
+
sage: enveloping_profile_elements([Sq(2,1,2),Sq(7)])
|
|
122
|
+
(3, 2, 2, 1)
|
|
123
|
+
|
|
124
|
+
sage: B = SteenrodAlgebra(3)
|
|
125
|
+
sage: enveloping_profile_elements([B.P(2,1), B.P(0,0,3)], char=3)
|
|
126
|
+
((1, 1, 2, 1), ())
|
|
127
|
+
sage: enveloping_profile_elements([B.P(3,1)], char=3)
|
|
128
|
+
((2, 1), ())
|
|
129
|
+
sage: enveloping_profile_elements([B.P(2,1), B.P(0,0,3), B.Q(2)], char=3)
|
|
130
|
+
((1, 1, 2, 1), (1, 1, 2))
|
|
131
|
+
"""
|
|
132
|
+
if char == 2:
|
|
133
|
+
profiles = [profile_elt(x) for x in alist if x != 0]
|
|
134
|
+
if not profiles:
|
|
135
|
+
return (0,)
|
|
136
|
+
# zip_longest doesn't do the right thing with lists of length
|
|
137
|
+
# 1, but this case is simple:
|
|
138
|
+
if len(profiles) == 1:
|
|
139
|
+
return profiles[0]
|
|
140
|
+
return find_min_profile(max(*a) for a in zip_longest(*profiles, fillvalue=0))
|
|
141
|
+
|
|
142
|
+
# odd primes:
|
|
143
|
+
profiles = [profile_elt(x, char) for x in alist if x != 0]
|
|
144
|
+
if len(profiles) == 1:
|
|
145
|
+
return profiles[0]
|
|
146
|
+
profiles_P = [x[0] for x in profiles]
|
|
147
|
+
profiles_Q = [x[1] for x in profiles]
|
|
148
|
+
if not profiles_P and not profiles_Q:
|
|
149
|
+
return ((0,), (0,))
|
|
150
|
+
else:
|
|
151
|
+
maxP = [max(*a) for a in zip_longest(*profiles_P, fillvalue=0)]
|
|
152
|
+
maxQ = [max(*a) for a in zip_longest(*profiles_Q, fillvalue=0)]
|
|
153
|
+
return find_min_profile([maxP, maxQ], char=char)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def find_min_profile(prof, char=2):
|
|
157
|
+
r"""
|
|
158
|
+
Return the smallest valid profile function containing a tuple of
|
|
159
|
+
nonnegative integers.
|
|
160
|
+
|
|
161
|
+
INPUT:
|
|
162
|
+
|
|
163
|
+
- ``prof`` -- list or tuple of nonnegative integers
|
|
164
|
+
- ``char`` -- (default: 2) the characteristic
|
|
165
|
+
|
|
166
|
+
OUTPUT: a valid profile containing ``prof``
|
|
167
|
+
|
|
168
|
+
A profile function `e` must satisfy `e(r) \geq \min( e(r-i) - i,
|
|
169
|
+
e(i))` for all `0 < i < r`, and at odd primes, if `k(i+j) = 1`,
|
|
170
|
+
then either `e(i) \leq j` or `k(j) = 1` for all `i \geq 1`, `j
|
|
171
|
+
\geq 0`. We use these inequalities to generate the smallest
|
|
172
|
+
profile function `e` satisfying `e(r) \geq prof(r)` for each `r`
|
|
173
|
+
when `char=2`, and similarly at odd primes.
|
|
174
|
+
|
|
175
|
+
EXAMPLES::
|
|
176
|
+
|
|
177
|
+
sage: from sage.modules.fp_graded.steenrod.profile import find_min_profile
|
|
178
|
+
sage: find_min_profile([1,2])
|
|
179
|
+
(1, 2, 1)
|
|
180
|
+
sage: find_min_profile([2,1])
|
|
181
|
+
(2, 1)
|
|
182
|
+
sage: find_min_profile([1,2,3])
|
|
183
|
+
(1, 2, 3, 1, 1)
|
|
184
|
+
sage: find_min_profile([4])
|
|
185
|
+
(4, 3, 2, 1)
|
|
186
|
+
|
|
187
|
+
sage: find_min_profile([[4], []], char=3)
|
|
188
|
+
((4, 3, 2, 1), ())
|
|
189
|
+
sage: find_min_profile([[1], [2]], char=3)
|
|
190
|
+
((1,), (2, 2))
|
|
191
|
+
sage: find_min_profile([[], [2,1,1,2]], char=3)
|
|
192
|
+
((0,), (2, 1, 1, 2))
|
|
193
|
+
"""
|
|
194
|
+
if char == 2:
|
|
195
|
+
if not prof:
|
|
196
|
+
return (0,)
|
|
197
|
+
# Add a zero to the front so that the relevant part of the
|
|
198
|
+
# pseudo-profile new is indexed starting with 1.
|
|
199
|
+
new = [0] + list(prof)
|
|
200
|
+
# new is probably too short. Increase its length by using the
|
|
201
|
+
# defining inequality for a profile function:
|
|
202
|
+
# e(s+t) \geq min(e(s)-t, e(t)).
|
|
203
|
+
# So if min(e(s)-t, e(t)) > 0, then the length must be at
|
|
204
|
+
# least s+t.
|
|
205
|
+
pad = 0
|
|
206
|
+
new += [0] * max(new)
|
|
207
|
+
for t in range(len(new)):
|
|
208
|
+
for s in range(len(new)):
|
|
209
|
+
if min(new[s] - t, new[t]) > 0:
|
|
210
|
+
pad = max(pad, s + t)
|
|
211
|
+
e = [0] * len(new)
|
|
212
|
+
# Now compute the new profile e.
|
|
213
|
+
for r in range(len(e)):
|
|
214
|
+
m = max((min(e[r - i] - i, e[i]) for i in range(1, r)), default=0)
|
|
215
|
+
e[r] = max(m, new[r])
|
|
216
|
+
# Strip trailing zeroes.
|
|
217
|
+
while e[-1] == 0:
|
|
218
|
+
e = e[:-1]
|
|
219
|
+
return tuple(e[1:])
|
|
220
|
+
|
|
221
|
+
# odd primes:
|
|
222
|
+
pP = list(prof[0])
|
|
223
|
+
pQ = list(prof[1])
|
|
224
|
+
P = find_min_profile(pP, char=2)
|
|
225
|
+
if not pQ:
|
|
226
|
+
return (P, tuple(pQ))
|
|
227
|
+
# newQ: dictionary of the form {index: value} where value is
|
|
228
|
+
# either 1 or 2.
|
|
229
|
+
maxP = max(P)
|
|
230
|
+
newQ = list(pQ) + [None] * maxP
|
|
231
|
+
for j in range(len(pQ)):
|
|
232
|
+
if newQ[j] == 2:
|
|
233
|
+
for i in range(maxP):
|
|
234
|
+
if P[i] > j:
|
|
235
|
+
newQ[i + 1 + j] = 2
|
|
236
|
+
# Strip all of the None values
|
|
237
|
+
# Do it from the back to minimize reshuffles and keep the index matching
|
|
238
|
+
for i in range(len(newQ) - 1, len(pQ) - 1, -1):
|
|
239
|
+
if newQ[i] is None:
|
|
240
|
+
del newQ[i]
|
|
241
|
+
return (P, tuple(newQ))
|