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
sage/coding/databases.py
ADDED
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.modules sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
Access functions to online databases for coding theory
|
|
5
|
+
"""
|
|
6
|
+
from sage.misc.lazy_import import lazy_import
|
|
7
|
+
|
|
8
|
+
# Import the following function so that it is available as
|
|
9
|
+
# - sage.coding.databases.self_dual_binary_codes
|
|
10
|
+
# - codes.databases.self_dual_binary_codes (which functions as a catalog).
|
|
11
|
+
lazy_import('sage.coding.self_dual_codes', 'self_dual_binary_codes')
|
|
12
|
+
|
|
13
|
+
del lazy_import
|
|
14
|
+
|
|
15
|
+
# Do not put any global imports here since this module is accessible as
|
|
16
|
+
# - sage.coding.databases.<tab>
|
|
17
|
+
# - codes.databases.<tab>
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def best_linear_code_in_guava(n, k, F):
|
|
21
|
+
r"""
|
|
22
|
+
Return the linear code of length ``n``, dimension ``k`` over field ``F``
|
|
23
|
+
with the maximal minimum distance which is known to the GAP package GUAVA.
|
|
24
|
+
|
|
25
|
+
The function uses the tables described in :func:`bounds_on_minimum_distance_in_guava` to
|
|
26
|
+
construct this code. This requires the optional GAP package GUAVA.
|
|
27
|
+
|
|
28
|
+
INPUT:
|
|
29
|
+
|
|
30
|
+
- ``n`` -- the length of the code to look up
|
|
31
|
+
|
|
32
|
+
- ``k`` -- the dimension of the code to look up
|
|
33
|
+
|
|
34
|
+
- ``F`` -- the base field of the code to look up
|
|
35
|
+
|
|
36
|
+
OUTPUT: a :class:`LinearCode` which is a best linear code of the given parameters known to GUAVA
|
|
37
|
+
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: codes.databases.best_linear_code_in_guava(10,5,GF(2)) # long time; optional - gap_package_guava
|
|
41
|
+
[10, 5] linear code over GF(2)
|
|
42
|
+
sage: libgap.LoadPackage('guava') # long time; optional - gap_package_guava
|
|
43
|
+
...
|
|
44
|
+
sage: libgap.BestKnownLinearCode(10,5,libgap.GF(2)) # long time; optional - gap_package_guava
|
|
45
|
+
a linear [10,5,4]2..4 shortened code
|
|
46
|
+
|
|
47
|
+
This means that the best possible binary linear code of length 10 and
|
|
48
|
+
dimension 5 is a code with minimum distance 4 and covering radius s somewhere
|
|
49
|
+
between 2 and 4. Use ``bounds_on_minimum_distance_in_guava(10,5,GF(2))``
|
|
50
|
+
for further details.
|
|
51
|
+
"""
|
|
52
|
+
from sage.features.gap import GapPackage
|
|
53
|
+
from .linear_code import LinearCode
|
|
54
|
+
GapPackage('guava', spkg='gap_packages').require()
|
|
55
|
+
from sage.libs.gap.libgap import libgap
|
|
56
|
+
libgap.load_package('guava')
|
|
57
|
+
C = libgap.BestKnownLinearCode(n, k, F)
|
|
58
|
+
return LinearCode(C.GeneratorMat()._matrix_(F))
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def bounds_on_minimum_distance_in_guava(n, k, F):
|
|
62
|
+
r"""
|
|
63
|
+
Compute a lower and upper bound on the greatest minimum distance of a
|
|
64
|
+
`[n,k]` linear code over the field ``F``.
|
|
65
|
+
|
|
66
|
+
This function requires the optional GAP package GUAVA.
|
|
67
|
+
|
|
68
|
+
The function returns a GAP record with the two bounds and an explanation for
|
|
69
|
+
each bound. The method ``Display`` can be used to show the explanations.
|
|
70
|
+
|
|
71
|
+
The values for the lower and upper bound are obtained from a table
|
|
72
|
+
constructed by Cen Tjhai for GUAVA, derived from the table of
|
|
73
|
+
Brouwer. See http://www.codetables.de/ for the most recent data.
|
|
74
|
+
These tables contain lower and upper bounds for `q=2` (when ``n <= 257``),
|
|
75
|
+
`q=3` (when ``n <= 243``), `q=4` (``n <= 256``). (Current as of
|
|
76
|
+
11 May 2006.) For codes over other fields and for larger word lengths,
|
|
77
|
+
trivial bounds are used.
|
|
78
|
+
|
|
79
|
+
INPUT:
|
|
80
|
+
|
|
81
|
+
- ``n`` -- the length of the code to look up
|
|
82
|
+
|
|
83
|
+
- ``k`` -- the dimension of the code to look up
|
|
84
|
+
|
|
85
|
+
- ``F`` -- the base field of the code to look up
|
|
86
|
+
|
|
87
|
+
OUTPUT: a GAP record object. See below for an example
|
|
88
|
+
|
|
89
|
+
EXAMPLES::
|
|
90
|
+
|
|
91
|
+
sage: gap_rec = codes.databases.bounds_on_minimum_distance_in_guava(10,5,GF(2)) # optional - gap_package_guava
|
|
92
|
+
sage: gap_rec.Display() # optional - gap_package_guava
|
|
93
|
+
rec(
|
|
94
|
+
construction := [ <Operation "ShortenedCode">,
|
|
95
|
+
[ [ <Operation "UUVCode">,
|
|
96
|
+
[ [ <Operation "DualCode">,
|
|
97
|
+
[ [ <Operation "RepetitionCode">, [ 8, 2 ] ] ] ],
|
|
98
|
+
[ <Operation "UUVCode">, [ [ <Operation "DualCode">,
|
|
99
|
+
[ [ <Operation "RepetitionCode">, [ 4, 2 ] ] ] ],
|
|
100
|
+
[ <Operation "RepetitionCode">, [ 4, 2 ] ] ] ] ] ],
|
|
101
|
+
[ 1, 2, 3, 4, 5, 6 ] ] ],
|
|
102
|
+
k := 5,
|
|
103
|
+
lowerBound := 4,
|
|
104
|
+
lowerBoundExplanation := ...
|
|
105
|
+
n := 10,
|
|
106
|
+
q := 2,
|
|
107
|
+
references := rec(
|
|
108
|
+
),
|
|
109
|
+
upperBound := 4,
|
|
110
|
+
upperBoundExplanation := ... )
|
|
111
|
+
"""
|
|
112
|
+
from sage.features.gap import GapPackage
|
|
113
|
+
GapPackage('guava', spkg='gap_packages').require()
|
|
114
|
+
from sage.libs.gap.libgap import libgap
|
|
115
|
+
libgap.load_package('guava')
|
|
116
|
+
return libgap.BoundsMinimumDistance(n, k, F)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def best_linear_code_in_codetables_dot_de(n, k, F, verbose=False):
|
|
120
|
+
r"""
|
|
121
|
+
Return the best linear code and its construction as per the web database
|
|
122
|
+
http://www.codetables.de/
|
|
123
|
+
|
|
124
|
+
INPUT:
|
|
125
|
+
|
|
126
|
+
- ``n`` -- integer; the length of the code
|
|
127
|
+
|
|
128
|
+
- ``k`` -- integer; the dimension of the code
|
|
129
|
+
|
|
130
|
+
- ``F`` -- finite field, of order 2, 3, 4, 5, 7, 8, or 9
|
|
131
|
+
|
|
132
|
+
- ``verbose`` -- boolean (default: ``False``)
|
|
133
|
+
|
|
134
|
+
OUTPUT: an unparsed text explaining the construction of the code
|
|
135
|
+
|
|
136
|
+
EXAMPLES::
|
|
137
|
+
|
|
138
|
+
sage: L = codes.databases.best_linear_code_in_codetables_dot_de(72, 36, GF(2)) # optional - internet
|
|
139
|
+
sage: print(L) # optional - internet
|
|
140
|
+
Construction of a linear code
|
|
141
|
+
[72,36,15] over GF(2):
|
|
142
|
+
[1]: [73, 36, 16] Cyclic Linear Code over GF(2)
|
|
143
|
+
CyclicCode of length 73 with generating polynomial x^37 + x^36 + x^34 +
|
|
144
|
+
x^33 + x^32 + x^27 + x^25 + x^24 + x^22 + x^21 + x^19 + x^18 + x^15 + x^11 +
|
|
145
|
+
x^10 + x^8 + x^7 + x^5 + x^3 + 1
|
|
146
|
+
[2]: [72, 36, 15] Linear Code over GF(2)
|
|
147
|
+
Puncturing of [1] at 1
|
|
148
|
+
<BLANKLINE>
|
|
149
|
+
last modified: 2002-03-20
|
|
150
|
+
|
|
151
|
+
This function raises an :exc:`IOError` if an error occurs downloading data or
|
|
152
|
+
parsing it. It raises a :exc:`ValueError` if the ``q`` input is invalid.
|
|
153
|
+
|
|
154
|
+
AUTHORS:
|
|
155
|
+
|
|
156
|
+
- Steven Sivek (2005-11-14)
|
|
157
|
+
- David Joyner (2008-03)
|
|
158
|
+
"""
|
|
159
|
+
from urllib.request import urlopen
|
|
160
|
+
from sage.cpython.string import bytes_to_str
|
|
161
|
+
q = F.order()
|
|
162
|
+
if q not in [2, 3, 4, 5, 7, 8, 9]:
|
|
163
|
+
raise ValueError("q (=%s) must be in [2,3,4,5,7,8,9]" % q)
|
|
164
|
+
n = int(n)
|
|
165
|
+
k = int(k)
|
|
166
|
+
|
|
167
|
+
param = ("?q=%s&n=%s&k=%s" % (q, n, k)).replace('L', '')
|
|
168
|
+
|
|
169
|
+
url = "http://www.codetables.de/" + "BKLC/BKLC.php" + param
|
|
170
|
+
if verbose:
|
|
171
|
+
print("Looking up the bounds at %s" % url)
|
|
172
|
+
with urlopen(url) as f:
|
|
173
|
+
s = f.read()
|
|
174
|
+
|
|
175
|
+
s = bytes_to_str(s)
|
|
176
|
+
i = s.find("<PRE>")
|
|
177
|
+
j = s.find("</PRE>")
|
|
178
|
+
if i == -1 or j == -1:
|
|
179
|
+
raise OSError("Error parsing data (missing pre tags).")
|
|
180
|
+
return s[i+5:j].strip()
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def self_orthogonal_binary_codes(n, k, b=2, parent=None, BC=None, equal=False,
|
|
184
|
+
in_test=None):
|
|
185
|
+
"""
|
|
186
|
+
Return a Python iterator which generates a complete set of
|
|
187
|
+
representatives of all permutation equivalence classes of
|
|
188
|
+
self-orthogonal binary linear codes of length in ``[1..n]`` and
|
|
189
|
+
dimension in ``[1..k]``.
|
|
190
|
+
|
|
191
|
+
INPUT:
|
|
192
|
+
|
|
193
|
+
- ``n`` -- integer; maximal length
|
|
194
|
+
|
|
195
|
+
- ``k`` -- integer; maximal dimension
|
|
196
|
+
|
|
197
|
+
- ``b`` -- integer; requires that the generators all have weight divisible
|
|
198
|
+
by ``b`` (if ``b=2``, all self-orthogonal codes are generated, and if
|
|
199
|
+
``b=4``, all doubly even codes are generated). Must be an even positive
|
|
200
|
+
integer.
|
|
201
|
+
|
|
202
|
+
- ``parent`` -- used in recursion (default: ``None``)
|
|
203
|
+
|
|
204
|
+
- ``BC`` -- used in recursion (default: ``None``)
|
|
205
|
+
|
|
206
|
+
- ``equal`` -- if ``True``, generates only [n, k] codes (default: ``False``)
|
|
207
|
+
|
|
208
|
+
- ``in_test`` -- used in recursion (default: ``None``)
|
|
209
|
+
|
|
210
|
+
EXAMPLES:
|
|
211
|
+
|
|
212
|
+
Generate all self-orthogonal codes of length up to 7 and dimension up
|
|
213
|
+
to 3::
|
|
214
|
+
|
|
215
|
+
sage: # needs sage.groups
|
|
216
|
+
sage: for B in codes.databases.self_orthogonal_binary_codes(7,3):
|
|
217
|
+
....: print(B)
|
|
218
|
+
[2, 1] linear code over GF(2)
|
|
219
|
+
[4, 2] linear code over GF(2)
|
|
220
|
+
[6, 3] linear code over GF(2)
|
|
221
|
+
[4, 1] linear code over GF(2)
|
|
222
|
+
[6, 2] linear code over GF(2)
|
|
223
|
+
[6, 2] linear code over GF(2)
|
|
224
|
+
[7, 3] linear code over GF(2)
|
|
225
|
+
[6, 1] linear code over GF(2)
|
|
226
|
+
|
|
227
|
+
Generate all doubly-even codes of length up to 7 and dimension up
|
|
228
|
+
to 3::
|
|
229
|
+
|
|
230
|
+
sage: # needs sage.groups
|
|
231
|
+
sage: for B in codes.databases.self_orthogonal_binary_codes(7,3,4):
|
|
232
|
+
....: print(B); print(B.generator_matrix())
|
|
233
|
+
[4, 1] linear code over GF(2)
|
|
234
|
+
[1 1 1 1]
|
|
235
|
+
[6, 2] linear code over GF(2)
|
|
236
|
+
[1 1 1 1 0 0]
|
|
237
|
+
[0 1 0 1 1 1]
|
|
238
|
+
[7, 3] linear code over GF(2)
|
|
239
|
+
[1 0 1 1 0 1 0]
|
|
240
|
+
[0 1 0 1 1 1 0]
|
|
241
|
+
[0 0 1 0 1 1 1]
|
|
242
|
+
|
|
243
|
+
Generate all doubly-even codes of length up to 7 and dimension up
|
|
244
|
+
to 2::
|
|
245
|
+
|
|
246
|
+
sage: # needs sage.groups
|
|
247
|
+
sage: for B in codes.databases.self_orthogonal_binary_codes(7,2,4):
|
|
248
|
+
....: print(B); print(B.generator_matrix())
|
|
249
|
+
[4, 1] linear code over GF(2)
|
|
250
|
+
[1 1 1 1]
|
|
251
|
+
[6, 2] linear code over GF(2)
|
|
252
|
+
[1 1 1 1 0 0]
|
|
253
|
+
[0 1 0 1 1 1]
|
|
254
|
+
|
|
255
|
+
Generate all self-orthogonal codes of length equal to 8 and
|
|
256
|
+
dimension equal to 4::
|
|
257
|
+
|
|
258
|
+
sage: # needs sage.groups
|
|
259
|
+
sage: for B in codes.databases.self_orthogonal_binary_codes(8, 4, equal=True):
|
|
260
|
+
....: print(B); print(B.generator_matrix())
|
|
261
|
+
[8, 4] linear code over GF(2)
|
|
262
|
+
[1 0 0 1 0 0 0 0]
|
|
263
|
+
[0 1 0 0 1 0 0 0]
|
|
264
|
+
[0 0 1 0 0 1 0 0]
|
|
265
|
+
[0 0 0 0 0 0 1 1]
|
|
266
|
+
[8, 4] linear code over GF(2)
|
|
267
|
+
[1 0 0 1 1 0 1 0]
|
|
268
|
+
[0 1 0 1 1 1 0 0]
|
|
269
|
+
[0 0 1 0 1 1 1 0]
|
|
270
|
+
[0 0 0 1 0 1 1 1]
|
|
271
|
+
|
|
272
|
+
Since all the codes will be self-orthogonal, b must be divisible by
|
|
273
|
+
2::
|
|
274
|
+
|
|
275
|
+
sage: list(codes.databases.self_orthogonal_binary_codes(8, 4, 1, equal=True))
|
|
276
|
+
Traceback (most recent call last):
|
|
277
|
+
...
|
|
278
|
+
ValueError: b (1) must be a positive even integer.
|
|
279
|
+
"""
|
|
280
|
+
from sage.rings.finite_rings.finite_field_constructor import FiniteField
|
|
281
|
+
from sage.matrix.constructor import Matrix
|
|
282
|
+
|
|
283
|
+
d = int(b)
|
|
284
|
+
if d != b or d % 2 == 1 or d <= 0:
|
|
285
|
+
raise ValueError("b (%s) must be a positive even integer." % b)
|
|
286
|
+
from .linear_code import LinearCode
|
|
287
|
+
from .binary_code import BinaryCode, BinaryCodeClassifier
|
|
288
|
+
if k < 1 or n < 2:
|
|
289
|
+
return
|
|
290
|
+
if equal:
|
|
291
|
+
in_test = lambda M: (M.ncols() - M.nrows()) <= (n-k)
|
|
292
|
+
out_test = lambda C: (C.dimension() == k) and (C.length() == n)
|
|
293
|
+
else:
|
|
294
|
+
in_test = lambda M: True
|
|
295
|
+
out_test = lambda C: True
|
|
296
|
+
if BC is None:
|
|
297
|
+
BC = BinaryCodeClassifier()
|
|
298
|
+
if parent is None:
|
|
299
|
+
for j in range(d, n+1, d):
|
|
300
|
+
M = Matrix(FiniteField(2), [[1]*j])
|
|
301
|
+
if in_test(M):
|
|
302
|
+
for N in self_orthogonal_binary_codes(n, k, d, M, BC, in_test=in_test):
|
|
303
|
+
if out_test(N):
|
|
304
|
+
yield N
|
|
305
|
+
else:
|
|
306
|
+
C = LinearCode(parent)
|
|
307
|
+
if out_test(C):
|
|
308
|
+
yield C
|
|
309
|
+
if k == parent.nrows():
|
|
310
|
+
return
|
|
311
|
+
for nn in range(parent.ncols()+1, n+1):
|
|
312
|
+
if in_test(parent):
|
|
313
|
+
for child in BC.generate_children(BinaryCode(parent), nn, d):
|
|
314
|
+
for N in self_orthogonal_binary_codes(n, k, d, child, BC, in_test=in_test):
|
|
315
|
+
if out_test(N):
|
|
316
|
+
yield N
|
sage/coding/decoder.py
ADDED
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.modules sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
Decoders
|
|
5
|
+
|
|
6
|
+
Representation of an error-correction algorithm for a code.
|
|
7
|
+
|
|
8
|
+
AUTHORS:
|
|
9
|
+
|
|
10
|
+
- David Joyner (2009-02-01): initial version
|
|
11
|
+
|
|
12
|
+
- David Lucas (2015-06-29): abstract class version
|
|
13
|
+
"""
|
|
14
|
+
#*****************************************************************************
|
|
15
|
+
# Copyright (C) 2009 David Joyner <wdjoyner@gmail.com>
|
|
16
|
+
# 2015 David Lucas <david.lucas@inria.fr>
|
|
17
|
+
#
|
|
18
|
+
# Distributed under the terms of the GNU General Public License (GPL),
|
|
19
|
+
# version 2 or later (at your preference).
|
|
20
|
+
#
|
|
21
|
+
# http://www.gnu.org/licenses/
|
|
22
|
+
#*****************************************************************************
|
|
23
|
+
|
|
24
|
+
from sage.misc.abstract_method import abstract_method
|
|
25
|
+
from sage.structure.sage_object import SageObject
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class Decoder(SageObject):
|
|
29
|
+
r"""
|
|
30
|
+
Abstract top-class for :class:`Decoder` objects.
|
|
31
|
+
|
|
32
|
+
Every decoder class for linear codes (of any metric) should inherit from
|
|
33
|
+
this abstract class.
|
|
34
|
+
|
|
35
|
+
To implement a decoder, you need to:
|
|
36
|
+
|
|
37
|
+
- inherit from :class:`Decoder`
|
|
38
|
+
|
|
39
|
+
- call ``Decoder.__init__`` in the subclass constructor.
|
|
40
|
+
Example: ``super().__init__(code, input_space, connected_encoder_name)``.
|
|
41
|
+
By doing that, your subclass will have all the parameters described above initialized.
|
|
42
|
+
|
|
43
|
+
- Then, you need to override one of decoding methods, either :meth:`decode_to_code` or
|
|
44
|
+
:meth:`decode_to_message`. You can also override the optional method :meth:`decoding_radius`.
|
|
45
|
+
|
|
46
|
+
- By default, comparison of :class:`Decoder` (using methods ``__eq__`` and ``__ne__`` ) are
|
|
47
|
+
by memory reference: if you build the same decoder twice, they will be different. If you
|
|
48
|
+
need something more clever, override ``__eq__`` and ``__ne__`` in your subclass.
|
|
49
|
+
|
|
50
|
+
- As :class:`Decoder` is not designed to be instantiated, it does not have any representation
|
|
51
|
+
methods. You should implement ``_repr_`` and ``_latex_`` methods in the subclass.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
@classmethod
|
|
55
|
+
def decoder_type(cls):
|
|
56
|
+
r"""
|
|
57
|
+
Return the set of types of ``self``.
|
|
58
|
+
|
|
59
|
+
This method can be called on both an uninstantiated decoder class,
|
|
60
|
+
or on an instance of a decoder class.
|
|
61
|
+
|
|
62
|
+
The types of a decoder are a set of labels commonly associated with
|
|
63
|
+
decoders which describe the nature and behaviour of the decoding
|
|
64
|
+
algorithm. It should be considered as an informal descriptor but
|
|
65
|
+
can be coarsely relied upon for e.g. program logic.
|
|
66
|
+
|
|
67
|
+
The following are the most common types and a brief definition:
|
|
68
|
+
|
|
69
|
+
====================== ================================================
|
|
70
|
+
Decoder type Definition
|
|
71
|
+
====================== ================================================
|
|
72
|
+
always-succeed The decoder always returns a closest codeword if
|
|
73
|
+
the number of errors is up to the decoding
|
|
74
|
+
radius.
|
|
75
|
+
bounded-distance Any vector with Hamming distance at most
|
|
76
|
+
``decoding_radius()`` to a codeword is
|
|
77
|
+
decodable to some codeword. If ``might-fail`` is
|
|
78
|
+
also a type, then this is not a guarantee but an
|
|
79
|
+
expectancy.
|
|
80
|
+
complete The decoder decodes every word in the ambient
|
|
81
|
+
space of the code.
|
|
82
|
+
dynamic Some of the decoder's types will only be
|
|
83
|
+
determined at construction time
|
|
84
|
+
(depends on the parameters).
|
|
85
|
+
half-minimum-distance The decoder corrects up to half the minimum
|
|
86
|
+
distance, or a specific lower bound thereof.
|
|
87
|
+
hard-decision The decoder uses no information on which
|
|
88
|
+
positions are more likely to be in error or not.
|
|
89
|
+
list-decoder The decoder outputs a list of likely codewords,
|
|
90
|
+
instead of just a single codeword.
|
|
91
|
+
might-fail The decoder can fail at decoding even within its
|
|
92
|
+
usual promises, e.g. bounded distance.
|
|
93
|
+
not-always-closest The decoder does not guarantee to always return a
|
|
94
|
+
closest codeword.
|
|
95
|
+
probabilistic The decoder has internal randomness which can affect
|
|
96
|
+
running time and the decoding result.
|
|
97
|
+
soft-decision As part of the input, the decoder takes
|
|
98
|
+
reliability information on which positions are
|
|
99
|
+
more likely to be in error. Such a decoder only
|
|
100
|
+
works for specific channels.
|
|
101
|
+
====================== ================================================
|
|
102
|
+
|
|
103
|
+
EXAMPLES:
|
|
104
|
+
|
|
105
|
+
We call it on a class::
|
|
106
|
+
|
|
107
|
+
sage: codes.decoders.LinearCodeSyndromeDecoder.decoder_type()
|
|
108
|
+
{'dynamic', 'hard-decision'}
|
|
109
|
+
|
|
110
|
+
We can also call it on a instance of a :class:`Decoder` class::
|
|
111
|
+
|
|
112
|
+
sage: G = Matrix(GF(2), [[1, 0, 0, 1], [0, 1, 1, 1]])
|
|
113
|
+
sage: C = LinearCode(G)
|
|
114
|
+
sage: D = C.decoder()
|
|
115
|
+
sage: D.decoder_type()
|
|
116
|
+
{'complete', 'hard-decision', 'might-error'}
|
|
117
|
+
"""
|
|
118
|
+
return cls._decoder_type
|
|
119
|
+
|
|
120
|
+
def _instance_decoder_type(self):
|
|
121
|
+
r"""
|
|
122
|
+
See the documentation of :meth:`decoder_type`.
|
|
123
|
+
|
|
124
|
+
EXAMPLES:
|
|
125
|
+
|
|
126
|
+
Test to satisfy the doc-testing framework::
|
|
127
|
+
|
|
128
|
+
sage: G = Matrix(GF(2), [[1, 0, 0, 1], [0, 1, 1, 1]])
|
|
129
|
+
sage: C = LinearCode(G)
|
|
130
|
+
sage: D = C.decoder()
|
|
131
|
+
sage: D.decoder_type() #indirect doctest
|
|
132
|
+
{'complete', 'hard-decision', 'might-error'}
|
|
133
|
+
"""
|
|
134
|
+
return self._decoder_type
|
|
135
|
+
|
|
136
|
+
def __init__(self, code, input_space, connected_encoder_name):
|
|
137
|
+
r"""
|
|
138
|
+
Initialize mandatory parameters for :class:`Decoder` objects.
|
|
139
|
+
|
|
140
|
+
This method only exists for inheritance purposes as it initializes
|
|
141
|
+
parameters that need to be known by every decoder. An abstract
|
|
142
|
+
decoder object should never be created.
|
|
143
|
+
|
|
144
|
+
INPUT:
|
|
145
|
+
|
|
146
|
+
- ``code`` -- the associated code of ``self``
|
|
147
|
+
|
|
148
|
+
- ``input_space`` -- the input space of ``self``, which is the ambient space
|
|
149
|
+
of ``self``'s ``code``
|
|
150
|
+
|
|
151
|
+
- ``connected_encoder_name`` -- the associated encoder, which will be
|
|
152
|
+
used by ``self`` to recover elements from the message space
|
|
153
|
+
|
|
154
|
+
EXAMPLES:
|
|
155
|
+
|
|
156
|
+
We first create a new :class:`Decoder` subclass::
|
|
157
|
+
|
|
158
|
+
sage: from sage.coding.decoder import Decoder
|
|
159
|
+
sage: class DecoderExample(Decoder):
|
|
160
|
+
....: def __init__(self, code):
|
|
161
|
+
....: in_space = code.ambient_space()
|
|
162
|
+
....: connected_enc = "GeneratorMatrix"
|
|
163
|
+
....: super().__init__(code, in_space, connected_enc)
|
|
164
|
+
|
|
165
|
+
We now create a member of our brand new class::
|
|
166
|
+
|
|
167
|
+
sage: G = Matrix(GF(2), [[1, 0, 0, 1], [0, 1, 1, 1]])
|
|
168
|
+
sage: C = LinearCode(G)
|
|
169
|
+
sage: D = DecoderExample(C)
|
|
170
|
+
|
|
171
|
+
We can check its parameters::
|
|
172
|
+
|
|
173
|
+
sage: D.input_space()
|
|
174
|
+
Vector space of dimension 4 over Finite Field of size 2
|
|
175
|
+
sage: D.connected_encoder()
|
|
176
|
+
Generator matrix-based encoder for [4, 2] linear code over GF(2)
|
|
177
|
+
sage: D.code()
|
|
178
|
+
[4, 2] linear code over GF(2)
|
|
179
|
+
"""
|
|
180
|
+
self.decoder_type = self._instance_decoder_type
|
|
181
|
+
self._code = code
|
|
182
|
+
self._input_space = input_space
|
|
183
|
+
self._connected_encoder_name = connected_encoder_name
|
|
184
|
+
|
|
185
|
+
def __hash__(self):
|
|
186
|
+
r"""
|
|
187
|
+
Return the hash value of ``self``.
|
|
188
|
+
|
|
189
|
+
This is a generic implementation which should be overwritten on decoders
|
|
190
|
+
with extra arguments.
|
|
191
|
+
|
|
192
|
+
EXAMPLES::
|
|
193
|
+
|
|
194
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0],[1,0,0,1,1,0,0],[0,1,0,1,0,1,0],[1,1,0,1,0,0,1]])
|
|
195
|
+
sage: C = LinearCode(G)
|
|
196
|
+
sage: D = C.decoder()
|
|
197
|
+
sage: hash(D) #random
|
|
198
|
+
7575380076354998465
|
|
199
|
+
"""
|
|
200
|
+
C = self.code()
|
|
201
|
+
Str = str(C)
|
|
202
|
+
return hash((C, Str)) ^ hash(Str) ^ hash(C)
|
|
203
|
+
|
|
204
|
+
def __ne__(self, other):
|
|
205
|
+
r"""
|
|
206
|
+
Test inequality of ``self`` and ``other``.
|
|
207
|
+
|
|
208
|
+
This is a generic implementation, which returns the inverse of
|
|
209
|
+
``__eq__`` for ``self``.
|
|
210
|
+
|
|
211
|
+
EXAMPLES::
|
|
212
|
+
|
|
213
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0],[1,0,0,1,1,0,0],[0,1,0,1,0,1,0],[1,1,0,1,0,0,1]])
|
|
214
|
+
sage: D1 = LinearCode(G).decoder()
|
|
215
|
+
sage: D2 = LinearCode(G).decoder()
|
|
216
|
+
sage: D1 != D2
|
|
217
|
+
False
|
|
218
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0],[1,0,0,1,1,0,0],[0,1,0,1,0,1,0],[1,1,0,1,0,1,1]])
|
|
219
|
+
sage: D2 = LinearCode(G).decoder()
|
|
220
|
+
sage: D1 != D2
|
|
221
|
+
True
|
|
222
|
+
"""
|
|
223
|
+
return not self == other
|
|
224
|
+
|
|
225
|
+
def decode_to_code(self, r):
|
|
226
|
+
r"""
|
|
227
|
+
Correct the errors in ``r`` and return a codeword.
|
|
228
|
+
|
|
229
|
+
This is a default implementation which assumes that the method
|
|
230
|
+
:meth:`decode_to_message` has been implemented, else it returns an exception.
|
|
231
|
+
|
|
232
|
+
INPUT:
|
|
233
|
+
|
|
234
|
+
- ``r`` -- a element of the input space of ``self``
|
|
235
|
+
|
|
236
|
+
OUTPUT: a vector of :meth:`code`
|
|
237
|
+
|
|
238
|
+
EXAMPLES::
|
|
239
|
+
|
|
240
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
241
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
242
|
+
sage: C = LinearCode(G)
|
|
243
|
+
sage: word = vector(GF(2), (1, 1, 0, 0, 1, 1, 0))
|
|
244
|
+
sage: word in C
|
|
245
|
+
True
|
|
246
|
+
sage: w_err = word + vector(GF(2), (1, 0, 0, 0, 0, 0, 0))
|
|
247
|
+
sage: w_err in C
|
|
248
|
+
False
|
|
249
|
+
sage: D = C.decoder()
|
|
250
|
+
sage: D.decode_to_code(w_err)
|
|
251
|
+
(1, 1, 0, 0, 1, 1, 0)
|
|
252
|
+
"""
|
|
253
|
+
if hasattr(self, "defaulting_decode_to_message"):
|
|
254
|
+
raise NotImplementedError
|
|
255
|
+
else:
|
|
256
|
+
word = self.decode_to_message(r)
|
|
257
|
+
return self.connected_encoder().encode(word)
|
|
258
|
+
|
|
259
|
+
def connected_encoder(self):
|
|
260
|
+
r"""
|
|
261
|
+
Return the connected encoder of ``self``.
|
|
262
|
+
|
|
263
|
+
EXAMPLES::
|
|
264
|
+
|
|
265
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
266
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
267
|
+
sage: C = LinearCode(G)
|
|
268
|
+
sage: D = C.decoder()
|
|
269
|
+
sage: D.connected_encoder()
|
|
270
|
+
Generator matrix-based encoder for [7, 4] linear code over GF(2)
|
|
271
|
+
"""
|
|
272
|
+
return self.code().encoder(encoder_name=self._connected_encoder_name)
|
|
273
|
+
|
|
274
|
+
def decode_to_message(self, r):
|
|
275
|
+
r"""
|
|
276
|
+
Decode ``r`` to the message space of :meth:`connected_encoder`.
|
|
277
|
+
|
|
278
|
+
This is a default implementation, which assumes that the
|
|
279
|
+
method :meth:`decode_to_code` has been implemented, else it
|
|
280
|
+
returns an exception.
|
|
281
|
+
|
|
282
|
+
INPUT:
|
|
283
|
+
|
|
284
|
+
- ``r`` -- a element of the input space of ``self``
|
|
285
|
+
|
|
286
|
+
OUTPUT: a vector of :meth:`message_space`
|
|
287
|
+
|
|
288
|
+
EXAMPLES::
|
|
289
|
+
|
|
290
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
291
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
292
|
+
sage: C = LinearCode(G)
|
|
293
|
+
sage: word = vector(GF(2), (1, 1, 0, 0, 1, 1, 0))
|
|
294
|
+
sage: w_err = word + vector(GF(2), (1, 0, 0, 0, 0, 0, 0))
|
|
295
|
+
sage: D = C.decoder()
|
|
296
|
+
sage: D.decode_to_message(w_err)
|
|
297
|
+
(0, 1, 1, 0)
|
|
298
|
+
"""
|
|
299
|
+
self.defaulting_decode_to_message = True
|
|
300
|
+
return self.code().unencode(self.decode_to_code(r))
|
|
301
|
+
|
|
302
|
+
def code(self):
|
|
303
|
+
r"""
|
|
304
|
+
Return the code for this :class:`Decoder`.
|
|
305
|
+
|
|
306
|
+
EXAMPLES::
|
|
307
|
+
|
|
308
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
309
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
310
|
+
sage: C = LinearCode(G)
|
|
311
|
+
sage: D = C.decoder()
|
|
312
|
+
sage: D.code()
|
|
313
|
+
[7, 4] linear code over GF(2)
|
|
314
|
+
"""
|
|
315
|
+
return self._code
|
|
316
|
+
|
|
317
|
+
def message_space(self):
|
|
318
|
+
r"""
|
|
319
|
+
Return the message space of ``self``'s :meth:`connected_encoder`.
|
|
320
|
+
|
|
321
|
+
EXAMPLES::
|
|
322
|
+
|
|
323
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
324
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
325
|
+
sage: C = LinearCode(G)
|
|
326
|
+
sage: D = C.decoder()
|
|
327
|
+
sage: D.message_space()
|
|
328
|
+
Vector space of dimension 4 over Finite Field of size 2
|
|
329
|
+
"""
|
|
330
|
+
return self.connected_encoder().message_space()
|
|
331
|
+
|
|
332
|
+
def input_space(self):
|
|
333
|
+
r"""
|
|
334
|
+
Return the input space of ``self``.
|
|
335
|
+
|
|
336
|
+
EXAMPLES::
|
|
337
|
+
|
|
338
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
339
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
340
|
+
sage: C = LinearCode(G)
|
|
341
|
+
sage: D = C.decoder()
|
|
342
|
+
sage: D.input_space()
|
|
343
|
+
Vector space of dimension 7 over Finite Field of size 2
|
|
344
|
+
"""
|
|
345
|
+
if hasattr(self, "_input_space"):
|
|
346
|
+
return self._input_space
|
|
347
|
+
else:
|
|
348
|
+
raise NotImplementedError("Decoder does not have an _input_space parameter")
|
|
349
|
+
|
|
350
|
+
@abstract_method(optional=True)
|
|
351
|
+
def decoding_radius(self, **kwargs):
|
|
352
|
+
r"""
|
|
353
|
+
Return the maximal number of errors that ``self`` is able to correct.
|
|
354
|
+
|
|
355
|
+
This is an abstract method and it should be implemented in subclasses.
|
|
356
|
+
|
|
357
|
+
EXAMPLES::
|
|
358
|
+
|
|
359
|
+
sage: G = Matrix(GF(2), [[1,1,1,0,0,0,0], [1,0,0,1,1,0,0],
|
|
360
|
+
....: [0,1,0,1,0,1,0], [1,1,0,1,0,0,1]])
|
|
361
|
+
sage: C = LinearCode(G)
|
|
362
|
+
sage: D = codes.decoders.LinearCodeSyndromeDecoder(C)
|
|
363
|
+
sage: D.decoding_radius()
|
|
364
|
+
1
|
|
365
|
+
"""
|
|
366
|
+
raise NotImplementedError
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
class DecodingError(Exception):
|
|
370
|
+
r"""
|
|
371
|
+
Special exception class to indicate an error during decoding.
|
|
372
|
+
"""
|
|
373
|
+
pass
|