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

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

Potentially problematic release.


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

Files changed (806) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +806 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-e1b7dfc8.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-e3525837.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-c5c421e1.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  11. sage/algebras/all__sagemath_modules.py +20 -0
  12. sage/algebras/catalog.py +148 -0
  13. sage/algebras/clifford_algebra.py +3107 -0
  14. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  15. sage/algebras/clifford_algebra_element.pxd +16 -0
  16. sage/algebras/clifford_algebra_element.pyx +997 -0
  17. sage/algebras/commutative_dga.py +4252 -0
  18. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-gnu.so +0 -0
  19. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  20. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  21. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  22. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  28. sage/algebras/finite_gca.py +528 -0
  29. sage/algebras/group_algebra.py +232 -0
  30. sage/algebras/lie_algebras/abelian.py +197 -0
  31. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  32. sage/algebras/lie_algebras/all.py +25 -0
  33. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  34. sage/algebras/lie_algebras/bch.py +177 -0
  35. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  36. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  37. sage/algebras/lie_algebras/center_uea.py +767 -0
  38. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  39. sage/algebras/lie_algebras/examples.py +683 -0
  40. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  41. sage/algebras/lie_algebras/heisenberg.py +820 -0
  42. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  43. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-gnu.so +0 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  46. sage/algebras/lie_algebras/morphism.py +661 -0
  47. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  48. sage/algebras/lie_algebras/onsager.py +1324 -0
  49. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  50. sage/algebras/lie_algebras/quotient.py +462 -0
  51. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  52. sage/algebras/lie_algebras/representation.py +1040 -0
  53. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  54. sage/algebras/lie_algebras/subalgebra.py +967 -0
  55. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  56. sage/algebras/lie_algebras/verma_module.py +1630 -0
  57. sage/algebras/lie_algebras/virasoro.py +1186 -0
  58. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-gnu.so +0 -0
  59. sage/algebras/octonion_algebra.pxd +20 -0
  60. sage/algebras/octonion_algebra.pyx +987 -0
  61. sage/algebras/orlik_solomon.py +907 -0
  62. sage/algebras/orlik_terao.py +779 -0
  63. sage/algebras/steenrod/all.py +7 -0
  64. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  65. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  66. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  67. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  68. sage/algebras/weyl_algebra.py +1126 -0
  69. sage/all__sagemath_modules.py +62 -0
  70. sage/calculus/all__sagemath_modules.py +19 -0
  71. sage/calculus/expr.py +205 -0
  72. sage/calculus/integration.cpython-314-aarch64-linux-gnu.so +0 -0
  73. sage/calculus/integration.pyx +698 -0
  74. sage/calculus/interpolation.cpython-314-aarch64-linux-gnu.so +0 -0
  75. sage/calculus/interpolation.pxd +13 -0
  76. sage/calculus/interpolation.pyx +387 -0
  77. sage/calculus/interpolators.cpython-314-aarch64-linux-gnu.so +0 -0
  78. sage/calculus/interpolators.pyx +326 -0
  79. sage/calculus/ode.cpython-314-aarch64-linux-gnu.so +0 -0
  80. sage/calculus/ode.pxd +5 -0
  81. sage/calculus/ode.pyx +610 -0
  82. sage/calculus/riemann.cpython-314-aarch64-linux-gnu.so +0 -0
  83. sage/calculus/riemann.pyx +1521 -0
  84. sage/calculus/test_sympy.py +201 -0
  85. sage/calculus/transforms/all.py +7 -0
  86. sage/calculus/transforms/dft.py +844 -0
  87. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-gnu.so +0 -0
  88. sage/calculus/transforms/dwt.pxd +7 -0
  89. sage/calculus/transforms/dwt.pyx +160 -0
  90. sage/calculus/transforms/fft.cpython-314-aarch64-linux-gnu.so +0 -0
  91. sage/calculus/transforms/fft.pxd +12 -0
  92. sage/calculus/transforms/fft.pyx +487 -0
  93. sage/calculus/wester.py +662 -0
  94. sage/coding/abstract_code.py +1108 -0
  95. sage/coding/ag_code.py +868 -0
  96. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-gnu.so +0 -0
  97. sage/coding/ag_code_decoders.pyx +2639 -0
  98. sage/coding/all.py +15 -0
  99. sage/coding/bch_code.py +494 -0
  100. sage/coding/binary_code.cpython-314-aarch64-linux-gnu.so +0 -0
  101. sage/coding/binary_code.pxd +124 -0
  102. sage/coding/binary_code.pyx +4139 -0
  103. sage/coding/bounds_catalog.py +43 -0
  104. sage/coding/channel.py +819 -0
  105. sage/coding/channels_catalog.py +29 -0
  106. sage/coding/code_bounds.py +755 -0
  107. sage/coding/code_constructions.py +804 -0
  108. sage/coding/codes_catalog.py +111 -0
  109. sage/coding/cyclic_code.py +1329 -0
  110. sage/coding/databases.py +316 -0
  111. sage/coding/decoder.py +373 -0
  112. sage/coding/decoders_catalog.py +88 -0
  113. sage/coding/delsarte_bounds.py +709 -0
  114. sage/coding/encoder.py +390 -0
  115. sage/coding/encoders_catalog.py +64 -0
  116. sage/coding/extended_code.py +468 -0
  117. sage/coding/gabidulin_code.py +1058 -0
  118. sage/coding/golay_code.py +404 -0
  119. sage/coding/goppa_code.py +441 -0
  120. sage/coding/grs_code.py +2371 -0
  121. sage/coding/guava.py +107 -0
  122. sage/coding/guruswami_sudan/all.py +1 -0
  123. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  124. sage/coding/guruswami_sudan/interpolation.py +409 -0
  125. sage/coding/guruswami_sudan/utils.py +176 -0
  126. sage/coding/hamming_code.py +176 -0
  127. sage/coding/information_set_decoder.py +1032 -0
  128. sage/coding/kasami_codes.cpython-314-aarch64-linux-gnu.so +0 -0
  129. sage/coding/kasami_codes.pyx +351 -0
  130. sage/coding/linear_code.py +3067 -0
  131. sage/coding/linear_code_no_metric.py +1354 -0
  132. sage/coding/linear_rank_metric.py +961 -0
  133. sage/coding/parity_check_code.py +353 -0
  134. sage/coding/punctured_code.py +719 -0
  135. sage/coding/reed_muller_code.py +999 -0
  136. sage/coding/self_dual_codes.py +942 -0
  137. sage/coding/source_coding/all.py +2 -0
  138. sage/coding/source_coding/huffman.py +553 -0
  139. sage/coding/subfield_subcode.py +423 -0
  140. sage/coding/two_weight_db.py +399 -0
  141. sage/combinat/all__sagemath_modules.py +7 -0
  142. sage/combinat/cartesian_product.py +347 -0
  143. sage/combinat/family.py +11 -0
  144. sage/combinat/free_module.py +1977 -0
  145. sage/combinat/root_system/all.py +147 -0
  146. sage/combinat/root_system/ambient_space.py +527 -0
  147. sage/combinat/root_system/associahedron.py +471 -0
  148. sage/combinat/root_system/braid_move_calculator.py +143 -0
  149. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-gnu.so +0 -0
  150. sage/combinat/root_system/braid_orbit.pyx +144 -0
  151. sage/combinat/root_system/branching_rules.py +2301 -0
  152. sage/combinat/root_system/cartan_matrix.py +1245 -0
  153. sage/combinat/root_system/cartan_type.py +3069 -0
  154. sage/combinat/root_system/coxeter_group.py +162 -0
  155. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  156. sage/combinat/root_system/coxeter_type.py +681 -0
  157. sage/combinat/root_system/dynkin_diagram.py +900 -0
  158. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  159. sage/combinat/root_system/fundamental_group.py +795 -0
  160. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  161. sage/combinat/root_system/integrable_representations.py +1227 -0
  162. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  163. sage/combinat/root_system/pieri_factors.py +1147 -0
  164. sage/combinat/root_system/plot.py +1615 -0
  165. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  166. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  167. sage/combinat/root_system/root_space.py +487 -0
  168. sage/combinat/root_system/root_system.py +882 -0
  169. sage/combinat/root_system/type_A.py +348 -0
  170. sage/combinat/root_system/type_A_affine.py +227 -0
  171. sage/combinat/root_system/type_A_infinity.py +241 -0
  172. sage/combinat/root_system/type_B.py +347 -0
  173. sage/combinat/root_system/type_BC_affine.py +287 -0
  174. sage/combinat/root_system/type_B_affine.py +216 -0
  175. sage/combinat/root_system/type_C.py +317 -0
  176. sage/combinat/root_system/type_C_affine.py +188 -0
  177. sage/combinat/root_system/type_D.py +357 -0
  178. sage/combinat/root_system/type_D_affine.py +208 -0
  179. sage/combinat/root_system/type_E.py +641 -0
  180. sage/combinat/root_system/type_E_affine.py +231 -0
  181. sage/combinat/root_system/type_F.py +387 -0
  182. sage/combinat/root_system/type_F_affine.py +137 -0
  183. sage/combinat/root_system/type_G.py +293 -0
  184. sage/combinat/root_system/type_G_affine.py +132 -0
  185. sage/combinat/root_system/type_H.py +105 -0
  186. sage/combinat/root_system/type_I.py +110 -0
  187. sage/combinat/root_system/type_Q.py +150 -0
  188. sage/combinat/root_system/type_affine.py +509 -0
  189. sage/combinat/root_system/type_dual.py +704 -0
  190. sage/combinat/root_system/type_folded.py +301 -0
  191. sage/combinat/root_system/type_marked.py +748 -0
  192. sage/combinat/root_system/type_reducible.py +601 -0
  193. sage/combinat/root_system/type_relabel.py +730 -0
  194. sage/combinat/root_system/type_super_A.py +837 -0
  195. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  196. sage/combinat/root_system/weight_space.py +639 -0
  197. sage/combinat/root_system/weyl_characters.py +2238 -0
  198. sage/crypto/__init__.py +4 -0
  199. sage/crypto/all.py +28 -0
  200. sage/crypto/block_cipher/all.py +7 -0
  201. sage/crypto/block_cipher/des.py +1065 -0
  202. sage/crypto/block_cipher/miniaes.py +2171 -0
  203. sage/crypto/block_cipher/present.py +909 -0
  204. sage/crypto/block_cipher/sdes.py +1527 -0
  205. sage/crypto/boolean_function.cpython-314-aarch64-linux-gnu.so +0 -0
  206. sage/crypto/boolean_function.pxd +10 -0
  207. sage/crypto/boolean_function.pyx +1487 -0
  208. sage/crypto/cipher.py +78 -0
  209. sage/crypto/classical.py +3668 -0
  210. sage/crypto/classical_cipher.py +569 -0
  211. sage/crypto/cryptosystem.py +387 -0
  212. sage/crypto/key_exchange/all.py +7 -0
  213. sage/crypto/key_exchange/catalog.py +24 -0
  214. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  215. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  216. sage/crypto/lattice.py +312 -0
  217. sage/crypto/lfsr.py +295 -0
  218. sage/crypto/lwe.py +840 -0
  219. sage/crypto/mq/__init__.py +4 -0
  220. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  221. sage/crypto/mq/rijndael_gf.py +2345 -0
  222. sage/crypto/mq/sbox.py +7 -0
  223. sage/crypto/mq/sr.py +3344 -0
  224. sage/crypto/public_key/all.py +5 -0
  225. sage/crypto/public_key/blum_goldwasser.py +776 -0
  226. sage/crypto/sbox.cpython-314-aarch64-linux-gnu.so +0 -0
  227. sage/crypto/sbox.pyx +2090 -0
  228. sage/crypto/sboxes.py +2090 -0
  229. sage/crypto/stream.py +390 -0
  230. sage/crypto/stream_cipher.py +297 -0
  231. sage/crypto/util.py +519 -0
  232. sage/ext/all__sagemath_modules.py +1 -0
  233. sage/ext/interpreters/__init__.py +1 -0
  234. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  235. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-gnu.so +0 -0
  236. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  237. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  238. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-gnu.so +0 -0
  239. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  240. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  241. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-gnu.so +0 -0
  242. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  243. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  244. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-gnu.so +0 -0
  245. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  246. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  247. sage/geometry/all__sagemath_modules.py +5 -0
  248. sage/geometry/toric_lattice.py +1745 -0
  249. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-gnu.so +0 -0
  250. sage/geometry/toric_lattice_element.pyx +432 -0
  251. sage/groups/abelian_gps/abelian_group.py +1925 -0
  252. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  253. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  254. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  255. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  256. sage/groups/abelian_gps/element_base.py +341 -0
  257. sage/groups/abelian_gps/values.py +488 -0
  258. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  259. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  260. sage/groups/additive_abelian/all.py +4 -0
  261. sage/groups/additive_abelian/qmodnz.py +231 -0
  262. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  263. sage/groups/affine_gps/affine_group.py +535 -0
  264. sage/groups/affine_gps/all.py +1 -0
  265. sage/groups/affine_gps/catalog.py +17 -0
  266. sage/groups/affine_gps/euclidean_group.py +246 -0
  267. sage/groups/affine_gps/group_element.py +562 -0
  268. sage/groups/all__sagemath_modules.py +12 -0
  269. sage/groups/galois_group.py +479 -0
  270. sage/groups/matrix_gps/all.py +4 -0
  271. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  272. sage/groups/matrix_gps/catalog.py +26 -0
  273. sage/groups/matrix_gps/coxeter_group.py +927 -0
  274. sage/groups/matrix_gps/finitely_generated.py +487 -0
  275. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-gnu.so +0 -0
  276. sage/groups/matrix_gps/group_element.pxd +11 -0
  277. sage/groups/matrix_gps/group_element.pyx +431 -0
  278. sage/groups/matrix_gps/linear.py +440 -0
  279. sage/groups/matrix_gps/matrix_group.py +617 -0
  280. sage/groups/matrix_gps/named_group.py +296 -0
  281. sage/groups/matrix_gps/orthogonal.py +544 -0
  282. sage/groups/matrix_gps/symplectic.py +251 -0
  283. sage/groups/matrix_gps/unitary.py +436 -0
  284. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  285. sage/groups/misc_gps/argument_groups.py +1905 -0
  286. sage/groups/misc_gps/imaginary_groups.py +479 -0
  287. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  288. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-gnu.so +0 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  292. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-gnu.so +0 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  295. sage/homology/algebraic_topological_model.py +595 -0
  296. sage/homology/all.py +2 -0
  297. sage/homology/all__sagemath_modules.py +8 -0
  298. sage/homology/chain_complex.py +2148 -0
  299. sage/homology/chain_complex_homspace.py +165 -0
  300. sage/homology/chain_complex_morphism.py +629 -0
  301. sage/homology/chain_homotopy.py +604 -0
  302. sage/homology/chains.py +653 -0
  303. sage/homology/free_resolution.py +923 -0
  304. sage/homology/graded_resolution.py +567 -0
  305. sage/homology/hochschild_complex.py +756 -0
  306. sage/homology/homology_group.py +188 -0
  307. sage/homology/homology_morphism.py +422 -0
  308. sage/homology/homology_vector_space_with_basis.py +1454 -0
  309. sage/homology/koszul_complex.py +169 -0
  310. sage/homology/matrix_utils.py +205 -0
  311. sage/libs/all__sagemath_modules.py +1 -0
  312. sage/libs/gsl/__init__.py +1 -0
  313. sage/libs/gsl/airy.pxd +56 -0
  314. sage/libs/gsl/all.pxd +66 -0
  315. sage/libs/gsl/array.cpython-314-aarch64-linux-gnu.so +0 -0
  316. sage/libs/gsl/array.pxd +5 -0
  317. sage/libs/gsl/array.pyx +102 -0
  318. sage/libs/gsl/bessel.pxd +208 -0
  319. sage/libs/gsl/blas.pxd +116 -0
  320. sage/libs/gsl/blas_types.pxd +34 -0
  321. sage/libs/gsl/block.pxd +52 -0
  322. sage/libs/gsl/chebyshev.pxd +37 -0
  323. sage/libs/gsl/clausen.pxd +12 -0
  324. sage/libs/gsl/combination.pxd +47 -0
  325. sage/libs/gsl/complex.pxd +151 -0
  326. sage/libs/gsl/coulomb.pxd +30 -0
  327. sage/libs/gsl/coupling.pxd +21 -0
  328. sage/libs/gsl/dawson.pxd +12 -0
  329. sage/libs/gsl/debye.pxd +24 -0
  330. sage/libs/gsl/dilog.pxd +14 -0
  331. sage/libs/gsl/eigen.pxd +46 -0
  332. sage/libs/gsl/elementary.pxd +12 -0
  333. sage/libs/gsl/ellint.pxd +48 -0
  334. sage/libs/gsl/elljac.pxd +8 -0
  335. sage/libs/gsl/erf.pxd +32 -0
  336. sage/libs/gsl/errno.pxd +26 -0
  337. sage/libs/gsl/exp.pxd +44 -0
  338. sage/libs/gsl/expint.pxd +44 -0
  339. sage/libs/gsl/fermi_dirac.pxd +44 -0
  340. sage/libs/gsl/fft.pxd +121 -0
  341. sage/libs/gsl/fit.pxd +50 -0
  342. sage/libs/gsl/gamma.pxd +94 -0
  343. sage/libs/gsl/gegenbauer.pxd +26 -0
  344. sage/libs/gsl/histogram.pxd +176 -0
  345. sage/libs/gsl/hyperg.pxd +52 -0
  346. sage/libs/gsl/integration.pxd +69 -0
  347. sage/libs/gsl/interp.pxd +109 -0
  348. sage/libs/gsl/laguerre.pxd +24 -0
  349. sage/libs/gsl/lambert.pxd +16 -0
  350. sage/libs/gsl/legendre.pxd +90 -0
  351. sage/libs/gsl/linalg.pxd +185 -0
  352. sage/libs/gsl/log.pxd +26 -0
  353. sage/libs/gsl/math.pxd +43 -0
  354. sage/libs/gsl/matrix.pxd +143 -0
  355. sage/libs/gsl/matrix_complex.pxd +130 -0
  356. sage/libs/gsl/min.pxd +67 -0
  357. sage/libs/gsl/monte.pxd +56 -0
  358. sage/libs/gsl/ntuple.pxd +32 -0
  359. sage/libs/gsl/odeiv.pxd +70 -0
  360. sage/libs/gsl/permutation.pxd +78 -0
  361. sage/libs/gsl/poly.pxd +40 -0
  362. sage/libs/gsl/pow_int.pxd +12 -0
  363. sage/libs/gsl/psi.pxd +28 -0
  364. sage/libs/gsl/qrng.pxd +29 -0
  365. sage/libs/gsl/random.pxd +257 -0
  366. sage/libs/gsl/rng.pxd +100 -0
  367. sage/libs/gsl/roots.pxd +72 -0
  368. sage/libs/gsl/sort.pxd +36 -0
  369. sage/libs/gsl/statistics.pxd +59 -0
  370. sage/libs/gsl/sum.pxd +55 -0
  371. sage/libs/gsl/synchrotron.pxd +16 -0
  372. sage/libs/gsl/transport.pxd +24 -0
  373. sage/libs/gsl/trig.pxd +58 -0
  374. sage/libs/gsl/types.pxd +137 -0
  375. sage/libs/gsl/vector.pxd +101 -0
  376. sage/libs/gsl/vector_complex.pxd +83 -0
  377. sage/libs/gsl/wavelet.pxd +49 -0
  378. sage/libs/gsl/zeta.pxd +28 -0
  379. sage/libs/mpc/__init__.pxd +114 -0
  380. sage/libs/mpc/types.pxd +28 -0
  381. sage/libs/mpfr/__init__.pxd +299 -0
  382. sage/libs/mpfr/types.pxd +26 -0
  383. sage/libs/mpmath/__init__.py +1 -0
  384. sage/libs/mpmath/all.py +27 -0
  385. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  386. sage/libs/mpmath/utils.cpython-314-aarch64-linux-gnu.so +0 -0
  387. sage/libs/mpmath/utils.pxd +4 -0
  388. sage/libs/mpmath/utils.pyx +319 -0
  389. sage/matrix/action.cpython-314-aarch64-linux-gnu.so +0 -0
  390. sage/matrix/action.pxd +26 -0
  391. sage/matrix/action.pyx +596 -0
  392. sage/matrix/all.py +9 -0
  393. sage/matrix/args.cpython-314-aarch64-linux-gnu.so +0 -0
  394. sage/matrix/args.pxd +144 -0
  395. sage/matrix/args.pyx +1668 -0
  396. sage/matrix/benchmark.py +1258 -0
  397. sage/matrix/berlekamp_massey.py +95 -0
  398. sage/matrix/compute_J_ideal.py +926 -0
  399. sage/matrix/constructor.cpython-314-aarch64-linux-gnu.so +0 -0
  400. sage/matrix/constructor.pyx +750 -0
  401. sage/matrix/docs.py +430 -0
  402. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  403. sage/matrix/echelon_matrix.pyx +155 -0
  404. sage/matrix/matrix.pxd +2 -0
  405. sage/matrix/matrix0.cpython-314-aarch64-linux-gnu.so +0 -0
  406. sage/matrix/matrix0.pxd +68 -0
  407. sage/matrix/matrix0.pyx +6324 -0
  408. sage/matrix/matrix1.cpython-314-aarch64-linux-gnu.so +0 -0
  409. sage/matrix/matrix1.pxd +8 -0
  410. sage/matrix/matrix1.pyx +2851 -0
  411. sage/matrix/matrix2.cpython-314-aarch64-linux-gnu.so +0 -0
  412. sage/matrix/matrix2.pxd +25 -0
  413. sage/matrix/matrix2.pyx +20181 -0
  414. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-gnu.so +0 -0
  415. sage/matrix/matrix_cdv.pxd +4 -0
  416. sage/matrix/matrix_cdv.pyx +93 -0
  417. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  418. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  419. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  420. sage/matrix/matrix_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  421. sage/matrix/matrix_dense.pxd +5 -0
  422. sage/matrix/matrix_dense.pyx +343 -0
  423. sage/matrix/matrix_domain_dense.pxd +5 -0
  424. sage/matrix/matrix_domain_sparse.pxd +5 -0
  425. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  426. sage/matrix/matrix_double_dense.pxd +7 -0
  427. sage/matrix/matrix_double_dense.pyx +3906 -0
  428. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  429. sage/matrix/matrix_double_sparse.pxd +6 -0
  430. sage/matrix/matrix_double_sparse.pyx +248 -0
  431. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  432. sage/matrix/matrix_generic_dense.pxd +7 -0
  433. sage/matrix/matrix_generic_dense.pyx +354 -0
  434. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  435. sage/matrix/matrix_generic_sparse.pxd +7 -0
  436. sage/matrix/matrix_generic_sparse.pyx +461 -0
  437. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  440. sage/matrix/matrix_misc.py +313 -0
  441. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  442. sage/matrix/matrix_numpy_dense.pxd +14 -0
  443. sage/matrix/matrix_numpy_dense.pyx +450 -0
  444. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  445. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  446. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  447. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  448. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  449. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  450. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  451. sage/matrix/matrix_real_double_dense.pxd +7 -0
  452. sage/matrix/matrix_real_double_dense.pyx +122 -0
  453. sage/matrix/matrix_space.py +2848 -0
  454. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  455. sage/matrix/matrix_sparse.pxd +5 -0
  456. sage/matrix/matrix_sparse.pyx +1222 -0
  457. sage/matrix/matrix_window.cpython-314-aarch64-linux-gnu.so +0 -0
  458. sage/matrix/matrix_window.pxd +37 -0
  459. sage/matrix/matrix_window.pyx +242 -0
  460. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  461. sage/matrix/misc_mpfr.pyx +80 -0
  462. sage/matrix/operation_table.py +1182 -0
  463. sage/matrix/special.py +3666 -0
  464. sage/matrix/strassen.cpython-314-aarch64-linux-gnu.so +0 -0
  465. sage/matrix/strassen.pyx +851 -0
  466. sage/matrix/symplectic_basis.py +541 -0
  467. sage/matrix/template.pxd +6 -0
  468. sage/matrix/tests.py +71 -0
  469. sage/matroids/advanced.py +77 -0
  470. sage/matroids/all.py +13 -0
  471. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  472. sage/matroids/basis_exchange_matroid.pxd +96 -0
  473. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  474. sage/matroids/basis_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  475. sage/matroids/basis_matroid.pxd +45 -0
  476. sage/matroids/basis_matroid.pyx +1217 -0
  477. sage/matroids/catalog.py +44 -0
  478. sage/matroids/chow_ring.py +473 -0
  479. sage/matroids/chow_ring_ideal.py +849 -0
  480. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  481. sage/matroids/circuit_closures_matroid.pxd +16 -0
  482. sage/matroids/circuit_closures_matroid.pyx +559 -0
  483. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  484. sage/matroids/circuits_matroid.pxd +38 -0
  485. sage/matroids/circuits_matroid.pyx +947 -0
  486. sage/matroids/constructor.py +1086 -0
  487. sage/matroids/database_collections.py +365 -0
  488. sage/matroids/database_matroids.py +5338 -0
  489. sage/matroids/dual_matroid.py +583 -0
  490. sage/matroids/extension.cpython-314-aarch64-linux-gnu.so +0 -0
  491. sage/matroids/extension.pxd +34 -0
  492. sage/matroids/extension.pyx +519 -0
  493. sage/matroids/flats_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  494. sage/matroids/flats_matroid.pxd +28 -0
  495. sage/matroids/flats_matroid.pyx +715 -0
  496. sage/matroids/gammoid.py +600 -0
  497. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  498. sage/matroids/graphic_matroid.pxd +39 -0
  499. sage/matroids/graphic_matroid.pyx +2024 -0
  500. sage/matroids/lean_matrix.cpython-314-aarch64-linux-gnu.so +0 -0
  501. sage/matroids/lean_matrix.pxd +126 -0
  502. sage/matroids/lean_matrix.pyx +3667 -0
  503. sage/matroids/linear_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  504. sage/matroids/linear_matroid.pxd +180 -0
  505. sage/matroids/linear_matroid.pyx +6649 -0
  506. sage/matroids/matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  507. sage/matroids/matroid.pxd +243 -0
  508. sage/matroids/matroid.pyx +8759 -0
  509. sage/matroids/matroids_catalog.py +190 -0
  510. sage/matroids/matroids_plot_helpers.py +890 -0
  511. sage/matroids/minor_matroid.py +480 -0
  512. sage/matroids/minorfix.h +9 -0
  513. sage/matroids/named_matroids.py +5 -0
  514. sage/matroids/rank_matroid.py +268 -0
  515. sage/matroids/set_system.cpython-314-aarch64-linux-gnu.so +0 -0
  516. sage/matroids/set_system.pxd +38 -0
  517. sage/matroids/set_system.pyx +800 -0
  518. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  519. sage/matroids/transversal_matroid.pxd +14 -0
  520. sage/matroids/transversal_matroid.pyx +893 -0
  521. sage/matroids/union_matroid.cpython-314-aarch64-linux-gnu.so +0 -0
  522. sage/matroids/union_matroid.pxd +20 -0
  523. sage/matroids/union_matroid.pyx +331 -0
  524. sage/matroids/unpickling.cpython-314-aarch64-linux-gnu.so +0 -0
  525. sage/matroids/unpickling.pyx +843 -0
  526. sage/matroids/utilities.py +809 -0
  527. sage/misc/all__sagemath_modules.py +20 -0
  528. sage/misc/c3.cpython-314-aarch64-linux-gnu.so +0 -0
  529. sage/misc/c3.pyx +238 -0
  530. sage/misc/compat.py +87 -0
  531. sage/misc/element_with_label.py +173 -0
  532. sage/misc/func_persist.py +79 -0
  533. sage/misc/pickle_old.cpython-314-aarch64-linux-gnu.so +0 -0
  534. sage/misc/pickle_old.pyx +19 -0
  535. sage/misc/proof.py +7 -0
  536. sage/misc/replace_dot_all.py +472 -0
  537. sage/misc/sagedoc_conf.py +168 -0
  538. sage/misc/sphinxify.py +167 -0
  539. sage/misc/test_class_pickling.py +85 -0
  540. sage/modules/all.py +42 -0
  541. sage/modules/complex_double_vector.py +25 -0
  542. sage/modules/diamond_cutting.py +380 -0
  543. sage/modules/fg_pid/all.py +1 -0
  544. sage/modules/fg_pid/fgp_element.py +456 -0
  545. sage/modules/fg_pid/fgp_module.py +2091 -0
  546. sage/modules/fg_pid/fgp_morphism.py +550 -0
  547. sage/modules/filtered_vector_space.py +1271 -0
  548. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-gnu.so +0 -0
  549. sage/modules/finite_submodule_iter.pxd +27 -0
  550. sage/modules/finite_submodule_iter.pyx +452 -0
  551. sage/modules/fp_graded/all.py +1 -0
  552. sage/modules/fp_graded/element.py +346 -0
  553. sage/modules/fp_graded/free_element.py +298 -0
  554. sage/modules/fp_graded/free_homspace.py +53 -0
  555. sage/modules/fp_graded/free_module.py +1060 -0
  556. sage/modules/fp_graded/free_morphism.py +217 -0
  557. sage/modules/fp_graded/homspace.py +563 -0
  558. sage/modules/fp_graded/module.py +1340 -0
  559. sage/modules/fp_graded/morphism.py +1990 -0
  560. sage/modules/fp_graded/steenrod/all.py +1 -0
  561. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  562. sage/modules/fp_graded/steenrod/module.py +477 -0
  563. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  564. sage/modules/fp_graded/steenrod/profile.py +241 -0
  565. sage/modules/free_module.py +8447 -0
  566. sage/modules/free_module_element.cpython-314-aarch64-linux-gnu.so +0 -0
  567. sage/modules/free_module_element.pxd +22 -0
  568. sage/modules/free_module_element.pyx +5445 -0
  569. sage/modules/free_module_homspace.py +369 -0
  570. sage/modules/free_module_integer.py +896 -0
  571. sage/modules/free_module_morphism.py +823 -0
  572. sage/modules/free_module_pseudohomspace.py +352 -0
  573. sage/modules/free_module_pseudomorphism.py +578 -0
  574. sage/modules/free_quadratic_module.py +1706 -0
  575. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  576. sage/modules/matrix_morphism.py +1745 -0
  577. sage/modules/misc.py +103 -0
  578. sage/modules/module_functors.py +192 -0
  579. sage/modules/multi_filtered_vector_space.py +719 -0
  580. sage/modules/ore_module.py +2208 -0
  581. sage/modules/ore_module_element.py +178 -0
  582. sage/modules/ore_module_homspace.py +147 -0
  583. sage/modules/ore_module_morphism.py +968 -0
  584. sage/modules/quotient_module.py +699 -0
  585. sage/modules/real_double_vector.py +22 -0
  586. sage/modules/submodule.py +255 -0
  587. sage/modules/tensor_operations.py +567 -0
  588. sage/modules/torsion_quadratic_module.py +1352 -0
  589. sage/modules/tutorial_free_modules.py +248 -0
  590. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  591. sage/modules/vector_complex_double_dense.pxd +6 -0
  592. sage/modules/vector_complex_double_dense.pyx +117 -0
  593. sage/modules/vector_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  594. sage/modules/vector_double_dense.pxd +6 -0
  595. sage/modules/vector_double_dense.pyx +604 -0
  596. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  597. sage/modules/vector_integer_dense.pxd +15 -0
  598. sage/modules/vector_integer_dense.pyx +361 -0
  599. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  600. sage/modules/vector_integer_sparse.pxd +29 -0
  601. sage/modules/vector_integer_sparse.pyx +406 -0
  602. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  603. sage/modules/vector_modn_dense.pxd +12 -0
  604. sage/modules/vector_modn_dense.pyx +394 -0
  605. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  606. sage/modules/vector_modn_sparse.pxd +21 -0
  607. sage/modules/vector_modn_sparse.pyx +298 -0
  608. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  609. sage/modules/vector_numpy_dense.pxd +15 -0
  610. sage/modules/vector_numpy_dense.pyx +304 -0
  611. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  612. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  613. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  614. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  615. sage/modules/vector_rational_dense.pxd +15 -0
  616. sage/modules/vector_rational_dense.pyx +387 -0
  617. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-gnu.so +0 -0
  618. sage/modules/vector_rational_sparse.pxd +30 -0
  619. sage/modules/vector_rational_sparse.pyx +413 -0
  620. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  621. sage/modules/vector_real_double_dense.pxd +6 -0
  622. sage/modules/vector_real_double_dense.pyx +126 -0
  623. sage/modules/vector_space_homspace.py +430 -0
  624. sage/modules/vector_space_morphism.py +989 -0
  625. sage/modules/with_basis/all.py +15 -0
  626. sage/modules/with_basis/cell_module.py +494 -0
  627. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-gnu.so +0 -0
  628. sage/modules/with_basis/indexed_element.pxd +13 -0
  629. sage/modules/with_basis/indexed_element.pyx +1058 -0
  630. sage/modules/with_basis/invariant.py +1075 -0
  631. sage/modules/with_basis/morphism.py +1636 -0
  632. sage/modules/with_basis/representation.py +2939 -0
  633. sage/modules/with_basis/subquotient.py +685 -0
  634. sage/numerical/all__sagemath_modules.py +6 -0
  635. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-gnu.so +0 -0
  636. sage/numerical/gauss_legendre.pyx +381 -0
  637. sage/numerical/optimize.py +910 -0
  638. sage/probability/all.py +10 -0
  639. sage/probability/probability_distribution.cpython-314-aarch64-linux-gnu.so +0 -0
  640. sage/probability/probability_distribution.pyx +1242 -0
  641. sage/probability/random_variable.py +411 -0
  642. sage/quadratic_forms/all.py +4 -0
  643. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  644. sage/quadratic_forms/binary_qf.py +2042 -0
  645. sage/quadratic_forms/bqf_class_group.py +748 -0
  646. sage/quadratic_forms/constructions.py +93 -0
  647. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-gnu.so +0 -0
  648. sage/quadratic_forms/count_local_2.pyx +365 -0
  649. sage/quadratic_forms/extras.py +195 -0
  650. sage/quadratic_forms/quadratic_form.py +1753 -0
  651. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  652. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  653. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-gnu.so +0 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  655. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  656. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  657. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  658. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  659. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  660. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  661. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  662. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  663. sage/quadratic_forms/random_quadraticform.py +209 -0
  664. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-gnu.so +0 -0
  665. sage/quadratic_forms/ternary.pyx +1154 -0
  666. sage/quadratic_forms/ternary_qf.py +2027 -0
  667. sage/rings/all__sagemath_modules.py +28 -0
  668. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  669. sage/rings/asymptotic/misc.py +1252 -0
  670. sage/rings/cc.py +4 -0
  671. sage/rings/cfinite_sequence.py +1306 -0
  672. sage/rings/complex_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  673. sage/rings/complex_conversion.pxd +8 -0
  674. sage/rings/complex_conversion.pyx +23 -0
  675. sage/rings/complex_double.cpython-314-aarch64-linux-gnu.so +0 -0
  676. sage/rings/complex_double.pxd +21 -0
  677. sage/rings/complex_double.pyx +2654 -0
  678. sage/rings/complex_mpc.cpython-314-aarch64-linux-gnu.so +0 -0
  679. sage/rings/complex_mpc.pxd +21 -0
  680. sage/rings/complex_mpc.pyx +2576 -0
  681. sage/rings/complex_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  682. sage/rings/complex_mpfr.pxd +18 -0
  683. sage/rings/complex_mpfr.pyx +3602 -0
  684. sage/rings/derivation.py +2334 -0
  685. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  686. sage/rings/finite_rings/maps_finite_field.py +191 -0
  687. sage/rings/function_field/all__sagemath_modules.py +8 -0
  688. sage/rings/function_field/derivations.py +102 -0
  689. sage/rings/function_field/derivations_rational.py +132 -0
  690. sage/rings/function_field/differential.py +853 -0
  691. sage/rings/function_field/divisor.py +1107 -0
  692. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  693. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  694. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  695. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  696. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  697. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  698. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  699. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-gnu.so +0 -0
  700. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  701. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-gnu.so +0 -0
  702. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  703. sage/rings/invariants/all.py +4 -0
  704. sage/rings/invariants/invariant_theory.py +4597 -0
  705. sage/rings/invariants/reconstruction.py +395 -0
  706. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  707. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  708. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-gnu.so +0 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  711. sage/rings/polynomial/ore_function_element.py +952 -0
  712. sage/rings/polynomial/ore_function_field.py +1028 -0
  713. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  714. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  715. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  716. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  717. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-gnu.so +0 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  719. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  720. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-gnu.so +0 -0
  721. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  722. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  723. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-gnu.so +0 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  726. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-gnu.so +0 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  729. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  730. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-gnu.so +0 -0
  731. sage/rings/real_double_element_gsl.pxd +8 -0
  732. sage/rings/real_double_element_gsl.pyx +794 -0
  733. sage/rings/real_field.py +58 -0
  734. sage/rings/real_mpfr.cpython-314-aarch64-linux-gnu.so +0 -0
  735. sage/rings/real_mpfr.pxd +29 -0
  736. sage/rings/real_mpfr.pyx +6122 -0
  737. sage/rings/ring_extension.cpython-314-aarch64-linux-gnu.so +0 -0
  738. sage/rings/ring_extension.pxd +42 -0
  739. sage/rings/ring_extension.pyx +2779 -0
  740. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-gnu.so +0 -0
  741. sage/rings/ring_extension_conversion.pxd +16 -0
  742. sage/rings/ring_extension_conversion.pyx +462 -0
  743. sage/rings/ring_extension_element.cpython-314-aarch64-linux-gnu.so +0 -0
  744. sage/rings/ring_extension_element.pxd +21 -0
  745. sage/rings/ring_extension_element.pyx +1635 -0
  746. sage/rings/ring_extension_homset.py +64 -0
  747. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-gnu.so +0 -0
  748. sage/rings/ring_extension_morphism.pxd +35 -0
  749. sage/rings/ring_extension_morphism.pyx +920 -0
  750. sage/schemes/all__sagemath_modules.py +1 -0
  751. sage/schemes/projective/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/coherent_sheaf.py +300 -0
  753. sage/schemes/projective/cohomology.py +510 -0
  754. sage/stats/all.py +15 -0
  755. sage/stats/basic_stats.py +489 -0
  756. sage/stats/distributions/all.py +7 -0
  757. sage/stats/distributions/catalog.py +34 -0
  758. sage/stats/distributions/dgs.h +50 -0
  759. sage/stats/distributions/dgs.pxd +111 -0
  760. sage/stats/distributions/dgs_bern.h +400 -0
  761. sage/stats/distributions/dgs_gauss.h +614 -0
  762. sage/stats/distributions/dgs_misc.h +104 -0
  763. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-gnu.so +0 -0
  764. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  766. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  767. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  768. sage/stats/hmm/all.py +15 -0
  769. sage/stats/hmm/chmm.cpython-314-aarch64-linux-gnu.so +0 -0
  770. sage/stats/hmm/chmm.pyx +1595 -0
  771. sage/stats/hmm/distributions.cpython-314-aarch64-linux-gnu.so +0 -0
  772. sage/stats/hmm/distributions.pxd +29 -0
  773. sage/stats/hmm/distributions.pyx +531 -0
  774. sage/stats/hmm/hmm.cpython-314-aarch64-linux-gnu.so +0 -0
  775. sage/stats/hmm/hmm.pxd +17 -0
  776. sage/stats/hmm/hmm.pyx +1388 -0
  777. sage/stats/hmm/util.cpython-314-aarch64-linux-gnu.so +0 -0
  778. sage/stats/hmm/util.pxd +7 -0
  779. sage/stats/hmm/util.pyx +165 -0
  780. sage/stats/intlist.cpython-314-aarch64-linux-gnu.so +0 -0
  781. sage/stats/intlist.pxd +14 -0
  782. sage/stats/intlist.pyx +588 -0
  783. sage/stats/r.py +49 -0
  784. sage/stats/time_series.cpython-314-aarch64-linux-gnu.so +0 -0
  785. sage/stats/time_series.pxd +6 -0
  786. sage/stats/time_series.pyx +2546 -0
  787. sage/tensor/all.py +2 -0
  788. sage/tensor/modules/all.py +8 -0
  789. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  790. sage/tensor/modules/comp.py +5598 -0
  791. sage/tensor/modules/ext_pow_free_module.py +824 -0
  792. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  793. sage/tensor/modules/format_utilities.py +333 -0
  794. sage/tensor/modules/free_module_alt_form.py +858 -0
  795. sage/tensor/modules/free_module_automorphism.py +1207 -0
  796. sage/tensor/modules/free_module_basis.py +1074 -0
  797. sage/tensor/modules/free_module_element.py +284 -0
  798. sage/tensor/modules/free_module_homset.py +652 -0
  799. sage/tensor/modules/free_module_linear_group.py +564 -0
  800. sage/tensor/modules/free_module_morphism.py +1581 -0
  801. sage/tensor/modules/free_module_tensor.py +3289 -0
  802. sage/tensor/modules/reflexive_module.py +386 -0
  803. sage/tensor/modules/tensor_free_module.py +780 -0
  804. sage/tensor/modules/tensor_free_submodule.py +538 -0
  805. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  806. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,857 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.libs.pari
