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,897 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules sage.rings.finite_rings sage.symbolic
3
+ r"""
4
+ Guruswami-Sudan decoder for (Generalized) Reed-Solomon codes
5
+
6
+ REFERENCES:
7
+
8
+ - [GS1999]_
9
+
10
+ - [Nie2013]_
11
+
12
+ AUTHORS:
13
+
14
+ - Johan S. R. Nielsen, original implementation (see [Nie]_ for details)
15
+ - David Lucas, ported the original implementation in Sage
16
+ """
17
+
18
+ # ****************************************************************************
19
+ # Copyright (C) 2015 David Lucas <david.lucas@inria.fr>
20
+ # 2015 Johan S. R. Nielsen <jsrn@jsrn.dk>
21
+ #
22
+ # This program is free software: you can redistribute it and/or modify
23
+ # it under the terms of the GNU General Public License as published by
24
+ # the Free Software Foundation, either version 2 of the License, or
25
+ # (at your option) any later version.
26
+ # https://www.gnu.org/licenses/
27
+ # ****************************************************************************
28
+
29
+ from sage.coding.grs_code import GeneralizedReedSolomonCode
30
+ from sage.rings.integer_ring import ZZ
31
+ from sage.coding.decoder import Decoder
32
+ from sage.coding.guruswami_sudan.interpolation import gs_interpolation_linalg, gs_interpolation_lee_osullivan
33
+ from sage.coding.guruswami_sudan.utils import (johnson_radius,
34
+ gilt,
35
+ solve_degree2_to_integer_range)
36
+ from sage.functions.other import floor
37
+ from sage.misc.functional import sqrt
38
+
39
+
40
+ def n_k_params(C, n_k):
41
+ r"""
42
+ Internal helper function for the :class:`GRSGuruswamiSudanDecoder` class for
43
+ allowing to specify either a GRS code `C` or the length and dimensions `n,
44
+ k` directly, in all the static functions.
45
+
46
+ If neither `C` or `n,k` were specified to those functions, an appropriate
47
+ error should be raised. Otherwise, `n, k` of the code or the supplied tuple
48
+ directly is returned.
49
+
50
+ INPUT:
51
+
52
+ - ``C`` -- a GRS code or ``None``
53
+
54
+ - ``n_k`` -- tuple `(n,k)` being length and dimension of a GRS code, or
55
+ ``None``
56
+
57
+ OUTPUT:
58
+
59
+ - ``n_k`` -- tuple `(n,k)` being length and dimension of a GRS code
60
+
61
+ EXAMPLES::
62
+
63
+ sage: from sage.coding.guruswami_sudan.gs_decoder import n_k_params
64
+ sage: n_k_params(None, (10, 5))
65
+ (10, 5)
66
+ sage: C = codes.GeneralizedReedSolomonCode(GF(11).list()[:10], 5)
67
+ sage: n_k_params(C, None)
68
+ (10, 5)
69
+ sage: n_k_params(None,None)
70
+ Traceback (most recent call last):
71
+ ...
72
+ ValueError: Please provide either the code or its length and dimension
73
+ sage: n_k_params(C, (12, 2))
74
+ Traceback (most recent call last):
75
+ ...
76
+ ValueError: Please provide only the code or its length and dimension
77
+ """
78
+ if C is not None and n_k is not None:
79
+ raise ValueError("Please provide only the code or its length and dimension")
80
+ elif C is None and n_k is None:
81
+ raise ValueError("Please provide either the code or its length and dimension")
82
+ elif C is not None:
83
+ return C.length(), C.dimension()
84
+ elif n_k is not None and not isinstance(n_k, tuple):
85
+ raise ValueError("n_k has to be a tuple")
86
+ elif n_k is not None:
87
+ return n_k
88
+
89
+
90
+ def roth_ruckenstein_root_finder(p, maxd=None, precision=None):
91
+ """
92
+ Wrapper for Roth-Ruckenstein algorithm to compute the roots of a polynomial
93
+ with coefficients in `F[x]`.
94
+
95
+ TESTS::
96
+
97
+ sage: from sage.coding.guruswami_sudan.gs_decoder import roth_ruckenstein_root_finder
98
+ sage: R.<x> = GF(13)[]
99
+ sage: S.<y> = R[]
100
+ sage: p = (y - x^2 - x - 1) * (y + x + 1)
101
+ sage: roth_ruckenstein_root_finder(p, maxd = 2)
102
+ [12*x + 12, x^2 + x + 1]
103
+ """
104
+ gens = p.parent().gens()
105
+ if len(gens) == 2:
106
+ p = p.polynomial(gens[1])
107
+ return p.roots(multiplicities=False, degree_bound=maxd, algorithm='Roth-Ruckenstein')
108
+
109
+
110
+ def alekhnovich_root_finder(p, maxd=None, precision=None):
111
+ """
112
+ Wrapper for Alekhnovich's algorithm to compute the roots of a polynomial
113
+ with coefficients in `F[x]`.
114
+
115
+ TESTS::
116
+
117
+ sage: from sage.coding.guruswami_sudan.gs_decoder import alekhnovich_root_finder
118
+ sage: R.<x> = GF(13)[]
119
+ sage: S.<y> = R[]
120
+ sage: p = (y - x^2 - x - 1) * (y + x + 1)
121
+ sage: alekhnovich_root_finder(p, maxd = 2)
122
+ [12*x + 12, x^2 + x + 1]
123
+ """
124
+ gens = p.parent().gens()
125
+ if len(gens) == 2:
126
+ p = p.polynomial(gens[1])
127
+ return p.roots(multiplicities=False, degree_bound=maxd, algorithm='Alekhnovich')
128
+
129
+
130
+ class GRSGuruswamiSudanDecoder(Decoder):
131
+ r"""
132
+ The Guruswami-Sudan list-decoding algorithm for decoding Generalized
133
+ Reed-Solomon codes.
134
+
135
+ The Guruswami-Sudan algorithm is a polynomial time algorithm to decode
136
+ beyond half the minimum distance of the code. It can decode up to the
137
+ Johnson radius which is `n - \sqrt(n(n-d))`, where `n, d` is the length,
138
+ respectively minimum distance of the RS code. See [GS1999]_ for more details.
139
+ It is a list-decoder meaning that it returns a list of all closest codewords
140
+ or their corresponding message polynomials. Note that the output of the
141
+ ``decode_to_code`` and ``decode_to_message`` methods are therefore lists.
142
+
143
+ The algorithm has two free parameters, the list size and the multiplicity,
144
+ and these determine how many errors the method will correct: generally,
145
+ higher decoding radius requires larger values of these parameters. To decode
146
+ all the way to the Johnson radius, one generally needs values in the order
147
+ of `O(n^2)`, while decoding just one error less requires just `O(n)`.
148
+
149
+ This class has static methods for computing choices of parameters given the
150
+ decoding radius or vice versa.
151
+
152
+ The Guruswami-Sudan consists of two computationally intensive steps:
153
+ Interpolation and Root finding, either of which can be completed in multiple
154
+ ways. This implementation allows choosing the sub-algorithms among currently
155
+ implemented possibilities, or supplying your own.
156
+
157
+ INPUT:
158
+
159
+ - ``code`` -- a code associated to this decoder
160
+
161
+ - ``tau`` -- integer (default: ``None``); the number of errors one wants the
162
+ Guruswami-Sudan algorithm to correct
163
+
164
+ - ``parameters`` -- (default: ``None``) a pair of integers, where:
165
+
166
+ - the first integer is the multiplicity parameter, and
167
+ - the second integer is the list size parameter.
168
+
169
+ - ``interpolation_alg`` -- (default: ``None``) the interpolation algorithm
170
+ that will be used. The following possibilities are currently available:
171
+
172
+ * ``'LinearAlgebra'`` -- uses a linear system solver.
173
+ * ``'LeeOSullivan'`` -- uses Lee O'Sullivan method based on row reduction
174
+ of a matrix
175
+ * ``None`` -- one of the above will be chosen based on the size of the
176
+ code and the parameters.
177
+
178
+ You can also supply your own function to perform the interpolation. See
179
+ NOTE section for details on the signature of this function.
180
+
181
+ - ``root_finder`` -- (default: ``None``) the rootfinding algorithm that will
182
+ be used. The following possibilities are currently available:
183
+
184
+ * ``'Alekhnovich'`` -- uses Alekhnovich's algorithm.
185
+
186
+ * ``'RothRuckenstein'`` -- uses Roth-Ruckenstein algorithm.
187
+
188
+ * ``None`` -- one of the above will be chosen based on the size of the
189
+ code and the parameters.
190
+
191
+ You can also supply your own function to perform the interpolation. See
192
+ NOTE section for details on the signature of this function.
193
+
194
+ .. NOTE::
195
+
196
+ One has to provide either ``tau`` or ``parameters``. If neither are given,
197
+ an exception will be raised.
198
+
199
+ If one provides a function as ``root_finder``, its signature has to be:
200
+ ``my_rootfinder(Q, maxd=default_value, precision=default_value)``. `Q`
201
+ will be given as an element of `F[x][y]`. The function must return the
202
+ roots as a list of polynomials over a univariate polynomial ring. See
203
+ :meth:`roth_ruckenstein_root_finder` for an example.
204
+
205
+ If one provides a function as ``interpolation_alg``, its signature has
206
+ to be: ``my_inter(interpolation_points, tau, s_and_l, wy)``. See
207
+ :meth:`sage.coding.guruswami_sudan.interpolation.gs_interpolation_linalg`
208
+ for an example.
209
+
210
+ EXAMPLES::
211
+
212
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
213
+ sage: D = codes.decoders.GRSGuruswamiSudanDecoder(C, tau=97); D
214
+ Guruswami-Sudan decoder for [250, 70, 181] Reed-Solomon Code over GF(251)
215
+ decoding 97 errors with parameters (1, 2)
216
+
217
+ One can specify multiplicity and list size instead of ``tau``::
218
+
219
+ sage: D = codes.decoders.GRSGuruswamiSudanDecoder(C, parameters=(1,2)); D
220
+ Guruswami-Sudan decoder for [250, 70, 181] Reed-Solomon Code over GF(251)
221
+ decoding 97 errors with parameters (1, 2)
222
+
223
+ One can pass a method as ``root_finder`` (works also for ``interpolation_alg``)::
224
+
225
+ sage: from sage.coding.guruswami_sudan.gs_decoder import roth_ruckenstein_root_finder
226
+ sage: rf = roth_ruckenstein_root_finder
227
+ sage: D = codes.decoders.GRSGuruswamiSudanDecoder(C, parameters=(1,2),
228
+ ....: root_finder=rf); D
229
+ Guruswami-Sudan decoder for [250, 70, 181] Reed-Solomon Code over GF(251)
230
+ decoding 97 errors with parameters (1, 2)
231
+
232
+ If one wants to use the native Sage algorithms for the root finding step,
233
+ one can directly pass the string given in the ``Input`` block of this class.
234
+ This works for ``interpolation_alg`` as well::
235
+
236
+
237
+ sage: D = codes.decoders.GRSGuruswamiSudanDecoder(C, parameters=(1,2),
238
+ ....: root_finder='RothRuckenstein'); D
239
+ Guruswami-Sudan decoder for [250, 70, 181] Reed-Solomon Code over GF(251)
240
+ decoding 97 errors with parameters (1, 2)
241
+
242
+ Actually, we can construct the decoder from ``C`` directly::
243
+
244
+ sage: D = C.decoder("GuruswamiSudan", tau=97); D
245
+ Guruswami-Sudan decoder for [250, 70, 181] Reed-Solomon Code over GF(251)
246
+ decoding 97 errors with parameters (1, 2)
247
+ """
248
+
249
+ ####################### static methods ###############################
250
+
251
+ @staticmethod
252
+ def parameters_given_tau(tau, C=None, n_k=None):
253
+ r"""
254
+ Return the smallest possible multiplicity and list size given the
255
+ given parameters of the code and decoding radius.
256
+
257
+ INPUT:
258
+
259
+ - ``tau`` -- integer; number of errors one wants the Guruswami-Sudan
260
+ algorithm to correct
261
+ - ``C`` -- (default: ``None``) a :class:`GeneralizedReedSolomonCode`
262
+ - ``n_k`` -- (default: ``None``) a pair of integers, respectively the
263
+ length and the dimension of the :class:`GeneralizedReedSolomonCode`
264
+
265
+ OUTPUT:
266
+
267
+ - ``(s, l)`` -- a pair of integers, where:
268
+
269
+ - ``s`` is the multiplicity parameter, and
270
+ - ``l`` is the list size parameter.
271
+
272
+ .. NOTE::
273
+
274
+ One should to provide either ``C`` or ``(n, k)``. If neither or both
275
+ are given, an exception will be raised.
276
+
277
+ EXAMPLES::
278
+
279
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
280
+ sage: tau, n, k = 97, 250, 70
281
+ sage: GSD.parameters_given_tau(tau, n_k=(n, k))
282
+ (1, 2)
283
+
284
+ Another example with a bigger decoding radius::
285
+
286
+ sage: tau, n, k = 118, 250, 70
287
+ sage: GSD.parameters_given_tau(tau, n_k=(n, k))
288
+ (47, 89)
289
+
290
+ Choosing a decoding radius which is too large results in an errors::
291
+
292
+ sage: tau = 200
293
+ sage: GSD.parameters_given_tau(tau, n_k=(n, k))
294
+ Traceback (most recent call last):
295
+ ...
296
+ ValueError: The decoding radius must be less than
297
+ the Johnson radius (which is 118.66)
298
+ """
299
+ n,k = n_k_params(C, n_k)
300
+
301
+ johnson = johnson_radius(n, n - k + 1)
302
+ if tau >= johnson:
303
+ raise ValueError("The decoding radius must be less than the Johnson radius (which is %.2f)"
304
+ % float(johnson))
305
+
306
+ # We start with l=1 and check if a satisfiable s can be chosen. We keep
307
+ # increasing l by 1 until this is the case. The governing equation is
308
+ # s*(s+1)/2 * n < (l+1)*s*(n-tau) - l*(l+1)/2*(k-1)
309
+ # See [GS1999]_
310
+ def try_l(l):
311
+ (mins,maxs) = solve_degree2_to_integer_range(n, n-2*(l+1)*(n-tau), (k-1)*l*(l+1))
312
+ if maxs > 0 and maxs >= mins:
313
+ return max(1, mins)
314
+ else:
315
+ return None
316
+ s, l = None, 0
317
+ while s is None:
318
+ l += 1
319
+ s = try_l(l)
320
+
321
+ return (s, l)
322
+
323
+ @staticmethod
324
+ def guruswami_sudan_decoding_radius(C=None, n_k=None, l=None, s=None):
325
+ r"""
326
+ Return the maximal decoding radius of the Guruswami-Sudan decoder and
327
+ the parameter choices needed for this.
328
+
329
+ If ``s`` is set but ``l`` is not it will return the best decoding radius using this ``s``
330
+ alongside with the required ``l``. Vice versa for ``l``. If both are
331
+ set, it returns the decoding radius given this parameter choice.
332
+
333
+ INPUT:
334
+
335
+ - ``C`` -- (default: ``None``) a :class:`GeneralizedReedSolomonCode`
336
+ - ``n_k`` -- (default: ``None``) a pair of integers, respectively the
337
+ length and the dimension of the :class:`GeneralizedReedSolomonCode`
338
+ - ``s`` -- integer (default: ``None``); the multiplicity parameter of
339
+ Guruswami-Sudan algorithm
340
+ - ``l`` -- integer (default: ``None``); the list size parameter
341
+
342
+ .. NOTE::
343
+
344
+ One has to provide either ``C`` or ``n_k``. If none or both are
345
+ given, an exception will be raised.
346
+
347
+ OUTPUT:
348
+
349
+ - ``(tau, (s, l))`` -- where
350
+
351
+ - ``tau`` is the obtained decoding radius, and
352
+
353
+ - ``(s, l)`` are the multiplicity parameter and the list size
354
+ parameter giving the radius
355
+
356
+ EXAMPLES::
357
+
358
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
359
+ sage: n, k = 250, 70
360
+ sage: GSD.guruswami_sudan_decoding_radius(n_k=(n, k))
361
+ (118, (47, 89))
362
+
363
+ One parameter can be restricted at a time::
364
+
365
+ sage: n, k = 250, 70
366
+ sage: GSD.guruswami_sudan_decoding_radius(n_k=(n, k), s=3)
367
+ (109, (3, 5))
368
+ sage: GSD.guruswami_sudan_decoding_radius(n_k=(n, k), l=7)
369
+ (111, (4, 7))
370
+
371
+ The function can also just compute the decoding radius given the parameters::
372
+
373
+ sage: GSD.guruswami_sudan_decoding_radius(n_k=(n, k), s=2, l=6)
374
+ (92, (2, 6))
375
+ """
376
+ n,k = n_k_params(C, n_k)
377
+
378
+ def get_tau(s, l):
379
+ "Return the decoding radius given this s and l"
380
+ if s <= 0 or l <= 0:
381
+ return -1
382
+ return gilt(n - n/2*(s+1)/(l+1) - (k-1)/2*l/s)
383
+ if l is None and s is None:
384
+ tau = gilt(johnson_radius(n, n - k + 1))
385
+ return (tau, GRSGuruswamiSudanDecoder.parameters_given_tau(tau, n_k=(n, k)))
386
+ if l is not None and s is not None:
387
+ return (get_tau(s,l), (s,l))
388
+
389
+ # Either s or l is set, but not both. First a shared local function
390
+ def find_integral_max(real_max, f):
391
+ """Given a real (local) maximum of a function `f`, return that of
392
+ the integers around ``real_max`` which gives the (local) integral
393
+ maximum, and the value of at that point."""
394
+ if real_max in ZZ:
395
+ int_max = ZZ(real_max)
396
+ return (int_max, f(int_max))
397
+ else:
398
+ x_f = floor(real_max)
399
+ x_c = x_f + 1
400
+ f_f, f_c = f(x_f), f(x_c)
401
+ return (x_f, f_f) if f_f >= f_c else (x_c, f_c)
402
+
403
+ if s is not None:
404
+ # maximising tau under condition
405
+ # n*(s+1 choose 2) < (ell+1)*s*(n-tau) - (ell+1 choose 2)*(k-1)
406
+ # knowing n and s, we can just minimise
407
+ # ( n*(s+1 choose 2) + (ell+1 choose 2)*(k-1) )/(ell+1)
408
+ # Differentiating and setting to zero yields ell best choice:
409
+ lmax = sqrt(n*s*(s+1.)/(k-1.)) - 1.
410
+ #the best integral value will be
411
+ (l,tau) = find_integral_max(lmax, lambda l: get_tau(s,l))
412
+ #Note that we have not proven that this ell is minimal in integral
413
+ #sense! It just seems that this most often happens
414
+ return (tau,(s,l))
415
+ if l is not None:
416
+ # Acquired similarly to when restricting s
417
+ smax = sqrt((k-1.)/n*l*(l+1.))
418
+ (s,tau) = find_integral_max(smax, lambda s: get_tau(s,l))
419
+ return (tau, (s,l))
420
+
421
+ @staticmethod
422
+ def _suitable_parameters_given_tau(tau, C=None, n_k=None):
423
+ r"""
424
+ Return quite good multiplicity and list size parameters for the code
425
+ parameters and the decoding radius.
426
+
427
+ These parameters are not guaranteed to be the best ones possible
428
+ for the provided ``tau``, but arise from easily-evaluated closed
429
+ expressions and are very good approximations of the best ones.
430
+
431
+ See [Nie2013]_ pages 53-54, proposition 3.11 for details.
432
+
433
+ INPUT:
434
+
435
+ - ``tau`` -- integer; number of errors one wants the Guruswami-Sudan
436
+ algorithm to correct
437
+ - ``C`` -- (default: ``None``) a :class:`GeneralizedReedSolomonCode`
438
+ - ``n_k`` -- (default: ``None``) a pair of integers, respectively the
439
+ length and the dimension of the :class:`GeneralizedReedSolomonCode`
440
+
441
+ OUTPUT:
442
+
443
+ - ``(s, l)`` -- a pair of integers, where:
444
+
445
+ - ``s`` is the multiplicity parameter, and
446
+ - ``l`` is the list size parameter.
447
+
448
+ .. NOTE::
449
+
450
+ One has to provide either ``C`` or ``(n, k)``. If neither or both
451
+ are given, an exception will be raised.
452
+
453
+ EXAMPLES:
454
+
455
+
456
+ The following is an example where the parameters are optimal::
457
+
458
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
459
+ sage: tau = 98
460
+ sage: n, k = 250, 70
461
+ sage: GSD._suitable_parameters_given_tau(tau, n_k=(n, k))
462
+ (2, 3)
463
+ sage: GSD.parameters_given_tau(tau, n_k=(n, k))
464
+ (2, 3)
465
+
466
+ This is an example where they are not::
467
+
468
+ sage: tau = 97
469
+ sage: n, k = 250, 70
470
+ sage: GSD._suitable_parameters_given_tau(tau, n_k=(n, k))
471
+ (2, 3)
472
+ sage: GSD.parameters_given_tau(tau, n_k=(n, k))
473
+ (1, 2)
474
+
475
+ We can provide a GRS code instead of `n` and `k` directly::
476
+
477
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
478
+ sage: GSD._suitable_parameters_given_tau(tau, C=C)
479
+ (2, 3)
480
+
481
+ Another one with a bigger ``tau``::
482
+
483
+ sage: GSD._suitable_parameters_given_tau(118, C=C)
484
+ (47, 89)
485
+ """
486
+ n,k = n_k_params(C, n_k)
487
+ w = k - 1
488
+ atau = n - tau
489
+ smin = tau * w / (atau ** 2 - n * w)
490
+ s = floor(1 + smin)
491
+ D = (s - smin) * (atau ** 2 - n * w) * s + (w**2) / 4
492
+ l = floor(atau / w * s + 0.5 - sqrt(D)/w)
493
+ return (s, l)
494
+
495
+ @staticmethod
496
+ def gs_satisfactory(tau, s, l, C=None, n_k=None):
497
+ r"""
498
+ Return whether input parameters satisfy the governing equation of
499
+ Guruswami-Sudan.
500
+
501
+ See [Nie2013]_ page 49, definition 3.3 and proposition 3.4 for details.
502
+
503
+ INPUT:
504
+
505
+ - ``tau`` -- integer; number of errors one expects Guruswami-Sudan algorithm
506
+ to correct
507
+ - ``s`` -- integer; multiplicity parameter of Guruswami-Sudan algorithm
508
+ - ``l`` -- integer; list size parameter
509
+ - ``C`` -- (default: ``None``) a :class:`GeneralizedReedSolomonCode`
510
+ - ``n_k`` -- (default: ``None``) a tuple of integers, respectively the
511
+ length and the dimension of the :class:`GeneralizedReedSolomonCode`
512
+
513
+ .. NOTE::
514
+
515
+ One has to provide either ``C`` or ``(n, k)``. If none or both are
516
+ given, an exception will be raised.
517
+
518
+ EXAMPLES::
519
+
520
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
521
+ sage: tau, s, l = 97, 1, 2
522
+ sage: n, k = 250, 70
523
+ sage: GSD.gs_satisfactory(tau, s, l, n_k=(n, k))
524
+ True
525
+
526
+ One can also pass a GRS code::
527
+
528
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
529
+ sage: GSD.gs_satisfactory(tau, s, l, C=C)
530
+ True
531
+
532
+ Another example where ``s`` and ``l`` does not satisfy the equation::
533
+
534
+ sage: tau, s, l = 118, 47, 80
535
+ sage: GSD.gs_satisfactory(tau, s, l, n_k=(n, k))
536
+ False
537
+
538
+ If one provides both ``C`` and ``n_k`` an exception is returned::
539
+
540
+ sage: tau, s, l = 97, 1, 2
541
+ sage: n, k = 250, 70
542
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
543
+ sage: GSD.gs_satisfactory(tau, s, l, C=C, n_k=(n, k))
544
+ Traceback (most recent call last):
545
+ ...
546
+ ValueError: Please provide only the code or its length and dimension
547
+
548
+ Same if one provides none of these::
549
+
550
+ sage: GSD.gs_satisfactory(tau, s, l)
551
+ Traceback (most recent call last):
552
+ ...
553
+ ValueError: Please provide either the code or its length and dimension
554
+ """
555
+ n,k = n_k_params(C, n_k)
556
+ return l > 0 and s > 0 and n * s * (s+1) < (l+1) * (2*s*(n-tau) - (k-1) * l)
557
+
558
+ ####################### decoder itself ###############################
559
+ def __init__(self, code, tau=None, parameters=None, interpolation_alg=None, root_finder=None):
560
+ r"""
561
+ TESTS:
562
+
563
+ If neither ``tau`` nor ``parameters`` is given, an exception is returned::
564
+
565
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
566
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
567
+ sage: D = GSD(C)
568
+ Traceback (most recent call last):
569
+ ...
570
+ ValueError: Specify either tau or parameters
571
+
572
+ If one provides something else than one of the allowed strings or a method as ``interpolation_alg``,
573
+ an exception is returned::
574
+
575
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
576
+ sage: D = GSD(C, tau=97, interpolation_alg=42)
577
+ Traceback (most recent call last):
578
+ ...
579
+ ValueError: Please provide a method or one of the allowed strings for interpolation_alg
580
+
581
+ Same thing for ``root_finder``::
582
+
583
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
584
+ sage: D = GSD(C, tau=97, root_finder='FortyTwo')
585
+ Traceback (most recent call last):
586
+ ...
587
+ ValueError: Please provide a method or one of the allowed strings for root_finder
588
+
589
+ If one provides a full set of parameters (tau, s and l) which are not satisfactory, an
590
+ error message is returned::
591
+
592
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
593
+ sage: D = GSD(C, tau=142, parameters=(1, 2))
594
+ Traceback (most recent call last):
595
+ ...
596
+ ValueError: Impossible parameters for the Guruswami-Sudan algorithm
597
+
598
+ If ``code`` is not a GRS code, an error is raised::
599
+
600
+ sage: C = codes.random_linear_code(GF(11), 10, 4)
601
+ sage: GSD(C, tau=2)
602
+ Traceback (most recent call last):
603
+ ...
604
+ ValueError: code has to be a generalized Reed-Solomon code
605
+ """
606
+ if not isinstance(code, GeneralizedReedSolomonCode):
607
+ raise ValueError("code has to be a generalized Reed-Solomon code")
608
+ n, k = code.length(), code.dimension()
609
+ if tau and parameters:
610
+ if not GRSGuruswamiSudanDecoder.gs_satisfactory(tau, parameters[0], parameters[1], C=code):
611
+ raise ValueError("Impossible parameters for the Guruswami-Sudan algorithm")
612
+ self._tau, self._s, self._ell = tau, parameters[0], parameters[1]
613
+ elif tau:
614
+ self._tau = tau
615
+ self._s, self._ell = GRSGuruswamiSudanDecoder.parameters_given_tau(tau, n_k=(n, k))
616
+ elif parameters:
617
+ self._s = parameters[0]
618
+ self._ell = parameters[1]
619
+ (self._tau,_) = GRSGuruswamiSudanDecoder.guruswami_sudan_decoding_radius(C=code, s=self._s, l=self._ell)
620
+ else:
621
+ raise ValueError("Specify either tau or parameters")
622
+ if callable(interpolation_alg):
623
+ self._interpolation_alg = interpolation_alg
624
+ elif interpolation_alg is None or interpolation_alg == "LeeOSullivan":
625
+ self._interpolation_alg = gs_interpolation_lee_osullivan
626
+ elif interpolation_alg == "LinearAlgebra":
627
+ self._interpolation_alg = gs_interpolation_linalg
628
+ else:
629
+ raise ValueError("Please provide a method or one of the allowed strings for interpolation_alg")
630
+ if callable(root_finder):
631
+ self._root_finder = root_finder
632
+ elif root_finder == "RothRuckenstein":
633
+ self._root_finder = roth_ruckenstein_root_finder
634
+ elif root_finder is None or root_finder == "Alekhnovich":
635
+ self._root_finder = alekhnovich_root_finder
636
+ else:
637
+ raise ValueError("Please provide a method or one of the allowed strings for root_finder")
638
+ super().__init__(code, code.ambient_space(), "EvaluationPolynomial")
639
+
640
+ def _repr_(self):
641
+ r"""
642
+ Return a string representation of ``self``.
643
+
644
+ EXAMPLES::
645
+
646
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
647
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
648
+ sage: D
649
+ Guruswami-Sudan decoder for [250, 70, 181] Reed-Solomon Code over GF(251) decoding 97 errors with parameters (1, 2)
650
+ """
651
+ return "Guruswami-Sudan decoder for %s decoding %s errors with parameters %s" % (self.code(), self.decoding_radius(), (self.multiplicity(), self.list_size()))
652
+
653
+ def _latex_(self):
654
+ r"""
655
+ Return a string representation of ``self``.
656
+
657
+ EXAMPLES::
658
+
659
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
660
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
661
+ sage: latex(D)
662
+ \textnormal{Guruswami-Sudan decoder for } [250, 70, 181] \textnormal{ Reed-Solomon Code over } \Bold{F}_{251}\textnormal{ decoding }97\textnormal{ errors with parameters }(1, 2)
663
+ """
664
+ return "\\textnormal{Guruswami-Sudan decoder for } %s\\textnormal{ decoding }%s\\textnormal{ errors with parameters }%s" % (self.code()._latex_(), self.decoding_radius(), (self.multiplicity(), self.list_size()))
665
+
666
+ def __eq__(self, other):
667
+ r"""
668
+ Test equality between GRSGuruswamiSudanDecoder objects.
669
+
670
+ EXAMPLES::
671
+
672
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
673
+ sage: D1 = C.decoder("GuruswamiSudan", tau=97)
674
+ sage: D2 = C.decoder("GuruswamiSudan", tau=97)
675
+ sage: D1.__eq__(D2)
676
+ True
677
+ """
678
+ return isinstance(other, GRSGuruswamiSudanDecoder)\
679
+ and self.code() == other.code()\
680
+ and self.decoding_radius() == other.decoding_radius()\
681
+ and self.multiplicity() == other.multiplicity()\
682
+ and self.list_size() == other.list_size()\
683
+ and self.interpolation_algorithm() == other.interpolation_algorithm()\
684
+ and self.rootfinding_algorithm() == other.rootfinding_algorithm()
685
+
686
+ def interpolation_algorithm(self):
687
+ r"""
688
+ Return the interpolation algorithm that will be used.
689
+
690
+ Remember that its signature has to be:
691
+ ``my_inter(interpolation_points, tau, s_and_l, wy)``.
692
+ See :meth:`sage.coding.guruswami_sudan.interpolation.gs_interpolation_linalg`
693
+ for an example.
694
+
695
+ EXAMPLES::
696
+
697
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
698
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
699
+ sage: D.interpolation_algorithm()
700
+ <function gs_interpolation_lee_osullivan at 0x...>
701
+ """
702
+ return self._interpolation_alg
703
+
704
+ def rootfinding_algorithm(self):
705
+ r"""
706
+ Return the rootfinding algorithm that will be used.
707
+
708
+ Remember that its signature has to be:
709
+ ``my_rootfinder(Q, maxd=default_value, precision=default_value)``.
710
+ See :meth:`roth_ruckenstein_root_finder`
711
+ for an example.
712
+
713
+ EXAMPLES::
714
+
715
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
716
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
717
+ sage: D.rootfinding_algorithm()
718
+ <function alekhnovich_root_finder at 0x...>
719
+ """
720
+ return self._root_finder
721
+
722
+ def parameters(self):
723
+ r"""
724
+ Return the multiplicity and list size parameters of ``self``.
725
+
726
+ EXAMPLES::
727
+
728
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
729
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
730
+ sage: D.parameters()
731
+ (1, 2)
732
+ """
733
+ return (self._s, self._ell)
734
+
735
+ def multiplicity(self):
736
+ r"""
737
+ Return the multiplicity parameter of ``self``.
738
+
739
+ EXAMPLES::
740
+
741
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
742
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
743
+ sage: D.multiplicity()
744
+ 1
745
+ """
746
+ return self._s
747
+
748
+ def list_size(self):
749
+ r"""
750
+ Return the list size parameter of ``self``.
751
+
752
+ EXAMPLES::
753
+
754
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
755
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
756
+ sage: D.list_size()
757
+ 2
758
+ """
759
+ return self._ell
760
+
761
+ def decode_to_message(self, r):
762
+ r"""
763
+ Decode ``r`` to the list of polynomials whose encoding by
764
+ :meth:`self.code()` is within Hamming distance
765
+ :meth:`self.decoding_radius` of ``r``.
766
+
767
+ INPUT:
768
+
769
+ - ``r`` -- a received word, i.e. a vector in `F^n` where `F` and `n` are
770
+ the base field respectively length of :meth:`self.code`
771
+
772
+ EXAMPLES::
773
+
774
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
775
+ sage: C = codes.GeneralizedReedSolomonCode(GF(17).list()[:15], 6)
776
+ sage: D = GSD(C, tau=5)
777
+ sage: F.<x> = GF(17)[]
778
+ sage: m = 13*x^4 + 7*x^3 + 10*x^2 + 14*x + 3
779
+ sage: c = D.connected_encoder().encode(m)
780
+ sage: r = vector(GF(17), [3,13,12,0,0,7,5,1,8,11,15,12,14,7,10])
781
+ sage: (c-r).hamming_weight()
782
+ 5
783
+ sage: messages = D.decode_to_message(r)
784
+ sage: len(messages)
785
+ 2
786
+ sage: m in messages
787
+ True
788
+
789
+ TESTS:
790
+
791
+ If one has provided a method as a ``root_finder`` or a ``interpolation_alg`` which
792
+ does not fit the allowed signature, an exception will be raised::
793
+
794
+ sage: C = codes.GeneralizedReedSolomonCode(GF(17).list()[:15], 6)
795
+ sage: D = GSD(C, tau=5, root_finder=next_prime)
796
+ sage: F.<x> = GF(17)[]
797
+ sage: m = 9*x^5 + 10*x^4 + 9*x^3 + 7*x^2 + 15*x + 2
798
+ sage: c = D.connected_encoder().encode(m)
799
+ sage: r = vector(GF(17), [3,1,4,2,14,1,0,4,13,12,1,16,1,13,15])
800
+ sage: m in D.decode_to_message(r)
801
+ Traceback (most recent call last):
802
+ ...
803
+ ValueError: The provided root-finding algorithm has a wrong signature.
804
+ See the documentation of `...rootfinding_algorithm()` for details
805
+ """
806
+ return [self.connected_encoder().unencode(c) for c in self.decode_to_code(r)]
807
+
808
+ def decode_to_code(self, r):
809
+ r"""
810
+ Return the list of all codeword within radius :meth:`self.decoding_radius` of the received word `r`.
811
+
812
+ INPUT:
813
+
814
+ - ``r`` -- a received word, i.e. a vector in `F^n` where `F` and `n` are
815
+ the base field respectively length of :meth:`self.code`
816
+
817
+ EXAMPLES::
818
+
819
+ sage: GSD = codes.decoders.GRSGuruswamiSudanDecoder
820
+ sage: C = codes.GeneralizedReedSolomonCode(GF(17).list()[:15], 6)
821
+ sage: D = GSD(C, tau=5)
822
+ sage: c = vector(GF(17), [3,13,12,0,0,7,5,1,8,11,1,9,4,12,14])
823
+ sage: c in C
824
+ True
825
+ sage: r = vector(GF(17), [3,13,12,0,0,7,5,1,8,11,15,12,14,7,10])
826
+ sage: r in C
827
+ False
828
+ sage: codewords = D.decode_to_code(r)
829
+ sage: len(codewords)
830
+ 2
831
+ sage: c in codewords
832
+ True
833
+
834
+ TESTS:
835
+
836
+ Check that :issue:`21347` is fixed::
837
+
838
+ sage: C = codes.GeneralizedReedSolomonCode(GF(13).list()[:10], 3)
839
+ sage: D = GSD(C, tau=4)
840
+ sage: c = vector(GF(13), [6, 8, 2, 1, 5, 1, 2, 8, 6, 9])
841
+ sage: e = vector(GF(13), [1, 0, 0, 1, 1, 0, 0, 1, 0, 1])
842
+ sage: D.decode_to_code(c+e)
843
+ []
844
+ """
845
+ C = self.code()
846
+ k = C.dimension()
847
+ alphas = C.evaluation_points()
848
+ colmults = C.column_multipliers()
849
+ s = self.multiplicity()
850
+ l = self.list_size()
851
+ tau = self.decoding_radius()
852
+ # SETUP INTERPOLATION PROBLEM
853
+ wy = k-1
854
+ points = [(alphas[i], r[i]/colmults[i]) for i in range(len(alphas))]
855
+ # SOLVE INTERPOLATION
856
+ try:
857
+ Q = self.interpolation_algorithm()(points, tau, (s,l), wy)
858
+ except TypeError:
859
+ raise ValueError("The provided interpolation algorithm has a wrong signature. See the documentation of `codes.decoders.GRSGuruswamiSudanDecoder.interpolation_algorithm()` for details")
860
+ # EXAMINE THE FACTORS AND CONVERT TO CODEWORDS
861
+ try:
862
+ polynomials = self.rootfinding_algorithm()(Q, maxd=wy)
863
+ except TypeError:
864
+ raise ValueError("The provided root-finding algorithm has a wrong signature. See the documentation of `codes.decoders.GRSGuruswamiSudanDecoder.rootfinding_algorithm()` for details")
865
+ if not polynomials:
866
+ return []
867
+
868
+ E = self.connected_encoder()
869
+ codewords = [ E.encode(f) for f in polynomials]
870
+ # Root-finding might find spurious roots. Return only the ones which give nearby codewords
871
+ return [ c for c in codewords if (r - c).hamming_weight() <= tau ]
872
+
873
+ def decoding_radius(self):
874
+ r"""
875
+ Return the maximal number of errors that ``self`` is able to correct.
876
+
877
+ EXAMPLES::
878
+
879
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
880
+ sage: D = C.decoder("GuruswamiSudan", tau=97)
881
+ sage: D.decoding_radius()
882
+ 97
883
+
884
+ An example where tau is not one of the inputs to the constructor::
885
+
886
+ sage: C = codes.GeneralizedReedSolomonCode(GF(251).list()[:250], 70)
887
+ sage: D = C.decoder("GuruswamiSudan", parameters=(2,4))
888
+ sage: D.decoding_radius()
889
+ 105
890
+ """
891
+ return self._tau
892
+
893
+
894
+ ####################### types ###############################
895
+
896
+ GeneralizedReedSolomonCode._registered_decoders["GuruswamiSudan"] = GRSGuruswamiSudanDecoder
897
+ GRSGuruswamiSudanDecoder._decoder_type = {"list-decoder", "always-succeed", "hard-decision"}