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,404 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat
3
+ r"""
4
+ Homomorphisms of finitely presented modules over the Steenrod algebra
5
+
6
+ This class implements construction and basic manipulation of homomorphisms
7
+ between :mod:`finitely presented graded modules
8
+ <sage.modules.fp_graded.steenrod.module>` over the mod `p` Steenrod algebra.
9
+
10
+ AUTHORS:
11
+
12
+ - Robert R. Bruner, Michael J. Catanzaro (2012): Initial version.
13
+ - Sverre Lunoee--Nielsen and Koen van Woerden (2019-11-29): Updated the
14
+ original software to Sage version 8.9.
15
+ - Sverre Lunoee--Nielsen (2020-07-01): Refactored the code and added
16
+ new documentation and tests.
17
+ """
18
+
19
+ # ****************************************************************************
20
+ # Copyright (C) 2011 Robert R. Bruner <rrb@math.wayne.edu>
21
+ # and Michael J. Catanzaro <mike@math.wayne.edu>
22
+ #
23
+ # This program is free software: you can redistribute it and/or modify
24
+ # it under the terms of the GNU General Public License as published by
25
+ # the Free Software Foundation, either version 2 of the License, or
26
+ # (at your option) any later version.
27
+ # https://www.gnu.org/licenses/
28
+ # ****************************************************************************
29
+
30
+ from sage.categories.homset import Hom
31
+
32
+ from sage.algebras.steenrod.steenrod_algebra import SteenrodAlgebra_generic
33
+ from sage.modules.fp_graded.morphism import FPModuleMorphism
34
+ from sage.modules.fp_graded.free_morphism import FreeGradedModuleMorphism
35
+ from .profile import enveloping_profile_elements
36
+
37
+
38
+ class SteenrodFPModuleMorphism(FPModuleMorphism):
39
+ def profile(self):
40
+ r"""
41
+ Return a finite profile over which ``self`` can be defined.
42
+
43
+ This is in some ways the key method for these morphisms. As
44
+ discussed in the "Theoretical background" section of
45
+ :mod:`sage.modules.fp_graded.steenrod.module`, any
46
+ homomorphism of finitely presented modules over the Steenrod
47
+ algebra can be defined over a finite-dimensional sub-Hopf
48
+ algebra, and this method identifies such a sub-Hopf algebra
49
+ and returns its profile function.
50
+
51
+ EXAMPLES::
52
+
53
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
54
+ sage: A = SteenrodAlgebra(2)
55
+ sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
56
+ sage: one = Hom(M,M).identity()
57
+ sage: one.profile()
58
+ (2, 1)
59
+ sage: zero = Hom(M,M).zero()
60
+ sage: zero.profile()
61
+ (2, 1)
62
+ sage: A_fin = SteenrodAlgebra(2, profile=(2,1))
63
+ sage: M_fin = M.change_ring(A_fin)
64
+
65
+ Change the ring of the module ``M``::
66
+
67
+ sage: M_fin.change_ring(A) is M
68
+ True
69
+
70
+ We can change rings to the finite sub-Hopf algebra defined by
71
+ the profile we just computed::
72
+
73
+ sage: one_fin = one.change_ring(A_fin)
74
+ sage: one_fin.domain()
75
+ Finitely presented left module on 2 generators and 2 relations over
76
+ sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [2, 1]
77
+
78
+ If we change back to the full Steenrod algebra, we are back where
79
+ we started::
80
+
81
+ sage: one_fin.change_ring(A) == one
82
+ True
83
+ """
84
+ def _flatten(f):
85
+ return [c for value in f for c in value.dense_coefficient_list()]
86
+
87
+ elements = (_flatten(self.domain().relations())
88
+ + _flatten(self.codomain().relations())
89
+ + _flatten(self.values()))
90
+ elements = [a for a in elements if a not in (0, 1)]
91
+
92
+ return enveloping_profile_elements(elements,
93
+ char=self.base_ring().characteristic())
94
+
95
+ def is_injective(self, top_dim=None, verbose=False) -> bool:
96
+ r"""
97
+ Return ``True`` if ``self`` is injective.
98
+
99
+ INPUT:
100
+
101
+ - ``top_dim`` -- (optional) stop the computation at this degree; if
102
+ not specified, this is determined using :meth:`profile`
103
+ - ``verbose`` -- boolean (default: ``False``); whether log messages are
104
+ printed
105
+
106
+ EXAMPLES::
107
+
108
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
109
+ sage: A = SteenrodAlgebra(2)
110
+ sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
111
+ sage: S = SteenrodFPModule(A, [0], [[Sq(2)]])
112
+ sage: f = Hom(S, M)([M([0,1])])
113
+ sage: f.is_injective()
114
+ True
115
+ sage: g = Hom(S, M).zero()
116
+ sage: g.is_injective()
117
+ False
118
+ sage: z = Hom(SteenrodFPModule(A, []), M).zero()
119
+ sage: z.is_injective()
120
+ True
121
+ sage: z.is_zero()
122
+ True
123
+ """
124
+ algebra = self.base_ring()
125
+ finite_algebra = SteenrodAlgebra_generic(algebra.prime(), profile=self.profile())
126
+ return FPModuleMorphism.is_injective(self.change_ring(finite_algebra),
127
+ top_dim=top_dim, verbose=verbose)
128
+
129
+ def kernel_inclusion(self, top_dim=None, verbose=False):
130
+ r"""
131
+ Return the kernel of ``self`` as a morphism.
132
+
133
+ INPUT:
134
+
135
+ - ``top_dim`` -- (optional) stop the computation at this degree; if
136
+ not specified, this is determined using :meth:`profile`
137
+ - ``verbose`` -- boolean (default: ``False``); whether log messages are
138
+ printed
139
+
140
+ OUTPUT: an injective homomorphism into the domain ``self`` which is
141
+ onto the kernel of this homomorphism.
142
+
143
+ EXAMPLES::
144
+
145
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
146
+ sage: A = SteenrodAlgebra(2)
147
+ sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
148
+ sage: S = SteenrodFPModule(A, [0], [[Sq(2)]])
149
+ sage: f = Hom(S, M)([M([0,1])])
150
+ sage: f.is_injective()
151
+ True
152
+ sage: k = f.kernel_inclusion()
153
+ sage: k == 0
154
+ True
155
+
156
+ Since k is both trivial and injective, its domain should
157
+ be the zero module::
158
+
159
+ sage: k.domain().is_trivial()
160
+ True
161
+
162
+ sage: g = Hom(S, M)([M([Sq(3),Sq(2)])])
163
+ sage: h = g.kernel_inclusion()
164
+ sage: h.is_identity()
165
+ True
166
+ sage: ker = h.domain();
167
+ sage: ker is S
168
+ True
169
+
170
+ So `g` had to be trivial::
171
+
172
+ sage: g.is_zero()
173
+ True
174
+ """
175
+ return self._action(FPModuleMorphism.kernel_inclusion, top_dim=top_dim, verbose=verbose)
176
+
177
+ def cokernel_projection(self, verbose=False):
178
+ r"""
179
+ Compute the map to the cokernel of ``self``.
180
+
181
+ INPUT:
182
+
183
+ - ``verbose`` -- boolean (default: ``False``); whether log messages are
184
+ printed
185
+
186
+ OUTPUT:
187
+
188
+ The natural projection from the codomain of this homomorphism
189
+ to its cokernel.
190
+
191
+ EXAMPLES::
192
+
193
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
194
+ sage: A1 = SteenrodAlgebra(2, profile=(2,1))
195
+ sage: M = SteenrodFPModule(A1, [0], [[Sq(2)]])
196
+ sage: F = SteenrodFPModule(A1, [0])
197
+
198
+ sage: r = Hom(F, M)([A1.Sq(1)*M.generator(0)])
199
+ sage: co = r.cokernel_projection(); co
200
+ Module morphism:
201
+ From: Finitely presented left module on 1 generator and 1 relation over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [2, 1]
202
+ To: Finitely presented left module on 1 generator and 2 relations over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [2, 1]
203
+ Defn: g[0] |--> g[0]
204
+
205
+ sage: co.domain().is_trivial()
206
+ False
207
+ """
208
+ from .module import SteenrodFPModule
209
+ new_relations = ([x.dense_coefficient_list()
210
+ for x in self.codomain().relations()] +
211
+ [x.dense_coefficient_list() for x in self._values])
212
+
213
+ coker = SteenrodFPModule(self.base_ring(),
214
+ self.codomain().generator_degrees(),
215
+ relations=tuple(new_relations))
216
+
217
+ projection = Hom(self.codomain(), coker)(coker.generators())
218
+
219
+ return projection
220
+
221
+ def image(self, top_dim=None, verbose=False):
222
+ r"""
223
+ Return the image of ``self``.
224
+
225
+ INPUT:
226
+
227
+ - ``top_dim`` -- integer (optional); used by this function to stop the
228
+ computation at the given degree
229
+ - ``verbose`` -- boolean (default: ``False``); whether log messages are
230
+ printed
231
+
232
+ OUTPUT:
233
+
234
+ An injective homomorphism into the codomain of ``self`` which is
235
+ onto the image of ``self``.
236
+
237
+ EXAMPLES::
238
+
239
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
240
+ sage: A = SteenrodAlgebra(2)
241
+ sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)], [0,Sq(2)]])
242
+ sage: S = SteenrodFPModule(A, [0], [[Sq(2)]])
243
+ sage: f = Hom(S, M)([M([0,1])])
244
+ sage: f.is_injective()
245
+ True
246
+ sage: i = f.image(); i
247
+ Module morphism:
248
+ From: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
249
+ To: Finitely presented left module on 2 generators and 2 relations over mod 2 Steenrod algebra, milnor basis
250
+ Defn: g[1] |--> g[1]
251
+ sage: i.codomain() is M
252
+ True
253
+
254
+ Lift the map ``f`` over the inclusion ``i``::
255
+
256
+ sage: f_ = f.lift(i)
257
+ sage: f_.is_injective()
258
+ True
259
+ sage: f_.is_surjective()
260
+ True
261
+
262
+ sage: g = Hom(S, M)([M([Sq(3),Sq(2)])])
263
+ sage: j = g.image(); j
264
+ Module morphism:
265
+ From: Free graded left module on 0 generators over mod 2 Steenrod algebra, milnor basis
266
+ To: Finitely presented left module on 2 generators and 2 relations over mod 2 Steenrod algebra, milnor basis
267
+
268
+ So ``g`` had to be trivial::
269
+
270
+ sage: g.is_zero()
271
+ True
272
+ """
273
+ return self._action(FPModuleMorphism.image, top_dim=top_dim, verbose=verbose)
274
+
275
+ def _resolve_kernel(self, top_dim=None, verbose=False):
276
+ r"""
277
+ Resolve the kernel of this homomorphism by a free module.
278
+
279
+ INPUT:
280
+
281
+ - ``top_dim`` -- (optional) stop the computation at this degree; if
282
+ not specified, this is determined using :meth:`profile`
283
+ - ``verbose`` -- boolean (default: ``False``); whether log messages are
284
+ printed
285
+
286
+ OUTPUT: a homomorphism `j: F \rightarrow D` where `D` is the domain of
287
+ this homomorphism, `F` is free and such that `\ker(self) = \operatorname{im}(j)`.
288
+
289
+ TESTS::
290
+
291
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
292
+ sage: A = SteenrodAlgebra(2)
293
+ sage: F = SteenrodFPModule(A, [0,0])
294
+ sage: L = SteenrodFPModule(A, [0,0], [[Sq(3),Sq(0,1)], [0,Sq(2)]])
295
+ sage: f = Hom(F, L)([L([Sq(2),0]), L([0, Sq(2)])])
296
+ sage: f._resolve_kernel()
297
+ Module morphism:
298
+ From: Free graded left module on 3 generators over mod 2 Steenrod algebra, milnor basis
299
+ To: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
300
+ Defn: g[0, 0] |--> g[0, 1]
301
+ g[3, 0] |--> Sq(0,1)*g[0, 0]
302
+ g[3, 1] |--> Sq(3)*g[0, 0]
303
+
304
+ An odd primary example::
305
+
306
+ sage: A3 = SteenrodAlgebra(3)
307
+ sage: F0 = A3.free_graded_module([32, 40])
308
+ sage: F1 = A3.free_graded_module([0])
309
+ sage: g0 = F1.generator(0)
310
+ sage: f = Hom(F0, F1)([A3.P(8)*g0, (A3.P(6,1))*g0])
311
+ sage: f._resolve_kernel()
312
+ Module morphism:
313
+ From: Free graded left module on 5 generators over mod 3 Steenrod algebra, milnor basis
314
+ To: Free graded left module on 2 generators over mod 3 Steenrod algebra, milnor basis
315
+ Defn: g[36] |--> P(1)*g[32]
316
+ g[44] |--> P(3)*g[32] + (2P(1))*g[40]
317
+ g[56] |--> P(6)*g[32] + P(0,1)*g[40]
318
+ g[64] |--> P(0,2)*g[32] + (2P(6))*g[40]
319
+ g[72] |--> P(6,1)*g[32]
320
+ """
321
+ return self._action(FPModuleMorphism._resolve_kernel, top_dim=top_dim, verbose=verbose)
322
+
323
+ def _resolve_image(self, top_dim=None, verbose=False):
324
+ r"""
325
+ Resolve the image of this homomorphism by a free module.
326
+
327
+ INPUT:
328
+
329
+ - ``top_dim`` -- (optional) stop the computation at this degree; if
330
+ not specified, this is determined using :meth:`profile`
331
+ - ``verbose`` -- boolean (default: ``False``); whether log messages are
332
+ printed
333
+
334
+ OUTPUT: a homomorphism `j: F \rightarrow C` where `C` is the codomain
335
+ of this homomorphism, `F` is free, and
336
+ `\operatorname{im}(self) = \operatorname{im}(j)`.
337
+
338
+ TESTS::
339
+
340
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
341
+ sage: A = SteenrodAlgebra(2)
342
+ sage: F = SteenrodFPModule(A, [0,0])
343
+ sage: L = SteenrodFPModule(A, [0,0], [[Sq(3),Sq(0,1)], [0,Sq(2)]])
344
+ sage: f = Hom(F, L)([L([Sq(2),0]), L([0, Sq(2)])])
345
+ sage: f._resolve_image()
346
+ Module morphism:
347
+ From: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
348
+ To: Finitely presented left module on 2 generators and 2 relations over mod 2 Steenrod algebra, milnor basis
349
+ Defn: g[2] |--> Sq(2)*g[0, 0]
350
+ """
351
+ return self._action(FPModuleMorphism._resolve_image, top_dim=top_dim, verbose=verbose)
352
+
353
+ def _action(self, method, *args, **kwds):
354
+ r"""
355
+ Changes the ground ring to a finite algebra, acts by the given method
356
+ and changes back into the original ground ring before returning.
357
+
358
+ TESTS::
359
+
360
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
361
+ sage: from sage.modules.fp_graded.morphism import FPModuleMorphism
362
+ sage: A = SteenrodAlgebra(2)
363
+ sage: F = SteenrodFPModule(A, [0])
364
+ sage: L = SteenrodFPModule(A, [0], [[Sq(3)]])
365
+ sage: f = Hom(F, L)([L([Sq(2)])])
366
+ sage: f._action(FPModuleMorphism._resolve_image, verbose=True)
367
+ Computing using the profile:
368
+ (2, 1)
369
+ Resolving the image in the range of dimensions [0, 8]: 0 1 2 3 4 5 6 7 8.
370
+ Module morphism:
371
+ From: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
372
+ To: Finitely presented left module on 1 generator and 1 relation over mod 2 Steenrod algebra, milnor basis
373
+ Defn: g[2] |--> Sq(2)*g[0]
374
+ """
375
+ small_profile = self.profile()
376
+
377
+ if kwds.get('verbose', False):
378
+ print('Computing using the profile:')
379
+ print(small_profile)
380
+
381
+ algebra = self.base_ring()
382
+
383
+ # Choose a finite sub Hopf-algebra of the original algebra.
384
+ finite_algebra = SteenrodAlgebra_generic(algebra.prime(), profile=small_profile)
385
+
386
+ # Perform the chosen action on the module after having changed rings
387
+ # to the finite algebra.
388
+ fp_result = method(self.change_ring(finite_algebra), *args, **kwds)
389
+
390
+ # Change back to the original algebra and also from FPModule
391
+ # to SteenrodFPModule, and return the result.
392
+ #
393
+ # This is very clunky. Clean it up!
394
+ f = fp_result.change_ring(self.base_ring())
395
+ M = f.domain()
396
+ N = f.codomain()
397
+ new_values = [N.linear_combination(zip(N.generators(),
398
+ v.dense_coefficient_list()))
399
+ for v in f.values()]
400
+ return Hom(M, N)(new_values)
401
+
402
+
403
+ class SteenrodFreeModuleMorphism(FreeGradedModuleMorphism, SteenrodFPModuleMorphism):
404
+ pass
@@ -0,0 +1,241 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ Functions for computing the profiles of sub-Hopf algebras of the
4
+ mod p Steenrod algebra.
5
+
6
+ In particular, the main functions are :func:`profile_elt` and
7
+ :func:`enveloping_profile_elements`, which compute the profile
8
+ function for the smallest sub-Hopf algebra of the Steenrod algebra
9
+ containing the given elements.
10
+
11
+ See :func:`SteenrodAlgebra
12
+ <sage.algebras.steenrod.steenrod_algebra.SteenrodAlgebra>`
13
+ :mod:`sage.algebras.steenrod.steenrod_algebra` for information about
14
+ profile functions.
15
+
16
+ AUTHORS:
17
+
18
+ - Robert R. Bruner, Michael J. Catanzaro (2012): initial version
19
+ - John Palmieri (2022): cleanup, modifications
20
+ """
21
+
22
+ # ****************************************************************************
23
+ # Copyright (C) 2011 Robert R. Bruner <rrb@math.wayne.edu> and
24
+ # Michael J. Catanzaro <mike@math.wayne.edu>
25
+ #
26
+ # This program is free software: you can redistribute it and/or modify
27
+ # it under the terms of the GNU General Public License as published by
28
+ # the Free Software Foundation, either version 2 of the License, or
29
+ # (at your option) any later version.
30
+ # https://www.gnu.org/licenses/
31
+ # ****************************************************************************
32
+
33
+ from itertools import zip_longest
34
+ from sage.rings.integer_ring import ZZ
35
+
36
+
37
+ def profile_elt(elt, char=2):
38
+ """
39
+ Return the smallest sub-Hopf algebra containing ``elt``.
40
+
41
+ INPUT:
42
+
43
+ - ``elt`` -- element of the Steenrod algebra (or a sub-Hopf algebra
44
+ of it) or list(s) representing it
45
+ - ``char`` -- (default: 2) the characteristic
46
+
47
+ ``elt`` could also be a list (when ``char=2``) or a pair of lists
48
+ (otherwise), in which case it is treated as corresponding to an
49
+ element of the Steenrod algebra: ``(a, b, c) <-> Sq(a, b, c)`` or
50
+ ``((a, b, c), (x, y, z)) <-> Q_a Q_b Q_c P(x, y, z)``.
51
+
52
+ OUTPUT: the profile function corresponding to the smallest
53
+ sub-Hopf algebra containing the element passed
54
+
55
+ EXAMPLES::
56
+
57
+ sage: from sage.modules.fp_graded.steenrod.profile import profile_elt
58
+ sage: A2 = SteenrodAlgebra(2)
59
+ sage: profile_elt(A2.Sq(2))
60
+ (2, 1)
61
+ sage: profile_elt(A2.Sq(4,8))
62
+ (3, 4, 3, 2, 1)
63
+
64
+ sage: B = SteenrodAlgebra(3)
65
+ sage: b = B.an_element(); b
66
+ 2 Q_1 Q_3 P(2,1)
67
+ sage: profile_elt(b, char=3)
68
+ ((1, 1), (1, 2, 1, 2))
69
+ sage: profile_elt(B.P(2,1), char=3)
70
+ ((1, 1), ())
71
+ sage: profile_elt(B.Q(2), char=3)
72
+ ((0,), (1, 1, 2))
73
+ """
74
+ try:
75
+ # Convert element of the Steenrod algebra to iterable(s).
76
+ elt = elt.leading_support()
77
+ except AttributeError:
78
+ # Not in the Steenrod algebra so presumably already in the
79
+ # right form.
80
+ pass
81
+
82
+ if char == 2:
83
+ minprofile = [max(0, ZZ(n).exact_log(char) + 1) for n in elt]
84
+ return find_min_profile(minprofile, char)
85
+
86
+ # odd primes:
87
+ alistQ, alistP = elt
88
+ minprofileP = [max(0, ZZ(n).exact_log(char) + 1) for n in alistP]
89
+ if not alistQ:
90
+ minpQ = []
91
+ else:
92
+ minpQ = [1] * (max(alistQ) + 1)
93
+ for j in alistQ:
94
+ minpQ[j] = 2
95
+ return find_min_profile((minprofileP, minpQ), char=char)
96
+
97
+
98
+ def enveloping_profile_elements(alist, char=2):
99
+ r"""
100
+ Return the profile function for the smallest sub-Hopf algebra
101
+ containing the list of elements passed.
102
+
103
+ INPUT:
104
+
105
+ - ``alist`` -- list of Steenrod algebra elements
106
+ - ``char`` -- (default: 2) the characteristic
107
+
108
+ As with :func:`profile_elt`, the entries of ``alist`` could also
109
+ be iterables or pairs of iterables.
110
+
111
+ OUTPUT: the profile function for the minimum sub-algebra
112
+ containing all the elements of ``alist``
113
+
114
+ EXAMPLES::
115
+
116
+ sage: from sage.modules.fp_graded.steenrod.profile import enveloping_profile_elements
117
+ sage: enveloping_profile_elements([Sq(2),Sq(4)])
118
+ (3, 2, 1)
119
+ sage: enveloping_profile_elements([Sq(4)])
120
+ (3, 2, 1)
121
+ sage: enveloping_profile_elements([Sq(2,1,2),Sq(7)])
122
+ (3, 2, 2, 1)
123
+
124
+ sage: B = SteenrodAlgebra(3)
125
+ sage: enveloping_profile_elements([B.P(2,1), B.P(0,0,3)], char=3)
126
+ ((1, 1, 2, 1), ())
127
+ sage: enveloping_profile_elements([B.P(3,1)], char=3)
128
+ ((2, 1), ())
129
+ sage: enveloping_profile_elements([B.P(2,1), B.P(0,0,3), B.Q(2)], char=3)
130
+ ((1, 1, 2, 1), (1, 1, 2))
131
+ """
132
+ if char == 2:
133
+ profiles = [profile_elt(x) for x in alist if x != 0]
134
+ if not profiles:
135
+ return (0,)
136
+ # zip_longest doesn't do the right thing with lists of length
137
+ # 1, but this case is simple:
138
+ if len(profiles) == 1:
139
+ return profiles[0]
140
+ return find_min_profile(max(*a) for a in zip_longest(*profiles, fillvalue=0))
141
+
142
+ # odd primes:
143
+ profiles = [profile_elt(x, char) for x in alist if x != 0]
144
+ if len(profiles) == 1:
145
+ return profiles[0]
146
+ profiles_P = [x[0] for x in profiles]
147
+ profiles_Q = [x[1] for x in profiles]
148
+ if not profiles_P and not profiles_Q:
149
+ return ((0,), (0,))
150
+ else:
151
+ maxP = [max(*a) for a in zip_longest(*profiles_P, fillvalue=0)]
152
+ maxQ = [max(*a) for a in zip_longest(*profiles_Q, fillvalue=0)]
153
+ return find_min_profile([maxP, maxQ], char=char)
154
+
155
+
156
+ def find_min_profile(prof, char=2):
157
+ r"""
158
+ Return the smallest valid profile function containing a tuple of
159
+ nonnegative integers.
160
+
161
+ INPUT:
162
+
163
+ - ``prof`` -- list or tuple of nonnegative integers
164
+ - ``char`` -- (default: 2) the characteristic
165
+
166
+ OUTPUT: a valid profile containing ``prof``
167
+
168
+ A profile function `e` must satisfy `e(r) \geq \min( e(r-i) - i,
169
+ e(i))` for all `0 < i < r`, and at odd primes, if `k(i+j) = 1`,
170
+ then either `e(i) \leq j` or `k(j) = 1` for all `i \geq 1`, `j
171
+ \geq 0`. We use these inequalities to generate the smallest
172
+ profile function `e` satisfying `e(r) \geq prof(r)` for each `r`
173
+ when `char=2`, and similarly at odd primes.
174
+
175
+ EXAMPLES::
176
+
177
+ sage: from sage.modules.fp_graded.steenrod.profile import find_min_profile
178
+ sage: find_min_profile([1,2])
179
+ (1, 2, 1)
180
+ sage: find_min_profile([2,1])
181
+ (2, 1)
182
+ sage: find_min_profile([1,2,3])
183
+ (1, 2, 3, 1, 1)
184
+ sage: find_min_profile([4])
185
+ (4, 3, 2, 1)
186
+
187
+ sage: find_min_profile([[4], []], char=3)
188
+ ((4, 3, 2, 1), ())
189
+ sage: find_min_profile([[1], [2]], char=3)
190
+ ((1,), (2, 2))
191
+ sage: find_min_profile([[], [2,1,1,2]], char=3)
192
+ ((0,), (2, 1, 1, 2))
193
+ """
194
+ if char == 2:
195
+ if not prof:
196
+ return (0,)
197
+ # Add a zero to the front so that the relevant part of the
198
+ # pseudo-profile new is indexed starting with 1.
199
+ new = [0] + list(prof)
200
+ # new is probably too short. Increase its length by using the
201
+ # defining inequality for a profile function:
202
+ # e(s+t) \geq min(e(s)-t, e(t)).
203
+ # So if min(e(s)-t, e(t)) > 0, then the length must be at
204
+ # least s+t.
205
+ pad = 0
206
+ new += [0] * max(new)
207
+ for t in range(len(new)):
208
+ for s in range(len(new)):
209
+ if min(new[s] - t, new[t]) > 0:
210
+ pad = max(pad, s + t)
211
+ e = [0] * len(new)
212
+ # Now compute the new profile e.
213
+ for r in range(len(e)):
214
+ m = max((min(e[r - i] - i, e[i]) for i in range(1, r)), default=0)
215
+ e[r] = max(m, new[r])
216
+ # Strip trailing zeroes.
217
+ while e[-1] == 0:
218
+ e = e[:-1]
219
+ return tuple(e[1:])
220
+
221
+ # odd primes:
222
+ pP = list(prof[0])
223
+ pQ = list(prof[1])
224
+ P = find_min_profile(pP, char=2)
225
+ if not pQ:
226
+ return (P, tuple(pQ))
227
+ # newQ: dictionary of the form {index: value} where value is
228
+ # either 1 or 2.
229
+ maxP = max(P)
230
+ newQ = list(pQ) + [None] * maxP
231
+ for j in range(len(pQ)):
232
+ if newQ[j] == 2:
233
+ for i in range(maxP):
234
+ if P[i] > j:
235
+ newQ[i + 1 + j] = 2
236
+ # Strip all of the None values
237
+ # Do it from the back to minimize reshuffles and keep the index matching
238
+ for i in range(len(newQ) - 1, len(pQ) - 1, -1):
239
+ if newQ[i] is None:
240
+ del newQ[i]
241
+ return (P, tuple(newQ))