passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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 +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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,755 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Bounds for parameters of codes
4
+
5
+ This module provided some upper and lower bounds for the parameters
6
+ of codes.
7
+
8
+ AUTHORS:
9
+
10
+ - David Joyner (2006-07): initial implementation.
11
+
12
+ - William Stein (2006-07): minor editing of docs and code (fixed bug
13
+ in elias_bound_asymp)
14
+
15
+ - David Joyner (2006-07): fixed dimension_upper_bound to return an
16
+ integer, added example to elias_bound_asymp.
17
+
18
+ - " (2009-05): removed all calls to Guava but left it as an option.
19
+
20
+ - Dima Pasechnik (2012-10): added LP bounds.
21
+
22
+ Let `F` be a finite set of size `q`.
23
+ A subset `C` of `V=F^n` is called a code of length `n`.
24
+ Often one considers the case where `F` is a finite field,
25
+ denoted by `\GF{q}`. Then `V` is an `F`-vector space. A subspace
26
+ of `V` (with the standard basis) is called a linear code of length `n`. If its
27
+ dimension is denoted `k` then we typically store a basis of `C` as a `k\times
28
+ n` matrix (the rows are the basis vectors). If `F=\GF{2}` then `C` is called a
29
+ binary code. If `F` has `q` elements then `C` is called a `q`-ary code. The
30
+ elements of a code `C` are called codewords. The information rate of `C` is
31
+
32
+
33
+ .. MATH::
34
+
35
+ R={\frac{\log_q\vert C\vert}{n}},
36
+
37
+
38
+ where `\vert C\vert` denotes the number of elements of `C`. If `{\bf
39
+ v}=(v_1,v_2,...,v_n)`, `{\bf w}=(w_1,w_2,...,w_n)` are elements of `V=F^n` then
40
+ we define
41
+
42
+
43
+ .. MATH::
44
+
45
+ d({\bf v},{\bf w}) =\vert\{i\ \vert\ 1\leq i\leq n,\ v_i\not= w_i\}\vert
46
+
47
+
48
+ to be the Hamming distance between `{\bf v}` and `{\bf w}`. The function
49
+ `d:V\times V\rightarrow \Bold{N}` is called the Hamming metric. The weight of
50
+ an element (in the Hamming metric) is `d({\bf v},{\bf 0})`,
51
+ where `0` is a distinguished element of `F`;
52
+ in particular it is `0` of the field if `F` is a field.
53
+ The minimum distance of
54
+ a linear code is the smallest nonzero weight of a codeword in `C`. The
55
+ relatively minimum distance is denoted
56
+
57
+
58
+ .. MATH::
59
+
60
+ \delta = d/n.
61
+
62
+ A linear code with length `n`, dimension `k`, and minimum distance `d` is
63
+ called an `[n,k,d]_q`-code and `n,k,d` are called its parameters. A (not
64
+ necessarily linear) code `C` with length `n`, size `M=|C|`, and minimum
65
+ distance `d` is called an `(n,M,d)_q`-code (using parentheses instead of square
66
+ brackets). Of course, `k=\log_q(M)` for linear codes.
67
+
68
+ What is the "best" code of a given length?
69
+ Let `A_q(n,d)` denote the largest `M` such that there exists a
70
+ `(n,M,d)` code in `F^n`. Let `B_q(n,d)` (also denoted `A^{lin}_q(n,d)`) denote
71
+ the largest `k` such that there exists a `[n,k,d]` code in `F^n`. (Of course,
72
+ `A_q(n,d)\geq B_q(n,d)`.) Determining `A_q(n,d)` and `B_q(n,d)` is one of the
73
+ main problems in the theory of error-correcting codes. For more details see
74
+ [HP2003]_ and [Lin1999]_.
75
+
76
+ These quantities related to solving a generalization of the
77
+ childhood game of "20 questions".
78
+
79
+ GAME: Player 1 secretly chooses a number from `1` to
80
+ `M` (`M` is large but fixed). Player 2 asks a
81
+ series of "yes/no questions" in an attempt to determine that
82
+ number. Player 1 may lie at most `e` times
83
+ (`e\geq 0` is fixed). What is the minimum number of "yes/no
84
+ questions" Player 2 must ask to (always) be able to correctly
85
+ determine the number Player 1 chose?
86
+
87
+ If feedback is not allowed (the only situation considered here),
88
+ call this minimum number `g(M,e)`.
89
+
90
+ Lemma: For fixed `e` and `M`, `g(M,e)` is
91
+ the smallest `n` such that `A_2(n,2e+1)\geq M`.
92
+
93
+ Thus, solving the solving a generalization of the game of "20
94
+ questions" is equivalent to determining `A_2(n,d)`! Using
95
+ Sage, you can determine the best known estimates for this number in
96
+ 2 ways:
97
+
98
+ 1. Indirectly, using ``best_known_linear_code_www(n, k, F)``,
99
+ which connects to the website http://www.codetables.de by Markus Grassl;
100
+
101
+ 2. ``codesize_upper_bound(n,d,q)``, ``dimension_upper_bound(n,d,q)``,
102
+ and ``best_known_linear_code(n, k, F)``.
103
+
104
+ The output of :func:`best_known_linear_code`,
105
+ :func:`best_known_linear_code_www`, or :func:`dimension_upper_bound` would
106
+ give only special solutions to the GAME because the bounds are applicable
107
+ to only linear codes. The output of :func:`codesize_upper_bound` would give
108
+ the best possible solution, that may belong to a linear or nonlinear code.
109
+
110
+ This module implements:
111
+
112
+ - ``codesize_upper_bound(n,d,q)``, for the best known (as of May, 2006) upper
113
+ bound `A(n,d)` for the size of a code of length `n`, minimum distance `d`
114
+ over a field of size `q`.
115
+
116
+ - ``dimension_upper_bound(n,d,q)``, an upper bound `B(n,d)=B_q(n,d)` for the
117
+ dimension of a linear code of length `n`, minimum distance `d` over a field
118
+ of size `q`.
119
+
120
+ - ``gilbert_lower_bound(n,q,d)``, a lower bound for number of elements in the
121
+ largest code of min distance `d` in `\GF{q}^n`.
122
+
123
+ - ``gv_info_rate(n,delta,q)``, `log_q(GLB)/n`, where GLB is the Gilbert lower
124
+ bound and `\delta = d/n`.
125
+
126
+ - ``gv_bound_asymp(delta,q)``, asymptotic analog of Gilbert lower bound.
127
+
128
+ - ``plotkin_upper_bound(n,q,d)``
129
+
130
+ - ``plotkin_bound_asymp(delta,q)``, asymptotic analog of Plotkin bound.
131
+
132
+ - ``griesmer_upper_bound(n,q,d)``
133
+
134
+ - ``elias_upper_bound(n,q,d)``
135
+
136
+ - ``elias_bound_asymp(delta,q)``, asymptotic analog of Elias bound.
137
+
138
+ - ``hamming_upper_bound(n,q,d)``
139
+
140
+ - ``hamming_bound_asymp(delta,q)``, asymptotic analog of Hamming bound.
141
+
142
+ - ``singleton_upper_bound(n,q,d)``
143
+
144
+ - ``singleton_bound_asymp(delta,q)``, asymptotic analog of Singleton bound.
145
+
146
+ - ``mrrw1_bound_asymp(delta,q)``, "first" asymptotic
147
+ McEliese-Rumsey-Rodemich-Welsh bound for the information rate.
148
+
149
+ - Delsarte (a.k.a. Linear Programming (LP)) upper bounds.
150
+
151
+ PROBLEM: In this module we shall typically either (a) seek bounds on `k`, given
152
+ `n`, `d`, `q`, (b) seek bounds on `R`, `\delta`, `q` (assuming `n` is
153
+ "infinity").
154
+
155
+ .. TODO::
156
+
157
+ - Johnson bounds for binary codes.
158
+
159
+ - mrrw2_bound_asymp(delta,q), "second" asymptotic
160
+ McEliese-Rumsey-Rodemich-Welsh bound for the information rate.
161
+ """
162
+
163
+ # ****************************************************************************
164
+ # Copyright (C) 2006 David Joyner <wdj@usna.edu>
165
+ # 2006 William Stein <wstein@gmail.com>
166
+ #
167
+ # Distributed under the terms of the GNU General Public License (GPL)
168
+ #
169
+ # https://www.gnu.org/licenses/
170
+ # ****************************************************************************
171
+
172
+ from sage.arith.misc import binomial, is_prime_power
173
+ from sage.features.gap import GapPackage
174
+ from sage.misc.functional import sqrt, log
175
+ from sage.misc.lazy_import import lazy_import
176
+ from sage.rings.integer_ring import ZZ
177
+ from sage.rings.rational_field import QQ
178
+ from sage.rings.real_double import RDF
179
+
180
+ from .delsarte_bounds import (delsarte_bound_hamming_space,
181
+ delsarte_bound_additive_hamming_space)
182
+
183
+ lazy_import('sage.libs.gap.libgap', 'libgap')
184
+
185
+
186
+ def _check_n_q_d(n, q, d, field_based=True):
187
+ r"""
188
+ Check that the length `n`, alphabet size `q` and minimum distance `d` type
189
+ check and make sense for a code over a field.
190
+
191
+ More precisely, this checks that the parameters are positive
192
+ integers, that `q` is a prime power for codes over a field, or,
193
+ more generally, that `q` is of size at least 2, and that `n >= d`.
194
+ This raises a :exc:`ValueError` otherwise.
195
+
196
+ TESTS::
197
+
198
+ sage: # needs sage.libs.pari
199
+ sage: from sage.coding.code_bounds import _check_n_q_d
200
+ sage: _check_n_q_d(20, 16, 5)
201
+ True
202
+ sage: _check_n_q_d(20, 16, 6, field_based=False)
203
+ True
204
+ sage: _check_n_q_d(20, 21, 16)
205
+ Traceback (most recent call last):
206
+ ...
207
+ ValueError: The alphabet size does not make sense for a code over a field
208
+ sage: _check_n_q_d(20, -21, 16)
209
+ Traceback (most recent call last):
210
+ ...
211
+ ValueError: The alphabet size must be an integer >1
212
+ sage: _check_n_q_d(20, 2, 26)
213
+ Traceback (most recent call last):
214
+ ...
215
+ ValueError: The length or minimum distance does not make sense
216
+ """
217
+ if q not in ZZ or q < 2:
218
+ raise ValueError("The alphabet size must be an integer >1")
219
+ if field_based and not is_prime_power(q):
220
+ raise ValueError("The alphabet size does not make sense for a code over a field")
221
+ if not (0 < d <= n and n in ZZ and d in ZZ):
222
+ raise ValueError("The length or minimum distance does not make sense")
223
+ return True
224
+
225
+
226
+ def codesize_upper_bound(n, d, q, algorithm=None):
227
+ r"""
228
+ Return an upper bound on the number of codewords in a (possibly non-linear)
229
+ code.
230
+
231
+ This function computes the minimum value of the upper bounds of Singleton,
232
+ Hamming, Plotkin, and Elias.
233
+
234
+ If ``algorithm="gap"``, then this returns the best known upper
235
+ bound `A(n,d)=A_q(n,d)` for the size of a code of length `n`,
236
+ minimum distance `d` over a field of size `q`. The function first
237
+ checks for trivial cases (like `d=1` or `n=d`), and if the value
238
+ is in the built-in table. Then it calculates the minimum value
239
+ of the upper bound using the algorithms of Singleton, Hamming,
240
+ Johnson, Plotkin and Elias. If the code is binary,
241
+ `A(n, 2\ell-1) = A(n+1,2\ell)`, so the function
242
+ takes the minimum of the values obtained from all algorithms for the
243
+ parameters `(n, 2\ell-1)` and `(n+1, 2\ell)`. This
244
+ wraps GUAVA's (i.e. GAP's package Guava) ``UpperBound(n, d, q)``.
245
+
246
+ If ``algorithm="LP"``, then this returns the Delsarte (a.k.a. Linear
247
+ Programming) upper bound.
248
+
249
+ EXAMPLES::
250
+
251
+ sage: codes.bounds.codesize_upper_bound(10, 3, 2)
252
+ 93
253
+ sage: codes.bounds.codesize_upper_bound(24, 8, 2, algorithm='LP') # needs sage.numerical.mip
254
+ 4096
255
+ sage: codes.bounds.codesize_upper_bound(10, 3, 2, algorithm='gap') # optional - gap_package_guava
256
+ 85
257
+ sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm=None) # needs sage.symbolic
258
+ 123361
259
+ sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm='gap') # optional - gap_package_guava
260
+ 123361
261
+ sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm='LP') # needs sage.numerical.mip
262
+ 109226
263
+
264
+ TESTS:
265
+
266
+ Make sure :issue:`22961` is fixed::
267
+
268
+ sage: codes.bounds.codesize_upper_bound(19, 10, 2)
269
+ 20
270
+ sage: codes.bounds.codesize_upper_bound(19, 10, 2, algorithm='gap') # optional - gap_package_guava
271
+ 20
272
+
273
+ Meaningless parameters are rejected::
274
+
275
+ sage: codes.bounds.codesize_upper_bound(10, -20, 6)
276
+ Traceback (most recent call last):
277
+ ...
278
+ ValueError: The length or minimum distance does not make sense
279
+ """
280
+ _check_n_q_d(n, q, d, field_based=False)
281
+ if algorithm == "gap":
282
+ GapPackage("guava", spkg='gap_packages').require()
283
+ libgap.load_package('guava')
284
+ return int(libgap.UpperBound(n, d, q))
285
+ if algorithm == "LP":
286
+ return int(delsarte_bound_hamming_space(n, d, q))
287
+ else:
288
+ eub = elias_upper_bound(n, q, d)
289
+ hub = hamming_upper_bound(n, q, d)
290
+ pub = plotkin_upper_bound(n, q, d)
291
+ sub = singleton_upper_bound(n, q, d)
292
+ return min([eub, hub, pub, sub])
293
+
294
+
295
+ def dimension_upper_bound(n, d, q, algorithm=None):
296
+ r"""
297
+ Return an upper bound for the dimension of a linear code.
298
+
299
+ Return an upper bound `B(n,d) = B_q(n,d)` for the
300
+ dimension of a linear code of length `n`, minimum distance `d` over a
301
+ field of size `q`.
302
+
303
+ Parameter ``algorithm`` has the same meaning as in
304
+ :func:`codesize_upper_bound`
305
+
306
+ EXAMPLES::
307
+
308
+ sage: codes.bounds.dimension_upper_bound(10,3,2) # needs sage.libs.pari sage.symbolic
309
+ 6
310
+ sage: codes.bounds.dimension_upper_bound(30,15,4) # needs sage.libs.pari sage.symbolic
311
+ 13
312
+ sage: codes.bounds.dimension_upper_bound(30,15,4,algorithm='LP') # needs sage.libs.pari sage.numerical.mip
313
+ 12
314
+
315
+ TESTS:
316
+
317
+ Meaningless code parameters are rejected::
318
+
319
+ sage: codes.bounds.dimension_upper_bound(13,3,6) # needs sage.libs.pari
320
+ Traceback (most recent call last):
321
+ ...
322
+ ValueError: The alphabet size does not make sense for a code over a field
323
+ """
324
+ _check_n_q_d(n, q, d)
325
+ q = ZZ(q)
326
+ if algorithm == "LP":
327
+ return delsarte_bound_additive_hamming_space(n, d, q)
328
+ # algorithm == None or algorithm == "gap":
329
+ return int(ZZ(codesize_upper_bound(n, d, q, algorithm=algorithm)).log(q))
330
+
331
+
332
+ def volume_hamming(n, q, r):
333
+ r"""
334
+ Return the number of elements in a Hamming ball.
335
+
336
+ Return the number of elements in a Hamming ball of radius `r` in
337
+ `\GF{q}^n`.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: codes.bounds.volume_hamming(10,2,3)
342
+ 176
343
+ """
344
+ return sum([binomial(n, i) * (q-1)**i
345
+ for i in range(r+1)])
346
+
347
+
348
+ def gilbert_lower_bound(n, q, d):
349
+ r"""
350
+ Return the Gilbert-Varshamov lower bound.
351
+
352
+ Return the Gilbert-Varshamov lower bound for number of elements in a largest code of
353
+ minimum distance d in `\GF{q}^n`. See :wikipedia:`Gilbert-Varshamov_bound`
354
+
355
+ EXAMPLES::
356
+
357
+ sage: codes.bounds.gilbert_lower_bound(10,2,3)
358
+ 128/7
359
+ """
360
+ _check_n_q_d(n, q, d, field_based=False)
361
+ ans = q**n/volume_hamming(n,q,d-1)
362
+ return ans
363
+
364
+
365
+ def plotkin_upper_bound(n, q, d, algorithm=None):
366
+ r"""
367
+ Return the Plotkin upper bound.
368
+
369
+ Return the Plotkin upper bound for the number of elements in a largest
370
+ code of minimum distance `d` in `\GF{q}^n`.
371
+ More precisely this is a generalization of Plotkin's result for `q=2`
372
+ to bigger `q` due to Berlekamp.
373
+
374
+ The ``algorithm="gap"`` option wraps Guava's ``UpperBoundPlotkin``.
375
+
376
+ EXAMPLES::
377
+
378
+ sage: codes.bounds.plotkin_upper_bound(10,2,3)
379
+ 192
380
+ sage: codes.bounds.plotkin_upper_bound(10,2,3,algorithm='gap') # optional - gap_package_guava
381
+ 192
382
+ """
383
+ _check_n_q_d(n, q, d, field_based=False)
384
+ if algorithm == "gap":
385
+ GapPackage("guava", spkg='gap_packages').require()
386
+ libgap.load_package("guava")
387
+ return QQ(libgap.UpperBoundPlotkin(n, d, q))
388
+ else:
389
+ t = 1 - 1/q
390
+ if (q == 2) and (n == 2*d) and (d % 2 == 0):
391
+ return 4*d
392
+ elif (q == 2) and (n == 2*d + 1) and (d % 2 == 1):
393
+ return 4*d + 4
394
+ elif d > t*n:
395
+ return int(d/( d - t*n))
396
+ elif d < t*n + 1:
397
+ fact = (d-1) / t
398
+ from sage.rings.real_mpfr import RR
399
+ if RR(fact) == RR(int(fact)):
400
+ fact = int(fact) + 1
401
+ return int(d/( d - t * fact)) * q**(n - fact)
402
+
403
+
404
+ def griesmer_upper_bound(n, q, d, algorithm=None):
405
+ r"""
406
+ Return the Griesmer upper bound.
407
+
408
+ Return the Griesmer upper bound for the number of elements in a
409
+ largest linear code of minimum distance `d` in `\GF{q}^n`, cf. [HP2003]_.
410
+ If the method is "gap", it wraps GAP's ``UpperBoundGriesmer``.
411
+
412
+ The bound states:
413
+
414
+ .. MATH::
415
+
416
+ `n\geq \sum_{i=0}^{k-1} \lceil d/q^i \rceil.`
417
+
418
+ EXAMPLES:
419
+
420
+ The bound is reached for the ternary Golay codes::
421
+
422
+ sage: codes.bounds.griesmer_upper_bound(12,3,6) # needs sage.libs.pari
423
+ 729
424
+ sage: codes.bounds.griesmer_upper_bound(11,3,5) # needs sage.libs.pari
425
+ 729
426
+
427
+ ::
428
+
429
+ sage: codes.bounds.griesmer_upper_bound(10,2,3) # needs sage.libs.pari
430
+ 128
431
+ sage: codes.bounds.griesmer_upper_bound(10,2,3,algorithm='gap') # optional - gap_package_guava, needs sage.libs.pari
432
+ 128
433
+
434
+ TESTS::
435
+
436
+ sage: codes.bounds.griesmer_upper_bound(11,3,6) # needs sage.libs.pari
437
+ 243
438
+ sage: codes.bounds.griesmer_upper_bound(11,3,6) # needs sage.libs.pari
439
+ 243
440
+ """
441
+ _check_n_q_d(n, q, d)
442
+ if algorithm == "gap":
443
+ GapPackage("guava", spkg='gap_packages').require()
444
+ libgap.load_package("guava")
445
+ return QQ(libgap.UpperBoundGriesmer(n, d, q))
446
+ else:
447
+ # To compute the bound, we keep summing up the terms on the RHS
448
+ # until we start violating the inequality.
449
+ from sage.arith.misc import integer_ceil as ceil
450
+ den = 1
451
+ s = 0
452
+ k = 0
453
+ while s <= n:
454
+ s += ceil(d/den)
455
+ den *= q
456
+ k = k + 1
457
+ return q**(k-1)
458
+
459
+
460
+ def elias_upper_bound(n, q, d, algorithm=None):
461
+ r"""
462
+ Return the Elias upper bound.
463
+
464
+ Return the Elias upper bound for number of elements in the largest
465
+ code of minimum distance `d` in `\GF{q}^n`, cf. [HP2003]_.
466
+ If ``algorithm="gap"``, it wraps GAP's ``UpperBoundElias``.
467
+
468
+ EXAMPLES::
469
+
470
+ sage: codes.bounds.elias_upper_bound(10,2,3)
471
+ 232
472
+ sage: codes.bounds.elias_upper_bound(10,2,3,algorithm='gap') # optional - gap_package_guava
473
+ 232
474
+ """
475
+ _check_n_q_d(n, q, d, field_based=False)
476
+ r = 1-1/q
477
+ if algorithm == "gap":
478
+ GapPackage("guava", spkg='gap_packages').require()
479
+ libgap.load_package("guava")
480
+ return QQ(libgap.UpperBoundElias(n, d, q))
481
+ else:
482
+ def ff(n, d, w, q):
483
+ return r*n*d*q**n/((w**2-2*r*n*w+r*n*d)*volume_hamming(n,q,w))
484
+
485
+ I = (i for i in range(1, int(r*n) + 1) if i**2 - 2*r*n*i + r*n*d > 0)
486
+ bnd = min([ff(n, d, w, q) for w in I])
487
+ return int(bnd)
488
+
489
+
490
+ def hamming_upper_bound(n, q, d):
491
+ r"""
492
+ Return the Hamming upper bound.
493
+
494
+ Return the Hamming upper bound for number of elements in the
495
+ largest code of length `n` and minimum distance `d` over alphabet
496
+ of size `q`.
497
+
498
+ The Hamming bound (also known as the sphere packing bound) returns
499
+ an upper bound on the size of a code of length `n`, minimum distance
500
+ `d`, over an alphabet of size `q`. The Hamming bound is obtained by
501
+ dividing the contents of the entire Hamming space
502
+ `q^n` by the contents of a ball with radius
503
+ `floor((d-1)/2)`. As all these balls are disjoint, they can never
504
+ contain more than the whole vector space.
505
+
506
+
507
+ .. MATH::
508
+
509
+ M \leq \frac{q^n}{V(n,e)},
510
+
511
+
512
+ where `M` is the maximum number of codewords and `V(n,e)` is
513
+ equal to the contents of a ball of radius `e`. This bound is useful
514
+ for small values of `d`. Codes for which equality holds are called
515
+ perfect. See e.g. [HP2003]_.
516
+
517
+ EXAMPLES::
518
+
519
+ sage: codes.bounds.hamming_upper_bound(10,2,3)
520
+ 93
521
+ """
522
+ _check_n_q_d(n, q, d, field_based=False)
523
+ return int((q**n)/(volume_hamming(n, q, int((d-1)/2))))
524
+
525
+
526
+ def singleton_upper_bound(n, q, d):
527
+ r"""
528
+ Return the Singleton upper bound.
529
+
530
+ Return the Singleton upper bound for number of elements in a
531
+ largest code of minimum distance `d` in `\GF{q}^n`.
532
+
533
+ This bound is based on the shortening of codes. By shortening an
534
+ `(n, M, d)` code `d-1` times, an `(n-d+1,M,1)` code
535
+ results, with `M \leq q^n-d+1`. Thus
536
+
537
+
538
+ .. MATH::
539
+
540
+ M \leq q^{n-d+1}.
541
+
542
+
543
+ Codes that meet this bound are called maximum distance separable
544
+ (MDS).
545
+
546
+ EXAMPLES::
547
+
548
+ sage: codes.bounds.singleton_upper_bound(10,2,3)
549
+ 256
550
+ """
551
+ _check_n_q_d(n, q, d, field_based=False)
552
+ return q**(n - d + 1)
553
+
554
+
555
+ def gv_info_rate(n, delta, q):
556
+ r"""
557
+ The Gilbert-Varshamov lower bound for information rate.
558
+
559
+ The Gilbert-Varshamov lower bound for information rate of a `q`-ary code of
560
+ length `n` and minimum distance `n\delta`.
561
+
562
+ EXAMPLES::
563
+
564
+ sage: RDF(codes.bounds.gv_info_rate(100,1/4,3)) # abs tol 1e-15 # needs sage.libs.pari sage.symbolic
565
+ 0.36704992608261894
566
+ """
567
+ q = ZZ(q)
568
+ return log(gilbert_lower_bound(n,q,int(n*delta)),q)/n
569
+
570
+
571
+ def entropy(x, q=2):
572
+ """
573
+ Compute the entropy at `x` on the `q`-ary symmetric channel.
574
+
575
+ INPUT:
576
+
577
+ - ``x`` -- real number in the interval `[0, 1]`
578
+
579
+ - ``q`` -- (default: 2) integer greater than 1; this is the base of the
580
+ logarithm
581
+
582
+ EXAMPLES::
583
+
584
+ sage: codes.bounds.entropy(0, 2)
585
+ 0
586
+ sage: codes.bounds.entropy(1/5,4).factor() # needs sage.symbolic
587
+ 1/10*(log(3) - 4*log(4/5) - log(1/5))/log(2)
588
+ sage: codes.bounds.entropy(1, 3) # needs sage.symbolic
589
+ log(2)/log(3)
590
+
591
+ Check that values not within the limits are properly handled::
592
+
593
+ sage: codes.bounds.entropy(1.1, 2)
594
+ Traceback (most recent call last):
595
+ ...
596
+ ValueError: The entropy function is defined only for x in the interval [0, 1]
597
+ sage: codes.bounds.entropy(1, 1)
598
+ Traceback (most recent call last):
599
+ ...
600
+ ValueError: The value q must be an integer greater than 1
601
+ """
602
+ if x < 0 or x > 1:
603
+ raise ValueError("The entropy function is defined only for x in the"
604
+ " interval [0, 1]")
605
+ q = ZZ(q) # This will error out if q is not an integer
606
+ if q < 2: # Here we check that q is actually at least 2
607
+ raise ValueError("The value q must be an integer greater than 1")
608
+ if x == 0:
609
+ return 0
610
+ if x == 1:
611
+ return log(q-1,q)
612
+ H = x*log(q-1,q)-x*log(x,q)-(1-x)*log(1-x,q)
613
+ return H
614
+
615
+
616
+ def entropy_inverse(x, q=2):
617
+ """
618
+ Find the inverse of the `q`-ary entropy function at the point ``x``.
619
+
620
+ INPUT:
621
+
622
+ - ``x`` -- real number in the interval `[0, 1]`
623
+
624
+ - ``q`` -- (default: 2) integer greater than 1; this is the base of the
625
+ logarithm
626
+
627
+ OUTPUT:
628
+
629
+ Real number in the interval `[0, 1-1/q]`. The function has multiple
630
+ values if we include the entire interval `[0, 1]`; hence only the
631
+ values in the above interval is returned.
632
+
633
+ EXAMPLES::
634
+
635
+ sage: # needs sage.symbolic
636
+ sage: from sage.coding.code_bounds import entropy_inverse
637
+ sage: entropy_inverse(0.1) # needs scipy
638
+ 0.012986862055...
639
+ sage: entropy_inverse(1)
640
+ 1/2
641
+ sage: entropy_inverse(0, 3)
642
+ 0
643
+ sage: entropy_inverse(1, 3)
644
+ 2/3
645
+ """
646
+ # No nice way to compute the inverse. We resort to root finding.
647
+ if x < 0 or x > 1:
648
+ raise ValueError("The inverse entropy function is defined only for "
649
+ "x in the interval [0, 1]")
650
+ q = ZZ(q) # This will error out if q is not an integer
651
+ if q < 2: # Here we check that q is actually at least 2
652
+ raise ValueError("The value q must be an integer greater than 1")
653
+
654
+ eps = 4.5e-16 # find_root has about this as the default xtol
655
+ ymax = 1 - 1/q
656
+ if x <= eps:
657
+ return 0
658
+ if x >= 1-eps:
659
+ return ymax
660
+
661
+ # find_root will error out if the root can not be found
662
+ from sage.numerical.optimize import find_root
663
+ f = lambda y: entropy(y, q) - x
664
+ return find_root(f, 0, ymax)
665
+
666
+
667
+ def gv_bound_asymp(delta, q):
668
+ """
669
+ The asymptotic Gilbert-Varshamov bound for the information rate, R.
670
+
671
+ EXAMPLES::
672
+
673
+ sage: # needs sage.symbolic
674
+ sage: RDF(codes.bounds.gv_bound_asymp(1/4,2)) # needs sage.libs.pari
675
+ 0.18872187554086...
676
+ sage: f = lambda x: codes.bounds.gv_bound_asymp(x,2)
677
+ sage: plot(f,0,1) # needs sage.libs.pari sage.plot
678
+ Graphics object consisting of 1 graphics primitive
679
+ """
680
+ return 1 - entropy(delta, q)
681
+
682
+
683
+ def hamming_bound_asymp(delta, q):
684
+ """
685
+ The asymptotic Hamming bound for the information rate.
686
+
687
+ EXAMPLES::
688
+
689
+ sage: # needs sage.symbolic
690
+ sage: RDF(codes.bounds.hamming_bound_asymp(1/4,2)) # needs sage.libs.pari
691
+ 0.456435556800...
692
+ sage: f = lambda x: codes.bounds.hamming_bound_asymp(x,2)
693
+ sage: plot(f,0,1) # needs sage.libs.pari sage.plot
694
+ Graphics object consisting of 1 graphics primitive
695
+ """
696
+ return 1 - entropy(delta / 2, q)
697
+
698
+
699
+ def singleton_bound_asymp(delta, q):
700
+ """
701
+ The asymptotic Singleton bound for the information rate.
702
+
703
+ EXAMPLES::
704
+
705
+ sage: codes.bounds.singleton_bound_asymp(1/4,2)
706
+ 3/4
707
+ sage: f = lambda x: codes.bounds.singleton_bound_asymp(x,2)
708
+ sage: plot(f,0,1) # needs sage.plot
709
+ Graphics object consisting of 1 graphics primitive
710
+ """
711
+ return 1 - delta
712
+
713
+
714
+ def plotkin_bound_asymp(delta, q):
715
+ r"""
716
+ The asymptotic Plotkin bound for the information rate.
717
+
718
+ This only makes sense when `0 < \delta < 1-1/q`.
719
+
720
+ EXAMPLES::
721
+
722
+ sage: codes.bounds.plotkin_bound_asymp(1/4,2)
723
+ 1/2
724
+ """
725
+ r = 1 - 1 / q
726
+ return 1 - delta / r
727
+
728
+
729
+ def elias_bound_asymp(delta, q):
730
+ r"""
731
+ The asymptotic Elias bound for the information rate.
732
+
733
+ This only makes sense when `0 < \delta < 1-1/q`.
734
+
735
+ EXAMPLES::
736
+
737
+ sage: codes.bounds.elias_bound_asymp(1/4,2) # needs sage.symbolic
738
+ 0.39912396330...
739
+ """
740
+ r = 1 - 1 / q
741
+ return RDF(1-entropy(r-sqrt(r*(r-delta)), q))
742
+
743
+
744
+ def mrrw1_bound_asymp(delta, q):
745
+ r"""
746
+ The first asymptotic McEliese-Rumsey-Rodemich-Welsh bound.
747
+
748
+ This only makes sense when `0 < \delta < 1-1/q`.
749
+
750
+ EXAMPLES::
751
+
752
+ sage: codes.bounds.mrrw1_bound_asymp(1/4,2) # abs tol 4e-16 # needs sage.symbolic
753
+ 0.3545789026652697
754
+ """
755
+ return RDF(entropy((q-1-delta*(q-2)-2*sqrt((q-1)*delta*(1-delta)))/q,q))