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,844 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Discrete Fourier Transforms
4
+
5
+ This file contains functions useful for computing discrete Fourier
6
+ transforms and probability distribution functions for discrete random
7
+ variables for sequences of elements of `\QQ` or `\CC`, indexed by a
8
+ ``range(N)``, `\ZZ / N \ZZ`, an abelian group, the conjugacy classes
9
+ of a permutation group, or the conjugacy classes of a matrix group.
10
+
11
+ This file implements:
12
+
13
+ - :meth:`__eq__`
14
+
15
+ - :meth:`__mul__` (for right multiplication by a scalar)
16
+
17
+ - plotting, printing -- :meth:`IndexedSequence.plot`,
18
+ :meth:`IndexedSequence.plot_histogram`, :meth:`_repr_`, :meth:`__str__`
19
+
20
+ - :meth:`dft` -- computes the discrete Fourier transform for the following cases:
21
+
22
+ * a sequence (over `\QQ` or :class:`CyclotomicField`) indexed by ``range(N)``
23
+ or `\ZZ / N \ZZ`
24
+ * a sequence (as above) indexed by a finite abelian group
25
+ * a sequence (as above) indexed by a complete set of representatives of
26
+ the conjugacy classes of a finite permutation group
27
+ * a sequence (as above) indexed by a complete set of representatives of
28
+ the conjugacy classes of a finite matrix group
29
+
30
+ - :meth:`idft` -- computes the discrete Fourier transform for the following cases:
31
+
32
+ * a sequence (over `\QQ` or CyclotomicField) indexed by ``range(N)`` or
33
+ `\ZZ / N \ZZ`
34
+
35
+ - :meth:`dct`, :meth:`dst` (for discrete Fourier/Cosine/Sine transform)
36
+
37
+ - convolution (in :meth:`IndexedSequence.convolution` and
38
+ :meth:`IndexedSequence.convolution_periodic`)
39
+
40
+ - :meth:`fft`, :meth:`ifft` -- (fast Fourier transforms) wrapping GSL's
41
+ ``gsl_fft_complex_forward()``, ``gsl_fft_complex_inverse()``,
42
+ using William Stein's :func:`FastFourierTransform`
43
+
44
+ - :meth:`dwt`, :meth:`idwt` -- (fast wavelet transforms) wrapping GSL's ``gsl_dwt_forward()``,
45
+ ``gsl_dwt_backward()`` using Joshua Kantor's :func:`WaveletTransform` class.
46
+ Allows for wavelets of type:
47
+
48
+ * "haar"
49
+ * "daubechies"
50
+ * "daubechies_centered"
51
+ * "haar_centered"
52
+ * "bspline"
53
+ * "bspline_centered"
54
+
55
+
56
+ .. TODO::
57
+
58
+ - "filtered" DFTs
59
+ - more idfts
60
+ - more examples for probability, stats, theory of FTs
61
+
62
+ AUTHORS:
63
+
64
+ - David Joyner (2006-10)
65
+
66
+ - William Stein (2006-11) -- fix many bugs
67
+ """
68
+ ##########################################################################
69
+ # Copyright (C) 2006 David Joyner <wdjoyner@gmail.com>
70
+ #
71
+ # Distributed under the terms of the GNU General Public License (GPL):
72
+ #
73
+ # https://www.gnu.org/licenses/
74
+ ##########################################################################
75
+ from sage.functions.trig import sin, cos
76
+ from sage.misc.lazy_import import lazy_import
77
+ from sage.rings.integer import Integer
78
+ from sage.rings.integer_ring import ZZ
79
+ from sage.rings.rational_field import QQ
80
+ from sage.structure.sage_object import SageObject
81
+ from sage.structure.sequence import Sequence
82
+
83
+ lazy_import("sage.calculus.transforms.dwt", "WaveletTransform")
84
+ lazy_import("sage.calculus.transforms.fft", "FastFourierTransform")
85
+ lazy_import("sage.groups.abelian_gps.abelian_group", "AbelianGroup")
86
+ lazy_import("sage.groups.perm_gps.permgroup_element", "PermutationGroupElement")
87
+ lazy_import("sage.plot.all", ["polygon", "line", "text"])
88
+ lazy_import("sage.rings.number_field.number_field", "CyclotomicField")
89
+
90
+
91
+ class IndexedSequence(SageObject):
92
+ """
93
+ An indexed sequence.
94
+
95
+ INPUT:
96
+
97
+ - ``L`` -- list
98
+
99
+ - ``index_object`` -- must be a Sage object with an ``__iter__`` method
100
+ containing the same number of elements as ``self``, which is a
101
+ list of elements taken from a field
102
+ """
103
+ def __init__(self, L, index_object):
104
+ r"""
105
+ Initialize ``self``.
106
+
107
+ EXAMPLES::
108
+
109
+ sage: J = list(range(10))
110
+ sage: A = [1/10 for j in J]
111
+ sage: s = IndexedSequence(A,J)
112
+ sage: s
113
+ Indexed sequence: [1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10]
114
+ indexed by [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
115
+ sage: s.dict()
116
+ {0: 1/10,
117
+ 1: 1/10,
118
+ 2: 1/10,
119
+ 3: 1/10,
120
+ 4: 1/10,
121
+ 5: 1/10,
122
+ 6: 1/10,
123
+ 7: 1/10,
124
+ 8: 1/10,
125
+ 9: 1/10}
126
+ sage: s.list()
127
+ [1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10]
128
+ sage: s.index_object()
129
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
130
+ sage: s.base_ring()
131
+ Rational Field
132
+ """
133
+ try:
134
+ ind = index_object.list()
135
+ except AttributeError:
136
+ ind = list(index_object)
137
+ self._index_object = index_object
138
+ self._list = Sequence(L)
139
+ self._base_ring = self._list.universe()
140
+ dict = {}
141
+ for i in range(len(ind)):
142
+ dict[ind[i]] = L[i]
143
+ self._dict = dict
144
+
145
+ def dict(self):
146
+ """
147
+ Return a python dict of ``self`` where the keys are elements in the
148
+ indexing set.
149
+
150
+ EXAMPLES::
151
+
152
+ sage: J = list(range(10))
153
+ sage: A = [1/10 for j in J]
154
+ sage: s = IndexedSequence(A,J)
155
+ sage: s.dict()
156
+ {0: 1/10, 1: 1/10, 2: 1/10, 3: 1/10, 4: 1/10, 5: 1/10, 6: 1/10, 7: 1/10, 8: 1/10, 9: 1/10}
157
+ """
158
+ return self._dict
159
+
160
+ def list(self):
161
+ """
162
+ Return the list of ``self``.
163
+
164
+ EXAMPLES::
165
+
166
+ sage: J = list(range(10))
167
+ sage: A = [1/10 for j in J]
168
+ sage: s = IndexedSequence(A,J)
169
+ sage: s.list()
170
+ [1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10, 1/10]
171
+ """
172
+ return self._list
173
+
174
+ def base_ring(self):
175
+ r"""
176
+ This just returns the common parent `R` of the `N` list
177
+ elements. In some applications (say, when computing the
178
+ discrete Fourier transform, dft), it is more accurate to think
179
+ of the base_ring as the group ring `\QQ(\zeta_N)[R]`.
180
+
181
+ EXAMPLES::
182
+
183
+ sage: J = list(range(10))
184
+ sage: A = [1/10 for j in J]
185
+ sage: s = IndexedSequence(A,J)
186
+ sage: s.base_ring()
187
+ Rational Field
188
+ """
189
+ return self._base_ring
190
+
191
+ def index_object(self):
192
+ """
193
+ Return the indexing object.
194
+
195
+ EXAMPLES::
196
+
197
+ sage: J = list(range(10))
198
+ sage: A = [1/10 for j in J]
199
+ sage: s = IndexedSequence(A,J)
200
+ sage: s.index_object()
201
+ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
202
+ """
203
+ return self._index_object
204
+
205
+ def _repr_(self):
206
+ """
207
+ Implement print method.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: A = [ZZ(i) for i in range(3)]
212
+ sage: I = list(range(3))
213
+ sage: s = IndexedSequence(A,I)
214
+ sage: s
215
+ Indexed sequence: [0, 1, 2]
216
+ indexed by [0, 1, 2]
217
+ sage: print(s)
218
+ Indexed sequence: [0, 1, 2]
219
+ indexed by [0, 1, 2]
220
+ sage: I = GF(3)
221
+ sage: A = [i^2 for i in I]
222
+ sage: s = IndexedSequence(A,I); s
223
+ Indexed sequence: [0, 1, 1]
224
+ indexed by Finite Field of size 3
225
+ """
226
+ return "Indexed sequence: " + str(self.list()) + "\n indexed by " + str(self.index_object())
227
+
228
+ def plot_histogram(self, clr=(0, 0, 1), eps=0.4):
229
+ r"""
230
+ Plot the histogram plot of the sequence.
231
+
232
+ The sequence is assumed to be real or from a finite field,
233
+ with a real indexing set ``I`` coercible into `\RR`.
234
+
235
+ Options are ``clr``, which is an RGB value, and ``eps``, which
236
+ is the spacing between the bars.
237
+
238
+ EXAMPLES::
239
+
240
+ sage: J = list(range(3))
241
+ sage: A = [ZZ(i^2)+1 for i in J]
242
+ sage: s = IndexedSequence(A,J)
243
+ sage: P = s.plot_histogram() # needs sage.plot
244
+ sage: show(P) # not tested # needs sage.plot
245
+ """
246
+ from sage.rings.real_mpfr import RR
247
+ # elements must be coercible into RR
248
+ I = self.index_object()
249
+ N = len(I)
250
+ S = self.list()
251
+ P = [polygon([[RR(I[i]) - eps, 0],
252
+ [RR(I[i]) - eps, RR(S[i])],
253
+ [RR(I[i]) + eps, RR(S[i])],
254
+ [RR(I[i]) + eps, 0],
255
+ [RR(I[i]), 0]], rgbcolor=clr) for i in range(N)]
256
+ T = [text(str(I[i]), (RR(I[i]), -0.8), fontsize=15, rgbcolor=(1, 0, 0))
257
+ for i in range(N)]
258
+ return sum(P) + sum(T)
259
+
260
+ def plot(self):
261
+ """
262
+ Plot the points of the sequence.
263
+
264
+ Elements of the sequence are assumed to be real or from a
265
+ finite field, with a real indexing set ``I = range(len(self))``.
266
+
267
+ EXAMPLES::
268
+
269
+ sage: I = list(range(3))
270
+ sage: A = [ZZ(i^2)+1 for i in I]
271
+ sage: s = IndexedSequence(A,I)
272
+ sage: P = s.plot() # needs sage.plot
273
+ sage: show(P) # not tested # needs sage.plot
274
+ """
275
+ from sage.rings.real_mpfr import RR
276
+ # elements must be coercible into RR
277
+ I = self.index_object()
278
+ S = self.list()
279
+ return line([[RR(I[i]), RR(S[i])] for i in range(len(I) - 1)])
280
+
281
+ def dft(self, chi=None):
282
+ r"""
283
+ A discrete Fourier transform "over `\QQ`" using exact
284
+ `N`-th roots of unity.
285
+
286
+ EXAMPLES::
287
+
288
+ sage: J = list(range(6))
289
+ sage: A = [ZZ(1) for i in J]
290
+ sage: s = IndexedSequence(A,J)
291
+ sage: s.dft(lambda x: x^2) # needs sage.rings.number_field
292
+ Indexed sequence: [6, 0, 0, 6, 0, 0]
293
+ indexed by [0, 1, 2, 3, 4, 5]
294
+ sage: s.dft() # needs sage.rings.number_field
295
+ Indexed sequence: [6, 0, 0, 0, 0, 0]
296
+ indexed by [0, 1, 2, 3, 4, 5]
297
+
298
+ sage: # needs sage.combinat sage.groups
299
+ sage: G = SymmetricGroup(3)
300
+ sage: J = G.conjugacy_classes_representatives()
301
+ sage: s = IndexedSequence([1,2,3], J) # 1,2,3 are the values of a class fcn on G
302
+ sage: s.dft() # the "scalar-valued Fourier transform" of this class fcn
303
+ Indexed sequence: [8, 2, 2]
304
+ indexed by [(), (1,2), (1,2,3)]
305
+
306
+ sage: # needs sage.rings.number_field
307
+ sage: J = AbelianGroup(2, [2,3], names='ab')
308
+ sage: s = IndexedSequence([1,2,3,4,5,6], J)
309
+ sage: s.dft() # the precision of output is somewhat random and architecture dependent.
310
+ Indexed sequence: [21.0000000000000,
311
+ -2.99999999999997 - 1.73205080756885*I,
312
+ -2.99999999999999 + 1.73205080756888*I,
313
+ -9.00000000000000 + 0.0000000000000485744257349999*I,
314
+ -0.00000000000000976996261670137 - 0.0000000000000159872115546022*I,
315
+ -0.00000000000000621724893790087 - 0.0000000000000106581410364015*I]
316
+ indexed by Multiplicative Abelian group isomorphic to C2 x C3
317
+
318
+ sage: # needs sage.groups sage.rings.number_field
319
+ sage: J = CyclicPermutationGroup(6)
320
+ sage: s = IndexedSequence([1,2,3,4,5,6], J)
321
+ sage: s.dft() # the precision of output is somewhat random and architecture dependent.
322
+ Indexed sequence: [21.0000000000000,
323
+ -2.99999999999997 - 1.73205080756885*I,
324
+ -2.99999999999999 + 1.73205080756888*I,
325
+ -9.00000000000000 + 0.0000000000000485744257349999*I,
326
+ -0.00000000000000976996261670137 - 0.0000000000000159872115546022*I,
327
+ -0.00000000000000621724893790087 - 0.0000000000000106581410364015*I]
328
+ indexed by Cyclic group of order 6 as a permutation group
329
+
330
+ sage: # needs sage.rings.number_field
331
+ sage: p = 7; J = list(range(p)); A = [kronecker_symbol(j,p) for j in J]
332
+ sage: s = IndexedSequence(A, J)
333
+ sage: Fs = s.dft()
334
+ sage: c = Fs.list()[1]; [x/c for x in Fs.list()]; s.list()
335
+ [0, 1, 1, -1, 1, -1, -1]
336
+ [0, 1, 1, -1, 1, -1, -1]
337
+
338
+ The DFT of the values of the quadratic residue symbol is itself, up to
339
+ a constant factor (denoted c on the last line above).
340
+
341
+ .. TODO::
342
+
343
+ Read the parent of the elements of S; if `\QQ` or `\CC` leave as
344
+ is; if AbelianGroup, use abelian_group_dual; if some other
345
+ implemented Group (permutation, matrix), call .characters()
346
+ and test if the index list is the set of conjugacy classes.
347
+ """
348
+ if chi is None:
349
+ chi = lambda x: x
350
+ J = self.index_object() # index set of length N
351
+ N = len(J)
352
+ S = self.list()
353
+ F = self.base_ring() # elements must be coercible into QQ(zeta_N)
354
+ if J[0] not in ZZ:
355
+ G = J[0].parent() # if J is not a range it is a group G
356
+ if J[0] in ZZ and F.base_ring().fraction_field() == QQ:
357
+ # assumes J is range(N)
358
+ zeta = CyclotomicField(N).gen()
359
+ FT = [sum([S[i] * chi(zeta**(i * j)) for i in J]) for j in J]
360
+ elif (J[0] not in ZZ) and G.is_abelian() and F == ZZ or (F.is_field() and F.base_ring() == QQ):
361
+ if isinstance(J[0], PermutationGroupElement):
362
+ # J is a CyclicPermGp
363
+ n = G.order()
364
+ a = list(n.factor())
365
+ invs = [x[0]**x[1] for x in a]
366
+ G = AbelianGroup(len(a), invs)
367
+ # assumes J is AbelianGroup(...)
368
+ Gd = G.dual_group()
369
+ FT = [sum([S[i] * chid(G.list()[i]) for i in range(N)])
370
+ for chid in Gd]
371
+ elif (J[0] not in ZZ) and G.is_finite() and F == ZZ or (F.is_field() and F.base_ring() == QQ):
372
+ # assumes J is the list of conj class representatives of a
373
+ # PermutationGroup(...) or Matrixgroup(...)
374
+ chi = G.character_table()
375
+ FT = [sum([S[i] * chi[i, j] for i in range(N)]) for j in range(N)]
376
+ else:
377
+ raise ValueError(f"list elements must be in QQ(zeta_{N})")
378
+ return IndexedSequence(FT, J)
379
+
380
+ def idft(self):
381
+ r"""
382
+ A discrete inverse Fourier transform. Only works over `\QQ`.
383
+
384
+ EXAMPLES::
385
+
386
+ sage: J = list(range(5))
387
+ sage: A = [ZZ(1) for i in J]
388
+ sage: s = IndexedSequence(A,J)
389
+ sage: fs = s.dft(); fs # needs sage.rings.number_field
390
+ Indexed sequence: [5, 0, 0, 0, 0]
391
+ indexed by [0, 1, 2, 3, 4]
392
+ sage: it = fs.idft(); it # needs sage.rings.number_field
393
+ Indexed sequence: [1, 1, 1, 1, 1]
394
+ indexed by [0, 1, 2, 3, 4]
395
+ sage: it == s # needs sage.rings.number_field
396
+ True
397
+ """
398
+ F = self.base_ring() # elements must be coercible into QQ(zeta_N)
399
+ J = self.index_object() # must be = range(N)
400
+ N = len(J)
401
+ S = self.list()
402
+ zeta = CyclotomicField(N).gen()
403
+ iFT = [sum([S[i] * zeta**(-i * j) for i in J]) for j in J]
404
+ if (J[0] not in ZZ) or F.base_ring().fraction_field() != QQ:
405
+ raise NotImplementedError("Sorry this type of idft is not implemented yet.")
406
+ return IndexedSequence(iFT, J) * (Integer(1) / N)
407
+
408
+ def dct(self):
409
+ """
410
+ A discrete Cosine transform.
411
+
412
+ EXAMPLES::
413
+
414
+ sage: J = list(range(5))
415
+ sage: A = [exp(-2*pi*i*I/5) for i in J] # needs sage.symbolic
416
+ sage: s = IndexedSequence(A, J) # needs sage.symbolic
417
+ sage: s.dct() # needs sage.symbolic
418
+ Indexed sequence: [0, 1/16*(sqrt(5) + I*sqrt(-2*sqrt(5) + 10) + ...
419
+ indexed by [0, 1, 2, 3, 4]
420
+ """
421
+ F = self.base_ring() # elements must be coercible into RR
422
+ try:
423
+ pi = F.pi()
424
+ except AttributeError:
425
+ from sage.symbolic.constants import pi
426
+ pi = F(pi)
427
+
428
+ J = self.index_object() # must be = range(N)
429
+ N = len(J)
430
+ S = self.list()
431
+ PI = 2 * pi / N
432
+ FT = [sum([S[i] * cos(PI * i * j) for i in J]) for j in J]
433
+ return IndexedSequence(FT, J)
434
+
435
+ def dst(self):
436
+ """
437
+ A discrete Sine transform.
438
+
439
+ EXAMPLES::
440
+
441
+ sage: J = list(range(5))
442
+ sage: I = CC.0; pi = CC.pi()
443
+ sage: A = [exp(-2*pi*i*I/5) for i in J]
444
+ sage: s = IndexedSequence(A, J)
445
+
446
+ sage: s.dst() # discrete sine
447
+ Indexed sequence: [0.000000000000000, 1.11022302462516e-16 - 2.50000000000000*I, ...]
448
+ indexed by [0, 1, 2, 3, 4]
449
+ """
450
+ F = self.base_ring() # elements must be coercible into RR
451
+ try:
452
+ pi = F.pi()
453
+ except AttributeError:
454
+ from sage.symbolic.constants import pi
455
+ pi = F(pi)
456
+
457
+ J = self.index_object() # must be = range(N)
458
+ N = len(J)
459
+ S = self.list()
460
+ PI = 2 * F(pi) / N
461
+ FT = [sum([S[i] * sin(PI * i * j) for i in J]) for j in J]
462
+ return IndexedSequence(FT, J)
463
+
464
+ def convolution(self, other):
465
+ r"""
466
+ Convolves two sequences of the same length (automatically expands
467
+ the shortest one by extending it by 0 if they have different lengths).
468
+
469
+ If `\{a_n\}` and `\{b_n\}` are sequences indexed by `(n=0,1,...,N-1)`,
470
+ extended by zero for all `n` in `\ZZ`, then the convolution is
471
+
472
+ .. MATH::
473
+
474
+ c_j = \sum_{i=0}^{N-1} a_i b_{j-i}.
475
+
476
+ INPUT:
477
+
478
+ - ``other`` -- a collection of elements of a ring with
479
+ index set a finite abelian group (under `+`)
480
+
481
+ OUTPUT: the Dirichlet convolution of ``self`` and ``other``
482
+
483
+ EXAMPLES::
484
+
485
+ sage: J = list(range(5))
486
+ sage: A = [ZZ(1) for i in J]
487
+ sage: B = [ZZ(1) for i in J]
488
+ sage: s = IndexedSequence(A,J)
489
+ sage: t = IndexedSequence(B,J)
490
+ sage: s.convolution(t)
491
+ [1, 2, 3, 4, 5, 4, 3, 2, 1]
492
+
493
+ AUTHOR: David Joyner (2006-09)
494
+ """
495
+ S = self.list()
496
+ T = other.list()
497
+ I0 = self.index_object()
498
+ J0 = other.index_object()
499
+ F = self.base_ring()
500
+ E = other.base_ring()
501
+ if F != E:
502
+ raise TypeError("IndexedSequences must have same base ring")
503
+ if I0 != J0:
504
+ raise TypeError("IndexedSequences must have same index set")
505
+ M = len(S)
506
+ N = len(T)
507
+ if M < N: # first, extend by 0 if necessary
508
+ a = [S[i] for i in range(M)] + [F(0) for i in range(2 * N)]
509
+ b = T + [E(0) for i in range(2 * M)]
510
+ if M > N: # python trick - a[-j] is really j from the *right*
511
+ b = [T[i] for i in range(N)] + [E(0) for i in range(2 * M)]
512
+ a = S + [F(0) for i in range(2 * M)]
513
+ if M == N: # so need only extend by 0 to the *right*
514
+ a = S + [F(0) for i in range(2 * M)]
515
+ b = T + [E(0) for i in range(2 * M)]
516
+ N = max(M, N)
517
+ return [sum([a[i] * b[j - i] for i in range(N)])
518
+ for j in range(2 * N - 1)]
519
+
520
+ def convolution_periodic(self, other):
521
+ r"""
522
+ Convolves two collections indexed by a ``range(...)`` of the same
523
+ length (automatically expands the shortest one by extending it
524
+ by 0 if they have different lengths).
525
+
526
+ If `\{a_n\}` and `\{b_n\}` are sequences indexed by `(n=0,1,...,N-1)`,
527
+ extended periodically for all `n` in `\ZZ`, then the convolution is
528
+
529
+ .. MATH::
530
+
531
+ c_j = \sum_{i=0}^{N-1} a_i b_{j-i}.
532
+
533
+ INPUT:
534
+
535
+ - ``other`` -- a sequence of elements of `\CC`, `\RR` or `\GF{q}`
536
+
537
+ OUTPUT: the Dirichlet convolution of ``self`` and ``other``
538
+
539
+ EXAMPLES::
540
+
541
+ sage: I = list(range(5))
542
+ sage: A = [ZZ(1) for i in I]
543
+ sage: B = [ZZ(1) for i in I]
544
+ sage: s = IndexedSequence(A,I)
545
+ sage: t = IndexedSequence(B,I)
546
+ sage: s.convolution_periodic(t)
547
+ [5, 5, 5, 5, 5, 5, 5, 5, 5]
548
+
549
+ AUTHOR: David Joyner (2006-09)
550
+ """
551
+ S = self.list()
552
+ T = other.list()
553
+ I = self.index_object()
554
+ J = other.index_object()
555
+ F = self.base_ring()
556
+ E = other.base_ring()
557
+ if F != E:
558
+ raise TypeError("IndexedSequences must have same parent")
559
+ if I != J:
560
+ raise TypeError("IndexedSequences must have same index set")
561
+ M = len(S)
562
+ N = len(T)
563
+ if M < N: # first, extend by 0 if necessary
564
+ a = [S[i] for i in range(M)] + [F(0) for i in range(N - M)]
565
+ b = other
566
+ if M > N:
567
+ b = [T[i] for i in range(N)] + [E(0) for i in range(M - N)]
568
+ a = self
569
+ if M == N:
570
+ a = S
571
+ b = T
572
+ N = max(M, N)
573
+ return [sum([a[i] * b[(j - i) % N] for i in range(N)])
574
+ for j in range(2 * N - 1)]
575
+
576
+ def __mul__(self, other):
577
+ """
578
+ Implement scalar multiplication (on the right).
579
+
580
+ EXAMPLES::
581
+
582
+ sage: J = list(range(5))
583
+ sage: A = [ZZ(1) for i in J]
584
+ sage: s = IndexedSequence(A,J)
585
+ sage: s.base_ring()
586
+ Integer Ring
587
+ sage: t = s*(1/3); t; t.base_ring()
588
+ Indexed sequence: [1/3, 1/3, 1/3, 1/3, 1/3]
589
+ indexed by [0, 1, 2, 3, 4]
590
+ Rational Field
591
+ """
592
+ S = self.list()
593
+ S1 = [S[i] * other for i in range(len(self.index_object()))]
594
+ return IndexedSequence(S1, self.index_object())
595
+
596
+ def __eq__(self, other):
597
+ """
598
+ Implement boolean equals.
599
+
600
+ EXAMPLES::
601
+
602
+ sage: J = list(range(5))
603
+ sage: A = [ZZ(1) for i in J]
604
+ sage: s = IndexedSequence(A,J)
605
+ sage: t = s*(1/3)
606
+ sage: t*3 == s
607
+ 1
608
+
609
+ .. WARNING::
610
+
611
+ ** elements are considered different if they differ
612
+ by ``10^(-8)``, which is pretty arbitrary -- use with CAUTION!! **
613
+ """
614
+ if type(self) is not type(other):
615
+ return False
616
+ S = self.list()
617
+ T = other.list()
618
+ I = self.index_object()
619
+ J = other.index_object()
620
+ if I != J:
621
+ return False
622
+ for i in I:
623
+ try:
624
+ if abs(S[i] - T[i]) > 10**(-8):
625
+ # tests if they differ as reals -- WHY 10^(-8)???
626
+ return False
627
+ except TypeError:
628
+ pass
629
+ # if F != E: # omitted this test since it
630
+ # return 0 # doesn't take into account coercions -- WHY???
631
+ return True
632
+
633
+ def fft(self):
634
+ """
635
+ Wraps the gsl ``FastFourierTransform.forward()`` in
636
+ :mod:`~sage.calculus.transforms.fft`.
637
+
638
+ If the length is a power of 2 then this automatically uses the
639
+ radix2 method. If the number of sample points in the input is
640
+ a power of 2 then the wrapper for the GSL function
641
+ ``gsl_fft_complex_radix2_forward()`` is automatically called.
642
+ Otherwise, ``gsl_fft_complex_forward()`` is used.
643
+
644
+ EXAMPLES::
645
+
646
+ sage: J = list(range(5))
647
+ sage: A = [RR(1) for i in J]
648
+ sage: s = IndexedSequence(A,J)
649
+ sage: t = s.fft(); t
650
+ Indexed sequence: [5.00000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000]
651
+ indexed by [0, 1, 2, 3, 4]
652
+ """
653
+ from sage.rings.cc import CC
654
+ I = CC.gen()
655
+
656
+ # elements must be coercible into RR
657
+ J = self.index_object() # must be = range(N)
658
+ N = len(J)
659
+ S = self.list()
660
+ a = FastFourierTransform(N)
661
+ for i in range(N):
662
+ a[i] = S[i]
663
+ a.forward_transform()
664
+ return IndexedSequence([a[j][0] + I * a[j][1] for j in J], J)
665
+
666
+ def ifft(self):
667
+ """
668
+ Implement the gsl ``FastFourierTransform.inverse`` in
669
+ :mod:`~sage.calculus.transforms.fft`.
670
+
671
+ If the number of sample points in the input is a power of 2
672
+ then the wrapper for the GSL function
673
+ ``gsl_fft_complex_radix2_inverse()`` is automatically called.
674
+ Otherwise, ``gsl_fft_complex_inverse()`` is used.
675
+
676
+ EXAMPLES::
677
+
678
+ sage: J = list(range(5))
679
+ sage: A = [RR(1) for i in J]
680
+ sage: s = IndexedSequence(A,J)
681
+ sage: t = s.fft(); t
682
+ Indexed sequence: [5.00000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000]
683
+ indexed by [0, 1, 2, 3, 4]
684
+ sage: t.ifft()
685
+ Indexed sequence: [1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000]
686
+ indexed by [0, 1, 2, 3, 4]
687
+ sage: t.ifft() == s
688
+ 1
689
+ """
690
+ from sage.rings.cc import CC
691
+ I = CC.gen()
692
+
693
+ # elements must be coercible into RR
694
+ J = self.index_object() # must be = range(N)
695
+ N = len(J)
696
+ S = self.list()
697
+ a = FastFourierTransform(N)
698
+ for i in range(N):
699
+ a[i] = S[i]
700
+ a.inverse_transform()
701
+ return IndexedSequence([a[j][0] + I * a[j][1] for j in J], J)
702
+
703
+ def dwt(self, other='haar', wavelet_k=2):
704
+ r"""
705
+ Wraps the gsl ``WaveletTransform.forward`` in :mod:`~sage.calculus.transforms.dwt`
706
+ (written by Joshua Kantor). Assumes the length of the sample is a
707
+ power of 2. Uses the GSL function ``gsl_wavelet_transform_forward()``.
708
+
709
+ INPUT:
710
+
711
+ - ``other`` -- the name of the type of wavelet; valid choices are:
712
+
713
+ * ``'daubechies'``
714
+ * ``'daubechies_centered'``
715
+ * ``'haar'`` (default)
716
+ * ``'haar_centered'``
717
+ * ``'bspline'``
718
+ * ``'bspline_centered'``
719
+
720
+ - ``wavelet_k`` -- for daubechies wavelets, ``wavelet_k`` specifies a
721
+ daubechie wavelet with `k/2` vanishing moments;
722
+ `k = 4,6,...,20` for `k` even are the only ones implemented
723
+
724
+ For Haar wavelets, ``wavelet_k`` must be 2.
725
+
726
+ For bspline wavelets, ``wavelet_k`` equal to `103,105,202,204,
727
+ 206,208,301,305,307,309` will give biorthogonal B-spline wavelets
728
+ of order `(i,j)` where ``wavelet_k`` equals `100 \cdot i + j`.
729
+
730
+ The wavelet transform uses `J = \log_2(n)` levels.
731
+
732
+ EXAMPLES::
733
+
734
+ sage: J = list(range(8))
735
+ sage: A = [RR(1) for i in J]
736
+ sage: s = IndexedSequence(A,J)
737
+ sage: t = s.dwt()
738
+ sage: t # slightly random output
739
+ Indexed sequence: [2.82842712474999, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000]
740
+ indexed by [0, 1, 2, 3, 4, 5, 6, 7]
741
+ """
742
+ from sage.rings.real_mpfr import RR
743
+ # elements must be coercible into RR
744
+ J = self.index_object() # must be = range(N)
745
+ N = len(J) # must be 1 minus a power of 2
746
+ S = self.list()
747
+ if other == "haar" or other == "haar_centered":
748
+ if wavelet_k in [2]:
749
+ a = WaveletTransform(N, other, wavelet_k)
750
+ else:
751
+ raise ValueError("wavelet_k must be = 2")
752
+ if other == "daubechies" or other == "daubechies_centered":
753
+ if wavelet_k in [4, 6, 8, 10, 12, 14, 16, 18, 20]:
754
+ a = WaveletTransform(N, other, wavelet_k)
755
+ else:
756
+ raise ValueError("wavelet_k must be in {4,6,8,10,12,14,16,18,20}")
757
+ if other == "bspline" or other == "bspline_centered":
758
+ if wavelet_k in [103, 105, 202, 204, 206, 208, 301, 305, 307, 309]:
759
+ a = WaveletTransform(N, other, 103)
760
+ else:
761
+ raise ValueError("wavelet_k must be in {103,105,202,204,206,208,301,305,307,309}")
762
+ for i in range(N):
763
+ a[i] = S[i]
764
+ a.forward_transform()
765
+ return IndexedSequence([RR(a[j]) for j in J], J)
766
+
767
+ def idwt(self, other='haar', wavelet_k=2):
768
+ r"""
769
+ Implement the gsl ``WaveletTransform.backward()`` in
770
+ :mod:`~sage.calculus.transforms.dwt`.
771
+
772
+ Assumes the length of the sample is a power of 2. Uses the
773
+ GSL function ``gsl_wavelet_transform_backward()``.
774
+
775
+ INPUT:
776
+
777
+ - ``other`` -- must be one of the following:
778
+
779
+ * ``'haar'``
780
+ * ``'daubechies'``
781
+ * ``'daubechies_centered'``
782
+ * ``'haar_centered'``
783
+ * ``'bspline'``
784
+ * ``'bspline_centered'``
785
+
786
+ - ``wavelet_k`` -- for daubechies wavelets, ``wavelet_k`` specifies a
787
+ daubechie wavelet with `k/2` vanishing moments;
788
+ `k = 4,6,...,20` for `k` even are the only ones implemented
789
+
790
+ For Haar wavelets, ``wavelet_k`` must be 2.
791
+
792
+ For bspline wavelets, ``wavelet_k`` equal to `103,105,202,204,
793
+ 206,208,301,305,307,309` will give biorthogonal B-spline wavelets
794
+ of order `(i,j)` where ``wavelet_k`` equals `100 \cdot i + j`.
795
+
796
+ EXAMPLES::
797
+
798
+ sage: J = list(range(8))
799
+ sage: A = [RR(1) for i in J]
800
+ sage: s = IndexedSequence(A,J)
801
+ sage: t = s.dwt()
802
+ sage: t # random arch dependent output
803
+ Indexed sequence: [2.82842712474999, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000]
804
+ indexed by [0, 1, 2, 3, 4, 5, 6, 7]
805
+ sage: t.idwt() # random arch dependent output
806
+ Indexed sequence: [1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000, 1.00000000000000]
807
+ indexed by [0, 1, 2, 3, 4, 5, 6, 7]
808
+ sage: t.idwt() == s
809
+ True
810
+ sage: J = list(range(16))
811
+ sage: A = [RR(1) for i in J]
812
+ sage: s = IndexedSequence(A,J)
813
+ sage: t = s.dwt("bspline", 103)
814
+ sage: t # random arch dependent output
815
+ Indexed sequence: [4.00000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.000000000000000]
816
+ indexed by [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
817
+ sage: t.idwt("bspline", 103) == s
818
+ True
819
+ """
820
+ from sage.rings.real_mpfr import RR
821
+ # elements must be coercible into RR
822
+ J = self.index_object() # must be = range(N)
823
+ N = len(J) # must be 1 minus a power of 2
824
+ S = self.list()
825
+ k = wavelet_k
826
+ if other == "haar" or other == "haar_centered":
827
+ if k in [2]:
828
+ a = WaveletTransform(N, other, wavelet_k)
829
+ else:
830
+ raise ValueError("wavelet_k must be = 2")
831
+ if other == "daubechies" or other == "daubechies_centered":
832
+ if k in [4, 6, 8, 10, 12, 14, 16, 18, 20]:
833
+ a = WaveletTransform(N, other, wavelet_k)
834
+ else:
835
+ raise ValueError("wavelet_k must be in {4,6,8,10,12,14,16,18,20}")
836
+ if other == "bspline" or other == "bspline_centered":
837
+ if k in [103, 105, 202, 204, 206, 208, 301, 305, 307, 309]:
838
+ a = WaveletTransform(N, other, 103)
839
+ else:
840
+ raise ValueError("wavelet_k must be in {103,105,202,204,206,208,301,305,307,309}")
841
+ for i in range(N):
842
+ a[i] = S[i]
843
+ a.backward_transform()
844
+ return IndexedSequence([RR(a[j]) for j in J], J)