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,727 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules
3
+ r"""
4
+ Exterior algebras Gröbner bases
5
+
6
+ This contains the backend implementations in Cython for the Gröbner bases
7
+ of exterior algebra.
8
+
9
+ AUTHORS:
10
+
11
+ - Trevor K. Karn, Travis Scrimshaw (July 2022): Initial implementation
12
+ """
13
+
14
+ # ****************************************************************************
15
+ # Copyright (C) 2022 Trevor K. Karn <karnx018 at umn.edu>
16
+ # (C) 2022 Travis Scrimshaw <tcscrims at gmail.com>
17
+ #
18
+ # This program is free software: you can redistribute it and/or modify
19
+ # it under the terms of the GNU General Public License as published by
20
+ # the Free Software Foundation, either version 2 of the License, or
21
+ # (at your option) any later version.
22
+ # https://www.gnu.org/licenses/
23
+ # ****************************************************************************
24
+
25
+ from cysignals.signals cimport sig_check
26
+ from sage.libs.gmp.mpz cimport mpz_sizeinbase, mpz_setbit, mpz_tstbit, mpz_sgn
27
+ from sage.data_structures.bitset_base cimport (bitset_init, bitset_first,
28
+ bitset_next, bitset_set_to, bitset_len)
29
+ from sage.structure.parent cimport Parent
30
+ from sage.structure.richcmp cimport richcmp, rich_to_bool
31
+ from sage.data_structures.blas_dict cimport iaxpy
32
+ from copy import copy
33
+
34
+ cdef inline long degree(FrozenBitset X) noexcept:
35
+ """
36
+ Compute the degree of ``X``.
37
+ """
38
+ return bitset_len(X._bitset)
39
+
40
+
41
+ cdef inline CliffordAlgebraElement build_monomial(Parent E, FrozenBitset supp):
42
+ """
43
+ Helper function for the fastest way to build a monomial.
44
+ """
45
+ return <CliffordAlgebraElement> E.element_class(E, {supp: E._base.one()})
46
+
47
+ cdef class GBElement:
48
+ """
49
+ Helper class for storing an element with its leading support both as
50
+ a :class:`FrozenBitset` and an :class:`Integer`.
51
+ """
52
+ def __init__(self, CliffordAlgebraElement x, FrozenBitset ls, Integer n):
53
+ """
54
+ Initialize ``self``.
55
+
56
+ EXAMPLES::
57
+
58
+ sage: from sage.algebras.exterior_algebra_groebner import GBElement
59
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
60
+ sage: X = GBElement(a, a.leading_support(), 1)
61
+ sage: TestSuite(X).run(skip='_test_pickling')
62
+ """
63
+ self.elt = x
64
+ self.ls = ls
65
+ self.lsi = n
66
+
67
+ def __hash__(self):
68
+ """
69
+ Return the hash of ``self``.
70
+
71
+ EXAMPLES::
72
+
73
+ sage: from sage.algebras.exterior_algebra_groebner import GBElement
74
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
75
+ sage: X = GBElement(a, a.leading_support(), 1)
76
+ sage: hash(X) == 1
77
+ True
78
+ """
79
+ return int(self.lsi)
80
+
81
+ def __richcmp__(self, other, int op):
82
+ """
83
+ Rich compare ``self`` with ``other`` by ``op``.
84
+
85
+ EXAMPLES::
86
+
87
+ sage: from sage.algebras.exterior_algebra_groebner import GBElement
88
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
89
+ sage: X = GBElement(a, a.leading_support(), 1)
90
+ sage: Y = GBElement(a*b, (a*b).leading_support(), 3)
91
+ sage: X == X
92
+ True
93
+ sage: X == Y
94
+ False
95
+ sage: X != Y
96
+ True
97
+ """
98
+ if self is other:
99
+ return rich_to_bool(op, 0)
100
+ return richcmp(self.elt, (<GBElement> other).elt, op)
101
+
102
+ cdef class GroebnerStrategy:
103
+ """
104
+ A strategy for computing a Gröbner basis.
105
+
106
+ INPUT:
107
+
108
+ - ``I`` -- the ideal
109
+ """
110
+ def __init__(self, I):
111
+ """
112
+ Initialize ``self``.
113
+
114
+ EXAMPLES::
115
+
116
+ sage: from sage.algebras.exterior_algebra_groebner import GroebnerStrategy
117
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
118
+ sage: I = E.ideal([a + 1], side='left')
119
+ sage: G = GroebnerStrategy(I)
120
+ sage: TestSuite(G).run(skip='_test_pickling')
121
+ """
122
+ self.ideal = I
123
+ self.groebner_basis = (None,)
124
+ self.E = <Parent> I.ring()
125
+ self.homogeneous = I._homogeneous
126
+ self.rank = Integer(self.E.ngens())
127
+ if self.homogeneous or I.side() == "left":
128
+ self.side = 0
129
+ elif I.side() == "right":
130
+ self.side = 1
131
+ else:
132
+ self.side = 2
133
+
134
+ cdef inline FrozenBitset leading_support(self, CliffordAlgebraElement f):
135
+ """
136
+ Return the leading support of the exterior algebra element ``f``.
137
+ """
138
+ cdef dict mc = <dict> f._monomial_coefficients
139
+ return self.int_to_bitset(max(self.bitset_to_int(k) for k in mc))
140
+
141
+ cdef inline partial_S_poly_left(self, GBElement f, GBElement g):
142
+ r"""
143
+ Compute one half of the `S`-polynomial for ``f`` and ``g``.
144
+
145
+ This computes:
146
+
147
+ .. MATH::
148
+
149
+ LCM(LM(f), LM(g)) / LT(f) \cdot f.
150
+ """
151
+ cdef FrozenBitset D = <FrozenBitset> g.ls.difference(f.ls)
152
+ cdef GBElement ret = self.prod_term_GB(D, f)
153
+ inv = ~ret.elt[ret.ls]
154
+ for k in ret.elt._monomial_coefficients:
155
+ ret.elt._monomial_coefficients[k] *= inv
156
+ return ret
157
+
158
+ cdef inline partial_S_poly_right(self, GBElement f, GBElement g):
159
+ r"""
160
+ Compute one half of the `S`-polynomial for ``f`` and ``g``.
161
+
162
+ This computes:
163
+
164
+ .. MATH::
165
+
166
+ f \cdot LCM(LM(f), LM(g)) / LT(f).
167
+ """
168
+ cdef FrozenBitset D = <FrozenBitset> g.ls.difference(f.ls)
169
+ cdef GBElement ret = self.prod_GB_term(f, D)
170
+ inv = ~ret.elt[ret.ls]
171
+ for k in ret.elt._monomial_coefficients:
172
+ ret.elt._monomial_coefficients[k] *= inv
173
+ return ret
174
+
175
+ cdef inline GBElement build_elt(self, CliffordAlgebraElement f):
176
+ """
177
+ Convert ``f`` into a ``GBElement``.
178
+ """
179
+ cdef dict mc = <dict> f._monomial_coefficients
180
+ # if not mc:
181
+ # return GBElement(f, FrozenBitset(), -1)
182
+ cdef Integer r = <Integer> max(self.bitset_to_int(k) for k in mc)
183
+ return GBElement(f, self.int_to_bitset(r), r)
184
+
185
+ cdef inline GBElement prod_GB_term(self, GBElement f, FrozenBitset t):
186
+ """
187
+ Return the GBElement corresponding to ``f * t``.
188
+
189
+ .. WARNING::
190
+
191
+ This assumes the leading support is ``f.ls._union(t)``.
192
+ """
193
+ ret = f.elt._mul_self_term(self.E, self.E._base.one())
194
+ cdef FrozenBitset ls = <FrozenBitset> f.ls._union(t)
195
+ return GBElement(<CliffordAlgebraElement> ret, ls, self.bitset_to_int(ls))
196
+
197
+ cdef inline GBElement prod_term_GB(self, FrozenBitset t, GBElement f):
198
+ """
199
+ Return the GBElement corresponding to ``t * f``.
200
+
201
+ .. WARNING::
202
+
203
+ This assumes the leading support is ``f.ls._union(t)``.
204
+ """
205
+ ret = f.elt._mul_term_self(t, self.E._base.one())
206
+ cdef FrozenBitset ls = <FrozenBitset> f.ls._union(t)
207
+ return GBElement(<CliffordAlgebraElement> ret, ls, self.bitset_to_int(ls))
208
+
209
+ cdef inline bint build_S_poly(self, GBElement f, GBElement g) noexcept:
210
+ r"""
211
+ Check to see if we should build the `S`-polynomial.
212
+
213
+ For homogeneous ideals, we throw out all those pairs `(f, g)` such that
214
+
215
+ .. MATH::
216
+
217
+ LCM(LM(f), LM(g)) == LM(f) \cdot LM(g).
218
+ """
219
+ if not self.homogeneous:
220
+ return True
221
+
222
+ return (<FrozenBitset> f.ls.intersection(g.ls)).isempty()
223
+
224
+ cdef inline set preprocessing(self, list P, list G):
225
+ """
226
+ Perform the preprocessing step.
227
+ """
228
+ cdef GBElement f, g, f0, f1
229
+ cdef set additions
230
+
231
+ cdef set L = set()
232
+ if self.side == 1:
233
+ for f0, f1 in P:
234
+ if self.build_S_poly(f0, f1):
235
+ L.add(self.partial_S_poly_right(f0, f1))
236
+ L.add(self.partial_S_poly_right(f1, f0))
237
+ else: # We compute a left Gröbner basis for two-sided ideals
238
+ for f0, f1 in P:
239
+ if self.build_S_poly(f0, f1):
240
+ L.add(self.partial_S_poly_left(f0, f1))
241
+ L.add(self.partial_S_poly_left(f1, f0))
242
+
243
+ if self.side == 2 and not self.homogeneous:
244
+ # Add in all S-poly times positive degree monomials
245
+ one = self.E._base.one()
246
+ additions = set((<GBElement> f).elt._mul_self_term(t, one) for t in self.E._indices for f in L)
247
+ L.update(self.build_elt(f) for f in additions if f)
248
+
249
+ cdef set done = set((<GBElement> f).ls for f in L)
250
+ cdef set monL = set()
251
+ for f in L:
252
+ monL.update(f.elt._monomial_coefficients)
253
+ monL.difference_update(done)
254
+
255
+ while monL:
256
+ m = self.int_to_bitset(max(self.bitset_to_int(k) for k in monL))
257
+ done.add(m)
258
+ monL.remove(m)
259
+ for g in G:
260
+ lm = g.ls
261
+ if lm <= m:
262
+ f = self.prod_term_GB(<FrozenBitset> m.difference(lm), g)
263
+ if f in L:
264
+ break
265
+ monL.update(set(f.elt._monomial_coefficients) - done)
266
+ L.add(f)
267
+ break
268
+ return L
269
+
270
+ cdef inline list reduction(self, list P, list G):
271
+ """
272
+ Perform the reduction of ``P`` mod ``G`` in ``E``.
273
+ """
274
+ cdef set L = self.preprocessing(P, G)
275
+ cdef Py_ssize_t i
276
+ from sage.matrix.constructor import matrix
277
+ cdef Integer r = Integer(2) ** self.rank - Integer(1) # r for "rank" or "reverso"
278
+ M = matrix({(i, r - self.bitset_to_int(<FrozenBitset> m)): c
279
+ for i, f in enumerate(L)
280
+ for m, c in (<GBElement> f).elt._monomial_coefficients.items()},
281
+ sparse=True)
282
+ M.echelonize() # Do this in place
283
+ lead_supports = set((<GBElement> f).lsi for f in L)
284
+ return [GBElement(self.E.element_class(self.E, {self.int_to_bitset(r - Integer(j)): c for j, c in M[i].iteritems()}),
285
+ self.int_to_bitset(Integer(r - p)),
286
+ Integer(r - p))
287
+ for i, p in enumerate(M.pivots())
288
+ if r - Integer(p) not in lead_supports]
289
+
290
+ def compute_groebner(self, reduced=True):
291
+ r"""
292
+ Compute the (``reduced``) left/right Gröbner basis for the ideal ``I``.
293
+
294
+ EXAMPLES::
295
+
296
+ sage: E.<y, x> = ExteriorAlgebra(QQ)
297
+ sage: I = E.ideal([x*y - x, x*y - 1], side='left')
298
+ sage: I.groebner_basis() # indirect doctest
299
+ (1,)
300
+ sage: J = E.ideal([x*y - x, 2*x*y - 2], side='left')
301
+ sage: J.groebner_basis() # indirect doctest
302
+ (1,)
303
+
304
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
305
+ sage: I = E.ideal([a+b*c], side='left')
306
+ sage: I.groebner_basis() # indirect doctest
307
+ (b*c + a,)
308
+ sage: I = E.ideal([a+b*c], side='twosided')
309
+ sage: I.groebner_basis() # indirect doctest
310
+ (a*b, a*c, b*c + a, a*d)
311
+ """
312
+ cdef FrozenBitset p0, p1
313
+ cdef long deg
314
+ cdef Py_ssize_t i, j
315
+ cdef GBElement f0, f1
316
+ cdef list G = [], Gp
317
+ cdef dict constructed = {}
318
+ cdef CliffordAlgebraElement f
319
+
320
+ for f in self.ideal.gens():
321
+ if not f: # Remove 0s
322
+ continue
323
+ f0 = self.build_elt(f)
324
+ if f0.lsi in constructed:
325
+ if f0 in constructed[f0.lsi]: # Already there
326
+ continue
327
+ constructed[f0.lsi].add(f0)
328
+ else:
329
+ constructed[f0.lsi] = set([f0])
330
+ G.append(f0)
331
+
332
+ if self.side == 2 and not self.homogeneous:
333
+ # Add in all S-poly times positive degree monomials
334
+ one = self.E._base.one()
335
+ for t in self.E._indices:
336
+ for f0 in G:
337
+ f = f0.elt._mul_self_term(t, one)
338
+ if not f:
339
+ continue
340
+ f1 = self.build_elt(f)
341
+ if f1.lsi in constructed:
342
+ if f1 in constructed[f1.lsi]: # Already there
343
+ continue
344
+ constructed[f1.lsi].add(f1)
345
+ else:
346
+ constructed[f1.lsi] = set([f1])
347
+ G.append(f1)
348
+
349
+ cdef Py_ssize_t n = len(G)
350
+ cdef dict P = {}
351
+
352
+ for i in range(n):
353
+ f0 = <GBElement> G[i]
354
+ p0 = f0.ls
355
+ for j in range(i+1, n):
356
+ f1 = <GBElement> G[j]
357
+ p1 = f1.ls
358
+ deg = degree(<FrozenBitset> (p0._union(p1)))
359
+ if deg in P:
360
+ P[deg].append((f0, f1))
361
+ else:
362
+ P[deg] = [(f0, f1)]
363
+
364
+ while P:
365
+ sig_check()
366
+ Pp = P.pop(min(P)) # The selection: lowest lcm degree
367
+ Gp = self.reduction(Pp, G)
368
+ # Add the elements Gp to G when a new element is found
369
+ for f0 in Gp:
370
+ if f0.lsi in constructed:
371
+ if f0 in constructed[f0.lsi]: # Already there
372
+ continue
373
+ constructed[f0.lsi].add(f0)
374
+ else:
375
+ constructed[f0.lsi] = set([f0])
376
+ G.append(f0)
377
+ # Find the degrees of the new pairs
378
+ for j in range(n, len(G)):
379
+ f1 = G[j]
380
+ p1 = f1.ls
381
+ for i in range(j):
382
+ f0 = G[i]
383
+ p0 = f0.ls
384
+ deg = degree(<FrozenBitset> (p0._union(p1)))
385
+ if deg in P:
386
+ P[deg].append((f0, f1))
387
+ else:
388
+ P[deg] = [(f0, f1)]
389
+ n = len(G)
390
+
391
+ G.sort(key=lambda x: (<GBElement> x).lsi)
392
+
393
+ if not reduced:
394
+ self.groebner_basis = tuple([(<GBElement> f0).elt for f0 in G if (<GBElement> f0).elt])
395
+ return
396
+ self.reduced_gb(G)
397
+
398
+ cdef int reduced_gb(self, list G) except -1:
399
+ """
400
+ Convert the Gröbner basis ``G`` into a reduced Gröbner basis.
401
+ """
402
+ cdef Py_ssize_t i, j, k
403
+ cdef GBElement f0, f1
404
+
405
+ # Now that we have a Gröbner basis, we make this into a reduced Gröbner basis
406
+ cdef Py_ssize_t num_zeros = 0
407
+ cdef Py_ssize_t n = len(G)
408
+ cdef set pairs = set((i, j) for i in range(n) for j in range(n) if i != j)
409
+
410
+ while pairs:
411
+ sig_check()
412
+ i, j = pairs.pop()
413
+ f0 = <GBElement> G[i]
414
+ f1 = <GBElement> G[j]
415
+ assert f0.elt._monomial_coefficients is not f1.elt._monomial_coefficients, (i, j)
416
+ # We perform the classical reduction algorithm here on each pair
417
+ # TODO: Make this faster by using the previous technique?
418
+ if self.reduce_single(f0.elt, f1.elt):
419
+ if f0.elt:
420
+ G[i] = self.build_elt(f0.elt)
421
+ pairs.update((k, i) for k in range(n) if k != i)
422
+ else:
423
+ G[i] = GBElement(f0.elt, FrozenBitset(), Integer(2)**self.rank + 1)
424
+ num_zeros += 1
425
+ pairs.difference_update((k, i) for k in range(n) if k != i)
426
+ pairs.difference_update((i, k) for k in range(n) if k != i)
427
+
428
+ G.sort(key=lambda x: (<GBElement> x).lsi)
429
+ for i in range(len(G)-num_zeros):
430
+ f0 = <GBElement> G[i]
431
+ if f0.elt:
432
+ inv = ~f0.elt[f0.ls]
433
+ for key in f0.elt._monomial_coefficients:
434
+ f0.elt._monomial_coefficients[key] *= inv
435
+ self.groebner_basis = tuple([f0.elt for f0 in G[:len(G)-num_zeros]])
436
+ return 0
437
+
438
+ def reduce_computed_gb(self):
439
+ """
440
+ Convert the computed Gröbner basis to a reduced Gröbner basis.
441
+
442
+ EXAMPLES::
443
+
444
+ sage: E.<x,y,z> = ExteriorAlgebra(QQ)
445
+ sage: I = E.ideal([x+y*z])
446
+ sage: I.groebner_basis(reduced=False)
447
+ (x*y, x*z, y*z + x, x*y*z)
448
+ sage: I._groebner_strategy.reduce_computed_gb()
449
+ sage: I._groebner_strategy.groebner_basis
450
+ (x*y, x*z, y*z + x)
451
+ """
452
+ if self.groebner_basis == [(None,)]:
453
+ raise ValueError("Gröbner basis not yet computed")
454
+ cdef list G = [self.build_elt(f) for f in self.groebner_basis]
455
+ self.reduced_gb(G)
456
+
457
+ cpdef CliffordAlgebraElement reduce(self, CliffordAlgebraElement f):
458
+ """
459
+ Reduce ``f`` modulo the ideal with Gröbner basis ``G``.
460
+
461
+ EXAMPLES::
462
+
463
+ sage: E.<a,b,c,d,e> = ExteriorAlgebra(QQ)
464
+ sage: rels = [c*d*e - b*d*e + b*c*e - b*c*d,
465
+ ....: c*d*e - a*d*e + a*c*e - a*c*d,
466
+ ....: b*d*e - a*d*e + a*b*e - a*b*d,
467
+ ....: b*c*e - a*c*e + a*b*e - a*b*c,
468
+ ....: b*c*d - a*c*d + a*b*d - a*b*c]
469
+ sage: I = E.ideal(rels)
470
+ sage: GB = I.groebner_basis()
471
+ sage: I._groebner_strategy.reduce(a*b*e)
472
+ a*b*e
473
+ sage: I._groebner_strategy.reduce(b*d*e)
474
+ a*b*d - a*b*e + a*d*e
475
+ sage: I._groebner_strategy.reduce(c*d*e)
476
+ a*c*d - a*c*e + a*d*e
477
+ sage: I._groebner_strategy.reduce(a*b*c*d*e)
478
+ 0
479
+ sage: I._groebner_strategy.reduce(a*b*c*d)
480
+ 0
481
+ sage: I._groebner_strategy.reduce(E.zero())
482
+ 0
483
+
484
+ Check :issue:`37108` is fixed::
485
+
486
+ sage: E = ExteriorAlgebra(QQ, 6)
487
+ sage: E.inject_variables(verbose=False)
488
+ sage: gens = [-e0*e1*e2 + e0*e1*e5 - e0*e2*e3 - e0*e3*e5 + e1*e2*e3 + e1*e3*e5,
489
+ ....: e1*e2 - e1*e5 + e2*e5, e0*e2 - e0*e4 + e2*e4,
490
+ ....: e3*e4 - e3*e5 + e4*e5, e0*e1 - e0*e3 + e1*e3]
491
+ sage: I = E.ideal(gens)
492
+ sage: S = E.quo(I)
493
+ sage: I.reduce(e1*e3*e4*e5)
494
+ 0
495
+ """
496
+ if not f:
497
+ return f
498
+ # Make a copy to mutate
499
+ f = type(f)(f._parent, copy(f._monomial_coefficients))
500
+ was_reduced = True
501
+ while was_reduced:
502
+ was_reduced = False
503
+ for g in self.groebner_basis:
504
+ was_reduced = self.reduce_single(f, g)
505
+ if was_reduced:
506
+ break
507
+ return f
508
+
509
+ cdef bint reduce_single(self, CliffordAlgebraElement f, CliffordAlgebraElement g) except -1:
510
+ r"""
511
+ Reduce ``f`` by ``g``.
512
+
513
+ .. WARNING::
514
+
515
+ This modifies the element ``f``.
516
+ """
517
+ cdef FrozenBitset lm = self.leading_support(g), s, t
518
+ cdef bint did_reduction = True, was_reduced=False
519
+ cdef CliffordAlgebraElement gp
520
+
521
+ one = self.E._base.one()
522
+ while did_reduction:
523
+ did_reduction = False
524
+ for s in f._monomial_coefficients:
525
+ if lm.issubset(s):
526
+ t = s
527
+ did_reduction = True
528
+ was_reduced = True
529
+ break
530
+ if did_reduction:
531
+ if self.side == 0:
532
+ gp = g._mul_term_self(t - lm, one)
533
+ else:
534
+ gp = g._mul_self_term(t - lm, one)
535
+ coeff = f[t] / gp._monomial_coefficients[t]
536
+ iaxpy(-coeff, gp._monomial_coefficients, f._monomial_coefficients)
537
+ return was_reduced
538
+
539
+ cdef Integer bitset_to_int(self, FrozenBitset X):
540
+ raise NotImplementedError
541
+
542
+ cdef FrozenBitset int_to_bitset(self, Integer n):
543
+ raise NotImplementedError
544
+
545
+ def sorted_monomials(self, as_dict=False):
546
+ """
547
+ Helper function to display the monomials in their term order
548
+ used by ``self``.
549
+
550
+ EXAMPLES::
551
+
552
+ sage: from sage.algebras.exterior_algebra_groebner import *
553
+ sage: E.<x,y,z> = ExteriorAlgebra(QQ)
554
+ sage: I = E.ideal([x, y])
555
+ sage: GroebnerStrategyNegLex(I).sorted_monomials()
556
+ [1, x, y, x*y, z, x*z, y*z, x*y*z]
557
+ sage: GroebnerStrategyDegLex(I).sorted_monomials()
558
+ [1, x, y, z, x*y, x*z, y*z, x*y*z]
559
+ sage: GroebnerStrategyDegRevLex(I).sorted_monomials()
560
+ [1, z, y, x, y*z, x*z, x*y, x*y*z]
561
+
562
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
563
+ sage: I = E.ideal([a, b])
564
+ sage: GroebnerStrategyNegLex(I).sorted_monomials()
565
+ [1,
566
+ a,
567
+ b, a*b,
568
+ c, a*c, b*c, a*b*c,
569
+ d, a*d, b*d, a*b*d, c*d, a*c*d, b*c*d, a*b*c*d]
570
+ sage: GroebnerStrategyDegLex(I).sorted_monomials()
571
+ [1,
572
+ a, b, c, d,
573
+ a*b, a*c, a*d, b*c, b*d, c*d,
574
+ a*b*c, a*b*d, a*c*d, b*c*d,
575
+ a*b*c*d]
576
+ sage: GroebnerStrategyDegRevLex(I).sorted_monomials()
577
+ [1,
578
+ d, c, b, a,
579
+ c*d, b*d, a*d, b*c, a*c, a*b,
580
+ b*c*d, a*c*d, a*b*d, a*b*c,
581
+ a*b*c*d]
582
+ """
583
+ cdef FrozenBitset X
584
+ cdef Integer i
585
+ cdef list D = [self.bitset_to_int(X) for X in self.E._indices]
586
+ D.sort()
587
+ if as_dict:
588
+ return {i: build_monomial(self.E, self.int_to_bitset(i)) for i in D}
589
+ return [build_monomial(self.E, self.int_to_bitset(i)) for i in D]
590
+
591
+ def monomial_to_int(self):
592
+ """
593
+ Helper function to display the monomials in their term order
594
+ used by ``self``.
595
+
596
+ EXAMPLES::
597
+
598
+ sage: from sage.algebras.exterior_algebra_groebner import *
599
+ sage: E.<a,b,c,d> = ExteriorAlgebra(QQ)
600
+ sage: I = E.ideal([a, b])
601
+ sage: GroebnerStrategyDegLex(I).monomial_to_int()
602
+ {1: 0,
603
+ a: 1, b: 2, c: 3, d: 4,
604
+ a*b: 5, a*c: 6, a*d: 7, b*c: 8, b*d: 9, c*d: 10,
605
+ a*b*c: 11, a*b*d: 12, a*c*d: 13, b*c*d: 14,
606
+ a*b*c*d: 15}
607
+ sage: GroebnerStrategyDegRevLex(I).monomial_to_int()
608
+ {1: 0,
609
+ a: 4, b: 3, c: 2, d: 1,
610
+ a*b: 10, a*c: 9, a*d: 7, b*c: 8, b*d: 6, c*d: 5,
611
+ a*b*c: 14, a*b*d: 13, a*c*d: 12, b*c*d: 11,
612
+ a*b*c*d: 15}
613
+ """
614
+ B = self.E.basis()
615
+ return {B[X]: self.bitset_to_int(X) for X in self.E._indices}
616
+
617
+ cdef class GroebnerStrategyNegLex(GroebnerStrategy):
618
+ """
619
+ Gröbner basis strategy implementing neglex ordering.
620
+ """
621
+ cdef inline Integer bitset_to_int(self, FrozenBitset X):
622
+ """
623
+ Convert ``X`` to an :class:`Integer`.
624
+ """
625
+ cdef Integer ret = Integer(0)
626
+ cdef long elt = bitset_first(X._bitset)
627
+ while elt >= 0:
628
+ mpz_setbit(ret.value, elt)
629
+ elt = bitset_next(X._bitset, elt + 1)
630
+ return ret
631
+
632
+ cdef inline FrozenBitset int_to_bitset(self, Integer n):
633
+ """
634
+ Convert a nonnegative integer ``n`` to a :class:`FrozenBitset`.
635
+ """
636
+ cdef size_t i
637
+
638
+ if mpz_sgn(n.value) == 0:
639
+ return FrozenBitset()
640
+
641
+ cdef FrozenBitset ret = <FrozenBitset> FrozenBitset()
642
+ cdef size_t s = mpz_sizeinbase(n.value, 2)
643
+ bitset_init(ret._bitset, s)
644
+ for i in range(s):
645
+ bitset_set_to(ret._bitset, i, mpz_tstbit(n.value, i))
646
+ return ret
647
+
648
+ cdef class GroebnerStrategyDegRevLex(GroebnerStrategy):
649
+ """
650
+ Gröbner basis strategy implementing degree revlex ordering.
651
+ """
652
+ cdef inline Integer bitset_to_int(self, FrozenBitset X):
653
+ """
654
+ Convert ``X`` to an :class:`Integer`.
655
+ """
656
+ if X.isempty():
657
+ return Integer(0)
658
+
659
+ cdef Integer n = self.rank
660
+ cdef long i, deg = degree(X)
661
+ cdef long r = 1
662
+ cdef Integer t = Integer(0)
663
+
664
+ cdef long elt = bitset_first(X._bitset)
665
+ while elt >= 0:
666
+ t += Integer(elt).binomial(r)
667
+ r += 1
668
+ elt = bitset_next(X._bitset, elt + 1)
669
+ return Integer(sum(n.binomial(i) for i in range(deg+1)) - t - 1)
670
+
671
+ cdef inline FrozenBitset int_to_bitset(self, Integer n):
672
+ """
673
+ Convert a nonnegative integer ``n`` to a :class:`FrozenBitset`.
674
+ """
675
+ if mpz_sgn(n.value) == 0:
676
+ return FrozenBitset()
677
+
678
+ cdef Py_ssize_t deg = 0
679
+ cdef Integer binom = Integer(1)
680
+ while n >= binom:
681
+ n -= binom
682
+ deg += 1
683
+ binom = self.rank.binomial(deg)
684
+
685
+ # TODO: Cythonize the from_rank
686
+ from sage.combinat.combination import from_rank
687
+ return FrozenBitset([self.rank - val - 1 for val in from_rank(n, self.rank, deg)])
688
+
689
+ cdef class GroebnerStrategyDegLex(GroebnerStrategy):
690
+ """
691
+ Gröbner basis strategy implementing degree lex ordering.
692
+ """
693
+ cdef inline Integer bitset_to_int(self, FrozenBitset X):
694
+ """
695
+ Convert ``X`` to an :class:`Integer`.
696
+ """
697
+ if X.isempty():
698
+ return Integer(0)
699
+
700
+ cdef Integer n = self.rank
701
+ cdef long i, deg = degree(X)
702
+ cdef long r = deg
703
+ cdef Integer t = Integer(0)
704
+
705
+ cdef long elt = bitset_first(X._bitset)
706
+ while elt >= 0:
707
+ t += Integer(n - 1 - elt).binomial(r)
708
+ r -= 1
709
+ elt = bitset_next(X._bitset, elt + 1)
710
+ return Integer(sum(n.binomial(i) for i in range(deg+1)) - t - 1)
711
+
712
+ cdef inline FrozenBitset int_to_bitset(self, Integer n):
713
+ """
714
+ Convert a nonnegative integer ``n`` to a :class:`FrozenBitset`.
715
+ """
716
+ if mpz_sgn(n.value) == 0:
717
+ return FrozenBitset()
718
+
719
+ cdef Py_ssize_t deg = 0
720
+ cdef Integer binom = Integer(1)
721
+ while n >= binom:
722
+ n -= binom
723
+ deg += 1
724
+ binom = self.rank.binomial(deg)
725
+
726
+ from sage.combinat.combination import from_rank
727
+ return FrozenBitset(from_rank(n, self.rank, deg))