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/all.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
|
|
3
|
+
from sage.misc.lazy_import import lazy_import
|
|
4
|
+
|
|
5
|
+
lazy_import("sage.coding.code_constructions", ["permutation_action",
|
|
6
|
+
"walsh_matrix"])
|
|
7
|
+
|
|
8
|
+
lazy_import("sage.coding.linear_code", "LinearCode")
|
|
9
|
+
|
|
10
|
+
# Functions removed from the global namespace
|
|
11
|
+
|
|
12
|
+
lazy_import('sage.coding', 'codes_catalog', 'codes')
|
|
13
|
+
lazy_import('sage.coding', 'channels_catalog', 'channels')
|
|
14
|
+
|
|
15
|
+
del lazy_import
|
sage/coding/bch_code.py
ADDED
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
# sage.doctest: needs sage.modules sage.rings.finite_rings
|
|
3
|
+
r"""
|
|
4
|
+
BCH code
|
|
5
|
+
|
|
6
|
+
Let `F = \GF{q}` and `\Phi` be the splitting field of `x^{n} - 1` over `F`, with
|
|
7
|
+
`n` a positive integer. Let also `\alpha` be an element of multiplicative order
|
|
8
|
+
`n` in `\Phi`. Finally, let `b, \delta, \ell` be integers such that `0 \le b
|
|
9
|
+
\le n`, `1 \le \delta \le n` and `\alpha^\ell` generates the multiplicative
|
|
10
|
+
group `\Phi^{\times}`.
|
|
11
|
+
|
|
12
|
+
A BCH code over `F` with designed distance `\delta` is a cyclic code whose
|
|
13
|
+
codewords `c(x) \in F[x]` satisfy `c(\alpha^{a}) = 0`, for all integers `a` in
|
|
14
|
+
the arithmetic sequence `b, b + \ell, b + 2 \times \ell, \dots, b + (\delta -
|
|
15
|
+
2) \times \ell`.
|
|
16
|
+
"""
|
|
17
|
+
# *****************************************************************************
|
|
18
|
+
# Copyright (C) 2016 David Lucas <david.lucas@inria.fr>
|
|
19
|
+
# 2017 Julien Lavauzelle <julien.lavauzelle@inria.fr>
|
|
20
|
+
#
|
|
21
|
+
# This program is free software: you can redistribute it and/or modify
|
|
22
|
+
# it under the terms of the GNU General Public License as published by
|
|
23
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
24
|
+
# (at your option) any later version.
|
|
25
|
+
# https://www.gnu.org/licenses/
|
|
26
|
+
# *****************************************************************************
|
|
27
|
+
from copy import copy
|
|
28
|
+
|
|
29
|
+
from sage.modules.free_module_element import vector
|
|
30
|
+
from sage.misc.misc_c import prod
|
|
31
|
+
from sage.categories.fields import Fields
|
|
32
|
+
from sage.arith.misc import gcd
|
|
33
|
+
from sage.rings.finite_rings.integer_mod_ring import IntegerModRing as Zmod
|
|
34
|
+
|
|
35
|
+
from .cyclic_code import CyclicCode
|
|
36
|
+
from .grs_code import GeneralizedReedSolomonCode
|
|
37
|
+
from .decoder import Decoder
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class BCHCode(CyclicCode):
|
|
41
|
+
r"""
|
|
42
|
+
Representation of a BCH code seen as a cyclic code.
|
|
43
|
+
|
|
44
|
+
INPUT:
|
|
45
|
+
|
|
46
|
+
- ``base_field`` -- the base field for this code
|
|
47
|
+
|
|
48
|
+
- ``length`` -- the length of the code
|
|
49
|
+
|
|
50
|
+
- ``designed_distance`` -- the designed minimum distance of the code
|
|
51
|
+
|
|
52
|
+
- ``primitive_root`` -- (default: ``None``) the primitive root to use when
|
|
53
|
+
creating the set of roots for the generating polynomial over the
|
|
54
|
+
splitting field. It has to be of multiplicative order ``length`` over
|
|
55
|
+
this field. If the splitting field is not ``field``, it also has to be a
|
|
56
|
+
polynomial in ``zx``, where ``x`` is the degree of the extension field.
|
|
57
|
+
For instance, over `\GF{16}`, it has to be a polynomial in ``z4``.
|
|
58
|
+
|
|
59
|
+
- ``offset`` -- (default: ``1``) the first element in the defining set
|
|
60
|
+
|
|
61
|
+
- ``jump_size`` -- (default: ``1``) the jump size between two elements of
|
|
62
|
+
the defining set. It must be coprime with the multiplicative order of
|
|
63
|
+
``primitive_root``.
|
|
64
|
+
|
|
65
|
+
- ``b`` -- (default: ``0``) is exactly the same as ``offset``. It is only
|
|
66
|
+
here for retro-compatibility purposes with the old signature of
|
|
67
|
+
:meth:`codes.BCHCode` and will be removed soon.
|
|
68
|
+
|
|
69
|
+
EXAMPLES:
|
|
70
|
+
|
|
71
|
+
As explained above, BCH codes can be built through various parameters::
|
|
72
|
+
|
|
73
|
+
sage: C = codes.BCHCode(GF(2), 15, 7, offset=1)
|
|
74
|
+
sage: C
|
|
75
|
+
[15, 5] BCH Code over GF(2) with designed distance 7
|
|
76
|
+
sage: C.generator_polynomial()
|
|
77
|
+
x^10 + x^8 + x^5 + x^4 + x^2 + x + 1
|
|
78
|
+
|
|
79
|
+
sage: C = codes.BCHCode(GF(2), 15, 4, offset=1, jump_size=8)
|
|
80
|
+
sage: C
|
|
81
|
+
[15, 7] BCH Code over GF(2) with designed distance 4
|
|
82
|
+
sage: C.generator_polynomial()
|
|
83
|
+
x^8 + x^7 + x^6 + x^4 + 1
|
|
84
|
+
|
|
85
|
+
BCH codes are cyclic, and can be interfaced into the :class:`CyclicCode` class.
|
|
86
|
+
The smallest GRS code which contains a given BCH code can also be computed,
|
|
87
|
+
and these two codes may be equal::
|
|
88
|
+
|
|
89
|
+
sage: C = codes.BCHCode(GF(16), 15, 7)
|
|
90
|
+
sage: R = C.bch_to_grs()
|
|
91
|
+
sage: codes.CyclicCode(code=R) == codes.CyclicCode(code=C)
|
|
92
|
+
True
|
|
93
|
+
|
|
94
|
+
The `\delta = 15, 1` cases (trivial codes) also work::
|
|
95
|
+
|
|
96
|
+
sage: C = codes.BCHCode(GF(16), 15, 1)
|
|
97
|
+
sage: C.dimension()
|
|
98
|
+
15
|
|
99
|
+
sage: C.defining_set()
|
|
100
|
+
[]
|
|
101
|
+
sage: C.generator_polynomial()
|
|
102
|
+
1
|
|
103
|
+
sage: C = codes.BCHCode(GF(16), 15, 15)
|
|
104
|
+
sage: C.dimension()
|
|
105
|
+
1
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def __init__(self, base_field, length, designed_distance,
|
|
109
|
+
primitive_root=None, offset=1, jump_size=1, b=0):
|
|
110
|
+
"""
|
|
111
|
+
TESTS:
|
|
112
|
+
|
|
113
|
+
``designed_distance`` must be between 1 and ``length`` (inclusive),
|
|
114
|
+
otherwise an exception is raised::
|
|
115
|
+
|
|
116
|
+
sage: C = codes.BCHCode(GF(2), 15, 16)
|
|
117
|
+
Traceback (most recent call last):
|
|
118
|
+
...
|
|
119
|
+
ValueError: designed_distance must belong to [1, n]
|
|
120
|
+
"""
|
|
121
|
+
if not (0 < designed_distance <= length):
|
|
122
|
+
raise ValueError("designed_distance must belong to [1, n]")
|
|
123
|
+
|
|
124
|
+
if base_field not in Fields() or not base_field.is_finite():
|
|
125
|
+
raise ValueError("base_field has to be a finite field")
|
|
126
|
+
|
|
127
|
+
q = base_field.cardinality()
|
|
128
|
+
s = Zmod(length)(q).multiplicative_order()
|
|
129
|
+
if gcd(jump_size, q ** s - 1) != 1:
|
|
130
|
+
raise ValueError("jump_size must be coprime with the order of "
|
|
131
|
+
"the multiplicative group of the splitting field")
|
|
132
|
+
|
|
133
|
+
D = [(offset + jump_size * i) % length
|
|
134
|
+
for i in range(designed_distance - 1)]
|
|
135
|
+
|
|
136
|
+
super().__init__(field=base_field, length=length,
|
|
137
|
+
D=D, primitive_root=primitive_root)
|
|
138
|
+
self._default_decoder_name = "UnderlyingGRS"
|
|
139
|
+
self._jump_size = jump_size
|
|
140
|
+
self._offset = offset
|
|
141
|
+
self._designed_distance = designed_distance
|
|
142
|
+
|
|
143
|
+
def __eq__(self, other):
|
|
144
|
+
r"""
|
|
145
|
+
Test equality between BCH Code objects.
|
|
146
|
+
|
|
147
|
+
EXAMPLES::
|
|
148
|
+
|
|
149
|
+
sage: F = GF(16, 'a')
|
|
150
|
+
sage: n = 15
|
|
151
|
+
sage: C1 = codes.BCHCode(F, n, 2)
|
|
152
|
+
sage: C2 = codes.BCHCode(F, n, 2)
|
|
153
|
+
sage: C1 == C2
|
|
154
|
+
True
|
|
155
|
+
"""
|
|
156
|
+
return (isinstance(other, BCHCode) and
|
|
157
|
+
self.length() == other.length() and
|
|
158
|
+
self.jump_size() == other.jump_size() and
|
|
159
|
+
self.offset() == other.offset() and
|
|
160
|
+
self.primitive_root() == other.primitive_root())
|
|
161
|
+
|
|
162
|
+
def _repr_(self):
|
|
163
|
+
r"""
|
|
164
|
+
Return a string representation of ``self``.
|
|
165
|
+
|
|
166
|
+
EXAMPLES::
|
|
167
|
+
|
|
168
|
+
sage: C = codes.BCHCode(GF(2), 15, 7)
|
|
169
|
+
sage: C
|
|
170
|
+
[15, 5] BCH Code over GF(2) with designed distance 7
|
|
171
|
+
"""
|
|
172
|
+
return ("[%s, %s] BCH Code over GF(%s) with designed distance %d"
|
|
173
|
+
% (self.length(), self.dimension(),
|
|
174
|
+
self.base_field().cardinality(), self.designed_distance()))
|
|
175
|
+
|
|
176
|
+
def _latex_(self):
|
|
177
|
+
r"""
|
|
178
|
+
Return a latex representation of ``self``.
|
|
179
|
+
|
|
180
|
+
EXAMPLES::
|
|
181
|
+
|
|
182
|
+
sage: C = codes.BCHCode(GF(2), 15, 7)
|
|
183
|
+
sage: latex(C)
|
|
184
|
+
[15, 5] \textnormal{ BCH Code over } \Bold{F}_{2} \textnormal{ with designed distance } 7
|
|
185
|
+
"""
|
|
186
|
+
return ("[%s, %s] \\textnormal{ BCH Code over } %s \\textnormal{ with designed distance } %s"
|
|
187
|
+
% (self.length(), self.dimension(),
|
|
188
|
+
self.base_field()._latex_(), self.designed_distance()))
|
|
189
|
+
|
|
190
|
+
def jump_size(self):
|
|
191
|
+
r"""
|
|
192
|
+
Return the jump size between two consecutive elements of the defining
|
|
193
|
+
set of ``self``.
|
|
194
|
+
|
|
195
|
+
EXAMPLES::
|
|
196
|
+
|
|
197
|
+
sage: C = codes.BCHCode(GF(2), 15, 4, jump_size = 2)
|
|
198
|
+
sage: C.jump_size()
|
|
199
|
+
2
|
|
200
|
+
"""
|
|
201
|
+
return self._jump_size
|
|
202
|
+
|
|
203
|
+
def offset(self):
|
|
204
|
+
r"""
|
|
205
|
+
Return the offset which was used to compute the elements in
|
|
206
|
+
the defining set of ``self``.
|
|
207
|
+
|
|
208
|
+
EXAMPLES::
|
|
209
|
+
|
|
210
|
+
sage: C = codes.BCHCode(GF(2), 15, 4, offset = 1)
|
|
211
|
+
sage: C.offset()
|
|
212
|
+
1
|
|
213
|
+
"""
|
|
214
|
+
return self._offset
|
|
215
|
+
|
|
216
|
+
def designed_distance(self):
|
|
217
|
+
r"""
|
|
218
|
+
Return the designed distance of ``self``.
|
|
219
|
+
|
|
220
|
+
EXAMPLES::
|
|
221
|
+
|
|
222
|
+
sage: C = codes.BCHCode(GF(2), 15, 4)
|
|
223
|
+
sage: C.designed_distance()
|
|
224
|
+
4
|
|
225
|
+
"""
|
|
226
|
+
return self._designed_distance
|
|
227
|
+
|
|
228
|
+
def bch_to_grs(self):
|
|
229
|
+
r"""
|
|
230
|
+
Return the underlying GRS code from which ``self`` was derived.
|
|
231
|
+
|
|
232
|
+
EXAMPLES::
|
|
233
|
+
|
|
234
|
+
sage: C = codes.BCHCode(GF(2), 15, 3)
|
|
235
|
+
sage: RS = C.bch_to_grs()
|
|
236
|
+
sage: RS
|
|
237
|
+
[15, 13, 3] Reed-Solomon Code over GF(16)
|
|
238
|
+
sage: C.generator_matrix() * RS.parity_check_matrix().transpose() == 0
|
|
239
|
+
True
|
|
240
|
+
"""
|
|
241
|
+
l = self.jump_size()
|
|
242
|
+
b = self.offset()
|
|
243
|
+
n = self.length()
|
|
244
|
+
designed_distance = self.designed_distance()
|
|
245
|
+
grs_dim = n - designed_distance + 1
|
|
246
|
+
|
|
247
|
+
alpha = self.primitive_root()
|
|
248
|
+
alpha_l = alpha ** l
|
|
249
|
+
alpha_b = alpha ** b
|
|
250
|
+
evals = [alpha_l ** i for i in range(n)]
|
|
251
|
+
pcm = [alpha_b ** i for i in range(n)]
|
|
252
|
+
|
|
253
|
+
multipliers_product = [1/prod([evals[i] - evals[h] for h in range(n) if h != i]) for i in range(n)]
|
|
254
|
+
column_multipliers = [multipliers_product[i]/pcm[i] for i in range(n)]
|
|
255
|
+
|
|
256
|
+
return GeneralizedReedSolomonCode(evals, grs_dim, column_multipliers)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
class BCHUnderlyingGRSDecoder(Decoder):
|
|
260
|
+
r"""
|
|
261
|
+
A decoder which decodes through the underlying
|
|
262
|
+
:class:`sage.coding.grs_code.GeneralizedReedSolomonCode` code of the provided
|
|
263
|
+
BCH code.
|
|
264
|
+
|
|
265
|
+
INPUT:
|
|
266
|
+
|
|
267
|
+
- ``code`` -- the associated code of this decoder
|
|
268
|
+
|
|
269
|
+
- ``grs_decoder`` -- the string name of the decoder to use over the
|
|
270
|
+
underlying GRS code
|
|
271
|
+
|
|
272
|
+
- ``**kwargs`` -- all extra arguments are forwarded to the GRS decoder
|
|
273
|
+
"""
|
|
274
|
+
|
|
275
|
+
def __init__(self, code, grs_decoder='KeyEquationSyndrome', **kwargs):
|
|
276
|
+
r"""
|
|
277
|
+
|
|
278
|
+
EXAMPLES::
|
|
279
|
+
|
|
280
|
+
sage: C = codes.BCHCode(GF(4, 'a'), 15, 3, jump_size=2)
|
|
281
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
282
|
+
sage: D
|
|
283
|
+
Decoder through the underlying GRS code of [15, 11] BCH Code over GF(4) with designed distance 3
|
|
284
|
+
"""
|
|
285
|
+
self._grs_code = code.bch_to_grs()
|
|
286
|
+
self._grs_decoder = self._grs_code.decoder(grs_decoder, **kwargs)
|
|
287
|
+
self._decoder_type = copy(self._grs_decoder.decoder_type())
|
|
288
|
+
super().__init__(code, code.ambient_space(), "Vector")
|
|
289
|
+
|
|
290
|
+
def _repr_(self):
|
|
291
|
+
r"""
|
|
292
|
+
Return a string representation of ``self``.
|
|
293
|
+
|
|
294
|
+
EXAMPLES::
|
|
295
|
+
|
|
296
|
+
sage: C = codes.BCHCode(GF(4, 'a'), 15, 3, jump_size=2)
|
|
297
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
298
|
+
sage: D
|
|
299
|
+
Decoder through the underlying GRS code of [15, 11] BCH Code over GF(4) with designed distance 3
|
|
300
|
+
"""
|
|
301
|
+
return "Decoder through the underlying GRS code of %s" % self.code()
|
|
302
|
+
|
|
303
|
+
def _latex_(self):
|
|
304
|
+
r"""
|
|
305
|
+
Return a latex representation of ``self``.
|
|
306
|
+
|
|
307
|
+
EXAMPLES::
|
|
308
|
+
|
|
309
|
+
sage: C = codes.BCHCode(GF(4, 'a'), 15, 3, jump_size=2)
|
|
310
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
311
|
+
sage: latex(D)
|
|
312
|
+
\textnormal{Decoder through the underlying GRS code of } [15, 11] \textnormal{ BCH Code over } \Bold{F}_{2^{2}} \textnormal{ with designed distance } 3
|
|
313
|
+
"""
|
|
314
|
+
return ("\\textnormal{Decoder through the underlying GRS code of } %s"
|
|
315
|
+
% self.code()._latex_())
|
|
316
|
+
|
|
317
|
+
def grs_code(self):
|
|
318
|
+
r"""
|
|
319
|
+
Return the underlying GRS code of :meth:`sage.coding.decoder.Decoder.code`.
|
|
320
|
+
|
|
321
|
+
.. NOTE::
|
|
322
|
+
|
|
323
|
+
Let us explain what is the underlying GRS code of a BCH code of
|
|
324
|
+
length `n` over `F` with parameters `b, \delta, \ell`. Let
|
|
325
|
+
`c \in F^n` and `\alpha` a primitive root of the splitting field.
|
|
326
|
+
We know:
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
.. MATH::
|
|
330
|
+
|
|
331
|
+
\begin{aligned}
|
|
332
|
+
c \in \mathrm{BCH} &\iff \sum_{i=0}^{n-1} c_i (\alpha^{b + \ell j})^i =0, \quad j=0,\dots,\delta-2\\
|
|
333
|
+
& \iff H c = 0
|
|
334
|
+
\end{aligned}
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
where `H = A \times D` with:
|
|
338
|
+
|
|
339
|
+
.. MATH::
|
|
340
|
+
|
|
341
|
+
\begin{aligned}
|
|
342
|
+
A = &\, \begin{pmatrix}
|
|
343
|
+
1 & \dots & 1 \\
|
|
344
|
+
~ & ~ & ~ \\
|
|
345
|
+
(\alpha^{0 \times \ell})^{\delta-2} & \dots & (\alpha^{(n-1) \ell})^{\delta-2}
|
|
346
|
+
\end{pmatrix}\\
|
|
347
|
+
D =&\, \begin{pmatrix}
|
|
348
|
+
1 & 0 & \dots & 0 \\
|
|
349
|
+
0 & \alpha^b & ~ & ~ \\
|
|
350
|
+
\dots & & \dots & 0 \\
|
|
351
|
+
0 & \dots & 0 & \alpha^{b(n-1)} \end{pmatrix}
|
|
352
|
+
\end{aligned}
|
|
353
|
+
|
|
354
|
+
The BCH code is orthogonal to the GRS code `C'` of dimension
|
|
355
|
+
`\delta - 1` with evaluation points
|
|
356
|
+
`\{1 = \alpha^{0 \times \ell}, \dots, \alpha^{(n-1) \ell} \}`
|
|
357
|
+
and associated multipliers
|
|
358
|
+
`\{1 = \alpha^{0 \times b}, \dots, \alpha^{(n-1) b} \}`.
|
|
359
|
+
The underlying GRS code is the dual code of `C'`.
|
|
360
|
+
|
|
361
|
+
EXAMPLES::
|
|
362
|
+
|
|
363
|
+
sage: C = codes.BCHCode(GF(2), 15, 3)
|
|
364
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
365
|
+
sage: D.grs_code()
|
|
366
|
+
[15, 13, 3] Reed-Solomon Code over GF(16)
|
|
367
|
+
"""
|
|
368
|
+
return self._grs_code
|
|
369
|
+
|
|
370
|
+
def grs_decoder(self):
|
|
371
|
+
r"""
|
|
372
|
+
Return the decoder used to decode words of :meth:`grs_code`.
|
|
373
|
+
|
|
374
|
+
EXAMPLES::
|
|
375
|
+
|
|
376
|
+
sage: C = codes.BCHCode(GF(4, 'a'), 15, 3, jump_size=2)
|
|
377
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
378
|
+
sage: D.grs_decoder()
|
|
379
|
+
Key equation decoder for [15, 13, 3] Generalized Reed-Solomon Code over GF(16)
|
|
380
|
+
"""
|
|
381
|
+
return self._grs_decoder
|
|
382
|
+
|
|
383
|
+
def bch_word_to_grs(self, c):
|
|
384
|
+
r"""
|
|
385
|
+
Return ``c`` converted as a codeword of :meth:`grs_code`.
|
|
386
|
+
|
|
387
|
+
EXAMPLES::
|
|
388
|
+
|
|
389
|
+
sage: C = codes.BCHCode(GF(2), 15, 3)
|
|
390
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
391
|
+
sage: c = C.random_element()
|
|
392
|
+
sage: y = D.bch_word_to_grs(c)
|
|
393
|
+
sage: y.parent()
|
|
394
|
+
Vector space of dimension 15 over Finite Field in z4 of size 2^4
|
|
395
|
+
sage: y in D.grs_code()
|
|
396
|
+
True
|
|
397
|
+
"""
|
|
398
|
+
phi = self.code().field_embedding()
|
|
399
|
+
return vector([phi(x) for x in c])
|
|
400
|
+
|
|
401
|
+
def grs_word_to_bch(self, c):
|
|
402
|
+
r"""
|
|
403
|
+
Return ``c`` converted as a codeword of :meth:`sage.coding.decoder.Decoder.code`.
|
|
404
|
+
|
|
405
|
+
EXAMPLES::
|
|
406
|
+
|
|
407
|
+
sage: C = codes.BCHCode(GF(4, 'a'), 15, 3, jump_size=2)
|
|
408
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
409
|
+
sage: Cgrs = D.grs_code()
|
|
410
|
+
sage: Fgrs = Cgrs.base_field()
|
|
411
|
+
sage: b = Fgrs.gen()
|
|
412
|
+
sage: c = vector(Fgrs, [0, b^2 + b, 1, b^2 + b, 0, 1, 1, 1,
|
|
413
|
+
....: b^2 + b, 0, 0, b^2 + b + 1, b^2 + b, 0, 1])
|
|
414
|
+
sage: D.grs_word_to_bch(c)
|
|
415
|
+
(0, a, 1, a, 0, 1, 1, 1, a, 0, 0, a + 1, a, 0, 1)
|
|
416
|
+
"""
|
|
417
|
+
C = self.code()
|
|
418
|
+
sec = C.field_embedding().section()
|
|
419
|
+
return vector([sec(x) for x in c])
|
|
420
|
+
|
|
421
|
+
def decode_to_code(self, y):
|
|
422
|
+
r"""
|
|
423
|
+
Decodes ``y`` to a codeword in :meth:`sage.coding.decoder.Decoder.code`.
|
|
424
|
+
|
|
425
|
+
EXAMPLES::
|
|
426
|
+
|
|
427
|
+
sage: F = GF(4, 'a')
|
|
428
|
+
sage: a = F.gen()
|
|
429
|
+
sage: C = codes.BCHCode(F, 15, 3, jump_size=2)
|
|
430
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
431
|
+
sage: y = vector(F, [a, a + 1, 1, a + 1, 1, a, a + 1,
|
|
432
|
+
....: a + 1, 0, 1, a + 1, 1, 1, 1, a])
|
|
433
|
+
sage: D.decode_to_code(y)
|
|
434
|
+
(a, a + 1, 1, a + 1, 1, a, a + 1, a + 1, 0, 1, a + 1, 1, 1, 1, a)
|
|
435
|
+
sage: D.decode_to_code(y) in C
|
|
436
|
+
True
|
|
437
|
+
|
|
438
|
+
We check that it still works when, while list-decoding, the GRS decoder
|
|
439
|
+
output some words which do not lie in the BCH code::
|
|
440
|
+
|
|
441
|
+
sage: # needs sage.symbolic
|
|
442
|
+
sage: C = codes.BCHCode(GF(2), 31, 15)
|
|
443
|
+
sage: C
|
|
444
|
+
[31, 6] BCH Code over GF(2) with designed distance 15
|
|
445
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C, "GuruswamiSudan", tau=8)
|
|
446
|
+
sage: Dgrs = D.grs_decoder()
|
|
447
|
+
sage: c = vector(GF(2), [1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,
|
|
448
|
+
....: 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0])
|
|
449
|
+
sage: y = vector(GF(2), [1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,
|
|
450
|
+
....: 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0])
|
|
451
|
+
sage: print (c in C and (c-y).hamming_weight() == 8)
|
|
452
|
+
True
|
|
453
|
+
sage: Dgrs.decode_to_code(y)
|
|
454
|
+
[(1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1,
|
|
455
|
+
0, 1, 1, 0, 1, 0, 0),
|
|
456
|
+
(1, z5^3 + z5^2 + z5 + 1, z5^4 + z5^2 + z5, z5^4 + z5^3 + z5^2 + 1, 0, 0,
|
|
457
|
+
z5^4 + z5 + 1, 1, z5^4 + z5^2 + z5, 0, 1, z5^4 + z5, 1, 0, 1, 1, 1, 0,
|
|
458
|
+
0, z5^4 + z5^3 + 1, 1, 0, 1, 1, 1, 1, z5^4 + z5^3 + z5 + 1, 1, 1, 0, 0)]
|
|
459
|
+
sage: D.decode_to_code(y) == [c]
|
|
460
|
+
True
|
|
461
|
+
"""
|
|
462
|
+
D = self.grs_decoder()
|
|
463
|
+
ygrs = self.bch_word_to_grs(y)
|
|
464
|
+
cgrs = D.decode_to_code(ygrs)
|
|
465
|
+
if "list-decoder" in D.decoder_type():
|
|
466
|
+
l = []
|
|
467
|
+
for c in cgrs:
|
|
468
|
+
try:
|
|
469
|
+
c_bch = self.grs_word_to_bch(c)
|
|
470
|
+
if c_bch in self.code():
|
|
471
|
+
l.append(c_bch)
|
|
472
|
+
except ValueError:
|
|
473
|
+
pass
|
|
474
|
+
return l
|
|
475
|
+
return self.grs_word_to_bch(cgrs)
|
|
476
|
+
|
|
477
|
+
def decoding_radius(self):
|
|
478
|
+
r"""
|
|
479
|
+
Return maximal number of errors that ``self`` can decode.
|
|
480
|
+
|
|
481
|
+
EXAMPLES::
|
|
482
|
+
|
|
483
|
+
sage: C = codes.BCHCode(GF(4, 'a'), 15, 3, jump_size=2)
|
|
484
|
+
sage: D = codes.decoders.BCHUnderlyingGRSDecoder(C)
|
|
485
|
+
sage: D.decoding_radius()
|
|
486
|
+
1
|
|
487
|
+
"""
|
|
488
|
+
return self.grs_decoder().decoding_radius()
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
####################### registration ###############################
|
|
492
|
+
|
|
493
|
+
BCHCode._registered_decoders["UnderlyingGRS"] = BCHUnderlyingGRSDecoder
|
|
494
|
+
BCHUnderlyingGRSDecoder._decoder_type = {"dynamic"}
|
|
Binary file
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-modules
|
|
2
|
+
from memory_allocator cimport MemoryAllocator
|
|
3
|
+
|
|
4
|
+
cdef int *hamming_weights() noexcept
|
|
5
|
+
|
|
6
|
+
ctypedef unsigned int codeword
|
|
7
|
+
|
|
8
|
+
cdef struct WordPermutation:
|
|
9
|
+
# A word permutation is a permutation of the bits in a codeword.
|
|
10
|
+
int chunk_num
|
|
11
|
+
int chunk_words
|
|
12
|
+
int degree
|
|
13
|
+
codeword **images
|
|
14
|
+
codeword gate
|
|
15
|
+
|
|
16
|
+
cdef class BinaryCode:
|
|
17
|
+
cdef MemoryAllocator mem
|
|
18
|
+
cdef codeword *basis
|
|
19
|
+
cdef codeword *words
|
|
20
|
+
cdef int ncols
|
|
21
|
+
cdef int nrows
|
|
22
|
+
cdef int radix
|
|
23
|
+
cdef int nwords
|
|
24
|
+
|
|
25
|
+
cdef int is_one(self, int, int) noexcept
|
|
26
|
+
cdef int is_automorphism(self, int *, int *) noexcept
|
|
27
|
+
cpdef int put_in_std_form(self) noexcept
|
|
28
|
+
cdef void _apply_permutation_to_basis(self, object labeling) noexcept
|
|
29
|
+
cdef void _update_words_from_basis(self) noexcept
|
|
30
|
+
|
|
31
|
+
cdef WordPermutation *create_word_perm(object) noexcept
|
|
32
|
+
cdef WordPermutation *create_array_word_perm(int *, int, int) noexcept
|
|
33
|
+
cdef WordPermutation *create_id_word_perm(int) noexcept
|
|
34
|
+
cdef WordPermutation *create_comp_word_perm(WordPermutation *, WordPermutation *) noexcept
|
|
35
|
+
cdef WordPermutation *create_inv_word_perm(WordPermutation *) noexcept
|
|
36
|
+
cdef int dealloc_word_perm(WordPermutation *) noexcept
|
|
37
|
+
cdef codeword permute_word_by_wp(WordPermutation *, codeword) noexcept
|
|
38
|
+
cdef codeword *expand_to_ortho_basis(BinaryCode, int) noexcept
|
|
39
|
+
|
|
40
|
+
cdef class OrbitPartition:
|
|
41
|
+
cdef MemoryAllocator mem
|
|
42
|
+
cdef int nwords
|
|
43
|
+
cdef int ncols
|
|
44
|
+
cdef int *wd_parent
|
|
45
|
+
cdef int *wd_rank
|
|
46
|
+
cdef int *wd_min_cell_rep
|
|
47
|
+
cdef int *wd_size
|
|
48
|
+
cdef int *col_parent
|
|
49
|
+
cdef int *col_rank
|
|
50
|
+
cdef int *col_min_cell_rep
|
|
51
|
+
cdef int *col_size
|
|
52
|
+
|
|
53
|
+
cdef int wd_find(self, int) noexcept
|
|
54
|
+
cdef void wd_union(self, int, int) noexcept
|
|
55
|
+
cdef int col_find(self, int) noexcept
|
|
56
|
+
cdef void col_union(self, int, int) noexcept
|
|
57
|
+
cdef int merge_perm(self, int *, int *) noexcept
|
|
58
|
+
|
|
59
|
+
cdef class PartitionStack:
|
|
60
|
+
cdef MemoryAllocator mem
|
|
61
|
+
cdef int *wd_ents
|
|
62
|
+
cdef int *wd_lvls
|
|
63
|
+
cdef int *col_ents
|
|
64
|
+
cdef int *col_lvls
|
|
65
|
+
cdef int *basis_locations
|
|
66
|
+
cdef int nwords
|
|
67
|
+
cdef int nrows
|
|
68
|
+
cdef int ncols
|
|
69
|
+
cdef int radix
|
|
70
|
+
cdef int flag
|
|
71
|
+
cdef int *col_degs #
|
|
72
|
+
cdef int *col_counts #
|
|
73
|
+
cdef int *col_output #
|
|
74
|
+
cdef int *wd_degs #
|
|
75
|
+
cdef int *wd_counts # These are just for scratch space...
|
|
76
|
+
cdef int *wd_output #
|
|
77
|
+
|
|
78
|
+
cdef int is_discrete(self, int) noexcept
|
|
79
|
+
cdef int num_cells(self, int) noexcept
|
|
80
|
+
cdef int sat_225(self, int) noexcept
|
|
81
|
+
cdef void new_min_cell_reps(self, int, unsigned int *, int) noexcept
|
|
82
|
+
cdef void fixed_vertices(self, int, unsigned int *, unsigned int *, int) noexcept
|
|
83
|
+
cdef int new_first_smallest_nontrivial(self, int, unsigned int *, int) noexcept
|
|
84
|
+
cdef void col_percolate(self, int, int) noexcept
|
|
85
|
+
cdef void wd_percolate(self, int, int) noexcept
|
|
86
|
+
cdef int split_vertex(self, int, int) noexcept
|
|
87
|
+
cdef int col_degree(self, BinaryCode, int, int, int) noexcept
|
|
88
|
+
cdef int wd_degree(self, BinaryCode, int, int, int, int *) noexcept
|
|
89
|
+
cdef int sort_cols(self, int, int) noexcept
|
|
90
|
+
cdef int sort_wds(self, int, int) noexcept
|
|
91
|
+
cdef int refine(self, int, int *, int, BinaryCode, int *) noexcept
|
|
92
|
+
cdef void clear(self, int) noexcept
|
|
93
|
+
cpdef int cmp(self, PartitionStack, BinaryCode) noexcept
|
|
94
|
+
cdef int find_basis(self, int *) noexcept
|
|
95
|
+
cdef void get_permutation(self, PartitionStack, int *, int *) noexcept
|
|
96
|
+
|
|
97
|
+
cdef class BinaryCodeClassifier:
|
|
98
|
+
cdef MemoryAllocator mem
|
|
99
|
+
cdef int *ham_wts
|
|
100
|
+
cdef int L
|
|
101
|
+
cdef unsigned int *Phi
|
|
102
|
+
cdef unsigned int *Omega
|
|
103
|
+
cdef unsigned int *W
|
|
104
|
+
cdef int radix
|
|
105
|
+
cdef int *Lambda1
|
|
106
|
+
cdef int *Lambda2
|
|
107
|
+
cdef int *Lambda3
|
|
108
|
+
cdef int *w_gamma
|
|
109
|
+
cdef int *c_gamma
|
|
110
|
+
cdef int w_gamma_size
|
|
111
|
+
cdef int *alpha
|
|
112
|
+
cdef int alpha_size
|
|
113
|
+
cdef int *v
|
|
114
|
+
cdef int *e
|
|
115
|
+
cdef int *aut_gp_gens
|
|
116
|
+
cdef int *labeling
|
|
117
|
+
cdef int *base
|
|
118
|
+
cdef int aut_gp_index, aut_gens_size, base_size
|
|
119
|
+
cdef object aut_gp_size
|
|
120
|
+
|
|
121
|
+
cdef int Phi_size
|
|
122
|
+
|
|
123
|
+
cdef void record_automorphism(self, int *, int) noexcept
|
|
124
|
+
cdef void aut_gp_and_can_label(self, BinaryCode, int) noexcept
|