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
sage/coding/channel.py ADDED
@@ -0,0 +1,819 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules sage.rings.finite_rings
3
+ r"""
4
+ Channels
5
+
6
+ Given an input space and an output space, a channel takes element from the
7
+ input space (the message) and transforms it into an element of the output space
8
+ (the transmitted message).
9
+
10
+ In Sage, Channels simulate error-prone transmission over communication
11
+ channels, and we borrow the nomenclature from communication theory, such as
12
+ "transmission" and "positions" as the elements of transmitted vectors.
13
+ Transmission can be achieved with two methods:
14
+
15
+ - :meth:`Channel.transmit`. Considering a channel ``Chan`` and a message
16
+ ``msg``, transmitting ``msg`` with ``Chan`` can be done this way::
17
+
18
+ Chan.transmit(msg)
19
+
20
+ It can also be written in a more convenient way::
21
+
22
+ Chan(msg)
23
+
24
+ - :meth:`transmit_unsafe`. This does the exact same thing as
25
+ :meth:`transmit` except that it does not check if ``msg`` belongs to the
26
+ input space of ``Chan``::
27
+
28
+ Chan.transmit_unsafe(msg)
29
+
30
+ This is useful in e.g. an inner-loop of a long simulation as a
31
+ lighter-weight alternative to :meth:`Channel.transmit`.
32
+
33
+ This file contains the following elements:
34
+
35
+ - :class:`Channel`, the abstract class for Channels
36
+ - :class:`StaticErrorRateChannel`, which creates a specific number of errors in each
37
+ transmitted message
38
+ - :class:`ErrorErasureChannel`, which creates a specific number of errors and a
39
+ specific number of erasures in each transmitted message
40
+ """
41
+
42
+ # ****************************************************************************
43
+ # Copyright (C) 2015 David Lucas <david.lucas@inria.fr>
44
+ #
45
+ # This program is free software: you can redistribute it and/or modify
46
+ # it under the terms of the GNU General Public License as published by
47
+ # the Free Software Foundation, either version 2 of the License, or
48
+ # (at your option) any later version.
49
+ # https://www.gnu.org/licenses/
50
+ # ****************************************************************************
51
+ from copy import copy
52
+
53
+ from sage.structure.sage_object import SageObject
54
+ from sage.rings.integer import Integer
55
+ from sage.rings.finite_rings.finite_field_constructor import GF
56
+ from sage.misc.prandom import randint, random, sample
57
+ from sage.modules.free_module_element import vector
58
+ from sage.misc.abstract_method import abstract_method
59
+ from sage.categories.cartesian_product import cartesian_product
60
+ from sage.modules.free_module import VectorSpace
61
+ from sage.arith.misc import binomial
62
+
63
+
64
+ def random_error_vector(n, F, error_positions):
65
+ r"""
66
+ Return a vector of length ``n`` over ``F`` filled with random nonzero coefficients
67
+ at the positions given by ``error_positions``.
68
+
69
+ .. NOTE::
70
+
71
+ This is a helper function, which should only be used when implementing new channels.
72
+
73
+ INPUT:
74
+
75
+ - ``n`` -- the length of the vector
76
+
77
+ - ``F`` -- the field over which the vector is defined
78
+
79
+ - ``error_positions`` -- the nonzero positions of the vector
80
+
81
+ OUTPUT: a vector of ``F``
82
+
83
+ AUTHORS:
84
+
85
+ This function is taken from codinglib (https://bitbucket.org/jsrn/codinglib/)
86
+ and was written by Johan Nielsen.
87
+
88
+ EXAMPLES::
89
+
90
+ sage: from sage.coding.channel import random_error_vector
91
+ sage: random_error_vector(5, GF(2), [1,3])
92
+ (0, 1, 0, 1, 0)
93
+ """
94
+ vect = [F.zero()]*n
95
+ for i in error_positions:
96
+ vect[i] = F._random_nonzero_element()
97
+ return vector(F, vect)
98
+
99
+
100
+ def format_interval(t):
101
+ r"""
102
+ Return a formatted string representation of ``t``.
103
+
104
+ This method should be called by any representation function in Channel classes.
105
+
106
+ .. NOTE::
107
+
108
+ This is a helper function, which should only be used when implementing new channels.
109
+
110
+ INPUT:
111
+
112
+ - ``t`` -- list or a tuple
113
+
114
+ OUTPUT: string
115
+
116
+ TESTS::
117
+
118
+ sage: from sage.coding.channel import format_interval
119
+ sage: t = (5, 5)
120
+ sage: format_interval(t)
121
+ '5'
122
+
123
+ sage: t = (2, 10)
124
+ sage: format_interval(t)
125
+ 'between 2 and 10'
126
+ """
127
+ return str(t[0]) if t[0] == t[1] else 'between %s and %s' % (t[0], t[1])
128
+
129
+
130
+ class Channel(SageObject):
131
+ r"""
132
+ Abstract top-class for Channel objects.
133
+
134
+ All channel objects must inherit from this class. To implement a channel subclass, one should
135
+ do the following:
136
+
137
+ - inherit from this class,
138
+
139
+ - call the super constructor,
140
+
141
+ - override :meth:`transmit_unsafe`.
142
+
143
+ While not being mandatory, it might be useful to reimplement representation methods (``_repr_`` and
144
+ ``_latex_``).
145
+
146
+ This abstract class provides the following parameters:
147
+
148
+ - ``input_space`` -- the space of the words to transmit
149
+
150
+ - ``output_space`` -- the space of the transmitted words
151
+ """
152
+
153
+ def __init__(self, input_space, output_space):
154
+ r"""
155
+ Initialize parameters for a Channel object.
156
+
157
+ This is a private method, which should be called by the constructor
158
+ of every encoder, as it automatically initializes the mandatory
159
+ parameters of a Channel object.
160
+
161
+ INPUT:
162
+
163
+ - ``input_space`` -- the space of the words to transmit
164
+
165
+ - ``output_space`` -- the space of the transmitted words
166
+
167
+ EXAMPLES:
168
+
169
+ We first create a new Channel subclass::
170
+
171
+ sage: from sage.coding.channel import Channel
172
+ sage: class ChannelExample(Channel):
173
+ ....: def __init__(self, input_space, output_space):
174
+ ....: super().__init__(input_space, output_space)
175
+
176
+ We now create a member of our newly made class::
177
+
178
+ sage: input = VectorSpace(GF(7), 6)
179
+ sage: output = VectorSpace(GF(7), 5)
180
+ sage: Chan = ChannelExample(input, output)
181
+
182
+ We can check its parameters::
183
+
184
+ sage: Chan.input_space()
185
+ Vector space of dimension 6 over Finite Field of size 7
186
+ sage: Chan.output_space()
187
+ Vector space of dimension 5 over Finite Field of size 7
188
+ """
189
+ self._input_space = input_space
190
+ self._output_space = output_space
191
+
192
+ def transmit(self, message):
193
+ r"""
194
+ Return ``message``, modified accordingly with the algorithm of the channel it was
195
+ transmitted through.
196
+
197
+ Checks if ``message`` belongs to the input space, and returns an exception if not.
198
+ Note that ``message`` itself is never modified by the channel.
199
+
200
+ INPUT:
201
+
202
+ - ``message`` -- a vector
203
+
204
+ OUTPUT: a vector of the output space of ``self``
205
+
206
+ EXAMPLES::
207
+
208
+ sage: F = GF(59)^6
209
+ sage: n_err = 2
210
+ sage: Chan = channels.StaticErrorRateChannel(F, n_err)
211
+ sage: msg = F((4, 8, 15, 16, 23, 42))
212
+ sage: set_random_seed(10)
213
+ sage: Chan.transmit(msg)
214
+ (4, 8, 4, 16, 23, 53)
215
+
216
+ We can check that the input ``msg`` is not modified::
217
+
218
+ sage: msg
219
+ (4, 8, 15, 16, 23, 42)
220
+
221
+ If we transmit a vector which is not in the input space of ``self``::
222
+
223
+ sage: n_err = 2
224
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^6, n_err)
225
+ sage: msg = (4, 8, 15, 16, 23, 42)
226
+ sage: Chan.transmit(msg)
227
+ Traceback (most recent call last):
228
+ ...
229
+ TypeError: Message must be an element of the input space for the given channel
230
+
231
+ .. NOTE::
232
+
233
+ One can also call directly ``Chan(message)``, which does the same as ``Chan.transmit(message)``
234
+ """
235
+ if message in self.input_space():
236
+ return self.transmit_unsafe(message)
237
+ else:
238
+ raise TypeError("Message must be an element of the input space for the given channel")
239
+
240
+ #Alias for transmit method
241
+ __call__ = transmit
242
+
243
+ def input_space(self):
244
+ r"""
245
+ Return the input space of ``self``.
246
+
247
+ EXAMPLES::
248
+
249
+ sage: n_err = 2
250
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^6, n_err)
251
+ sage: Chan.input_space()
252
+ Vector space of dimension 6 over Finite Field of size 59
253
+ """
254
+ return self._input_space
255
+
256
+ def output_space(self):
257
+ r"""
258
+ Return the output space of ``self``.
259
+
260
+ EXAMPLES::
261
+
262
+ sage: n_err = 2
263
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^6, n_err)
264
+ sage: Chan.output_space()
265
+ Vector space of dimension 6 over Finite Field of size 59
266
+ """
267
+ return self._output_space
268
+
269
+ @abstract_method
270
+ def transmit_unsafe(self, message):
271
+ r"""
272
+ Return ``message``, modified accordingly with the algorithm of the channel it was
273
+ transmitted through.
274
+
275
+ This method does not check if ``message`` belongs to the input space of ``self``.
276
+
277
+ This is an abstract method which should be reimplemented in all the subclasses of
278
+ Channel.
279
+
280
+ EXAMPLES::
281
+
282
+ sage: n_err = 2
283
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^6, n_err)
284
+ sage: v = Chan.input_space().random_element()
285
+ sage: Chan.transmit_unsafe(v) # random
286
+ (1, 33, 46, 18, 20, 49)
287
+ """
288
+
289
+
290
+ class StaticErrorRateChannel(Channel):
291
+ r"""
292
+ Channel which adds a static number of errors to each message it transmits.
293
+
294
+ The input space and the output space of this channel are the same.
295
+
296
+ INPUT:
297
+
298
+ - ``space`` -- the space of both input and output
299
+
300
+ - ``number_errors`` -- the number of errors added to each transmitted message
301
+ It can be either an integer of a tuple. If a tuple is passed as
302
+ argument, the number of errors will be a random integer between the
303
+ two bounds of the tuple.
304
+
305
+ EXAMPLES:
306
+
307
+ We construct a :class:`StaticErrorRateChannel` which adds 2 errors
308
+ to any transmitted message::
309
+
310
+ sage: n_err = 2
311
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^40, n_err)
312
+ sage: Chan
313
+ Static error rate channel creating 2 errors, of input and output space
314
+ Vector space of dimension 40 over Finite Field of size 59
315
+
316
+ We can also pass a tuple for the number of errors::
317
+
318
+ sage: n_err = (1, 10)
319
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^40, n_err)
320
+ sage: Chan
321
+ Static error rate channel creating between 1 and 10 errors,
322
+ of input and output space Vector space of dimension 40 over Finite Field of size 59
323
+ """
324
+
325
+ def __init__(self, space, number_errors):
326
+ r"""
327
+ TESTS:
328
+
329
+ If the number of errors exceeds the dimension of the input space,
330
+ it will return an error::
331
+
332
+ sage: n_err = 42
333
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^40, n_err)
334
+ Traceback (most recent call last):
335
+ ...
336
+ ValueError: There might be more errors than the dimension of the input space
337
+ """
338
+ if isinstance(number_errors, (Integer, int)):
339
+ number_errors = (number_errors, number_errors)
340
+ if not isinstance(number_errors, (tuple, list)):
341
+ raise ValueError("number_errors must be a tuple, a list, an Integer or a Python int")
342
+ super().__init__(space, space)
343
+ if number_errors[1] > space.dimension():
344
+ raise ValueError("There might be more errors than the dimension of the input space")
345
+ self._number_errors = number_errors
346
+
347
+ def _repr_(self):
348
+ r"""
349
+ Return a string representation of ``self``.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: n_err = 42
354
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^50, n_err)
355
+ sage: Chan
356
+ Static error rate channel creating 42 errors, of input and output space
357
+ Vector space of dimension 50 over Finite Field of size 59
358
+ """
359
+ no_err = self.number_errors()
360
+ return "Static error rate channel creating %s errors, of input and output space %s"\
361
+ % (format_interval(no_err), self.input_space())
362
+
363
+ def _latex_(self):
364
+ r"""
365
+ Return a latex representation of ``self``.
366
+
367
+ EXAMPLES::
368
+
369
+ sage: n_err = 42
370
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^50, n_err)
371
+ sage: latex(Chan)
372
+ \textnormal{Static error rate channel creating 42 errors, of
373
+ input and output space Vector space of dimension 50 over Finite Field of size 59}
374
+ """
375
+ no_err = self.number_errors()
376
+ return "\\textnormal{Static error rate channel creating %s errors, of input and output space %s}"\
377
+ % (format_interval(no_err), self.input_space())
378
+
379
+ def transmit_unsafe(self, message):
380
+ r"""
381
+ Return ``message`` with as many errors as ``self._number_errors`` in it.
382
+
383
+ If ``self._number_errors`` was passed as a tuple for the number of errors, it will
384
+ pick a random integer between the bounds of the tuple and use it as the number of errors.
385
+
386
+ This method does not check if ``message`` belongs to the input space of ``self``.
387
+
388
+ INPUT:
389
+
390
+ - ``message`` -- a vector
391
+
392
+ OUTPUT: a vector of the output space
393
+
394
+ EXAMPLES::
395
+
396
+ sage: F = GF(59)^6
397
+ sage: n_err = 2
398
+ sage: Chan = channels.StaticErrorRateChannel(F, n_err)
399
+ sage: msg = F((4, 8, 15, 16, 23, 42))
400
+ sage: set_random_seed(10)
401
+ sage: Chan.transmit_unsafe(msg)
402
+ (4, 8, 4, 16, 23, 53)
403
+
404
+ This checks that :issue:`19863` is fixed::
405
+
406
+ sage: V = VectorSpace(GF(2), 1000)
407
+ sage: Chan = channels.StaticErrorRateChannel(V, 367)
408
+ sage: c = V.random_element()
409
+ sage: (c - Chan(c)).hamming_weight()
410
+ 367
411
+ """
412
+ w = copy(message)
413
+ number_errors = randint(*self.number_errors())
414
+ V = self.input_space()
415
+ R = V.base_ring()
416
+ for i in sample(range(V.dimension()), number_errors):
417
+ err = R.random_element()
418
+ while (w[i] == err):
419
+ err = R.random_element()
420
+ w[i] = err
421
+ return w
422
+
423
+ def number_errors(self):
424
+ r"""
425
+ Return the number of errors created by ``self``.
426
+
427
+ EXAMPLES::
428
+
429
+ sage: n_err = 3
430
+ sage: Chan = channels.StaticErrorRateChannel(GF(59)^6, n_err)
431
+ sage: Chan.number_errors()
432
+ (3, 3)
433
+ """
434
+ return self._number_errors
435
+
436
+
437
+ class ErrorErasureChannel(Channel):
438
+ r"""
439
+ Channel which adds errors and erases several positions in any message it transmits.
440
+
441
+ The output space of this channel is a Cartesian product between its input
442
+ space and a VectorSpace of the same dimension over `\GF{2}`.
443
+
444
+ INPUT:
445
+
446
+ - ``space`` -- the input and output space
447
+
448
+ - ``number_errors`` -- the number of errors created in each transmitted
449
+ message. It can be either an integer of a tuple. If a tuple is passed as
450
+ an argument, the number of errors will be a random integer between the
451
+ two bounds of this tuple.
452
+
453
+ - ``number_erasures`` -- the number of erasures created in each transmitted
454
+ message. It can be either an integer of a tuple. If a tuple is passed as an
455
+ argument, the number of erasures will be a random integer between the
456
+ two bounds of this tuple.
457
+
458
+ EXAMPLES:
459
+
460
+ We construct a ErrorErasureChannel which adds 2 errors
461
+ and 2 erasures to any transmitted message::
462
+
463
+ sage: n_err, n_era = 2, 2
464
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^40, n_err, n_era)
465
+ sage: Chan
466
+ Error-and-erasure channel creating 2 errors and 2 erasures
467
+ of input space Vector space of dimension 40 over Finite Field of size 59
468
+ and output space The Cartesian product of (Vector space of dimension 40
469
+ over Finite Field of size 59, Vector space of dimension 40 over Finite Field of size 2)
470
+
471
+ We can also pass the number of errors and erasures as a couple of integers::
472
+
473
+ sage: n_err, n_era = (1, 10), (1, 10)
474
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^40, n_err, n_era)
475
+ sage: Chan
476
+ Error-and-erasure channel creating between 1 and 10 errors and
477
+ between 1 and 10 erasures of input space Vector space of dimension 40
478
+ over Finite Field of size 59 and output space The Cartesian product of
479
+ (Vector space of dimension 40 over Finite Field of size 59,
480
+ Vector space of dimension 40 over Finite Field of size 2)
481
+ """
482
+
483
+ def __init__(self, space, number_errors, number_erasures):
484
+ r"""
485
+ TESTS:
486
+
487
+ If the sum of number of errors and number of erasures
488
+ exceeds (or may exceed, in the case of tuples) the dimension of the input space,
489
+ it will return an error::
490
+
491
+ sage: n_err, n_era = 21, 21
492
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^40, n_err, n_era)
493
+ Traceback (most recent call last):
494
+ ...
495
+ ValueError: The total number of errors and erasures cannot exceed the dimension of the input space
496
+ """
497
+ if isinstance(number_errors, (Integer, int)):
498
+ number_errors = (number_errors, number_errors)
499
+ if not isinstance(number_errors, (tuple, list)):
500
+ raise ValueError("number_errors must be a tuple, a list, an Integer or a Python int")
501
+
502
+ if isinstance(number_erasures, (Integer, int)):
503
+ number_erasures = (number_erasures, number_erasures)
504
+ if not isinstance(number_erasures, (tuple, list)):
505
+ raise ValueError("number_erasures must be a tuple, a list, an Integer or a Python int")
506
+
507
+ output_space = cartesian_product([space, VectorSpace(GF(2), space.dimension())])
508
+ super().__init__(space, output_space)
509
+ if number_errors[1] + number_erasures[1] > space.dimension():
510
+ raise ValueError("The total number of errors and erasures cannot exceed the dimension of the input space")
511
+ self._number_errors = number_errors
512
+ self._number_erasures = number_erasures
513
+
514
+ def _repr_(self):
515
+ r"""
516
+ Return a string representation of ``self``.
517
+
518
+ EXAMPLES::
519
+
520
+ sage: n_err, n_era = 21, 21
521
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^50, n_err, n_era)
522
+ sage: Chan
523
+ Error-and-erasure channel creating 21 errors and 21 erasures
524
+ of input space Vector space of dimension 50 over Finite Field of size 59
525
+ and output space The Cartesian product of (Vector space of dimension 50
526
+ over Finite Field of size 59, Vector space of dimension 50 over Finite Field of size 2)
527
+ """
528
+ no_err = self.number_errors()
529
+ no_era = self.number_erasures()
530
+ return "Error-and-erasure channel creating %s errors and %s erasures of input space %s and output space %s"\
531
+ % (format_interval(no_err), format_interval(no_era), self.input_space(), self.output_space())
532
+
533
+ def _latex_(self):
534
+ r"""
535
+ Return a latex representation of ``self``.
536
+
537
+ EXAMPLES::
538
+
539
+ sage: n_err, n_era = 21, 21
540
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^50, n_err, n_era)
541
+ sage: latex(Chan)
542
+ \textnormal{Error-and-erasure channel creating 21 errors and 21 erasures
543
+ of input space Vector space of dimension 50 over Finite Field of size 59
544
+ and output space The Cartesian product of (Vector space of dimension 50
545
+ over Finite Field of size 59, Vector space of dimension 50 over Finite Field of size 2)}
546
+ """
547
+ no_err = self.number_errors()
548
+ no_era = self.number_erasures()
549
+ return "\\textnormal{Error-and-erasure channel creating %s errors and %s erasures of input space %s and output space %s}"\
550
+ % (format_interval(no_err), format_interval(no_era), self.input_space(), self.output_space())
551
+
552
+ def transmit_unsafe(self, message):
553
+ r"""
554
+ Return ``message`` with as many errors as ``self._number_errors`` in it,
555
+ and as many erasures as ``self._number_erasures`` in it.
556
+
557
+ If ``self._number_errors`` was passed as a tuple for the number of errors, it will
558
+ pick a random integer between the bounds of the tuple and use it as the number of errors.
559
+ It does the same with ``self._number_erasures``.
560
+
561
+ All erased positions are set to 0 in the transmitted message.
562
+ It is guaranteed that the erasures and the errors will never overlap:
563
+ the received message will always contains exactly as many errors and erasures
564
+ as expected.
565
+
566
+ This method does not check if ``message`` belongs to the input space of ``self``.
567
+
568
+ INPUT:
569
+
570
+ - ``message`` -- a vector
571
+
572
+ OUTPUT: a couple of vectors, namely:
573
+
574
+ - the transmitted message, which is ``message`` with erroneous and
575
+ erased positions
576
+ - the erasure vector, which contains ``1`` at the erased positions of
577
+ the transmitted message and ``0`` elsewhere.
578
+
579
+ EXAMPLES::
580
+
581
+ sage: F = GF(59)^11
582
+ sage: n_err, n_era = 2, 2
583
+ sage: Chan = channels.ErrorErasureChannel(F, n_err, n_era)
584
+ sage: msg = F((3, 14, 15, 9, 26, 53, 58, 9, 7, 9, 3))
585
+ sage: set_random_seed(10)
586
+ sage: Chan.transmit_unsafe(msg)
587
+ ((31, 0, 15, 9, 38, 53, 58, 9, 0, 9, 3), (0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0))
588
+ """
589
+ number_errors = randint(*self.number_errors())
590
+ number_erasures = randint(*self.number_erasures())
591
+ V = self.input_space()
592
+ n = V.dimension()
593
+ zero = V.base_ring().zero()
594
+
595
+ errors = sample(range(n), number_errors + number_erasures)
596
+ error_positions = errors[:number_errors]
597
+ erasure_positions = errors[number_errors:]
598
+
599
+ error_vector = random_error_vector(n, V.base_ring(), error_positions)
600
+ erasure_vector = random_error_vector(n , GF(2), erasure_positions)
601
+
602
+ message = message + error_vector
603
+
604
+ for i in erasure_positions:
605
+ message[i] = zero
606
+ return message, erasure_vector
607
+
608
+ def number_errors(self):
609
+ r"""
610
+ Return the number of errors created by ``self``.
611
+
612
+ EXAMPLES::
613
+
614
+ sage: n_err, n_era = 3, 0
615
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^6, n_err, n_era)
616
+ sage: Chan.number_errors()
617
+ (3, 3)
618
+ """
619
+ return self._number_errors
620
+
621
+ def number_erasures(self):
622
+ r"""
623
+ Return the number of erasures created by ``self``.
624
+
625
+ EXAMPLES::
626
+
627
+ sage: n_err, n_era = 0, 3
628
+ sage: Chan = channels.ErrorErasureChannel(GF(59)^6, n_err, n_era)
629
+ sage: Chan.number_erasures()
630
+ (3, 3)
631
+ """
632
+ return self._number_erasures
633
+
634
+
635
+ class QarySymmetricChannel(Channel):
636
+ r"""
637
+ The `q`-ary symmetric, memoryless communication channel.
638
+
639
+ Given an alphabet `\Sigma` with `|\Sigma| = q` and an error probability
640
+ `\epsilon`, a `q`-ary symmetric channel sends an element of `\Sigma` into the
641
+ same element with probability `1 - \epsilon`, and any one of the other `q -
642
+ 1` elements with probability `\frac{\epsilon}{q - 1}`. This implementation
643
+ operates over vectors in `\Sigma^n`, and "transmits" each element of the
644
+ vector independently in the above manner.
645
+
646
+ Though `\Sigma` is usually taken to be a finite field, this implementation
647
+ allows any structure for which Sage can represent `\Sigma^n` and for which
648
+ `\Sigma` has a ``random_element()`` method. However, beware that if `\Sigma`
649
+ is infinite, errors will not be uniformly distributed (since
650
+ ``random_element()`` does not draw uniformly at random).
651
+
652
+ The input space and the output space of this channel are the same:
653
+ `\Sigma^n`.
654
+
655
+ INPUT:
656
+
657
+ - ``space`` -- the input and output space of the channel; it has to be
658
+ `\GF{q}^n` for some finite field `\GF{q}`
659
+
660
+ - ``epsilon`` -- the transmission error probability of the individual elements
661
+
662
+ EXAMPLES:
663
+
664
+ We construct a :class:`QarySymmetricChannel` which corrupts 30% of all
665
+ transmitted symbols::
666
+
667
+ sage: epsilon = 0.3
668
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
669
+ sage: Chan
670
+ q-ary symmetric channel with error probability 0.300000000000000,
671
+ of input and output space
672
+ Vector space of dimension 50 over Finite Field of size 59
673
+ """
674
+
675
+ def __init__(self, space, epsilon):
676
+ r"""
677
+ TESTS:
678
+
679
+ If ``space`` is not a vector space, an error is raised::
680
+
681
+ sage: epsilon = 0.42
682
+ sage: Chan = channels.QarySymmetricChannel(GF(59), epsilon)
683
+ Traceback (most recent call last):
684
+ ...
685
+ ValueError: space has to be of the form Sigma^n, where Sigma has a random_element() method
686
+
687
+ If ``epsilon`` is not between 0 and 1, an error is raised::
688
+
689
+ sage: epsilon = 42
690
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
691
+ Traceback (most recent call last):
692
+ ...
693
+ ValueError: Error probability must be between 0 and 1
694
+ """
695
+ if epsilon >= 1 or epsilon <= 0:
696
+ raise ValueError("Error probability must be between 0 and 1")
697
+
698
+ super().__init__(space, space)
699
+ self._epsilon = epsilon
700
+ try:
701
+ self.transmit_unsafe(space.random_element())
702
+ except Exception:
703
+ raise ValueError("space has to be of the form Sigma^n, where Sigma has a random_element() method")
704
+
705
+ def __repr__(self):
706
+ r"""
707
+ Return a string representation of ``self``.
708
+
709
+ EXAMPLES::
710
+
711
+ sage: epsilon = 0.3
712
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
713
+ sage: Chan
714
+ q-ary symmetric channel with error probability 0.300000000000000,
715
+ of input and output space Vector space of dimension 50 over Finite Field of size 59
716
+ """
717
+ return "q-ary symmetric channel with error probability %s, of input and output space %s"\
718
+ % (self.error_probability(), self.input_space())
719
+
720
+ def _latex_(self):
721
+ r"""
722
+ Return a latex representation of ``self``.
723
+
724
+ EXAMPLES::
725
+
726
+ sage: epsilon = 0.3
727
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
728
+ sage: latex(Chan)
729
+ \textnormal{q-ary symmetric channel with error probability 0.300000000000000,
730
+ of input and output space Vector space of dimension 50 over Finite Field of size 59}
731
+ """
732
+ return "\\textnormal{q-ary symmetric channel with error probability %s, of input and output space %s}"\
733
+ % (self.error_probability(), self.input_space())
734
+
735
+ def transmit_unsafe(self, message):
736
+ r"""
737
+ Return ``message`` where each of the symbols has been changed to another from the alphabet with
738
+ probability :meth:`error_probability`.
739
+
740
+ This method does not check if ``message`` belongs to the input space of ``self``.
741
+
742
+ INPUT:
743
+
744
+ - ``message`` -- a vector
745
+
746
+ EXAMPLES::
747
+
748
+ sage: F = GF(59)^11
749
+ sage: epsilon = 0.3
750
+ sage: Chan = channels.QarySymmetricChannel(F, epsilon)
751
+ sage: msg = F((3, 14, 15, 9, 26, 53, 58, 9, 7, 9, 3))
752
+ sage: set_random_seed(10)
753
+ sage: Chan.transmit_unsafe(msg)
754
+ (3, 14, 15, 53, 12, 53, 58, 9, 55, 9, 3)
755
+ """
756
+ epsilon = self.error_probability()
757
+ V = self.input_space()
758
+ F = V.base_ring()
759
+ msg = copy(message.list())
760
+ for i in range(len(msg)):
761
+ if random() <= epsilon:
762
+ a = F.random_element()
763
+ while a == msg[i]:
764
+ a = F.random_element()
765
+ msg[i] = a
766
+ return V(msg)
767
+
768
+ def error_probability(self):
769
+ r"""
770
+ Return the error probability of a single symbol transmission of
771
+ ``self``.
772
+
773
+ EXAMPLES::
774
+
775
+ sage: epsilon = 0.3
776
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
777
+ sage: Chan.error_probability()
778
+ 0.300000000000000
779
+ """
780
+ return self._epsilon
781
+
782
+ def probability_of_exactly_t_errors(self, t):
783
+ r"""
784
+ Return the probability ``self`` has to return
785
+ exactly ``t`` errors.
786
+
787
+ INPUT:
788
+
789
+ - ``t`` -- integer
790
+
791
+ EXAMPLES::
792
+
793
+ sage: epsilon = 0.3
794
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
795
+ sage: Chan.probability_of_exactly_t_errors(15)
796
+ 0.122346861835401
797
+ """
798
+ n = self.input_space().dimension()
799
+ epsilon = self.error_probability()
800
+ return binomial(n, t) * epsilon**t * (1-epsilon)**(n-t)
801
+
802
+ def probability_of_at_most_t_errors(self, t):
803
+ r"""
804
+ Return the probability ``self`` has to return
805
+ at most ``t`` errors.
806
+
807
+ INPUT:
808
+
809
+ - ``t`` -- integer
810
+
811
+ EXAMPLES::
812
+
813
+ sage: epsilon = 0.3
814
+ sage: Chan = channels.QarySymmetricChannel(GF(59)^50, epsilon)
815
+ sage: Chan.probability_of_at_most_t_errors(20)
816
+ 0.952236164579467
817
+ """
818
+ return sum(self.probability_of_exactly_t_errors(i)
819
+ for i in range(t+1))