passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,698 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.symbolic
3
+ """
4
+ Numerical Integration
5
+
6
+ AUTHORS:
7
+
8
+ - Josh Kantor (2007-02): first version
9
+
10
+ - William Stein (2007-02): rewrite of docs, conventions, etc.
11
+
12
+ - Robert Bradshaw (2008-08): fast float integration
13
+
14
+ - Jeroen Demeyer (2011-11-23): :issue:`12047`: return 0 when the
15
+ integration interval is a point; reformat documentation and add to
16
+ the reference manual.
17
+ """
18
+
19
+ # ****************************************************************************
20
+ # Copyright (C) 2004,2005,2006,2007 Joshua Kantor <kantor.jm@gmail.com>
21
+ # Copyright (C) 2007 William Stein <wstein@gmail.com>
22
+ # Copyright (C) 2019 Vincent Klein <vinklein@gmail.com>
23
+ # Copyright (C) 2019 Vincent Delecroix <20100.delecroix@gmail.com>
24
+ #
25
+ # Distributed under the terms of the GNU General Public License (GPL)
26
+ # as published by the Free Software Foundation; either version 2 of
27
+ # the License, or (at your option) any later version.
28
+ # https://www.gnu.org/licenses/
29
+ # ****************************************************************************
30
+
31
+ from cysignals.signals cimport sig_on, sig_off
32
+ from memory_allocator cimport MemoryAllocator
33
+
34
+ from sage.rings.real_double import RDF
35
+ from sage.libs.gsl.errno cimport gsl_set_error_handler_off
36
+ from sage.libs.gsl.integration cimport *
37
+ from sage.libs.gsl.monte cimport *
38
+ from sage.libs.gsl.rng cimport *
39
+ from sage.misc.sageinspect import sage_getargspec
40
+ from sage.ext.interpreters.wrapper_rdf cimport Wrapper_rdf
41
+ from sage.ext.fast_callable import fast_callable
42
+
43
+
44
+ cdef class PyFunctionWrapper:
45
+ cdef object the_function
46
+ cdef object the_parameters
47
+ cdef list lx
48
+
49
+ cdef class compiled_integrand:
50
+ cdef int c_f(self, double t) noexcept: # void *params):
51
+ return 0
52
+
53
+ cdef double c_f(double t, void *params) noexcept:
54
+ cdef double value
55
+ cdef PyFunctionWrapper wrapper
56
+ wrapper = <PyFunctionWrapper> params
57
+ try:
58
+ if len(wrapper.the_parameters) != 0:
59
+ value = wrapper.the_function(t, wrapper.the_parameters)
60
+ else:
61
+ value = wrapper.the_function(t)
62
+ except Exception as msg:
63
+ try:
64
+ if str(msg).strip():
65
+ print(msg)
66
+ else:
67
+ print(f"Unable to evaluate function at {t}")
68
+ except Exception:
69
+ pass
70
+ return 0
71
+
72
+ return value
73
+
74
+
75
+ def numerical_integral(func, a, b=None,
76
+ algorithm='qag',
77
+ max_points=87, params=None, eps_abs=1e-6,
78
+ eps_rel=1e-6, rule=6):
79
+ r"""
80
+ Return the numerical integral of the function on the interval
81
+ from a to b and an error bound.
82
+
83
+ INPUT:
84
+
85
+ - ``a``, ``b`` -- the interval of integration, specified as two
86
+ numbers or as a tuple/list with the first element the lower bound
87
+ and the second element the upper bound. Use ``+Infinity`` and
88
+ ``-Infinity`` for plus or minus infinity.
89
+ - ``algorithm`` -- valid choices are:
90
+
91
+ * 'qag' -- for an adaptive integration
92
+ * 'qags' -- for an adaptive integration with (integrable) singularities
93
+ * 'qng' -- for a non-adaptive Gauss-Kronrod (samples at a maximum of 87pts)
94
+
95
+ - ``max_points`` -- sets the maximum number of sample points
96
+ - ``params`` -- used to pass parameters to your function
97
+ - ``eps_abs``, ``eps_rel`` -- sets the absolute and relative error
98
+ tolerances which satisfies the relation ``|RESULT - I| <= max(eps_abs,
99
+ eps_rel * |I|)``, where ``I = \int_a^b f(x) d x``.
100
+ - ``rule`` -- this controls the Gauss-Kronrod rule used in the adaptive integration:
101
+
102
+ * rule=1 -- 15 point rule
103
+ * rule=2 -- 21 point rule
104
+ * rule=3 -- 31 point rule
105
+ * rule=4 -- 41 point rule
106
+ * rule=5 -- 51 point rule
107
+ * rule=6 -- 61 point rule
108
+
109
+ Higher key values are more accurate for smooth functions but lower
110
+ key values deal better with discontinuities.
111
+
112
+ OUTPUT:
113
+
114
+ A tuple whose first component is the answer and whose second
115
+ component is an error estimate.
116
+
117
+ REMARK:
118
+
119
+ There is also a method ``nintegral`` on symbolic expressions
120
+ that implements numerical integration using Maxima. It is potentially
121
+ very useful for symbolic expressions.
122
+
123
+ EXAMPLES:
124
+
125
+ To integrate the function `x^2` from 0 to 1, we do ::
126
+
127
+ sage: numerical_integral(x^2, 0, 1, max_points=100)
128
+ (0.3333333333333333, 3.700743415417188e-15)
129
+
130
+ To integrate the function `\sin(x)^3 + \sin(x)` we do ::
131
+
132
+ sage: numerical_integral(sin(x)^3 + sin(x), 0, pi)
133
+ (3.333333333333333, 3.700743415417188e-14)
134
+
135
+ The input can be any callable::
136
+
137
+ sage: numerical_integral(lambda x: sin(x)^3 + sin(x), 0, pi)
138
+ (3.333333333333333, 3.700743415417188e-14)
139
+
140
+ We check this with a symbolic integration::
141
+
142
+ sage: (sin(x)^3+sin(x)).integral(x,0,pi)
143
+ 10/3
144
+
145
+ If we want to change the error tolerances and Gauss rule used::
146
+
147
+ sage: f = x^2
148
+ sage: numerical_integral(f, 0, 1, max_points=200, eps_abs=1e-7, eps_rel=1e-7, rule=4)
149
+ (0.3333333333333333, 3.700743415417188e-15)
150
+
151
+ For a Python function with parameters::
152
+
153
+ sage: f(x,a) = 1/(a+x^2)
154
+ sage: [numerical_integral(f, 1, 2, max_points=100, params=[n])[0] # abs tol 1.0e-6
155
+ ....: for n in range(10)]
156
+ [0.5000000000000000,
157
+ 0.3217505543966422,
158
+ 0.24030098317248832,
159
+ 0.19253082576711372,
160
+ 0.1608752771983211,
161
+ 0.138275456763492,
162
+ 0.1212997593570257,
163
+ 0.10806674191683492,
164
+ 0.09745444625553161,
165
+ 0.08875068305030848]
166
+
167
+ sage: y = var('y')
168
+ sage: numerical_integral(x*y, 0, 1)
169
+ Traceback (most recent call last):
170
+ ...
171
+ ValueError: The function to be integrated depends on 2 variables (x, y),
172
+ and so cannot be integrated in one dimension. Please fix additional
173
+ variables with the 'params' argument
174
+
175
+ Note the parameters are always a tuple even if they have one component.
176
+
177
+ It is possible to integrate on infinite intervals as well by using
178
+ +Infinity or -Infinity in the interval argument. For example::
179
+
180
+ sage: f = exp(-x)
181
+ sage: numerical_integral(f, 0, +Infinity) # random output
182
+ (0.99999999999957279, 1.8429811298996553e-07)
183
+
184
+ Note the coercion to the real field RR, which prevents underflow::
185
+
186
+ sage: f = exp(-x**2)
187
+ sage: numerical_integral(f, -Infinity, +Infinity) # random output
188
+ (1.7724538509060035, 3.4295192165889879e-08)
189
+
190
+ One can integrate any real-valued callable function::
191
+
192
+ sage: numerical_integral(lambda x: abs(zeta(x)), [1.1,1.5]) # random output
193
+ (1.8488570602160455, 2.052643677492633e-14)
194
+
195
+ We can also numerically integrate symbolic expressions using either this
196
+ function (which uses GSL) or the native integration (which uses Maxima)::
197
+
198
+ sage: exp(-1/x).nintegral(x, 1, 2) # via maxima
199
+ (0.50479221787318..., 5.60431942934407...e-15, 21, 0)
200
+ sage: numerical_integral(exp(-1/x), 1, 2)
201
+ (0.50479221787318..., 5.60431942934407...e-15)
202
+
203
+ We can also integrate constant expressions::
204
+
205
+ sage: numerical_integral(2, 1, 7)
206
+ (12.0, 0.0)
207
+
208
+ If the interval of integration is a point, then the result is
209
+ always zero (this makes sense within the Lebesgue theory of
210
+ integration), see :issue:`12047`::
211
+
212
+ sage: numerical_integral(log, 0, 0)
213
+ (0.0, 0.0)
214
+ sage: numerical_integral(lambda x: sqrt(x), (-2.0, -2.0) )
215
+ (0.0, 0.0)
216
+
217
+ In the presence of integrable singularity, the default adaptive method might
218
+ fail and it is advised to use ``'qags'``::
219
+
220
+ sage: b = 1.81759643554688
221
+ sage: F(x) = sqrt((-x + b)/((x - 1.0)*x))
222
+ sage: numerical_integral(F, 1, b)
223
+ (inf, nan)
224
+ sage: numerical_integral(F, 1, b, algorithm='qags') # abs tol 1e-10
225
+ (1.1817104238446596, 3.387268288079781e-07)
226
+
227
+ AUTHORS:
228
+
229
+ - Josh Kantor
230
+ - William Stein
231
+ - Robert Bradshaw
232
+ - Jeroen Demeyer
233
+
234
+ ALGORITHM: Uses calls to the GSL (GNU Scientific Library) C library.
235
+ Documentation can be found in [GSL]_ chapter "Numerical Integration".
236
+
237
+ TESTS:
238
+
239
+ Make sure that constant Expressions, not merely uncallable arguments,
240
+ can be integrated (:issue:`10088`), at least if we can coerce them
241
+ to float::
242
+
243
+ sage: f, g = x, x-1
244
+ sage: numerical_integral(f-g, -2, 2)
245
+ (4.0, 0.0)
246
+ sage: numerical_integral(SR(2.5), 5, 20)
247
+ (37.5, 0.0)
248
+ sage: numerical_integral(SR(1+3j), 2, 3)
249
+ Traceback (most recent call last):
250
+ ...
251
+ TypeError: unable to simplify to float approximation
252
+
253
+ Check for :issue:`15496`::
254
+
255
+ sage: f = x^2/exp(-1/(x^2+1))/(x^2+1)
256
+ sage: D = integrate(f,(x,-infinity,infinity),hold=True)
257
+ sage: D.n()
258
+ Traceback (most recent call last):
259
+ ...
260
+ ValueError: integral does not converge at -infinity
261
+
262
+ Symbolic functions can be integrated as conveniently as symbolic
263
+ expressions, as in :issue:`15219`::
264
+
265
+ sage: h(x) = x
266
+ sage: numerical_integral(h,0,1)[0] # abs tol 1e-8
267
+ 0.5
268
+ """
269
+ cdef double abs_err # step size
270
+ cdef double result
271
+ cdef double _a, _b
272
+ cdef PyFunctionWrapper wrapper # struct to pass information into GSL C function
273
+
274
+ if b is None or isinstance(a, (list, tuple)):
275
+ b = a[1]
276
+ a = a[0]
277
+
278
+ # The integral over a point is always zero
279
+ if a == b:
280
+ return (0.0, 0.0)
281
+
282
+ if not callable(func):
283
+ # handle the constant case
284
+ return (((<double>b - <double>a) * <double>func), 0.0)
285
+
286
+ cdef gsl_function F
287
+ cdef gsl_integration_workspace* W
288
+ W = NULL
289
+
290
+ if params is None:
291
+ params = []
292
+
293
+ if True:
294
+ from sage.rings.infinity import Infinity
295
+ try:
296
+ if hasattr(func, 'arguments'):
297
+ vars = func.arguments()
298
+ else:
299
+ vars = func.variables()
300
+ except (AttributeError):
301
+ pass
302
+ else:
303
+ if not vars:
304
+ # handle the constant case
305
+ return (((<double>b - <double>a) * <double>func), 0.0)
306
+ if len(vars) != 1:
307
+ if len(params) + 1 != len(vars):
308
+ raise ValueError(("The function to be integrated depends on "
309
+ "{} variables {}, and so cannot be "
310
+ "integrated in one dimension. Please fix "
311
+ "additional variables with the 'params' "
312
+ "argument").format(len(vars), tuple(vars)))
313
+
314
+ to_sub = dict(zip(vars[1:], params))
315
+ func = func.subs(to_sub)
316
+
317
+ # sanity checks for integration up to infinity
318
+ v = str(vars[0])
319
+ if a is -Infinity:
320
+ try:
321
+ ell = func.limit(**{v: -Infinity})
322
+ except (AttributeError, ValueError):
323
+ pass
324
+ else:
325
+ if ell.is_numeric() and not ell.is_zero():
326
+ raise ValueError('integral does not converge at -infinity')
327
+ if b is Infinity:
328
+ try:
329
+ ell = func.limit(**{v: Infinity})
330
+ except (AttributeError, ValueError):
331
+ pass
332
+ else:
333
+ if ell.is_numeric() and not ell.is_zero():
334
+ raise ValueError('integral does not converge at infinity')
335
+ func = fast_callable(func, vars=[v], domain=float)
336
+ # `func` is now a function of one variable,
337
+ # so it no longer needs any parameters
338
+ params = []
339
+
340
+ if not isinstance(func, compiled_integrand):
341
+ wrapper = PyFunctionWrapper()
342
+ if func is not None:
343
+ wrapper.the_function = func
344
+ else:
345
+ raise ValueError("No integrand defined")
346
+ try:
347
+ if not params and len(sage_getargspec(wrapper.the_function)[0]) == 1:
348
+ wrapper.the_parameters = []
349
+ elif not params and len(sage_getargspec(wrapper.the_function)[0]) > 1:
350
+ raise ValueError("Integrand has parameters but no parameters specified")
351
+ elif params:
352
+ wrapper.the_parameters = params
353
+ except TypeError:
354
+ wrapper.the_function = eval("lambda x: func(x)", {'func': func})
355
+ wrapper.the_parameters = []
356
+
357
+ F.function = c_f
358
+ F.params = <void *> wrapper
359
+
360
+ cdef size_t n
361
+ n = max_points
362
+
363
+ gsl_set_error_handler_off()
364
+
365
+ if algorithm == "qng":
366
+ _a = a
367
+ _b = b
368
+ sig_on()
369
+ gsl_integration_qng(&F, _a, _b, eps_abs, eps_rel, &result, &abs_err, &n)
370
+ sig_off()
371
+
372
+ elif algorithm == "qag":
373
+ if a is -Infinity and b is +Infinity:
374
+ W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
375
+ sig_on()
376
+ gsl_integration_qagi(&F, eps_abs, eps_rel, n, W, &result, &abs_err)
377
+ sig_off()
378
+
379
+ elif a is -Infinity:
380
+ _b = b
381
+ W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
382
+ sig_on()
383
+ gsl_integration_qagil(&F, _b, eps_abs, eps_rel, n, W, &result, &abs_err)
384
+ sig_off()
385
+
386
+ elif b is +Infinity:
387
+ _a = a
388
+ W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
389
+ sig_on()
390
+ gsl_integration_qagiu(&F, _a, eps_abs, eps_rel, n, W, &result, &abs_err)
391
+ sig_off()
392
+
393
+ else:
394
+ _a = a
395
+ _b = b
396
+ W = <gsl_integration_workspace*> gsl_integration_workspace_alloc(n)
397
+ sig_on()
398
+ gsl_integration_qag(&F,_a,_b,eps_abs,eps_rel,n,rule,W,&result,&abs_err)
399
+ sig_off()
400
+
401
+ elif algorithm == "qags":
402
+
403
+ W = <gsl_integration_workspace*>gsl_integration_workspace_alloc(n)
404
+ sig_on()
405
+ _a = a
406
+ _b = b
407
+ gsl_integration_qags(&F, _a, _b, eps_abs, eps_rel, n, W, &result, &abs_err)
408
+ sig_off()
409
+
410
+ else:
411
+ raise TypeError("invalid integration algorithm")
412
+
413
+ if W != NULL:
414
+ gsl_integration_workspace_free(W)
415
+
416
+ return result, abs_err
417
+
418
+
419
+ cdef double c_monte_carlo_f(double *t, size_t dim, void *params) noexcept:
420
+ cdef double value
421
+ cdef PyFunctionWrapper wrapper
422
+ wrapper = <PyFunctionWrapper> params
423
+
424
+ for i in range(dim):
425
+ wrapper.lx[i] = t[i]
426
+
427
+ try:
428
+ if len(wrapper.the_parameters) != 0:
429
+ value = wrapper.the_function(*wrapper.lx, *wrapper.the_parameters)
430
+ else:
431
+ value = wrapper.the_function(*wrapper.lx)
432
+ except Exception as msg:
433
+ print(msg)
434
+ return 0
435
+
436
+ return value
437
+
438
+
439
+ cdef double c_monte_carlo_ff(double *x, size_t dim, void *params) noexcept:
440
+ cdef double result
441
+ (<Wrapper_rdf> params).call_c(x, &result)
442
+ return result
443
+
444
+
445
+ def monte_carlo_integral(func, xl, xu, size_t calls, algorithm='plain',
446
+ params=None):
447
+ """
448
+ Integrate ``func`` by Monte-Carlo method.
449
+
450
+ Integrate ``func`` over the ``dim``-dimensional hypercubic region
451
+ defined by the lower and upper limits in the arrays ``xl`` and
452
+ ``xu``, each of size ``dim``.
453
+
454
+ The integration uses a fixed number of function calls and obtains
455
+ random sampling points using the default gsl's random number generator.
456
+
457
+ ALGORITHM: Uses calls to the GSL (GNU Scientific Library) C library.
458
+ Documentation can be found in [GSL]_ chapter "Monte Carlo Integration".
459
+
460
+ INPUT:
461
+
462
+ - ``func`` -- the function to integrate
463
+ - ``params`` -- used to pass parameters to your function
464
+ - ``xl`` -- list of lower limits
465
+ - ``xu`` -- list of upper limits
466
+ - ``calls`` -- number of functions calls used
467
+ - ``algorithm`` -- valid choices are:
468
+
469
+ * 'plain' -- The plain Monte Carlo algorithm samples points randomly
470
+ from the integration region to estimate the integral and its error.
471
+ * 'miser' -- The MISER algorithm of Press and Farrar is based on
472
+ recursive stratified sampling
473
+ * 'vegas' -- The VEGAS algorithm of Lepage is based on importance
474
+ sampling.
475
+
476
+ OUTPUT:
477
+
478
+ A tuple whose first component is the approximated integral and whose second
479
+ component is an error estimate.
480
+
481
+ EXAMPLES::
482
+
483
+ sage: x, y = SR.var('x,y')
484
+ sage: monte_carlo_integral(x*y, [0,0], [2,2], 10000) # abs tol 0.1
485
+ (4.0, 0.0)
486
+ sage: integral(integral(x*y, (x,0,2)), (y,0,2))
487
+ 4
488
+
489
+ An example with a parameter::
490
+
491
+ sage: x, y, z = SR.var('x,y,z')
492
+ sage: monte_carlo_integral(x*y*z, [0,0], [2,2], 10000, params=[1.2]) # abs tol 0.1
493
+ (4.8, 0.0)
494
+
495
+ Integral of a constant::
496
+
497
+ sage: monte_carlo_integral(3, [0,0], [2,2], 10000) # abs tol 0.1
498
+ (12, 0.0)
499
+
500
+ Test different algorithms::
501
+
502
+ sage: x, y, z = SR.var('x,y,z')
503
+ sage: f(x,y,z) = exp(z) * cos(x + sin(y))
504
+ sage: for algo in ['plain', 'miser', 'vegas']: # abs tol 0.01
505
+ ....: monte_carlo_integral(f, [0,0,-1], [2,2,1], 10^6, algorithm=algo)
506
+ (-1.06, 0.01)
507
+ (-1.06, 0.01)
508
+ (-1.06, 0.01)
509
+
510
+ Tests with Python functions::
511
+
512
+ sage: def f(u, v): return u * v
513
+ sage: monte_carlo_integral(f, [0,0], [2,2], 10000) # abs tol 0.1
514
+ (4.0, 0.0)
515
+ sage: monte_carlo_integral(lambda u,v: u*v, [0,0], [2,2], 10000) # abs tol 0.1
516
+ (4.0, 0.0)
517
+ sage: def f(x1, x2, x3, x4): return x1*x2*x3*x4
518
+ sage: monte_carlo_integral(f, [0,0], [2,2], 1000, params=[0.6,2]) # abs tol 0.2
519
+ (4.8, 0.0)
520
+
521
+ TESTS::
522
+
523
+ sage: monte_carlo_integral(f, [0,0,0], [2,2], 10)
524
+ Traceback (most recent call last):
525
+ ...
526
+ TypeError: xl and xu must be lists of floating point values of identical lengths
527
+ sage: monte_carlo_integral(f, [0,0], [2,2], 1, algorithm='unicorn')
528
+ Traceback (most recent call last):
529
+ ...
530
+ ValueError: 'unicorn' is an invalid value for algorithm
531
+ sage: monte_carlo_integral(lambda x,y: y*x, [], [], 1)
532
+ Traceback (most recent call last):
533
+ ...
534
+ NotImplementedError: 0 dimensional integration not available
535
+ sage: monte_carlo_integral(x*y, [0,0,0], [2,2,2], 1)
536
+ Traceback (most recent call last):
537
+ ...
538
+ ValueError: The function to be integrated depends on 2 variables (x, y),
539
+ and so cannot be integrated in 3 dimensions. Please fix additional
540
+ variables with the 'params' argument
541
+ sage: def f(x, y): return x*y
542
+ sage: monte_carlo_integral(f, [0,0,0], [2,2,2], 100)
543
+ Traceback (most recent call last):
544
+ ...
545
+ ValueError: The function to be integrated depends on 2 variables ('x', 'y'),
546
+ and so cannot be integrated in 3 dimensions. Please fix additional
547
+ variables with the 'params' argument
548
+ sage: monte_carlo_integral(x*y, [0], [2], 1)
549
+ Traceback (most recent call last):
550
+ ...
551
+ ValueError: The function to be integrated depends on 2 variables (x, y),
552
+ and so cannot be integrated in 1 dimensions. Please add more items in
553
+ upper and lower limits
554
+ sage: monte_carlo_integral(f, [0], [2], 100)
555
+ Traceback (most recent call last):
556
+ ...
557
+ ValueError: The function to be integrated depends on 2 variables ('x', 'y'),
558
+ and so cannot be integrated in 1 dimensions. Please add more items in
559
+ upper and lower limits
560
+
561
+ AUTHORS:
562
+
563
+ - Vincent Delecroix
564
+ - Vincent Klein
565
+ """
566
+ cdef double result
567
+ cdef double abs_err
568
+ cdef gsl_monte_function F
569
+ cdef PyFunctionWrapper wrapper # struct to pass information into GSL Monte C function
570
+ cdef gsl_monte_plain_state* state_plain = NULL
571
+ cdef gsl_monte_miser_state* state_miser = NULL
572
+ cdef gsl_monte_vegas_state* state_vegas = NULL
573
+ cdef gsl_rng_type *type_rng
574
+ cdef gsl_rng *_rng
575
+ cdef size_t dim
576
+ cdef double *_xl
577
+ cdef double *_xu
578
+ cdef MemoryAllocator mem = MemoryAllocator()
579
+
580
+ if not isinstance(xl, (tuple, list)) or \
581
+ not isinstance(xu, (tuple, list)) or \
582
+ len(xl) != len(xu):
583
+ raise TypeError("xl and xu must be lists of floating point values of"
584
+ " identical lengths")
585
+
586
+ if algorithm not in ('plain', 'miser', 'vegas'):
587
+ raise ValueError("'{}' is an invalid value for algorithm".format(algorithm))
588
+
589
+ dim = len(xl)
590
+ if not dim:
591
+ raise NotImplementedError("0 dimensional integration not available")
592
+
593
+ if params is None:
594
+ params = []
595
+
596
+ # Initialize hypercubic region's lower and upper limits
597
+ _xl = <double *> mem.calloc(dim, sizeof(double))
598
+ _xu = <double *> mem.calloc(dim, sizeof(double))
599
+ for i in range(dim):
600
+ _xl[i] = <double> xl[i]
601
+ _xu[i] = <double> xu[i]
602
+
603
+ if not callable(func):
604
+ # constant. Note that all Expression objects are callable.
605
+ v = float(1)
606
+ for i in range(dim):
607
+ v *= _xu[i] - _xl[i]
608
+ return (v * <double?> func, 0.0)
609
+
610
+ elif not isinstance(func, Wrapper_rdf):
611
+ # func is either an Expression or another callable.
612
+ try:
613
+ vars = func.arguments()
614
+ except AttributeError:
615
+ try:
616
+ vars = func.variables()
617
+ except AttributeError:
618
+ vars = sage_getargspec(func)[0]
619
+
620
+ target_dim = dim + len(params)
621
+ if len(vars) < target_dim:
622
+ raise ValueError(("The function to be integrated depends on "
623
+ "{} variables {}, and so cannot be "
624
+ "integrated in {} dimensions. Please fix "
625
+ "additional variables with the 'params' "
626
+ "argument").format(len(vars), tuple(vars),
627
+ target_dim))
628
+ elif len(vars) > target_dim:
629
+ raise ValueError(("The function to be integrated depends on "
630
+ "{} variables {}, and so cannot be "
631
+ "integrated in {} dimensions. Please add "
632
+ "more items in upper and lower limits"
633
+ ).format(len(vars), tuple(vars), target_dim))
634
+
635
+ from sage.structure.element import Expression
636
+ if isinstance(func, Expression):
637
+ if params:
638
+ to_sub = dict(zip(vars[-len(params):], params))
639
+ func = func.subs(to_sub)
640
+ vars = vars[:dim]
641
+
642
+ func = fast_callable(func, domain=RDF, vars=vars)
643
+
644
+ if isinstance(func, Wrapper_rdf):
645
+ F.dim = dim
646
+ F.f = c_monte_carlo_ff
647
+ F.params = <void *>func
648
+ else:
649
+ wrapper = PyFunctionWrapper()
650
+ wrapper.the_function = func
651
+
652
+ if not params and len(sage_getargspec(wrapper.the_function)[0]) == dim:
653
+ wrapper.the_parameters = []
654
+ elif not params and len(sage_getargspec(wrapper.the_function)[0]) > dim:
655
+ raise ValueError("Integrand has parameters but no parameters specified")
656
+ elif params:
657
+ wrapper.the_parameters = params
658
+ wrapper.lx = [None] * dim
659
+
660
+ F.dim = dim
661
+ F.f = c_monte_carlo_f
662
+ F.params = <void *> wrapper
663
+
664
+ try:
665
+ # Initialize the random number generator
666
+ gsl_rng_env_setup()
667
+ type_rng = gsl_rng_default
668
+ _rng = gsl_rng_alloc(type_rng)
669
+
670
+ if algorithm == 'plain':
671
+ state_plain = <gsl_monte_plain_state*> gsl_monte_plain_alloc(dim)
672
+ sig_on()
673
+ gsl_monte_plain_integrate(&F, _xl, _xu, dim, calls, _rng,
674
+ state_plain, &result, &abs_err)
675
+ sig_off()
676
+ elif algorithm == 'miser':
677
+ state_miser = <gsl_monte_miser_state*> gsl_monte_miser_alloc(dim)
678
+ sig_on()
679
+ gsl_monte_miser_integrate(&F, _xl, _xu, dim, calls, _rng,
680
+ state_miser, &result, &abs_err)
681
+ sig_off()
682
+ elif algorithm == 'vegas':
683
+ state_vegas = <gsl_monte_vegas_state*> gsl_monte_vegas_alloc(dim)
684
+ sig_on()
685
+ gsl_monte_vegas_integrate(&F, _xl, _xu, dim, calls, _rng,
686
+ state_vegas, &result, &abs_err)
687
+ sig_off()
688
+ finally:
689
+ gsl_rng_free(_rng)
690
+
691
+ if state_plain != NULL:
692
+ gsl_monte_plain_free(state_plain)
693
+ elif state_miser != NULL:
694
+ gsl_monte_miser_free(state_miser)
695
+ elif state_vegas != NULL:
696
+ gsl_monte_vegas_free(state_vegas)
697
+
698
+ return result, abs_err