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,1167 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
"""
|
|
3
|
+
Miscellaneous functions for the Steenrod algebra and its elements
|
|
4
|
+
|
|
5
|
+
AUTHORS:
|
|
6
|
+
|
|
7
|
+
- John H. Palmieri (2008-07-30): initial version (as the file
|
|
8
|
+
steenrod_algebra_element.py)
|
|
9
|
+
|
|
10
|
+
- John H. Palmieri (2010-06-30): initial version of steenrod_misc.py.
|
|
11
|
+
Implemented profile functions. Moved most of the methods for
|
|
12
|
+
elements to the ``Element`` subclass of
|
|
13
|
+
:class:`sage.algebras.steenrod.steenrod_algebra.SteenrodAlgebra_generic`.
|
|
14
|
+
|
|
15
|
+
The main functions here are
|
|
16
|
+
|
|
17
|
+
- :func:`get_basis_name`. This function takes a string as input and
|
|
18
|
+
attempts to interpret it as the name of a basis for the Steenrod
|
|
19
|
+
algebra; it returns the canonical name attached to that basis. This
|
|
20
|
+
allows for the use of synonyms when defining bases, while the
|
|
21
|
+
resulting algebras will be identical.
|
|
22
|
+
|
|
23
|
+
- :func:`normalize_profile`. This function returns the canonical (and
|
|
24
|
+
hashable) description of any profile function. See
|
|
25
|
+
:mod:`sage.algebras.steenrod.steenrod_algebra` and
|
|
26
|
+
:func:`SteenrodAlgebra <sage.algebras.steenrod.steenrod_algebra.SteenrodAlgebra>`
|
|
27
|
+
for information on profile functions.
|
|
28
|
+
|
|
29
|
+
- functions named ``*_mono_to_string`` where ``*`` is a basis name
|
|
30
|
+
(:func:`milnor_mono_to_string`, etc.). These convert tuples
|
|
31
|
+
representing basis elements to strings, for _repr_ and _latex_
|
|
32
|
+
methods.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
# ****************************************************************************
|
|
36
|
+
# Copyright (C) 2008-2010 John H. Palmieri <palmieri@math.washington.edu>
|
|
37
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
38
|
+
# ****************************************************************************
|
|
39
|
+
|
|
40
|
+
######################################################
|
|
41
|
+
# basis names
|
|
42
|
+
|
|
43
|
+
_steenrod_milnor_basis_names = ['milnor']
|
|
44
|
+
_steenrod_serre_cartan_basis_names = ['serre_cartan', 'serre-cartan', 'sc',
|
|
45
|
+
'adem', 'admissible']
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_basis_name(basis, p, generic=None):
|
|
49
|
+
"""
|
|
50
|
+
Return canonical basis named by string basis at the prime p.
|
|
51
|
+
|
|
52
|
+
INPUT:
|
|
53
|
+
|
|
54
|
+
- ``basis`` -- string
|
|
55
|
+
|
|
56
|
+
- ``p`` -- positive prime number
|
|
57
|
+
|
|
58
|
+
- ``generic`` -- boolean (default: 'None')
|
|
59
|
+
|
|
60
|
+
OUTPUT: ``basis_name`` -- string
|
|
61
|
+
|
|
62
|
+
Specify the names of the implemented bases. The input is
|
|
63
|
+
converted to lower-case, then processed to return the canonical
|
|
64
|
+
name for the basis.
|
|
65
|
+
|
|
66
|
+
For the Milnor and Serre-Cartan bases, use the list of synonyms
|
|
67
|
+
defined by the variables :data:`_steenrod_milnor_basis_names` and
|
|
68
|
+
:data:`_steenrod_serre_cartan_basis_names`. Their canonical names
|
|
69
|
+
are 'milnor' and 'serre-cartan', respectively.
|
|
70
|
+
|
|
71
|
+
For the other bases, use pattern-matching rather than a list of
|
|
72
|
+
synonyms:
|
|
73
|
+
|
|
74
|
+
- Search for 'wood' and 'y' or 'wood' and 'z' to get the Wood
|
|
75
|
+
bases. Canonical names 'woody', 'woodz'.
|
|
76
|
+
|
|
77
|
+
- Search for 'arnon' and 'c' for the Arnon C basis. Canonical
|
|
78
|
+
name: 'arnonc'.
|
|
79
|
+
|
|
80
|
+
- Search for 'arnon' (and no 'c') for the Arnon A basis. Also see
|
|
81
|
+
if 'long' is present, for the long form of the basis. Canonical
|
|
82
|
+
names: 'arnona', 'arnona_long'.
|
|
83
|
+
|
|
84
|
+
- Search for 'wall' for the Wall basis. Also see if 'long' is
|
|
85
|
+
present. Canonical names: 'wall', 'wall_long'.
|
|
86
|
+
|
|
87
|
+
- Search for 'pst' for P^s_t bases, then search for the order
|
|
88
|
+
type: 'rlex', 'llex', 'deg', 'revz'. Canonical names:
|
|
89
|
+
'pst_rlex', 'pst_llex', 'pst_deg', 'pst_revz'.
|
|
90
|
+
|
|
91
|
+
- For commutator types, search for 'comm', an order type, and also
|
|
92
|
+
check to see if 'long' is present. Canonical names:
|
|
93
|
+
'comm_rlex', 'comm_llex', 'comm_deg', 'comm_revz',
|
|
94
|
+
'comm_rlex_long', 'comm_llex_long', 'comm_deg_long',
|
|
95
|
+
'comm_revz_long'.
|
|
96
|
+
|
|
97
|
+
EXAMPLES::
|
|
98
|
+
|
|
99
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import get_basis_name
|
|
100
|
+
sage: get_basis_name('adem', 2)
|
|
101
|
+
'serre-cartan'
|
|
102
|
+
sage: get_basis_name('milnor', 2)
|
|
103
|
+
'milnor'
|
|
104
|
+
sage: get_basis_name('MiLNoR', 5)
|
|
105
|
+
'milnor'
|
|
106
|
+
sage: get_basis_name('pst-llex', 2)
|
|
107
|
+
'pst_llex'
|
|
108
|
+
sage: get_basis_name('wood_abcdedfg_y', 2)
|
|
109
|
+
'woody'
|
|
110
|
+
sage: get_basis_name('wood', 2)
|
|
111
|
+
Traceback (most recent call last):
|
|
112
|
+
...
|
|
113
|
+
ValueError: wood is not a recognized basis at the prime 2
|
|
114
|
+
sage: get_basis_name('arnon--hello--long', 2)
|
|
115
|
+
'arnona_long'
|
|
116
|
+
sage: get_basis_name('arnona_long', p=5)
|
|
117
|
+
Traceback (most recent call last):
|
|
118
|
+
...
|
|
119
|
+
ValueError: arnona_long is not a recognized basis at the prime 5
|
|
120
|
+
sage: get_basis_name('NOT_A_BASIS', 2)
|
|
121
|
+
Traceback (most recent call last):
|
|
122
|
+
...
|
|
123
|
+
ValueError: not_a_basis is not a recognized basis at the prime 2
|
|
124
|
+
sage: get_basis_name('woody', 2, generic=True)
|
|
125
|
+
Traceback (most recent call last):
|
|
126
|
+
...
|
|
127
|
+
ValueError: woody is not a recognized basis for the generic Steenrod algebra at the prime 2
|
|
128
|
+
"""
|
|
129
|
+
if generic is None:
|
|
130
|
+
generic = p != 2
|
|
131
|
+
basis = basis.lower()
|
|
132
|
+
if basis in _steenrod_milnor_basis_names:
|
|
133
|
+
result = 'milnor'
|
|
134
|
+
elif basis in _steenrod_serre_cartan_basis_names:
|
|
135
|
+
result = 'serre-cartan'
|
|
136
|
+
elif basis.find('pst') >= 0:
|
|
137
|
+
if basis.find('rlex') >= 0:
|
|
138
|
+
result = 'pst_rlex'
|
|
139
|
+
elif basis.find('llex') >= 0:
|
|
140
|
+
result = 'pst_llex'
|
|
141
|
+
elif basis.find('deg') >= 0:
|
|
142
|
+
result = 'pst_deg'
|
|
143
|
+
elif basis.find('revz') >= 0:
|
|
144
|
+
result = 'pst_revz'
|
|
145
|
+
else:
|
|
146
|
+
result = 'pst_revz'
|
|
147
|
+
elif basis.find('comm') >= 0:
|
|
148
|
+
if basis.find('rlex') >= 0:
|
|
149
|
+
result = 'comm_rlex'
|
|
150
|
+
elif basis.find('llex') >= 0:
|
|
151
|
+
result = 'comm_llex'
|
|
152
|
+
elif basis.find('deg') >= 0:
|
|
153
|
+
result = 'comm_deg'
|
|
154
|
+
elif basis.find('revz') >= 0:
|
|
155
|
+
result = 'comm_revz'
|
|
156
|
+
else:
|
|
157
|
+
result = 'comm_revz'
|
|
158
|
+
if basis.find('long') >= 0:
|
|
159
|
+
result = result + '_long'
|
|
160
|
+
elif not generic and basis.find('wood') >= 0:
|
|
161
|
+
if basis.find('y') >= 0:
|
|
162
|
+
result = 'woody'
|
|
163
|
+
elif basis.find('z') >= 0:
|
|
164
|
+
result = 'woodz'
|
|
165
|
+
else:
|
|
166
|
+
raise ValueError("%s is not a recognized basis at the prime %s" % (basis, p))
|
|
167
|
+
elif not generic and basis.find('arnon') >= 0:
|
|
168
|
+
if basis.find('c') >= 0:
|
|
169
|
+
result = 'arnonc'
|
|
170
|
+
else:
|
|
171
|
+
result = 'arnona'
|
|
172
|
+
if basis.find('long') >= 0:
|
|
173
|
+
result = result + '_long'
|
|
174
|
+
elif not generic and basis.find('wall') >= 0:
|
|
175
|
+
result = 'wall'
|
|
176
|
+
if basis.find('long') >= 0:
|
|
177
|
+
result = result + '_long'
|
|
178
|
+
else:
|
|
179
|
+
gencase = " for the generic Steenrod algebra" if p == 2 and generic else ""
|
|
180
|
+
raise ValueError("%s is not a recognized basis%s at the prime %s" % (basis, gencase, p))
|
|
181
|
+
return result
|
|
182
|
+
|
|
183
|
+
######################################################
|
|
184
|
+
# profile functions
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def is_valid_profile(profile, truncation_type, p=2, generic=None):
|
|
188
|
+
r"""
|
|
189
|
+
Return ``True`` if ``profile``, together with ``truncation_type``, is a valid
|
|
190
|
+
profile at the prime `p`.
|
|
191
|
+
|
|
192
|
+
INPUT:
|
|
193
|
+
|
|
194
|
+
- ``profile`` -- when `p=2`, a tuple or list of numbers; when `p`
|
|
195
|
+
is odd, a pair of such lists
|
|
196
|
+
|
|
197
|
+
- ``truncation_type`` -- either 0 or `\infty`
|
|
198
|
+
|
|
199
|
+
- ``p`` -- prime number (default: 2)
|
|
200
|
+
|
|
201
|
+
- ``generic`` -- boolean (default: ``None``)
|
|
202
|
+
|
|
203
|
+
OUTPUT: ``True`` if the profile function is valid, ``False`` otherwise
|
|
204
|
+
|
|
205
|
+
See the documentation for :mod:`sage.algebras.steenrod.steenrod_algebra`
|
|
206
|
+
for descriptions of profile functions and how they correspond to
|
|
207
|
+
sub-Hopf algebras of the Steenrod algebra. Briefly: at the prime
|
|
208
|
+
2, a profile function `e` is valid if it satisfies the condition
|
|
209
|
+
|
|
210
|
+
- `e(r) \geq \min( e(r-i) - i, e(i))` for all `0 < i < r`.
|
|
211
|
+
|
|
212
|
+
At odd primes, a pair of profile functions `e` and `k` are valid
|
|
213
|
+
if they satisfy
|
|
214
|
+
|
|
215
|
+
- `e(r) \geq \min( e(r-i) - i, e(i))` for all `0 < i < r`.
|
|
216
|
+
|
|
217
|
+
- if `k(i+j) = 1`, then either `e(i) \leq j` or `k(j) = 1` for all
|
|
218
|
+
`i \geq 1`, `j \geq 0`.
|
|
219
|
+
|
|
220
|
+
In this function, profile functions are lists or tuples, and
|
|
221
|
+
``truncation_type`` is appended as the last element of the list
|
|
222
|
+
`e` before testing.
|
|
223
|
+
|
|
224
|
+
EXAMPLES:
|
|
225
|
+
|
|
226
|
+
`p=2`::
|
|
227
|
+
|
|
228
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import is_valid_profile
|
|
229
|
+
sage: is_valid_profile([3,2,1], 0)
|
|
230
|
+
True
|
|
231
|
+
sage: is_valid_profile([3,2,1], Infinity)
|
|
232
|
+
True
|
|
233
|
+
sage: is_valid_profile([1,2,3], 0)
|
|
234
|
+
False
|
|
235
|
+
sage: is_valid_profile([6,2,0], Infinity)
|
|
236
|
+
False
|
|
237
|
+
sage: is_valid_profile([0,3], 0)
|
|
238
|
+
False
|
|
239
|
+
sage: is_valid_profile([0,0,4], 0)
|
|
240
|
+
False
|
|
241
|
+
sage: is_valid_profile([0,0,0,4,0], 0)
|
|
242
|
+
True
|
|
243
|
+
|
|
244
|
+
Odd primes::
|
|
245
|
+
|
|
246
|
+
sage: is_valid_profile(([0,0,0], [2,1,1,1,2,2]), 0, p=3)
|
|
247
|
+
True
|
|
248
|
+
sage: is_valid_profile(([1], [2,2]), 0, p=3)
|
|
249
|
+
True
|
|
250
|
+
sage: is_valid_profile(([1], [2]), 0, p=7)
|
|
251
|
+
False
|
|
252
|
+
sage: is_valid_profile(([1,2,1], []), 0, p=7)
|
|
253
|
+
True
|
|
254
|
+
sage: is_valid_profile(([0,0,0], [2,1,1,1,2,2]), 0, p=2, generic=True)
|
|
255
|
+
True
|
|
256
|
+
"""
|
|
257
|
+
from sage.rings.infinity import Infinity
|
|
258
|
+
if generic is None:
|
|
259
|
+
generic = p != 2
|
|
260
|
+
if not generic:
|
|
261
|
+
pro = list(profile) + [truncation_type]*len(profile)
|
|
262
|
+
r = 0
|
|
263
|
+
for pro_r in pro:
|
|
264
|
+
r += 1 # index of pro_r
|
|
265
|
+
if pro_r < Infinity:
|
|
266
|
+
for i in range(1,r):
|
|
267
|
+
if pro_r < min(pro[r-i-1] - i, pro[i-1]):
|
|
268
|
+
return False
|
|
269
|
+
else:
|
|
270
|
+
# p odd:
|
|
271
|
+
e = list(profile[0]) + [truncation_type]*len(profile[0])
|
|
272
|
+
k = list(profile[1])
|
|
273
|
+
if not set(k).issubset({1,2}):
|
|
274
|
+
return False
|
|
275
|
+
if truncation_type > 0:
|
|
276
|
+
k = k + [2]
|
|
277
|
+
else:
|
|
278
|
+
k = k + [1]*len(profile[0])
|
|
279
|
+
if len(k) > len(e):
|
|
280
|
+
e = e + [truncation_type] * (len(k) - len(e))
|
|
281
|
+
r = 0
|
|
282
|
+
for e_r in e:
|
|
283
|
+
r += 1 # index of e_r
|
|
284
|
+
if e_r < Infinity:
|
|
285
|
+
for i in range(1,r):
|
|
286
|
+
if e_r < min(e[r-i-1] - i, e[i-1]):
|
|
287
|
+
return False
|
|
288
|
+
r = -1
|
|
289
|
+
for k_r in k:
|
|
290
|
+
r += 1 # index of k_r
|
|
291
|
+
if k_r == 1:
|
|
292
|
+
for j in range(r):
|
|
293
|
+
i = r-j
|
|
294
|
+
if e[i-1] > j and k[j] == 2:
|
|
295
|
+
return False
|
|
296
|
+
return True
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def normalize_profile(profile, precision=None, truncation_type='auto', p=2, generic=None):
|
|
300
|
+
r"""
|
|
301
|
+
Given a profile function and related data, return it in a standard form,
|
|
302
|
+
suitable for hashing and caching as data defining a sub-Hopf
|
|
303
|
+
algebra of the Steenrod algebra.
|
|
304
|
+
|
|
305
|
+
INPUT:
|
|
306
|
+
|
|
307
|
+
- ``profile`` -- a profile function in form specified below
|
|
308
|
+
- ``precision`` -- integer or ``None`` (default: ``None``)
|
|
309
|
+
- ``truncation_type`` -- 0 or `\infty` or 'auto' (default: 'auto')
|
|
310
|
+
- ``p`` -- prime (default: 2)
|
|
311
|
+
- ``generic`` -- boolean (default: ``None``)
|
|
312
|
+
|
|
313
|
+
OUTPUT:
|
|
314
|
+
|
|
315
|
+
a triple ``profile, precision, truncation_type``, in
|
|
316
|
+
standard form as described below.
|
|
317
|
+
|
|
318
|
+
The "standard form" is as follows: ``profile`` should be a tuple
|
|
319
|
+
of integers (or `\infty`) with no trailing zeroes when `p=2`, or a
|
|
320
|
+
pair of such when `p` is odd or `generic` is ``True``. ``precision``
|
|
321
|
+
should be a positive integer. ``truncation_type`` should be 0 or `\infty`.
|
|
322
|
+
Furthermore, this must be a valid profile, as determined by the
|
|
323
|
+
function :func:`is_valid_profile`. See also the documentation for
|
|
324
|
+
the module :mod:`sage.algebras.steenrod.steenrod_algebra` for information
|
|
325
|
+
about profile functions.
|
|
326
|
+
|
|
327
|
+
For the inputs: when `p=2`, ``profile`` should be a valid profile
|
|
328
|
+
function, and it may be entered in any of the following forms:
|
|
329
|
+
|
|
330
|
+
- a list or tuple, e.g., ``[3,2,1,1]``
|
|
331
|
+
- a function from positive integers to nonnegative integers (and
|
|
332
|
+
`\infty`), e.g., ``lambda n: n+2``. This corresponds to the
|
|
333
|
+
list ``[3, 4, 5, ...]``.
|
|
334
|
+
- ``None`` or ``Infinity`` -- use this for the profile function for
|
|
335
|
+
the whole Steenrod algebra. This corresponds to the list
|
|
336
|
+
``[Infinity, Infinity, Infinity, ...]``
|
|
337
|
+
|
|
338
|
+
To make this hashable, it gets turned into a tuple. In the first
|
|
339
|
+
case it is clear how to do this; also in this case, ``precision``
|
|
340
|
+
is set to be one more than the length of this tuple. In the
|
|
341
|
+
second case, construct a tuple of length one less than
|
|
342
|
+
``precision`` (default: 100). In the last case, the empty
|
|
343
|
+
tuple is returned and ``precision`` is set to 1.
|
|
344
|
+
|
|
345
|
+
Once a sub-Hopf algebra of the Steenrod algebra has been defined
|
|
346
|
+
using such a profile function, if the code requires any remaining
|
|
347
|
+
terms (say, terms after the 100th), then they are given by
|
|
348
|
+
``truncation_type`` if that is 0 or `\infty`. If
|
|
349
|
+
``truncation_type`` is 'auto', then in the case of a tuple, it
|
|
350
|
+
gets set to 0, while for the other cases it gets set to `\infty`.
|
|
351
|
+
|
|
352
|
+
See the examples below.
|
|
353
|
+
|
|
354
|
+
When `p` is odd, ``profile`` is a pair of "functions", so it may
|
|
355
|
+
have the following forms:
|
|
356
|
+
|
|
357
|
+
- a pair of lists or tuples, the second of which takes values in
|
|
358
|
+
the set `\{1,2\}`, e.g., ``([3,2,1,1], [1,1,2,2,1])``.
|
|
359
|
+
|
|
360
|
+
- a pair of functions, one (called `e`) from positive integers to
|
|
361
|
+
nonnegative integers (and `\infty`), one (called `k`) from
|
|
362
|
+
nonnegative integers to the set `\{1,2\}`, e.g.,
|
|
363
|
+
``(lambda n: n+2, lambda n: 1)``. This corresponds to the
|
|
364
|
+
pair ``([3, 4, 5, ...], [1, 1, 1, ...])``.
|
|
365
|
+
|
|
366
|
+
- ``None`` or ``Infinity`` -- use this for the profile function for
|
|
367
|
+
the whole Steenrod algebra. This corresponds to the pair
|
|
368
|
+
``([Infinity, Infinity, Infinity, ...], [2, 2, 2, ...])``.
|
|
369
|
+
|
|
370
|
+
You can also mix and match the first two, passing a pair with
|
|
371
|
+
first entry a list and second entry a function, for instance. The
|
|
372
|
+
values of ``precision`` and ``truncation_type`` are determined by
|
|
373
|
+
the first entry.
|
|
374
|
+
|
|
375
|
+
EXAMPLES:
|
|
376
|
+
|
|
377
|
+
`p=2`::
|
|
378
|
+
|
|
379
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import normalize_profile
|
|
380
|
+
sage: normalize_profile([1,2,1,0,0])
|
|
381
|
+
((1, 2, 1), 0)
|
|
382
|
+
|
|
383
|
+
The full mod 2 Steenrod algebra::
|
|
384
|
+
|
|
385
|
+
sage: normalize_profile(Infinity)
|
|
386
|
+
((), +Infinity)
|
|
387
|
+
sage: normalize_profile(None)
|
|
388
|
+
((), +Infinity)
|
|
389
|
+
sage: normalize_profile(lambda n: Infinity)
|
|
390
|
+
((), +Infinity)
|
|
391
|
+
|
|
392
|
+
The ``precision`` argument has no effect when the first argument
|
|
393
|
+
is a list or tuple::
|
|
394
|
+
|
|
395
|
+
sage: normalize_profile([1,2,1,0,0], precision=12)
|
|
396
|
+
((1, 2, 1), 0)
|
|
397
|
+
|
|
398
|
+
If the first argument is a function, then construct a list of
|
|
399
|
+
length one less than ``precision``, by plugging in the numbers 1,
|
|
400
|
+
2, ..., ``precision`` - 1::
|
|
401
|
+
|
|
402
|
+
sage: normalize_profile(lambda n: 4-n, precision=4)
|
|
403
|
+
((3, 2, 1), +Infinity)
|
|
404
|
+
sage: normalize_profile(lambda n: 4-n, precision=4, truncation_type=0)
|
|
405
|
+
((3, 2, 1), 0)
|
|
406
|
+
|
|
407
|
+
Negative numbers in profile functions are turned into zeroes::
|
|
408
|
+
|
|
409
|
+
sage: normalize_profile(lambda n: 4-n, precision=6)
|
|
410
|
+
((3, 2, 1, 0, 0), +Infinity)
|
|
411
|
+
|
|
412
|
+
If it doesn't give a valid profile, an error is raised::
|
|
413
|
+
|
|
414
|
+
sage: normalize_profile(lambda n: 3, precision=4, truncation_type=0)
|
|
415
|
+
Traceback (most recent call last):
|
|
416
|
+
...
|
|
417
|
+
ValueError: invalid profile
|
|
418
|
+
sage: normalize_profile(lambda n: 3, precision=4, truncation_type = Infinity)
|
|
419
|
+
((3, 3, 3), +Infinity)
|
|
420
|
+
|
|
421
|
+
When `p` is odd, the behavior is similar::
|
|
422
|
+
|
|
423
|
+
sage: normalize_profile(([2,1], [2,2,2]), p=13)
|
|
424
|
+
(((2, 1), (2, 2, 2)), 0)
|
|
425
|
+
|
|
426
|
+
The full mod `p` Steenrod algebra::
|
|
427
|
+
|
|
428
|
+
sage: normalize_profile(None, p=7)
|
|
429
|
+
(((), ()), +Infinity)
|
|
430
|
+
sage: normalize_profile(Infinity, p=11)
|
|
431
|
+
(((), ()), +Infinity)
|
|
432
|
+
sage: normalize_profile((lambda n: Infinity, lambda n: 2), p=17)
|
|
433
|
+
(((), ()), +Infinity)
|
|
434
|
+
|
|
435
|
+
Note that as at the prime 2, the ``precision`` argument has no
|
|
436
|
+
effect on a list or tuple in either entry of ``profile``. If
|
|
437
|
+
``truncation_type`` is 'auto', then it gets converted to either
|
|
438
|
+
``0`` or ``+Infinity`` depending on the *first* entry of
|
|
439
|
+
``profile``::
|
|
440
|
+
|
|
441
|
+
sage: normalize_profile(([2,1], [2,2,2]), precision=84, p=13)
|
|
442
|
+
(((2, 1), (2, 2, 2)), 0)
|
|
443
|
+
sage: normalize_profile((lambda n: 0, lambda n: 2), precision=4, p=11)
|
|
444
|
+
(((0, 0, 0), ()), +Infinity)
|
|
445
|
+
sage: normalize_profile((lambda n: 0, (1,1,1,1,1,1,1)), precision=4, p=11)
|
|
446
|
+
(((0, 0, 0), (1, 1, 1, 1, 1, 1, 1)), +Infinity)
|
|
447
|
+
sage: normalize_profile(((4,3,2,1), lambda n: 2), precision=6, p=11)
|
|
448
|
+
(((4, 3, 2, 1), (2, 2, 2, 2, 2)), 0)
|
|
449
|
+
sage: normalize_profile(((4,3,2,1), lambda n: 1), precision=3, p=11, truncation_type=Infinity)
|
|
450
|
+
(((4, 3, 2, 1), (1, 1)), +Infinity)
|
|
451
|
+
|
|
452
|
+
As at the prime 2, negative numbers in the first component are
|
|
453
|
+
converted to zeroes. Numbers in the second component must be
|
|
454
|
+
either 1 and 2, or else an error is raised::
|
|
455
|
+
|
|
456
|
+
sage: normalize_profile((lambda n: -n, lambda n: 1), precision=4, p=11)
|
|
457
|
+
(((0, 0, 0), (1, 1, 1)), +Infinity)
|
|
458
|
+
sage: normalize_profile([[0,0,0], [1,2,3,2,1]], p=11)
|
|
459
|
+
Traceback (most recent call last):
|
|
460
|
+
...
|
|
461
|
+
ValueError: invalid profile
|
|
462
|
+
"""
|
|
463
|
+
from sage.rings.infinity import Infinity
|
|
464
|
+
if truncation_type == 'zero':
|
|
465
|
+
truncation_type = 0
|
|
466
|
+
if truncation_type == 'infinity':
|
|
467
|
+
truncation_type = Infinity
|
|
468
|
+
if generic is None:
|
|
469
|
+
generic = p != 2
|
|
470
|
+
if not generic:
|
|
471
|
+
if profile is None or profile == Infinity:
|
|
472
|
+
# no specified profile or infinite profile: return profile
|
|
473
|
+
# for the entire Steenrod algebra
|
|
474
|
+
new_profile = ()
|
|
475
|
+
truncation_type = Infinity
|
|
476
|
+
elif isinstance(profile, (list, tuple)):
|
|
477
|
+
# profile is a list or tuple: use it as is. if
|
|
478
|
+
# truncation_type not specified, set it to 'zero'. remove
|
|
479
|
+
# trailing zeroes if truncation_type is 'auto' or 'zero'.
|
|
480
|
+
if truncation_type == 'auto':
|
|
481
|
+
truncation_type = 0
|
|
482
|
+
# remove trailing zeroes or Infinitys
|
|
483
|
+
while profile and profile[-1] == truncation_type:
|
|
484
|
+
profile = profile[:-1]
|
|
485
|
+
new_profile = tuple(profile)
|
|
486
|
+
elif callable(profile):
|
|
487
|
+
# profile is a function: turn it into a tuple. if
|
|
488
|
+
# truncation_type not specified, set it to 'infinity' if
|
|
489
|
+
# the function is ever infinite; otherwise set it to
|
|
490
|
+
# 0. remove trailing zeroes if truncation_type is
|
|
491
|
+
# 0, trailing Infinitys if truncation_type is oo.
|
|
492
|
+
if precision is None:
|
|
493
|
+
precision = 100
|
|
494
|
+
if truncation_type == 'auto':
|
|
495
|
+
truncation_type = Infinity
|
|
496
|
+
new_profile = [max(0, profile(i)) for i in range(1, precision)]
|
|
497
|
+
# remove trailing zeroes or Infinitys:
|
|
498
|
+
while new_profile and new_profile[-1] == truncation_type:
|
|
499
|
+
del new_profile[-1]
|
|
500
|
+
new_profile = tuple(new_profile)
|
|
501
|
+
if is_valid_profile(new_profile, truncation_type, p):
|
|
502
|
+
return new_profile, truncation_type
|
|
503
|
+
else:
|
|
504
|
+
raise ValueError("invalid profile")
|
|
505
|
+
else: # p odd
|
|
506
|
+
if profile is None or profile == Infinity:
|
|
507
|
+
# no specified profile or infinite profile: return profile
|
|
508
|
+
# for the entire Steenrod algebra
|
|
509
|
+
new_profile = ((), ())
|
|
510
|
+
truncation_type = Infinity
|
|
511
|
+
else: # profile should be a list or tuple of length 2
|
|
512
|
+
assert isinstance(profile, (list, tuple)) and len(profile) == 2, \
|
|
513
|
+
"Invalid form for profile"
|
|
514
|
+
e = profile[0]
|
|
515
|
+
k = profile[1]
|
|
516
|
+
if isinstance(e, (list, tuple)):
|
|
517
|
+
# e is a list or tuple: use it as is. if
|
|
518
|
+
# truncation_type not specified, set it to 0. remove
|
|
519
|
+
# appropriate trailing terms.
|
|
520
|
+
if truncation_type == 'auto':
|
|
521
|
+
truncation_type = 0
|
|
522
|
+
# remove trailing terms
|
|
523
|
+
while e and e[-1] == truncation_type:
|
|
524
|
+
e = e[:-1]
|
|
525
|
+
e = tuple(e)
|
|
526
|
+
elif callable(e):
|
|
527
|
+
# e is a function: turn it into a tuple. if
|
|
528
|
+
# truncation_type not specified, set it to 'infinity'
|
|
529
|
+
# if the function is ever infinite; otherwise set it
|
|
530
|
+
# to 0. remove appropriate trailing terms.
|
|
531
|
+
if precision is None:
|
|
532
|
+
e_precision = 100
|
|
533
|
+
else:
|
|
534
|
+
e_precision = precision
|
|
535
|
+
if truncation_type == 'auto':
|
|
536
|
+
truncation_type = Infinity
|
|
537
|
+
e = [max(0, e(i)) for i in range(1, e_precision)]
|
|
538
|
+
# remove trailing terms
|
|
539
|
+
while e and e[-1] == truncation_type:
|
|
540
|
+
del e[-1]
|
|
541
|
+
e = tuple(e)
|
|
542
|
+
if isinstance(k, (list, tuple)):
|
|
543
|
+
# k is a list or tuple: use it as is.
|
|
544
|
+
k = tuple(k)
|
|
545
|
+
elif callable(k):
|
|
546
|
+
# k is a function: turn it into a tuple.
|
|
547
|
+
if precision is None:
|
|
548
|
+
k_precision = 100
|
|
549
|
+
else:
|
|
550
|
+
k_precision = precision
|
|
551
|
+
k = tuple([k(i) for i in range(k_precision-1)])
|
|
552
|
+
# Remove trailing ones from k if truncation_type is 'zero',
|
|
553
|
+
# remove trailing twos if truncation_type is 'Infinity'.
|
|
554
|
+
if truncation_type == 0:
|
|
555
|
+
while k and k[-1] == 1:
|
|
556
|
+
k = k[:-1]
|
|
557
|
+
else:
|
|
558
|
+
while k and k[-1] == 2:
|
|
559
|
+
k = k[:-1]
|
|
560
|
+
new_profile = (e, k)
|
|
561
|
+
if is_valid_profile(new_profile, truncation_type, p, generic=True):
|
|
562
|
+
return new_profile, truncation_type
|
|
563
|
+
else:
|
|
564
|
+
raise ValueError("invalid profile")
|
|
565
|
+
|
|
566
|
+
######################################################
|
|
567
|
+
# string representations for elements
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
def milnor_mono_to_string(mono, latex=False, generic=False):
|
|
571
|
+
r"""
|
|
572
|
+
String representation of element of the Milnor basis.
|
|
573
|
+
|
|
574
|
+
This is used by the _repr_ and _latex_ methods.
|
|
575
|
+
|
|
576
|
+
INPUT:
|
|
577
|
+
|
|
578
|
+
- ``mono`` -- if `generic=False`, tuple of nonnegative integers (a,b,c,...);
|
|
579
|
+
if `generic=True`, pair of tuples of nonnegative integers ((e0, e1, e2,
|
|
580
|
+
...), (r1, r2, ...))
|
|
581
|
+
|
|
582
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
583
|
+
LaTeX string
|
|
584
|
+
|
|
585
|
+
- ``generic`` -- whether to format generically, or for the prime 2 (default)
|
|
586
|
+
|
|
587
|
+
OUTPUT: ``rep`` -- string
|
|
588
|
+
|
|
589
|
+
This returns a string like ``Sq(a,b,c,...)`` when `generic=False`, or a string
|
|
590
|
+
like ``Q_e0 Q_e1 Q_e2 ... P(r1, r2, ...)`` when `generic=True`.
|
|
591
|
+
|
|
592
|
+
EXAMPLES::
|
|
593
|
+
|
|
594
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import milnor_mono_to_string
|
|
595
|
+
sage: milnor_mono_to_string((1,2,3,4))
|
|
596
|
+
'Sq(1,2,3,4)'
|
|
597
|
+
sage: milnor_mono_to_string((1,2,3,4),latex=True)
|
|
598
|
+
'\\text{Sq}(1,2,3,4)'
|
|
599
|
+
sage: milnor_mono_to_string(((1,0), (2,3,1)), generic=True)
|
|
600
|
+
'Q_{1} Q_{0} P(2,3,1)'
|
|
601
|
+
sage: milnor_mono_to_string(((1,0), (2,3,1)), latex=True, generic=True)
|
|
602
|
+
'Q_{1} Q_{0} \\mathcal{P}(2,3,1)'
|
|
603
|
+
|
|
604
|
+
The empty tuple represents the unit element::
|
|
605
|
+
|
|
606
|
+
sage: milnor_mono_to_string(())
|
|
607
|
+
'1'
|
|
608
|
+
sage: milnor_mono_to_string((), generic=True)
|
|
609
|
+
'1'
|
|
610
|
+
"""
|
|
611
|
+
if latex:
|
|
612
|
+
if not generic:
|
|
613
|
+
sq = "\\text{Sq}"
|
|
614
|
+
P = "\\text{Sq}"
|
|
615
|
+
else:
|
|
616
|
+
P = "\\mathcal{P}"
|
|
617
|
+
else:
|
|
618
|
+
if not generic:
|
|
619
|
+
sq = "Sq"
|
|
620
|
+
P = "Sq"
|
|
621
|
+
else:
|
|
622
|
+
P = "P"
|
|
623
|
+
if mono == () or mono == (0,) or (generic and len(mono[0]) + len(mono[1]) == 0):
|
|
624
|
+
return "1"
|
|
625
|
+
else:
|
|
626
|
+
if not generic:
|
|
627
|
+
string = sq + "(" + str(mono[0])
|
|
628
|
+
for n in mono[1:]:
|
|
629
|
+
string = string + "," + str(n)
|
|
630
|
+
string = string + ")"
|
|
631
|
+
else:
|
|
632
|
+
string = ""
|
|
633
|
+
if len(mono[0]) > 0:
|
|
634
|
+
for e in mono[0]:
|
|
635
|
+
string = string + "Q_{" + str(e) + "} "
|
|
636
|
+
if len(mono[1]) > 0:
|
|
637
|
+
string = string + P + "(" + str(mono[1][0])
|
|
638
|
+
for n in mono[1][1:]:
|
|
639
|
+
string = string + "," + str(n)
|
|
640
|
+
string = string + ")"
|
|
641
|
+
return string.strip(" ")
|
|
642
|
+
|
|
643
|
+
|
|
644
|
+
def serre_cartan_mono_to_string(mono, latex=False, generic=False):
|
|
645
|
+
r"""
|
|
646
|
+
String representation of element of the Serre-Cartan basis.
|
|
647
|
+
|
|
648
|
+
This is used by the _repr_ and _latex_ methods.
|
|
649
|
+
|
|
650
|
+
INPUT:
|
|
651
|
+
|
|
652
|
+
- ``mono`` -- tuple of positive integers (a,b,c,...) when `generic=False`,
|
|
653
|
+
or tuple (e0, n1, e1, n2, ...) when `generic=True`, where each ei is 0 or
|
|
654
|
+
1, and each ni is positive
|
|
655
|
+
|
|
656
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
657
|
+
LaTeX string
|
|
658
|
+
|
|
659
|
+
- ``generic`` -- whether to format generically, or for the prime 2 (default)
|
|
660
|
+
|
|
661
|
+
OUTPUT: ``rep`` -- string
|
|
662
|
+
|
|
663
|
+
This returns a string like ``Sq^{a} Sq^{b} Sq^{c} ...`` when
|
|
664
|
+
`generic=False`, or a string like
|
|
665
|
+
``\beta^{e0} P^{n1} \beta^{e1} P^{n2} ...`` when `generic=True`.
|
|
666
|
+
is odd.
|
|
667
|
+
|
|
668
|
+
EXAMPLES::
|
|
669
|
+
|
|
670
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import serre_cartan_mono_to_string
|
|
671
|
+
sage: serre_cartan_mono_to_string((1,2,3,4))
|
|
672
|
+
'Sq^{1} Sq^{2} Sq^{3} Sq^{4}'
|
|
673
|
+
sage: serre_cartan_mono_to_string((1,2,3,4),latex=True)
|
|
674
|
+
'\\text{Sq}^{1} \\text{Sq}^{2} \\text{Sq}^{3} \\text{Sq}^{4}'
|
|
675
|
+
sage: serre_cartan_mono_to_string((0,5,1,1,0), generic=True)
|
|
676
|
+
'P^{5} beta P^{1}'
|
|
677
|
+
sage: serre_cartan_mono_to_string((0,5,1,1,0), generic=True, latex=True)
|
|
678
|
+
'\\mathcal{P}^{5} \\beta \\mathcal{P}^{1}'
|
|
679
|
+
|
|
680
|
+
The empty tuple represents the unit element 1::
|
|
681
|
+
|
|
682
|
+
sage: serre_cartan_mono_to_string(())
|
|
683
|
+
'1'
|
|
684
|
+
sage: serre_cartan_mono_to_string((), generic=True)
|
|
685
|
+
'1'
|
|
686
|
+
"""
|
|
687
|
+
if latex:
|
|
688
|
+
if not generic:
|
|
689
|
+
sq = "\\text{Sq}"
|
|
690
|
+
P = "\\text{Sq}"
|
|
691
|
+
else:
|
|
692
|
+
P = "\\mathcal{P}"
|
|
693
|
+
else:
|
|
694
|
+
if not generic:
|
|
695
|
+
sq = "Sq"
|
|
696
|
+
P = "Sq"
|
|
697
|
+
else:
|
|
698
|
+
P = "P"
|
|
699
|
+
if len(mono) == 0 or mono == (0,):
|
|
700
|
+
return "1"
|
|
701
|
+
else:
|
|
702
|
+
if not generic:
|
|
703
|
+
string = ""
|
|
704
|
+
for n in mono:
|
|
705
|
+
string = string + sq + "^{" + str(n) + "} "
|
|
706
|
+
else:
|
|
707
|
+
string = ""
|
|
708
|
+
index = 0
|
|
709
|
+
for n in mono:
|
|
710
|
+
from sage.misc.functional import is_even
|
|
711
|
+
if is_even(index):
|
|
712
|
+
if n == 1:
|
|
713
|
+
if latex:
|
|
714
|
+
string = string + "\\beta "
|
|
715
|
+
else:
|
|
716
|
+
string = string + "beta "
|
|
717
|
+
else:
|
|
718
|
+
string = string + P + "^{" + str(n) + "} "
|
|
719
|
+
index += 1
|
|
720
|
+
return string.strip(" ")
|
|
721
|
+
|
|
722
|
+
|
|
723
|
+
def wood_mono_to_string(mono, latex=False):
|
|
724
|
+
r"""
|
|
725
|
+
String representation of element of Wood's Y and Z bases.
|
|
726
|
+
|
|
727
|
+
This is used by the _repr_ and _latex_ methods.
|
|
728
|
+
|
|
729
|
+
INPUT:
|
|
730
|
+
|
|
731
|
+
- ``mono`` -- tuple of pairs of nonnegative integers (s,t)
|
|
732
|
+
|
|
733
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
734
|
+
LaTeX string
|
|
735
|
+
|
|
736
|
+
OUTPUT:
|
|
737
|
+
|
|
738
|
+
``string`` -- concatenation of strings of the form
|
|
739
|
+
``Sq^{2^s (2^{t+1}-1)}`` for each pair (s,t)
|
|
740
|
+
|
|
741
|
+
EXAMPLES::
|
|
742
|
+
|
|
743
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import wood_mono_to_string
|
|
744
|
+
sage: wood_mono_to_string(((1,2),(3,0)))
|
|
745
|
+
'Sq^{14} Sq^{8}'
|
|
746
|
+
sage: wood_mono_to_string(((1,2),(3,0)),latex=True)
|
|
747
|
+
'\\text{Sq}^{14} \\text{Sq}^{8}'
|
|
748
|
+
|
|
749
|
+
The empty tuple represents the unit element::
|
|
750
|
+
|
|
751
|
+
sage: wood_mono_to_string(())
|
|
752
|
+
'1'
|
|
753
|
+
"""
|
|
754
|
+
if latex:
|
|
755
|
+
sq = "\\text{Sq}"
|
|
756
|
+
else:
|
|
757
|
+
sq = "Sq"
|
|
758
|
+
if len(mono) == 0:
|
|
759
|
+
return "1"
|
|
760
|
+
else:
|
|
761
|
+
string = ""
|
|
762
|
+
for (s,t) in mono:
|
|
763
|
+
string = string + sq + "^{" + \
|
|
764
|
+
str(2**s * (2**(t+1)-1)) + "} "
|
|
765
|
+
return string.strip(" ")
|
|
766
|
+
|
|
767
|
+
|
|
768
|
+
def wall_mono_to_string(mono, latex=False):
|
|
769
|
+
"""
|
|
770
|
+
String representation of element of Wall's basis.
|
|
771
|
+
|
|
772
|
+
This is used by the _repr_ and _latex_ methods.
|
|
773
|
+
|
|
774
|
+
INPUT:
|
|
775
|
+
|
|
776
|
+
- ``mono`` -- tuple of pairs of nonnegative integers (m,k) with `m
|
|
777
|
+
>= k`
|
|
778
|
+
|
|
779
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
780
|
+
LaTeX string
|
|
781
|
+
|
|
782
|
+
OUTPUT:
|
|
783
|
+
|
|
784
|
+
``string`` -- concatenation of strings ``Q^{m}_{k}`` for each pair (m,k)
|
|
785
|
+
|
|
786
|
+
EXAMPLES::
|
|
787
|
+
|
|
788
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import wall_mono_to_string
|
|
789
|
+
sage: wall_mono_to_string(((1,2),(3,0)))
|
|
790
|
+
'Q^{1}_{2} Q^{3}_{0}'
|
|
791
|
+
sage: wall_mono_to_string(((1,2),(3,0)),latex=True)
|
|
792
|
+
'Q^{1}_{2} Q^{3}_{0}'
|
|
793
|
+
|
|
794
|
+
The empty tuple represents the unit element::
|
|
795
|
+
|
|
796
|
+
sage: wall_mono_to_string(())
|
|
797
|
+
'1'
|
|
798
|
+
"""
|
|
799
|
+
if len(mono) == 0:
|
|
800
|
+
return "1"
|
|
801
|
+
else:
|
|
802
|
+
string = ""
|
|
803
|
+
for (m,k) in mono:
|
|
804
|
+
string = string + "Q^{" + str(m) + "}_{" \
|
|
805
|
+
+ str(k) + "} "
|
|
806
|
+
return string.strip(" ")
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
def wall_long_mono_to_string(mono, latex=False):
|
|
810
|
+
r"""
|
|
811
|
+
Alternate string representation of element of Wall's basis.
|
|
812
|
+
|
|
813
|
+
This is used by the _repr_ and _latex_ methods.
|
|
814
|
+
|
|
815
|
+
INPUT:
|
|
816
|
+
|
|
817
|
+
- ``mono`` -- tuple of pairs of nonnegative integers (m,k) with `m
|
|
818
|
+
>= k`
|
|
819
|
+
|
|
820
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
821
|
+
LaTeX string
|
|
822
|
+
|
|
823
|
+
OUTPUT:
|
|
824
|
+
|
|
825
|
+
``string`` -- concatenation of strings of the form ``Sq^(2^m)``
|
|
826
|
+
|
|
827
|
+
EXAMPLES::
|
|
828
|
+
|
|
829
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import wall_long_mono_to_string
|
|
830
|
+
sage: wall_long_mono_to_string(((1,2),(3,0)))
|
|
831
|
+
'Sq^{1} Sq^{2} Sq^{4} Sq^{8}'
|
|
832
|
+
sage: wall_long_mono_to_string(((1,2),(3,0)),latex=True)
|
|
833
|
+
'\\text{Sq}^{1} \\text{Sq}^{2} \\text{Sq}^{4} \\text{Sq}^{8}'
|
|
834
|
+
|
|
835
|
+
The empty tuple represents the unit element::
|
|
836
|
+
|
|
837
|
+
sage: wall_long_mono_to_string(())
|
|
838
|
+
'1'
|
|
839
|
+
"""
|
|
840
|
+
if latex:
|
|
841
|
+
sq = "\\text{Sq}"
|
|
842
|
+
else:
|
|
843
|
+
sq = "Sq"
|
|
844
|
+
if len(mono) == 0:
|
|
845
|
+
return "1"
|
|
846
|
+
else:
|
|
847
|
+
string = ""
|
|
848
|
+
for (m,k) in mono:
|
|
849
|
+
for i in range(k,m+1):
|
|
850
|
+
string = string + sq + "^{" + str(2**i) + "} "
|
|
851
|
+
return string.strip(" ")
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
def arnonA_mono_to_string(mono, latex=False, p=2):
|
|
855
|
+
"""
|
|
856
|
+
String representation of element of Arnon's A basis.
|
|
857
|
+
|
|
858
|
+
This is used by the _repr_ and _latex_ methods.
|
|
859
|
+
|
|
860
|
+
INPUT:
|
|
861
|
+
|
|
862
|
+
- ``mono`` -- tuple of pairs of nonnegative integers
|
|
863
|
+
(m,k) with `m >= k`
|
|
864
|
+
|
|
865
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
866
|
+
LaTeX string
|
|
867
|
+
|
|
868
|
+
OUTPUT: concatenation of strings of the form ``X^{m}_{k}`` for each pair
|
|
869
|
+
(m,k)
|
|
870
|
+
|
|
871
|
+
EXAMPLES::
|
|
872
|
+
|
|
873
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import arnonA_mono_to_string
|
|
874
|
+
sage: arnonA_mono_to_string(((1,2),(3,0)))
|
|
875
|
+
'X^{1}_{2} X^{3}_{0}'
|
|
876
|
+
sage: arnonA_mono_to_string(((1,2),(3,0)),latex=True)
|
|
877
|
+
'X^{1}_{2} X^{3}_{0}'
|
|
878
|
+
|
|
879
|
+
The empty tuple represents the unit element::
|
|
880
|
+
|
|
881
|
+
sage: arnonA_mono_to_string(())
|
|
882
|
+
'1'
|
|
883
|
+
"""
|
|
884
|
+
if len(mono) == 0:
|
|
885
|
+
return "1"
|
|
886
|
+
else:
|
|
887
|
+
string = ""
|
|
888
|
+
for (m,k) in mono:
|
|
889
|
+
string = string + "X^{" + str(m) + "}_{" \
|
|
890
|
+
+ str(k) + "} "
|
|
891
|
+
return string.strip(" ")
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
def arnonA_long_mono_to_string(mono, latex=False, p=2):
|
|
895
|
+
r"""
|
|
896
|
+
Alternate string representation of element of Arnon's A basis.
|
|
897
|
+
|
|
898
|
+
This is used by the _repr_ and _latex_ methods.
|
|
899
|
+
|
|
900
|
+
INPUT:
|
|
901
|
+
|
|
902
|
+
- ``mono`` -- tuple of pairs of nonnegative integers (m,k) with `m
|
|
903
|
+
>= k`
|
|
904
|
+
|
|
905
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
906
|
+
LaTeX string
|
|
907
|
+
|
|
908
|
+
OUTPUT:
|
|
909
|
+
|
|
910
|
+
``string`` -- concatenation of strings of the form ``Sq(2^m)``
|
|
911
|
+
|
|
912
|
+
EXAMPLES::
|
|
913
|
+
|
|
914
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import arnonA_long_mono_to_string
|
|
915
|
+
sage: arnonA_long_mono_to_string(((1,2),(3,0)))
|
|
916
|
+
'Sq^{8} Sq^{4} Sq^{2} Sq^{1}'
|
|
917
|
+
sage: arnonA_long_mono_to_string(((1,2),(3,0)),latex=True)
|
|
918
|
+
'\\text{Sq}^{8} \\text{Sq}^{4} \\text{Sq}^{2} \\text{Sq}^{1}'
|
|
919
|
+
|
|
920
|
+
The empty tuple represents the unit element::
|
|
921
|
+
|
|
922
|
+
sage: arnonA_long_mono_to_string(())
|
|
923
|
+
'1'
|
|
924
|
+
"""
|
|
925
|
+
if latex:
|
|
926
|
+
sq = "\\text{Sq}"
|
|
927
|
+
else:
|
|
928
|
+
sq = "Sq"
|
|
929
|
+
if len(mono) == 0:
|
|
930
|
+
return "1"
|
|
931
|
+
else:
|
|
932
|
+
string = ""
|
|
933
|
+
for (m,k) in mono:
|
|
934
|
+
for i in range(m,k-1,-1):
|
|
935
|
+
string = string + sq + "^{" + str(2**i) + "} "
|
|
936
|
+
return string.strip(" ")
|
|
937
|
+
|
|
938
|
+
|
|
939
|
+
def pst_mono_to_string(mono, latex=False, generic=False):
|
|
940
|
+
r"""
|
|
941
|
+
String representation of element of a `P^s_t`-basis.
|
|
942
|
+
|
|
943
|
+
This is used by the _repr_ and _latex_ methods.
|
|
944
|
+
|
|
945
|
+
INPUT:
|
|
946
|
+
|
|
947
|
+
- ``mono`` -- tuple of pairs of integers (s,t) with `s >= 0`, `t >
|
|
948
|
+
0`
|
|
949
|
+
|
|
950
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
951
|
+
LaTeX string
|
|
952
|
+
|
|
953
|
+
- ``generic`` -- whether to format generically, or for the prime 2 (default)
|
|
954
|
+
|
|
955
|
+
OUTPUT:
|
|
956
|
+
|
|
957
|
+
``string`` -- concatenation of strings of the form ``P^{s}_{t}``
|
|
958
|
+
for each pair (s,t)
|
|
959
|
+
|
|
960
|
+
EXAMPLES::
|
|
961
|
+
|
|
962
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import pst_mono_to_string
|
|
963
|
+
sage: pst_mono_to_string(((1,2),(0,3)), generic=False)
|
|
964
|
+
'P^{1}_{2} P^{0}_{3}'
|
|
965
|
+
sage: pst_mono_to_string(((1,2),(0,3)),latex=True, generic=False)
|
|
966
|
+
'P^{1}_{2} P^{0}_{3}'
|
|
967
|
+
sage: pst_mono_to_string(((1,4), (((1,2), 1),((0,3), 2))), generic=True)
|
|
968
|
+
'Q_{1} Q_{4} P^{1}_{2} (P^{0}_{3})^2'
|
|
969
|
+
sage: pst_mono_to_string(((1,4), (((1,2), 1),((0,3), 2))), latex=True, generic=True)
|
|
970
|
+
'Q_{1} Q_{4} P^{1}_{2} (P^{0}_{3})^{2}'
|
|
971
|
+
|
|
972
|
+
The empty tuple represents the unit element::
|
|
973
|
+
|
|
974
|
+
sage: pst_mono_to_string(())
|
|
975
|
+
'1'
|
|
976
|
+
"""
|
|
977
|
+
if len(mono) == 0:
|
|
978
|
+
return "1"
|
|
979
|
+
else:
|
|
980
|
+
string = ""
|
|
981
|
+
if not generic:
|
|
982
|
+
for (s,t) in mono:
|
|
983
|
+
string = string + "P^{" + str(s) + "}_{" \
|
|
984
|
+
+ str(t) + "} "
|
|
985
|
+
else:
|
|
986
|
+
for e in mono[0]:
|
|
987
|
+
string = string + "Q_{" + str(e) + "} "
|
|
988
|
+
for ((s,t), n) in mono[1]:
|
|
989
|
+
if n == 1:
|
|
990
|
+
string = string + "P^{" + str(s) + "}_{" \
|
|
991
|
+
+ str(t) + "} "
|
|
992
|
+
else:
|
|
993
|
+
if latex:
|
|
994
|
+
pow = "{%s}" % n
|
|
995
|
+
else:
|
|
996
|
+
pow = str(n)
|
|
997
|
+
string = string + "(P^{" + str(s) + "}_{" \
|
|
998
|
+
+ str(t) + "})^" + pow + " "
|
|
999
|
+
return string.strip(" ")
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
def comm_mono_to_string(mono, latex=False, generic=False):
|
|
1003
|
+
r"""
|
|
1004
|
+
String representation of element of a commutator basis.
|
|
1005
|
+
|
|
1006
|
+
This is used by the _repr_ and _latex_ methods.
|
|
1007
|
+
|
|
1008
|
+
INPUT:
|
|
1009
|
+
|
|
1010
|
+
- ``mono`` -- tuple of pairs of integers (s,t) with `s >= 0`, `t >
|
|
1011
|
+
0`
|
|
1012
|
+
|
|
1013
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
1014
|
+
LaTeX string
|
|
1015
|
+
|
|
1016
|
+
- ``generic`` -- whether to format generically, or for the prime 2 (default)
|
|
1017
|
+
|
|
1018
|
+
OUTPUT:
|
|
1019
|
+
|
|
1020
|
+
``string`` -- concatenation of strings of the form ``c_{s,t}``
|
|
1021
|
+
for each pair (s,t)
|
|
1022
|
+
|
|
1023
|
+
EXAMPLES::
|
|
1024
|
+
|
|
1025
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import comm_mono_to_string
|
|
1026
|
+
sage: comm_mono_to_string(((1,2),(0,3)), generic=False)
|
|
1027
|
+
'c_{1,2} c_{0,3}'
|
|
1028
|
+
sage: comm_mono_to_string(((1,2),(0,3)), latex=True)
|
|
1029
|
+
'c_{1,2} c_{0,3}'
|
|
1030
|
+
sage: comm_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), generic=True)
|
|
1031
|
+
'Q_{1} Q_{4} c_{1,2} c_{0,3}^2'
|
|
1032
|
+
sage: comm_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), latex=True, generic=True)
|
|
1033
|
+
'Q_{1} Q_{4} c_{1,2} c_{0,3}^{2}'
|
|
1034
|
+
|
|
1035
|
+
The empty tuple represents the unit element::
|
|
1036
|
+
|
|
1037
|
+
sage: comm_mono_to_string(())
|
|
1038
|
+
'1'
|
|
1039
|
+
"""
|
|
1040
|
+
if len(mono) == 0:
|
|
1041
|
+
return "1"
|
|
1042
|
+
else:
|
|
1043
|
+
string = ""
|
|
1044
|
+
if not generic:
|
|
1045
|
+
for (s,t) in mono:
|
|
1046
|
+
string = string + "c_{" + str(s) + "," \
|
|
1047
|
+
+ str(t) + "} "
|
|
1048
|
+
else:
|
|
1049
|
+
for e in mono[0]:
|
|
1050
|
+
string = string + "Q_{" + str(e) + "} "
|
|
1051
|
+
for ((s,t), n) in mono[1]:
|
|
1052
|
+
string = string + "c_{" + str(s) + "," \
|
|
1053
|
+
+ str(t) + "}"
|
|
1054
|
+
if n > 1:
|
|
1055
|
+
if latex:
|
|
1056
|
+
pow = "^{%s}" % n
|
|
1057
|
+
else:
|
|
1058
|
+
pow = "^%s" % n
|
|
1059
|
+
string = string + pow
|
|
1060
|
+
string = string + " "
|
|
1061
|
+
return string.strip(" ")
|
|
1062
|
+
|
|
1063
|
+
|
|
1064
|
+
def comm_long_mono_to_string(mono, p, latex=False, generic=False):
|
|
1065
|
+
r"""
|
|
1066
|
+
Alternate string representation of element of a commutator basis.
|
|
1067
|
+
|
|
1068
|
+
Okay in low dimensions, but gets unwieldy as the dimension
|
|
1069
|
+
increases.
|
|
1070
|
+
|
|
1071
|
+
INPUT:
|
|
1072
|
+
|
|
1073
|
+
- ``mono`` -- tuple of pairs of integers (s,t) with `s >= 0`, `t >
|
|
1074
|
+
0`
|
|
1075
|
+
|
|
1076
|
+
- ``latex`` -- boolean (default: ``False``); if ``True``, output
|
|
1077
|
+
LaTeX string
|
|
1078
|
+
|
|
1079
|
+
- ``generic`` -- whether to format generically, or for the prime 2 (default)
|
|
1080
|
+
|
|
1081
|
+
OUTPUT:
|
|
1082
|
+
|
|
1083
|
+
``string`` -- concatenation of strings of the form ``s_{2^s... 2^(s+t-1)}``
|
|
1084
|
+
for each pair (s,t)
|
|
1085
|
+
|
|
1086
|
+
EXAMPLES::
|
|
1087
|
+
|
|
1088
|
+
sage: from sage.algebras.steenrod.steenrod_algebra_misc import comm_long_mono_to_string
|
|
1089
|
+
sage: comm_long_mono_to_string(((1,2),(0,3)), 2)
|
|
1090
|
+
's_{24} s_{124}'
|
|
1091
|
+
sage: comm_long_mono_to_string(((1,2),(0,3)), 2, latex=True)
|
|
1092
|
+
's_{24} s_{124}'
|
|
1093
|
+
sage: comm_long_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), 5, generic=True)
|
|
1094
|
+
'Q_{1} Q_{4} s_{5,25} s_{1,5,25}^2'
|
|
1095
|
+
sage: comm_long_mono_to_string(((1, 4), (((1,2), 1),((0,3), 2))), 3, latex=True, generic=True)
|
|
1096
|
+
'Q_{1} Q_{4} s_{3,9} s_{1,3,9}^{2}'
|
|
1097
|
+
|
|
1098
|
+
The empty tuple represents the unit element::
|
|
1099
|
+
|
|
1100
|
+
sage: comm_long_mono_to_string((), p=2)
|
|
1101
|
+
'1'
|
|
1102
|
+
"""
|
|
1103
|
+
if len(mono) == 0:
|
|
1104
|
+
return "1"
|
|
1105
|
+
else:
|
|
1106
|
+
string = ""
|
|
1107
|
+
if not generic:
|
|
1108
|
+
for (s,t) in mono:
|
|
1109
|
+
if s + t > 4:
|
|
1110
|
+
comma = ","
|
|
1111
|
+
else:
|
|
1112
|
+
comma = ""
|
|
1113
|
+
string = string + "s_{"
|
|
1114
|
+
for i in range(t):
|
|
1115
|
+
string = string + str(2**(s+i)) + comma
|
|
1116
|
+
string = string.strip(",") + "} "
|
|
1117
|
+
else:
|
|
1118
|
+
for e in mono[0]:
|
|
1119
|
+
string = string + "Q_{" + str(e) + "} "
|
|
1120
|
+
for ((s,t), n) in mono[1]:
|
|
1121
|
+
string = string + "s_{"
|
|
1122
|
+
for i in range(t):
|
|
1123
|
+
string = string + str(p**(s+i)) + ","
|
|
1124
|
+
string = string.strip(",") + "}"
|
|
1125
|
+
if n > 1:
|
|
1126
|
+
if latex:
|
|
1127
|
+
pow = "^{%s}" % n
|
|
1128
|
+
else:
|
|
1129
|
+
pow = "^%s" % n
|
|
1130
|
+
string = string + pow
|
|
1131
|
+
string = string + " "
|
|
1132
|
+
return string.strip(" ")
|
|
1133
|
+
|
|
1134
|
+
# miscellany:
|
|
1135
|
+
|
|
1136
|
+
|
|
1137
|
+
def convert_perm(m):
|
|
1138
|
+
"""
|
|
1139
|
+
Convert tuple m of nonnegative integers to a permutation in
|
|
1140
|
+
one-line form.
|
|
1141
|
+
|
|
1142
|
+
INPUT:
|
|
1143
|
+
|
|
1144
|
+
- ``m`` -- tuple of nonnegative integers with no repetitions
|
|
1145
|
+
|
|
1146
|
+
OUTPUT:
|
|
1147
|
+
|
|
1148
|
+
``list`` -- conversion of ``m`` to a permutation of the set
|
|
1149
|
+
1,2,...,len(m)
|
|
1150
|
+
|
|
1151
|
+
If ``m=(3,7,4)``, then one can view ``m`` as representing the
|
|
1152
|
+
permutation of the set `(3,4,7)` sending 3 to 3, 4 to 7, and 7 to
|
|
1153
|
+
4. This function converts ``m`` to the list ``[1,3,2]``, which
|
|
1154
|
+
represents essentially the same permutation, but of the set
|
|
1155
|
+
`(1,2,3)`. This list can then be passed to :func:`Permutation
|
|
1156
|
+
<sage.combinat.permutation.Permutation>`, and its signature can be
|
|
1157
|
+
computed.
|
|
1158
|
+
|
|
1159
|
+
EXAMPLES::
|
|
1160
|
+
|
|
1161
|
+
sage: sage.algebras.steenrod.steenrod_algebra_misc.convert_perm((3,7,4))
|
|
1162
|
+
[1, 3, 2]
|
|
1163
|
+
sage: sage.algebras.steenrod.steenrod_algebra_misc.convert_perm((5,0,6,3))
|
|
1164
|
+
[3, 1, 4, 2]
|
|
1165
|
+
"""
|
|
1166
|
+
m2 = sorted(m)
|
|
1167
|
+
return [list(m2).index(x)+1 for x in m]
|