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,709 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.numerical.mip
|
|
3
|
+
r"""
|
|
4
|
+
Delsarte (or linear programming) bounds
|
|
5
|
+
|
|
6
|
+
This module provides LP upper bounds for the parameters of codes, introduced in
|
|
7
|
+
by P. Delsarte in [De1973]_.
|
|
8
|
+
|
|
9
|
+
The exact LP solver PPL is used by default, ensuring that no
|
|
10
|
+
rounding/overflow problems occur.
|
|
11
|
+
|
|
12
|
+
AUTHORS:
|
|
13
|
+
|
|
14
|
+
- Dmitrii V. (Dima) Pasechnik (2012-10): initial implementation
|
|
15
|
+
|
|
16
|
+
- Dmitrii V. (Dima) Pasechnik (2015, 2021): minor fixes
|
|
17
|
+
|
|
18
|
+
- Charalampos Kokkalis (2021): Eberlein polynomials, general Q matrix codes
|
|
19
|
+
"""
|
|
20
|
+
# ****************************************************************************
|
|
21
|
+
# Copyright (C) 2012, 2021 Dima Pasechnik <dimpase@gmail.com>
|
|
22
|
+
# Copyright (C) 2021 Charalampos Kokkalis
|
|
23
|
+
#
|
|
24
|
+
# This program is free software: you can redistribute it and/or modify
|
|
25
|
+
# it under the terms of the GNU General Public License as published by
|
|
26
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
27
|
+
# (at your option) any later version.
|
|
28
|
+
# https://www.gnu.org/licenses/
|
|
29
|
+
# ****************************************************************************
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def krawtchouk(n, q, l, x, check=True):
|
|
33
|
+
r"""
|
|
34
|
+
Compute `K^{n,q}_l(x)`, the Krawtchouk (a.k.a. Kravchuk) polynomial.
|
|
35
|
+
|
|
36
|
+
See :wikipedia:`Kravchuk_polynomials`.
|
|
37
|
+
|
|
38
|
+
It is defined by the generating function
|
|
39
|
+
|
|
40
|
+
.. MATH::
|
|
41
|
+
|
|
42
|
+
(1+(q-1)z)^{n-x}(1-z)^x=\sum_{l} K^{n,q}_l(x)z^l
|
|
43
|
+
|
|
44
|
+
and is equal to
|
|
45
|
+
|
|
46
|
+
.. MATH::
|
|
47
|
+
|
|
48
|
+
K^{n,q}_l(x)=\sum_{j=0}^l (-1)^j (q-1)^{(l-j)} \binom{x}{j} \binom{n-x}{l-j}.
|
|
49
|
+
|
|
50
|
+
INPUT:
|
|
51
|
+
|
|
52
|
+
- ``n``, ``q``, ``x`` -- arbitrary numbers
|
|
53
|
+
|
|
54
|
+
- ``l`` -- nonnegative integer
|
|
55
|
+
|
|
56
|
+
- ``check`` -- check the input for correctness. ``True`` by
|
|
57
|
+
default. Otherwise, pass it as it is. Use ``check=False`` at
|
|
58
|
+
your own risk.
|
|
59
|
+
|
|
60
|
+
.. SEEALSO::
|
|
61
|
+
|
|
62
|
+
:class:`Symbolic Krawtchouk polynomials
|
|
63
|
+
<sage.functions.orthogonal_polys.Func_krawtchouk>` `\tilde{K}_l(x; n, p)`
|
|
64
|
+
which are related by
|
|
65
|
+
|
|
66
|
+
.. MATH::
|
|
67
|
+
|
|
68
|
+
(-q)^l K^{n,q^{-1}}_l(x) = \tilde{K}_l(x; n, 1-q).
|
|
69
|
+
|
|
70
|
+
EXAMPLES::
|
|
71
|
+
|
|
72
|
+
sage: codes.bounds.krawtchouk(24,2,5,4)
|
|
73
|
+
2224
|
|
74
|
+
sage: codes.bounds.krawtchouk(12300,4,5,6)
|
|
75
|
+
567785569973042442072
|
|
76
|
+
|
|
77
|
+
TESTS:
|
|
78
|
+
|
|
79
|
+
Check that the bug reported on :issue:`19561` is fixed::
|
|
80
|
+
|
|
81
|
+
sage: codes.bounds.krawtchouk(3,2,3,3)
|
|
82
|
+
-1
|
|
83
|
+
sage: codes.bounds.krawtchouk(int(3),int(2),int(3),int(3))
|
|
84
|
+
-1
|
|
85
|
+
sage: codes.bounds.krawtchouk(int(3),int(2),int(3),int(3),check=False)
|
|
86
|
+
-1.0
|
|
87
|
+
sage: codes.bounds.krawtchouk(24,2,5,4)
|
|
88
|
+
2224
|
|
89
|
+
|
|
90
|
+
Other unusual inputs::
|
|
91
|
+
|
|
92
|
+
sage: codes.bounds.krawtchouk(sqrt(5),1-I*sqrt(3),3,55.3).n() # needs sage.symbolic
|
|
93
|
+
211295.892797... + 1186.42763...*I
|
|
94
|
+
sage: codes.bounds.krawtchouk(-5/2,7*I,3,-1/10) # needs sage.symbolic
|
|
95
|
+
480053/250*I - 357231/400
|
|
96
|
+
sage: codes.bounds.krawtchouk(1,1,-1,1)
|
|
97
|
+
Traceback (most recent call last):
|
|
98
|
+
...
|
|
99
|
+
ValueError: l must be a nonnegative integer
|
|
100
|
+
sage: codes.bounds.krawtchouk(1,1,3/2,1)
|
|
101
|
+
Traceback (most recent call last):
|
|
102
|
+
...
|
|
103
|
+
TypeError: no conversion of this rational to integer
|
|
104
|
+
"""
|
|
105
|
+
from sage.arith.misc import binomial
|
|
106
|
+
from sage.arith.srange import srange
|
|
107
|
+
# Use the expression in equation (55) of MacWilliams & Sloane, pg 151
|
|
108
|
+
# We write jth term = some_factor * (j-1)th term
|
|
109
|
+
if check:
|
|
110
|
+
from sage.rings.integer_ring import ZZ
|
|
111
|
+
l0 = ZZ(l)
|
|
112
|
+
if l0 != l or l0 < 0:
|
|
113
|
+
raise ValueError('l must be a nonnegative integer')
|
|
114
|
+
l = l0
|
|
115
|
+
kraw = jth_term = (q-1)**l * binomial(n, l) # j=0
|
|
116
|
+
for j in srange(1, l+1):
|
|
117
|
+
jth_term *= -q*(l-j+1)*(x-j+1)/((q-1)*j*(n-j+1))
|
|
118
|
+
kraw += jth_term
|
|
119
|
+
return kraw
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def eberlein(n, w, k, u, check=True):
|
|
123
|
+
r"""
|
|
124
|
+
Compute `E^{w,n}_k(x)`, the Eberlein polynomial.
|
|
125
|
+
|
|
126
|
+
See :wikipedia:`Eberlein_polynomials`.
|
|
127
|
+
|
|
128
|
+
It is defined as:
|
|
129
|
+
|
|
130
|
+
.. MATH::
|
|
131
|
+
|
|
132
|
+
E^{w,n}_k(u)=\sum_{j=0}^k (-1)^j \binom{u}{j} \binom{w-u}{k-j}
|
|
133
|
+
\binom{n-w-u}{k-j},
|
|
134
|
+
|
|
135
|
+
INPUT:
|
|
136
|
+
|
|
137
|
+
- ``w``, ``k``, ``x`` -- arbitrary numbers
|
|
138
|
+
|
|
139
|
+
- ``n`` -- nonnegative integer
|
|
140
|
+
|
|
141
|
+
- ``check`` -- check the input for correctness. ``True`` by
|
|
142
|
+
default. Otherwise, pass it as it is. Use ``check=False`` at
|
|
143
|
+
your own risk.
|
|
144
|
+
|
|
145
|
+
EXAMPLES::
|
|
146
|
+
|
|
147
|
+
sage: codes.bounds.eberlein(24,10,2,6)
|
|
148
|
+
-9
|
|
149
|
+
|
|
150
|
+
TESTS:
|
|
151
|
+
|
|
152
|
+
check normal inputs (various formats for arguments) ::
|
|
153
|
+
|
|
154
|
+
sage: codes.bounds.eberlein(24,10,2,6)
|
|
155
|
+
-9
|
|
156
|
+
sage: codes.bounds.eberlein(int(24),int(10),int(2),int(6))
|
|
157
|
+
-9
|
|
158
|
+
sage: codes.bounds.eberlein(int(24),int(10),int(2),int(6),check=False)
|
|
159
|
+
-9
|
|
160
|
+
|
|
161
|
+
unusual inputs ::
|
|
162
|
+
|
|
163
|
+
sage: codes.bounds.eberlein(-1,1,1,1)
|
|
164
|
+
Traceback (most recent call last):
|
|
165
|
+
...
|
|
166
|
+
ValueError: l must be a nonnegative integer
|
|
167
|
+
sage: codes.bounds.eberlein(1,1,3/2,1)
|
|
168
|
+
Traceback (most recent call last):
|
|
169
|
+
...
|
|
170
|
+
TypeError: either m or x-m must be an integer
|
|
171
|
+
"""
|
|
172
|
+
from sage.arith.misc import binomial
|
|
173
|
+
from sage.arith.srange import srange
|
|
174
|
+
|
|
175
|
+
if 2 * w > n:
|
|
176
|
+
return eberlein(n, n - w, k, u)
|
|
177
|
+
|
|
178
|
+
if check:
|
|
179
|
+
from sage.rings.integer_ring import ZZ
|
|
180
|
+
n0 = ZZ(n)
|
|
181
|
+
if n0 != n or n0 < 0:
|
|
182
|
+
raise ValueError('l must be a nonnegative integer')
|
|
183
|
+
n = n0
|
|
184
|
+
|
|
185
|
+
return sum([(-1)**j*binomial(u, j)*binomial(w-u, k-j)*binomial(n-w-u, k-j)
|
|
186
|
+
for j in srange(k + 1)])
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _delsarte_LP_building(n, d, d_star, q, isinteger, solver, maxc=0):
|
|
190
|
+
r"""
|
|
191
|
+
LP builder - common for the two functions; not exported.
|
|
192
|
+
|
|
193
|
+
EXAMPLES::
|
|
194
|
+
|
|
195
|
+
sage: from sage.coding.delsarte_bounds import _delsarte_LP_building
|
|
196
|
+
sage: _,p=_delsarte_LP_building(7, 3, 0, 2, False, "PPL")
|
|
197
|
+
sage: p.show()
|
|
198
|
+
Maximization:
|
|
199
|
+
x_0 + x_1 + x_2 + x_3 + x_4 + x_5 + x_6 + x_7
|
|
200
|
+
Constraints:
|
|
201
|
+
constraint_0: 1 <= x_0 <= 1
|
|
202
|
+
constraint_1: 0 <= x_1 <= 0
|
|
203
|
+
constraint_2: 0 <= x_2 <= 0
|
|
204
|
+
constraint_3: -7 x_0 - 5 x_1 - 3 x_2 - x_3 + x_4 + 3 x_5 + 5 x_6 + 7 x_7 <= 0
|
|
205
|
+
...
|
|
206
|
+
constraint_9: - x_0 + x_1 - x_2 + x_3 - x_4 + x_5 - x_6 + x_7 <= 0
|
|
207
|
+
Variables:
|
|
208
|
+
x_0 is a continuous variable (min=0, max=+oo)
|
|
209
|
+
...
|
|
210
|
+
x_7 is a continuous variable (min=0, max=+oo)
|
|
211
|
+
"""
|
|
212
|
+
from sage.numerical.mip import MixedIntegerLinearProgram
|
|
213
|
+
|
|
214
|
+
p = MixedIntegerLinearProgram(maximization=True, solver=solver)
|
|
215
|
+
A = p.new_variable(integer=isinteger, nonnegative=True)
|
|
216
|
+
p.set_objective(p.sum([A[r] for r in range(n + 1)]))
|
|
217
|
+
p.add_constraint(A[0] == 1)
|
|
218
|
+
for i in range(1, d):
|
|
219
|
+
p.add_constraint(A[i] == 0)
|
|
220
|
+
for j in range(1, n + 1):
|
|
221
|
+
rhs = p.sum([krawtchouk(n, q, j, r, check=False) * A[r]
|
|
222
|
+
for r in range(n + 1)])
|
|
223
|
+
if j >= d_star:
|
|
224
|
+
p.add_constraint(0 <= rhs)
|
|
225
|
+
else: # rhs is proportional to j-th weight of the dual code
|
|
226
|
+
p.add_constraint(0 == rhs)
|
|
227
|
+
|
|
228
|
+
if maxc > 0:
|
|
229
|
+
p.add_constraint(p.sum([A[r] for r in range(n + 1)]), max=maxc)
|
|
230
|
+
return A, p
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def _delsarte_cwc_LP_building(n, d, w, solver, isinteger):
|
|
234
|
+
r"""
|
|
235
|
+
LP builder for Delsarte's LP for constant weight codes.
|
|
236
|
+
|
|
237
|
+
It is used in :func:`delsarte_bound_constant_weight_code`; not exported.
|
|
238
|
+
|
|
239
|
+
INPUT:
|
|
240
|
+
|
|
241
|
+
- ``n`` -- the code length
|
|
242
|
+
|
|
243
|
+
- ``w`` -- the weight of the code
|
|
244
|
+
|
|
245
|
+
- ``d`` -- the (lower bound on) minimal distance of the code
|
|
246
|
+
|
|
247
|
+
- ``solver`` -- the LP/ILP solver to be used. Defaults to
|
|
248
|
+
``PPL``. It is arbitrary precision, thus there will be no
|
|
249
|
+
rounding errors. With other solvers (see
|
|
250
|
+
:class:`MixedIntegerLinearProgram` for the list), you are on
|
|
251
|
+
your own!
|
|
252
|
+
|
|
253
|
+
- ``isinteger`` -- if ``True``, uses an integer programming solver
|
|
254
|
+
(ILP), rather that an LP solver. Can be very slow if set to
|
|
255
|
+
``True``.
|
|
256
|
+
|
|
257
|
+
EXAMPLES::
|
|
258
|
+
|
|
259
|
+
sage: from sage.coding.delsarte_bounds import _delsarte_cwc_LP_building
|
|
260
|
+
sage: _,p=_delsarte_cwc_LP_building(17, 4, 3, "PPL", False)
|
|
261
|
+
sage: p.show()
|
|
262
|
+
Maximization:
|
|
263
|
+
x_0 + x_1 + 1
|
|
264
|
+
Constraints:
|
|
265
|
+
constraint_0: -1 <= 4/21 x_0 - 3/14 x_1
|
|
266
|
+
constraint_1: -1 <= -23/273 x_0 + 3/91 x_1
|
|
267
|
+
constraint_2: -1 <= 1/91 x_0 - 1/364 x_1
|
|
268
|
+
Variables:
|
|
269
|
+
x_0 is a continuous variable (min=0, max=+oo)
|
|
270
|
+
x_1 is a continuous variable (min=0, max=+oo)
|
|
271
|
+
"""
|
|
272
|
+
from sage.arith.misc import binomial
|
|
273
|
+
from sage.numerical.mip import MixedIntegerLinearProgram
|
|
274
|
+
|
|
275
|
+
p = MixedIntegerLinearProgram(maximization=True, solver=solver)
|
|
276
|
+
A = p.new_variable(integer=isinteger, nonnegative=True)
|
|
277
|
+
p.set_objective(p.sum([A[2*r] for r in range(d//2, w+1)]) + 1)
|
|
278
|
+
|
|
279
|
+
def _q(k, i):
|
|
280
|
+
mu_i = 1
|
|
281
|
+
v_i = binomial(w, i)*binomial(n-w, i)
|
|
282
|
+
return mu_i*eberlein(n, w, i, k)/v_i
|
|
283
|
+
|
|
284
|
+
for k in range(1, w+1):
|
|
285
|
+
p.add_constraint(p.sum([A[2*i]*_q(k, i) for i in range(d//2, w+1)]),
|
|
286
|
+
min=-1)
|
|
287
|
+
|
|
288
|
+
return A, p
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
def delsarte_bound_constant_weight_code(n, d, w, return_data=False,
|
|
292
|
+
solver='PPL', isinteger=False):
|
|
293
|
+
r"""
|
|
294
|
+
Find the Delsarte bound on a constant weight code.
|
|
295
|
+
|
|
296
|
+
Find the Delsarte bound on a constant weight code of weight ``w``, length
|
|
297
|
+
``n``, lower bound on minimal distance ``d``.
|
|
298
|
+
|
|
299
|
+
INPUT:
|
|
300
|
+
|
|
301
|
+
- ``n`` -- the code length
|
|
302
|
+
|
|
303
|
+
- ``d`` -- the (lower bound on) minimal distance of the code
|
|
304
|
+
|
|
305
|
+
- ``w`` -- the weight of the code
|
|
306
|
+
|
|
307
|
+
- ``return_data`` -- if ``True``, return a triple
|
|
308
|
+
``(W,LP,bound)``, where ``W`` is a weights vector, and ``LP``
|
|
309
|
+
the Delsarte upper bound LP; both of them are Sage LP data.
|
|
310
|
+
``W`` need not be a weight distribution of a code.
|
|
311
|
+
|
|
312
|
+
- ``solver`` -- the LP/ILP solver to be used. Defaults to
|
|
313
|
+
``PPL``. It is arbitrary precision, thus there will be no
|
|
314
|
+
rounding errors. With other solvers (see
|
|
315
|
+
:class:`MixedIntegerLinearProgram` for the list), you are on
|
|
316
|
+
your own!
|
|
317
|
+
|
|
318
|
+
- ``isinteger`` -- if ``True``, uses an integer programming solver
|
|
319
|
+
(ILP), rather that an LP solver. Can be very slow if set to
|
|
320
|
+
``True``.
|
|
321
|
+
|
|
322
|
+
EXAMPLES:
|
|
323
|
+
|
|
324
|
+
The bound on the size of codes of length 17, weight 3, and minimal distance 4::
|
|
325
|
+
|
|
326
|
+
sage: codes.bounds.delsarte_bound_constant_weight_code(17, 4, 3)
|
|
327
|
+
45
|
|
328
|
+
sage: a, p, val = codes.bounds.delsarte_bound_constant_weight_code(17, 4, 3, return_data=True)
|
|
329
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
330
|
+
[21, 70/3]
|
|
331
|
+
|
|
332
|
+
The stricter bound (using ILP) on codes of length 17, weight 3, and minimal
|
|
333
|
+
distance 4::
|
|
334
|
+
|
|
335
|
+
sage: codes.bounds.delsarte_bound_constant_weight_code(17, 4, 3, isinteger=True)
|
|
336
|
+
43
|
|
337
|
+
"""
|
|
338
|
+
from sage.numerical.mip import MIPSolverException
|
|
339
|
+
|
|
340
|
+
if d < 4:
|
|
341
|
+
raise ValueError("Violated constraint d>=4 for "
|
|
342
|
+
"Binary Constant Weight Codes")
|
|
343
|
+
|
|
344
|
+
if d >= 2*w or 2*w > n:
|
|
345
|
+
raise ValueError("Violated constraint d<2w<=n for "
|
|
346
|
+
"Binary Constant Weight Codes")
|
|
347
|
+
|
|
348
|
+
# minimum distance is even => if there is an odd lower bound on d we can
|
|
349
|
+
# increase it by 1
|
|
350
|
+
if d % 2:
|
|
351
|
+
d += 1
|
|
352
|
+
|
|
353
|
+
A, p = _delsarte_cwc_LP_building(n, d, w, solver, isinteger)
|
|
354
|
+
try:
|
|
355
|
+
bd = p.solve()
|
|
356
|
+
except MIPSolverException as exc:
|
|
357
|
+
print(f"Solver exception: {exc}")
|
|
358
|
+
return (A, p, False) if return_data else False
|
|
359
|
+
|
|
360
|
+
return (A, p, bd) if return_data else int(bd)
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def delsarte_bound_hamming_space(n, d, q, return_data=False,
|
|
364
|
+
solver='PPL', isinteger=False):
|
|
365
|
+
r"""
|
|
366
|
+
Find the Delsarte bound on codes in ``H_q^n`` of minimal distance ``d``.
|
|
367
|
+
|
|
368
|
+
Find the Delsarte bound [De1973]_ on the size of codes in
|
|
369
|
+
the Hamming space ``H_q^n`` of minimal distance ``d``.
|
|
370
|
+
|
|
371
|
+
INPUT:
|
|
372
|
+
|
|
373
|
+
- ``n`` -- the code length
|
|
374
|
+
|
|
375
|
+
- ``d`` -- the (lower bound on) minimal distance of the code
|
|
376
|
+
|
|
377
|
+
- ``q`` -- the size of the alphabet
|
|
378
|
+
|
|
379
|
+
- ``return_data`` -- if ``True``, return a triple
|
|
380
|
+
``(W,LP,bound)``, where ``W`` is a weights vector, and ``LP``
|
|
381
|
+
the Delsarte upper bound LP; both of them are Sage LP data.
|
|
382
|
+
``W`` need not be a weight distribution of a code.
|
|
383
|
+
|
|
384
|
+
- ``solver`` -- the LP/ILP solver to be used. Defaults to
|
|
385
|
+
``PPL``. It is arbitrary precision, thus there will be no
|
|
386
|
+
rounding errors. With other solvers (see
|
|
387
|
+
:class:`MixedIntegerLinearProgram` for the list), you are on
|
|
388
|
+
your own!
|
|
389
|
+
|
|
390
|
+
- ``isinteger`` -- if ``True``, uses an integer programming solver
|
|
391
|
+
(ILP), rather that an LP solver. Can be very slow if set to
|
|
392
|
+
``True``.
|
|
393
|
+
|
|
394
|
+
EXAMPLES:
|
|
395
|
+
|
|
396
|
+
The bound on the size of the `\GF{2}`-codes of length 11 and minimal distance 6::
|
|
397
|
+
|
|
398
|
+
sage: codes.bounds.delsarte_bound_hamming_space(11, 6, 2)
|
|
399
|
+
12
|
|
400
|
+
sage: a, p, val = codes.bounds.delsarte_bound_hamming_space(11, 6, 2, return_data=True)
|
|
401
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
402
|
+
[1, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0]
|
|
403
|
+
|
|
404
|
+
The bound on the size of the `\GF{2}`-codes of length 24 and minimal distance
|
|
405
|
+
8, i.e. parameters of the extended binary Golay code::
|
|
406
|
+
|
|
407
|
+
sage: a,p,x = codes.bounds.delsarte_bound_hamming_space(24,8,2,return_data=True)
|
|
408
|
+
sage: x
|
|
409
|
+
4096
|
|
410
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
411
|
+
[1, 0, 0, 0, 0, 0, 0, 0, 759, 0, 0, 0, 2576, 0, 0, 0, 759, 0, 0, 0, 0, 0, 0, 0, 1]
|
|
412
|
+
|
|
413
|
+
The bound on the size of `\GF{4}`-codes of length 11 and minimal distance 3::
|
|
414
|
+
|
|
415
|
+
sage: codes.bounds.delsarte_bound_hamming_space(11,3,4)
|
|
416
|
+
327680/3
|
|
417
|
+
|
|
418
|
+
An improvement of a known upper bound (150) from https://www.win.tue.nl/~aeb/codes/binary-1.html ::
|
|
419
|
+
|
|
420
|
+
sage: a,p,x = codes.bounds.delsarte_bound_hamming_space(23,10,2,return_data=True,isinteger=True); x # long time
|
|
421
|
+
148
|
|
422
|
+
sage: [j for i,j in p.get_values(a).items()] # long time
|
|
423
|
+
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 2, 0, 36, 0, 14, 0, 0, 0, 0, 0, 0, 0]
|
|
424
|
+
|
|
425
|
+
Note that a usual LP, without integer variables, won't do the trick ::
|
|
426
|
+
|
|
427
|
+
sage: codes.bounds.delsarte_bound_hamming_space(23,10,2).n(20)
|
|
428
|
+
151.86
|
|
429
|
+
|
|
430
|
+
Such an input is invalid::
|
|
431
|
+
|
|
432
|
+
sage: codes.bounds.delsarte_bound_hamming_space(11,3,-4)
|
|
433
|
+
Solver exception: PPL : There is no feasible solution
|
|
434
|
+
False
|
|
435
|
+
"""
|
|
436
|
+
from sage.numerical.mip import MIPSolverException
|
|
437
|
+
A, p = _delsarte_LP_building(n, d, 0, q, isinteger, solver)
|
|
438
|
+
try:
|
|
439
|
+
bd = p.solve()
|
|
440
|
+
except MIPSolverException as exc:
|
|
441
|
+
print(f"Solver exception: {exc}")
|
|
442
|
+
return (A, p, False) if return_data else False
|
|
443
|
+
|
|
444
|
+
return (A, p, bd) if return_data else bd
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
def delsarte_bound_additive_hamming_space(n, d, q, d_star=1, q_base=0, return_data=False,
|
|
448
|
+
solver='PPL', isinteger=False):
|
|
449
|
+
r"""
|
|
450
|
+
Find a modified Delsarte bound on additive codes in Hamming space `H_q^n` of minimal distance `d`.
|
|
451
|
+
|
|
452
|
+
Find the Delsarte LP bound on ``F_{q_base}``-dimension of additive
|
|
453
|
+
codes in Hamming space `H_q^n` of minimal distance ``d`` with
|
|
454
|
+
minimal distance of the dual code at least ``d_star``. If
|
|
455
|
+
``q_base`` is set to nonzero, then ``q`` is a power of
|
|
456
|
+
``q_base``, and the code is, formally, linear over
|
|
457
|
+
``F_{q_base}``. Otherwise it is assumed that ``q_base==q``.
|
|
458
|
+
|
|
459
|
+
INPUT:
|
|
460
|
+
|
|
461
|
+
- ``n`` -- the code length
|
|
462
|
+
|
|
463
|
+
- ``d`` -- the (lower bound on) minimal distance of the code
|
|
464
|
+
|
|
465
|
+
- ``q`` -- the size of the alphabet
|
|
466
|
+
|
|
467
|
+
- ``d_star`` -- the (lower bound on) minimal distance of the dual code;
|
|
468
|
+
only makes sense for additive codes
|
|
469
|
+
|
|
470
|
+
- ``q_base`` -- if ``0``, the code is assumed to be linear. Otherwise,
|
|
471
|
+
``q=q_base^m`` and the code is linear over ``F_{q_base}``
|
|
472
|
+
|
|
473
|
+
- ``return_data`` -- if ``True``, return a triple ``(W,LP,bound)``,
|
|
474
|
+
where ``W`` is a weights vector, and ``LP`` the Delsarte bound
|
|
475
|
+
LP; both of them are Sage LP data. ``W`` need not be a weight
|
|
476
|
+
distribution of a code, or, if ``isinteger==False``, even have
|
|
477
|
+
integer entries.
|
|
478
|
+
|
|
479
|
+
- ``solver`` -- the LP/ILP solver to be used. Defaults to ``'PPL'``. It is
|
|
480
|
+
arbitrary precision, thus there will be no rounding errors. With
|
|
481
|
+
other solvers (see :class:`MixedIntegerLinearProgram` for the
|
|
482
|
+
list), you are on your own!
|
|
483
|
+
|
|
484
|
+
- ``isinteger`` -- if ``True``, uses an integer programming solver (ILP),
|
|
485
|
+
rather that an LP solver (can be very slow if set to ``True``)
|
|
486
|
+
|
|
487
|
+
EXAMPLES:
|
|
488
|
+
|
|
489
|
+
The bound on dimension of linear `\GF{2}`-codes of length 11 and minimal distance 6::
|
|
490
|
+
|
|
491
|
+
sage: codes.bounds.delsarte_bound_additive_hamming_space(11, 6, 2)
|
|
492
|
+
3
|
|
493
|
+
sage: a,p,val = codes.bounds.delsarte_bound_additive_hamming_space(\
|
|
494
|
+
....: 11, 6, 2, return_data=True)
|
|
495
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
496
|
+
[1, 0, 0, 0, 0, 0, 5, 2, 0, 0, 0, 0]
|
|
497
|
+
|
|
498
|
+
The bound on the dimension of linear `\GF{4}`-codes of length 11 and minimal distance 3::
|
|
499
|
+
|
|
500
|
+
sage: codes.bounds.delsarte_bound_additive_hamming_space(11,3,4)
|
|
501
|
+
8
|
|
502
|
+
|
|
503
|
+
The bound on the `\GF{2}`-dimension of additive `\GF{4}`-codes of length 11 and minimal
|
|
504
|
+
distance 3::
|
|
505
|
+
|
|
506
|
+
sage: codes.bounds.delsarte_bound_additive_hamming_space(11,3,4,q_base=2)
|
|
507
|
+
16
|
|
508
|
+
|
|
509
|
+
Such a ``d_star`` is not possible::
|
|
510
|
+
|
|
511
|
+
sage: codes.bounds.delsarte_bound_additive_hamming_space(11,3,4,d_star=9)
|
|
512
|
+
Solver exception: PPL : There is no feasible solution
|
|
513
|
+
False
|
|
514
|
+
|
|
515
|
+
TESTS::
|
|
516
|
+
|
|
517
|
+
sage: a,p,x = codes.bounds.delsarte_bound_additive_hamming_space(\
|
|
518
|
+
....: 19,15,7,return_data=True,isinteger=True)
|
|
519
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
520
|
+
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, 0, 0, 1, 34]
|
|
521
|
+
sage: codes.bounds.delsarte_bound_additive_hamming_space(19,15,7,solver='glpk')
|
|
522
|
+
3
|
|
523
|
+
sage: codes.bounds.delsarte_bound_additive_hamming_space(\
|
|
524
|
+
....: 19,15,7, isinteger=True, solver='glpk')
|
|
525
|
+
3
|
|
526
|
+
"""
|
|
527
|
+
from sage.numerical.mip import MIPSolverException
|
|
528
|
+
if q_base == 0:
|
|
529
|
+
q_base = q
|
|
530
|
+
|
|
531
|
+
kk = 0
|
|
532
|
+
while q_base**kk < q:
|
|
533
|
+
kk += 1
|
|
534
|
+
|
|
535
|
+
if q_base**kk != q:
|
|
536
|
+
print("Wrong q_base=", q_base, " for q=", q, kk)
|
|
537
|
+
return False
|
|
538
|
+
|
|
539
|
+
# this implementation assumes that our LP solver to be unable to do a hot
|
|
540
|
+
# restart with an adjusted constraint
|
|
541
|
+
|
|
542
|
+
m = kk*n # this is to emulate repeat/until block
|
|
543
|
+
bd = q**n+1
|
|
544
|
+
|
|
545
|
+
while q_base**m < bd:
|
|
546
|
+
# need to solve the LP repeatedly, as this is a new constraint!
|
|
547
|
+
# we might become infeasible. More precisely, after rounding down
|
|
548
|
+
# to the closest value of q_base^m, the LP, with the constraint that
|
|
549
|
+
# the objective function is at most q_base^m,
|
|
550
|
+
A, p = _delsarte_LP_building(n, d, d_star, q, isinteger,
|
|
551
|
+
solver, q_base**m)
|
|
552
|
+
try:
|
|
553
|
+
bd = p.solve()
|
|
554
|
+
except MIPSolverException as exc:
|
|
555
|
+
print("Solver exception:", exc)
|
|
556
|
+
return (A, p, False) if return_data else False
|
|
557
|
+
# rounding the bound down to the nearest power of q_base, for q=q_base^m
|
|
558
|
+
# bd_r = roundres(log(bd, base=q_base))
|
|
559
|
+
m = -1
|
|
560
|
+
while q_base**(m+1) < bd:
|
|
561
|
+
m += 1
|
|
562
|
+
if q_base**(m+1) == bd:
|
|
563
|
+
m += 1
|
|
564
|
+
|
|
565
|
+
return (A, p, m) if return_data else m
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
def _delsarte_Q_LP_building(q, d, solver, isinteger):
|
|
569
|
+
r"""
|
|
570
|
+
LP builder for Delsarte's LP for codes given Q matrix.
|
|
571
|
+
|
|
572
|
+
LP builder for Delsarte's LP for codes, given Q matrix;
|
|
573
|
+
used in :func:`delsarte_bound_Q_matrix`; not exported.
|
|
574
|
+
|
|
575
|
+
INPUT:
|
|
576
|
+
|
|
577
|
+
- ``q`` -- the Q matrix
|
|
578
|
+
|
|
579
|
+
- ``d`` -- the (lower bound on) minimal distance of the code
|
|
580
|
+
|
|
581
|
+
- ``solver`` -- the LP/ILP solver to be used. Defaults to
|
|
582
|
+
``PPL``. It is arbitrary precision, thus there will be no
|
|
583
|
+
rounding errors. With other solvers (see
|
|
584
|
+
:class:`MixedIntegerLinearProgram` for the list), you are on
|
|
585
|
+
your own!
|
|
586
|
+
|
|
587
|
+
- ``isinteger`` -- if ``True``, uses an integer programming solver
|
|
588
|
+
(ILP), rather that an LP solver. Can be very slow if set to
|
|
589
|
+
``True``.
|
|
590
|
+
|
|
591
|
+
EXAMPLES::
|
|
592
|
+
|
|
593
|
+
sage: from sage.coding.delsarte_bounds import _delsarte_Q_LP_building
|
|
594
|
+
sage: q = Matrix([[codes.bounds.krawtchouk(6,2,i,j) for j in range(7)] for i in range(7)])
|
|
595
|
+
sage: _, p = _delsarte_Q_LP_building(q, 2, "PPL", False)
|
|
596
|
+
sage: p.show()
|
|
597
|
+
Maximization:
|
|
598
|
+
x_0 + x_1 + x_2 + x_3 + x_4 + x_5 + x_6
|
|
599
|
+
<BLANKLINE>
|
|
600
|
+
Constraints:
|
|
601
|
+
constraint_0: 1 <= x_0 <= 1
|
|
602
|
+
constraint_1: 0 <= x_1 <= 0
|
|
603
|
+
constraint_2: 0 <= 6 x_0 + 4 x_1 + 2 x_2 - 2 x_4 - 4 x_5 - 6 x_6
|
|
604
|
+
constraint_3: 0 <= 15 x_0 + 5 x_1 - x_2 - 3 x_3 - x_4 + 5 x_5 + 15 x_6
|
|
605
|
+
constraint_4: 0 <= 20 x_0 - 4 x_2 + 4 x_4 - 20 x_6
|
|
606
|
+
constraint_5: 0 <= 15 x_0 - 5 x_1 - x_2 + 3 x_3 - x_4 - 5 x_5 + 15 x_6
|
|
607
|
+
constraint_6: 0 <= 6 x_0 - 4 x_1 + 2 x_2 - 2 x_4 + 4 x_5 - 6 x_6
|
|
608
|
+
constraint_7: 0 <= x_0 - x_1 + x_2 - x_3 + x_4 - x_5 + x_6
|
|
609
|
+
Variables:
|
|
610
|
+
x_0 is a continuous variable (min=0, max=+oo)
|
|
611
|
+
x_1 is a continuous variable (min=0, max=+oo)
|
|
612
|
+
x_2 is a continuous variable (min=0, max=+oo)
|
|
613
|
+
x_3 is a continuous variable (min=0, max=+oo)
|
|
614
|
+
x_4 is a continuous variable (min=0, max=+oo)
|
|
615
|
+
x_5 is a continuous variable (min=0, max=+oo)
|
|
616
|
+
x_6 is a continuous variable (min=0, max=+oo)
|
|
617
|
+
"""
|
|
618
|
+
from sage.numerical.mip import MixedIntegerLinearProgram
|
|
619
|
+
|
|
620
|
+
n, _ = q.dimensions() # Q is a square matrix
|
|
621
|
+
|
|
622
|
+
p = MixedIntegerLinearProgram(maximization=True, solver=solver)
|
|
623
|
+
A = p.new_variable(integer=isinteger, nonnegative=True)
|
|
624
|
+
p.set_objective(p.sum([A[i] for i in range(n)]))
|
|
625
|
+
|
|
626
|
+
p.add_constraint(A[0] == 1)
|
|
627
|
+
|
|
628
|
+
try:
|
|
629
|
+
for i in range(1, d):
|
|
630
|
+
p.add_constraint(A[i] == 0)
|
|
631
|
+
except TypeError:
|
|
632
|
+
for i in d:
|
|
633
|
+
p.add_constraint(A[i] == 0)
|
|
634
|
+
|
|
635
|
+
for k in range(1, n):
|
|
636
|
+
p.add_constraint(p.sum([q[k][i] * A[i] for i in range(n)]), min=0)
|
|
637
|
+
|
|
638
|
+
return A, p
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
def delsarte_bound_Q_matrix(q, d, return_data=False,
|
|
642
|
+
solver='PPL', isinteger=False):
|
|
643
|
+
r"""
|
|
644
|
+
Delsarte bound on a code with Q matrix ``q`` and lower bound on min. dist. ``d``.
|
|
645
|
+
|
|
646
|
+
Find the Delsarte bound on a code with Q matrix ``q`` and lower bound on
|
|
647
|
+
minimal distance ``d``.
|
|
648
|
+
|
|
649
|
+
INPUT:
|
|
650
|
+
|
|
651
|
+
- ``q`` -- the Q matrix
|
|
652
|
+
|
|
653
|
+
- ``d`` -- the (lower bound on) minimal distance of the code
|
|
654
|
+
|
|
655
|
+
- ``return_data`` -- if ``True``, return a triple
|
|
656
|
+
``(W,LP,bound)``, where ``W`` is a weights vector, and ``LP``
|
|
657
|
+
the Delsarte upper bound LP; both of them are Sage LP data.
|
|
658
|
+
``W`` need not be a weight distribution of a code.
|
|
659
|
+
|
|
660
|
+
- ``solver`` -- the LP/ILP solver to be used. Defaults to
|
|
661
|
+
``PPL``. It is arbitrary precision, thus there will be no
|
|
662
|
+
rounding errors. With other solvers (see
|
|
663
|
+
:class:`MixedIntegerLinearProgram` for the list), you are on
|
|
664
|
+
your own!
|
|
665
|
+
|
|
666
|
+
- ``isinteger`` -- if ``True``, uses an integer programming solver
|
|
667
|
+
(ILP), rather that an LP solver. Can be very slow if set to
|
|
668
|
+
``True``.
|
|
669
|
+
|
|
670
|
+
EXAMPLES:
|
|
671
|
+
|
|
672
|
+
The bound on dimension of linear `\GF{2}`-codes of length 10 and minimal distance 6::
|
|
673
|
+
|
|
674
|
+
sage: q_matrix = Matrix([[codes.bounds.krawtchouk(10,2,i,j) for i in range(11)]
|
|
675
|
+
....: for j in range(11)])
|
|
676
|
+
sage: codes.bounds.delsarte_bound_Q_matrix(q_matrix, 6)
|
|
677
|
+
2
|
|
678
|
+
|
|
679
|
+
sage: a,p,val = codes.bounds.delsarte_bound_Q_matrix(q_matrix, 6, return_data=True)
|
|
680
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
681
|
+
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
|
|
682
|
+
|
|
683
|
+
TESTS:
|
|
684
|
+
|
|
685
|
+
Cases for using Hamming scheme Q matrix::
|
|
686
|
+
|
|
687
|
+
sage: q_matrix = Matrix([[codes.bounds.krawtchouk(10,2,i,j) for i in range(11)] for j in range(11)])
|
|
688
|
+
sage: codes.bounds.delsarte_bound_Q_matrix(q_matrix, 6)
|
|
689
|
+
2
|
|
690
|
+
|
|
691
|
+
sage: a,p,val = codes.bounds.delsarte_bound_Q_matrix(q_matrix, 6, return_data=True)
|
|
692
|
+
sage: [j for i,j in p.get_values(a).items()]
|
|
693
|
+
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
|
|
694
|
+
"""
|
|
695
|
+
from sage.numerical.mip import MIPSolverException
|
|
696
|
+
from sage.structure.element import Matrix
|
|
697
|
+
|
|
698
|
+
if not isinstance(q, Matrix):
|
|
699
|
+
raise ValueError("Input to delsarte_bound_Q_matrix "
|
|
700
|
+
"should be a sage Matrix()")
|
|
701
|
+
|
|
702
|
+
A, p = _delsarte_Q_LP_building(q, d, solver, isinteger)
|
|
703
|
+
try:
|
|
704
|
+
bd = p.solve()
|
|
705
|
+
except MIPSolverException as exc:
|
|
706
|
+
print(f"Solver exception: {exc}")
|
|
707
|
+
return (A, p, False) if return_data else False
|
|
708
|
+
|
|
709
|
+
return (A, p, bd) if return_data else bd
|