passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-modules might be problematic. Click here for more details.

Files changed (806) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +806 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  11. sage/algebras/all__sagemath_modules.py +20 -0
  12. sage/algebras/catalog.py +148 -0
  13. sage/algebras/clifford_algebra.py +3107 -0
  14. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  15. sage/algebras/clifford_algebra_element.pxd +16 -0
  16. sage/algebras/clifford_algebra_element.pyx +997 -0
  17. sage/algebras/commutative_dga.py +4252 -0
  18. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-gnu.so +0 -0
  19. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  20. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  21. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  22. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  28. sage/algebras/finite_gca.py +528 -0
  29. sage/algebras/group_algebra.py +232 -0
  30. sage/algebras/lie_algebras/abelian.py +197 -0
  31. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  32. sage/algebras/lie_algebras/all.py +25 -0
  33. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  34. sage/algebras/lie_algebras/bch.py +177 -0
  35. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  36. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  37. sage/algebras/lie_algebras/center_uea.py +767 -0
  38. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  39. sage/algebras/lie_algebras/examples.py +683 -0
  40. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  41. sage/algebras/lie_algebras/heisenberg.py +820 -0
  42. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  43. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  46. sage/algebras/lie_algebras/morphism.py +661 -0
  47. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  48. sage/algebras/lie_algebras/onsager.py +1324 -0
  49. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  50. sage/algebras/lie_algebras/quotient.py +462 -0
  51. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  52. sage/algebras/lie_algebras/representation.py +1040 -0
  53. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  54. sage/algebras/lie_algebras/subalgebra.py +967 -0
  55. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  56. sage/algebras/lie_algebras/verma_module.py +1630 -0
  57. sage/algebras/lie_algebras/virasoro.py +1186 -0
  58. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-gnu.so +0 -0
  59. sage/algebras/octonion_algebra.pxd +20 -0
  60. sage/algebras/octonion_algebra.pyx +987 -0
  61. sage/algebras/orlik_solomon.py +907 -0
  62. sage/algebras/orlik_terao.py +779 -0
  63. sage/algebras/steenrod/all.py +7 -0
  64. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  65. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  66. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  67. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  68. sage/algebras/weyl_algebra.py +1126 -0
  69. sage/all__sagemath_modules.py +62 -0
  70. sage/calculus/all__sagemath_modules.py +19 -0
  71. sage/calculus/expr.py +205 -0
  72. sage/calculus/integration.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/calculus/integration.pyx +698 -0
  74. sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
  75. sage/calculus/interpolation.pxd +13 -0
  76. sage/calculus/interpolation.pyx +387 -0
  77. sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
  78. sage/calculus/interpolators.pyx +326 -0
  79. sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
  80. sage/calculus/ode.pxd +5 -0
  81. sage/calculus/ode.pyx +610 -0
  82. sage/calculus/riemann.cpython-314-aarch64-linux-gnu.so +0 -0
  83. sage/calculus/riemann.pyx +1521 -0
  84. sage/calculus/test_sympy.py +201 -0
  85. sage/calculus/transforms/all.py +7 -0
  86. sage/calculus/transforms/dft.py +844 -0
  87. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-gnu.so +0 -0
  88. sage/calculus/transforms/dwt.pxd +7 -0
  89. sage/calculus/transforms/dwt.pyx +160 -0
  90. sage/calculus/transforms/fft.cpython-314-aarch64-linux-gnu.so +0 -0
  91. sage/calculus/transforms/fft.pxd +12 -0
  92. sage/calculus/transforms/fft.pyx +487 -0
  93. sage/calculus/wester.py +662 -0
  94. sage/coding/abstract_code.py +1108 -0
  95. sage/coding/ag_code.py +868 -0
  96. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/coding/ag_code_decoders.pyx +2639 -0
  98. sage/coding/all.py +15 -0
  99. sage/coding/bch_code.py +494 -0
  100. sage/coding/binary_code.cpython-314-aarch64-linux-gnu.so +0 -0
  101. sage/coding/binary_code.pxd +124 -0
  102. sage/coding/binary_code.pyx +4139 -0
  103. sage/coding/bounds_catalog.py +43 -0
  104. sage/coding/channel.py +819 -0
  105. sage/coding/channels_catalog.py +29 -0
  106. sage/coding/code_bounds.py +755 -0
  107. sage/coding/code_constructions.py +804 -0
  108. sage/coding/codes_catalog.py +111 -0
  109. sage/coding/cyclic_code.py +1329 -0
  110. sage/coding/databases.py +316 -0
  111. sage/coding/decoder.py +373 -0
  112. sage/coding/decoders_catalog.py +88 -0
  113. sage/coding/delsarte_bounds.py +709 -0
  114. sage/coding/encoder.py +390 -0
  115. sage/coding/encoders_catalog.py +64 -0
  116. sage/coding/extended_code.py +468 -0
  117. sage/coding/gabidulin_code.py +1058 -0
  118. sage/coding/golay_code.py +404 -0
  119. sage/coding/goppa_code.py +441 -0
  120. sage/coding/grs_code.py +2371 -0
  121. sage/coding/guava.py +107 -0
  122. sage/coding/guruswami_sudan/all.py +1 -0
  123. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  124. sage/coding/guruswami_sudan/interpolation.py +409 -0
  125. sage/coding/guruswami_sudan/utils.py +176 -0
  126. sage/coding/hamming_code.py +176 -0
  127. sage/coding/information_set_decoder.py +1032 -0
  128. sage/coding/kasami_codes.cpython-314-aarch64-linux-gnu.so +0 -0
  129. sage/coding/kasami_codes.pyx +351 -0
  130. sage/coding/linear_code.py +3067 -0
  131. sage/coding/linear_code_no_metric.py +1354 -0
  132. sage/coding/linear_rank_metric.py +961 -0
  133. sage/coding/parity_check_code.py +353 -0
  134. sage/coding/punctured_code.py +719 -0
  135. sage/coding/reed_muller_code.py +999 -0
  136. sage/coding/self_dual_codes.py +942 -0
  137. sage/coding/source_coding/all.py +2 -0
  138. sage/coding/source_coding/huffman.py +553 -0
  139. sage/coding/subfield_subcode.py +423 -0
  140. sage/coding/two_weight_db.py +399 -0
  141. sage/combinat/all__sagemath_modules.py +7 -0
  142. sage/combinat/cartesian_product.py +347 -0
  143. sage/combinat/family.py +11 -0
  144. sage/combinat/free_module.py +1977 -0
  145. sage/combinat/root_system/all.py +147 -0
  146. sage/combinat/root_system/ambient_space.py +527 -0
  147. sage/combinat/root_system/associahedron.py +471 -0
  148. sage/combinat/root_system/braid_move_calculator.py +143 -0
  149. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-gnu.so +0 -0
  150. sage/combinat/root_system/braid_orbit.pyx +144 -0
  151. sage/combinat/root_system/branching_rules.py +2301 -0
  152. sage/combinat/root_system/cartan_matrix.py +1245 -0
  153. sage/combinat/root_system/cartan_type.py +3069 -0
  154. sage/combinat/root_system/coxeter_group.py +162 -0
  155. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  156. sage/combinat/root_system/coxeter_type.py +681 -0
  157. sage/combinat/root_system/dynkin_diagram.py +900 -0
  158. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  159. sage/combinat/root_system/fundamental_group.py +795 -0
  160. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  161. sage/combinat/root_system/integrable_representations.py +1227 -0
  162. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  163. sage/combinat/root_system/pieri_factors.py +1147 -0
  164. sage/combinat/root_system/plot.py +1615 -0
  165. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  166. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  167. sage/combinat/root_system/root_space.py +487 -0
  168. sage/combinat/root_system/root_system.py +882 -0
  169. sage/combinat/root_system/type_A.py +348 -0
  170. sage/combinat/root_system/type_A_affine.py +227 -0
  171. sage/combinat/root_system/type_A_infinity.py +241 -0
  172. sage/combinat/root_system/type_B.py +347 -0
  173. sage/combinat/root_system/type_BC_affine.py +287 -0
  174. sage/combinat/root_system/type_B_affine.py +216 -0
  175. sage/combinat/root_system/type_C.py +317 -0
  176. sage/combinat/root_system/type_C_affine.py +188 -0
  177. sage/combinat/root_system/type_D.py +357 -0
  178. sage/combinat/root_system/type_D_affine.py +208 -0
  179. sage/combinat/root_system/type_E.py +641 -0
  180. sage/combinat/root_system/type_E_affine.py +231 -0
  181. sage/combinat/root_system/type_F.py +387 -0
  182. sage/combinat/root_system/type_F_affine.py +137 -0
  183. sage/combinat/root_system/type_G.py +293 -0
  184. sage/combinat/root_system/type_G_affine.py +132 -0
  185. sage/combinat/root_system/type_H.py +105 -0
  186. sage/combinat/root_system/type_I.py +110 -0
  187. sage/combinat/root_system/type_Q.py +150 -0
  188. sage/combinat/root_system/type_affine.py +509 -0
  189. sage/combinat/root_system/type_dual.py +704 -0
  190. sage/combinat/root_system/type_folded.py +301 -0
  191. sage/combinat/root_system/type_marked.py +748 -0
  192. sage/combinat/root_system/type_reducible.py +601 -0
  193. sage/combinat/root_system/type_relabel.py +730 -0
  194. sage/combinat/root_system/type_super_A.py +837 -0
  195. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  196. sage/combinat/root_system/weight_space.py +639 -0
  197. sage/combinat/root_system/weyl_characters.py +2238 -0
  198. sage/crypto/__init__.py +4 -0
  199. sage/crypto/all.py +28 -0
  200. sage/crypto/block_cipher/all.py +7 -0
  201. sage/crypto/block_cipher/des.py +1065 -0
  202. sage/crypto/block_cipher/miniaes.py +2171 -0
  203. sage/crypto/block_cipher/present.py +909 -0
  204. sage/crypto/block_cipher/sdes.py +1527 -0
  205. sage/crypto/boolean_function.cpython-314-aarch64-linux-gnu.so +0 -0
  206. sage/crypto/boolean_function.pxd +10 -0
  207. sage/crypto/boolean_function.pyx +1487 -0
  208. sage/crypto/cipher.py +78 -0
  209. sage/crypto/classical.py +3668 -0
  210. sage/crypto/classical_cipher.py +569 -0
  211. sage/crypto/cryptosystem.py +387 -0
  212. sage/crypto/key_exchange/all.py +7 -0
  213. sage/crypto/key_exchange/catalog.py +24 -0
  214. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  215. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  216. sage/crypto/lattice.py +312 -0
  217. sage/crypto/lfsr.py +295 -0
  218. sage/crypto/lwe.py +840 -0
  219. sage/crypto/mq/__init__.py +4 -0
  220. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  221. sage/crypto/mq/rijndael_gf.py +2345 -0
  222. sage/crypto/mq/sbox.py +7 -0
  223. sage/crypto/mq/sr.py +3344 -0
  224. sage/crypto/public_key/all.py +5 -0
  225. sage/crypto/public_key/blum_goldwasser.py +776 -0
  226. sage/crypto/sbox.cpython-314-aarch64-linux-gnu.so +0 -0
  227. sage/crypto/sbox.pyx +2090 -0
  228. sage/crypto/sboxes.py +2090 -0
  229. sage/crypto/stream.py +390 -0
  230. sage/crypto/stream_cipher.py +297 -0
  231. sage/crypto/util.py +519 -0
  232. sage/ext/all__sagemath_modules.py +1 -0
  233. sage/ext/interpreters/__init__.py +1 -0
  234. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  235. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-gnu.so +0 -0
  236. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  237. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  238. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-gnu.so +0 -0
  239. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  240. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  241. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-gnu.so +0 -0
  242. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  243. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  244. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-gnu.so +0 -0
  245. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  246. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  247. sage/geometry/all__sagemath_modules.py +5 -0
  248. sage/geometry/toric_lattice.py +1745 -0
  249. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-gnu.so +0 -0
  250. sage/geometry/toric_lattice_element.pyx +432 -0
  251. sage/groups/abelian_gps/abelian_group.py +1925 -0
  252. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  253. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  254. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  255. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  256. sage/groups/abelian_gps/element_base.py +341 -0
  257. sage/groups/abelian_gps/values.py +488 -0
  258. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  259. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  260. sage/groups/additive_abelian/all.py +4 -0
  261. sage/groups/additive_abelian/qmodnz.py +231 -0
  262. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  263. sage/groups/affine_gps/affine_group.py +535 -0
  264. sage/groups/affine_gps/all.py +1 -0
  265. sage/groups/affine_gps/catalog.py +17 -0
  266. sage/groups/affine_gps/euclidean_group.py +246 -0
  267. sage/groups/affine_gps/group_element.py +562 -0
  268. sage/groups/all__sagemath_modules.py +12 -0
  269. sage/groups/galois_group.py +479 -0
  270. sage/groups/matrix_gps/all.py +4 -0
  271. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  272. sage/groups/matrix_gps/catalog.py +26 -0
  273. sage/groups/matrix_gps/coxeter_group.py +927 -0
  274. sage/groups/matrix_gps/finitely_generated.py +487 -0
  275. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-gnu.so +0 -0
  276. sage/groups/matrix_gps/group_element.pxd +11 -0
  277. sage/groups/matrix_gps/group_element.pyx +431 -0
  278. sage/groups/matrix_gps/linear.py +440 -0
  279. sage/groups/matrix_gps/matrix_group.py +617 -0
  280. sage/groups/matrix_gps/named_group.py +296 -0
  281. sage/groups/matrix_gps/orthogonal.py +544 -0
  282. sage/groups/matrix_gps/symplectic.py +251 -0
  283. sage/groups/matrix_gps/unitary.py +436 -0
  284. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  285. sage/groups/misc_gps/argument_groups.py +1905 -0
  286. sage/groups/misc_gps/imaginary_groups.py +479 -0
  287. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  288. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-gnu.so +0 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  292. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-gnu.so +0 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  295. sage/homology/algebraic_topological_model.py +595 -0
  296. sage/homology/all.py +2 -0
  297. sage/homology/all__sagemath_modules.py +8 -0
  298. sage/homology/chain_complex.py +2148 -0
  299. sage/homology/chain_complex_homspace.py +165 -0
  300. sage/homology/chain_complex_morphism.py +629 -0
  301. sage/homology/chain_homotopy.py +604 -0
  302. sage/homology/chains.py +653 -0
  303. sage/homology/free_resolution.py +923 -0
  304. sage/homology/graded_resolution.py +567 -0
  305. sage/homology/hochschild_complex.py +756 -0
  306. sage/homology/homology_group.py +188 -0
  307. sage/homology/homology_morphism.py +422 -0
  308. sage/homology/homology_vector_space_with_basis.py +1454 -0
  309. sage/homology/koszul_complex.py +169 -0
  310. sage/homology/matrix_utils.py +205 -0
  311. sage/libs/all__sagemath_modules.py +1 -0
  312. sage/libs/gsl/__init__.py +1 -0
  313. sage/libs/gsl/airy.pxd +56 -0
  314. sage/libs/gsl/all.pxd +66 -0
  315. sage/libs/gsl/array.cpython-314-aarch64-linux-gnu.so +0 -0
  316. sage/libs/gsl/array.pxd +5 -0
  317. sage/libs/gsl/array.pyx +102 -0
  318. sage/libs/gsl/bessel.pxd +208 -0
  319. sage/libs/gsl/blas.pxd +116 -0
  320. sage/libs/gsl/blas_types.pxd +34 -0
  321. sage/libs/gsl/block.pxd +52 -0
  322. sage/libs/gsl/chebyshev.pxd +37 -0
  323. sage/libs/gsl/clausen.pxd +12 -0
  324. sage/libs/gsl/combination.pxd +47 -0
  325. sage/libs/gsl/complex.pxd +151 -0
  326. sage/libs/gsl/coulomb.pxd +30 -0
  327. sage/libs/gsl/coupling.pxd +21 -0
  328. sage/libs/gsl/dawson.pxd +12 -0
  329. sage/libs/gsl/debye.pxd +24 -0
  330. sage/libs/gsl/dilog.pxd +14 -0
  331. sage/libs/gsl/eigen.pxd +46 -0
  332. sage/libs/gsl/elementary.pxd +12 -0
  333. sage/libs/gsl/ellint.pxd +48 -0
  334. sage/libs/gsl/elljac.pxd +8 -0
  335. sage/libs/gsl/erf.pxd +32 -0
  336. sage/libs/gsl/errno.pxd +26 -0
  337. sage/libs/gsl/exp.pxd +44 -0
  338. sage/libs/gsl/expint.pxd +44 -0
  339. sage/libs/gsl/fermi_dirac.pxd +44 -0
  340. sage/libs/gsl/fft.pxd +121 -0
  341. sage/libs/gsl/fit.pxd +50 -0
  342. sage/libs/gsl/gamma.pxd +94 -0
  343. sage/libs/gsl/gegenbauer.pxd +26 -0
  344. sage/libs/gsl/histogram.pxd +176 -0
  345. sage/libs/gsl/hyperg.pxd +52 -0
  346. sage/libs/gsl/integration.pxd +69 -0
  347. sage/libs/gsl/interp.pxd +109 -0
  348. sage/libs/gsl/laguerre.pxd +24 -0
  349. sage/libs/gsl/lambert.pxd +16 -0
  350. sage/libs/gsl/legendre.pxd +90 -0
  351. sage/libs/gsl/linalg.pxd +185 -0
  352. sage/libs/gsl/log.pxd +26 -0
  353. sage/libs/gsl/math.pxd +43 -0
  354. sage/libs/gsl/matrix.pxd +143 -0
  355. sage/libs/gsl/matrix_complex.pxd +130 -0
  356. sage/libs/gsl/min.pxd +67 -0
  357. sage/libs/gsl/monte.pxd +56 -0
  358. sage/libs/gsl/ntuple.pxd +32 -0
  359. sage/libs/gsl/odeiv.pxd +70 -0
  360. sage/libs/gsl/permutation.pxd +78 -0
  361. sage/libs/gsl/poly.pxd +40 -0
  362. sage/libs/gsl/pow_int.pxd +12 -0
  363. sage/libs/gsl/psi.pxd +28 -0
  364. sage/libs/gsl/qrng.pxd +29 -0
  365. sage/libs/gsl/random.pxd +257 -0
  366. sage/libs/gsl/rng.pxd +100 -0
  367. sage/libs/gsl/roots.pxd +72 -0
  368. sage/libs/gsl/sort.pxd +36 -0
  369. sage/libs/gsl/statistics.pxd +59 -0
  370. sage/libs/gsl/sum.pxd +55 -0
  371. sage/libs/gsl/synchrotron.pxd +16 -0
  372. sage/libs/gsl/transport.pxd +24 -0
  373. sage/libs/gsl/trig.pxd +58 -0
  374. sage/libs/gsl/types.pxd +137 -0
  375. sage/libs/gsl/vector.pxd +101 -0
  376. sage/libs/gsl/vector_complex.pxd +83 -0
  377. sage/libs/gsl/wavelet.pxd +49 -0
  378. sage/libs/gsl/zeta.pxd +28 -0
  379. sage/libs/mpc/__init__.pxd +114 -0
  380. sage/libs/mpc/types.pxd +28 -0
  381. sage/libs/mpfr/__init__.pxd +299 -0
  382. sage/libs/mpfr/types.pxd +26 -0
  383. sage/libs/mpmath/__init__.py +1 -0
  384. sage/libs/mpmath/all.py +27 -0
  385. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  386. sage/libs/mpmath/utils.cpython-314-aarch64-linux-gnu.so +0 -0
  387. sage/libs/mpmath/utils.pxd +4 -0
  388. sage/libs/mpmath/utils.pyx +319 -0
  389. sage/matrix/action.cpython-314-aarch64-linux-gnu.so +0 -0
  390. sage/matrix/action.pxd +26 -0
  391. sage/matrix/action.pyx +596 -0
  392. sage/matrix/all.py +9 -0
  393. sage/matrix/args.cpython-314-aarch64-linux-gnu.so +0 -0
  394. sage/matrix/args.pxd +144 -0
  395. sage/matrix/args.pyx +1668 -0
  396. sage/matrix/benchmark.py +1258 -0
  397. sage/matrix/berlekamp_massey.py +95 -0
  398. sage/matrix/compute_J_ideal.py +926 -0
  399. sage/matrix/constructor.cpython-314-aarch64-linux-gnu.so +0 -0
  400. sage/matrix/constructor.pyx +750 -0
  401. sage/matrix/docs.py +430 -0
  402. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  403. sage/matrix/echelon_matrix.pyx +155 -0
  404. sage/matrix/matrix.pxd +2 -0
  405. sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
  406. sage/matrix/matrix0.pxd +68 -0
  407. sage/matrix/matrix0.pyx +6324 -0
  408. sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
  409. sage/matrix/matrix1.pxd +8 -0
  410. sage/matrix/matrix1.pyx +2851 -0
  411. sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
  412. sage/matrix/matrix2.pxd +25 -0
  413. sage/matrix/matrix2.pyx +20181 -0
  414. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.so +0 -0
  415. sage/matrix/matrix_cdv.pxd +4 -0
  416. sage/matrix/matrix_cdv.pyx +93 -0
  417. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  418. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  419. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  420. sage/matrix/matrix_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  421. sage/matrix/matrix_dense.pxd +5 -0
  422. sage/matrix/matrix_dense.pyx +343 -0
  423. sage/matrix/matrix_domain_dense.pxd +5 -0
  424. sage/matrix/matrix_domain_sparse.pxd +5 -0
  425. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  426. sage/matrix/matrix_double_dense.pxd +7 -0
  427. sage/matrix/matrix_double_dense.pyx +3906 -0
  428. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  429. sage/matrix/matrix_double_sparse.pxd +6 -0
  430. sage/matrix/matrix_double_sparse.pyx +248 -0
  431. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  432. sage/matrix/matrix_generic_dense.pxd +7 -0
  433. sage/matrix/matrix_generic_dense.pyx +354 -0
  434. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  435. sage/matrix/matrix_generic_sparse.pxd +7 -0
  436. sage/matrix/matrix_generic_sparse.pyx +461 -0
  437. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  440. sage/matrix/matrix_misc.py +313 -0
  441. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  442. sage/matrix/matrix_numpy_dense.pxd +14 -0
  443. sage/matrix/matrix_numpy_dense.pyx +450 -0
  444. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  445. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  446. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  447. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  448. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  449. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  450. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  451. sage/matrix/matrix_real_double_dense.pxd +7 -0
  452. sage/matrix/matrix_real_double_dense.pyx +122 -0
  453. sage/matrix/matrix_space.py +2848 -0
  454. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  455. sage/matrix/matrix_sparse.pxd +5 -0
  456. sage/matrix/matrix_sparse.pyx +1222 -0
  457. sage/matrix/matrix_window.cpython-314-aarch64-linux-gnu.so +0 -0
  458. sage/matrix/matrix_window.pxd +37 -0
  459. sage/matrix/matrix_window.pyx +242 -0
  460. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  461. sage/matrix/misc_mpfr.pyx +80 -0
  462. sage/matrix/operation_table.py +1182 -0
  463. sage/matrix/special.py +3666 -0
  464. sage/matrix/strassen.cpython-314-aarch64-linux-gnu.so +0 -0
  465. sage/matrix/strassen.pyx +851 -0
  466. sage/matrix/symplectic_basis.py +541 -0
  467. sage/matrix/template.pxd +6 -0
  468. sage/matrix/tests.py +71 -0
  469. sage/matroids/advanced.py +77 -0
  470. sage/matroids/all.py +13 -0
  471. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  472. sage/matroids/basis_exchange_matroid.pxd +96 -0
  473. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  474. sage/matroids/basis_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  475. sage/matroids/basis_matroid.pxd +45 -0
  476. sage/matroids/basis_matroid.pyx +1217 -0
  477. sage/matroids/catalog.py +44 -0
  478. sage/matroids/chow_ring.py +473 -0
  479. sage/matroids/chow_ring_ideal.py +849 -0
  480. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  481. sage/matroids/circuit_closures_matroid.pxd +16 -0
  482. sage/matroids/circuit_closures_matroid.pyx +559 -0
  483. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  484. sage/matroids/circuits_matroid.pxd +38 -0
  485. sage/matroids/circuits_matroid.pyx +947 -0
  486. sage/matroids/constructor.py +1086 -0
  487. sage/matroids/database_collections.py +365 -0
  488. sage/matroids/database_matroids.py +5338 -0
  489. sage/matroids/dual_matroid.py +583 -0
  490. sage/matroids/extension.cpython-314-aarch64-linux-gnu.so +0 -0
  491. sage/matroids/extension.pxd +34 -0
  492. sage/matroids/extension.pyx +519 -0
  493. sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  494. sage/matroids/flats_matroid.pxd +28 -0
  495. sage/matroids/flats_matroid.pyx +715 -0
  496. sage/matroids/gammoid.py +600 -0
  497. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  498. sage/matroids/graphic_matroid.pxd +39 -0
  499. sage/matroids/graphic_matroid.pyx +2024 -0
  500. sage/matroids/lean_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  501. sage/matroids/lean_matrix.pxd +126 -0
  502. sage/matroids/lean_matrix.pyx +3667 -0
  503. sage/matroids/linear_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  504. sage/matroids/linear_matroid.pxd +180 -0
  505. sage/matroids/linear_matroid.pyx +6649 -0
  506. sage/matroids/matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  507. sage/matroids/matroid.pxd +243 -0
  508. sage/matroids/matroid.pyx +8759 -0
  509. sage/matroids/matroids_catalog.py +190 -0
  510. sage/matroids/matroids_plot_helpers.py +890 -0
  511. sage/matroids/minor_matroid.py +480 -0
  512. sage/matroids/minorfix.h +9 -0
  513. sage/matroids/named_matroids.py +5 -0
  514. sage/matroids/rank_matroid.py +268 -0
  515. sage/matroids/set_system.cpython-314-aarch64-linux-gnu.so +0 -0
  516. sage/matroids/set_system.pxd +38 -0
  517. sage/matroids/set_system.pyx +800 -0
  518. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  519. sage/matroids/transversal_matroid.pxd +14 -0
  520. sage/matroids/transversal_matroid.pyx +893 -0
  521. sage/matroids/union_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  522. sage/matroids/union_matroid.pxd +20 -0
  523. sage/matroids/union_matroid.pyx +331 -0
  524. sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.so +0 -0
  525. sage/matroids/unpickling.pyx +843 -0
  526. sage/matroids/utilities.py +809 -0
  527. sage/misc/all__sagemath_modules.py +20 -0
  528. sage/misc/c3.cpython-314-aarch64-linux-gnu.so +0 -0
  529. sage/misc/c3.pyx +238 -0
  530. sage/misc/compat.py +87 -0
  531. sage/misc/element_with_label.py +173 -0
  532. sage/misc/func_persist.py +79 -0
  533. sage/misc/pickle_old.cpython-314-aarch64-linux-gnu.so +0 -0
  534. sage/misc/pickle_old.pyx +19 -0
  535. sage/misc/proof.py +7 -0
  536. sage/misc/replace_dot_all.py +472 -0
  537. sage/misc/sagedoc_conf.py +168 -0
  538. sage/misc/sphinxify.py +167 -0
  539. sage/misc/test_class_pickling.py +85 -0
  540. sage/modules/all.py +42 -0
  541. sage/modules/complex_double_vector.py +25 -0
  542. sage/modules/diamond_cutting.py +380 -0
  543. sage/modules/fg_pid/all.py +1 -0
  544. sage/modules/fg_pid/fgp_element.py +456 -0
  545. sage/modules/fg_pid/fgp_module.py +2091 -0
  546. sage/modules/fg_pid/fgp_morphism.py +550 -0
  547. sage/modules/filtered_vector_space.py +1271 -0
  548. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-gnu.so +0 -0
  549. sage/modules/finite_submodule_iter.pxd +27 -0
  550. sage/modules/finite_submodule_iter.pyx +452 -0
  551. sage/modules/fp_graded/all.py +1 -0
  552. sage/modules/fp_graded/element.py +346 -0
  553. sage/modules/fp_graded/free_element.py +298 -0
  554. sage/modules/fp_graded/free_homspace.py +53 -0
  555. sage/modules/fp_graded/free_module.py +1060 -0
  556. sage/modules/fp_graded/free_morphism.py +217 -0
  557. sage/modules/fp_graded/homspace.py +563 -0
  558. sage/modules/fp_graded/module.py +1340 -0
  559. sage/modules/fp_graded/morphism.py +1990 -0
  560. sage/modules/fp_graded/steenrod/all.py +1 -0
  561. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  562. sage/modules/fp_graded/steenrod/module.py +477 -0
  563. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  564. sage/modules/fp_graded/steenrod/profile.py +241 -0
  565. sage/modules/free_module.py +8447 -0
  566. sage/modules/free_module_element.cpython-314-aarch64-linux-gnu.so +0 -0
  567. sage/modules/free_module_element.pxd +22 -0
  568. sage/modules/free_module_element.pyx +5445 -0
  569. sage/modules/free_module_homspace.py +369 -0
  570. sage/modules/free_module_integer.py +896 -0
  571. sage/modules/free_module_morphism.py +823 -0
  572. sage/modules/free_module_pseudohomspace.py +352 -0
  573. sage/modules/free_module_pseudomorphism.py +578 -0
  574. sage/modules/free_quadratic_module.py +1706 -0
  575. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  576. sage/modules/matrix_morphism.py +1745 -0
  577. sage/modules/misc.py +103 -0
  578. sage/modules/module_functors.py +192 -0
  579. sage/modules/multi_filtered_vector_space.py +719 -0
  580. sage/modules/ore_module.py +2208 -0
  581. sage/modules/ore_module_element.py +178 -0
  582. sage/modules/ore_module_homspace.py +147 -0
  583. sage/modules/ore_module_morphism.py +968 -0
  584. sage/modules/quotient_module.py +699 -0
  585. sage/modules/real_double_vector.py +22 -0
  586. sage/modules/submodule.py +255 -0
  587. sage/modules/tensor_operations.py +567 -0
  588. sage/modules/torsion_quadratic_module.py +1352 -0
  589. sage/modules/tutorial_free_modules.py +248 -0
  590. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  591. sage/modules/vector_complex_double_dense.pxd +6 -0
  592. sage/modules/vector_complex_double_dense.pyx +117 -0
  593. sage/modules/vector_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  594. sage/modules/vector_double_dense.pxd +6 -0
  595. sage/modules/vector_double_dense.pyx +604 -0
  596. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  597. sage/modules/vector_integer_dense.pxd +15 -0
  598. sage/modules/vector_integer_dense.pyx +361 -0
  599. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  600. sage/modules/vector_integer_sparse.pxd +29 -0
  601. sage/modules/vector_integer_sparse.pyx +406 -0
  602. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  603. sage/modules/vector_modn_dense.pxd +12 -0
  604. sage/modules/vector_modn_dense.pyx +394 -0
  605. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  606. sage/modules/vector_modn_sparse.pxd +21 -0
  607. sage/modules/vector_modn_sparse.pyx +298 -0
  608. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  609. sage/modules/vector_numpy_dense.pxd +15 -0
  610. sage/modules/vector_numpy_dense.pyx +304 -0
  611. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  612. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  613. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  614. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  615. sage/modules/vector_rational_dense.pxd +15 -0
  616. sage/modules/vector_rational_dense.pyx +387 -0
  617. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  618. sage/modules/vector_rational_sparse.pxd +30 -0
  619. sage/modules/vector_rational_sparse.pyx +413 -0
  620. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  621. sage/modules/vector_real_double_dense.pxd +6 -0
  622. sage/modules/vector_real_double_dense.pyx +126 -0
  623. sage/modules/vector_space_homspace.py +430 -0
  624. sage/modules/vector_space_morphism.py +989 -0
  625. sage/modules/with_basis/all.py +15 -0
  626. sage/modules/with_basis/cell_module.py +494 -0
  627. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-gnu.so +0 -0
  628. sage/modules/with_basis/indexed_element.pxd +13 -0
  629. sage/modules/with_basis/indexed_element.pyx +1058 -0
  630. sage/modules/with_basis/invariant.py +1075 -0
  631. sage/modules/with_basis/morphism.py +1636 -0
  632. sage/modules/with_basis/representation.py +2939 -0
  633. sage/modules/with_basis/subquotient.py +685 -0
  634. sage/numerical/all__sagemath_modules.py +6 -0
  635. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-gnu.so +0 -0
  636. sage/numerical/gauss_legendre.pyx +381 -0
  637. sage/numerical/optimize.py +910 -0
  638. sage/probability/all.py +10 -0
  639. sage/probability/probability_distribution.cpython-314-aarch64-linux-gnu.so +0 -0
  640. sage/probability/probability_distribution.pyx +1242 -0
  641. sage/probability/random_variable.py +411 -0
  642. sage/quadratic_forms/all.py +4 -0
  643. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  644. sage/quadratic_forms/binary_qf.py +2042 -0
  645. sage/quadratic_forms/bqf_class_group.py +748 -0
  646. sage/quadratic_forms/constructions.py +93 -0
  647. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-gnu.so +0 -0
  648. sage/quadratic_forms/count_local_2.pyx +365 -0
  649. sage/quadratic_forms/extras.py +195 -0
  650. sage/quadratic_forms/quadratic_form.py +1753 -0
  651. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  652. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  653. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-gnu.so +0 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  655. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  656. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  657. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  658. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  659. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  660. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  661. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  662. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  663. sage/quadratic_forms/random_quadraticform.py +209 -0
  664. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-gnu.so +0 -0
  665. sage/quadratic_forms/ternary.pyx +1154 -0
  666. sage/quadratic_forms/ternary_qf.py +2027 -0
  667. sage/rings/all__sagemath_modules.py +28 -0
  668. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  669. sage/rings/asymptotic/misc.py +1252 -0
  670. sage/rings/cc.py +4 -0
  671. sage/rings/cfinite_sequence.py +1306 -0
  672. sage/rings/complex_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  673. sage/rings/complex_conversion.pxd +8 -0
  674. sage/rings/complex_conversion.pyx +23 -0
  675. sage/rings/complex_double.cpython-314-aarch64-linux-gnu.so +0 -0
  676. sage/rings/complex_double.pxd +21 -0
  677. sage/rings/complex_double.pyx +2654 -0
  678. sage/rings/complex_mpc.cpython-314-aarch64-linux-gnu.so +0 -0
  679. sage/rings/complex_mpc.pxd +21 -0
  680. sage/rings/complex_mpc.pyx +2576 -0
  681. sage/rings/complex_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  682. sage/rings/complex_mpfr.pxd +18 -0
  683. sage/rings/complex_mpfr.pyx +3602 -0
  684. sage/rings/derivation.py +2334 -0
  685. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  686. sage/rings/finite_rings/maps_finite_field.py +191 -0
  687. sage/rings/function_field/all__sagemath_modules.py +8 -0
  688. sage/rings/function_field/derivations.py +102 -0
  689. sage/rings/function_field/derivations_rational.py +132 -0
  690. sage/rings/function_field/differential.py +853 -0
  691. sage/rings/function_field/divisor.py +1107 -0
  692. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  693. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  694. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  695. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  696. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  697. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  698. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  699. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  700. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  701. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.so +0 -0
  702. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  703. sage/rings/invariants/all.py +4 -0
  704. sage/rings/invariants/invariant_theory.py +4597 -0
  705. sage/rings/invariants/reconstruction.py +395 -0
  706. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  707. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  708. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-gnu.so +0 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  711. sage/rings/polynomial/ore_function_element.py +952 -0
  712. sage/rings/polynomial/ore_function_field.py +1028 -0
  713. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  714. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  715. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  716. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  717. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  719. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  720. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  721. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  722. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  723. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-gnu.so +0 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  726. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-gnu.so +0 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  729. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  730. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-gnu.so +0 -0
  731. sage/rings/real_double_element_gsl.pxd +8 -0
  732. sage/rings/real_double_element_gsl.pyx +794 -0
  733. sage/rings/real_field.py +58 -0
  734. sage/rings/real_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  735. sage/rings/real_mpfr.pxd +29 -0
  736. sage/rings/real_mpfr.pyx +6122 -0
  737. sage/rings/ring_extension.cpython-314-aarch64-linux-gnu.so +0 -0
  738. sage/rings/ring_extension.pxd +42 -0
  739. sage/rings/ring_extension.pyx +2779 -0
  740. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  741. sage/rings/ring_extension_conversion.pxd +16 -0
  742. sage/rings/ring_extension_conversion.pyx +462 -0
  743. sage/rings/ring_extension_element.cpython-314-aarch64-linux-gnu.so +0 -0
  744. sage/rings/ring_extension_element.pxd +21 -0
  745. sage/rings/ring_extension_element.pyx +1635 -0
  746. sage/rings/ring_extension_homset.py +64 -0
  747. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-gnu.so +0 -0
  748. sage/rings/ring_extension_morphism.pxd +35 -0
  749. sage/rings/ring_extension_morphism.pyx +920 -0
  750. sage/schemes/all__sagemath_modules.py +1 -0
  751. sage/schemes/projective/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/coherent_sheaf.py +300 -0
  753. sage/schemes/projective/cohomology.py +510 -0
  754. sage/stats/all.py +15 -0
  755. sage/stats/basic_stats.py +489 -0
  756. sage/stats/distributions/all.py +7 -0
  757. sage/stats/distributions/catalog.py +34 -0
  758. sage/stats/distributions/dgs.h +50 -0
  759. sage/stats/distributions/dgs.pxd +111 -0
  760. sage/stats/distributions/dgs_bern.h +400 -0
  761. sage/stats/distributions/dgs_gauss.h +614 -0
  762. sage/stats/distributions/dgs_misc.h +104 -0
  763. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-gnu.so +0 -0
  764. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  766. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  767. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  768. sage/stats/hmm/all.py +15 -0
  769. sage/stats/hmm/chmm.cpython-314-aarch64-linux-gnu.so +0 -0
  770. sage/stats/hmm/chmm.pyx +1595 -0
  771. sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.so +0 -0
  772. sage/stats/hmm/distributions.pxd +29 -0
  773. sage/stats/hmm/distributions.pyx +531 -0
  774. sage/stats/hmm/hmm.cpython-314-aarch64-linux-gnu.so +0 -0
  775. sage/stats/hmm/hmm.pxd +17 -0
  776. sage/stats/hmm/hmm.pyx +1388 -0
  777. sage/stats/hmm/util.cpython-314-aarch64-linux-gnu.so +0 -0
  778. sage/stats/hmm/util.pxd +7 -0
  779. sage/stats/hmm/util.pyx +165 -0
  780. sage/stats/intlist.cpython-314-aarch64-linux-gnu.so +0 -0
  781. sage/stats/intlist.pxd +14 -0
  782. sage/stats/intlist.pyx +588 -0
  783. sage/stats/r.py +49 -0
  784. sage/stats/time_series.cpython-314-aarch64-linux-gnu.so +0 -0
  785. sage/stats/time_series.pxd +6 -0
  786. sage/stats/time_series.pyx +2546 -0
  787. sage/tensor/all.py +2 -0
  788. sage/tensor/modules/all.py +8 -0
  789. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  790. sage/tensor/modules/comp.py +5598 -0
  791. sage/tensor/modules/ext_pow_free_module.py +824 -0
  792. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  793. sage/tensor/modules/format_utilities.py +333 -0
  794. sage/tensor/modules/free_module_alt_form.py +858 -0
  795. sage/tensor/modules/free_module_automorphism.py +1207 -0
  796. sage/tensor/modules/free_module_basis.py +1074 -0
  797. sage/tensor/modules/free_module_element.py +284 -0
  798. sage/tensor/modules/free_module_homset.py +652 -0
  799. sage/tensor/modules/free_module_linear_group.py +564 -0
  800. sage/tensor/modules/free_module_morphism.py +1581 -0
  801. sage/tensor/modules/free_module_tensor.py +3289 -0
  802. sage/tensor/modules/reflexive_module.py +386 -0
  803. sage/tensor/modules/tensor_free_module.py +780 -0
  804. sage/tensor/modules/tensor_free_submodule.py +538 -0
  805. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  806. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1258 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.flint
