passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_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 (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -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-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,804 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules sage.rings.finite_rings
3
+ r"""
4
+ Linear code constructors that do not preserve the structural information
5
+
6
+ This file contains a variety of constructions which builds the generator matrix
7
+ of special (or random) linear codes and wraps them in a
8
+ :class:`sage.coding.linear_code.LinearCode` object. These constructions are
9
+ therefore not rich objects such as
10
+ :class:`sage.coding.grs_code.GeneralizedReedSolomonCode`.
11
+
12
+ All codes available here can be accessed through the ``codes`` object::
13
+
14
+ sage: codes.random_linear_code(GF(2), 5, 2)
15
+ [5, 2] linear code over GF(2)
16
+
17
+ REFERENCES:
18
+
19
+ - [HP2003]_
20
+
21
+ AUTHORS:
22
+
23
+ - David Joyner (2007-05): initial version
24
+
25
+ - David Joyner (2008-02): added cyclic codes, Hamming codes
26
+
27
+ - David Joyner (2008-03): added BCH code, LinearCodeFromCheckmatrix, ReedSolomonCode, WalshCode,
28
+ DuadicCodeEvenPair, DuadicCodeOddPair, QR codes (even and odd)
29
+
30
+ - David Joyner (2008-09) fix for bug in BCHCode reported by F. Voloch
31
+
32
+ - David Joyner (2008-10) small docstring changes to WalshCode and walsh_matrix
33
+ """
34
+ # ****************************************************************************
35
+ # Copyright (C) 2007 David Joyner <wdjoyner@gmail.com>
36
+ #
37
+ # This program is free software: you can redistribute it and/or modify
38
+ # it under the terms of the GNU General Public License as published by
39
+ # the Free Software Foundation, either version 2 of the License, or
40
+ # (at your option) any later version.
41
+ # https://www.gnu.org/licenses/
42
+ # ****************************************************************************
43
+
44
+ from sage.arith.misc import gcd, quadratic_residues
45
+ from sage.matrix.constructor import matrix
46
+ from sage.matrix.matrix_space import MatrixSpace
47
+ from sage.matrix.special import random_matrix
48
+ from sage.misc.misc_c import prod
49
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
50
+ from sage.rings.finite_rings.integer_mod import Mod
51
+ from sage.rings.finite_rings.integer_mod_ring import IntegerModRing
52
+ from sage.rings.integer import Integer
53
+ from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
54
+ from sage.structure.sequence import Sequence, Sequence_generic
55
+
56
+ from .linear_code import LinearCode
57
+
58
+ ############### utility functions ################
59
+
60
+
61
+ def _is_a_splitting(S1, S2, n, return_automorphism=False):
62
+ r"""
63
+ Check whether ``(S1,S2)`` is a splitting of `\ZZ/n\ZZ`.
64
+
65
+ A splitting of `R = \ZZ/n\ZZ` is a pair of subsets of `R` which is a
66
+ partition of `R \\backslash \{0\}` and such that there exists an element `r`
67
+ of `R` such that `r S_1 = S_2` and `r S_2 = S_1` (where `r S` is the
68
+ point-wise multiplication of the elements of `S` by `r`).
69
+
70
+ Splittings are useful for computing idempotents in the quotient
71
+ ring `Q = GF(q)[x]/(x^n-1)`.
72
+
73
+ INPUT:
74
+
75
+ - ``S1``, ``S2`` -- disjoint sublists partitioning ``[1, 2, ..., n-1]``
76
+
77
+ - ``n`` -- integer
78
+
79
+ - ``return_automorphism`` -- boolean (default: ``False``); whether to
80
+ return the automorphism exchanging `S_1` and `S_2`
81
+
82
+ OUTPUT:
83
+
84
+ If ``return_automorphism is False`` (default) the function returns boolean values.
85
+
86
+ Otherwise, it returns a pair ``(b, r)`` where ``b`` is a boolean indicating
87
+ whether `S1`, `S2` is a splitting of `n`, and `r` is such that `r S_1 = S_2`
88
+ and `r S_2 = S_1` (if `b` is ``False``, `r` is equal to ``None``).
89
+
90
+ EXAMPLES::
91
+
92
+ sage: from sage.coding.code_constructions import _is_a_splitting
93
+ sage: _is_a_splitting([1,2],[3,4],5)
94
+ True
95
+ sage: _is_a_splitting([1,2],[3,4],5,return_automorphism=True)
96
+ (True, 4)
97
+
98
+ sage: _is_a_splitting([1,3],[2,4,5,6],7)
99
+ False
100
+ sage: _is_a_splitting([1,3,4],[2,5,6],7)
101
+ False
102
+
103
+ sage: for P in SetPartitions(6,[3,3]): # needs sage.combinat
104
+ ....: res,aut= _is_a_splitting(P[0],P[1],7,return_automorphism=True)
105
+ ....: if res:
106
+ ....: print((aut, P))
107
+ (3, {{1, 2, 4}, {3, 5, 6}})
108
+ (6, {{1, 2, 3}, {4, 5, 6}})
109
+ (6, {{1, 3, 5}, {2, 4, 6}})
110
+ (6, {{1, 4, 5}, {2, 3, 6}})
111
+
112
+ We illustrate now how to find idempotents in quotient rings::
113
+
114
+ sage: n = 11; q = 3
115
+ sage: C = Zmod(n).cyclotomic_cosets(q); C
116
+ [[0], [1, 3, 4, 5, 9], [2, 6, 7, 8, 10]]
117
+ sage: S1 = C[1]
118
+ sage: S2 = C[2]
119
+ sage: _is_a_splitting(S1,S2,11)
120
+ True
121
+ sage: F = GF(q)
122
+ sage: P.<x> = PolynomialRing(F,"x")
123
+ sage: I = Ideal(P,[x^n-1])
124
+ sage: Q.<x> = QuotientRing(P,I)
125
+ sage: i1 = -sum([x^i for i in S1]); i1
126
+ 2*x^9 + 2*x^5 + 2*x^4 + 2*x^3 + 2*x
127
+ sage: i2 = -sum([x^i for i in S2]); i2
128
+ 2*x^10 + 2*x^8 + 2*x^7 + 2*x^6 + 2*x^2
129
+ sage: i1^2 == i1
130
+ True
131
+ sage: i2^2 == i2
132
+ True
133
+ sage: (1-i1)^2 == 1-i1
134
+ True
135
+ sage: (1-i2)^2 == 1-i2
136
+ True
137
+
138
+ We return to dealing with polynomials (rather than elements of
139
+ quotient rings), so we can construct cyclic codes::
140
+
141
+ sage: P.<x> = PolynomialRing(F,"x")
142
+ sage: i1 = -sum([x^i for i in S1])
143
+ sage: i2 = -sum([x^i for i in S2])
144
+ sage: i1_sqrd = (i1^2).quo_rem(x^n-1)[1]
145
+ sage: i1_sqrd == i1
146
+ True
147
+ sage: i2_sqrd = (i2^2).quo_rem(x^n-1)[1]
148
+ sage: i2_sqrd == i2
149
+ True
150
+ sage: C1 = codes.CyclicCode(length = n, generator_pol = gcd(i1, x^n - 1))
151
+ sage: C2 = codes.CyclicCode(length = n, generator_pol = gcd(1-i2, x^n - 1))
152
+ sage: C1.dual_code().systematic_generator_matrix() == C2.systematic_generator_matrix()
153
+ True
154
+
155
+ This is a special case of Theorem 6.4.3 in [HP2003]_.
156
+ """
157
+ R = IntegerModRing(n)
158
+ S1 = {R(x) for x in S1}
159
+ S2 = {R(x) for x in S2}
160
+
161
+ # we first check whether (S1,S2) is a partition of R - {0}
162
+ if (len(S1) + len(S2) != n-1 or len(S1) != len(S2) or
163
+ R.zero() in S1 or R.zero() in S2 or not S1.isdisjoint(S2)):
164
+ if return_automorphism:
165
+ return False, None
166
+ else:
167
+ return False
168
+
169
+ # now that we know that (S1,S2) is a partition, we look for an invertible
170
+ # element b that maps S1 to S2 by multiplication
171
+ for b in Integer(n).coprime_integers(n):
172
+ if b >= 2 and all(b * x in S2 for x in S1):
173
+ if return_automorphism:
174
+ return True, b
175
+ else:
176
+ return True
177
+ if return_automorphism:
178
+ return False, None
179
+ else:
180
+ return False
181
+
182
+
183
+ def _lift2smallest_field(a):
184
+ """
185
+ INPUT:
186
+
187
+ - ``a`` -- an element of a finite field GF(q)
188
+
189
+ OUTPUT: the element b of the smallest subfield F of GF(q) for
190
+ which F(b)=a.
191
+
192
+ EXAMPLES::
193
+
194
+ sage: from sage.coding.code_constructions import _lift2smallest_field
195
+ sage: FF.<z> = GF(3^4,"z")
196
+ sage: a = z^10
197
+ sage: _lift2smallest_field(a)
198
+ (2*z + 1, Finite Field in z of size 3^2)
199
+ sage: a = z^40
200
+ sage: _lift2smallest_field(a)
201
+ (2, Finite Field of size 3)
202
+
203
+ AUTHORS:
204
+
205
+ - John Cremona
206
+ """
207
+ FF = a.parent()
208
+ k = FF.degree()
209
+ if k == 1:
210
+ return a, FF
211
+ pol = a.minimal_polynomial()
212
+ d = pol.degree()
213
+ if d == k:
214
+ return a, FF
215
+ p = FF.characteristic()
216
+ F = GF((p, d), "z")
217
+ b = pol.roots(F, multiplicities=False)[0]
218
+ return b, F
219
+
220
+
221
+ def permutation_action(g, v):
222
+ r"""
223
+ Return permutation of rows `g * v`.
224
+
225
+ Works on lists, matrices,
226
+ sequences and vectors (by permuting coordinates). The code requires
227
+ switching from `i` to `i+1` (and back again) since the :class:`SymmetricGroup`
228
+ is, by convention, the symmetric group on the "letters" `1`, `2`, ...,
229
+ `n` (not `0`, `1`, ..., `n-1`).
230
+
231
+ EXAMPLES::
232
+
233
+ sage: # needs sage.groups
234
+ sage: V = VectorSpace(GF(3),5)
235
+ sage: v = V([0,1,2,0,1])
236
+ sage: G = SymmetricGroup(5)
237
+ sage: g = G([(1,2,3)])
238
+ sage: permutation_action(g,v)
239
+ (1, 2, 0, 0, 1)
240
+ sage: g = G([()])
241
+ sage: permutation_action(g,v)
242
+ (0, 1, 2, 0, 1)
243
+ sage: g = G([(1,2,3,4,5)])
244
+ sage: permutation_action(g,v)
245
+ (1, 2, 0, 1, 0)
246
+ sage: L = Sequence([1,2,3,4,5])
247
+ sage: permutation_action(g,L)
248
+ [2, 3, 4, 5, 1]
249
+ sage: MS = MatrixSpace(GF(3),3,7)
250
+ sage: A = MS([[1,0,0,0,1,1,0],[0,1,0,1,0,1,0],[0,0,0,0,0,0,1]])
251
+ sage: S5 = SymmetricGroup(5)
252
+ sage: g = S5([(1,2,3)])
253
+ sage: A
254
+ [1 0 0 0 1 1 0]
255
+ [0 1 0 1 0 1 0]
256
+ [0 0 0 0 0 0 1]
257
+ sage: permutation_action(g,A)
258
+ [0 1 0 1 0 1 0]
259
+ [0 0 0 0 0 0 1]
260
+ [1 0 0 0 1 1 0]
261
+
262
+ It also works on lists and is a "left action"::
263
+
264
+ sage: # needs sage.groups
265
+ sage: v = [0,1,2,0,1]
266
+ sage: G = SymmetricGroup(5)
267
+ sage: g = G([(1,2,3)])
268
+ sage: gv = permutation_action(g,v); gv
269
+ [1, 2, 0, 0, 1]
270
+ sage: permutation_action(g,v) == g(v)
271
+ True
272
+ sage: h = G([(3,4)])
273
+ sage: gv = permutation_action(g,v)
274
+ sage: hgv = permutation_action(h,gv)
275
+ sage: hgv == permutation_action(h*g,v)
276
+ True
277
+
278
+ AUTHORS:
279
+
280
+ - David Joyner, licensed under the GPL v2 or greater.
281
+ """
282
+ v_type_list = False
283
+ if isinstance(v, list):
284
+ v_type_list = True
285
+ v = Sequence(v)
286
+ if isinstance(v, Sequence_generic):
287
+ V = v.universe()
288
+ else:
289
+ V = v.parent()
290
+ n = len(list(v))
291
+ gv = [v[g(i + 1) - 1] for i in range(n)]
292
+ if v_type_list:
293
+ return gv
294
+ return V(gv)
295
+
296
+
297
+ def walsh_matrix(m0):
298
+ """
299
+ This is the generator matrix of a Walsh code. The matrix of
300
+ codewords correspond to a Hadamard matrix.
301
+
302
+ EXAMPLES::
303
+
304
+ sage: walsh_matrix(2)
305
+ [0 0 1 1]
306
+ [0 1 0 1]
307
+ sage: walsh_matrix(3)
308
+ [0 0 0 0 1 1 1 1]
309
+ [0 0 1 1 0 0 1 1]
310
+ [0 1 0 1 0 1 0 1]
311
+ sage: C = LinearCode(walsh_matrix(4)); C
312
+ [16, 4] linear code over GF(2)
313
+ sage: C.spectrum()
314
+ [1, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0]
315
+
316
+ This last code has minimum distance 8.
317
+
318
+ REFERENCES:
319
+
320
+ - :wikipedia:`Hadamard_matrix`
321
+ """
322
+ m = int(m0)
323
+ if m == 1:
324
+ return matrix(GF(2), 1, 2, [ 0, 1])
325
+ if m > 1:
326
+ row2 = [x.list() for x in walsh_matrix(m-1).augment(walsh_matrix(m-1)).rows()]
327
+ return matrix(GF(2), m, 2**m, [[0]*2**(m-1) + [1]*2**(m-1)] + row2)
328
+ raise ValueError("%s must be an integer > 0." % m0)
329
+
330
+ ##################### main constructions #####################
331
+
332
+
333
+ def DuadicCodeEvenPair(F, S1, S2):
334
+ r"""
335
+ Construct the "even pair" of duadic codes associated to the
336
+ "splitting" (see the docstring for ``_is_a_splitting``
337
+ for the definition) S1, S2 of n.
338
+
339
+ .. warning::
340
+
341
+ Maybe the splitting should be associated to a sum of
342
+ q-cyclotomic cosets mod n, where q is a *prime*.
343
+
344
+ EXAMPLES::
345
+
346
+ sage: from sage.coding.code_constructions import _is_a_splitting
347
+ sage: n = 11; q = 3
348
+ sage: C = Zmod(n).cyclotomic_cosets(q); C
349
+ [[0], [1, 3, 4, 5, 9], [2, 6, 7, 8, 10]]
350
+ sage: S1 = C[1]
351
+ sage: S2 = C[2]
352
+ sage: _is_a_splitting(S1,S2,11)
353
+ True
354
+ sage: codes.DuadicCodeEvenPair(GF(q),S1,S2)
355
+ ([11, 5] Cyclic Code over GF(3),
356
+ [11, 5] Cyclic Code over GF(3))
357
+ """
358
+ from sage.misc.stopgap import stopgap
359
+ stopgap("The function DuadicCodeEvenPair has several issues which may cause wrong results", 25896)
360
+
361
+ from .cyclic_code import CyclicCode
362
+ n = len(S1) + len(S2) + 1
363
+ if not _is_a_splitting(S1,S2,n):
364
+ raise TypeError("%s, %s must be a splitting of %s." % (S1,S2,n))
365
+ q = F.order()
366
+ k = Mod(q,n).multiplicative_order()
367
+ FF = GF(q**k,"z")
368
+ z = FF.gen()
369
+ zeta = z**((q**k-1)/n)
370
+ P1 = PolynomialRing(FF,"x")
371
+ x = P1.gen()
372
+ g1 = prod([x-zeta**i for i in S1+[0]])
373
+ g2 = prod([x-zeta**i for i in S2+[0]])
374
+ P2 = PolynomialRing(F,"x")
375
+ x = P2.gen()
376
+ gg1 = P2([_lift2smallest_field(c)[0] for c in g1.coefficients(sparse=False)])
377
+ gg2 = P2([_lift2smallest_field(c)[0] for c in g2.coefficients(sparse=False)])
378
+ C1 = CyclicCode(length=n, generator_pol=gg1)
379
+ C2 = CyclicCode(length=n, generator_pol=gg2)
380
+ return C1,C2
381
+
382
+
383
+ def DuadicCodeOddPair(F, S1, S2):
384
+ """
385
+ Construct the "odd pair" of duadic codes associated to the
386
+ "splitting" S1, S2 of n.
387
+
388
+ .. warning::
389
+
390
+ Maybe the splitting should be associated to a sum of
391
+ q-cyclotomic cosets mod n, where q is a *prime*.
392
+
393
+ EXAMPLES::
394
+
395
+ sage: from sage.coding.code_constructions import _is_a_splitting
396
+ sage: n = 11; q = 3
397
+ sage: C = Zmod(n).cyclotomic_cosets(q); C
398
+ [[0], [1, 3, 4, 5, 9], [2, 6, 7, 8, 10]]
399
+ sage: S1 = C[1]
400
+ sage: S2 = C[2]
401
+ sage: _is_a_splitting(S1,S2,11)
402
+ True
403
+ sage: codes.DuadicCodeOddPair(GF(q),S1,S2)
404
+ ([11, 6] Cyclic Code over GF(3),
405
+ [11, 6] Cyclic Code over GF(3))
406
+
407
+ This is consistent with Theorem 6.1.3 in [HP2003]_.
408
+ """
409
+ from sage.misc.stopgap import stopgap
410
+ stopgap("The function DuadicCodeOddPair has several issues which may cause wrong results", 25896)
411
+
412
+ from .cyclic_code import CyclicCode
413
+ n = len(S1) + len(S2) + 1
414
+ if not _is_a_splitting(S1,S2,n):
415
+ raise TypeError("%s, %s must be a splitting of %s." % (S1,S2,n))
416
+ q = F.order()
417
+ k = Mod(q,n).multiplicative_order()
418
+ FF = GF(q**k,"z")
419
+ z = FF.gen()
420
+ zeta = z**((q**k-1)/n)
421
+ P1 = PolynomialRing(FF,"x")
422
+ x = P1.gen()
423
+ g1 = prod([x-zeta**i for i in S1+[0]])
424
+ g2 = prod([x-zeta**i for i in S2+[0]])
425
+ j = sum([x**i/n for i in range(n)])
426
+ P2 = PolynomialRing(F,"x")
427
+ x = P2.gen()
428
+ coeffs1 = [_lift2smallest_field(c)[0] for c in (g1+j).coefficients(sparse=False)]
429
+ coeffs2 = [_lift2smallest_field(c)[0] for c in (g2+j).coefficients(sparse=False)]
430
+ gg1 = P2(coeffs1)
431
+ gg2 = P2(coeffs2)
432
+ gg1 = gcd(gg1, x**n - 1)
433
+ gg2 = gcd(gg2, x**n - 1)
434
+ C1 = CyclicCode(length=n, generator_pol=gg1)
435
+ C2 = CyclicCode(length=n, generator_pol=gg2)
436
+ return C1,C2
437
+
438
+
439
+ def ExtendedQuadraticResidueCode(n, F):
440
+ r"""
441
+ The extended quadratic residue code (or XQR code) is obtained from
442
+ a QR code by adding a check bit to the last coordinate. (These
443
+ codes have very remarkable properties such as large automorphism
444
+ groups and duality properties - see [HP2003]_, Section 6.6.3-6.6.4.)
445
+
446
+ INPUT:
447
+
448
+ - ``n`` -- an odd prime
449
+
450
+ - ``F`` -- a finite prime field whose order must be a
451
+ quadratic residue modulo `n`
452
+
453
+ OUTPUT: an extended quadratic residue code
454
+
455
+ EXAMPLES::
456
+
457
+ sage: C1 = codes.QuadraticResidueCode(7, GF(2))
458
+ sage: C2 = C1.extended_code()
459
+ sage: C3 = codes.ExtendedQuadraticResidueCode(7, GF(2)); C3
460
+ Extension of [7, 4] Cyclic Code over GF(2)
461
+ sage: C2 == C3
462
+ True
463
+ sage: C = codes.ExtendedQuadraticResidueCode(17, GF(2))
464
+ sage: C
465
+ Extension of [17, 9] Cyclic Code over GF(2)
466
+ sage: C3 = codes.QuadraticResidueCodeOddPair(7, GF(2))[0]
467
+ sage: C3x = C3.extended_code()
468
+ sage: C4 = codes.ExtendedQuadraticResidueCode(7, GF(2))
469
+ sage: C3x == C4
470
+ True
471
+
472
+ AUTHORS:
473
+
474
+ - David Joyner (07-2006)
475
+ """
476
+ C = QuadraticResidueCodeOddPair(n,F)[0]
477
+ return C.extended_code()
478
+
479
+
480
+ def from_parity_check_matrix(H):
481
+ r"""
482
+ Return the linear code that has ``H`` as a parity check matrix.
483
+
484
+ If ``H`` has dimensions `h \times n` then the linear code will have
485
+ dimension `n-h` and length `n`.
486
+
487
+ EXAMPLES::
488
+
489
+ sage: C = codes.HammingCode(GF(2), 3); C
490
+ [7, 4] Hamming Code over GF(2)
491
+ sage: H = C.parity_check_matrix(); H
492
+ [1 0 1 0 1 0 1]
493
+ [0 1 1 0 0 1 1]
494
+ [0 0 0 1 1 1 1]
495
+ sage: C2 = codes.from_parity_check_matrix(H); C2
496
+ [7, 4] linear code over GF(2)
497
+ sage: C2.systematic_generator_matrix() == C.systematic_generator_matrix()
498
+ True
499
+ """
500
+ Cd = LinearCode(H)
501
+ return Cd.dual_code()
502
+
503
+
504
+ def QuadraticResidueCode(n, F):
505
+ r"""
506
+ A quadratic residue code (or QR code) is a cyclic code whose
507
+ generator polynomial is the product of the polynomials
508
+ `x-\alpha^i` (`\alpha` is a primitive
509
+ `n`-th root of unity; `i` ranges over the set of
510
+ quadratic residues modulo `n`).
511
+
512
+ See :class:`QuadraticResidueCodeEvenPair` and
513
+ :class:`QuadraticResidueCodeOddPair` for a more general construction.
514
+
515
+ INPUT:
516
+
517
+ - ``n`` -- an odd prime
518
+
519
+ - ``F`` -- a finite prime field whose order must be a
520
+ quadratic residue modulo `n`
521
+
522
+ OUTPUT: a quadratic residue code
523
+
524
+ EXAMPLES::
525
+
526
+ sage: C = codes.QuadraticResidueCode(7, GF(2))
527
+ sage: C
528
+ [7, 4] Cyclic Code over GF(2)
529
+ sage: C = codes.QuadraticResidueCode(17, GF(2))
530
+ sage: C
531
+ [17, 9] Cyclic Code over GF(2)
532
+ sage: C1 = codes.QuadraticResidueCodeOddPair(7, GF(2))[0]
533
+ sage: C2 = codes.QuadraticResidueCode(7, GF(2))
534
+ sage: C1 == C2
535
+ True
536
+ sage: C1 = codes.QuadraticResidueCodeOddPair(17, GF(2))[0]
537
+ sage: C2 = codes.QuadraticResidueCode(17, GF(2))
538
+ sage: C1 == C2
539
+ True
540
+
541
+ AUTHORS:
542
+
543
+ - David Joyner (11-2005)
544
+ """
545
+ return QuadraticResidueCodeOddPair(n,F)[0]
546
+
547
+
548
+ def QuadraticResidueCodeEvenPair(n, F):
549
+ r"""
550
+ Quadratic residue codes of a given odd prime length and base ring
551
+ either don't exist at all or occur as 4-tuples - a pair of
552
+ "odd-like" codes and a pair of "even-like" codes. If `n > 2` is prime
553
+ then (Theorem 6.6.2 in [HP2003]_) a QR code exists over `\GF{q}` iff q is a
554
+ quadratic residue mod `n`.
555
+
556
+ They are constructed as "even-like" duadic codes associated the
557
+ splitting `(Q,N)` mod `n`, where `Q` is the set of nonzero quadratic
558
+ residues and `N` is the non-residues.
559
+
560
+ EXAMPLES::
561
+
562
+ sage: codes.QuadraticResidueCodeEvenPair(17, GF(13)) # known bug (#25896)
563
+ ([17, 8] Cyclic Code over GF(13),
564
+ [17, 8] Cyclic Code over GF(13))
565
+ sage: codes.QuadraticResidueCodeEvenPair(17, GF(2))
566
+ ([17, 8] Cyclic Code over GF(2),
567
+ [17, 8] Cyclic Code over GF(2))
568
+ sage: codes.QuadraticResidueCodeEvenPair(13, GF(9,"z")) # known bug (#25896)
569
+ ([13, 6] Cyclic Code over GF(9),
570
+ [13, 6] Cyclic Code over GF(9))
571
+ sage: C1,C2 = codes.QuadraticResidueCodeEvenPair(7, GF(2))
572
+ sage: C1.is_self_orthogonal()
573
+ True
574
+ sage: C2.is_self_orthogonal()
575
+ True
576
+ sage: C3 = codes.QuadraticResidueCodeOddPair(17, GF(2))[0]
577
+ sage: C4 = codes.QuadraticResidueCodeEvenPair(17, GF(2))[1]
578
+ sage: C3.systematic_generator_matrix() == C4.dual_code().systematic_generator_matrix()
579
+ True
580
+
581
+ This is consistent with Theorem 6.6.9 and Exercise 365 in [HP2003]_.
582
+
583
+ TESTS::
584
+
585
+ sage: codes.QuadraticResidueCodeEvenPair(14,Zmod(4))
586
+ Traceback (most recent call last):
587
+ ...
588
+ ValueError: the argument F must be a finite field
589
+ sage: codes.QuadraticResidueCodeEvenPair(14, GF(2))
590
+ Traceback (most recent call last):
591
+ ...
592
+ ValueError: the argument n must be an odd prime
593
+ sage: codes.QuadraticResidueCodeEvenPair(5, GF(2))
594
+ Traceback (most recent call last):
595
+ ...
596
+ ValueError: the order of the finite field must be a quadratic residue modulo n
597
+ """
598
+ from sage.arith.srange import srange
599
+ from sage.categories.finite_fields import FiniteFields
600
+ if F not in FiniteFields():
601
+ raise ValueError("the argument F must be a finite field")
602
+ q = F.order()
603
+ n = Integer(n)
604
+ if n <= 2 or not n.is_prime():
605
+ raise ValueError("the argument n must be an odd prime")
606
+ Q = quadratic_residues(n)
607
+ Q.remove(0) # nonzero quad residues
608
+ N = [x for x in srange(1, n) if x not in Q] # nonzero quad non-residues
609
+ if q not in Q:
610
+ raise ValueError("the order of the finite field must be a quadratic residue modulo n")
611
+ return DuadicCodeEvenPair(F,Q,N)
612
+
613
+
614
+ def QuadraticResidueCodeOddPair(n, F):
615
+ r"""
616
+ Quadratic residue codes of a given odd prime length and base ring
617
+ either don't exist at all or occur as 4-tuples - a pair of
618
+ "odd-like" codes and a pair of "even-like" codes. If n 2 is prime
619
+ then (Theorem 6.6.2 in [HP2003]_) a QR code exists over `\GF{q} iff `q` is a
620
+ quadratic residue mod `n`.
621
+
622
+ They are constructed as "odd-like" duadic codes associated the
623
+ splitting `(Q,N)` mod `n`, where `Q` is the set of nonzero quadratic
624
+ residues and `N` is the non-residues.
625
+
626
+ EXAMPLES::
627
+
628
+ sage: codes.QuadraticResidueCodeOddPair(17, GF(13)) # known bug (#25896)
629
+ ([17, 9] Cyclic Code over GF(13),
630
+ [17, 9] Cyclic Code over GF(13))
631
+ sage: codes.QuadraticResidueCodeOddPair(17, GF(2))
632
+ ([17, 9] Cyclic Code over GF(2),
633
+ [17, 9] Cyclic Code over GF(2))
634
+ sage: codes.QuadraticResidueCodeOddPair(13, GF(9,"z")) # known bug (#25896)
635
+ ([13, 7] Cyclic Code over GF(9),
636
+ [13, 7] Cyclic Code over GF(9))
637
+ sage: C1 = codes.QuadraticResidueCodeOddPair(17, GF(2))[1]
638
+ sage: C1x = C1.extended_code()
639
+ sage: C2 = codes.QuadraticResidueCodeOddPair(17, GF(2))[0]
640
+ sage: C2x = C2.extended_code()
641
+ sage: C2x.spectrum(); C1x.spectrum()
642
+ [1, 0, 0, 0, 0, 0, 102, 0, 153, 0, 153, 0, 102, 0, 0, 0, 0, 0, 1]
643
+ [1, 0, 0, 0, 0, 0, 102, 0, 153, 0, 153, 0, 102, 0, 0, 0, 0, 0, 1]
644
+ sage: C3 = codes.QuadraticResidueCodeOddPair(7, GF(2))[0]
645
+ sage: C3x = C3.extended_code()
646
+ sage: C3x.spectrum()
647
+ [1, 0, 0, 0, 14, 0, 0, 0, 1]
648
+
649
+ This is consistent with Theorem 6.6.14 in [HP2003]_.
650
+
651
+ TESTS::
652
+
653
+ sage: codes.QuadraticResidueCodeOddPair(9, GF(2))
654
+ Traceback (most recent call last):
655
+ ...
656
+ ValueError: the argument n must be an odd prime
657
+ """
658
+ from sage.arith.srange import srange
659
+ from sage.categories.finite_fields import FiniteFields
660
+ if F not in FiniteFields():
661
+ raise ValueError("the argument F must be a finite field")
662
+ q = F.order()
663
+ n = Integer(n)
664
+ if n <= 2 or not n.is_prime():
665
+ raise ValueError("the argument n must be an odd prime")
666
+ Q = quadratic_residues(n)
667
+ Q.remove(0) # nonzero quad residues
668
+ N = [x for x in srange(1, n) if x not in Q] # nonzero quad non-residues
669
+ if q not in Q:
670
+ raise ValueError("the order of the finite field must be a quadratic residue modulo n")
671
+ return DuadicCodeOddPair(F,Q,N)
672
+
673
+
674
+ def random_linear_code(F, length, dimension):
675
+ r"""
676
+ Generate a random linear code of length ``length``, dimension ``dimension``
677
+ and over the field ``F``.
678
+
679
+ This function is Las Vegas probabilistic: always correct, usually fast.
680
+ Random matrices over the ``F`` are drawn until one with full rank is hit.
681
+
682
+ If ``F`` is infinite, the distribution of the elements in the random
683
+ generator matrix will be random according to the distribution of
684
+ ``F.random_element()``.
685
+
686
+ EXAMPLES::
687
+
688
+ sage: C = codes.random_linear_code(GF(2), 10, 3)
689
+ sage: C
690
+ [10, 3] linear code over GF(2)
691
+ sage: C.generator_matrix().rank()
692
+ 3
693
+ """
694
+ while True:
695
+ G = random_matrix(F, dimension, length)
696
+ if G.rank() == dimension:
697
+ return LinearCode(G)
698
+
699
+
700
+ def ToricCode(P, F):
701
+ r"""
702
+ Let `P` denote a list of lattice points in
703
+ `\ZZ^d` and let `T` denote the set of all
704
+ points in `(F^x)^d` (ordered in some fixed way). Put
705
+ `n=|T|` and let `k` denote the dimension of the
706
+ vector space of functions `V = \mathrm{Span}\{x^e \ |\ e \in P\}`.
707
+ The associated toric code `C` is the evaluation code which
708
+ is the image of the evaluation map
709
+
710
+ .. MATH::
711
+
712
+ \operatorname{eval}_T : V \rightarrow F^n,
713
+
714
+
715
+ where `x^e` is the multi-index notation
716
+ (`x=(x_1,...,x_d)`, `e=(e_1,...,e_d)`, and
717
+ `x^e = x_1^{e_1}...x_d^{e_d}`), where
718
+ `\operatorname{eval}_T (f(x)) = (f(t_1),...,f(t_n))`, and where
719
+ `T=\{t_1,...,t_n\}`. This function returns the toric
720
+ codes discussed in [Joy2004]_.
721
+
722
+ INPUT:
723
+
724
+ - ``P`` -- all the integer lattice points in a polytope
725
+ defining the toric variety
726
+
727
+ - ``F`` -- a finite field
728
+
729
+ OUTPUT: toric code with length `n`, dimension `k` over field `F`
730
+
731
+ EXAMPLES::
732
+
733
+ sage: C = codes.ToricCode([[0,0],[1,0],[2,0],[0,1],[1,1]], GF(7))
734
+ sage: C
735
+ [36, 5] linear code over GF(7)
736
+ sage: C.minimum_distance() # needs sage.groups
737
+ 24
738
+ sage: C.minimum_distance(algorithm='guava') # optional - gap_package_guava
739
+ ...24
740
+ sage: C = codes.ToricCode([[-2,-2],[-1,-2],[-1,-1],[-1,0],
741
+ ....: [0,-1],[0,0],[0,1],[1,-1],[1,0]], GF(5))
742
+ sage: C
743
+ [16, 9] linear code over GF(5)
744
+ sage: C.minimum_distance() # needs sage.groups
745
+ 6
746
+ sage: C.minimum_distance(algorithm='guava') # optional - gap_package_guava
747
+ 6
748
+ sage: C = codes.ToricCode([[0,0],[1,1],[1,2],[1,3],[1,4],[2,1],
749
+ ....: [2,2],[2,3],[3,1],[3,2],[4,1]], GF(8,"a"))
750
+ sage: C
751
+ [49, 11] linear code over GF(8)
752
+
753
+ This is in fact a [49,11,28] code over `\GF{8}`. If you type next
754
+ ``C.minimum_distance()`` and wait overnight (!), you
755
+ should get 28.
756
+
757
+ AUTHOR:
758
+
759
+ - David Joyner (07-2006)
760
+ """
761
+ from sage.combinat.tuple import Tuples
762
+ mset = [x for x in F if x != 0]
763
+ d = len(P[0])
764
+ pts = Tuples(mset, d).list()
765
+ n = len(pts) # (q-1)^d
766
+ k = len(P)
767
+ e = P[0]
768
+ B = []
769
+ for e in P:
770
+ tmpvar = [prod([t[i]**e[i] for i in range(d)]) for t in pts]
771
+ B.append(tmpvar)
772
+ # now B0 *should* be a full rank matrix
773
+ MS = MatrixSpace(F, k, n)
774
+ return LinearCode(MS(B))
775
+
776
+
777
+ def WalshCode(m):
778
+ r"""
779
+ Return the binary Walsh code of length `2^m`.
780
+
781
+ The matrix
782
+ of codewords correspond to a Hadamard matrix. This is a (constant
783
+ rate) binary linear `[2^m,m,2^{m-1}]` code.
784
+
785
+ EXAMPLES::
786
+
787
+ sage: C = codes.WalshCode(4); C
788
+ [16, 4] linear code over GF(2)
789
+ sage: C = codes.WalshCode(3); C
790
+ [8, 3] linear code over GF(2)
791
+ sage: C.spectrum()
792
+ [1, 0, 0, 0, 7, 0, 0, 0, 0]
793
+ sage: C.minimum_distance() # needs sage.libs.gap
794
+ 4
795
+ sage: C.minimum_distance(algorithm='gap') # check d=2^(m-1) # needs sage.libs.gap
796
+ 4
797
+
798
+ REFERENCES:
799
+
800
+ - :wikipedia:`Hadamard_matrix`
801
+
802
+ - :wikipedia:`Walsh_code`
803
+ """
804
+ return LinearCode(walsh_matrix(m), d=2**(m - 1))