passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of passagemath-modules might be problematic. Click here for more details.
- passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
- passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
- passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
- passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
- passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
- passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- sage/algebras/all__sagemath_modules.py +20 -0
- sage/algebras/catalog.py +148 -0
- sage/algebras/clifford_algebra.py +3107 -0
- sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/clifford_algebra_element.pxd +16 -0
- sage/algebras/clifford_algebra_element.pyx +997 -0
- sage/algebras/commutative_dga.py +4252 -0
- sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/exterior_algebra_groebner.pxd +55 -0
- sage/algebras/exterior_algebra_groebner.pyx +727 -0
- sage/algebras/finite_dimensional_algebras/all.py +2 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
- sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
- sage/algebras/finite_gca.py +528 -0
- sage/algebras/group_algebra.py +232 -0
- sage/algebras/lie_algebras/abelian.py +197 -0
- sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
- sage/algebras/lie_algebras/all.py +25 -0
- sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
- sage/algebras/lie_algebras/bch.py +177 -0
- sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
- sage/algebras/lie_algebras/bgg_resolution.py +232 -0
- sage/algebras/lie_algebras/center_uea.py +767 -0
- sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
- sage/algebras/lie_algebras/examples.py +683 -0
- sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
- sage/algebras/lie_algebras/heisenberg.py +820 -0
- sage/algebras/lie_algebras/lie_algebra.py +1562 -0
- sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
- sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
- sage/algebras/lie_algebras/morphism.py +661 -0
- sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
- sage/algebras/lie_algebras/onsager.py +1324 -0
- sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
- sage/algebras/lie_algebras/quotient.py +462 -0
- sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
- sage/algebras/lie_algebras/representation.py +1040 -0
- sage/algebras/lie_algebras/structure_coefficients.py +459 -0
- sage/algebras/lie_algebras/subalgebra.py +967 -0
- sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
- sage/algebras/lie_algebras/verma_module.py +1630 -0
- sage/algebras/lie_algebras/virasoro.py +1186 -0
- sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/algebras/octonion_algebra.pxd +20 -0
- sage/algebras/octonion_algebra.pyx +987 -0
- sage/algebras/orlik_solomon.py +907 -0
- sage/algebras/orlik_terao.py +779 -0
- sage/algebras/steenrod/all.py +7 -0
- sage/algebras/steenrod/steenrod_algebra.py +4258 -0
- sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
- sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
- sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
- sage/algebras/weyl_algebra.py +1126 -0
- sage/all__sagemath_modules.py +62 -0
- sage/calculus/all__sagemath_modules.py +19 -0
- sage/calculus/expr.py +205 -0
- sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/integration.pyx +698 -0
- sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolation.pxd +13 -0
- sage/calculus/interpolation.pyx +387 -0
- sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/interpolators.pyx +326 -0
- sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/ode.pxd +5 -0
- sage/calculus/ode.pyx +610 -0
- sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/riemann.pyx +1521 -0
- sage/calculus/test_sympy.py +201 -0
- sage/calculus/transforms/all.py +7 -0
- sage/calculus/transforms/dft.py +844 -0
- sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/dwt.pxd +7 -0
- sage/calculus/transforms/dwt.pyx +160 -0
- sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/calculus/transforms/fft.pxd +12 -0
- sage/calculus/transforms/fft.pyx +487 -0
- sage/calculus/wester.py +662 -0
- sage/coding/abstract_code.py +1108 -0
- sage/coding/ag_code.py +868 -0
- sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/ag_code_decoders.pyx +2639 -0
- sage/coding/all.py +15 -0
- sage/coding/bch_code.py +494 -0
- sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/binary_code.pxd +124 -0
- sage/coding/binary_code.pyx +4139 -0
- sage/coding/bounds_catalog.py +43 -0
- sage/coding/channel.py +819 -0
- sage/coding/channels_catalog.py +29 -0
- sage/coding/code_bounds.py +755 -0
- sage/coding/code_constructions.py +804 -0
- sage/coding/codes_catalog.py +111 -0
- sage/coding/cyclic_code.py +1329 -0
- sage/coding/databases.py +316 -0
- sage/coding/decoder.py +373 -0
- sage/coding/decoders_catalog.py +88 -0
- sage/coding/delsarte_bounds.py +709 -0
- sage/coding/encoder.py +390 -0
- sage/coding/encoders_catalog.py +64 -0
- sage/coding/extended_code.py +468 -0
- sage/coding/gabidulin_code.py +1058 -0
- sage/coding/golay_code.py +404 -0
- sage/coding/goppa_code.py +441 -0
- sage/coding/grs_code.py +2371 -0
- sage/coding/guava.py +107 -0
- sage/coding/guruswami_sudan/all.py +1 -0
- sage/coding/guruswami_sudan/gs_decoder.py +897 -0
- sage/coding/guruswami_sudan/interpolation.py +409 -0
- sage/coding/guruswami_sudan/utils.py +176 -0
- sage/coding/hamming_code.py +176 -0
- sage/coding/information_set_decoder.py +1032 -0
- sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/coding/kasami_codes.pyx +351 -0
- sage/coding/linear_code.py +3067 -0
- sage/coding/linear_code_no_metric.py +1354 -0
- sage/coding/linear_rank_metric.py +961 -0
- sage/coding/parity_check_code.py +353 -0
- sage/coding/punctured_code.py +719 -0
- sage/coding/reed_muller_code.py +999 -0
- sage/coding/self_dual_codes.py +942 -0
- sage/coding/source_coding/all.py +2 -0
- sage/coding/source_coding/huffman.py +553 -0
- sage/coding/subfield_subcode.py +423 -0
- sage/coding/two_weight_db.py +399 -0
- sage/combinat/all__sagemath_modules.py +7 -0
- sage/combinat/cartesian_product.py +347 -0
- sage/combinat/family.py +11 -0
- sage/combinat/free_module.py +1977 -0
- sage/combinat/root_system/all.py +147 -0
- sage/combinat/root_system/ambient_space.py +527 -0
- sage/combinat/root_system/associahedron.py +471 -0
- sage/combinat/root_system/braid_move_calculator.py +143 -0
- sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/combinat/root_system/braid_orbit.pyx +144 -0
- sage/combinat/root_system/branching_rules.py +2301 -0
- sage/combinat/root_system/cartan_matrix.py +1245 -0
- sage/combinat/root_system/cartan_type.py +3069 -0
- sage/combinat/root_system/coxeter_group.py +162 -0
- sage/combinat/root_system/coxeter_matrix.py +1261 -0
- sage/combinat/root_system/coxeter_type.py +681 -0
- sage/combinat/root_system/dynkin_diagram.py +900 -0
- sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
- sage/combinat/root_system/fundamental_group.py +795 -0
- sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
- sage/combinat/root_system/integrable_representations.py +1227 -0
- sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
- sage/combinat/root_system/pieri_factors.py +1147 -0
- sage/combinat/root_system/plot.py +1615 -0
- sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
- sage/combinat/root_system/root_lattice_realizations.py +4628 -0
- sage/combinat/root_system/root_space.py +487 -0
- sage/combinat/root_system/root_system.py +882 -0
- sage/combinat/root_system/type_A.py +348 -0
- sage/combinat/root_system/type_A_affine.py +227 -0
- sage/combinat/root_system/type_A_infinity.py +241 -0
- sage/combinat/root_system/type_B.py +347 -0
- sage/combinat/root_system/type_BC_affine.py +287 -0
- sage/combinat/root_system/type_B_affine.py +216 -0
- sage/combinat/root_system/type_C.py +317 -0
- sage/combinat/root_system/type_C_affine.py +188 -0
- sage/combinat/root_system/type_D.py +357 -0
- sage/combinat/root_system/type_D_affine.py +208 -0
- sage/combinat/root_system/type_E.py +641 -0
- sage/combinat/root_system/type_E_affine.py +231 -0
- sage/combinat/root_system/type_F.py +387 -0
- sage/combinat/root_system/type_F_affine.py +137 -0
- sage/combinat/root_system/type_G.py +293 -0
- sage/combinat/root_system/type_G_affine.py +132 -0
- sage/combinat/root_system/type_H.py +105 -0
- sage/combinat/root_system/type_I.py +110 -0
- sage/combinat/root_system/type_Q.py +150 -0
- sage/combinat/root_system/type_affine.py +509 -0
- sage/combinat/root_system/type_dual.py +704 -0
- sage/combinat/root_system/type_folded.py +301 -0
- sage/combinat/root_system/type_marked.py +748 -0
- sage/combinat/root_system/type_reducible.py +601 -0
- sage/combinat/root_system/type_relabel.py +730 -0
- sage/combinat/root_system/type_super_A.py +837 -0
- sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
- sage/combinat/root_system/weight_space.py +639 -0
- sage/combinat/root_system/weyl_characters.py +2238 -0
- sage/crypto/__init__.py +4 -0
- sage/crypto/all.py +28 -0
- sage/crypto/block_cipher/all.py +7 -0
- sage/crypto/block_cipher/des.py +1065 -0
- sage/crypto/block_cipher/miniaes.py +2171 -0
- sage/crypto/block_cipher/present.py +909 -0
- sage/crypto/block_cipher/sdes.py +1527 -0
- sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/boolean_function.pxd +10 -0
- sage/crypto/boolean_function.pyx +1487 -0
- sage/crypto/cipher.py +78 -0
- sage/crypto/classical.py +3668 -0
- sage/crypto/classical_cipher.py +569 -0
- sage/crypto/cryptosystem.py +387 -0
- sage/crypto/key_exchange/all.py +7 -0
- sage/crypto/key_exchange/catalog.py +24 -0
- sage/crypto/key_exchange/diffie_hellman.py +323 -0
- sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
- sage/crypto/lattice.py +312 -0
- sage/crypto/lfsr.py +295 -0
- sage/crypto/lwe.py +840 -0
- sage/crypto/mq/__init__.py +4 -0
- sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
- sage/crypto/mq/rijndael_gf.py +2345 -0
- sage/crypto/mq/sbox.py +7 -0
- sage/crypto/mq/sr.py +3344 -0
- sage/crypto/public_key/all.py +5 -0
- sage/crypto/public_key/blum_goldwasser.py +776 -0
- sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/crypto/sbox.pyx +2090 -0
- sage/crypto/sboxes.py +2090 -0
- sage/crypto/stream.py +390 -0
- sage/crypto/stream_cipher.py +297 -0
- sage/crypto/util.py +519 -0
- sage/ext/all__sagemath_modules.py +1 -0
- sage/ext/interpreters/__init__.py +1 -0
- sage/ext/interpreters/all__sagemath_modules.py +2 -0
- sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cc.pxd +30 -0
- sage/ext/interpreters/wrapper_cc.pyx +252 -0
- sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_cdf.pxd +26 -0
- sage/ext/interpreters/wrapper_cdf.pyx +245 -0
- sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rdf.pxd +23 -0
- sage/ext/interpreters/wrapper_rdf.pyx +221 -0
- sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/ext/interpreters/wrapper_rr.pxd +28 -0
- sage/ext/interpreters/wrapper_rr.pyx +335 -0
- sage/geometry/all__sagemath_modules.py +5 -0
- sage/geometry/toric_lattice.py +1745 -0
- sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/geometry/toric_lattice_element.pyx +432 -0
- sage/groups/abelian_gps/abelian_group.py +1925 -0
- sage/groups/abelian_gps/abelian_group_element.py +164 -0
- sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
- sage/groups/abelian_gps/dual_abelian_group.py +421 -0
- sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
- sage/groups/abelian_gps/element_base.py +341 -0
- sage/groups/abelian_gps/values.py +488 -0
- sage/groups/additive_abelian/additive_abelian_group.py +476 -0
- sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
- sage/groups/additive_abelian/all.py +4 -0
- sage/groups/additive_abelian/qmodnz.py +231 -0
- sage/groups/additive_abelian/qmodnz_element.py +349 -0
- sage/groups/affine_gps/affine_group.py +535 -0
- sage/groups/affine_gps/all.py +1 -0
- sage/groups/affine_gps/catalog.py +17 -0
- sage/groups/affine_gps/euclidean_group.py +246 -0
- sage/groups/affine_gps/group_element.py +562 -0
- sage/groups/all__sagemath_modules.py +12 -0
- sage/groups/galois_group.py +479 -0
- sage/groups/matrix_gps/all.py +4 -0
- sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
- sage/groups/matrix_gps/catalog.py +26 -0
- sage/groups/matrix_gps/coxeter_group.py +927 -0
- sage/groups/matrix_gps/finitely_generated.py +487 -0
- sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/matrix_gps/group_element.pxd +11 -0
- sage/groups/matrix_gps/group_element.pyx +431 -0
- sage/groups/matrix_gps/linear.py +440 -0
- sage/groups/matrix_gps/matrix_group.py +617 -0
- sage/groups/matrix_gps/named_group.py +296 -0
- sage/groups/matrix_gps/orthogonal.py +544 -0
- sage/groups/matrix_gps/symplectic.py +251 -0
- sage/groups/matrix_gps/unitary.py +436 -0
- sage/groups/misc_gps/all__sagemath_modules.py +1 -0
- sage/groups/misc_gps/argument_groups.py +1905 -0
- sage/groups/misc_gps/imaginary_groups.py +479 -0
- sage/groups/perm_gps/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
- sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
- sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
- sage/homology/algebraic_topological_model.py +595 -0
- sage/homology/all.py +2 -0
- sage/homology/all__sagemath_modules.py +8 -0
- sage/homology/chain_complex.py +2148 -0
- sage/homology/chain_complex_homspace.py +165 -0
- sage/homology/chain_complex_morphism.py +629 -0
- sage/homology/chain_homotopy.py +604 -0
- sage/homology/chains.py +653 -0
- sage/homology/free_resolution.py +923 -0
- sage/homology/graded_resolution.py +567 -0
- sage/homology/hochschild_complex.py +756 -0
- sage/homology/homology_group.py +188 -0
- sage/homology/homology_morphism.py +422 -0
- sage/homology/homology_vector_space_with_basis.py +1454 -0
- sage/homology/koszul_complex.py +169 -0
- sage/homology/matrix_utils.py +205 -0
- sage/libs/all__sagemath_modules.py +1 -0
- sage/libs/gsl/__init__.py +1 -0
- sage/libs/gsl/airy.pxd +56 -0
- sage/libs/gsl/all.pxd +66 -0
- sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/gsl/array.pxd +5 -0
- sage/libs/gsl/array.pyx +102 -0
- sage/libs/gsl/bessel.pxd +208 -0
- sage/libs/gsl/blas.pxd +116 -0
- sage/libs/gsl/blas_types.pxd +34 -0
- sage/libs/gsl/block.pxd +52 -0
- sage/libs/gsl/chebyshev.pxd +37 -0
- sage/libs/gsl/clausen.pxd +12 -0
- sage/libs/gsl/combination.pxd +47 -0
- sage/libs/gsl/complex.pxd +151 -0
- sage/libs/gsl/coulomb.pxd +30 -0
- sage/libs/gsl/coupling.pxd +21 -0
- sage/libs/gsl/dawson.pxd +12 -0
- sage/libs/gsl/debye.pxd +24 -0
- sage/libs/gsl/dilog.pxd +14 -0
- sage/libs/gsl/eigen.pxd +46 -0
- sage/libs/gsl/elementary.pxd +12 -0
- sage/libs/gsl/ellint.pxd +48 -0
- sage/libs/gsl/elljac.pxd +8 -0
- sage/libs/gsl/erf.pxd +32 -0
- sage/libs/gsl/errno.pxd +26 -0
- sage/libs/gsl/exp.pxd +44 -0
- sage/libs/gsl/expint.pxd +44 -0
- sage/libs/gsl/fermi_dirac.pxd +44 -0
- sage/libs/gsl/fft.pxd +121 -0
- sage/libs/gsl/fit.pxd +50 -0
- sage/libs/gsl/gamma.pxd +94 -0
- sage/libs/gsl/gegenbauer.pxd +26 -0
- sage/libs/gsl/histogram.pxd +176 -0
- sage/libs/gsl/hyperg.pxd +52 -0
- sage/libs/gsl/integration.pxd +69 -0
- sage/libs/gsl/interp.pxd +109 -0
- sage/libs/gsl/laguerre.pxd +24 -0
- sage/libs/gsl/lambert.pxd +16 -0
- sage/libs/gsl/legendre.pxd +90 -0
- sage/libs/gsl/linalg.pxd +185 -0
- sage/libs/gsl/log.pxd +26 -0
- sage/libs/gsl/math.pxd +43 -0
- sage/libs/gsl/matrix.pxd +143 -0
- sage/libs/gsl/matrix_complex.pxd +130 -0
- sage/libs/gsl/min.pxd +67 -0
- sage/libs/gsl/monte.pxd +56 -0
- sage/libs/gsl/ntuple.pxd +32 -0
- sage/libs/gsl/odeiv.pxd +70 -0
- sage/libs/gsl/permutation.pxd +78 -0
- sage/libs/gsl/poly.pxd +40 -0
- sage/libs/gsl/pow_int.pxd +12 -0
- sage/libs/gsl/psi.pxd +28 -0
- sage/libs/gsl/qrng.pxd +29 -0
- sage/libs/gsl/random.pxd +257 -0
- sage/libs/gsl/rng.pxd +100 -0
- sage/libs/gsl/roots.pxd +72 -0
- sage/libs/gsl/sort.pxd +36 -0
- sage/libs/gsl/statistics.pxd +59 -0
- sage/libs/gsl/sum.pxd +55 -0
- sage/libs/gsl/synchrotron.pxd +16 -0
- sage/libs/gsl/transport.pxd +24 -0
- sage/libs/gsl/trig.pxd +58 -0
- sage/libs/gsl/types.pxd +137 -0
- sage/libs/gsl/vector.pxd +101 -0
- sage/libs/gsl/vector_complex.pxd +83 -0
- sage/libs/gsl/wavelet.pxd +49 -0
- sage/libs/gsl/zeta.pxd +28 -0
- sage/libs/mpc/__init__.pxd +114 -0
- sage/libs/mpc/types.pxd +28 -0
- sage/libs/mpfr/__init__.pxd +299 -0
- sage/libs/mpfr/types.pxd +26 -0
- sage/libs/mpmath/__init__.py +1 -0
- sage/libs/mpmath/all.py +27 -0
- sage/libs/mpmath/all__sagemath_modules.py +1 -0
- sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/libs/mpmath/utils.pxd +4 -0
- sage/libs/mpmath/utils.pyx +319 -0
- sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/action.pxd +26 -0
- sage/matrix/action.pyx +596 -0
- sage/matrix/all.py +9 -0
- sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/args.pxd +144 -0
- sage/matrix/args.pyx +1668 -0
- sage/matrix/benchmark.py +1258 -0
- sage/matrix/berlekamp_massey.py +95 -0
- sage/matrix/compute_J_ideal.py +926 -0
- sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/constructor.pyx +750 -0
- sage/matrix/docs.py +430 -0
- sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/echelon_matrix.pyx +155 -0
- sage/matrix/matrix.pxd +2 -0
- sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix0.pxd +68 -0
- sage/matrix/matrix0.pyx +6324 -0
- sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix1.pxd +8 -0
- sage/matrix/matrix1.pyx +2851 -0
- sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix2.pxd +25 -0
- sage/matrix/matrix2.pyx +20181 -0
- sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_cdv.pxd +4 -0
- sage/matrix/matrix_cdv.pyx +93 -0
- sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_complex_double_dense.pxd +5 -0
- sage/matrix/matrix_complex_double_dense.pyx +98 -0
- sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_dense.pxd +5 -0
- sage/matrix/matrix_dense.pyx +343 -0
- sage/matrix/matrix_domain_dense.pxd +5 -0
- sage/matrix/matrix_domain_sparse.pxd +5 -0
- sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_dense.pxd +7 -0
- sage/matrix/matrix_double_dense.pyx +3906 -0
- sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_double_sparse.pxd +6 -0
- sage/matrix/matrix_double_sparse.pyx +248 -0
- sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_dense.pxd +7 -0
- sage/matrix/matrix_generic_dense.pyx +354 -0
- sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_generic_sparse.pxd +7 -0
- sage/matrix/matrix_generic_sparse.pyx +461 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
- sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
- sage/matrix/matrix_misc.py +313 -0
- sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_dense.pxd +14 -0
- sage/matrix/matrix_numpy_dense.pyx +450 -0
- sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
- sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
- sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_polynomial_dense.pxd +5 -0
- sage/matrix/matrix_polynomial_dense.pyx +5341 -0
- sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_real_double_dense.pxd +7 -0
- sage/matrix/matrix_real_double_dense.pyx +122 -0
- sage/matrix/matrix_space.py +2848 -0
- sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_sparse.pxd +5 -0
- sage/matrix/matrix_sparse.pyx +1222 -0
- sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/matrix_window.pxd +37 -0
- sage/matrix/matrix_window.pyx +242 -0
- sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/misc_mpfr.pyx +80 -0
- sage/matrix/operation_table.py +1182 -0
- sage/matrix/special.py +3666 -0
- sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matrix/strassen.pyx +851 -0
- sage/matrix/symplectic_basis.py +541 -0
- sage/matrix/template.pxd +6 -0
- sage/matrix/tests.py +71 -0
- sage/matroids/advanced.py +77 -0
- sage/matroids/all.py +13 -0
- sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_exchange_matroid.pxd +96 -0
- sage/matroids/basis_exchange_matroid.pyx +2344 -0
- sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/basis_matroid.pxd +45 -0
- sage/matroids/basis_matroid.pyx +1217 -0
- sage/matroids/catalog.py +44 -0
- sage/matroids/chow_ring.py +473 -0
- sage/matroids/chow_ring_ideal.py +849 -0
- sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuit_closures_matroid.pxd +16 -0
- sage/matroids/circuit_closures_matroid.pyx +559 -0
- sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/circuits_matroid.pxd +38 -0
- sage/matroids/circuits_matroid.pyx +947 -0
- sage/matroids/constructor.py +1086 -0
- sage/matroids/database_collections.py +365 -0
- sage/matroids/database_matroids.py +5338 -0
- sage/matroids/dual_matroid.py +583 -0
- sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/extension.pxd +34 -0
- sage/matroids/extension.pyx +519 -0
- sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/flats_matroid.pxd +28 -0
- sage/matroids/flats_matroid.pyx +715 -0
- sage/matroids/gammoid.py +600 -0
- sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/graphic_matroid.pxd +39 -0
- sage/matroids/graphic_matroid.pyx +2024 -0
- sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/lean_matrix.pxd +126 -0
- sage/matroids/lean_matrix.pyx +3667 -0
- sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/linear_matroid.pxd +180 -0
- sage/matroids/linear_matroid.pyx +6649 -0
- sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/matroid.pxd +243 -0
- sage/matroids/matroid.pyx +8759 -0
- sage/matroids/matroids_catalog.py +190 -0
- sage/matroids/matroids_plot_helpers.py +890 -0
- sage/matroids/minor_matroid.py +480 -0
- sage/matroids/minorfix.h +9 -0
- sage/matroids/named_matroids.py +5 -0
- sage/matroids/rank_matroid.py +268 -0
- sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/set_system.pxd +38 -0
- sage/matroids/set_system.pyx +800 -0
- sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/transversal_matroid.pxd +14 -0
- sage/matroids/transversal_matroid.pyx +893 -0
- sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/union_matroid.pxd +20 -0
- sage/matroids/union_matroid.pyx +331 -0
- sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/matroids/unpickling.pyx +843 -0
- sage/matroids/utilities.py +809 -0
- sage/misc/all__sagemath_modules.py +20 -0
- sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/c3.pyx +238 -0
- sage/misc/compat.py +87 -0
- sage/misc/element_with_label.py +173 -0
- sage/misc/func_persist.py +79 -0
- sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/misc/pickle_old.pyx +19 -0
- sage/misc/proof.py +7 -0
- sage/misc/replace_dot_all.py +472 -0
- sage/misc/sagedoc_conf.py +168 -0
- sage/misc/sphinxify.py +167 -0
- sage/misc/test_class_pickling.py +85 -0
- sage/modules/all.py +42 -0
- sage/modules/complex_double_vector.py +25 -0
- sage/modules/diamond_cutting.py +380 -0
- sage/modules/fg_pid/all.py +1 -0
- sage/modules/fg_pid/fgp_element.py +456 -0
- sage/modules/fg_pid/fgp_module.py +2091 -0
- sage/modules/fg_pid/fgp_morphism.py +550 -0
- sage/modules/filtered_vector_space.py +1271 -0
- sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/finite_submodule_iter.pxd +27 -0
- sage/modules/finite_submodule_iter.pyx +452 -0
- sage/modules/fp_graded/all.py +1 -0
- sage/modules/fp_graded/element.py +346 -0
- sage/modules/fp_graded/free_element.py +298 -0
- sage/modules/fp_graded/free_homspace.py +53 -0
- sage/modules/fp_graded/free_module.py +1060 -0
- sage/modules/fp_graded/free_morphism.py +217 -0
- sage/modules/fp_graded/homspace.py +563 -0
- sage/modules/fp_graded/module.py +1340 -0
- sage/modules/fp_graded/morphism.py +1990 -0
- sage/modules/fp_graded/steenrod/all.py +1 -0
- sage/modules/fp_graded/steenrod/homspace.py +65 -0
- sage/modules/fp_graded/steenrod/module.py +477 -0
- sage/modules/fp_graded/steenrod/morphism.py +404 -0
- sage/modules/fp_graded/steenrod/profile.py +241 -0
- sage/modules/free_module.py +8447 -0
- sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/free_module_element.pxd +22 -0
- sage/modules/free_module_element.pyx +5445 -0
- sage/modules/free_module_homspace.py +369 -0
- sage/modules/free_module_integer.py +896 -0
- sage/modules/free_module_morphism.py +823 -0
- sage/modules/free_module_pseudohomspace.py +352 -0
- sage/modules/free_module_pseudomorphism.py +578 -0
- sage/modules/free_quadratic_module.py +1706 -0
- sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
- sage/modules/matrix_morphism.py +1745 -0
- sage/modules/misc.py +103 -0
- sage/modules/module_functors.py +192 -0
- sage/modules/multi_filtered_vector_space.py +719 -0
- sage/modules/ore_module.py +2208 -0
- sage/modules/ore_module_element.py +178 -0
- sage/modules/ore_module_homspace.py +147 -0
- sage/modules/ore_module_morphism.py +968 -0
- sage/modules/quotient_module.py +699 -0
- sage/modules/real_double_vector.py +22 -0
- sage/modules/submodule.py +255 -0
- sage/modules/tensor_operations.py +567 -0
- sage/modules/torsion_quadratic_module.py +1352 -0
- sage/modules/tutorial_free_modules.py +248 -0
- sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_complex_double_dense.pxd +6 -0
- sage/modules/vector_complex_double_dense.pyx +117 -0
- sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_double_dense.pxd +6 -0
- sage/modules/vector_double_dense.pyx +604 -0
- sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_dense.pxd +15 -0
- sage/modules/vector_integer_dense.pyx +361 -0
- sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_integer_sparse.pxd +29 -0
- sage/modules/vector_integer_sparse.pyx +406 -0
- sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_dense.pxd +12 -0
- sage/modules/vector_modn_dense.pyx +394 -0
- sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_modn_sparse.pxd +21 -0
- sage/modules/vector_modn_sparse.pyx +298 -0
- sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_dense.pxd +15 -0
- sage/modules/vector_numpy_dense.pyx +304 -0
- sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_numpy_integer_dense.pxd +7 -0
- sage/modules/vector_numpy_integer_dense.pyx +54 -0
- sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_dense.pxd +15 -0
- sage/modules/vector_rational_dense.pyx +387 -0
- sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_rational_sparse.pxd +30 -0
- sage/modules/vector_rational_sparse.pyx +413 -0
- sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/vector_real_double_dense.pxd +6 -0
- sage/modules/vector_real_double_dense.pyx +126 -0
- sage/modules/vector_space_homspace.py +430 -0
- sage/modules/vector_space_morphism.py +989 -0
- sage/modules/with_basis/all.py +15 -0
- sage/modules/with_basis/cell_module.py +494 -0
- sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/modules/with_basis/indexed_element.pxd +13 -0
- sage/modules/with_basis/indexed_element.pyx +1058 -0
- sage/modules/with_basis/invariant.py +1075 -0
- sage/modules/with_basis/morphism.py +1636 -0
- sage/modules/with_basis/representation.py +2939 -0
- sage/modules/with_basis/subquotient.py +685 -0
- sage/numerical/all__sagemath_modules.py +6 -0
- sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/numerical/gauss_legendre.pyx +381 -0
- sage/numerical/optimize.py +910 -0
- sage/probability/all.py +10 -0
- sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/probability/probability_distribution.pyx +1242 -0
- sage/probability/random_variable.py +411 -0
- sage/quadratic_forms/all.py +4 -0
- sage/quadratic_forms/all__sagemath_modules.py +15 -0
- sage/quadratic_forms/binary_qf.py +2042 -0
- sage/quadratic_forms/bqf_class_group.py +748 -0
- sage/quadratic_forms/constructions.py +93 -0
- sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/count_local_2.pyx +365 -0
- sage/quadratic_forms/extras.py +195 -0
- sage/quadratic_forms/quadratic_form.py +1753 -0
- sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
- sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
- sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
- sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
- sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
- sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
- sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
- sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
- sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
- sage/quadratic_forms/quadratic_form__theta.py +352 -0
- sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
- sage/quadratic_forms/random_quadraticform.py +209 -0
- sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/quadratic_forms/ternary.pyx +1154 -0
- sage/quadratic_forms/ternary_qf.py +2027 -0
- sage/rings/all__sagemath_modules.py +28 -0
- sage/rings/asymptotic/all__sagemath_modules.py +1 -0
- sage/rings/asymptotic/misc.py +1252 -0
- sage/rings/cc.py +4 -0
- sage/rings/cfinite_sequence.py +1306 -0
- sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_conversion.pxd +8 -0
- sage/rings/complex_conversion.pyx +23 -0
- sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_double.pxd +21 -0
- sage/rings/complex_double.pyx +2654 -0
- sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpc.pxd +21 -0
- sage/rings/complex_mpc.pyx +2576 -0
- sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/complex_mpfr.pxd +18 -0
- sage/rings/complex_mpfr.pyx +3602 -0
- sage/rings/derivation.py +2334 -0
- sage/rings/finite_rings/all__sagemath_modules.py +1 -0
- sage/rings/finite_rings/maps_finite_field.py +191 -0
- sage/rings/function_field/all__sagemath_modules.py +8 -0
- sage/rings/function_field/derivations.py +102 -0
- sage/rings/function_field/derivations_rational.py +132 -0
- sage/rings/function_field/differential.py +853 -0
- sage/rings/function_field/divisor.py +1107 -0
- sage/rings/function_field/drinfeld_modules/action.py +199 -0
- sage/rings/function_field/drinfeld_modules/all.py +1 -0
- sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
- sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
- sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
- sage/rings/function_field/drinfeld_modules/homset.py +420 -0
- sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
- sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
- sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/function_field/khuri_makdisi.pyx +935 -0
- sage/rings/invariants/all.py +4 -0
- sage/rings/invariants/invariant_theory.py +4597 -0
- sage/rings/invariants/reconstruction.py +395 -0
- sage/rings/polynomial/all__sagemath_modules.py +17 -0
- sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
- sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
- sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
- sage/rings/polynomial/ore_function_element.py +952 -0
- sage/rings/polynomial/ore_function_field.py +1028 -0
- sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
- sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
- sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
- sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
- sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
- sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
- sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
- sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
- sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
- sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
- sage/rings/polynomial/skew_polynomial_ring.py +908 -0
- sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_double_element_gsl.pxd +8 -0
- sage/rings/real_double_element_gsl.pyx +794 -0
- sage/rings/real_field.py +58 -0
- sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/real_mpfr.pxd +29 -0
- sage/rings/real_mpfr.pyx +6122 -0
- sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension.pxd +42 -0
- sage/rings/ring_extension.pyx +2779 -0
- sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_conversion.pxd +16 -0
- sage/rings/ring_extension_conversion.pyx +462 -0
- sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_element.pxd +21 -0
- sage/rings/ring_extension_element.pyx +1635 -0
- sage/rings/ring_extension_homset.py +64 -0
- sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/rings/ring_extension_morphism.pxd +35 -0
- sage/rings/ring_extension_morphism.pyx +920 -0
- sage/schemes/all__sagemath_modules.py +1 -0
- sage/schemes/projective/all__sagemath_modules.py +1 -0
- sage/schemes/projective/coherent_sheaf.py +300 -0
- sage/schemes/projective/cohomology.py +510 -0
- sage/stats/all.py +15 -0
- sage/stats/basic_stats.py +489 -0
- sage/stats/distributions/all.py +7 -0
- sage/stats/distributions/catalog.py +34 -0
- sage/stats/distributions/dgs.h +50 -0
- sage/stats/distributions/dgs.pxd +111 -0
- sage/stats/distributions/dgs_bern.h +400 -0
- sage/stats/distributions/dgs_gauss.h +614 -0
- sage/stats/distributions/dgs_misc.h +104 -0
- sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
- sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
- sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
- sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
- sage/stats/hmm/all.py +15 -0
- sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/chmm.pyx +1595 -0
- sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/distributions.pxd +29 -0
- sage/stats/hmm/distributions.pyx +531 -0
- sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/hmm.pxd +17 -0
- sage/stats/hmm/hmm.pyx +1388 -0
- sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/hmm/util.pxd +7 -0
- sage/stats/hmm/util.pyx +165 -0
- sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/intlist.pxd +14 -0
- sage/stats/intlist.pyx +588 -0
- sage/stats/r.py +49 -0
- sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
- sage/stats/time_series.pxd +6 -0
- sage/stats/time_series.pyx +2546 -0
- sage/tensor/all.py +2 -0
- sage/tensor/modules/all.py +8 -0
- sage/tensor/modules/alternating_contr_tensor.py +761 -0
- sage/tensor/modules/comp.py +5598 -0
- sage/tensor/modules/ext_pow_free_module.py +824 -0
- sage/tensor/modules/finite_rank_free_module.py +3589 -0
- sage/tensor/modules/format_utilities.py +333 -0
- sage/tensor/modules/free_module_alt_form.py +858 -0
- sage/tensor/modules/free_module_automorphism.py +1207 -0
- sage/tensor/modules/free_module_basis.py +1074 -0
- sage/tensor/modules/free_module_element.py +284 -0
- sage/tensor/modules/free_module_homset.py +652 -0
- sage/tensor/modules/free_module_linear_group.py +564 -0
- sage/tensor/modules/free_module_morphism.py +1581 -0
- sage/tensor/modules/free_module_tensor.py +3289 -0
- sage/tensor/modules/reflexive_module.py +386 -0
- sage/tensor/modules/tensor_free_module.py +780 -0
- sage/tensor/modules/tensor_free_submodule.py +538 -0
- sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
- sage/tensor/modules/tensor_with_indices.py +1043 -0
|
@@ -0,0 +1,755 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
r"""
|
|
3
|
+
Bounds for parameters of codes
|
|
4
|
+
|
|
5
|
+
This module provided some upper and lower bounds for the parameters
|
|
6
|
+
of codes.
|
|
7
|
+
|
|
8
|
+
AUTHORS:
|
|
9
|
+
|
|
10
|
+
- David Joyner (2006-07): initial implementation.
|
|
11
|
+
|
|
12
|
+
- William Stein (2006-07): minor editing of docs and code (fixed bug
|
|
13
|
+
in elias_bound_asymp)
|
|
14
|
+
|
|
15
|
+
- David Joyner (2006-07): fixed dimension_upper_bound to return an
|
|
16
|
+
integer, added example to elias_bound_asymp.
|
|
17
|
+
|
|
18
|
+
- " (2009-05): removed all calls to Guava but left it as an option.
|
|
19
|
+
|
|
20
|
+
- Dima Pasechnik (2012-10): added LP bounds.
|
|
21
|
+
|
|
22
|
+
Let `F` be a finite set of size `q`.
|
|
23
|
+
A subset `C` of `V=F^n` is called a code of length `n`.
|
|
24
|
+
Often one considers the case where `F` is a finite field,
|
|
25
|
+
denoted by `\GF{q}`. Then `V` is an `F`-vector space. A subspace
|
|
26
|
+
of `V` (with the standard basis) is called a linear code of length `n`. If its
|
|
27
|
+
dimension is denoted `k` then we typically store a basis of `C` as a `k\times
|
|
28
|
+
n` matrix (the rows are the basis vectors). If `F=\GF{2}` then `C` is called a
|
|
29
|
+
binary code. If `F` has `q` elements then `C` is called a `q`-ary code. The
|
|
30
|
+
elements of a code `C` are called codewords. The information rate of `C` is
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
.. MATH::
|
|
34
|
+
|
|
35
|
+
R={\frac{\log_q\vert C\vert}{n}},
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
where `\vert C\vert` denotes the number of elements of `C`. If `{\bf
|
|
39
|
+
v}=(v_1,v_2,...,v_n)`, `{\bf w}=(w_1,w_2,...,w_n)` are elements of `V=F^n` then
|
|
40
|
+
we define
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
.. MATH::
|
|
44
|
+
|
|
45
|
+
d({\bf v},{\bf w}) =\vert\{i\ \vert\ 1\leq i\leq n,\ v_i\not= w_i\}\vert
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
to be the Hamming distance between `{\bf v}` and `{\bf w}`. The function
|
|
49
|
+
`d:V\times V\rightarrow \Bold{N}` is called the Hamming metric. The weight of
|
|
50
|
+
an element (in the Hamming metric) is `d({\bf v},{\bf 0})`,
|
|
51
|
+
where `0` is a distinguished element of `F`;
|
|
52
|
+
in particular it is `0` of the field if `F` is a field.
|
|
53
|
+
The minimum distance of
|
|
54
|
+
a linear code is the smallest nonzero weight of a codeword in `C`. The
|
|
55
|
+
relatively minimum distance is denoted
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
.. MATH::
|
|
59
|
+
|
|
60
|
+
\delta = d/n.
|
|
61
|
+
|
|
62
|
+
A linear code with length `n`, dimension `k`, and minimum distance `d` is
|
|
63
|
+
called an `[n,k,d]_q`-code and `n,k,d` are called its parameters. A (not
|
|
64
|
+
necessarily linear) code `C` with length `n`, size `M=|C|`, and minimum
|
|
65
|
+
distance `d` is called an `(n,M,d)_q`-code (using parentheses instead of square
|
|
66
|
+
brackets). Of course, `k=\log_q(M)` for linear codes.
|
|
67
|
+
|
|
68
|
+
What is the "best" code of a given length?
|
|
69
|
+
Let `A_q(n,d)` denote the largest `M` such that there exists a
|
|
70
|
+
`(n,M,d)` code in `F^n`. Let `B_q(n,d)` (also denoted `A^{lin}_q(n,d)`) denote
|
|
71
|
+
the largest `k` such that there exists a `[n,k,d]` code in `F^n`. (Of course,
|
|
72
|
+
`A_q(n,d)\geq B_q(n,d)`.) Determining `A_q(n,d)` and `B_q(n,d)` is one of the
|
|
73
|
+
main problems in the theory of error-correcting codes. For more details see
|
|
74
|
+
[HP2003]_ and [Lin1999]_.
|
|
75
|
+
|
|
76
|
+
These quantities related to solving a generalization of the
|
|
77
|
+
childhood game of "20 questions".
|
|
78
|
+
|
|
79
|
+
GAME: Player 1 secretly chooses a number from `1` to
|
|
80
|
+
`M` (`M` is large but fixed). Player 2 asks a
|
|
81
|
+
series of "yes/no questions" in an attempt to determine that
|
|
82
|
+
number. Player 1 may lie at most `e` times
|
|
83
|
+
(`e\geq 0` is fixed). What is the minimum number of "yes/no
|
|
84
|
+
questions" Player 2 must ask to (always) be able to correctly
|
|
85
|
+
determine the number Player 1 chose?
|
|
86
|
+
|
|
87
|
+
If feedback is not allowed (the only situation considered here),
|
|
88
|
+
call this minimum number `g(M,e)`.
|
|
89
|
+
|
|
90
|
+
Lemma: For fixed `e` and `M`, `g(M,e)` is
|
|
91
|
+
the smallest `n` such that `A_2(n,2e+1)\geq M`.
|
|
92
|
+
|
|
93
|
+
Thus, solving the solving a generalization of the game of "20
|
|
94
|
+
questions" is equivalent to determining `A_2(n,d)`! Using
|
|
95
|
+
Sage, you can determine the best known estimates for this number in
|
|
96
|
+
2 ways:
|
|
97
|
+
|
|
98
|
+
1. Indirectly, using ``best_known_linear_code_www(n, k, F)``,
|
|
99
|
+
which connects to the website http://www.codetables.de by Markus Grassl;
|
|
100
|
+
|
|
101
|
+
2. ``codesize_upper_bound(n,d,q)``, ``dimension_upper_bound(n,d,q)``,
|
|
102
|
+
and ``best_known_linear_code(n, k, F)``.
|
|
103
|
+
|
|
104
|
+
The output of :func:`best_known_linear_code`,
|
|
105
|
+
:func:`best_known_linear_code_www`, or :func:`dimension_upper_bound` would
|
|
106
|
+
give only special solutions to the GAME because the bounds are applicable
|
|
107
|
+
to only linear codes. The output of :func:`codesize_upper_bound` would give
|
|
108
|
+
the best possible solution, that may belong to a linear or nonlinear code.
|
|
109
|
+
|
|
110
|
+
This module implements:
|
|
111
|
+
|
|
112
|
+
- ``codesize_upper_bound(n,d,q)``, for the best known (as of May, 2006) upper
|
|
113
|
+
bound `A(n,d)` for the size of a code of length `n`, minimum distance `d`
|
|
114
|
+
over a field of size `q`.
|
|
115
|
+
|
|
116
|
+
- ``dimension_upper_bound(n,d,q)``, an upper bound `B(n,d)=B_q(n,d)` for the
|
|
117
|
+
dimension of a linear code of length `n`, minimum distance `d` over a field
|
|
118
|
+
of size `q`.
|
|
119
|
+
|
|
120
|
+
- ``gilbert_lower_bound(n,q,d)``, a lower bound for number of elements in the
|
|
121
|
+
largest code of min distance `d` in `\GF{q}^n`.
|
|
122
|
+
|
|
123
|
+
- ``gv_info_rate(n,delta,q)``, `log_q(GLB)/n`, where GLB is the Gilbert lower
|
|
124
|
+
bound and `\delta = d/n`.
|
|
125
|
+
|
|
126
|
+
- ``gv_bound_asymp(delta,q)``, asymptotic analog of Gilbert lower bound.
|
|
127
|
+
|
|
128
|
+
- ``plotkin_upper_bound(n,q,d)``
|
|
129
|
+
|
|
130
|
+
- ``plotkin_bound_asymp(delta,q)``, asymptotic analog of Plotkin bound.
|
|
131
|
+
|
|
132
|
+
- ``griesmer_upper_bound(n,q,d)``
|
|
133
|
+
|
|
134
|
+
- ``elias_upper_bound(n,q,d)``
|
|
135
|
+
|
|
136
|
+
- ``elias_bound_asymp(delta,q)``, asymptotic analog of Elias bound.
|
|
137
|
+
|
|
138
|
+
- ``hamming_upper_bound(n,q,d)``
|
|
139
|
+
|
|
140
|
+
- ``hamming_bound_asymp(delta,q)``, asymptotic analog of Hamming bound.
|
|
141
|
+
|
|
142
|
+
- ``singleton_upper_bound(n,q,d)``
|
|
143
|
+
|
|
144
|
+
- ``singleton_bound_asymp(delta,q)``, asymptotic analog of Singleton bound.
|
|
145
|
+
|
|
146
|
+
- ``mrrw1_bound_asymp(delta,q)``, "first" asymptotic
|
|
147
|
+
McEliese-Rumsey-Rodemich-Welsh bound for the information rate.
|
|
148
|
+
|
|
149
|
+
- Delsarte (a.k.a. Linear Programming (LP)) upper bounds.
|
|
150
|
+
|
|
151
|
+
PROBLEM: In this module we shall typically either (a) seek bounds on `k`, given
|
|
152
|
+
`n`, `d`, `q`, (b) seek bounds on `R`, `\delta`, `q` (assuming `n` is
|
|
153
|
+
"infinity").
|
|
154
|
+
|
|
155
|
+
.. TODO::
|
|
156
|
+
|
|
157
|
+
- Johnson bounds for binary codes.
|
|
158
|
+
|
|
159
|
+
- mrrw2_bound_asymp(delta,q), "second" asymptotic
|
|
160
|
+
McEliese-Rumsey-Rodemich-Welsh bound for the information rate.
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
# ****************************************************************************
|
|
164
|
+
# Copyright (C) 2006 David Joyner <wdj@usna.edu>
|
|
165
|
+
# 2006 William Stein <wstein@gmail.com>
|
|
166
|
+
#
|
|
167
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
168
|
+
#
|
|
169
|
+
# https://www.gnu.org/licenses/
|
|
170
|
+
# ****************************************************************************
|
|
171
|
+
|
|
172
|
+
from sage.arith.misc import binomial, is_prime_power
|
|
173
|
+
from sage.features.gap import GapPackage
|
|
174
|
+
from sage.misc.functional import sqrt, log
|
|
175
|
+
from sage.misc.lazy_import import lazy_import
|
|
176
|
+
from sage.rings.integer_ring import ZZ
|
|
177
|
+
from sage.rings.rational_field import QQ
|
|
178
|
+
from sage.rings.real_double import RDF
|
|
179
|
+
|
|
180
|
+
from .delsarte_bounds import (delsarte_bound_hamming_space,
|
|
181
|
+
delsarte_bound_additive_hamming_space)
|
|
182
|
+
|
|
183
|
+
lazy_import('sage.libs.gap.libgap', 'libgap')
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def _check_n_q_d(n, q, d, field_based=True):
|
|
187
|
+
r"""
|
|
188
|
+
Check that the length `n`, alphabet size `q` and minimum distance `d` type
|
|
189
|
+
check and make sense for a code over a field.
|
|
190
|
+
|
|
191
|
+
More precisely, this checks that the parameters are positive
|
|
192
|
+
integers, that `q` is a prime power for codes over a field, or,
|
|
193
|
+
more generally, that `q` is of size at least 2, and that `n >= d`.
|
|
194
|
+
This raises a :exc:`ValueError` otherwise.
|
|
195
|
+
|
|
196
|
+
TESTS::
|
|
197
|
+
|
|
198
|
+
sage: # needs sage.libs.pari
|
|
199
|
+
sage: from sage.coding.code_bounds import _check_n_q_d
|
|
200
|
+
sage: _check_n_q_d(20, 16, 5)
|
|
201
|
+
True
|
|
202
|
+
sage: _check_n_q_d(20, 16, 6, field_based=False)
|
|
203
|
+
True
|
|
204
|
+
sage: _check_n_q_d(20, 21, 16)
|
|
205
|
+
Traceback (most recent call last):
|
|
206
|
+
...
|
|
207
|
+
ValueError: The alphabet size does not make sense for a code over a field
|
|
208
|
+
sage: _check_n_q_d(20, -21, 16)
|
|
209
|
+
Traceback (most recent call last):
|
|
210
|
+
...
|
|
211
|
+
ValueError: The alphabet size must be an integer >1
|
|
212
|
+
sage: _check_n_q_d(20, 2, 26)
|
|
213
|
+
Traceback (most recent call last):
|
|
214
|
+
...
|
|
215
|
+
ValueError: The length or minimum distance does not make sense
|
|
216
|
+
"""
|
|
217
|
+
if q not in ZZ or q < 2:
|
|
218
|
+
raise ValueError("The alphabet size must be an integer >1")
|
|
219
|
+
if field_based and not is_prime_power(q):
|
|
220
|
+
raise ValueError("The alphabet size does not make sense for a code over a field")
|
|
221
|
+
if not (0 < d <= n and n in ZZ and d in ZZ):
|
|
222
|
+
raise ValueError("The length or minimum distance does not make sense")
|
|
223
|
+
return True
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def codesize_upper_bound(n, d, q, algorithm=None):
|
|
227
|
+
r"""
|
|
228
|
+
Return an upper bound on the number of codewords in a (possibly non-linear)
|
|
229
|
+
code.
|
|
230
|
+
|
|
231
|
+
This function computes the minimum value of the upper bounds of Singleton,
|
|
232
|
+
Hamming, Plotkin, and Elias.
|
|
233
|
+
|
|
234
|
+
If ``algorithm="gap"``, then this returns the best known upper
|
|
235
|
+
bound `A(n,d)=A_q(n,d)` for the size of a code of length `n`,
|
|
236
|
+
minimum distance `d` over a field of size `q`. The function first
|
|
237
|
+
checks for trivial cases (like `d=1` or `n=d`), and if the value
|
|
238
|
+
is in the built-in table. Then it calculates the minimum value
|
|
239
|
+
of the upper bound using the algorithms of Singleton, Hamming,
|
|
240
|
+
Johnson, Plotkin and Elias. If the code is binary,
|
|
241
|
+
`A(n, 2\ell-1) = A(n+1,2\ell)`, so the function
|
|
242
|
+
takes the minimum of the values obtained from all algorithms for the
|
|
243
|
+
parameters `(n, 2\ell-1)` and `(n+1, 2\ell)`. This
|
|
244
|
+
wraps GUAVA's (i.e. GAP's package Guava) ``UpperBound(n, d, q)``.
|
|
245
|
+
|
|
246
|
+
If ``algorithm="LP"``, then this returns the Delsarte (a.k.a. Linear
|
|
247
|
+
Programming) upper bound.
|
|
248
|
+
|
|
249
|
+
EXAMPLES::
|
|
250
|
+
|
|
251
|
+
sage: codes.bounds.codesize_upper_bound(10, 3, 2)
|
|
252
|
+
93
|
|
253
|
+
sage: codes.bounds.codesize_upper_bound(24, 8, 2, algorithm='LP') # needs sage.numerical.mip
|
|
254
|
+
4096
|
|
255
|
+
sage: codes.bounds.codesize_upper_bound(10, 3, 2, algorithm='gap') # optional - gap_package_guava
|
|
256
|
+
85
|
|
257
|
+
sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm=None) # needs sage.symbolic
|
|
258
|
+
123361
|
|
259
|
+
sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm='gap') # optional - gap_package_guava
|
|
260
|
+
123361
|
|
261
|
+
sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm='LP') # needs sage.numerical.mip
|
|
262
|
+
109226
|
|
263
|
+
|
|
264
|
+
TESTS:
|
|
265
|
+
|
|
266
|
+
Make sure :issue:`22961` is fixed::
|
|
267
|
+
|
|
268
|
+
sage: codes.bounds.codesize_upper_bound(19, 10, 2)
|
|
269
|
+
20
|
|
270
|
+
sage: codes.bounds.codesize_upper_bound(19, 10, 2, algorithm='gap') # optional - gap_package_guava
|
|
271
|
+
20
|
|
272
|
+
|
|
273
|
+
Meaningless parameters are rejected::
|
|
274
|
+
|
|
275
|
+
sage: codes.bounds.codesize_upper_bound(10, -20, 6)
|
|
276
|
+
Traceback (most recent call last):
|
|
277
|
+
...
|
|
278
|
+
ValueError: The length or minimum distance does not make sense
|
|
279
|
+
"""
|
|
280
|
+
_check_n_q_d(n, q, d, field_based=False)
|
|
281
|
+
if algorithm == "gap":
|
|
282
|
+
GapPackage("guava", spkg='gap_packages').require()
|
|
283
|
+
libgap.load_package('guava')
|
|
284
|
+
return int(libgap.UpperBound(n, d, q))
|
|
285
|
+
if algorithm == "LP":
|
|
286
|
+
return int(delsarte_bound_hamming_space(n, d, q))
|
|
287
|
+
else:
|
|
288
|
+
eub = elias_upper_bound(n, q, d)
|
|
289
|
+
hub = hamming_upper_bound(n, q, d)
|
|
290
|
+
pub = plotkin_upper_bound(n, q, d)
|
|
291
|
+
sub = singleton_upper_bound(n, q, d)
|
|
292
|
+
return min([eub, hub, pub, sub])
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def dimension_upper_bound(n, d, q, algorithm=None):
|
|
296
|
+
r"""
|
|
297
|
+
Return an upper bound for the dimension of a linear code.
|
|
298
|
+
|
|
299
|
+
Return an upper bound `B(n,d) = B_q(n,d)` for the
|
|
300
|
+
dimension of a linear code of length `n`, minimum distance `d` over a
|
|
301
|
+
field of size `q`.
|
|
302
|
+
|
|
303
|
+
Parameter ``algorithm`` has the same meaning as in
|
|
304
|
+
:func:`codesize_upper_bound`
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: codes.bounds.dimension_upper_bound(10,3,2) # needs sage.libs.pari sage.symbolic
|
|
309
|
+
6
|
|
310
|
+
sage: codes.bounds.dimension_upper_bound(30,15,4) # needs sage.libs.pari sage.symbolic
|
|
311
|
+
13
|
|
312
|
+
sage: codes.bounds.dimension_upper_bound(30,15,4,algorithm='LP') # needs sage.libs.pari sage.numerical.mip
|
|
313
|
+
12
|
|
314
|
+
|
|
315
|
+
TESTS:
|
|
316
|
+
|
|
317
|
+
Meaningless code parameters are rejected::
|
|
318
|
+
|
|
319
|
+
sage: codes.bounds.dimension_upper_bound(13,3,6) # needs sage.libs.pari
|
|
320
|
+
Traceback (most recent call last):
|
|
321
|
+
...
|
|
322
|
+
ValueError: The alphabet size does not make sense for a code over a field
|
|
323
|
+
"""
|
|
324
|
+
_check_n_q_d(n, q, d)
|
|
325
|
+
q = ZZ(q)
|
|
326
|
+
if algorithm == "LP":
|
|
327
|
+
return delsarte_bound_additive_hamming_space(n, d, q)
|
|
328
|
+
# algorithm == None or algorithm == "gap":
|
|
329
|
+
return int(ZZ(codesize_upper_bound(n, d, q, algorithm=algorithm)).log(q))
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def volume_hamming(n, q, r):
|
|
333
|
+
r"""
|
|
334
|
+
Return the number of elements in a Hamming ball.
|
|
335
|
+
|
|
336
|
+
Return the number of elements in a Hamming ball of radius `r` in
|
|
337
|
+
`\GF{q}^n`.
|
|
338
|
+
|
|
339
|
+
EXAMPLES::
|
|
340
|
+
|
|
341
|
+
sage: codes.bounds.volume_hamming(10,2,3)
|
|
342
|
+
176
|
|
343
|
+
"""
|
|
344
|
+
return sum([binomial(n, i) * (q-1)**i
|
|
345
|
+
for i in range(r+1)])
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def gilbert_lower_bound(n, q, d):
|
|
349
|
+
r"""
|
|
350
|
+
Return the Gilbert-Varshamov lower bound.
|
|
351
|
+
|
|
352
|
+
Return the Gilbert-Varshamov lower bound for number of elements in a largest code of
|
|
353
|
+
minimum distance d in `\GF{q}^n`. See :wikipedia:`Gilbert-Varshamov_bound`
|
|
354
|
+
|
|
355
|
+
EXAMPLES::
|
|
356
|
+
|
|
357
|
+
sage: codes.bounds.gilbert_lower_bound(10,2,3)
|
|
358
|
+
128/7
|
|
359
|
+
"""
|
|
360
|
+
_check_n_q_d(n, q, d, field_based=False)
|
|
361
|
+
ans = q**n/volume_hamming(n,q,d-1)
|
|
362
|
+
return ans
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
def plotkin_upper_bound(n, q, d, algorithm=None):
|
|
366
|
+
r"""
|
|
367
|
+
Return the Plotkin upper bound.
|
|
368
|
+
|
|
369
|
+
Return the Plotkin upper bound for the number of elements in a largest
|
|
370
|
+
code of minimum distance `d` in `\GF{q}^n`.
|
|
371
|
+
More precisely this is a generalization of Plotkin's result for `q=2`
|
|
372
|
+
to bigger `q` due to Berlekamp.
|
|
373
|
+
|
|
374
|
+
The ``algorithm="gap"`` option wraps Guava's ``UpperBoundPlotkin``.
|
|
375
|
+
|
|
376
|
+
EXAMPLES::
|
|
377
|
+
|
|
378
|
+
sage: codes.bounds.plotkin_upper_bound(10,2,3)
|
|
379
|
+
192
|
|
380
|
+
sage: codes.bounds.plotkin_upper_bound(10,2,3,algorithm='gap') # optional - gap_package_guava
|
|
381
|
+
192
|
|
382
|
+
"""
|
|
383
|
+
_check_n_q_d(n, q, d, field_based=False)
|
|
384
|
+
if algorithm == "gap":
|
|
385
|
+
GapPackage("guava", spkg='gap_packages').require()
|
|
386
|
+
libgap.load_package("guava")
|
|
387
|
+
return QQ(libgap.UpperBoundPlotkin(n, d, q))
|
|
388
|
+
else:
|
|
389
|
+
t = 1 - 1/q
|
|
390
|
+
if (q == 2) and (n == 2*d) and (d % 2 == 0):
|
|
391
|
+
return 4*d
|
|
392
|
+
elif (q == 2) and (n == 2*d + 1) and (d % 2 == 1):
|
|
393
|
+
return 4*d + 4
|
|
394
|
+
elif d > t*n:
|
|
395
|
+
return int(d/( d - t*n))
|
|
396
|
+
elif d < t*n + 1:
|
|
397
|
+
fact = (d-1) / t
|
|
398
|
+
from sage.rings.real_mpfr import RR
|
|
399
|
+
if RR(fact) == RR(int(fact)):
|
|
400
|
+
fact = int(fact) + 1
|
|
401
|
+
return int(d/( d - t * fact)) * q**(n - fact)
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
def griesmer_upper_bound(n, q, d, algorithm=None):
|
|
405
|
+
r"""
|
|
406
|
+
Return the Griesmer upper bound.
|
|
407
|
+
|
|
408
|
+
Return the Griesmer upper bound for the number of elements in a
|
|
409
|
+
largest linear code of minimum distance `d` in `\GF{q}^n`, cf. [HP2003]_.
|
|
410
|
+
If the method is "gap", it wraps GAP's ``UpperBoundGriesmer``.
|
|
411
|
+
|
|
412
|
+
The bound states:
|
|
413
|
+
|
|
414
|
+
.. MATH::
|
|
415
|
+
|
|
416
|
+
`n\geq \sum_{i=0}^{k-1} \lceil d/q^i \rceil.`
|
|
417
|
+
|
|
418
|
+
EXAMPLES:
|
|
419
|
+
|
|
420
|
+
The bound is reached for the ternary Golay codes::
|
|
421
|
+
|
|
422
|
+
sage: codes.bounds.griesmer_upper_bound(12,3,6) # needs sage.libs.pari
|
|
423
|
+
729
|
|
424
|
+
sage: codes.bounds.griesmer_upper_bound(11,3,5) # needs sage.libs.pari
|
|
425
|
+
729
|
|
426
|
+
|
|
427
|
+
::
|
|
428
|
+
|
|
429
|
+
sage: codes.bounds.griesmer_upper_bound(10,2,3) # needs sage.libs.pari
|
|
430
|
+
128
|
|
431
|
+
sage: codes.bounds.griesmer_upper_bound(10,2,3,algorithm='gap') # optional - gap_package_guava, needs sage.libs.pari
|
|
432
|
+
128
|
|
433
|
+
|
|
434
|
+
TESTS::
|
|
435
|
+
|
|
436
|
+
sage: codes.bounds.griesmer_upper_bound(11,3,6) # needs sage.libs.pari
|
|
437
|
+
243
|
|
438
|
+
sage: codes.bounds.griesmer_upper_bound(11,3,6) # needs sage.libs.pari
|
|
439
|
+
243
|
|
440
|
+
"""
|
|
441
|
+
_check_n_q_d(n, q, d)
|
|
442
|
+
if algorithm == "gap":
|
|
443
|
+
GapPackage("guava", spkg='gap_packages').require()
|
|
444
|
+
libgap.load_package("guava")
|
|
445
|
+
return QQ(libgap.UpperBoundGriesmer(n, d, q))
|
|
446
|
+
else:
|
|
447
|
+
# To compute the bound, we keep summing up the terms on the RHS
|
|
448
|
+
# until we start violating the inequality.
|
|
449
|
+
from sage.arith.misc import integer_ceil as ceil
|
|
450
|
+
den = 1
|
|
451
|
+
s = 0
|
|
452
|
+
k = 0
|
|
453
|
+
while s <= n:
|
|
454
|
+
s += ceil(d/den)
|
|
455
|
+
den *= q
|
|
456
|
+
k = k + 1
|
|
457
|
+
return q**(k-1)
|
|
458
|
+
|
|
459
|
+
|
|
460
|
+
def elias_upper_bound(n, q, d, algorithm=None):
|
|
461
|
+
r"""
|
|
462
|
+
Return the Elias upper bound.
|
|
463
|
+
|
|
464
|
+
Return the Elias upper bound for number of elements in the largest
|
|
465
|
+
code of minimum distance `d` in `\GF{q}^n`, cf. [HP2003]_.
|
|
466
|
+
If ``algorithm="gap"``, it wraps GAP's ``UpperBoundElias``.
|
|
467
|
+
|
|
468
|
+
EXAMPLES::
|
|
469
|
+
|
|
470
|
+
sage: codes.bounds.elias_upper_bound(10,2,3)
|
|
471
|
+
232
|
|
472
|
+
sage: codes.bounds.elias_upper_bound(10,2,3,algorithm='gap') # optional - gap_package_guava
|
|
473
|
+
232
|
|
474
|
+
"""
|
|
475
|
+
_check_n_q_d(n, q, d, field_based=False)
|
|
476
|
+
r = 1-1/q
|
|
477
|
+
if algorithm == "gap":
|
|
478
|
+
GapPackage("guava", spkg='gap_packages').require()
|
|
479
|
+
libgap.load_package("guava")
|
|
480
|
+
return QQ(libgap.UpperBoundElias(n, d, q))
|
|
481
|
+
else:
|
|
482
|
+
def ff(n, d, w, q):
|
|
483
|
+
return r*n*d*q**n/((w**2-2*r*n*w+r*n*d)*volume_hamming(n,q,w))
|
|
484
|
+
|
|
485
|
+
I = (i for i in range(1, int(r*n) + 1) if i**2 - 2*r*n*i + r*n*d > 0)
|
|
486
|
+
bnd = min([ff(n, d, w, q) for w in I])
|
|
487
|
+
return int(bnd)
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
def hamming_upper_bound(n, q, d):
|
|
491
|
+
r"""
|
|
492
|
+
Return the Hamming upper bound.
|
|
493
|
+
|
|
494
|
+
Return the Hamming upper bound for number of elements in the
|
|
495
|
+
largest code of length `n` and minimum distance `d` over alphabet
|
|
496
|
+
of size `q`.
|
|
497
|
+
|
|
498
|
+
The Hamming bound (also known as the sphere packing bound) returns
|
|
499
|
+
an upper bound on the size of a code of length `n`, minimum distance
|
|
500
|
+
`d`, over an alphabet of size `q`. The Hamming bound is obtained by
|
|
501
|
+
dividing the contents of the entire Hamming space
|
|
502
|
+
`q^n` by the contents of a ball with radius
|
|
503
|
+
`floor((d-1)/2)`. As all these balls are disjoint, they can never
|
|
504
|
+
contain more than the whole vector space.
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
.. MATH::
|
|
508
|
+
|
|
509
|
+
M \leq \frac{q^n}{V(n,e)},
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
where `M` is the maximum number of codewords and `V(n,e)` is
|
|
513
|
+
equal to the contents of a ball of radius `e`. This bound is useful
|
|
514
|
+
for small values of `d`. Codes for which equality holds are called
|
|
515
|
+
perfect. See e.g. [HP2003]_.
|
|
516
|
+
|
|
517
|
+
EXAMPLES::
|
|
518
|
+
|
|
519
|
+
sage: codes.bounds.hamming_upper_bound(10,2,3)
|
|
520
|
+
93
|
|
521
|
+
"""
|
|
522
|
+
_check_n_q_d(n, q, d, field_based=False)
|
|
523
|
+
return int((q**n)/(volume_hamming(n, q, int((d-1)/2))))
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
def singleton_upper_bound(n, q, d):
|
|
527
|
+
r"""
|
|
528
|
+
Return the Singleton upper bound.
|
|
529
|
+
|
|
530
|
+
Return the Singleton upper bound for number of elements in a
|
|
531
|
+
largest code of minimum distance `d` in `\GF{q}^n`.
|
|
532
|
+
|
|
533
|
+
This bound is based on the shortening of codes. By shortening an
|
|
534
|
+
`(n, M, d)` code `d-1` times, an `(n-d+1,M,1)` code
|
|
535
|
+
results, with `M \leq q^n-d+1`. Thus
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
.. MATH::
|
|
539
|
+
|
|
540
|
+
M \leq q^{n-d+1}.
|
|
541
|
+
|
|
542
|
+
|
|
543
|
+
Codes that meet this bound are called maximum distance separable
|
|
544
|
+
(MDS).
|
|
545
|
+
|
|
546
|
+
EXAMPLES::
|
|
547
|
+
|
|
548
|
+
sage: codes.bounds.singleton_upper_bound(10,2,3)
|
|
549
|
+
256
|
|
550
|
+
"""
|
|
551
|
+
_check_n_q_d(n, q, d, field_based=False)
|
|
552
|
+
return q**(n - d + 1)
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
def gv_info_rate(n, delta, q):
|
|
556
|
+
r"""
|
|
557
|
+
The Gilbert-Varshamov lower bound for information rate.
|
|
558
|
+
|
|
559
|
+
The Gilbert-Varshamov lower bound for information rate of a `q`-ary code of
|
|
560
|
+
length `n` and minimum distance `n\delta`.
|
|
561
|
+
|
|
562
|
+
EXAMPLES::
|
|
563
|
+
|
|
564
|
+
sage: RDF(codes.bounds.gv_info_rate(100,1/4,3)) # abs tol 1e-15 # needs sage.libs.pari sage.symbolic
|
|
565
|
+
0.36704992608261894
|
|
566
|
+
"""
|
|
567
|
+
q = ZZ(q)
|
|
568
|
+
return log(gilbert_lower_bound(n,q,int(n*delta)),q)/n
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
def entropy(x, q=2):
|
|
572
|
+
"""
|
|
573
|
+
Compute the entropy at `x` on the `q`-ary symmetric channel.
|
|
574
|
+
|
|
575
|
+
INPUT:
|
|
576
|
+
|
|
577
|
+
- ``x`` -- real number in the interval `[0, 1]`
|
|
578
|
+
|
|
579
|
+
- ``q`` -- (default: 2) integer greater than 1; this is the base of the
|
|
580
|
+
logarithm
|
|
581
|
+
|
|
582
|
+
EXAMPLES::
|
|
583
|
+
|
|
584
|
+
sage: codes.bounds.entropy(0, 2)
|
|
585
|
+
0
|
|
586
|
+
sage: codes.bounds.entropy(1/5,4).factor() # needs sage.symbolic
|
|
587
|
+
1/10*(log(3) - 4*log(4/5) - log(1/5))/log(2)
|
|
588
|
+
sage: codes.bounds.entropy(1, 3) # needs sage.symbolic
|
|
589
|
+
log(2)/log(3)
|
|
590
|
+
|
|
591
|
+
Check that values not within the limits are properly handled::
|
|
592
|
+
|
|
593
|
+
sage: codes.bounds.entropy(1.1, 2)
|
|
594
|
+
Traceback (most recent call last):
|
|
595
|
+
...
|
|
596
|
+
ValueError: The entropy function is defined only for x in the interval [0, 1]
|
|
597
|
+
sage: codes.bounds.entropy(1, 1)
|
|
598
|
+
Traceback (most recent call last):
|
|
599
|
+
...
|
|
600
|
+
ValueError: The value q must be an integer greater than 1
|
|
601
|
+
"""
|
|
602
|
+
if x < 0 or x > 1:
|
|
603
|
+
raise ValueError("The entropy function is defined only for x in the"
|
|
604
|
+
" interval [0, 1]")
|
|
605
|
+
q = ZZ(q) # This will error out if q is not an integer
|
|
606
|
+
if q < 2: # Here we check that q is actually at least 2
|
|
607
|
+
raise ValueError("The value q must be an integer greater than 1")
|
|
608
|
+
if x == 0:
|
|
609
|
+
return 0
|
|
610
|
+
if x == 1:
|
|
611
|
+
return log(q-1,q)
|
|
612
|
+
H = x*log(q-1,q)-x*log(x,q)-(1-x)*log(1-x,q)
|
|
613
|
+
return H
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
def entropy_inverse(x, q=2):
|
|
617
|
+
"""
|
|
618
|
+
Find the inverse of the `q`-ary entropy function at the point ``x``.
|
|
619
|
+
|
|
620
|
+
INPUT:
|
|
621
|
+
|
|
622
|
+
- ``x`` -- real number in the interval `[0, 1]`
|
|
623
|
+
|
|
624
|
+
- ``q`` -- (default: 2) integer greater than 1; this is the base of the
|
|
625
|
+
logarithm
|
|
626
|
+
|
|
627
|
+
OUTPUT:
|
|
628
|
+
|
|
629
|
+
Real number in the interval `[0, 1-1/q]`. The function has multiple
|
|
630
|
+
values if we include the entire interval `[0, 1]`; hence only the
|
|
631
|
+
values in the above interval is returned.
|
|
632
|
+
|
|
633
|
+
EXAMPLES::
|
|
634
|
+
|
|
635
|
+
sage: # needs sage.symbolic
|
|
636
|
+
sage: from sage.coding.code_bounds import entropy_inverse
|
|
637
|
+
sage: entropy_inverse(0.1) # needs scipy
|
|
638
|
+
0.012986862055...
|
|
639
|
+
sage: entropy_inverse(1)
|
|
640
|
+
1/2
|
|
641
|
+
sage: entropy_inverse(0, 3)
|
|
642
|
+
0
|
|
643
|
+
sage: entropy_inverse(1, 3)
|
|
644
|
+
2/3
|
|
645
|
+
"""
|
|
646
|
+
# No nice way to compute the inverse. We resort to root finding.
|
|
647
|
+
if x < 0 or x > 1:
|
|
648
|
+
raise ValueError("The inverse entropy function is defined only for "
|
|
649
|
+
"x in the interval [0, 1]")
|
|
650
|
+
q = ZZ(q) # This will error out if q is not an integer
|
|
651
|
+
if q < 2: # Here we check that q is actually at least 2
|
|
652
|
+
raise ValueError("The value q must be an integer greater than 1")
|
|
653
|
+
|
|
654
|
+
eps = 4.5e-16 # find_root has about this as the default xtol
|
|
655
|
+
ymax = 1 - 1/q
|
|
656
|
+
if x <= eps:
|
|
657
|
+
return 0
|
|
658
|
+
if x >= 1-eps:
|
|
659
|
+
return ymax
|
|
660
|
+
|
|
661
|
+
# find_root will error out if the root can not be found
|
|
662
|
+
from sage.numerical.optimize import find_root
|
|
663
|
+
f = lambda y: entropy(y, q) - x
|
|
664
|
+
return find_root(f, 0, ymax)
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
def gv_bound_asymp(delta, q):
|
|
668
|
+
"""
|
|
669
|
+
The asymptotic Gilbert-Varshamov bound for the information rate, R.
|
|
670
|
+
|
|
671
|
+
EXAMPLES::
|
|
672
|
+
|
|
673
|
+
sage: # needs sage.symbolic
|
|
674
|
+
sage: RDF(codes.bounds.gv_bound_asymp(1/4,2)) # needs sage.libs.pari
|
|
675
|
+
0.18872187554086...
|
|
676
|
+
sage: f = lambda x: codes.bounds.gv_bound_asymp(x,2)
|
|
677
|
+
sage: plot(f,0,1) # needs sage.libs.pari sage.plot
|
|
678
|
+
Graphics object consisting of 1 graphics primitive
|
|
679
|
+
"""
|
|
680
|
+
return 1 - entropy(delta, q)
|
|
681
|
+
|
|
682
|
+
|
|
683
|
+
def hamming_bound_asymp(delta, q):
|
|
684
|
+
"""
|
|
685
|
+
The asymptotic Hamming bound for the information rate.
|
|
686
|
+
|
|
687
|
+
EXAMPLES::
|
|
688
|
+
|
|
689
|
+
sage: # needs sage.symbolic
|
|
690
|
+
sage: RDF(codes.bounds.hamming_bound_asymp(1/4,2)) # needs sage.libs.pari
|
|
691
|
+
0.456435556800...
|
|
692
|
+
sage: f = lambda x: codes.bounds.hamming_bound_asymp(x,2)
|
|
693
|
+
sage: plot(f,0,1) # needs sage.libs.pari sage.plot
|
|
694
|
+
Graphics object consisting of 1 graphics primitive
|
|
695
|
+
"""
|
|
696
|
+
return 1 - entropy(delta / 2, q)
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
def singleton_bound_asymp(delta, q):
|
|
700
|
+
"""
|
|
701
|
+
The asymptotic Singleton bound for the information rate.
|
|
702
|
+
|
|
703
|
+
EXAMPLES::
|
|
704
|
+
|
|
705
|
+
sage: codes.bounds.singleton_bound_asymp(1/4,2)
|
|
706
|
+
3/4
|
|
707
|
+
sage: f = lambda x: codes.bounds.singleton_bound_asymp(x,2)
|
|
708
|
+
sage: plot(f,0,1) # needs sage.plot
|
|
709
|
+
Graphics object consisting of 1 graphics primitive
|
|
710
|
+
"""
|
|
711
|
+
return 1 - delta
|
|
712
|
+
|
|
713
|
+
|
|
714
|
+
def plotkin_bound_asymp(delta, q):
|
|
715
|
+
r"""
|
|
716
|
+
The asymptotic Plotkin bound for the information rate.
|
|
717
|
+
|
|
718
|
+
This only makes sense when `0 < \delta < 1-1/q`.
|
|
719
|
+
|
|
720
|
+
EXAMPLES::
|
|
721
|
+
|
|
722
|
+
sage: codes.bounds.plotkin_bound_asymp(1/4,2)
|
|
723
|
+
1/2
|
|
724
|
+
"""
|
|
725
|
+
r = 1 - 1 / q
|
|
726
|
+
return 1 - delta / r
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
def elias_bound_asymp(delta, q):
|
|
730
|
+
r"""
|
|
731
|
+
The asymptotic Elias bound for the information rate.
|
|
732
|
+
|
|
733
|
+
This only makes sense when `0 < \delta < 1-1/q`.
|
|
734
|
+
|
|
735
|
+
EXAMPLES::
|
|
736
|
+
|
|
737
|
+
sage: codes.bounds.elias_bound_asymp(1/4,2) # needs sage.symbolic
|
|
738
|
+
0.39912396330...
|
|
739
|
+
"""
|
|
740
|
+
r = 1 - 1 / q
|
|
741
|
+
return RDF(1-entropy(r-sqrt(r*(r-delta)), q))
|
|
742
|
+
|
|
743
|
+
|
|
744
|
+
def mrrw1_bound_asymp(delta, q):
|
|
745
|
+
r"""
|
|
746
|
+
The first asymptotic McEliese-Rumsey-Rodemich-Welsh bound.
|
|
747
|
+
|
|
748
|
+
This only makes sense when `0 < \delta < 1-1/q`.
|
|
749
|
+
|
|
750
|
+
EXAMPLES::
|
|
751
|
+
|
|
752
|
+
sage: codes.bounds.mrrw1_bound_asymp(1/4,2) # abs tol 4e-16 # needs sage.symbolic
|
|
753
|
+
0.3545789026652697
|
|
754
|
+
"""
|
|
755
|
+
return RDF(entropy((q-1-delta*(q-2)-2*sqrt((q-1)*delta*(1-delta)))/q,q))
|