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,409 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.modules sage.rings.finite_rings
|
|
3
|
+
"""
|
|
4
|
+
Interpolation algorithms for the Guruswami-Sudan decoder
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Johan S. R. Nielsen, original implementation (see [Nie]_ for details)
|
|
9
|
+
- David Lucas, ported the original implementation in Sage
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ****************************************************************************
|
|
13
|
+
# Copyright (C) 2015 David Lucas <david.lucas@inria.fr>
|
|
14
|
+
# 2015 Johan S. R. Nielsen <jsrn@jsrn.dk>
|
|
15
|
+
#
|
|
16
|
+
# This program is free software: you can redistribute it and/or modify
|
|
17
|
+
# it under the terms of the GNU General Public License as published by
|
|
18
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
19
|
+
# (at your option) any later version.
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ****************************************************************************
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
from sage.arith.misc import binomial
|
|
25
|
+
from sage.matrix.constructor import matrix
|
|
26
|
+
from sage.misc.misc_c import prod
|
|
27
|
+
|
|
28
|
+
# ###################### Linear algebra system solving ###############################
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _flatten_once(lstlst):
|
|
32
|
+
r"""
|
|
33
|
+
Flattens a list of list into a list, but only flattening one layer and
|
|
34
|
+
returns a generator.
|
|
35
|
+
|
|
36
|
+
This is similar to Python's ``flatten`` method, except that here, if you
|
|
37
|
+
provide a list of lists of lists (and so on), it returns a list of lists
|
|
38
|
+
(and so on) and not a list.
|
|
39
|
+
|
|
40
|
+
INPUT:
|
|
41
|
+
|
|
42
|
+
- ``lstlst`` -- list of lists
|
|
43
|
+
|
|
44
|
+
EXAMPLES::
|
|
45
|
+
|
|
46
|
+
sage: from sage.coding.guruswami_sudan.interpolation import _flatten_once
|
|
47
|
+
sage: ll = [[1,2], [3,4], [5,6]]
|
|
48
|
+
sage: list(_flatten_once(ll))
|
|
49
|
+
[1, 2, 3, 4, 5, 6]
|
|
50
|
+
"""
|
|
51
|
+
for lst in lstlst:
|
|
52
|
+
yield from lst
|
|
53
|
+
|
|
54
|
+
# *************************************************************
|
|
55
|
+
# Linear algebraic Interpolation algorithm, helper functions
|
|
56
|
+
# *************************************************************
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _monomial_list(maxdeg, l, wy):
|
|
60
|
+
r"""
|
|
61
|
+
Return a list of all nonnegative integer pairs `(i,j)` such that ``i + wy
|
|
62
|
+
* j < maxdeg`` and ``j \geq l``.
|
|
63
|
+
|
|
64
|
+
INPUT:
|
|
65
|
+
|
|
66
|
+
- ``maxdeg``, ``l``, ``wy`` -- integers
|
|
67
|
+
|
|
68
|
+
OUTPUT: list of pairs of integers
|
|
69
|
+
|
|
70
|
+
EXAMPLES::
|
|
71
|
+
|
|
72
|
+
sage: from sage.coding.guruswami_sudan.interpolation import _monomial_list
|
|
73
|
+
sage: list(_monomial_list(8, 1, 3))
|
|
74
|
+
[(0, 0),
|
|
75
|
+
(1, 0),
|
|
76
|
+
(2, 0),
|
|
77
|
+
(3, 0),
|
|
78
|
+
(4, 0),
|
|
79
|
+
(5, 0),
|
|
80
|
+
(6, 0),
|
|
81
|
+
(7, 0),
|
|
82
|
+
(0, 1),
|
|
83
|
+
(1, 1),
|
|
84
|
+
(2, 1),
|
|
85
|
+
(3, 1),
|
|
86
|
+
(4, 1)]
|
|
87
|
+
"""
|
|
88
|
+
for y in range(l + 1):
|
|
89
|
+
for x in range(maxdeg - y * wy):
|
|
90
|
+
yield (x, y)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _interpolation_matrix_given_monomials(points, s, monomials):
|
|
94
|
+
r"""
|
|
95
|
+
Return a matrix whose nullspace is a basis for all interpolation
|
|
96
|
+
polynomials, each polynomial having its coefficients laid out according to
|
|
97
|
+
the given list of monomials.
|
|
98
|
+
|
|
99
|
+
The output is an `S \times T` matrix, where `T` is the length of
|
|
100
|
+
``monomials``, and `S = s(s+1)/2`. Its ``i``-th column will be the
|
|
101
|
+
coefficients on the ``i``-th monomial in ``monomials``.
|
|
102
|
+
|
|
103
|
+
INPUT:
|
|
104
|
+
|
|
105
|
+
- ``points`` -- list of pairs of field elements, the interpolation points
|
|
106
|
+
|
|
107
|
+
- ``s`` -- integer; the multiplicity parameter from Guruswami-Sudan algorithm
|
|
108
|
+
|
|
109
|
+
- ``monomials`` -- list of monomials, each represented by the powers as an integer pair `(i,j)`
|
|
110
|
+
|
|
111
|
+
EXAMPLES::
|
|
112
|
+
|
|
113
|
+
sage: from sage.coding.guruswami_sudan.interpolation import _interpolation_matrix_given_monomials
|
|
114
|
+
sage: F = GF(11)
|
|
115
|
+
sage: points = [ (F(0), F(1)), (F(1), F(5)) ]
|
|
116
|
+
sage: s = 2
|
|
117
|
+
sage: monomials = [(0, 0), (1, 0), (1, 1), (0, 2) ]
|
|
118
|
+
sage: _interpolation_matrix_given_monomials(points, s, monomials)
|
|
119
|
+
[ 1 0 0 1]
|
|
120
|
+
[ 0 0 0 2]
|
|
121
|
+
[ 0 1 1 0]
|
|
122
|
+
[ 1 1 5 3]
|
|
123
|
+
[ 0 0 1 10]
|
|
124
|
+
[ 0 1 5 0]
|
|
125
|
+
"""
|
|
126
|
+
def eqs_affine(x0, y0):
|
|
127
|
+
r"""
|
|
128
|
+
Make equation for the affine point x0, y0. Return a list of
|
|
129
|
+
equations, each equation being a list of coefficients corresponding to
|
|
130
|
+
the monomials in ``monomials``.
|
|
131
|
+
"""
|
|
132
|
+
eqs = []
|
|
133
|
+
for i in range(s):
|
|
134
|
+
for j in range(s - i):
|
|
135
|
+
eq = {}
|
|
136
|
+
for monomial in monomials:
|
|
137
|
+
ihat = monomial[0]
|
|
138
|
+
jhat = monomial[1]
|
|
139
|
+
if ihat >= i and jhat >= j:
|
|
140
|
+
icoeff = binomial(ihat, i) * x0**(ihat-i) \
|
|
141
|
+
if ihat > i else 1
|
|
142
|
+
jcoeff = binomial(jhat, j) * y0**(jhat-j) \
|
|
143
|
+
if jhat > j else 1
|
|
144
|
+
eq[monomial] = jcoeff * icoeff
|
|
145
|
+
eqs.append([eq.get(monomial, 0) for monomial in monomials])
|
|
146
|
+
return eqs
|
|
147
|
+
return matrix(list(_flatten_once([eqs_affine(*point) for point in points])))
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _interpolation_max_weighted_deg(n, tau, s):
|
|
151
|
+
"""Return the maximal weighted degree allowed for an interpolation
|
|
152
|
+
polynomial over `n` points, correcting `tau` errors and with multiplicity
|
|
153
|
+
`s`
|
|
154
|
+
|
|
155
|
+
EXAMPLES::
|
|
156
|
+
|
|
157
|
+
sage: from sage.coding.guruswami_sudan.interpolation import _interpolation_max_weighted_deg
|
|
158
|
+
sage: _interpolation_max_weighted_deg(10, 3, 5)
|
|
159
|
+
35
|
|
160
|
+
"""
|
|
161
|
+
return (n-tau) * s
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def _interpolation_matrix_problem(points, tau, parameters, wy):
|
|
165
|
+
r"""
|
|
166
|
+
Return the linear system of equations which ``Q`` should be a solution to.
|
|
167
|
+
|
|
168
|
+
This linear system is returned as a matrix ``M`` and a list of monomials ``monomials``,
|
|
169
|
+
where a vector in the right nullspace of ``M`` corresponds to an
|
|
170
|
+
interpolation polynomial `Q`, by mapping the `t`-th element of such a vector
|
|
171
|
+
to the coefficient to `x^iy^j`, where `(i,j)` is the `t`-th element of ``monomials``.
|
|
172
|
+
|
|
173
|
+
INPUT:
|
|
174
|
+
|
|
175
|
+
- ``points`` -- list of interpolation points, as pairs of field elements
|
|
176
|
+
|
|
177
|
+
- ``tau`` -- integer; the number of errors one wants to decode
|
|
178
|
+
|
|
179
|
+
- ``parameters`` -- (default: ``None``) a pair of integers, where:
|
|
180
|
+
|
|
181
|
+
- the first integer is the multiplicity parameter of Guruswami-Sudan algorithm and
|
|
182
|
+
- the second integer is the list size parameter.
|
|
183
|
+
|
|
184
|
+
- ``wy`` -- integer; specifying the `y`-weighted degree that is to be
|
|
185
|
+
minimised in the interpolation polynomial. In Guruswami-Sudan, this is
|
|
186
|
+
`k-1`, where `k` is the dimension of the GRS code.
|
|
187
|
+
|
|
188
|
+
EXAMPLES:
|
|
189
|
+
|
|
190
|
+
The following parameters arise from Guruswami-Sudan decoding of an [6,2,5]
|
|
191
|
+
GRS code over F(11) with multiplicity 2 and list size 4. ::
|
|
192
|
+
|
|
193
|
+
sage: from sage.coding.guruswami_sudan.interpolation import _interpolation_matrix_problem
|
|
194
|
+
sage: F = GF(11)
|
|
195
|
+
sage: points = [(F(x), F(y)) for (x,y) in [(0, 5), (1, 1), (2, 4), (3, 6), (4, 3), (5, 3)]]
|
|
196
|
+
sage: tau = 3
|
|
197
|
+
sage: params = (2, 4)
|
|
198
|
+
sage: wy = 1
|
|
199
|
+
sage: _interpolation_matrix_problem(points, tau, params, wy)
|
|
200
|
+
(
|
|
201
|
+
[ 1 0 0 0 0 0 5 0 0 0 0 3 0 0 0 4 0 0 9 0]
|
|
202
|
+
[ 0 0 0 0 0 0 1 0 0 0 0 10 0 0 0 9 0 0 5 0]
|
|
203
|
+
[ 0 1 0 0 0 0 0 5 0 0 0 0 3 0 0 0 4 0 0 9]
|
|
204
|
+
[ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
|
|
205
|
+
[ 0 0 0 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 4 4]
|
|
206
|
+
[ 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1]
|
|
207
|
+
[ 1 2 4 8 5 10 4 8 5 10 9 5 10 9 7 9 7 3 3 6]
|
|
208
|
+
[ 0 0 0 0 0 0 1 2 4 8 5 8 5 10 9 4 8 5 3 6]
|
|
209
|
+
[ 0 1 4 1 10 3 0 4 5 4 7 0 5 9 5 0 9 3 0 3]
|
|
210
|
+
[ 1 3 9 5 4 1 6 7 10 8 2 3 9 5 4 7 10 8 9 5]
|
|
211
|
+
[ 0 0 0 0 0 0 1 3 9 5 4 1 3 9 5 9 5 4 6 7]
|
|
212
|
+
[ 0 1 6 5 9 9 0 6 3 8 10 0 3 7 4 0 7 9 0 9]
|
|
213
|
+
[ 1 4 5 9 3 1 3 1 4 5 9 9 3 1 4 5 9 3 4 5]
|
|
214
|
+
[ 0 0 0 0 0 0 1 4 5 9 3 6 2 8 10 5 9 3 9 3]
|
|
215
|
+
[ 0 1 8 4 3 4 0 3 2 1 9 0 9 6 3 0 5 7 0 4]
|
|
216
|
+
[ 1 5 3 4 9 1 3 4 9 1 5 9 1 5 3 5 3 4 4 9]
|
|
217
|
+
[ 0 0 0 0 0 0 1 5 3 4 9 6 8 7 2 5 3 4 9 1]
|
|
218
|
+
[ 0 1 10 9 5 1 0 3 8 5 4 0 9 2 4 0 5 6 0 4], [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2), (1, 2), (2, 2), (3, 2), (0, 3), (1, 3), (2, 3), (0, 4), (1, 4)]
|
|
219
|
+
)
|
|
220
|
+
"""
|
|
221
|
+
s, l = parameters[0], parameters[1]
|
|
222
|
+
monomials = list(_monomial_list(_interpolation_max_weighted_deg(len(points), tau, s), l, wy))
|
|
223
|
+
M = _interpolation_matrix_given_monomials(points, s, monomials)
|
|
224
|
+
return (M, monomials)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def gs_interpolation_linalg(points, tau, parameters, wy):
|
|
228
|
+
r"""
|
|
229
|
+
Compute an interpolation polynomial `Q(x,y)` for the Guruswami-Sudan algorithm
|
|
230
|
+
by solving a linear system of equations.
|
|
231
|
+
|
|
232
|
+
`Q` is a bivariate polynomial over the field of the points, such that the
|
|
233
|
+
polynomial has a zero of multiplicity at least `s` at each of the points,
|
|
234
|
+
where `s` is the multiplicity parameter. Furthermore, its ``(1,
|
|
235
|
+
wy)``-weighted degree should be less than
|
|
236
|
+
``_interpolation_max_weighted_deg(n, tau, wy)``, where ``n`` is the number
|
|
237
|
+
of points
|
|
238
|
+
|
|
239
|
+
INPUT:
|
|
240
|
+
|
|
241
|
+
- ``points`` -- list of tuples ``(xi, yi)`` such that we seek ``Q`` with
|
|
242
|
+
``(xi,yi)`` being a root of ``Q`` with multiplicity ``s``
|
|
243
|
+
|
|
244
|
+
- ``tau`` -- integer; the number of errors one wants to decode
|
|
245
|
+
|
|
246
|
+
- ``parameters`` -- (default: ``None``) a pair of integers, where:
|
|
247
|
+
|
|
248
|
+
- the first integer is the multiplicity parameter of Guruswami-Sudan
|
|
249
|
+
algorithm and
|
|
250
|
+
- the second integer is the list size parameter.
|
|
251
|
+
|
|
252
|
+
- ``wy`` -- integer; the `y`-weight, where we seek `Q` of low
|
|
253
|
+
``(1, wy)``-weighted degree
|
|
254
|
+
|
|
255
|
+
EXAMPLES:
|
|
256
|
+
|
|
257
|
+
The following parameters arise from Guruswami-Sudan decoding of an [6,2,5]
|
|
258
|
+
GRS code over F(11) with multiplicity 2 and list size 4::
|
|
259
|
+
|
|
260
|
+
sage: from sage.coding.guruswami_sudan.interpolation import gs_interpolation_linalg
|
|
261
|
+
sage: F = GF(11)
|
|
262
|
+
sage: points = [(F(x), F(y))
|
|
263
|
+
....: for (x, y) in [(0, 5), (1, 1), (2, 4), (3, 6), (4, 3), (5, 3)]]
|
|
264
|
+
sage: tau = 3
|
|
265
|
+
sage: params = (2, 4)
|
|
266
|
+
sage: wy = 1
|
|
267
|
+
sage: Q = gs_interpolation_linalg(points, tau, params, wy); Q
|
|
268
|
+
4*x^5 - 4*x^4*y - 2*x^2*y^3 - x*y^4 + 3*x^4 - 4*x^2*y^2 + 5*y^4 - x^3 + x^2*y
|
|
269
|
+
+ 5*x*y^2 - 5*y^3 + 3*x*y - 2*y^2 + x - 4*y + 1
|
|
270
|
+
|
|
271
|
+
We verify that the interpolation polynomial has a zero of multiplicity at least 2 in each point::
|
|
272
|
+
|
|
273
|
+
sage: all( Q(x=a, y=b).is_zero() for (a,b) in points )
|
|
274
|
+
True
|
|
275
|
+
sage: x,y = Q.parent().gens()
|
|
276
|
+
sage: dQdx = Q.derivative(x)
|
|
277
|
+
sage: all( dQdx(x=a, y=b).is_zero() for (a,b) in points )
|
|
278
|
+
True
|
|
279
|
+
sage: dQdy = Q.derivative(y)
|
|
280
|
+
sage: all( dQdy(x=a, y=b).is_zero() for (a,b) in points )
|
|
281
|
+
True
|
|
282
|
+
"""
|
|
283
|
+
M, monomials = _interpolation_matrix_problem(points, tau, parameters, wy)
|
|
284
|
+
Ker = M.right_kernel()
|
|
285
|
+
# Pick a nonzero element from the right kernel
|
|
286
|
+
sol = Ker.basis()[0]
|
|
287
|
+
# Construct the Q polynomial
|
|
288
|
+
PF = M.base_ring()['x', 'y'] # make that ring a ring in <x>
|
|
289
|
+
x, y = PF.gens()
|
|
290
|
+
return sum([x**m[0] * y**m[1] * sol[i]
|
|
291
|
+
for i, m in enumerate(monomials)])
|
|
292
|
+
|
|
293
|
+
# ###################### Lee-O'Sullivan's method ###############################
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def lee_osullivan_module(points, parameters, wy):
|
|
297
|
+
r"""
|
|
298
|
+
Return the analytically straight-forward basis for the `\GF{q}[x]` module
|
|
299
|
+
containing all interpolation polynomials, as according to Lee and
|
|
300
|
+
O'Sullivan.
|
|
301
|
+
|
|
302
|
+
The module is constructed in the following way: Let `R(x)` be the Lagrange
|
|
303
|
+
interpolation polynomial through the sought interpolation points `(x_i,
|
|
304
|
+
y_i)`, i.e. `R(x_i) = y_i`. Let `G(x) = \prod_{i=1}^n (x-x_i)`. Then the
|
|
305
|
+
`i`-th row of the basis matrix of the module is the coefficient-vector of
|
|
306
|
+
the following polynomial in `\GF{q}[x][y]`:
|
|
307
|
+
|
|
308
|
+
`P_i(x,y) = G(x)^{[i-s]} (y - R(x))^{i - [i-s]} y^{[i-s]}` ,
|
|
309
|
+
|
|
310
|
+
where `[a]` for real `a` is `a` when `a > 0` and 0 otherwise. It is easily
|
|
311
|
+
seen that `P_i(x,y)` is an interpolation polynomial, i.e. it is zero with
|
|
312
|
+
multiplicity at least `s` on each of the points `(x_i, y_i)`.
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
INPUT:
|
|
316
|
+
|
|
317
|
+
- ``points`` -- list of tuples ``(xi, yi)`` such that we seek `Q` with
|
|
318
|
+
``(xi,yi)`` being a root of `Q` with multiplicity `s`
|
|
319
|
+
|
|
320
|
+
- ``parameters`` -- (default: ``None``) a pair of integers, where:
|
|
321
|
+
|
|
322
|
+
- the first integer is the multiplicity parameter `s` of Guruswami-Sudan
|
|
323
|
+
algorithm and
|
|
324
|
+
- the second integer is the list size parameter.
|
|
325
|
+
|
|
326
|
+
- ``wy`` -- integer; the `y`-weight, where we seek `Q` of low
|
|
327
|
+
``(1,wy)`` weighted degree
|
|
328
|
+
|
|
329
|
+
EXAMPLES::
|
|
330
|
+
|
|
331
|
+
sage: from sage.coding.guruswami_sudan.interpolation import lee_osullivan_module
|
|
332
|
+
sage: F = GF(11)
|
|
333
|
+
sage: points = [(F(0), F(2)), (F(1), F(5)), (F(2), F(0)), (F(3), F(4)),
|
|
334
|
+
....: (F(4), F(9)), (F(5), F(1)), (F(6), F(9)), (F(7), F(10))]
|
|
335
|
+
sage: params = (1, 1)
|
|
336
|
+
sage: wy = 1
|
|
337
|
+
sage: lee_osullivan_module(points, params, wy)
|
|
338
|
+
[x^8 + 5*x^7 + 3*x^6 + 9*x^5 + 4*x^4 + 2*x^3 + 9*x 0]
|
|
339
|
+
[ 10*x^7 + 4*x^6 + 9*x^4 + 7*x^3 + 2*x^2 + 9*x + 9 1]
|
|
340
|
+
"""
|
|
341
|
+
s, l = parameters[0], parameters[1]
|
|
342
|
+
F = points[0][0].parent()
|
|
343
|
+
PF = F['x']
|
|
344
|
+
x = PF.gens()[0]
|
|
345
|
+
R = PF.lagrange_polynomial(points)
|
|
346
|
+
G = prod(x - points[i][0] for i in range(len(points)))
|
|
347
|
+
PFy = PF['y']
|
|
348
|
+
y = PFy.gens()[0]
|
|
349
|
+
ybasis = [(y-R)**i * G**(s-i) for i in range(s + 1)] \
|
|
350
|
+
+ [y**(i-s) * (y-R)**s for i in range(s + 1, l + 1)]
|
|
351
|
+
|
|
352
|
+
def pad(lst):
|
|
353
|
+
return lst + [0]*(l+1-len(lst))
|
|
354
|
+
|
|
355
|
+
modbasis = [pad(yb.coefficients(sparse=False)) for yb in ybasis]
|
|
356
|
+
return matrix(PF, modbasis)
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def gs_interpolation_lee_osullivan(points, tau, parameters, wy):
|
|
360
|
+
r"""
|
|
361
|
+
Return an interpolation polynomial Q(x,y) for the given input using the
|
|
362
|
+
module-based algorithm of Lee and O'Sullivan.
|
|
363
|
+
|
|
364
|
+
This algorithm constructs an explicit `(\ell+1) \times (\ell+1)` polynomial
|
|
365
|
+
matrix whose rows span the `\GF q[x]` module of all interpolation
|
|
366
|
+
polynomials. It then runs a row reduction algorithm to find a low-shifted
|
|
367
|
+
degree vector in this row space, corresponding to a low weighted-degree
|
|
368
|
+
interpolation polynomial.
|
|
369
|
+
|
|
370
|
+
INPUT:
|
|
371
|
+
|
|
372
|
+
- ``points`` -- list of tuples ``(xi, yi)`` such that we seek ``Q`` with
|
|
373
|
+
``(xi,yi)`` being a root of ``Q`` with multiplicity ``s``
|
|
374
|
+
|
|
375
|
+
- ``tau`` -- integer; the number of errors one wants to decode
|
|
376
|
+
|
|
377
|
+
- ``parameters`` -- (default: ``None``) a pair of integers, where:
|
|
378
|
+
|
|
379
|
+
- the first integer is the multiplicity parameter of Guruswami-Sudan
|
|
380
|
+
algorithm and
|
|
381
|
+
- the second integer is the list size parameter.
|
|
382
|
+
|
|
383
|
+
- ``wy`` -- integer; the `y`-weight, where we seek ``Q`` of low
|
|
384
|
+
``(1,wy)`` weighted degree
|
|
385
|
+
|
|
386
|
+
EXAMPLES::
|
|
387
|
+
|
|
388
|
+
sage: from sage.coding.guruswami_sudan.interpolation import gs_interpolation_lee_osullivan
|
|
389
|
+
sage: F = GF(11)
|
|
390
|
+
sage: points = [(F(0), F(2)), (F(1), F(5)), (F(2), F(0)), (F(3), F(4)),
|
|
391
|
+
....: (F(4), F(9)), (F(5), F(1)), (F(6), F(9)), (F(7), F(10))]
|
|
392
|
+
sage: tau = 1
|
|
393
|
+
sage: params = (1, 1)
|
|
394
|
+
sage: wy = 1
|
|
395
|
+
sage: Q = gs_interpolation_lee_osullivan(points, tau, params, wy)
|
|
396
|
+
sage: Q / Q.lc() # make monic
|
|
397
|
+
x^3*y + 2*x^3 - x^2*y + 5*x^2 + 5*x*y - 5*x + 2*y - 4
|
|
398
|
+
"""
|
|
399
|
+
from .utils import _degree_of_vector
|
|
400
|
+
s, l = parameters[0], parameters[1]
|
|
401
|
+
F = points[0][0].parent()
|
|
402
|
+
M = lee_osullivan_module(points, (s, l), wy)
|
|
403
|
+
shifts = [i * wy for i in range(l + 1)]
|
|
404
|
+
Mnew = M.reduced_form(shifts=shifts)
|
|
405
|
+
# Construct Q as the element of the row with the lowest weighted degree
|
|
406
|
+
Qlist = min(Mnew.rows(), key=lambda r: _degree_of_vector(r, shifts))
|
|
407
|
+
PFxy = F['x,y']
|
|
408
|
+
xx, yy = PFxy.gens()
|
|
409
|
+
return sum(yy**i * PFxy(Qlist[i]) for i in range(l + 1))
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.modules sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
Guruswami-Sudan utility methods
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Johan S. R. Nielsen, original implementation (see [Nie]_ for details)
|
|
9
|
+
- David Lucas, ported the original implementation in Sage
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
# ***************************************************************************
|
|
13
|
+
# Copyright (C) 2015 David Lucas <david.lucas@inria.fr>
|
|
14
|
+
# 2015 Johan S. R. Nielsen <jsrn@jsrn.dk>
|
|
15
|
+
#
|
|
16
|
+
# This program is free software: you can redistribute it and/or modify
|
|
17
|
+
# it under the terms of the GNU General Public License as published by
|
|
18
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
19
|
+
# (at your option) any later version.
|
|
20
|
+
# https://www.gnu.org/licenses/
|
|
21
|
+
# ***************************************************************************
|
|
22
|
+
|
|
23
|
+
from sage.arith.misc import integer_floor as floor
|
|
24
|
+
from sage.misc.functional import sqrt
|
|
25
|
+
from sage.rings.integer_ring import ZZ
|
|
26
|
+
from sage.rings.integer import Integer
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def polynomial_to_list(p, len):
|
|
30
|
+
r"""
|
|
31
|
+
Return ``p`` as a list of its coefficients of length ``len``.
|
|
32
|
+
|
|
33
|
+
INPUT:
|
|
34
|
+
|
|
35
|
+
- ``p`` -- a polynomial
|
|
36
|
+
|
|
37
|
+
- ``len`` -- integer; if ``len`` is smaller than the degree of ``p``, the
|
|
38
|
+
returned list will be of size degree of ``p``, else it will be of size ``len``
|
|
39
|
+
|
|
40
|
+
EXAMPLES::
|
|
41
|
+
|
|
42
|
+
sage: from sage.coding.guruswami_sudan.utils import polynomial_to_list
|
|
43
|
+
sage: F.<x> = GF(41)[]
|
|
44
|
+
sage: p = 9*x^2 + 8*x + 37
|
|
45
|
+
sage: polynomial_to_list(p, 4)
|
|
46
|
+
[37, 8, 9, 0]
|
|
47
|
+
"""
|
|
48
|
+
return list(p) + [0]*max(0, len-p.degree()-1)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def johnson_radius(n, d):
|
|
52
|
+
r"""
|
|
53
|
+
Return the Johnson-radius for the code length `n` and the minimum distance `d`.
|
|
54
|
+
|
|
55
|
+
The Johnson radius is defined as `n - \sqrt(n(n-d))`.
|
|
56
|
+
|
|
57
|
+
INPUT:
|
|
58
|
+
|
|
59
|
+
- ``n`` -- integer; the length of the code
|
|
60
|
+
- ``d`` -- integer; the minimum distance of the code
|
|
61
|
+
|
|
62
|
+
EXAMPLES::
|
|
63
|
+
|
|
64
|
+
sage: sage.coding.guruswami_sudan.utils.johnson_radius(250, 181) # needs sage.symbolic
|
|
65
|
+
-5*sqrt(690) + 250
|
|
66
|
+
"""
|
|
67
|
+
return n - sqrt(n*(n-d))
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def ligt(x):
|
|
71
|
+
r"""
|
|
72
|
+
Return the least integer greater than ``x``.
|
|
73
|
+
|
|
74
|
+
EXAMPLES::
|
|
75
|
+
|
|
76
|
+
sage: from sage.coding.guruswami_sudan.utils import ligt
|
|
77
|
+
sage: ligt(41)
|
|
78
|
+
42
|
|
79
|
+
|
|
80
|
+
It works with any type of numbers (not only integers)::
|
|
81
|
+
|
|
82
|
+
sage: ligt(41.041)
|
|
83
|
+
42
|
|
84
|
+
"""
|
|
85
|
+
return floor(x + 1)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def gilt(x):
|
|
89
|
+
r"""
|
|
90
|
+
Return the greatest integer smaller than ``x``.
|
|
91
|
+
|
|
92
|
+
EXAMPLES::
|
|
93
|
+
|
|
94
|
+
sage: from sage.coding.guruswami_sudan.utils import gilt
|
|
95
|
+
sage: gilt(43)
|
|
96
|
+
42
|
|
97
|
+
|
|
98
|
+
It works with any type of numbers (not only integers)::
|
|
99
|
+
|
|
100
|
+
sage: gilt(43.041)
|
|
101
|
+
43
|
|
102
|
+
"""
|
|
103
|
+
if x in ZZ:
|
|
104
|
+
return Integer(x - 1)
|
|
105
|
+
else:
|
|
106
|
+
return floor(x)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def solve_degree2_to_integer_range(a, b, c):
|
|
110
|
+
r"""
|
|
111
|
+
Return the greatest integer range `[i_1, i_2]` such that
|
|
112
|
+
`i_1 > x_1` and `i_2 < x_2` where `x_1, x_2` are the two zeroes of the
|
|
113
|
+
equation in `x`: `ax^2+bx+c=0`.
|
|
114
|
+
|
|
115
|
+
If there is no real solution to the equation, it returns an empty range
|
|
116
|
+
with negative coefficients.
|
|
117
|
+
|
|
118
|
+
INPUT:
|
|
119
|
+
|
|
120
|
+
- ``a``, ``b`` and ``c`` -- coefficients of a second degree equation, ``a``
|
|
121
|
+
being the coefficient of the higher degree term
|
|
122
|
+
|
|
123
|
+
EXAMPLES::
|
|
124
|
+
|
|
125
|
+
sage: from sage.coding.guruswami_sudan.utils import solve_degree2_to_integer_range
|
|
126
|
+
sage: solve_degree2_to_integer_range(1, -5, 1) # needs sage.symbolic
|
|
127
|
+
(1, 4)
|
|
128
|
+
|
|
129
|
+
If there is no real solution::
|
|
130
|
+
|
|
131
|
+
sage: solve_degree2_to_integer_range(50, 5, 42)
|
|
132
|
+
(-2, -1)
|
|
133
|
+
"""
|
|
134
|
+
D = b**2 - 4*a*c
|
|
135
|
+
if D < 0:
|
|
136
|
+
return (-2,-1)
|
|
137
|
+
sD = float(sqrt(D))
|
|
138
|
+
minx, maxx = (-b-sD)/2.0/a , (-b+sD)/2.0/a
|
|
139
|
+
mini, maxi = (ligt(minx), gilt(maxx))
|
|
140
|
+
if mini > maxi:
|
|
141
|
+
return (-2,-1)
|
|
142
|
+
else:
|
|
143
|
+
return (mini,maxi)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def _degree_of_vector(v, shifts=None):
|
|
147
|
+
r"""
|
|
148
|
+
Return the greatest degree among the entries of the polynomial vector `v`.
|
|
149
|
+
|
|
150
|
+
INPUT:
|
|
151
|
+
|
|
152
|
+
- ``v`` -- a vector of polynomials
|
|
153
|
+
|
|
154
|
+
- ``shifts`` -- (default: ``None``) a list of integer shifts to consider
|
|
155
|
+
``v`` under, i.e. compute `\max(\deg v_i + s_i)`, where `s_1,\ldots, s_n`
|
|
156
|
+
is the list of shifts.
|
|
157
|
+
|
|
158
|
+
If ``None``, all shifts are considered as ``0``.
|
|
159
|
+
|
|
160
|
+
EXAMPLES::
|
|
161
|
+
|
|
162
|
+
sage: from sage.coding.guruswami_sudan.utils import _degree_of_vector
|
|
163
|
+
sage: F.<x> = GF(7)[]
|
|
164
|
+
sage: v = vector(F, [0, 1, x, x^2])
|
|
165
|
+
sage: _degree_of_vector(v)
|
|
166
|
+
2
|
|
167
|
+
sage: _degree_of_vector(v, shifts=[10, 1, 0, -3])
|
|
168
|
+
1
|
|
169
|
+
"""
|
|
170
|
+
if not shifts:
|
|
171
|
+
return max(vi.degree() for vi in v)
|
|
172
|
+
else:
|
|
173
|
+
if v.is_zero():
|
|
174
|
+
return -1
|
|
175
|
+
return max(degi + si for (degi, si) in zip([vi.degree() for vi in v ], shifts)
|
|
176
|
+
if degi > -1)
|