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,719 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules sage.rings.finite_rings
3
+ r"""
4
+ Punctured code
5
+
6
+ Let `C` be a linear code. Let `C_i` be the set of all words of `C` with the
7
+ `i`-th coordinate being removed. `C_i` is the punctured code of `C`
8
+ on the `i`-th position.
9
+ """
10
+
11
+ #*****************************************************************************
12
+ # Copyright (C) 2015 David Lucas <david.lucas@inria.fr>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # http://www.gnu.org/licenses/
19
+ #*****************************************************************************
20
+
21
+ from .linear_code import AbstractLinearCode
22
+ from .encoder import Encoder
23
+ from .decoder import Decoder, DecodingError
24
+ from sage.misc.cachefunc import cached_method
25
+ from sage.rings.integer import Integer
26
+ from sage.modules.free_module import VectorSpace
27
+ from sage.modules.free_module_element import vector
28
+ from sage.rings.finite_rings.finite_field_constructor import GF
29
+ from copy import copy
30
+
31
+
32
+ def _puncture(v, points):
33
+ r"""
34
+ Return v punctured as the positions listed in ``points``.
35
+
36
+ INPUT:
37
+
38
+ - ``v`` -- a vector or a list of vectors
39
+
40
+ - ``points`` -- set of integers, or an integer
41
+
42
+ EXAMPLES::
43
+
44
+ sage: v = vector(GF(7), (2,3,0,2,1,5,1,5,6,5,3))
45
+ sage: from sage.coding.punctured_code import _puncture
46
+ sage: _puncture(v, {4, 3})
47
+ (2, 3, 0, 5, 1, 5, 6, 5, 3)
48
+ """
49
+ if not isinstance(points, (Integer, int, set)):
50
+ raise TypeError("points must be either a Sage Integer, a Python int, or a set")
51
+ if isinstance(v, list):
52
+ size = len(v[0])
53
+ S = VectorSpace(v[0].base_ring(), size - len(points))
54
+ l = []
55
+ for i in v:
56
+ new_v = [i[j] for j in range(size) if j not in points]
57
+ l.append(S(new_v))
58
+ return l
59
+ S = VectorSpace(v.base_ring(), len(v) - len(points))
60
+ new_v = [v[i] for i in range(len(v)) if i not in points]
61
+ return S(new_v)
62
+
63
+
64
+ def _insert_punctured_positions(l, punctured_points, value=None):
65
+ r"""
66
+ Return ``l`` with ``value`` inserted in the corresponding
67
+ position from ``punctured_points``.
68
+
69
+ INPUT:
70
+
71
+ - ``l`` -- list
72
+
73
+ - ``punctured_points`` -- set of integers
74
+
75
+ - ``value`` -- (default: ``None``) an element to insert in every position
76
+ given in``punctured_points``. If it is let to ``None``, a random value
77
+ will be chosen for each insertion.
78
+
79
+ EXAMPLES::
80
+
81
+ sage: from sage.coding.punctured_code import _insert_punctured_positions
82
+ sage: _insert_punctured_positions([1,2,3,4], {2,4,5}, 1)
83
+ [1, 2, 1, 3, 1, 1, 4]
84
+ """
85
+ F = l[0].base_ring()
86
+ final = [None] * (len(l) + len(punctured_points))
87
+ for i in punctured_points:
88
+ if value is None:
89
+ final[i] = F.random_element()
90
+ else:
91
+ final[i] = value
92
+ index = 0
93
+ for i in range(len(final)):
94
+ if final[i] is None:
95
+ final[i] = l[index]
96
+ index += 1
97
+ return final
98
+
99
+
100
+ class PuncturedCode(AbstractLinearCode):
101
+ r"""
102
+ Representation of a punctured code.
103
+
104
+ - ``C`` -- a linear code
105
+
106
+ - ``positions`` -- the positions where ``C`` will be punctured. It can be
107
+ either an integer if one need to puncture only one position, a list or a
108
+ set of positions to puncture. If the same position is passed several
109
+ times, it will be considered only once.
110
+
111
+ EXAMPLES::
112
+
113
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
114
+ sage: Cp = codes.PuncturedCode(C, 3)
115
+ sage: Cp
116
+ Puncturing of [11, 5] linear code over GF(7) on position(s) [3]
117
+
118
+ sage: Cp = codes.PuncturedCode(C, {3, 5})
119
+ sage: Cp
120
+ Puncturing of [11, 5] linear code over GF(7) on position(s) [3, 5]
121
+ """
122
+ _registered_encoders = {}
123
+ _registered_decoders = {}
124
+
125
+ def __init__(self, C, positions):
126
+ r"""
127
+ TESTS:
128
+
129
+ If one of the positions to puncture is bigger than the length of ``C``,
130
+ an exception will be raised::
131
+
132
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
133
+ sage: Cp = codes.PuncturedCode(C, {4,8,15})
134
+ Traceback (most recent call last):
135
+ ...
136
+ ValueError: Positions to puncture must be positive integers smaller
137
+ than the length of the provided code
138
+ """
139
+ if not isinstance(positions, (Integer, int, set, list)):
140
+ raise TypeError("positions must be either a Sage Integer, a Python int, a set or a list")
141
+ if isinstance(positions, (list, set)) and not all(isinstance(i, (int, Integer)) for i in positions):
142
+ raise TypeError("if positions is a list or a set, it has to contain only Python ints or Sage Integers")
143
+ if isinstance(positions, (Integer, int)):
144
+ positions = {positions}
145
+ if isinstance(positions, list):
146
+ positions = set(positions)
147
+ if not isinstance(C, AbstractLinearCode):
148
+ raise ValueError("Provided code must be a linear code")
149
+ if not all(i in range(C.length()) for i in positions):
150
+ raise ValueError("Positions to puncture must be positive integers smaller than the length of the provided code")
151
+ super().__init__(C.base_ring(), C.length() - len(positions),
152
+ "PuncturedMatrix", "OriginalCode")
153
+ self._original_code = C
154
+ self._positions = positions
155
+
156
+ def __eq__(self, other):
157
+ r"""
158
+ Test equality between two Punctured codes.
159
+
160
+ EXAMPLES::
161
+
162
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
163
+ sage: Cp1 = codes.PuncturedCode(C, 2)
164
+ sage: Cp2 = codes.PuncturedCode(C, 2)
165
+ sage: Cp1 == Cp2
166
+ True
167
+ """
168
+ return isinstance(other, PuncturedCode) \
169
+ and self.punctured_positions() == other.punctured_positions() \
170
+ and self.original_code() == other.original_code()
171
+
172
+ def _repr_(self):
173
+ r"""
174
+ Return a string representation of ``self``.
175
+
176
+ EXAMPLES::
177
+
178
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
179
+ sage: Cp = codes.PuncturedCode(C, 3)
180
+ sage: Cp
181
+ Puncturing of [11, 5] linear code over GF(7) on position(s) [3]
182
+ """
183
+ return "Puncturing of %s on position(s) %s"\
184
+ % (self.original_code(), list(self.punctured_positions()))
185
+
186
+ def _latex_(self):
187
+ r"""
188
+ Return a latex representation of ``self``.
189
+
190
+ EXAMPLES::
191
+
192
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
193
+ sage: Cp = codes.PuncturedCode(C, 3)
194
+ sage: latex(Cp)
195
+ \textnormal{Puncturing of [11, 5] linear code over GF(7) on position(s) } [3]
196
+ """
197
+ return "\\textnormal{Puncturing of %s on position(s) } %s"\
198
+ % (self.original_code(), list(self.punctured_positions()))
199
+
200
+ def punctured_positions(self):
201
+ r"""
202
+ Return the list of positions which were punctured on the original code.
203
+
204
+ EXAMPLES::
205
+
206
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
207
+ sage: Cp = codes.PuncturedCode(C, 3)
208
+ sage: Cp.punctured_positions()
209
+ {3}
210
+ """
211
+ return self._positions
212
+
213
+ def original_code(self):
214
+ r"""
215
+ Return the linear code which was punctured to get ``self``.
216
+
217
+ EXAMPLES::
218
+
219
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
220
+ sage: Cp = codes.PuncturedCode(C, 3)
221
+ sage: Cp.original_code()
222
+ [11, 5] linear code over GF(7)
223
+ """
224
+ return self._original_code
225
+
226
+ def dimension(self):
227
+ r"""
228
+ Return the dimension of ``self``.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: set_random_seed(42)
233
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
234
+ sage: Cp = codes.PuncturedCode(C, 3)
235
+ sage: Cp.dimension()
236
+ 5
237
+ """
238
+ if hasattr(self, '_dimension'):
239
+ return self._dimension
240
+ self._dimension = self.generator_matrix().rank()
241
+ return self._dimension
242
+
243
+ def random_element(self, *args, **kwds):
244
+ r"""
245
+ Return a random codeword of ``self``.
246
+
247
+ This method does not trigger the computation of
248
+ ``self``'s :meth:`sage.coding.linear_code_no_metric.generator_matrix`.
249
+
250
+ INPUT:
251
+
252
+ - ``agrs``, ``kwds`` -- extra positional arguments passed to
253
+ :meth:`sage.modules.free_module.random_element`
254
+
255
+ EXAMPLES::
256
+
257
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
258
+ sage: Cp = codes.PuncturedCode(C, 3)
259
+ sage: Cp.random_element() in Cp
260
+ True
261
+ """
262
+ C_original = self.original_code()
263
+ m = (C_original.base_ring() ** C_original.dimension()).random_element()
264
+ c = C_original.encode(m)
265
+ return _puncture(c, self.punctured_positions())
266
+
267
+ def encode(self, m, original_encode=False, encoder_name=None, **kwargs):
268
+ r"""
269
+ Transform an element of the message space into an element of the code.
270
+
271
+ INPUT:
272
+
273
+ - ``m`` -- a vector of the message space of the code
274
+
275
+ - ``original_encode`` -- boolean (default: ``False``); if this is set
276
+ to ``True``, ``m`` will be encoded using an Encoder of ``self``'s
277
+ :meth:`original_code`. This allow to avoid the computation of a
278
+ generator matrix for ``self``.
279
+
280
+ - ``encoder_name`` -- (default: ``None``) name of the encoder which will be used
281
+ to encode ``word``. The default encoder of ``self`` will be used if
282
+ default value is kept.
283
+
284
+ OUTPUT: an element of ``self``
285
+
286
+ EXAMPLES::
287
+
288
+ sage: M = matrix(GF(7), [[1, 0, 0, 0, 3, 4, 6],
289
+ ....: [0, 1, 0, 6, 1, 6, 4],
290
+ ....: [0, 0, 1, 5, 2, 2, 4]])
291
+ sage: C_original = LinearCode(M)
292
+ sage: Cp = codes.PuncturedCode(C_original, 2)
293
+ sage: m = vector(GF(7), [1, 3, 5])
294
+ sage: Cp.encode(m)
295
+ (1, 3, 5, 5, 0, 2)
296
+ """
297
+ if original_encode:
298
+ c = self.original_code().encode(m, encoder_name, **kwargs)
299
+ return _puncture(c, self.punctured_positions, self)
300
+ return self.encoder(encoder_name, **kwargs).encode(m)
301
+
302
+ @cached_method
303
+ def structured_representation(self):
304
+ r"""
305
+ Return ``self`` as a structured code object.
306
+
307
+ If ``self`` has a specific structured representation (e.g. a punctured GRS code is
308
+ a GRS code too), it will return this representation, else it returns a
309
+ :class:`sage.coding.linear_code.LinearCode`.
310
+
311
+ EXAMPLES:
312
+
313
+ We consider a GRS code::
314
+
315
+ sage: C_grs = codes.GeneralizedReedSolomonCode(GF(59).list()[:40], 12)
316
+
317
+ A punctured GRS code is still a GRS code::
318
+
319
+ sage: Cp_grs = codes.PuncturedCode(C_grs, 3)
320
+ sage: Cp_grs.structured_representation()
321
+ [39, 12, 28] Reed-Solomon Code over GF(59)
322
+
323
+ Another example with structureless linear codes::
324
+
325
+ sage: set_random_seed(42)
326
+ sage: C_lin = codes.random_linear_code(GF(2), 10, 5)
327
+ sage: Cp_lin = codes.PuncturedCode(C_lin, 2)
328
+ sage: Cp_lin.structured_representation()
329
+ [9, 5] linear code over GF(2)
330
+ """
331
+ C = self.original_code()
332
+ pts = copy(self.punctured_positions())
333
+ list_pts = list(pts)
334
+ while isinstance(C, PuncturedCode):
335
+ cur_pts = list(C.punctured_positions())
336
+ list_len = len(list_pts)
337
+ for p in cur_pts:
338
+ for i in range(list_len):
339
+ if (p <= list_pts[i]):
340
+ list_pts[i] += 1
341
+ list_pts += cur_pts
342
+ C = C.original_code()
343
+ return C._punctured_form(set(list_pts))
344
+
345
+
346
+ class PuncturedCodePuncturedMatrixEncoder(Encoder):
347
+ r"""
348
+ Encoder using original code generator matrix to compute the punctured code's one.
349
+
350
+ INPUT:
351
+
352
+ - ``code`` -- the associated code of this encoder
353
+
354
+ EXAMPLES::
355
+
356
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
357
+ sage: Cp = codes.PuncturedCode(C, 3)
358
+ sage: E = codes.encoders.PuncturedCodePuncturedMatrixEncoder(Cp)
359
+ sage: E
360
+ Punctured matrix-based encoder for the
361
+ Puncturing of [11, 5] linear code over GF(7) on position(s) [3]
362
+ """
363
+
364
+ def __init__(self, code):
365
+ r"""
366
+ TESTS:
367
+
368
+ If ``code`` is not a ``PuncturedCode``, an exception is raised::
369
+
370
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
371
+ sage: codes.encoders.PuncturedCodePuncturedMatrixEncoder(C)
372
+ Traceback (most recent call last):
373
+ ...
374
+ TypeError: code has to be an instance of PuncturedCode class
375
+ """
376
+ if not isinstance(code, PuncturedCode):
377
+ raise TypeError("code has to be an instance of PuncturedCode class")
378
+ super().__init__(code)
379
+
380
+ def _repr_(self):
381
+ r"""
382
+ Return a string representation of ``self``.
383
+
384
+ EXAMPLES::
385
+
386
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
387
+ sage: Cp = codes.PuncturedCode(C, 3)
388
+ sage: E = codes.encoders.PuncturedCodePuncturedMatrixEncoder(Cp)
389
+ sage: E
390
+ Punctured matrix-based encoder for the Puncturing of [11, 5] linear code over GF(7) on position(s) [3]
391
+ """
392
+ return "Punctured matrix-based encoder for the %s" % self.code()
393
+
394
+ def _latex_(self):
395
+ r"""
396
+ Return a latex representation of ``self``.
397
+
398
+ EXAMPLES::
399
+
400
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
401
+ sage: Cp = codes.PuncturedCode(C, 3)
402
+ sage: E = codes.encoders.PuncturedCodePuncturedMatrixEncoder(Cp)
403
+ sage: latex(E)
404
+ \textnormal{Punctured matrix-based encoder for the }\textnormal{Puncturing of [11, 5] linear code over GF(7) on position(s) } [3]
405
+ """
406
+ return "\\textnormal{Punctured matrix-based encoder for the }%s" % self.code()._latex_()
407
+
408
+ @cached_method
409
+ def generator_matrix(self):
410
+ r"""
411
+ Return a generator matrix of the associated code of ``self``.
412
+
413
+ EXAMPLES::
414
+
415
+ sage: set_random_seed(10)
416
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
417
+ sage: Cp = codes.PuncturedCode(C, 3)
418
+ sage: E = codes.encoders.PuncturedCodePuncturedMatrixEncoder(Cp)
419
+ sage: E.generator_matrix()
420
+ [1 0 0 0 0 5 2 6 0 6]
421
+ [0 1 0 0 0 5 2 2 1 1]
422
+ [0 0 1 0 0 6 2 4 0 4]
423
+ [0 0 0 1 0 0 6 3 3 3]
424
+ [0 0 0 0 1 0 1 3 4 3]
425
+ """
426
+ C = self.code().original_code()
427
+ pos = self.code().punctured_positions()
428
+ M = C.generator_matrix()
429
+ G = M.delete_columns(list(pos))
430
+ G = G.echelon_form()
431
+ k = G.rank()
432
+ M = G[:k]
433
+ M.set_immutable()
434
+ return M
435
+
436
+
437
+ class PuncturedCodeOriginalCodeDecoder(Decoder):
438
+ r"""
439
+ Decoder decoding through a decoder over the original code of its punctured code.
440
+
441
+ INPUT:
442
+
443
+ - ``code`` -- the associated code of this encoder
444
+
445
+ - ``strategy`` -- (default: ``None``) the strategy used to decode.
446
+ The available strategies are:
447
+
448
+ * ``'error-erasure'`` -- uses an error-erasure decoder over the original
449
+ code if available, fails otherwise.
450
+
451
+ * ``'random-values'`` -- fills the punctured positions with random elements
452
+ in ``code``'s base field and tries to decode using
453
+ the default decoder of the original code
454
+
455
+ * ``'try-all'`` -- fills the punctured positions with every possible
456
+ combination of symbols until decoding succeeds, or until every
457
+ combination have been tried
458
+
459
+ * ``None`` -- uses ``error-erasure`` if an error-erasure decoder is
460
+ available, switch to ``random-values`` behaviour otherwise
461
+
462
+ - ``original_decoder`` -- (default: ``None``) the decoder that will be used over the original code.
463
+ It has to be a decoder object over the original code.
464
+ This argument takes precedence over ``strategy``: if both ``original_decoder`` and ``strategy``
465
+ are filled, ``self`` will use the ``original_decoder`` to decode over the original code.
466
+ If ``original_decoder`` is set to ``None``, it will use the decoder picked by ``strategy``.
467
+
468
+ - ``**kwargs`` -- all extra arguments are forwarded to original code's decoder
469
+
470
+ EXAMPLES::
471
+
472
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
473
+ sage: Cp = codes.PuncturedCode(C, 3)
474
+ sage: codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp)
475
+ Decoder of Puncturing of [15, 7, 9] Reed-Solomon Code over GF(16) on position(s) [3]
476
+ through Error-Erasure decoder for [15, 7, 9] Reed-Solomon Code over GF(16)
477
+
478
+ As seen above, if all optional are left blank, and if an error-erasure
479
+ decoder is available, it will be chosen as the original decoder. Now, if
480
+ one forces ``strategy`` to ``'try-all'`` or ``'random-values'``, the default
481
+ decoder of the original code will be chosen, even if an error-erasure is
482
+ available::
483
+
484
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
485
+ sage: Cp = codes.PuncturedCode(C, 3)
486
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp, strategy='try-all')
487
+ sage: "error-erasure" in D.decoder_type()
488
+ False
489
+
490
+ And if one fills ``original_decoder`` and ``strategy`` fields with
491
+ contradictory elements, the ``original_decoder`` takes precedence::
492
+
493
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
494
+ sage: Cp = codes.PuncturedCode(C, 3)
495
+ sage: Dor = C.decoder("Gao")
496
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp, original_decoder=Dor,
497
+ ....: strategy='error-erasure')
498
+ sage: D.original_decoder() == Dor
499
+ True
500
+ """
501
+
502
+ def __init__(self, code, strategy=None, original_decoder=None, **kwargs):
503
+ r"""
504
+ TESTS:
505
+
506
+ If ``code`` is not a ``PuncturedCode``, an exception is raised::
507
+
508
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
509
+ sage: codes.decoders.PuncturedCodeOriginalCodeDecoder(C)
510
+ Traceback (most recent call last):
511
+ ...
512
+ TypeError: code has to be an instance of PuncturedCode class
513
+
514
+ If one tries to pass an original_decoder whose associated code is not the original
515
+ code of ``self``, it returns an error::
516
+
517
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
518
+ sage: Cp = codes.PuncturedCode(C, 3)
519
+ sage: C2 = codes.GeneralizedReedSolomonCode(GF(7).list()[:6], 3)
520
+ sage: D = Cp.decoder(original_decoder = C2.decoder())
521
+ Traceback (most recent call last):
522
+ ...
523
+ ValueError: Original decoder must have the original code of its associated punctured code as associated code
524
+
525
+ If one tries to use ``'error-erasure'`` strategy when the original code has no such
526
+ decoder, it returns an error::
527
+
528
+ sage: C = codes.random_linear_code(GF(7), 11, 5)
529
+ sage: Cp = codes.PuncturedCode(C, 3)
530
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp, strategy = 'error-erasure')
531
+ Traceback (most recent call last):
532
+ ...
533
+ ValueError: Original code has no error-erasure decoder
534
+ """
535
+ if not isinstance(code, PuncturedCode):
536
+ raise TypeError("code has to be an instance of PuncturedCode class")
537
+
538
+ original_code = code.original_code()
539
+ if original_decoder is not None:
540
+ if not isinstance(original_decoder, Decoder):
541
+ raise TypeError("original_decoder must be a decoder object")
542
+ if not original_decoder.code() == original_code:
543
+ raise ValueError("Original decoder must have the original code of its associated punctured code as associated code")
544
+ if 'error-erasure' in original_decoder.decoder_type():
545
+ strategy = 'error-erasure'
546
+ self._original_decoder = original_decoder
547
+ elif strategy == 'error-erasure':
548
+ error_erasure = False
549
+ for D in original_code._registered_decoders.values():
550
+ if 'error-erasure' in D._decoder_type:
551
+ error_erasure = True
552
+ self._original_decoder = D(original_code, **kwargs)
553
+ break
554
+ if not error_erasure:
555
+ raise ValueError("Original code has no error-erasure decoder")
556
+ elif strategy == 'random-values' or strategy == 'try-all':
557
+ self._original_decoder = code.original_code().decoder(**kwargs)
558
+ else:
559
+ error_erasure = False
560
+ for D in original_code._registered_decoders.values():
561
+ if 'error-erasure' in D._decoder_type:
562
+ error_erasure = True
563
+ self._original_decoder = D(original_code, **kwargs)
564
+ break
565
+ if not error_erasure:
566
+ self._original_decoder = original_code.decoder(**kwargs)
567
+ self._strategy = strategy
568
+ self._decoder_type = copy(self._decoder_type)
569
+ self._decoder_type.remove("dynamic")
570
+ self._decoder_type = self._original_decoder.decoder_type()
571
+ super().__init__(code, code.ambient_space(),
572
+ self._original_decoder.connected_encoder())
573
+
574
+ def _repr_(self):
575
+ r"""
576
+ Return a string representation of ``self``.
577
+
578
+ EXAMPLES::
579
+
580
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
581
+ sage: Cp = codes.PuncturedCode(C, 3)
582
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp)
583
+ sage: D
584
+ Decoder of Puncturing of [15, 7, 9] Reed-Solomon Code over GF(16) on position(s) [3] through Error-Erasure decoder for [15, 7, 9] Reed-Solomon Code over GF(16)
585
+ """
586
+ return "Decoder of %s through %s" % (self.code(), self.original_decoder())
587
+
588
+ def _latex_(self):
589
+ r"""
590
+ Return a latex representation of ``self``.
591
+
592
+ EXAMPLES::
593
+
594
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
595
+ sage: Cp = codes.PuncturedCode(C, 3)
596
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp)
597
+ sage: latex(D)
598
+ \textnormal{Decoder of } Puncturing of [15, 7, 9] Reed-Solomon Code over GF(16) on position(s) [3] \textnormal{ through } Error-Erasure decoder for [15, 7, 9] Reed-Solomon Code over GF(16)
599
+ """
600
+ return "\\textnormal{Decoder of } %s \\textnormal{ through } %s" % (self.code(), self.original_decoder())
601
+
602
+ def original_decoder(self):
603
+ r"""
604
+ Return the decoder over the original code that will be used to decode words of
605
+ :meth:`sage.coding.decoder.Decoder.code`.
606
+
607
+ EXAMPLES::
608
+
609
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
610
+ sage: Cp = codes.PuncturedCode(C, 3)
611
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp)
612
+ sage: D.original_decoder()
613
+ Error-Erasure decoder for [15, 7, 9] Reed-Solomon Code over GF(16)
614
+ """
615
+ return self._original_decoder
616
+
617
+ def decode_to_code(self, y):
618
+ r"""
619
+ Decode ``y`` to an element in :meth:`sage.coding.decoder.Decoder.code`.
620
+
621
+ EXAMPLES::
622
+
623
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
624
+ sage: Cp = codes.PuncturedCode(C, 3)
625
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp)
626
+ sage: c = Cp.random_element()
627
+ sage: Chan = channels.StaticErrorRateChannel(Cp.ambient_space(), 3)
628
+ sage: y = Chan(c)
629
+ sage: y in Cp
630
+ False
631
+ sage: D.decode_to_code(y) == c
632
+ True
633
+ """
634
+ D = self.original_decoder()
635
+ C = self.code()
636
+ A = C.original_code().ambient_space()
637
+ Cor = C.original_code()
638
+ pts = C.punctured_positions()
639
+ F = self.code().base_field()
640
+ zero, one = F.zero(), F.one()
641
+ if "error-erasure" in D.decoder_type():
642
+ if isinstance(y, (tuple, list)):
643
+ y, e = y[0], y[1]
644
+ e_list = e.list()
645
+ e_list = _insert_punctured_positions(e_list, pts, one)
646
+ else:
647
+ e_list = [one if i in pts else zero for i in range(Cor.length())]
648
+ e = vector(GF(2), e_list)
649
+ yl = y.list()
650
+ yl = _insert_punctured_positions(yl, pts, zero)
651
+ y = A(yl)
652
+ return _puncture(D.decode_to_code((y, e)), pts)
653
+ elif self._strategy == 'try-all':
654
+ end = False
655
+ yl = y.list()
656
+ I = iter(VectorSpace(F, len(pts)))
657
+ list_pts = list(pts)
658
+ list_pts.sort()
659
+ shift = 0
660
+ for i in list_pts:
661
+ yl.insert(i + shift, zero)
662
+ shift += 1
663
+ values = next(I)
664
+ while not end:
665
+ try:
666
+ shift = 0
667
+ for i in list_pts:
668
+ yl[i + shift] = values[shift]
669
+ shift += 1
670
+ y = A(yl)
671
+ values = next(I)
672
+ try:
673
+ c_or = self.original_decoder().decode_to_code(y)
674
+ end = True
675
+ break
676
+ except Exception:
677
+ pass
678
+ except StopIteration:
679
+ raise DecodingError
680
+ return _puncture(c_or, pts)
681
+ A = Cor.ambient_space()
682
+ yl = y.list()
683
+ yl = _insert_punctured_positions(yl, pts)
684
+ y = A(yl)
685
+ return _puncture(D.decode_to_code(y), pts)
686
+
687
+ def decoding_radius(self, number_erasures=None):
688
+ r"""
689
+ Return the maximal number of errors that ``self`` can decode.
690
+
691
+ EXAMPLES::
692
+
693
+ sage: C = codes.GeneralizedReedSolomonCode(GF(16, 'a').list()[:15], 7)
694
+ sage: Cp = codes.PuncturedCode(C, 3)
695
+ sage: D = codes.decoders.PuncturedCodeOriginalCodeDecoder(Cp)
696
+ sage: D.decoding_radius(2)
697
+ 2
698
+ """
699
+ punctured = len(self.code().punctured_positions())
700
+ D = self.original_decoder()
701
+ if self._strategy != 'try-all' and "error-erasure" not in D.decoder_type():
702
+ if D.decoding_radius() - punctured >= 0:
703
+ return D.decoding_radius() - punctured
704
+ else:
705
+ return 0
706
+ elif "error-erasure" in D.decoder_type() and number_erasures is not None:
707
+ diff = self.code().original_code().minimum_distance() - number_erasures - punctured - 1
708
+ if diff <= 0:
709
+ raise ValueError("The number of erasures exceeds decoding capability")
710
+ return diff // 2
711
+ elif "error-erasure" in D.decoder_type() and number_erasures is None:
712
+ raise ValueError("You must provide the number of erasures")
713
+
714
+
715
+ ####################### registration ###############################
716
+
717
+ PuncturedCode._registered_encoders["PuncturedMatrix"] = PuncturedCodePuncturedMatrixEncoder
718
+ PuncturedCode._registered_decoders["OriginalCode"] = PuncturedCodeOriginalCodeDecoder
719
+ PuncturedCodeOriginalCodeDecoder._decoder_type = {"dynamic"}