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.

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -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