3
+ """
4
+ Benchmarks for matrices
5
+
6
+ This file has many functions for computing timing benchmarks
7
+ of various methods for random matrices with given bounds for
8
+ the entries. The systems supported are Sage and Magma.
9
+
10
+ The basic command syntax is as follows::
11
+
12
+ sage: import sage.matrix.benchmark as b
13
+ sage: print("starting"); import sys; sys.stdout.flush(); b.report([b.det_ZZ], 'Test', systems=['sage'])
14
+ starting...
15
+ ======================================================================
16
+ Test
17
+ ======================================================================
18
+ ...
19
+ ======================================================================
20
+ """
21
+
22
+ import sys
23
+
24
+ from sage.matrix.constructor import Matrix, random_matrix
25
+ from sage.misc.lazy_import import lazy_import
26
+ from sage.misc.timing import cputime
27
+ from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
28
+ from sage.rings.integer_ring import ZZ
29
+ from sage.rings.rational_field import QQ
30
+
31
+ if sys.platform != 'win32':
32
+ from cysignals.alarm import AlarmInterrupt, alarm, cancel_alarm
33
+
34
+ lazy_import('sage.interfaces.magma', 'magma')
35
+
36
+ verbose = False
37
+
38
+ timeout = 60
39
+
40
+
41
+ def report(F, title, systems=['sage', 'magma'], **kwds):
42
+ """
43
+ Run benchmarks with default arguments for each function in the list F.
44
+
45
+ INPUT:
46
+
47
+ - ``F`` -- list of callables used for benchmarking
48
+ - ``title`` -- string describing this report
49
+ - ``systems`` -- list of systems (supported entries are 'sage' and 'magma')
50
+ - ``**kwds`` -- keyword arguments passed to all functions in ``F``
51
+
52
+ EXAMPLES::
53
+
54
+ sage: import sage.matrix.benchmark as b
55
+ sage: print("starting"); import sys; sys.stdout.flush(); b.report([b.det_ZZ], 'Test', systems=['sage'])
56
+ starting...
57
+ ======================================================================
58
+ Test
59
+ ======================================================================
60
+ ...
61
+ ======================================================================
62
+ """
63
+ import os
64
+ if len(systems) > 2:
65
+ raise NotImplementedError("at most two systems ('sage' or 'magma')")
66
+ print('=' * 70)
67
+ print(' ' * 10 + title)
68
+ print('=' * 70)
69
+ os.system('uname -a')
70
+ print('\n')
71
+ for f in F:
72
+ print("-"*70)
73
+ print(f.__doc__.strip())
74
+ print(('%15s' * len(systems)) % tuple(systems))
75
+ w = []
76
+ for s in systems:
77
+ alarm(timeout)
78
+ try:
79
+ t = f(system=s, **kwds)
80
+ except AlarmInterrupt:
81
+ t = -timeout
82
+ cancel_alarm()
83
+ w.append(float(t))
84
+ if len(w) > 1:
85
+ if w[1] == 0:
86
+ w.append(0.0)
87
+ else:
88
+ w.append(w[0]/w[1])
89
+
90
+ w = tuple(w)
91
+ print(('%15.3f'*len(w)) % w)
92
+ print('=' * 70)
93
+
94
+
95
+ #######################################################################
96
+ # Dense Benchmarks over ZZ
97
+ #######################################################################
98
+
99
+ def report_ZZ(**kwds):
100
+ """
101
+ Reports all the benchmarks for integer matrices and few
102
+ rational matrices.
103
+
104
+ INPUT:
105
+
106
+ - ``**kwds`` -- passed through to :func:`report`
107
+
108
+ EXAMPLES::
109
+
110
+ sage: import sage.matrix.benchmark as b
111
+ sage: print("starting"); import sys; sys.stdout.flush(); b.report_ZZ(systems=['sage']) # long time (15s on sage.math, 2012)
112
+ starting...
113
+ ======================================================================
114
+ Dense benchmarks over ZZ
115
+ ======================================================================
116
+ ...
117
+ ======================================================================
118
+ """
119
+ F = [vecmat_ZZ, rank_ZZ, rank2_ZZ, charpoly_ZZ, smithform_ZZ,
120
+ det_ZZ, det_QQ, matrix_multiply_ZZ, matrix_add_ZZ,
121
+ matrix_add_ZZ_2,
122
+ nullspace_ZZ]
123
+
124
+ title = 'Dense benchmarks over ZZ'
125
+ report(F, title, **kwds)
126
+
127
+ # Integer Nullspace
128
+
129
+
130
+ def nullspace_ZZ(n=200, min=0, max=2**32, system='sage'):
131
+ """
132
+ Nullspace over ZZ:
133
+ Given a n+1 x n matrix over ZZ with random entries
134
+ between min and max, compute the nullspace.
135
+
136
+ INPUT:
137
+
138
+ - ``n`` -- matrix dimension (default: ``200``)
139
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
140
+ - ``max`` -- maximal value for entries of matrix (default: ``2**32``)
141
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
142
+
143
+ EXAMPLES::
144
+
145
+ sage: import sage.matrix.benchmark as b
146
+ sage: ts = b.nullspace_ZZ(200)
147
+ sage: tm = b.nullspace_ZZ(200, system='magma') # optional - magma
148
+ """
149
+ if system == 'sage':
150
+ A = random_matrix(ZZ, n+1, n, x=min, y=max+1).change_ring(QQ)
151
+ t = cputime()
152
+ v = A.kernel()
153
+ return cputime(t)
154
+ elif system == 'magma':
155
+ code = """
156
+ n := %s;
157
+ A := RMatrixSpace(RationalField(), n+1,n)![Random(%s,%s) : i in [1..n*(n+1)]];
158
+ t := Cputime();
159
+ K := Kernel(A);
160
+ s := Cputime(t);
161
+ """ % (n,min,max)
162
+ if verbose:
163
+ print(code)
164
+ magma.eval(code)
165
+ return float(magma.eval('s'))
166
+ else:
167
+ raise ValueError('unknown system "%s"' % system)
168
+
169
+
170
+ def charpoly_ZZ(n=100, min=0, max=9, system='sage'):
171
+ """
172
+ Characteristic polynomial over ZZ:
173
+ Given a n x n matrix over ZZ with random entries between min and
174
+ max, compute the charpoly.
175
+
176
+ INPUT:
177
+
178
+ - ``n`` -- matrix dimension (default: ``100``)
179
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
180
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
181
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
182
+
183
+ EXAMPLES::
184
+
185
+ sage: import sage.matrix.benchmark as b
186
+ sage: ts = b.charpoly_ZZ(100)
187
+ sage: tm = b.charpoly_ZZ(100, system='magma') # optional - magma
188
+ """
189
+ if system == 'sage':
190
+ A = random_matrix(ZZ, n, n, x=min, y=max+1)
191
+ t = cputime()
192
+ v = A.charpoly()
193
+ return cputime(t)
194
+ elif system == 'magma':
195
+ code = """
196
+ n := %s;
197
+ A := MatrixAlgebra(IntegerRing(), n)![Random(%s,%s) : i in [1..n^2]];
198
+ t := Cputime();
199
+ K := CharacteristicPolynomial(A);
200
+ s := Cputime(t);
201
+ """ % (n,min,max)
202
+ if verbose:
203
+ print(code)
204
+ magma.eval(code)
205
+ return float(magma.eval('s'))
206
+ else:
207
+ raise ValueError('unknown system "%s"' % system)
208
+
209
+
210
+ def rank_ZZ(n=700, min=0, max=9, system='sage'):
211
+ """
212
+ Rank over ZZ:
213
+ Given a n x (n+10) matrix over ZZ with random entries
214
+ between min and max, compute the rank.
215
+
216
+ INPUT:
217
+
218
+ - ``n`` -- matrix dimension (default: ``700``)
219
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
220
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
221
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
222
+
223
+ EXAMPLES::
224
+
225
+ sage: import sage.matrix.benchmark as b
226
+ sage: ts = b.rank_ZZ(300)
227
+ sage: tm = b.rank_ZZ(300, system='magma') # optional - magma
228
+ """
229
+ if system == 'sage':
230
+ A = random_matrix(ZZ, n, n+10, x=min, y=max+1)
231
+ t = cputime()
232
+ v = A.rank()
233
+ return cputime(t)
234
+ elif system == 'magma':
235
+ code = """
236
+ n := %s;
237
+ A := RMatrixSpace(IntegerRing(), n, n+10)![Random(%s,%s) : i in [1..n*(n+10)]];
238
+ t := Cputime();
239
+ K := Rank(A);
240
+ s := Cputime(t);
241
+ """ % (n,min,max)
242
+ if verbose:
243
+ print(code)
244
+ magma.eval(code)
245
+ return float(magma.eval('s'))
246
+ else:
247
+ raise ValueError('unknown system "%s"' % system)
248
+
249
+
250
+ def rank2_ZZ(n=400, min=0, max=2**64, system='sage'):
251
+ """
252
+ Rank 2 over ZZ:
253
+ Given a (n + 10) x n matrix over ZZ with random entries
254
+ between min and max, compute the rank.
255
+
256
+ INPUT:
257
+
258
+ - ``n`` -- matrix dimension (default: ``400``)
259
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
260
+ - ``max`` -- maximal value for entries of matrix (default: ``2**64``)
261
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
262
+
263
+ EXAMPLES::
264
+
265
+ sage: import sage.matrix.benchmark as b
266
+ sage: ts = b.rank2_ZZ(300)
267
+ sage: tm = b.rank2_ZZ(300, system='magma') # optional - magma
268
+ """
269
+ if system == 'sage':
270
+ A = random_matrix(ZZ, n+10, n, x=min, y=max+1)
271
+ t = cputime()
272
+ v = A.rank()
273
+ return cputime(t)
274
+ elif system == 'magma':
275
+ code = """
276
+ n := %s;
277
+ A := RMatrixSpace(IntegerRing(), n+10, n)![Random(%s,%s) : i in [1..n*(n+10)]];
278
+ t := Cputime();
279
+ K := Rank(A);
280
+ s := Cputime(t);
281
+ """ % (n,min,max)
282
+ if verbose:
283
+ print(code)
284
+ magma.eval(code)
285
+ return float(magma.eval('s'))
286
+ else:
287
+ raise ValueError('unknown system "%s"' % system)
288
+
289
+ # Smith Form
290
+
291
+
292
+ def smithform_ZZ(n=128, min=0, max=9, system='sage'):
293
+ """
294
+ Smith Form over ZZ:
295
+ Given a n x n matrix over ZZ with random entries
296
+ between min and max, compute the Smith normal form.
297
+
298
+ INPUT:
299
+
300
+ - ``n`` -- matrix dimension (default: ``128``)
301
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
302
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
303
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
304
+
305
+ EXAMPLES::
306
+
307
+ sage: import sage.matrix.benchmark as b
308
+ sage: ts = b.smithform_ZZ(100)
309
+ sage: tm = b.smithform_ZZ(100, system='magma') # optional - magma
310
+ """
311
+ if system == 'sage':
312
+ A = random_matrix(ZZ, n, n, x=min, y=max+1)
313
+ t = cputime()
314
+ v = A.elementary_divisors()
315
+ return cputime(t)
316
+ elif system == 'magma':
317
+ code = """
318
+ n := %s;
319
+ A := MatrixAlgebra(IntegerRing(), n)![Random(%s,%s) : i in [1..n^2]];
320
+ t := Cputime();
321
+ K := ElementaryDivisors(A);
322
+ s := Cputime(t);
323
+ """ % (n,min,max)
324
+ if verbose:
325
+ print(code)
326
+ magma.eval(code)
327
+ return float(magma.eval('s'))
328
+ else:
329
+ raise ValueError('unknown system "%s"' % system)
330
+
331
+
332
+ def matrix_multiply_ZZ(n=300, min=-9, max=9, system='sage', times=1):
333
+ """
334
+ Matrix multiplication over ZZ
335
+ Given an n x n matrix A over ZZ with random entries
336
+ between min and max, inclusive, compute A * (A+1).
337
+
338
+ INPUT:
339
+
340
+ - ``n`` -- matrix dimension (default: ``300``)
341
+ - ``min`` -- minimal value for entries of matrix (default: ``-9``)
342
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
343
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
344
+ - ``times`` -- number of experiments (default: ``1``)
345
+
346
+ EXAMPLES::
347
+
348
+ sage: import sage.matrix.benchmark as b
349
+ sage: ts = b.matrix_multiply_ZZ(200)
350
+ sage: tm = b.matrix_multiply_ZZ(200, system='magma') # optional - magma
351
+ """
352
+ if system == 'sage':
353
+ A = random_matrix(ZZ, n, n, x=min, y=max+1)
354
+ B = A + 1
355
+ t = cputime()
356
+ for z in range(times):
357
+ v = A * B
358
+ return cputime(t)/times
359
+ elif system == 'magma':
360
+ code = """
361
+ n := %s;
362
+ A := MatrixAlgebra(IntegerRing(), n)![Random(%s,%s) : i in [1..n^2]];
363
+ B := A + 1;
364
+ t := Cputime();
365
+ for z in [1..%s] do
366
+ K := A * B;
367
+ end for;
368
+ s := Cputime(t);
369
+ """ % (n,min,max,times)
370
+ if verbose:
371
+ print(code)
372
+ magma.eval(code)
373
+ return float(magma.eval('s'))/times
374
+ else:
375
+ raise ValueError('unknown system "%s"' % system)
376
+
377
+
378
+ def matrix_add_ZZ(n=200, min=-9, max=9, system='sage', times=50):
379
+ """
380
+ Matrix addition over ZZ
381
+ Given an n x n matrix A and B over ZZ with random entries between
382
+ ``min`` and ``max``, inclusive, compute A + B ``times`` times.
383
+
384
+ INPUT:
385
+
386
+ - ``n`` -- matrix dimension (default: ``200``)
387
+ - ``min`` -- minimal value for entries of matrix (default: ``-9``)
388
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
389
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
390
+ - ``times`` -- number of experiments (default: ``50``)
391
+
392
+ EXAMPLES::
393
+
394
+ sage: import sage.matrix.benchmark as b
395
+ sage: ts = b.matrix_add_ZZ(200)
396
+ sage: tm = b.matrix_add_ZZ(200, system='magma') # optional - magma
397
+ """
398
+ if system == 'sage':
399
+ A = random_matrix(ZZ, n, n, x=min, y=max+1)
400
+ B = random_matrix(ZZ, n, n, x=min, y=max+1)
401
+ t = cputime()
402
+ for z in range(times):
403
+ v = A + B
404
+ return cputime(t)/times
405
+ elif system == 'magma':
406
+ code = """
407
+ n := %s;
408
+ min := %s;
409
+ max := %s;
410
+ A := MatrixAlgebra(IntegerRing(), n)![Random(min,max) : i in [1..n^2]];
411
+ B := MatrixAlgebra(IntegerRing(), n)![Random(min,max) : i in [1..n^2]];
412
+ t := Cputime();
413
+ for z in [1..%s] do
414
+ K := A + B;
415
+ end for;
416
+ s := Cputime(t);
417
+ """ % (n,min,max,times)
418
+ if verbose:
419
+ print(code)
420
+ magma.eval(code)
421
+ return float(magma.eval('s'))/times
422
+ else:
423
+ raise ValueError('unknown system "%s"' % system)
424
+
425
+
426
+ def matrix_add_ZZ_2(n=200, bits=16, system='sage', times=50):
427
+ """
428
+ Matrix addition over ZZ.
429
+ Given an n x n matrix A and B over ZZ with random ``bits``-bit
430
+ entries, compute A + B.
431
+
432
+ INPUT:
433
+
434
+ - ``n`` -- matrix dimension (default: ``200``)
435
+ - ``bits`` -- bitsize of entries
436
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
437
+ - ``times`` -- number of experiments (default: ``50``)
438
+
439
+ EXAMPLES::
440
+
441
+ sage: import sage.matrix.benchmark as b
442
+ sage: ts = b.matrix_add_ZZ_2(200)
443
+ sage: tm = b.matrix_add_ZZ_2(200, system='magma') # optional - magma
444
+ """
445
+ b = 2**bits
446
+ return matrix_add_ZZ(n=n, min=-b, max=b,system=system, times=times)
447
+
448
+
449
+ def det_ZZ(n=200, min=1, max=100, system='sage'):
450
+ """
451
+ Dense integer determinant over ZZ.
452
+ Given an n x n matrix A over ZZ with random entries
453
+ between min and max, inclusive, compute det(A).
454
+
455
+ INPUT:
456
+
457
+ - ``n`` -- matrix dimension (default: ``200``)
458
+ - ``min`` -- minimal value for entries of matrix (default: ``1``)
459
+ - ``max`` -- maximal value for entries of matrix (default: ``100``)
460
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
461
+
462
+ EXAMPLES::
463
+
464
+ sage: import sage.matrix.benchmark as b
465
+ sage: ts = b.det_ZZ(200)
466
+ sage: tm = b.det_ZZ(200, system='magma') # optional - magma
467
+ """
468
+ if system == 'sage':
469
+ A = random_matrix(ZZ, n, n, x=min, y=max+1)
470
+ t = cputime()
471
+ d = A.determinant()
472
+ return cputime(t)
473
+ elif system == 'magma':
474
+ code = """
475
+ n := %s;
476
+ A := MatrixAlgebra(IntegerRing(), n)![Random(%s,%s) : i in [1..n^2]];
477
+ t := Cputime();
478
+ d := Determinant(A);
479
+ s := Cputime(t);
480
+ """ % (n,min,max)
481
+ if verbose:
482
+ print(code)
483
+ magma.eval(code)
484
+ return float(magma.eval('s'))
485
+ else:
486
+ raise ValueError('unknown system "%s"' % system)
487
+
488
+
489
+ def det_QQ(n=300, num_bound=10, den_bound=10, system='sage'):
490
+ """
491
+ Dense rational determinant over QQ.
492
+ Given an n x n matrix A over QQ with random entries
493
+ with numerator bound and denominator bound, compute det(A).
494
+
495
+ INPUT:
496
+
497
+ - ``n`` -- matrix dimension (default: ``200``)
498
+ - ``num_bound`` -- numerator bound, inclusive (default: ``10``)
499
+ - ``den_bound`` -- denominator bound, inclusive (default: ``10``)
500
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
501
+
502
+ EXAMPLES::
503
+
504
+ sage: import sage.matrix.benchmark as b
505
+ sage: ts = b.det_QQ(200)
506
+ sage: ts = b.det_QQ(10, num_bound=100000, den_bound=10000)
507
+ sage: tm = b.det_QQ(200, system='magma') # optional - magma
508
+ """
509
+ if system == 'sage':
510
+ A = random_matrix(QQ, n, n, num_bound=num_bound, den_bound=den_bound)
511
+ t = cputime()
512
+ d = A.determinant()
513
+ return cputime(t)
514
+ elif system == 'magma':
515
+ code = """
516
+ n := %s;
517
+ A := MatrixAlgebra(RationalField(), n)![Random(%s,%s)/Random(1,%s) : i in [1..n^2]];
518
+ t := Cputime();
519
+ d := Determinant(A);
520
+ s := Cputime(t);
521
+ """ % (n,-num_bound, num_bound, den_bound)
522
+ if verbose:
523
+ print(code)
524
+ magma.eval(code)
525
+ return float(magma.eval('s'))
526
+ else:
527
+ raise ValueError('unknown system "%s"' % system)
528
+
529
+
530
+ def vecmat_ZZ(n=300, min=-9, max=9, system='sage', times=200):
531
+ """
532
+ Vector matrix multiplication over ZZ.
533
+
534
+ Given an n x n matrix A over ZZ with random entries
535
+ between min and max, inclusive, and v the first row of A,
536
+ compute the product v * A.
537
+
538
+ INPUT:
539
+
540
+ - ``n`` -- matrix dimension (default: ``300``)
541
+ - ``min`` -- minimal value for entries of matrix (default: ``-9``)
542
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
543
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
544
+ - ``times`` -- number of runs (default: ``200``)
545
+
546
+ EXAMPLES::
547
+
548
+ sage: import sage.matrix.benchmark as b
549
+ sage: ts = b.vecmat_ZZ(300) # long time
550
+ sage: tm = b.vecmat_ZZ(300, system='magma') # optional - magma
551
+ """
552
+ if system == 'sage':
553
+ A = random_matrix(ZZ, n, n, x=min, y=max+1)
554
+ v = A.row(0)
555
+ t = cputime()
556
+ for z in range(times):
557
+ w = v * A
558
+ return cputime(t)/times
559
+ elif system == 'magma':
560
+ code = """
561
+ n := %s;
562
+ A := MatrixAlgebra(IntegerRing(), n)![Random(%s,%s) : i in [1..n^2]];
563
+ v := A[1];
564
+ t := Cputime();
565
+ for z in [1..%s] do
566
+ K := v * A;
567
+ end for;
568
+ s := Cputime(t);
569
+ """ % (n,min,max,times)
570
+ if verbose:
571
+ print(code)
572
+ magma.eval(code)
573
+ return float(magma.eval('s'))/times
574
+ else:
575
+ raise ValueError('unknown system "%s"' % system)
576
+
577
+
578
+ #######################################################################
579
+ # Dense Benchmarks over GF(p), for small p.
580
+ #######################################################################
581
+
582
+ def report_GF(p=16411, **kwds):
583
+ """
584
+ Run all the reports for finite field matrix operations, for
585
+ prime p=16411.
586
+
587
+ INPUT:
588
+
589
+ - ``p`` -- ignored
590
+ - ``**kwds`` -- passed through to :func:`report`
591
+
592
+ .. NOTE::
593
+
594
+ right now, even though p is an input, it is being ignored! If
595
+ you need to check the performance for other primes, you can
596
+ call individual benchmark functions.
597
+
598
+ EXAMPLES::
599
+
600
+ sage: import sage.matrix.benchmark as b
601
+ sage: print("starting"); import sys; sys.stdout.flush(); b.report_GF(systems=['sage'])
602
+ starting...
603
+ ======================================================================
604
+ Dense benchmarks over GF with prime 16411
605
+ ======================================================================
606
+ ...
607
+ ======================================================================
608
+ """
609
+ F = [rank_GF, rank2_GF, nullspace_GF, charpoly_GF,
610
+ matrix_multiply_GF, det_GF]
611
+ title = 'Dense benchmarks over GF with prime %i' % p
612
+ report(F, title, **kwds)
613
+
614
+ # Nullspace over GF
615
+
616
+
617
+ def nullspace_GF(n=300, p=16411, system='sage'):
618
+ """
619
+ Given a n+1 x n matrix over GF(p) with random
620
+ entries, compute the nullspace.
621
+
622
+ INPUT:
623
+
624
+ - ``n`` -- matrix dimension (default: 300)
625
+ - ``p`` -- prime number (default: ``16411``)
626
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
627
+
628
+ EXAMPLES::
629
+
630
+ sage: import sage.matrix.benchmark as b
631
+ sage: ts = b.nullspace_GF(300)
632
+ sage: tm = b.nullspace_GF(300, system='magma') # optional - magma
633
+ """
634
+ if system == 'sage':
635
+ A = random_matrix(GF(p), n, n+1)
636
+ t = cputime()
637
+ v = A.kernel()
638
+ return cputime(t)
639
+ elif system == 'magma':
640
+ code = """
641
+ n := %s;
642
+ A := Random(RMatrixSpace(GF(%s), n, n+1));
643
+ t := Cputime();
644
+ K := Kernel(A);
645
+ s := Cputime(t);
646
+ """ % (n,p)
647
+ if verbose:
648
+ print(code)
649
+ magma.eval(code)
650
+ return magma.eval('s')
651
+ else:
652
+ raise ValueError('unknown system "%s"' % system)
653
+
654
+
655
+ # Characteristic Polynomial over GF
656
+
657
+ def charpoly_GF(n=100, p=16411, system='sage'):
658
+ """
659
+ Given a n x n matrix over GF with random entries, compute the
660
+ charpoly.
661
+
662
+ INPUT:
663
+
664
+ - ``n`` -- matrix dimension (default: 100)
665
+ - ``p`` -- prime number (default: ``16411``)
666
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
667
+
668
+ EXAMPLES::
669
+
670
+ sage: import sage.matrix.benchmark as b
671
+ sage: ts = b.charpoly_GF(100)
672
+ sage: tm = b.charpoly_GF(100, system='magma') # optional - magma
673
+ """
674
+ if system == 'sage':
675
+ A = random_matrix(GF(p), n, n)
676
+ t = cputime()
677
+ v = A.charpoly()
678
+ return cputime(t)
679
+ elif system == 'magma':
680
+ code = """
681
+ n := %s;
682
+ A := Random(MatrixAlgebra(GF(%s), n));
683
+ t := Cputime();
684
+ K := CharacteristicPolynomial(A);
685
+ s := Cputime(t);
686
+ """ % (n,p)
687
+ if verbose:
688
+ print(code)
689
+ magma.eval(code)
690
+ return magma.eval('s')
691
+ else:
692
+ raise ValueError('unknown system "%s"' % system)
693
+
694
+
695
+ def matrix_add_GF(n=1000, p=16411, system='sage', times=100):
696
+ """
697
+ Given two n x n matrix over GF(p) with random entries, add them.
698
+
699
+ INPUT:
700
+
701
+ - ``n`` -- matrix dimension (default: 300)
702
+ - ``p`` -- prime number (default: ``16411``)
703
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
704
+ - ``times`` -- number of experiments (default: ``100``)
705
+
706
+ EXAMPLES::
707
+
708
+ sage: import sage.matrix.benchmark as b
709
+ sage: ts = b.matrix_add_GF(500, p=19)
710
+ sage: tm = b.matrix_add_GF(500, p=19, system='magma') # optional - magma
711
+ """
712
+ if system == 'sage':
713
+ A = random_matrix(GF(p), n, n)
714
+ B = random_matrix(GF(p), n, n)
715
+ t = cputime()
716
+ for n in range(times):
717
+ v = A + B
718
+ return cputime(t)
719
+ elif system == 'magma':
720
+ code = """
721
+ n := %s;
722
+ A := Random(MatrixAlgebra(GF(%s), n));
723
+ B := Random(MatrixAlgebra(GF(%s), n));
724
+ t := Cputime();
725
+ for z in [1..%s] do
726
+ K := A + B;
727
+ end for;
728
+ s := Cputime(t);
729
+ """ % (n,p,p,times)
730
+ if verbose:
731
+ print(code)
732
+ magma.eval(code)
733
+ return magma.eval('s')
734
+ else:
735
+ raise ValueError('unknown system "%s"' % system)
736
+
737
+
738
+ # Matrix multiplication over GF(p)
739
+
740
+ def matrix_multiply_GF(n=100, p=16411, system='sage', times=3):
741
+ """
742
+ Given an n x n matrix A over GF(p) with random entries, compute
743
+ A * (A+1).
744
+
745
+ INPUT:
746
+
747
+ - ``n`` -- matrix dimension (default: 100)
748
+ - ``p`` -- prime number (default: ``16411``)
749
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
750
+ - ``times`` -- number of experiments (default: ``3``)
751
+
752
+ EXAMPLES::
753
+
754
+ sage: import sage.matrix.benchmark as b
755
+ sage: ts = b.matrix_multiply_GF(100, p=19)
756
+ sage: tm = b.matrix_multiply_GF(100, p=19, system='magma') # optional - magma
757
+ """
758
+ if system == 'sage':
759
+ A = random_matrix(GF(p), n)
760
+ B = A + 1
761
+ t = cputime()
762
+ for n in range(times):
763
+ v = A * B
764
+ return cputime(t) / times
765
+ elif system == 'magma':
766
+ code = """
767
+ n := %s;
768
+ A := Random(MatrixAlgebra(GF(%s), n));
769
+ B := A + 1;
770
+ t := Cputime();
771
+ for z in [1..%s] do
772
+ K := A * B;
773
+ end for;
774
+ s := Cputime(t);
775
+ """ % (n,p,times)
776
+ if verbose:
777
+ print(code)
778
+ magma.eval(code)
779
+ return float(magma.eval('s'))/times
780
+ else:
781
+ raise ValueError('unknown system "%s"' % system)
782
+
783
+
784
+ def rank_GF(n=500, p=16411, system='sage'):
785
+ """
786
+ Rank over GF(p):
787
+ Given a n x (n+10) matrix over GF(p) with random entries, compute the rank.
788
+
789
+ INPUT:
790
+
791
+ - ``n`` -- matrix dimension (default: 300)
792
+ - ``p`` -- prime number (default: ``16411``)
793
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
794
+
795
+ EXAMPLES::
796
+
797
+ sage: import sage.matrix.benchmark as b
798
+ sage: ts = b.rank_GF(1000)
799
+ sage: tm = b.rank_GF(1000, system='magma') # optional - magma
800
+ """
801
+ if system == 'sage':
802
+ A = random_matrix(GF(p), n, n+10)
803
+ t = cputime()
804
+ v = A.rank()
805
+ return cputime(t)
806
+ elif system == 'magma':
807
+ code = """
808
+ n := %s;
809
+ A := Random(MatrixAlgebra(GF(%s), n));
810
+ t := Cputime();
811
+ K := Rank(A);
812
+ s := Cputime(t);
813
+ """ % (n,p)
814
+ if verbose:
815
+ print(code)
816
+ magma.eval(code)
817
+ return float(magma.eval('s'))
818
+ else:
819
+ raise ValueError('unknown system "%s"' % system)
820
+
821
+
822
+ def rank2_GF(n=500, p=16411, system='sage'):
823
+ """
824
+ Rank over GF(p): Given a (n + 10) x n matrix over GF(p) with
825
+ random entries, compute the rank.
826
+
827
+ INPUT:
828
+
829
+ - ``n`` -- matrix dimension (default: 300)
830
+ - ``p`` -- prime number (default: ``16411``)
831
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
832
+
833
+ EXAMPLES::
834
+
835
+ sage: import sage.matrix.benchmark as b
836
+ sage: ts = b.rank2_GF(500)
837
+ sage: tm = b.rank2_GF(500, system='magma') # optional - magma
838
+ """
839
+ if system == 'sage':
840
+ A = random_matrix(GF(p), n+10, n)
841
+ t = cputime()
842
+ v = A.rank()
843
+ return cputime(t)
844
+ elif system == 'magma':
845
+ code = """
846
+ n := %s;
847
+ A := Random(MatrixAlgebra(GF(%s), n));
848
+ t := Cputime();
849
+ K := Rank(A);
850
+ s := Cputime(t);
851
+ """ % (n,p)
852
+ if verbose:
853
+ print(code)
854
+ magma.eval(code)
855
+ return float(magma.eval('s'))
856
+ else:
857
+ raise ValueError('unknown system "%s"' % system)
858
+
859
+
860
+ def det_GF(n=400, p=16411 , system='sage'):
861
+ """
862
+ Dense determinant over GF(p).
863
+ Given an n x n matrix A over GF with random entries compute
864
+ det(A).
865
+
866
+ INPUT:
867
+
868
+ - ``n`` -- matrix dimension (default: 300)
869
+ - ``p`` -- prime number (default: ``16411``)
870
+ - ``system`` -- either 'magma' or 'sage' (default: ``'sage'``)
871
+
872
+ EXAMPLES::
873
+
874
+ sage: import sage.matrix.benchmark as b
875
+ sage: ts = b.det_GF(1000)
876
+ sage: tm = b.det_GF(1000, system='magma') # optional - magma
877
+ """
878
+ if system == 'sage':
879
+ A = random_matrix(GF(p), n, n)
880
+ t = cputime()
881
+ d = A.determinant()
882
+ return cputime(t)
883
+ elif system == 'magma':
884
+ code = """
885
+ n := %s;
886
+ A := Random(MatrixAlgebra(GF(%s), n));
887
+ t := Cputime();
888
+ d := Determinant(A);
889
+ s := Cputime(t);
890
+ """ % (n,p)
891
+ if verbose:
892
+ print(code)
893
+ magma.eval(code)
894
+ return float(magma.eval('s'))
895
+ else:
896
+ raise ValueError('unknown system "%s"' % system)
897
+
898
+
899
+ #######################################################################
900
+ # Dense Benchmarks over QQ
901
+ #######################################################################
902
+
903
+ def hilbert_matrix(n):
904
+ """
905
+ Return the Hilbert matrix of size n over rationals.
906
+
907
+ EXAMPLES::
908
+
909
+ sage: import sage.matrix.benchmark as b
910
+ sage: b.hilbert_matrix(3)
911
+ [ 1 1/2 1/3]
912
+ [1/2 1/3 1/4]
913
+ [1/3 1/4 1/5]
914
+ """
915
+ A = Matrix(QQ,n,n)
916
+ for i in range(A.nrows()):
917
+ for j in range(A.ncols()):
918
+ A[i,j] = QQ(1)/((i+1)+(j+1)-1)
919
+ return A
920
+
921
+ # Reduced row echelon form over QQ
922
+
923
+
924
+ def echelon_QQ(n=100, min=0, max=9, system='sage'):
925
+ """
926
+ Given a n x (2*n) matrix over QQ with random integer entries
927
+ between min and max, compute the reduced row echelon form.
928
+
929
+ INPUT:
930
+
931
+ - ``n`` -- matrix dimension (default: ``300``)
932
+ - ``min`` -- minimal value for entries of matrix (default: ``-9``)
933
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
934
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
935
+
936
+ EXAMPLES::
937
+
938
+ sage: import sage.matrix.benchmark as b
939
+ sage: ts = b.echelon_QQ(100)
940
+ sage: tm = b.echelon_QQ(100, system='magma') # optional - magma
941
+ """
942
+ if system == 'sage':
943
+ A = random_matrix(ZZ, n, 2*n, x=min, y=max+1).change_ring(QQ)
944
+ t = cputime()
945
+ v = A.echelon_form()
946
+ return cputime(t)
947
+ elif system == 'magma':
948
+ code = """
949
+ n := %s;
950
+ A := RMatrixSpace(RationalField(), n, 2*n)![Random(%s,%s) : i in [1..n*2*n]];
951
+ t := Cputime();
952
+ K := EchelonForm(A);
953
+ s := Cputime(t);
954
+ """ % (n,min,max)
955
+ if verbose:
956
+ print(code)
957
+ magma.eval(code)
958
+ return float(magma.eval('s'))
959
+ else:
960
+ raise ValueError('unknown system "%s"' % system)
961
+
962
+ # Invert a matrix over QQ.
963
+
964
+
965
+ def inverse_QQ(n=100, min=0, max=9, system='sage'):
966
+ """
967
+ Given a n x n matrix over QQ with random integer entries
968
+ between min and max, compute the reduced row echelon form.
969
+
970
+ INPUT:
971
+
972
+ - ``n`` -- matrix dimension (default: ``300``)
973
+ - ``min`` -- minimal value for entries of matrix (default: ``-9``)
974
+ - ``max`` -- maximal value for entries of matrix (default: ``9``)
975
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
976
+
977
+ EXAMPLES::
978
+
979
+ sage: import sage.matrix.benchmark as b
980
+ sage: ts = b.inverse_QQ(100)
981
+ sage: tm = b.inverse_QQ(100, system='magma') # optional - magma
982
+ """
983
+ if system == 'sage':
984
+ A = random_matrix(ZZ, n, n, x=min, y=max+1).change_ring(QQ)
985
+ t = cputime()
986
+ v = ~A
987
+ return cputime(t)
988
+ elif system == 'magma':
989
+ code = """
990
+ n := %s;
991
+ A := MatrixAlgebra(RationalField(), n)![Random(%s,%s) : i in [1..n*n]];
992
+ t := Cputime();
993
+ K := A^(-1);
994
+ s := Cputime(t);
995
+ """ % (n,min,max)
996
+ if verbose:
997
+ print(code)
998
+ magma.eval(code)
999
+ return float(magma.eval('s'))
1000
+ else:
1001
+ raise ValueError('unknown system "%s"' % system)
1002
+
1003
+
1004
+ # Matrix multiplication over QQ
1005
+ def matrix_multiply_QQ(n=100, bnd=2, system='sage', times=1):
1006
+ """
1007
+ Given an n x n matrix A over QQ with random entries
1008
+ whose numerators and denominators are bounded by bnd,
1009
+ compute A * (A+1).
1010
+
1011
+ INPUT:
1012
+
1013
+ - ``n`` -- matrix dimension (default: ``300``)
1014
+ - ``bnd`` -- numerator and denominator bound (default: ``bnd``)
1015
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
1016
+ - ``times`` -- number of experiments (default: ``1``)
1017
+
1018
+ EXAMPLES::
1019
+
1020
+ sage: import sage.matrix.benchmark as b
1021
+ sage: ts = b.matrix_multiply_QQ(100)
1022
+ sage: tm = b.matrix_multiply_QQ(100, system='magma') # optional - magma
1023
+ """
1024
+ if system == 'sage':
1025
+ A = random_matrix(QQ, n, n, num_bound=bnd, den_bound=bnd)
1026
+ B = A + 1
1027
+ t = cputime()
1028
+ for z in range(times):
1029
+ v = A * B
1030
+ return cputime(t)/times
1031
+ elif system == 'magma':
1032
+ A = magma(random_matrix(QQ, n, n, num_bound=bnd, den_bound=bnd))
1033
+ code = """
1034
+ n := %s;
1035
+ A := %s;
1036
+ B := A + 1;
1037
+ t := Cputime();
1038
+ for z in [1..%s] do
1039
+ K := A * B;
1040
+ end for;
1041
+ s := Cputime(t);
1042
+ """ % (n, A.name(), times)
1043
+ if verbose:
1044
+ print(code)
1045
+ magma.eval(code)
1046
+ return float(magma.eval('s'))/times
1047
+ else:
1048
+ raise ValueError('unknown system "%s"' % system)
1049
+
1050
+
1051
+ # Determinant of Hilbert matrix
1052
+ def det_hilbert_QQ(n=80, system='sage'):
1053
+ """
1054
+ Run the benchmark for calculating the determinant of the hilbert
1055
+ matrix over rationals of dimension n.
1056
+
1057
+ INPUT:
1058
+
1059
+ - ``n`` -- matrix dimension (default: ``300``)
1060
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
1061
+
1062
+ EXAMPLES::
1063
+
1064
+ sage: import sage.matrix.benchmark as b
1065
+ sage: ts = b.det_hilbert_QQ(50)
1066
+ sage: tm = b.det_hilbert_QQ(50, system='magma') # optional - magma
1067
+ """
1068
+ if system == 'sage':
1069
+ A = hilbert_matrix(n)
1070
+ t = cputime()
1071
+ d = A.determinant()
1072
+ return cputime(t)
1073
+ elif system == 'magma':
1074
+ code = """
1075
+ h := HilbertMatrix(%s);
1076
+ tinit := Cputime();
1077
+ d := Determinant(h);
1078
+ s := Cputime(tinit);
1079
+ delete h;
1080
+ """ % n
1081
+ if verbose:
1082
+ print(code)
1083
+ magma.eval(code)
1084
+ return float(magma.eval('s'))
1085
+
1086
+ # inverse of Hilbert matrix
1087
+
1088
+
1089
+ def invert_hilbert_QQ(n=40, system='sage'):
1090
+ """
1091
+ Run the benchmark for calculating the inverse of the hilbert
1092
+ matrix over rationals of dimension n.
1093
+
1094
+ INPUT:
1095
+
1096
+ - ``n`` -- matrix dimension (default: ``300``)
1097
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
1098
+
1099
+ EXAMPLES::
1100
+
1101
+ sage: import sage.matrix.benchmark as b
1102
+ sage: ts = b.invert_hilbert_QQ(30)
1103
+ sage: tm = b.invert_hilbert_QQ(30, system='magma') # optional - magma
1104
+ """
1105
+ if system == 'sage':
1106
+ A = hilbert_matrix(n)
1107
+ t = cputime()
1108
+ d = A**(-1)
1109
+ return cputime(t)
1110
+ elif system == 'magma':
1111
+ code = """
1112
+ h := HilbertMatrix(%s);
1113
+ tinit := Cputime();
1114
+ d := h^(-1);
1115
+ s := Cputime(tinit);
1116
+ delete h;
1117
+ """ % n
1118
+ if verbose:
1119
+ print(code)
1120
+ magma.eval(code)
1121
+ return float(magma.eval('s'))
1122
+
1123
+
1124
+ def MatrixVector_QQ(n=1000, h=100, system='sage', times=1):
1125
+ """
1126
+ Compute product of square ``n`` matrix by random vector with num and
1127
+ denom bounded by ``h`` the given number of ``times``.
1128
+
1129
+ INPUT:
1130
+
1131
+ - ``n`` -- matrix dimension (default: ``300``)
1132
+ - ``h`` -- numerator and denominator bound (default: ``bnd``)
1133
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
1134
+ - ``times`` -- number of experiments (default: ``1``)
1135
+
1136
+ EXAMPLES::
1137
+
1138
+ sage: import sage.matrix.benchmark as b
1139
+ sage: ts = b.MatrixVector_QQ(500)
1140
+ sage: tm = b.MatrixVector_QQ(500, system='magma') # optional - magma
1141
+ """
1142
+ if system == 'sage':
1143
+ V = QQ**n
1144
+ v = V.random_element(h)
1145
+ M = random_matrix(QQ,n)
1146
+ t = cputime()
1147
+ for i in range(times):
1148
+ w = M*v
1149
+ return cputime(t)
1150
+ elif system == 'magma':
1151
+ code = """
1152
+ n:=%s;
1153
+ h:=%s;
1154
+ times:=%s;
1155
+ v:=VectorSpace(RationalField(),n)![Random(h)/(Random(h)+1) : i in [1..n]];
1156
+ M:=MatrixAlgebra(RationalField(),n)![Random(h)/(Random(h)+1) : i in [1..n^2]];
1157
+ t := Cputime();
1158
+ for z in [1..times] do
1159
+ W:=v*M;
1160
+ end for;
1161
+ s := Cputime(t);
1162
+ """ % (n,h,times)
1163
+ if verbose:
1164
+ print(code)
1165
+ magma.eval(code)
1166
+ return float(magma.eval('s'))
1167
+ else:
1168
+ raise ValueError('unknown system "%s"' % system)
1169
+
1170
+
1171
+ #######################################################################
1172
+ # Dense Benchmarks over machine reals
1173
+ # Note that the precision in reals for MAGMA is base 10, while in
1174
+ # sage it is in base 2
1175
+ #######################################################################
1176
+
1177
+ # Real Nullspace
1178
+
1179
+ def nullspace_RR(n=300, min=0, max=10, system='sage'):
1180
+ """
1181
+ Nullspace over RR:
1182
+ Given a n+1 x n matrix over RR with random entries
1183
+ between min and max, compute the nullspace.
1184
+
1185
+ INPUT:
1186
+
1187
+ - ``n`` -- matrix dimension (default: ``300``)
1188
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
1189
+ - ``max`` -- maximal value for entries of matrix (default: ``10``)
1190
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
1191
+
1192
+ EXAMPLES::
1193
+
1194
+ sage: import sage.matrix.benchmark as b
1195
+ sage: ts = b.nullspace_RR(100)
1196
+ sage: tm = b.nullspace_RR(100, system='magma') # optional - magma
1197
+ """
1198
+ if system == 'sage':
1199
+ from sage.rings.real_mpfr import RR
1200
+ A = random_matrix(ZZ, n+1, n, x=min, y=max+1).change_ring(RR)
1201
+ t = cputime()
1202
+ v = A.kernel()
1203
+ return cputime(t)
1204
+ elif system == 'magma':
1205
+ code = """
1206
+ n := %s;
1207
+ A := RMatrixSpace(RealField(16), n+1,n)![Random(%s,%s) : i in [1..n*(n+1)]];
1208
+ t := Cputime();
1209
+ K := Kernel(A);
1210
+ s := Cputime(t);
1211
+ """ % (n,min,max)
1212
+ if verbose:
1213
+ print(code)
1214
+ magma.eval(code)
1215
+ return float(magma.eval('s'))
1216
+ else:
1217
+ raise ValueError('unknown system "%s"' % system)
1218
+
1219
+
1220
+ def nullspace_RDF(n=300, min=0, max=10, system='sage'):
1221
+ """
1222
+ Nullspace over RDF:
1223
+ Given a n+1 x n matrix over RDF with random entries
1224
+ between min and max, compute the nullspace.
1225
+
1226
+ INPUT:
1227
+
1228
+ - ``n`` -- matrix dimension (default: ``300``)
1229
+ - ``min`` -- minimal value for entries of matrix (default: ``0``)
1230
+ - ``max`` -- maximal value for entries of matrix (default: ``10``)
1231
+ - ``system`` -- either ``'sage'`` or ``'magma'`` (default: ``'sage'``)
1232
+
1233
+ EXAMPLES::
1234
+
1235
+ sage: import sage.matrix.benchmark as b
1236
+ sage: ts = b.nullspace_RDF(100) # long time
1237
+ sage: tm = b.nullspace_RDF(100, system='magma') # optional - magma
1238
+ """
1239
+ if system == 'sage':
1240
+ from sage.rings.real_double import RDF
1241
+ A = random_matrix(ZZ, n+1, n, x=min, y=max+1).change_ring(RDF)
1242
+ t = cputime()
1243
+ v = A.kernel()
1244
+ return cputime(t)
1245
+ elif system == 'magma':
1246
+ code = """
1247
+ n := %s;
1248
+ A := RMatrixSpace(RealField(16), n+1,n)![Random(%s,%s) : i in [1..n*(n+1)]];
1249
+ t := Cputime();
1250
+ K := Kernel(A);
1251
+ s := Cputime(t);
1252
+ """ % (n, min, max)
1253
+ if verbose:
1254
+ print(code)
1255
+ magma.eval(code)
1256
+ return float(magma.eval('s'))
1257
+ else:
1258
+ raise ValueError('unknown system "%s"' % system)