3
+ r"""
4
+ Wrapper class for abelian groups
5
+
6
+ This class is intended as a template for anything in Sage that needs the
7
+ functionality of abelian groups. One can create an ``AdditiveAbelianGroupWrapper``
8
+ object from any given set of elements in some given parent, as long as an
9
+ ``_add_`` method has been defined.
10
+
11
+ EXAMPLES:
12
+
13
+ We create a toy example based on the Mordell-Weil group of an elliptic curve over `\QQ`::
14
+
15
+ sage: # needs database_cremona_mini_ellcurve sage.schemes
16
+ sage: E = EllipticCurve('30a2')
17
+ sage: pts = [E(4,-7,1), E(7/4, -11/8, 1), E(3, -2, 1)]
18
+ sage: M = AdditiveAbelianGroupWrapper(pts[0].parent(), pts, [3, 2, 2]); M
19
+ Additive abelian group isomorphic to Z/3 + Z/2 + Z/2 embedded in Abelian
20
+ group of points on Elliptic Curve defined by y^2 + x*y + y = x^3 - 19*x + 26
21
+ over Rational Field
22
+ sage: M.gens()
23
+ ((4 : -7 : 1), (7/4 : -11/8 : 1), (3 : -2 : 1))
24
+ sage: 3*M.0
25
+ (0 : 1 : 0)
26
+ sage: 3000000000000001 * M.0
27
+ (4 : -7 : 1)
28
+ sage: M == loads(dumps(M)) # known bug (https://github.com/sagemath/sage/issues/11599#comment:7)
29
+ True
30
+
31
+ TESTS:
32
+
33
+ We check that ridiculous operations are being avoided::
34
+
35
+ sage: from sage.misc.verbose import set_verbose
36
+ sage: set_verbose(2, 'additive_abelian_wrapper.py')
37
+ sage: 300001 * M.0 # needs database_cremona_mini_ellcurve sage.schemes
38
+ verbose 1 (...: additive_abelian_wrapper.py, discrete_exp) Calling discrete exp on (1, 0, 0)
39
+ (4 : -7 : 1)
40
+ sage: set_verbose(0, 'additive_abelian_wrapper.py')
41
+
42
+
43
+ .. TODO::
44
+
45
+ Think about subgroups and quotients, which probably won't work
46
+ in the current implementation -- some fiddly adjustments will be
47
+ needed in order to be able to pass extra arguments to the
48
+ subquotient's init method.
49
+
50
+ AUTHORS:
51
+
52
+ - David Loeffler (2010)
53
+ - Lorenz Panny (2017): :meth:`AdditiveAbelianGroupWrapper.discrete_log`
54
+ - Lorenz Panny (2023): :meth:`AdditiveAbelianGroupWrapper.from_generators`
55
+ """
56
+
57
+ # ****************************************************************************
58
+ # Copyright (C) 2010 David Loeffler
59
+ #
60
+ # Distributed under the terms of the GNU General Public License (GPL)
61
+ #
62
+ # This code is distributed in the hope that it will be useful,
63
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
64
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
65
+ # General Public License for more details.
66
+ #
67
+ # The full text of the GPL is available at:
68
+ #
69
+ # https://www.gnu.org/licenses/
70
+ # ****************************************************************************
71
+
72
+ from . import additive_abelian_group as addgp
73
+ from sage.rings.integer_ring import ZZ
74
+ from sage.categories.morphism import Morphism
75
+ from sage.structure.element import parent
76
+ from sage.structure.sequence import Sequence
77
+ from sage.modules.free_module_element import vector
78
+
79
+ from sage.misc.superseded import deprecated_function_alias
80
+
81
+
82
+ class UnwrappingMorphism(Morphism):
83
+ r"""
84
+ The embedding into the ambient group. Used by the coercion framework.
85
+ """
86
+ def __init__(self, domain):
87
+ r"""
88
+ EXAMPLES::
89
+
90
+ sage: G = AdditiveAbelianGroupWrapper(QQbar, # needs sage.rings.number_field
91
+ ....: [sqrt(QQbar(2)), sqrt(QQbar(3))], [0, 0])
92
+ sage: F = QQbar.coerce_map_from(G); F # needs sage.rings.number_field
93
+ Generic morphism:
94
+ From: Additive abelian group isomorphic to Z + Z embedded in Algebraic Field
95
+ To: Algebraic Field
96
+ sage: type(F) # needs sage.rings.number_field
97
+ <class 'sage.groups.additive_abelian.additive_abelian_wrapper.UnwrappingMorphism'>
98
+ """
99
+ Morphism.__init__(self, domain.Hom(domain.universe()))
100
+
101
+ def _call_(self, x):
102
+ r"""
103
+ TESTS::
104
+
105
+ sage: # needs database_cremona_mini_ellcurve sage.schemes
106
+ sage: E = EllipticCurve("65a1")
107
+ sage: G = E.torsion_subgroup()
108
+ sage: isinstance(G, sage.groups.additive_abelian.additive_abelian_wrapper.AdditiveAbelianGroupWrapper)
109
+ True
110
+ sage: P1 = E([1,-1,1])
111
+ sage: P2 = E([0,1,0])
112
+ sage: P1 in G # indirect doctest
113
+ False
114
+ sage: P2 in G
115
+ True
116
+ sage: (G(P2) + P1) in G
117
+ False
118
+ sage: (G(P2) + P1).parent()
119
+ Abelian group of points on Elliptic Curve defined by y^2 + x*y = x^3 - x over Rational Field
120
+ """
121
+ return self.codomain()(x.element())
122
+
123
+
124
+ class AdditiveAbelianGroupWrapperElement(addgp.AdditiveAbelianGroupElement):
125
+ """
126
+ An element of an :class:`AdditiveAbelianGroupWrapper`.
127
+ """
128
+
129
+ def __init__(self, parent, vector, element=None, check=False):
130
+ r"""
131
+ EXAMPLES::
132
+
133
+ sage: from sage.groups.additive_abelian.additive_abelian_wrapper import AdditiveAbelianGroupWrapper
134
+ sage: G = AdditiveAbelianGroupWrapper(QQbar, # needs sage.rings.number_field
135
+ ....: [sqrt(QQbar(2)), sqrt(QQbar(3))], [0, 0])
136
+ sage: G.0 # indirect doctest # needs sage.rings.number_field
137
+ 1.414213562373095?
138
+ """
139
+ addgp.AdditiveAbelianGroupElement.__init__(self, parent, vector, check)
140
+ if element is not None:
141
+ element = self.parent().universe()(element)
142
+ self._element = element
143
+
144
+ def element(self):
145
+ r"""
146
+ Return the underlying object that this element wraps.
147
+
148
+ EXAMPLES::
149
+
150
+ sage: # needs database_cremona_mini_ellcurve sage
151
+ sage: T = EllipticCurve('65a').torsion_subgroup().gen(0)
152
+ sage: T; type(T)
153
+ (0 : 0 : 1)
154
+ <class 'sage.schemes.elliptic_curves.ell_torsion.EllipticCurveTorsionSubgroup_with_category.element_class'>
155
+ sage: T.element(); type(T.element())
156
+ (0 : 0 : 1)
157
+ <class 'sage.schemes.elliptic_curves.ell_point.EllipticCurvePoint_number_field'>
158
+ """
159
+ if self._element is None:
160
+ self._element = self.parent().discrete_exp(self._hermite_lift())
161
+ return self._element
162
+
163
+ def _repr_(self):
164
+ r"""
165
+ String representation of ``self``.
166
+
167
+ EXAMPLES::
168
+
169
+ sage: # needs database_cremona_mini_ellcurve sage
170
+ sage: T = EllipticCurve('65a').torsion_subgroup().gen(0)
171
+ sage: repr(T) # indirect doctest
172
+ '(0 : 0 : 1)'
173
+ """
174
+ return repr(self.element())
175
+
176
+
177
+ class AdditiveAbelianGroupWrapper(addgp.AdditiveAbelianGroup_fixed_gens):
178
+ """
179
+ This class is used to wrap a subgroup of an existing
180
+ additive abelian group as a new additive abelian group.
181
+
182
+ EXAMPLES::
183
+
184
+ sage: G2 = AdditiveAbelianGroupWrapper(Zmod(42), [2], [21]); G2
185
+ Additive abelian group isomorphic to Z/21 embedded in Ring of integers modulo 42
186
+ sage: G6 = AdditiveAbelianGroupWrapper(Zmod(42), [6], [7]); G6
187
+ Additive abelian group isomorphic to Z/7 embedded in Ring of integers modulo 42
188
+ sage: G = AdditiveAbelianGroupWrapper(Zmod(42), [21,14,6], [2,3,7]); G
189
+ Additive abelian group isomorphic to Z/2 + Z/3 + Z/7 embedded in
190
+ Ring of integers modulo 42
191
+ sage: G.invariants()
192
+ (42,)
193
+
194
+ ::
195
+
196
+ sage: AdditiveAbelianGroupWrapper(QQbar, [sqrt(2), sqrt(3)], [0, 0]) # needs sage.rings.number_field sage.symbolic
197
+ Additive abelian group isomorphic to Z + Z embedded in Algebraic Field
198
+
199
+ ::
200
+
201
+ sage: EllipticCurve(GF(419**2), [1,0]).abelian_group() # indirect doctest # needs sage.rings.finite_rings sage.schemes
202
+ Additive abelian group isomorphic to Z/420 + Z/420 embedded in
203
+ Abelian group of points on Elliptic Curve
204
+ defined by y^2 = x^3 + x over Finite Field in z2 of size 419^2
205
+ """
206
+
207
+ Element = AdditiveAbelianGroupWrapperElement
208
+
209
+ def __init__(self, universe, gens, invariants):
210
+ r"""
211
+ EXAMPLES::
212
+
213
+ sage: AdditiveAbelianGroupWrapper(QQbar, # indirect doctest # needs sage.rings.number_field
214
+ ....: [sqrt(QQbar(2)), sqrt(QQbar(3))], [0, 0])
215
+ Additive abelian group isomorphic to Z + Z embedded in Algebraic Field
216
+ """
217
+ self._universe = universe
218
+ self._gen_elements = tuple(universe(x) for x in gens)
219
+ self._gen_orders = invariants
220
+ cover, rels = addgp.cover_and_relations_from_invariants(invariants)
221
+ addgp.AdditiveAbelianGroup_fixed_gens.__init__(self, cover, rels, cover.gens())
222
+ self._unset_coercions_used()
223
+ self.register_embedding(UnwrappingMorphism(self))
224
+
225
+ def universe(self):
226
+ r"""
227
+ The ambient group in which this abelian group lives.
228
+
229
+ EXAMPLES::
230
+
231
+ sage: G = AdditiveAbelianGroupWrapper(QQbar, # needs sage.rings.number_field
232
+ ....: [sqrt(QQbar(2)), sqrt(QQbar(3))],
233
+ ....: [0, 0])
234
+ sage: G.universe() # needs sage.rings.number_field
235
+ Algebraic Field
236
+ """
237
+ return self._universe
238
+
239
+ def generator_orders(self):
240
+ r"""
241
+ The orders of the generators with which this group was initialised.
242
+ (Note that these are not necessarily a minimal set of generators.)
243
+ Generators of infinite order are returned as 0. Compare
244
+ ``self.invariants()``, which returns the orders of a minimal set of
245
+ generators.
246
+
247
+ EXAMPLES::
248
+
249
+ sage: V = Zmod(6)**2
250
+ sage: G = AdditiveAbelianGroupWrapper(V, [2*V.0, 3*V.1], [3, 2])
251
+ sage: G.generator_orders()
252
+ (3, 2)
253
+ sage: G.invariants()
254
+ (6,)
255
+ """
256
+ return tuple(self._gen_orders)
257
+
258
+ def _repr_(self):
259
+ r"""
260
+ EXAMPLES::
261
+
262
+ sage: G = AdditiveAbelianGroupWrapper(QQbar, # needs sage.rings.number_field
263
+ ....: [sqrt(QQbar(2)), sqrt(QQbar(3))], [0, 0])
264
+ sage: repr(G) # indirect doctest # needs sage.rings.number_field
265
+ 'Additive abelian group isomorphic to Z + Z embedded in Algebraic Field'
266
+ """
267
+ return addgp.AdditiveAbelianGroup_fixed_gens._repr_(self) + " embedded in " + self.universe()._repr_()
268
+
269
+ def _element_constructor_(self, x, check=False):
270
+ r"""
271
+ Create an element from ``x``.
272
+
273
+ This may be either an element of self, an element of the ambient
274
+ group, or an iterable (in which case the result is the corresponding
275
+ product of the generators of self).
276
+
277
+ EXAMPLES::
278
+
279
+ sage: V = Zmod(8)**2
280
+ sage: G = AdditiveAbelianGroupWrapper(V, [[2,2],[4,0]], [4, 2])
281
+ sage: G(V([6,2]))
282
+ (6, 2)
283
+ sage: G([1,1])
284
+ (6, 2)
285
+ sage: G(G([1,1]))
286
+ (6, 2)
287
+ """
288
+ if parent(x) is self.universe():
289
+ return self.element_class(self, self.discrete_log(x), element=x)
290
+ return addgp.AdditiveAbelianGroup_fixed_gens._element_constructor_(self, x, check)
291
+
292
+ def discrete_exp(self, v):
293
+ r"""
294
+ Given a list (or other iterable) of length equal to the number of
295
+ generators of this group, compute the element of the ambient group
296
+ with those exponents in terms of the generators of ``self``.
297
+
298
+ EXAMPLES::
299
+
300
+ sage: G = AdditiveAbelianGroupWrapper(QQbar, # needs sage.rings.number_field
301
+ ....: [sqrt(QQbar(2)), -1], [0, 0])
302
+ sage: v = G.discrete_exp([3, 5]); v # needs sage.rings.number_field
303
+ -0.7573593128807148?
304
+ sage: v.parent() is QQbar # needs sage.rings.number_field
305
+ True
306
+
307
+ This method is an inverse of :meth:`discrete_log`::
308
+
309
+ sage: orders = [2, 2*3, 2*3*5, 2*3*5*7, 2*3*5*7*11]
310
+ sage: G = AdditiveAbelianGroup(orders)
311
+ sage: A = AdditiveAbelianGroupWrapper(G.0.parent(), G.gens(), orders)
312
+ sage: el = A.random_element()
313
+ sage: A.discrete_exp(A.discrete_log(el)) == el
314
+ True
315
+
316
+ TESTS:
317
+
318
+ Check that :meth:`_discrete_exp` still works (for now)::
319
+
320
+ sage: A._discrete_exp(list(range(1,6)))
321
+ doctest:warning ...
322
+ DeprecationWarning: _discrete_exp is deprecated. ...
323
+ (1, 2, 3, 4, 5)
324
+ """
325
+ from sage.misc.verbose import verbose
326
+ v = self.V()(v)
327
+ verbose("Calling discrete exp on %s" % v)
328
+ # DUMB IMPLEMENTATION!
329
+ return sum([self._gen_elements[i] * ZZ(v[i]) for i in range(len(v))], self.universe()(0))
330
+
331
+ _discrete_exp = deprecated_function_alias(32384, discrete_exp)
332
+
333
+ def discrete_log(self, x, gens=None):
334
+ r"""
335
+ Given an element of the ambient group, attempt to express it in terms
336
+ of the generators of this group or the given generators of a subgroup.
337
+
338
+ ALGORITHM:
339
+
340
+ This reduces to p-groups, then calls :func:`_discrete_log_pgroup` which
341
+ implements a basic version of the recursive algorithm from [Suth2008]_.
342
+
343
+ AUTHORS:
344
+
345
+ - Lorenz Panny (2017)
346
+
347
+ EXAMPLES::
348
+
349
+ sage: G = AdditiveAbelianGroup([2, 2*3, 2*3*5, 2*3*5*7, 2*3*5*7*11])
350
+ sage: A = AdditiveAbelianGroupWrapper(G.0.parent(), G.gens(),
351
+ ....: [g.order() for g in G.gens()])
352
+ sage: A.discrete_log(A.discrete_exp([1,5,23,127,539]))
353
+ (1, 5, 23, 127, 539)
354
+
355
+ ::
356
+
357
+ sage: x = polygen(ZZ, 'x')
358
+ sage: F.<t> = GF(1009**2, modulus=x**2+11); E = EllipticCurve(j=F(940)) # needs sage.rings.finite_rings sage.schemes
359
+ sage: P, Q = E(900*t + 228, 974*t + 185), E(1007*t + 214, 865*t + 802) # needs sage.rings.finite_rings sage.schemes
360
+ sage: E.abelian_group().discrete_log(123 * P + 777 * Q, [P, Q]) # needs sage.rings.finite_rings sage.schemes
361
+ (123, 777)
362
+
363
+ ::
364
+
365
+ sage: V = Zmod(8)**2
366
+ sage: G = AdditiveAbelianGroupWrapper(V, [[2,2],[4,0]], [4, 2])
367
+ sage: G.discrete_log(V([6, 2]))
368
+ (1, 1)
369
+ sage: G.discrete_log(V([6, 4]))
370
+ Traceback (most recent call last):
371
+ ...
372
+ ValueError: not in group
373
+
374
+ ::
375
+
376
+ sage: G = AdditiveAbelianGroupWrapper(QQbar, [sqrt(2)], [0]) # needs sage.rings.number_field sage.symbolic
377
+ sage: G.discrete_log(QQbar(2*sqrt(2))) # needs sage.rings.number_field sage.symbolic
378
+ Traceback (most recent call last):
379
+ ...
380
+ NotImplementedError: No black-box discrete log for infinite abelian groups
381
+
382
+ TESTS:
383
+
384
+ Check that :meth:`_discrete_log` still works (for now)::
385
+
386
+ sage: orders = [2, 2*3, 2*3*5, 2*3*5*7, 2*3*5*7*11]
387
+ sage: G = AdditiveAbelianGroup(orders)
388
+ sage: A = AdditiveAbelianGroupWrapper(G.0.parent(), G.gens(), orders)
389
+ sage: A._discrete_log(sum(i*g for i,g in enumerate(G.gens(),1)))
390
+ doctest:warning ...
391
+ DeprecationWarning: _discrete_log is deprecated. ...
392
+ (1, 2, 3, 4, 5)
393
+ """
394
+ from sage.arith.misc import CRT_list
395
+ from sage.rings.infinity import Infinity
396
+
397
+ if self.order() == Infinity:
398
+ raise NotImplementedError("No black-box discrete log for infinite abelian groups")
399
+
400
+ if gens is None:
401
+ gens = self.gens()
402
+ ords = self.generator_orders()
403
+ else:
404
+ ords = [g.order() for g in gens]
405
+
406
+ gens = [self._universe(g.element() if parent(g) is self else g) for g in gens]
407
+ x = self._universe(x.element() if parent(x) is self else x)
408
+
409
+ crt_data = [[] for _ in gens]
410
+ for p in self.exponent().prime_factors():
411
+ cofactor = self.exponent().prime_to_m_part(p)
412
+ pgens = [cofactor * g for g in gens]
413
+ y = cofactor * x
414
+
415
+ pvals = [o.valuation(p) for o in ords]
416
+ if not any(pvals):
417
+ continue
418
+
419
+ plog = _discrete_log_pgroup(p, pvals, pgens, y)
420
+
421
+ for i, (r, v) in enumerate(zip(plog, pvals)):
422
+ crt_data[i].append((r, p**v))
423
+
424
+ res = vector(CRT_list(*map(list, zip(*l))) for l in crt_data)
425
+ assert x == sum(r * g for r, g in zip(res, gens))
426
+ return res
427
+
428
+ _discrete_log = deprecated_function_alias(32384, discrete_log)
429
+
430
+ def torsion_subgroup(self, n=None):
431
+ r"""
432
+ Return the `n`-torsion subgroup of this additive abelian group
433
+ when `n` is given, and the torsion subgroup otherwise.
434
+
435
+ The [`n`-]torsion subgroup consists of all elements whose order
436
+ is finite [and divides `n`].
437
+
438
+ EXAMPLES::
439
+
440
+ sage: ords = [2, 2*3, 2*3*5, 0, 2*3*5*7, 2*3*5*7*11]
441
+ sage: G = AdditiveAbelianGroup(ords)
442
+ sage: A = AdditiveAbelianGroupWrapper(G.0.parent(), G.gens(), ords)
443
+ sage: T = A.torsion_subgroup(5)
444
+ sage: T
445
+ Additive abelian group isomorphic to Z/5 + Z/5 + Z/5 embedded in
446
+ Additive abelian group isomorphic to Z/2 + Z/6 + Z/30 + Z + Z/210 + Z/2310
447
+ sage: T.gens()
448
+ ((0, 0, 6, 0, 0, 0), (0, 0, 0, 0, 42, 0), (0, 0, 0, 0, 0, 462))
449
+
450
+ ::
451
+
452
+ sage: # needs database_cremona_mini_ellcurve sage.rings.finite_rings sage.schemes
453
+ sage: E = EllipticCurve(GF(487^2), [311,205])
454
+ sage: T = E.abelian_group().torsion_subgroup(42); T
455
+ Additive abelian group isomorphic to Z/42 + Z/6 embedded in
456
+ Abelian group of points on Elliptic Curve
457
+ defined by y^2 = x^3 + 311*x + 205 over Finite Field in z2 of size 487^2
458
+ sage: [P.order() for P in T.gens()]
459
+ [42, 6]
460
+
461
+ ::
462
+
463
+ sage: # needs database_cremona_mini_ellcurve sage.schemes
464
+ sage: E = EllipticCurve('574i1')
465
+ sage: pts = [E(103,172), E(61,18)]
466
+ sage: assert pts[0].order() == 7 and pts[1].order() == infinity
467
+ sage: M = AdditiveAbelianGroupWrapper(pts[0].parent(), pts, [7,0]); M
468
+ Additive abelian group isomorphic to Z/7 + Z embedded in
469
+ Abelian group of points on Elliptic Curve defined by
470
+ y^2 + x*y + y = x^3 - x^2 - 19353*x + 958713 over Rational Field
471
+ sage: M.torsion_subgroup()
472
+ Additive abelian group isomorphic to Z/7 embedded in
473
+ Abelian group of points on Elliptic Curve defined by
474
+ y^2 + x*y + y = x^3 - x^2 - 19353*x + 958713 over Rational Field
475
+ sage: M.torsion_subgroup(7)
476
+ Additive abelian group isomorphic to Z/7 embedded in
477
+ Abelian group of points on Elliptic Curve defined by
478
+ y^2 + x*y + y = x^3 - x^2 - 19353*x + 958713 over Rational Field
479
+ sage: M.torsion_subgroup(5)
480
+ Trivial group embedded in Abelian group of points on Elliptic Curve
481
+ defined by y^2 + x*y + y = x^3 - x^2 - 19353*x + 958713 over Rational Field
482
+
483
+ AUTHORS:
484
+
485
+ - Lorenz Panny (2022)
486
+ """
487
+ genords = zip(self._gen_elements, self._gen_orders)
488
+ if n is None:
489
+ gens, ords = zip(*(t for t in genords if t[1]))
490
+ else:
491
+ n = ZZ(n)
492
+ if n <= 0:
493
+ raise ValueError('n must be a positive integer')
494
+ gens, ords = [], []
495
+ for g, o in genords:
496
+ if not o:
497
+ continue
498
+ d = n.gcd(o)
499
+ if d == 1:
500
+ continue
501
+ gens.append(o // d * g)
502
+ ords.append(d)
503
+ return AdditiveAbelianGroupWrapper(self.universe(), gens, ords)
504
+
505
+ @staticmethod
506
+ def from_generators(gens, universe=None):
507
+ r"""
508
+ This method constructs the subgroup generated by a sequence
509
+ of *finite-order* elements in an additive abelian group.
510
+
511
+ The elements need not be independent, hence this can be used
512
+ to perform tasks such as finding relations between some given
513
+ elements of an abelian group, computing the structure of the
514
+ generated subgroup, enumerating all elements of the subgroup,
515
+ and solving discrete-logarithm problems.
516
+
517
+ EXAMPLES::
518
+
519
+ sage: G = AdditiveAbelianGroup([15, 30, 45])
520
+ sage: gs = [G((1,2,3)), G((4,5,6)), G((7,7,7)), G((3,2,1))]
521
+ sage: H = AdditiveAbelianGroupWrapper.from_generators(gs); H
522
+ Additive abelian group isomorphic to Z/90 + Z/15 embedded in
523
+ Additive abelian group isomorphic to Z/15 + Z/30 + Z/45
524
+ sage: H.gens()
525
+ ((12, 13, 14), (1, 26, 21))
526
+
527
+ TESTS:
528
+
529
+ Random testing::
530
+
531
+ sage: invs = []
532
+ sage: while not 1 < prod(invs) < 10^4:
533
+ ....: invs = [randrange(1,100) for _ in range(randrange(1,20))]
534
+ sage: G = AdditiveAbelianGroup(invs)
535
+ sage: gs = [G.random_element() for _ in range(randrange(1,10))]
536
+ sage: H = AdditiveAbelianGroupWrapper.from_generators(gs)
537
+ sage: os = H.generator_orders()
538
+ sage: vecs = cartesian_product_iterator(list(map(range, os)))
539
+ sage: els = {sum(i*g for i,g in zip(vec, H.gens())) for vec in vecs}
540
+ sage: len(els) == prod(os)
541
+ True
542
+ """
543
+ if not gens:
544
+ if universe is None:
545
+ raise ValueError('need universe if no generators are given')
546
+ return AdditiveAbelianGroupWrapper(universe, [], [])
547
+
548
+ if universe is None:
549
+ universe = Sequence(gens).universe()
550
+
551
+ basis, ords = basis_from_generators(gens)
552
+ return AdditiveAbelianGroupWrapper(universe, basis, ords)
553
+
554
+
555
+ def _discrete_log_pgroup(p, vals, aa, b):
556
+ r"""
557
+ Attempt to express an element of p-power order in terms of
558
+ generators of a nontrivial p-subgroup of this group.
559
+
560
+ Used as a subroutine in :meth:`discrete_log`.
561
+
562
+ ALGORITHM:
563
+
564
+ This implements a basic version of the recursive algorithm
565
+ from [Suth2008]_.
566
+ The base cases are handled using a variant of Shanks'
567
+ baby-step giant-step algorithm for products of cyclic groups.
568
+
569
+ EXAMPLES::
570
+
571
+ sage: G = AdditiveAbelianGroup([5, 5**2, 5**4, 5**4])
572
+ sage: (a, b, c, d) = gs = G.gens()
573
+ sage: A = AdditiveAbelianGroupWrapper(a.parent(), gs, [g.order() for g in gs])
574
+ sage: from sage.groups.additive_abelian.additive_abelian_wrapper import _discrete_log_pgroup
575
+ sage: _discrete_log_pgroup(5, [1,2,4,4], gs, a + 17*b + 123*c + 456*d)
576
+ (1, 17, 123, 456)
577
+
578
+ TESTS:
579
+
580
+ Check for :issue:`34716`::
581
+
582
+ sage: # needs sage.rings.finite_rings sage.schemes
583
+ sage: E = EllipticCurve(GF(487^2), [311,205])
584
+ sage: G = E.abelian_group().torsion_subgroup(42)
585
+ sage: G.invariants()
586
+ (6, 42)
587
+ sage: P, Q = G.torsion_subgroup(6).gens()
588
+ sage: G.discrete_log(2*P + 3*Q, [P, Q]) # indirect doctest # needs sage.groups
589
+ (2, 3)
590
+ """
591
+ from itertools import product as iproduct
592
+
593
+ qq = lambda j, k: vector(p ** (j + max(0, v - k)) for a, v in zip(aa, vals))
594
+ subbasis = lambda j, k: [q * a for q, a in zip(qq(j, k), aa)]
595
+ dotprod = lambda xs, ys: sum(x * y for x, y in zip(xs, ys))
596
+
597
+ def _base(j, k, c):
598
+
599
+ assert k - j == 1
600
+ aajk = subbasis(j, k)
601
+ assert not any(p*a for a in aajk) # orders are in {1,p}
602
+ idxs = [i for i, a in enumerate(aajk) if a]
603
+
604
+ rs = [([0], [0]) for i in range(len(aajk))]
605
+ for i in range(len(idxs)):
606
+ rs[idxs[i]] = (range(p), [0]) if i % 2 else ([0], range(p))
607
+ if len(idxs) % 2:
608
+ m = p.isqrt() + 1 # hence m^2 >= p
609
+ rs[idxs[-1]] = range(0, p, m), range(m)
610
+
611
+ tab = {}
612
+ for x in iproduct(*(r for r, _ in rs)):
613
+ key = dotprod(x, aajk)
614
+ if hasattr(key, 'set_immutable'):
615
+ key.set_immutable()
616
+ tab[key] = vector(x)
617
+ for y in iproduct(*(r for _, r in rs)):
618
+ key = c - dotprod(y, aajk)
619
+ if hasattr(key, 'set_immutable'):
620
+ key.set_immutable()
621
+ if key in tab:
622
+ return tab[key] + vector(y)
623
+
624
+ raise ValueError('not in group')
625
+
626
+ def _rec(j, k, c):
627
+
628
+ assert 0 <= j < k
629
+
630
+ if k - j <= 1: # base case
631
+ return _base(j, k, c)
632
+
633
+ w = 2
634
+ js = list(range(j, k, (k-j+w-1) // w)) + [k]
635
+ assert len(js) == w + 1
636
+
637
+ x = vector([0] * len(aa))
638
+ for i in reversed(range(w)):
639
+
640
+ gamma = p ** (js[i] - j) * c - dotprod(x, subbasis(js[i], k))
641
+
642
+ v = _rec(js[i], js[i+1], gamma)
643
+
644
+ assert not any(q1 % q2 for q1, q2 in zip(qq(js[i], js[i+1]), qq(js[i], k)))
645
+ x += vector(q1 // q2 * r for q1, q2, r in zip(qq(js[i], js[i+1]), qq(js[i], k), v))
646
+
647
+ return x
648
+
649
+ return _rec(0, max(vals), b)
650
+
651
+
652
+ def _expand_basis_pgroup(p, alphas, vals, beta, h, rel):
653
+ r"""
654
+ Given a basis of a `p`-subgroup of a finite abelian group
655
+ and an element lying outside the subgroup, extend the basis
656
+ to the subgroup spanned jointly by the original subgroup and
657
+ the new element.
658
+
659
+ Used as a subroutine in :func:`basis_from_generators`.
660
+
661
+ This function modifies ``alphas`` and ``vals`` in place.
662
+
663
+ ALGORITHM: [Suth2007]_, Algorithm 9.2
664
+
665
+ INPUT:
666
+
667
+ - ``p`` -- prime integer `p`
668
+ - ``alphas`` -- list; basis for a `p`-subgroup of an abelian group
669
+ - ``vals`` -- list; valuation at `p` of the orders of the ``alphas``
670
+ - ``beta`` -- element of the same abelian group as the ``alphas``
671
+ - ``h`` -- integer; valuation at `p` of the order of ``beta``
672
+ - ``rel`` -- list of integers; relation on ``alphas + [beta]``
673
+
674
+ OUTPUT: basis of the subgroup generated by ``alphas + [beta]``
675
+
676
+ EXAMPLES::
677
+
678
+ sage: from sage.groups.additive_abelian.additive_abelian_wrapper import _expand_basis_pgroup
679
+ sage: A = AdditiveAbelianGroup([9,3])
680
+ sage: alphas = [A((5,2))]
681
+ sage: beta = A((1,0))
682
+ sage: vals = [2]
683
+ sage: rel = next([ZZ(r),ZZ(s)] for s in range(9) for r in range(9) if s > 1 and not r*alphas[0] + s*beta)
684
+ sage: _expand_basis_pgroup(3, alphas, vals, beta, 2, rel)
685
+ sage: alphas
686
+ [(5, 2), (6, 2)]
687
+ sage: vals
688
+ [2, 1]
689
+ sage: len({i*alphas[0] + j*alphas[1] for i in range(3^2) for j in range(3^1)})
690
+ 27
691
+ """
692
+ # The given assertions should hold, but were commented out for speed.
693
+
694
+ k = len(rel)
695
+ if not (isinstance(alphas, list) and isinstance(vals, list)):
696
+ raise TypeError('alphas and vals must be lists for mutability')
697
+ if not len(alphas) == len(vals) == k - 1:
698
+ raise ValueError('alphas and/or vals have incorrect length')
699
+ # assert not sum(r*a for r,a in zip(rel, alphas+[beta]))
700
+ # assert all(a.order() == p**v for a,v in zip(alphas,vals))
701
+
702
+ if rel[-1] < 0:
703
+ raise ValueError('rel must have nonnegative entries')
704
+
705
+ # step 1
706
+ min_r = rel[-1] or float('inf')
707
+ for i in range(k-1):
708
+ if not rel[i]:
709
+ continue
710
+ if rel[i] < 0:
711
+ raise ValueError('rel must have nonnegative entries')
712
+ q = rel[i].p_primary_part(p)
713
+ alphas[i] *= rel[i] // q
714
+ rel[i] = q
715
+ min_r = min(q, min_r)
716
+ if min_r == float('inf'):
717
+ raise ValueError('rel must have at least one nonzero entry')
718
+ val_rlast = rel[-1].valuation(p)
719
+ # assert rel[-1] == p ** val_rlast
720
+ # assert not sum(r*a for r,a in zip(rel, alphas+[beta]))
721
+
722
+ # step 2
723
+ if rel[-1] == min_r:
724
+ for i in range(k-1):
725
+ beta += alphas[i] * (rel[i]//rel[-1])
726
+ alphas.append(beta)
727
+ vals.append(val_rlast)
728
+ # assert alphas[-1].order() == p**vals[-1]
729
+ return
730
+
731
+ # step 3
732
+ j = next(j for j, r in enumerate(rel) if r == min_r)
733
+ alphas[j] = sum(a * (r // rel[j]) for a, r in zip(alphas + [beta], rel))
734
+
735
+ # step 4
736
+ if not alphas[j]:
737
+ del alphas[j], vals[j]
738
+ if not alphas:
739
+ alphas.append(beta)
740
+ vals.append(val_rlast)
741
+ # assert alphas[-1].order() == p**vals[-1]
742
+ return
743
+
744
+ # step 5
745
+ beta_q = beta
746
+ for v in range(1, h):
747
+ beta_q *= p
748
+ try:
749
+ e = _discrete_log_pgroup(p, vals, alphas, -beta_q)
750
+ except ValueError:
751
+ continue
752
+ # step 6
753
+ _expand_basis_pgroup(p, alphas, vals, beta, h, list(e) + [p**v])
754
+ break
755
+ else:
756
+ alphas.append(beta)
757
+ vals.append(h)
758
+ # assert alphas[-1].order() == p**vals[-1]
759
+
760
+
761
+ def basis_from_generators(gens, ords=None):
762
+ r"""
763
+ Given a generating set of some finite abelian group
764
+ (additively written), compute and return a basis of
765
+ the group.
766
+
767
+ .. NOTE::
768
+
769
+ A *basis* of a finite abelian group is a generating
770
+ set `\{g_1, \ldots, g_n\}` such that each element of the
771
+ group can be written as a unique linear combination
772
+ `\alpha_1 g_1 + \cdots + \alpha_n g_n` with each
773
+ `\alpha_i \in \{0, \ldots, \mathrm{ord}(g_i)-1\}`.
774
+
775
+ ALGORITHM: [Suth2007]_, Algorithm 9.1 & Remark 9.1
776
+
777
+ EXAMPLES::
778
+
779
+ sage: # needs sage.groups sage.rings.finite_rings sage.schemes
780
+ sage: from sage.groups.additive_abelian.additive_abelian_wrapper import basis_from_generators
781
+ sage: E = EllipticCurve(GF(31337^6,'a'), j=37)
782
+ sage: E.order()
783
+ 946988065073788930380545280
784
+ sage: (R,S), (ordR,ordS) = basis_from_generators(E.gens())
785
+ sage: ordR, ordS
786
+ (313157428926517503432720, 3024)
787
+ sage: R.order() == ordR
788
+ True
789
+ sage: S.order() == ordS
790
+ True
791
+ sage: ordR * ordS == E.order()
792
+ True
793
+ sage: R.weil_pairing(S, ordR).multiplicative_order() == ordS
794
+ True
795
+ sage: E.abelian_group().invariants()
796
+ (3024, 313157428926517503432720)
797
+ """
798
+ if not gens:
799
+ return [], []
800
+ if ords is None:
801
+ ords = [g.order() for g in gens]
802
+
803
+ from sage.arith.functions import lcm
804
+ lam = lcm(ords)
805
+ ps = sorted(lam.prime_factors(), key=lam.valuation)
806
+
807
+ gammas = []
808
+ ms = []
809
+ for p in ps:
810
+ pgens = [(o.prime_to_m_part(p) * g, o.p_primary_part(p))
811
+ for g, o in zip(gens, ords) if not o % p]
812
+ assert pgens
813
+ pgens.sort(key=lambda tup: tup[1])
814
+
815
+ alpha, ord_alpha = pgens.pop()
816
+ vals = [ord_alpha.valuation(p)]
817
+ alphas = [alpha]
818
+
819
+ while pgens:
820
+ beta, ord_beta = pgens.pop()
821
+ try:
822
+ _ = _discrete_log_pgroup(p, vals, alphas, beta)
823
+ except ValueError:
824
+ pass
825
+ else:
826
+ continue
827
+
828
+ # step 4
829
+ val_beta = ord_beta.valuation(p)
830
+ beta_q = beta
831
+ for v in range(1, val_beta):
832
+ beta_q *= p
833
+ # assert beta_q == beta * p**v
834
+ try:
835
+ e = _discrete_log_pgroup(p, vals, alphas, -beta_q)
836
+ except ValueError:
837
+ continue
838
+ _expand_basis_pgroup(p, alphas, vals, beta, val_beta, list(e) + [p**v])
839
+ # assert all(a.order() == p**v for a,v in zip(alphas, vals))
840
+ break
841
+ else:
842
+ alphas.append(beta)
843
+ vals.append(val_beta)
844
+
845
+ for i, (v, a) in enumerate(sorted(zip(vals, alphas), reverse=True)):
846
+ if i < len(gammas):
847
+ gammas[i] += a
848
+ ms[i] *= p ** v
849
+ else:
850
+ gammas.append(a)
851
+ ms.append(p ** v)
852
+
853
+ # assert len({sum(i*g for i,g in zip(vec,gammas))
854
+ # for vec in __import__('itertools').product(*map(range,ms))}) \
855
+ # == __import__('sage').misc.misc_c.prod(ms)
856
+
857
+ return gammas, ms