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,1060 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat
3
+ r"""
4
+ Finitely generated free graded left modules over connected graded algebras
5
+
6
+ Let `A` be a connected graded algebra. Some methods here require in
7
+ addition that `A` be an algebra over a field or a PID and that Sage
8
+ has a description of a basis for `A`.
9
+
10
+ For example, let `p` be a prime number. The mod `p` Steenrod algebra
11
+ `A_p` is a connected algebra over the finite field of `p` elements.
12
+ Many of the modules presented here will be defined over `A_p`, or one
13
+ of its sub-Hopf algebras. E.g.::
14
+
15
+ sage: A = SteenrodAlgebra(p=2)
16
+
17
+ However, the current implementation can use any connected graded
18
+ algebra that has a graded basis where each graded part is finite
19
+ dimensional. Another good family is the exterior algebras::
20
+
21
+ sage: E.<x,y,z> = ExteriorAlgebra(QQ)
22
+
23
+ A free module is defined by the graded algebra and an ordered tuple
24
+ of degrees for the generators::
25
+
26
+ sage: M = A.free_graded_module(generator_degrees=(0,1))
27
+ sage: M
28
+ Free graded left module on 2 generators over
29
+ mod 2 Steenrod algebra, milnor basis
30
+
31
+ sage: F.<a,b,c> = E.free_graded_module((0,3,6))
32
+ sage: F
33
+ Free graded left module on 3 generators over
34
+ The exterior algebra of rank 3 over Rational Field
35
+
36
+ The resulting free modules will have generators in the degrees as specified::
37
+
38
+ sage: M.generator_degrees()
39
+ (0, 1)
40
+ sage: F.generator_degrees()
41
+ (0, 3, 6)
42
+
43
+ The default names for the generators are ``g[degree]`` if they are in
44
+ distinct degrees, ``g[degree, i]`` otherwise. They can be given other
45
+ names, as was done when creating the module ``F``::
46
+
47
+ sage: M.generators()
48
+ (g[0], g[1])
49
+ sage: F.generators()
50
+ (a, b, c)
51
+
52
+ The connectivity of a module over a connected graded algebra is the minimum
53
+ degree of all its module generators. Thus, if the module is non-trivial, the
54
+ connectivity is an integer::
55
+
56
+ sage: M.connectivity()
57
+ 0
58
+
59
+ Module elements
60
+ ---------------
61
+
62
+ For an `A`-module with generators `\{g_i\}_{i=1}^N`, any homogeneous element
63
+ of degree `n` has the form
64
+
65
+ .. MATH::
66
+
67
+ x = \sum_{i=1}^N a_i\cdot g_i\,,
68
+
69
+ where `a_i\in A_{n-\deg(g_i)}` for all `i`. The ordered set `\{a_i\}`
70
+ is referred to as the coefficients of `x`.
71
+
72
+ You can produce module elements from a given set of coefficients::
73
+
74
+ sage: coeffs = [Sq(5), Sq(1,1)]
75
+ sage: x = M(coeffs); x
76
+ Sq(5)*g[0] + Sq(1,1)*g[1]
77
+
78
+ You can also use the module action::
79
+
80
+ sage: Sq(2) * x
81
+ (Sq(4,1)+Sq(7))*g[0] + Sq(3,1)*g[1]
82
+
83
+ Each nonzero element has a well-defined degree::
84
+
85
+ sage: x.degree()
86
+ 5
87
+
88
+ However the zero element does not::
89
+
90
+ sage: zero = M.zero(); zero
91
+ 0
92
+ sage: zero.degree()
93
+ Traceback (most recent call last):
94
+ ...
95
+ ValueError: the zero element does not have a well-defined degree
96
+
97
+ Any two elements can be added as long as they are in the same degree::
98
+
99
+ sage: y = M.an_element(5); y
100
+ Sq(2,1)*g[0] + Sq(4)*g[1]
101
+ sage: x + y
102
+ (Sq(2,1)+Sq(5))*g[0] + (Sq(1,1)+Sq(4))*g[1]
103
+
104
+ or when at least one of them is zero::
105
+
106
+ sage: x + zero == x
107
+ True
108
+
109
+ Finally, additive inverses exist::
110
+
111
+ sage: x - x
112
+ 0
113
+
114
+ For every integer `n`, the set of module elements of degree `n` form
115
+ a free module over the ground ring `k`. A basis for this free module
116
+ can be computed::
117
+
118
+ sage: M.basis_elements(5)
119
+ (Sq(2,1)*g[0], Sq(5)*g[0], Sq(1,1)*g[1], Sq(4)*g[1])
120
+
121
+ together with a corresponding free module presentation::
122
+
123
+ sage: M.vector_presentation(5)
124
+ Vector space of dimension 4 over Finite Field of size 2
125
+
126
+ Given any element, its coordinates with respect to this basis can be computed::
127
+
128
+ sage: v = x.vector_presentation(); v
129
+ (0, 1, 1, 0)
130
+
131
+ Going the other way, any element can be constructed by specifying its
132
+ coordinates::
133
+
134
+ sage: x_ = M.element_from_coordinates((0,1,1,0), 5)
135
+ sage: x_
136
+ Sq(5)*g[0] + Sq(1,1)*g[1]
137
+ sage: x_ == x
138
+ True
139
+
140
+
141
+ Module homomorphisms
142
+ --------------------
143
+
144
+ Homomorphisms of free graded `A`-modules `M\to N` are linear maps of their
145
+ underlying free `k`-module which commute with the `A`-module structure.
146
+
147
+ To create a homomorphism, first create the object modeling the set of all
148
+ such homomorphisms using the free function ``Hom``::
149
+
150
+ sage: M = A.free_graded_module((0,1))
151
+ sage: N.<c2> = A.free_graded_module((2,))
152
+ sage: homspace = Hom(M, N); homspace
153
+ Set of Morphisms from Free graded left module on 2 generators
154
+ over mod 2 Steenrod algebra, milnor basis
155
+ to Free graded left module on 1 generator
156
+ over mod 2 Steenrod algebra, milnor basis
157
+ in Category of finite dimensional graded modules with basis
158
+ over mod 2 Steenrod algebra, milnor basis
159
+
160
+ Just as module elements, homomorphisms are created using the homspace
161
+ object. The only argument is a list of module elements in the codomain,
162
+ corresponding to the module generators of the domain::
163
+
164
+ sage: values = [Sq(2)*c2, Sq(2)*Sq(1)*c2]
165
+ sage: f = homspace(values)
166
+
167
+ The resulting homomorphism is the one sending the `i`-th generator of the
168
+ domain to the `i`-th codomain value given::
169
+
170
+ sage: f
171
+ Module morphism:
172
+ From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
173
+ To: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
174
+ Defn: g[0] |--> Sq(2)*c2
175
+ g[1] |--> (Sq(0,1)+Sq(3))*c2
176
+
177
+ Convenience methods exist for creating the trivial morphism::
178
+
179
+ sage: homspace.zero()
180
+ Module morphism:
181
+ From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
182
+ To: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
183
+ Defn: g[0] |--> 0
184
+ g[1] |--> 0
185
+
186
+ as well as the identity endomorphism::
187
+
188
+ sage: Hom(M, M).identity()
189
+ Module endomorphism of Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
190
+ Defn: g[0] |--> g[0]
191
+ g[1] |--> g[1]
192
+
193
+ Homomorphisms can be evaluated on elements of the domain module::
194
+
195
+ sage: v1 = f(Sq(7)*M.generator(0)); v1
196
+ Sq(3,2)*c2
197
+
198
+ sage: v2 = f(Sq(17)*M.generator(1)); v2
199
+ (Sq(11,3)+Sq(13,0,1)+Sq(17,1))*c2
200
+
201
+ and they respect the module action::
202
+
203
+ sage: v1 == Sq(7)*f(M.generator(0))
204
+ True
205
+
206
+ sage: v2 == Sq(17)*f(M.generator(1))
207
+ True
208
+
209
+ Any non-trivial homomorphism has a well-defined degree::
210
+
211
+ sage: f.degree()
212
+ 4
213
+
214
+ but just as module elements, the trivial homomorphism does not::
215
+
216
+ sage: zero_map = homspace.zero()
217
+ sage: zero_map.degree()
218
+ Traceback (most recent call last):
219
+ ...
220
+ ValueError: the zero morphism does not have a well-defined degree
221
+
222
+ Any two homomorphisms can be added as long as they are of the same degree::
223
+
224
+ sage: f2 = homspace([Sq(2)*c2, Sq(3)*c2])
225
+ sage: f + f2
226
+ Module morphism:
227
+ From: Free graded left module on 2 generators over mod 2 Steenrod algebra, milnor basis
228
+ To: Free graded left module on 1 generator over mod 2 Steenrod algebra, milnor basis
229
+ Defn: g[0] |--> 0
230
+ g[1] |--> Sq(0,1)*c2
231
+
232
+ or when at least one of them is zero::
233
+
234
+ sage: f + zero_map == f
235
+ True
236
+
237
+ Finally, additive inverses exist::
238
+
239
+ sage: f - f == 0
240
+ True
241
+
242
+ The restriction of a homomorphism to the free module of `n`-dimensional
243
+ module elements is a linear transformation::
244
+
245
+ sage: f_4 = f.vector_presentation(4); f_4
246
+ Vector space morphism represented by the matrix:
247
+ [0 1 0]
248
+ [1 1 1]
249
+ [0 1 0]
250
+ [0 0 0]
251
+ Domain: Vector space of dimension 4 over Finite Field of size 2
252
+ Codomain: Vector space of dimension 3 over Finite Field of size 2
253
+
254
+ This is compatible with the vector presentations of its domain and codomain
255
+ modules::
256
+
257
+ sage: f.domain() is M
258
+ True
259
+ sage: f.codomain() is N
260
+ True
261
+ sage: f_4.domain() is M.vector_presentation(4)
262
+ True
263
+ sage: f_4.codomain() is N.vector_presentation(4 + f.degree())
264
+ True
265
+
266
+
267
+ AUTHORS:
268
+
269
+ - Robert R. Bruner, Michael J. Catanzaro (2012): Initial version.
270
+ - Sverre Lunoee--Nielsen and Koen van Woerden (2019-11-29): Updated the
271
+ original software to Sage version 8.9.
272
+ - Sverre Lunoee--Nielsen (2020-07-01): Refactored the code and added
273
+ new documentation and tests.
274
+ """
275
+
276
+ # *****************************************************************************
277
+ # Copyright (C) 2019 Robert R. Bruner <rrb@math.wayne.edu>
278
+ # and Michael J. Catanzaro <mike@math.wayne.edu>
279
+ #
280
+ # This program is free software: you can redistribute it and/or modify
281
+ # it under the terms of the GNU General Public License as published by
282
+ # the Free Software Foundation, either version 2 of the License, or
283
+ # (at your option) any later version.
284
+ # https://www.gnu.org/licenses/
285
+ # ****************************************************************************
286
+
287
+ from sage.misc.cachefunc import cached_method
288
+ from sage.modules.free_module import FreeModule
289
+ from sage.modules.fp_graded.free_element import FreeGradedModuleElement
290
+ from sage.rings.infinity import infinity
291
+ from sage.categories.graded_modules import GradedModules
292
+ from sage.categories.principal_ideal_domains import PrincipalIdealDomains
293
+ from sage.categories.homset import Hom
294
+ from sage.combinat.free_module import CombinatorialFreeModule
295
+
296
+
297
+ class FreeGradedModule(CombinatorialFreeModule):
298
+ r"""
299
+ Create a finitely generated free graded module over a connected
300
+ graded algebra, with generators in specified degrees.
301
+
302
+ INPUT:
303
+
304
+ - ``algebra`` -- the graded connected algebra over which the module is
305
+ defined; this algebra must be equipped with a graded basis
306
+
307
+ - ``generator_degrees`` -- tuple of integers defining the number
308
+ of generators of the module, and their degrees
309
+
310
+ - ``names`` -- (optional) the names of the generators. If ``names``
311
+ is a comma-separated string like ``'a, b, c'``, then those will
312
+ be the names. Otherwise, for example if ``names`` is ``abc``,
313
+ then the names will be ``abc(d,i)``.
314
+
315
+ By default, if all generators are in distinct degrees, then the
316
+ ``names`` of the generators will have the form ``g_{d}`` where
317
+ ``d`` is the degree of the generator. If the degrees are not
318
+ distinct, then the generators will be called ``g_{d,i}`` where
319
+ ``d`` is the degree and ``i`` is its index in the list of
320
+ generators in that degree.
321
+
322
+ EXAMPLES::
323
+
324
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
325
+ sage: E.<x,y,z> = ExteriorAlgebra(QQ)
326
+ sage: M = FreeGradedModule(E, (-1,3))
327
+ sage: M
328
+ Free graded left module on 2 generators over
329
+ The exterior algebra of rank 3 over Rational Field
330
+ sage: M.generator_degrees()
331
+ (-1, 3)
332
+ sage: a, b = M.generators()
333
+ sage: (x*y*b).degree()
334
+ 5
335
+
336
+ ``names`` of generators::
337
+
338
+ sage: M.generators()
339
+ (g[-1], g[3])
340
+ sage: FreeGradedModule(E, (0, 0, 2)).generators()
341
+ (g[0, 0], g[0, 1], g[2, 0])
342
+ sage: FreeGradedModule(E, (0, 0, 2), names='x, y, z').generators()
343
+ (x, y, z)
344
+ sage: FreeGradedModule(E, (0, 0, 2), names='xyz').generators()
345
+ (xyz[0, 0], xyz[0, 1], xyz[2, 0])
346
+
347
+ ``names`` can also be defined implicitly using Sage's ``M.<...>`` syntax::
348
+
349
+ sage: A = SteenrodAlgebra(2)
350
+ sage: M.<x,y,z> = FreeGradedModule(A, (-2,2,4))
351
+ sage: M
352
+ Free graded left module on 3 generators over
353
+ mod 2 Steenrod algebra, milnor basis
354
+ sage: M.gens()
355
+ (x, y, z)
356
+ """
357
+ def __classcall__(cls, algebra, generator_degrees, category=None,
358
+ names=None, prefix=None, **kwds):
359
+ """
360
+ Normalize input to ensure a unique representation.
361
+
362
+ EXAMPLES::
363
+
364
+ sage: E.<x,y> = ExteriorAlgebra(QQ)
365
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
366
+ sage: M1 = FreeGradedModule(E, [1, 0, 2], names='a,b,c')
367
+ sage: M2.<a,b,c> = FreeGradedModule(E, (1, 0, 2))
368
+ sage: M1 is M2
369
+ True
370
+ """
371
+ if algebra.base_ring() not in PrincipalIdealDomains():
372
+ raise ValueError('the ground ring of the algebra must be a PID')
373
+
374
+ generator_degrees = tuple(generator_degrees)
375
+ category = GradedModules(algebra).WithBasis().FiniteDimensional().or_subcategory(category)
376
+ if names is not None:
377
+ from sage.structure.category_object import normalize_names
378
+ names = normalize_names(-1, names)
379
+ if len(generator_degrees) > 1:
380
+ if len(names) == 1:
381
+ if prefix is None:
382
+ prefix = names[0]
383
+ names = None # if prefix is specified and takes priority
384
+ if names is not None and len(names) != len(generator_degrees):
385
+ raise ValueError("the names do not correspond to the generators")
386
+ if prefix is None:
387
+ prefix = 'g'
388
+ return super().__classcall__(cls, algebra=algebra,
389
+ generator_degrees=generator_degrees,
390
+ category=category, names=names,
391
+ prefix=prefix, **kwds)
392
+
393
+ def __init__(self, algebra, generator_degrees, category, names=None, **kwds):
394
+ r"""
395
+ Create a finitely generated free graded module over a connected graded
396
+ algebra.
397
+
398
+ TESTS::
399
+
400
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
401
+ sage: A = SteenrodAlgebra(2)
402
+ sage: TestSuite(FreeGradedModule(A, (-2,2,4))).run()
403
+ """
404
+ # If generator_degrees is [d_0, d_1, ...], then
405
+ # the generators are indexed by (0,d_0), (1,d_1), ...
406
+ keys = list(enumerate(generator_degrees))
407
+ self._generator_degrees = generator_degrees
408
+
409
+ keys = []
410
+ degs_so_far = {}
411
+ unique = True
412
+ for i in generator_degrees:
413
+ if i in degs_so_far:
414
+ idx = degs_so_far[i] + 1
415
+ degs_so_far[i] += 1
416
+ unique = False
417
+ else:
418
+ idx = 0
419
+ degs_so_far[i] = 0
420
+ keys.append((i, idx))
421
+ if unique:
422
+ keys = [i[0] for i in keys]
423
+ kwds['iterate_key'] = True
424
+
425
+ # Call the base class constructor.
426
+ CombinatorialFreeModule.__init__(self, algebra,
427
+ basis_keys=keys,
428
+ category=category,
429
+ names=names,
430
+ **kwds)
431
+
432
+ Element = FreeGradedModuleElement
433
+
434
+ def change_ring(self, algebra):
435
+ r"""
436
+ Change the base ring of ``self``.
437
+
438
+ INPUT:
439
+
440
+ - ``algebra`` -- a connected graded algebra
441
+
442
+ OUTPUT:
443
+
444
+ The free graded module over ``algebra`` defined with the same
445
+ number of generators of the same degrees as ``self``.
446
+
447
+ EXAMPLES::
448
+
449
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
450
+ sage: A = SteenrodAlgebra(2)
451
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
452
+
453
+ sage: M = FreeGradedModule(A, [0,1])
454
+ sage: N = M.change_ring(A2); N
455
+ Free graded left module on 2 generators over sub-Hopf algebra of
456
+ mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
457
+
458
+ Changing back yields the original module::
459
+
460
+ sage: N.change_ring(A) is M
461
+ True
462
+ """
463
+ # We use the base class to avoid the category mixed one
464
+ return type(self).__base__(algebra, self.generator_degrees(),
465
+ prefix=self.prefix(), names=self._names)
466
+
467
+ def _repr_(self):
468
+ r"""
469
+ Construct a string representation of ``self``.
470
+
471
+ TESTS::
472
+
473
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
474
+ sage: A = SteenrodAlgebra(2)
475
+ sage: M = FreeGradedModule(A, (0,2,4))
476
+ sage: M
477
+ Free graded left module on 3 generators over
478
+ mod 2 Steenrod algebra, milnor basis
479
+ """
480
+ return ("Free graded left module on %s generator%s over %s"
481
+ % (len(self._generator_degrees),
482
+ "" if len(self._generator_degrees) == 1 else "s",
483
+ self.base_ring()))
484
+
485
+ def generator_degrees(self):
486
+ r"""
487
+ The degrees of the module generators.
488
+
489
+ OUTPUT:
490
+
491
+ A tuple containing the degrees of the generators for this
492
+ module, in the order that the generators were given when
493
+ ``self`` was constructed.
494
+
495
+ EXAMPLES::
496
+
497
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
498
+ sage: A = SteenrodAlgebra(2)
499
+ sage: M = FreeGradedModule(A, (-2,2,4))
500
+ sage: M.generator_degrees()
501
+ (-2, 2, 4)
502
+ """
503
+ return self._generator_degrees
504
+
505
+ def is_trivial(self) -> bool:
506
+ r"""
507
+ Return ``True`` if this module is trivial and ``False`` otherwise.
508
+
509
+ EXAMPLES::
510
+
511
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
512
+ sage: A = SteenrodAlgebra(2)
513
+ sage: FreeGradedModule(A, (-2,2,4)).is_trivial()
514
+ False
515
+ sage: FreeGradedModule(A, ()).is_trivial()
516
+ True
517
+ """
518
+ return not self._generator_degrees
519
+
520
+ def connectivity(self):
521
+ r"""
522
+ The connectivity of ``self``.
523
+
524
+ OUTPUT:
525
+
526
+ An integer equal to the minimal degree of all the generators, if
527
+ this module is non-trivial. Otherwise, `+\infty`.
528
+
529
+ EXAMPLES::
530
+
531
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
532
+ sage: A = SteenrodAlgebra(2)
533
+ sage: M = FreeGradedModule(A, (-2,2,4))
534
+ sage: M.connectivity()
535
+ -2
536
+
537
+ TESTS::
538
+
539
+ sage: M = FreeGradedModule(A, ())
540
+ sage: M.is_trivial()
541
+ True
542
+ sage: M.connectivity()
543
+ +Infinity
544
+ """
545
+ return min(self.generator_degrees() + (infinity,))
546
+
547
+ def _element_constructor_(self, coefficients):
548
+ r"""
549
+ Construct any element of ``self``.
550
+
551
+ INPUT:
552
+
553
+ - ``coefficients`` -- tuple of coefficient (i.e. elements of the
554
+ algebra for this module), an element of FreeGradedModule, or the
555
+ zero integer constant
556
+
557
+ OUTPUT:
558
+
559
+ An instance of the element class with coefficients from
560
+ ``coefficients``, the element ``coefficients`` if it already
561
+ was an element, or the zero module element.
562
+
563
+ EXAMPLES::
564
+
565
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
566
+ sage: A = SteenrodAlgebra(2)
567
+ sage: M.<a,b,c> = FreeGradedModule(A, (0,2,4))
568
+
569
+ sage: zero = M(0); zero
570
+ 0
571
+
572
+ sage: e = M((Sq(4), Sq(2), 1)); e
573
+ Sq(4)*a + Sq(2)*b + c
574
+
575
+ sage: e is M(e)
576
+ True
577
+ """
578
+ if isinstance(coefficients, self.element_class):
579
+ return coefficients
580
+
581
+ if not coefficients:
582
+ return self.zero()
583
+
584
+ A = self.base_ring()
585
+ return self._from_dict({b: A(c) for (c, b) in zip(coefficients, self._indices) if c},
586
+ remove_zeros=False)
587
+
588
+ def an_element(self, n=None):
589
+ r"""
590
+ Return an element of ``self``.
591
+
592
+ This function chooses deterministically an element of the module
593
+ in the given degree.
594
+
595
+ INPUT:
596
+
597
+ - ``n`` -- (optional) the degree of the element to construct
598
+
599
+ OUTPUT:
600
+
601
+ An element (of the given degree if specified).
602
+
603
+ EXAMPLES::
604
+
605
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
606
+ sage: A = SteenrodAlgebra(2)
607
+ sage: M = FreeGradedModule(A, (0,2,4))
608
+ sage: M.an_element(172)
609
+ Sq(0,0,2,0,1,0,1)*g[0] + Sq(0,4,0,0,1,0,1)*g[2] + Sq(7,1,0,0,1,0,1)*g[4]
610
+
611
+ Zero is the only element in the trivial module::
612
+
613
+ sage: FreeGradedModule(A, ()).an_element()
614
+ 0
615
+ """
616
+ if not self._generator_degrees:
617
+ return self.zero()
618
+
619
+ if n is None:
620
+ n = max(self.generator_degrees()) + 7
621
+
622
+ coefficients = []
623
+ for g in self.generator_degrees():
624
+ basis = self.base_ring().basis(n - g) if n >= g else ()
625
+ # All of the algebra generators in basis will bring the
626
+ # module generator in dimension g to dimension
627
+ # g + (topDimension - g) = topDimension. Picking any one of them
628
+ # will do, so we pick the one with index (g (mod l)).
629
+ l = len(basis)
630
+ if l:
631
+ coefficients.append(basis[g % l])
632
+ else:
633
+ coefficients.append(self.base_ring().zero())
634
+
635
+ return self(coefficients)
636
+
637
+ # @cached_method
638
+ def basis_elements(self, n):
639
+ r"""
640
+ Return a basis for the free module of degree ``n`` module elements.
641
+
642
+ .. NOTE::
643
+
644
+ Suppose ``self`` is a module over the graded algebra `A` with
645
+ base ring `R`. This returns a basis as a free module over `R`,
646
+ not a basis as a free module over `A`.
647
+
648
+ INPUT:
649
+
650
+ - ``n`` -- integer
651
+
652
+ OUTPUT:
653
+
654
+ A sequence of homogeneous module elements of degree ``n``, which
655
+ is a basis for the free module of all degree ``n`` module elements.
656
+
657
+ .. SEEALSO::
658
+
659
+ :meth:`vector_presentation`, :meth:`element_from_coordinates`
660
+
661
+ EXAMPLES::
662
+
663
+ sage: A = SteenrodAlgebra(2)
664
+ sage: M.<m0, m2, m4> = A.free_graded_module((0,2,4))
665
+ sage: M.basis_elements(8)
666
+ (Sq(1,0,1)*m0,
667
+ Sq(2,2)*m0,
668
+ Sq(5,1)*m0,
669
+ Sq(8)*m0,
670
+ Sq(0,2)*m2,
671
+ Sq(3,1)*m2,
672
+ Sq(6)*m2,
673
+ Sq(1,1)*m4,
674
+ Sq(4)*m4)
675
+ """
676
+ return tuple([self.term(self._indices[i], coeff)
677
+ for i in range(len(self._generator_degrees))
678
+ for coeff in self._basis_coeffs(n, i)])
679
+
680
+ def _basis_coeffs(self, d, i):
681
+ r"""
682
+ Return a basis for the free module of degree ``d`` module elements
683
+ corresponding to the ``i``-th generator.
684
+
685
+ .. NOTE::
686
+
687
+ Suppose ``self`` is a module over the graded algebra `A` with
688
+ base ring `R`. This returns a basis as a free module over `R`,
689
+ not a basis as a free module over `A`.
690
+
691
+ INPUT:
692
+
693
+ - ``d`` -- integer; the degree
694
+ - ``i`` -- integer; the factor
695
+
696
+ EXAMPLES::
697
+
698
+ sage: A = SteenrodAlgebra(2)
699
+ sage: M = A.free_graded_module((0,1))
700
+ sage: M._basis_coeffs(3, 0)
701
+ (Sq(0,1), Sq(3))
702
+ sage: M._basis_coeffs(3, 1)
703
+ (Sq(2),)
704
+ """
705
+ return self._cached_basis_coeffs(d - self._generator_degrees[i])
706
+
707
+ @cached_method
708
+ def _cached_basis_coeffs(self, d):
709
+ """
710
+ Return the basis for the degree ``d`` part of the base algebra.
711
+
712
+ EXAMPLES::
713
+
714
+ sage: E.<x,y> = ExteriorAlgebra(QQ)
715
+ sage: M = E.free_graded_module((0,0,1))
716
+ sage: M._cached_basis_coeffs(0)
717
+ (1,)
718
+ sage: M._cached_basis_coeffs(1)
719
+ (x, y)
720
+ sage: M._cached_basis_coeffs(2)
721
+ (x*y,)
722
+ sage: M._cached_basis_coeffs(3)
723
+ ()
724
+ """
725
+ return tuple(self.base_ring().basis(d))
726
+
727
+ @cached_method
728
+ def element_from_coordinates(self, coordinates, n):
729
+ r"""
730
+ The module element of degree ``n`` having the given coordinates
731
+ with respect to the basis of module elements given by
732
+ :meth:`basis_elements`.
733
+
734
+ INPUT:
735
+
736
+ - ``coordinates`` -- a sequence of elements of the ground ring
737
+ - ``n`` -- integer
738
+
739
+ OUTPUT: a module element of degree ``n``
740
+
741
+ .. SEEALSO::
742
+
743
+ :meth:`vector_presentation`, and :meth:`basis_elements`.
744
+
745
+ EXAMPLES::
746
+
747
+ sage: A = SteenrodAlgebra(2)
748
+ sage: M = A.free_graded_module((0,1))
749
+ sage: x = M.element_from_coordinates((0,1,0,1), 5); x
750
+ Sq(5)*g[0] + Sq(4)*g[1]
751
+ sage: basis = M.basis_elements(5)
752
+ sage: y = 0*basis[0] + 1*basis[1] + 0*basis[2] + 1*basis[3]
753
+ sage: x == y
754
+ True
755
+
756
+ sage: M.element_from_coordinates((0,0,0,0), 5)
757
+ 0
758
+ """
759
+ D = self.vector_presentation(n).dimension()
760
+ if len(coordinates) != D:
761
+ raise ValueError('the given coordinate vector has incorrect length (%d); '
762
+ 'it should have length %d' % (len(coordinates), D))
763
+
764
+ # Performance testing using this real life example:
765
+ #
766
+ # sage: A = SteenrodAlgebra(2)
767
+ # sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
768
+ # sage: rels = [[Sq(1),0,0,0], [Sq(2),0,0,0], [Sq(4),0,0,0], [Sq(8),0,0,0],
769
+ # ....: [0,Sq(1),0,0], [0,Sq(2),0,0], [0,Sq(4),0,0], [Sq(31),Sq(14),0,0],
770
+ # ....: [0,Sq(20),0,0], [0,0,Sq(1),0], [0,0,Sq(2),0], [0,Sq(31),Sq(6),0],
771
+ # ....: [0,0,Sq(8),0], [0,0,0,Sq(1)], [0,0,Sq(31),Sq(2)], [0,0,0,Sq(4)], [0,0,0,Sq(8)] ]
772
+ # sage: M = SteenrodFPModule(A, [0, 17, 42, 71], relations=rels)
773
+ # sage: res = M.resolution(2, top_dim=30, verbose=True)
774
+ #
775
+ # This function was called a total of 2897 times during the computation,
776
+ # and the total running time of the entire computation dropped from
777
+ # 57 to 21 seconds by adding the optimization.
778
+
779
+ ret = {}
780
+ A = self.base_ring()
781
+ j = 0
782
+ for i, key in enumerate(self._indices):
783
+ B = self._basis_coeffs(n, i)
784
+ coeff = A.linear_combination((b, coordinates[j + ind])
785
+ for ind, b in enumerate(B))
786
+ if coeff:
787
+ ret[key] = coeff
788
+ j += len(B)
789
+
790
+ if not ret:
791
+ return self.zero()
792
+ return self.element_class(self, ret)
793
+
794
+ @cached_method
795
+ def vector_presentation(self, n):
796
+ r"""
797
+ Return a free module over the ground ring of the module algebra
798
+ isomorphic to the degree ``n`` elements of ``self``.
799
+
800
+ Let `\mathcal{k}` be the ground ring of the algebra over this module
801
+ is defined, and let `M_n` be the free module of module elements of
802
+ degree ``n``.
803
+
804
+ The return value of this function is the free module
805
+ `\mathcal{k}^{r}` where `r = dim(M_n)`.
806
+
807
+ The isomorphism between `k^{r}` and `M_n` is given by the
808
+ bijection taking the standard basis element `e_i` to the `i`-th
809
+ element of the array returned by :meth:`basis_elements`.
810
+
811
+ INPUT:
812
+
813
+ - ``n`` -- integer degree
814
+
815
+ OUTPUT:
816
+
817
+ A free module over the ground ring of the algebra over which
818
+ ``self`` is defined, isomorphic to the free module of module
819
+ elements of degree ``n``.
820
+
821
+ .. SEEALSO::
822
+
823
+ :meth:`basis_elements`, :meth:`element_from_coordinates`
824
+
825
+ EXAMPLES::
826
+
827
+ sage: A1 = SteenrodAlgebra(2, profile=[2,1])
828
+ sage: M.<x> = A1.free_graded_module((0,))
829
+ sage: M.vector_presentation(3)
830
+ Vector space of dimension 2 over Finite Field of size 2
831
+ sage: M.basis_elements(3)
832
+ (Sq(0,1)*x, Sq(3)*x)
833
+ sage: [M.vector_presentation(i).dimension() for i in range(-2, 9)]
834
+ [0, 0, 1, 1, 1, 2, 1, 1, 1, 0, 0]
835
+
836
+ TESTS::
837
+
838
+ sage: A = SteenrodAlgebra(2)
839
+ sage: M = A.free_graded_module((0,2,4))
840
+ sage: V = M[4]; V
841
+ Vector space of dimension 4 over Finite Field of size 2
842
+ sage: V.dimension()
843
+ 4
844
+ """
845
+ m = len(self._generator_degrees)
846
+ return FreeModule(self.base_ring().base_ring(), sum(len(self._basis_coeffs(n, i))
847
+ for i in range(m)))
848
+
849
+ __getitem__ = vector_presentation
850
+
851
+ def generator(self, index):
852
+ r"""
853
+ Return the module generator with the given index.
854
+
855
+ EXAMPLES::
856
+
857
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
858
+ sage: A = SteenrodAlgebra(2)
859
+ sage: M = FreeGradedModule(A, (0,2,4))
860
+ sage: M.generator(0)
861
+ g[0]
862
+ sage: M.generator(1)
863
+ g[2]
864
+ sage: M.generator(2)
865
+ g[4]
866
+ """
867
+ try:
868
+ return self.gens()[index]
869
+ except IndexError:
870
+ raise ValueError('the parent module has generators in the index '
871
+ 'range [0, %s]; generator %s does not exist' %
872
+ (len(self.generator_degrees()) - 1, index))
873
+
874
+ gen = generator
875
+
876
+ def generators(self):
877
+ r"""
878
+ Return all the module generators.
879
+
880
+ EXAMPLES::
881
+
882
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
883
+ sage: A = SteenrodAlgebra(2)
884
+ sage: M = FreeGradedModule(A, (-2,1))
885
+ sage: M.generators()
886
+ (g[-2], g[1])
887
+ """
888
+ return self.gens()
889
+
890
+ def _Hom_(self, Y, category):
891
+ r"""
892
+ The internal hook used by the free function
893
+ :meth:`sage.categories.homset.hom.Hom` to create homsets
894
+ involving ``self``.
895
+
896
+ TESTS::
897
+
898
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
899
+ sage: A = SteenrodAlgebra(2)
900
+ sage: M = FreeGradedModule(A, (0,1))
901
+ sage: M._Hom_(M, category=None)
902
+ Set of Morphisms from Free graded left module on 2 generators
903
+ over mod 2 Steenrod algebra, milnor basis
904
+ to Free graded left module on 2 generators
905
+ over mod 2 Steenrod algebra, milnor basis
906
+ in Category of finite dimensional graded modules with basis
907
+ over mod 2 Steenrod algebra, milnor basis
908
+
909
+ sage: from sage.modules.fp_graded.module import FPModule
910
+ sage: F = FPModule(A, [1,3])
911
+ sage: Hom(M, F)
912
+ Set of Morphisms from Free graded left module on 2 generators ...
913
+ """
914
+ from .free_homspace import FreeGradedModuleHomspace
915
+ return FreeGradedModuleHomspace(self, Y, category)
916
+
917
+ def suspension(self, t):
918
+ r"""
919
+ Suspend ``self`` by the given degree ``t``.
920
+
921
+ INPUT:
922
+
923
+ - ``t`` -- integer
924
+
925
+ OUTPUT:
926
+
927
+ A module which is isomorphic to this module by a shift
928
+ of degrees by the integer ``t``.
929
+
930
+ EXAMPLES::
931
+
932
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
933
+ sage: A = SteenrodAlgebra(2)
934
+ sage: M = FreeGradedModule(A, (0,2,4))
935
+ sage: M.suspension(4).generator_degrees()
936
+ (4, 6, 8)
937
+ sage: M.suspension(-4).generator_degrees()
938
+ (-4, -2, 0)
939
+ """
940
+ degs = tuple(g + t for g in self.generator_degrees())
941
+ return FreeGradedModule(algebra=self.base_ring(),
942
+ generator_degrees=degs)
943
+
944
+ def has_relations(self) -> bool:
945
+ r"""
946
+ Return ``False`` as this has no relations.
947
+
948
+ This is for compatibility with
949
+ :class:`~sage.modules.fp_graded.module.FPModule`.
950
+
951
+ EXAMPLES::
952
+
953
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
954
+ sage: A = SteenrodAlgebra(2)
955
+ sage: F = FreeGradedModule(A, (-2,2,4))
956
+ sage: F.has_relations()
957
+ False
958
+ """
959
+ return False
960
+
961
+ def relations(self):
962
+ r"""
963
+ Return the relations of ``self``, which is ``()``.
964
+
965
+ This is for compatibility with
966
+ :class:`~sage.modules.fp_graded.module.FPModule`.
967
+
968
+ EXAMPLES::
969
+
970
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
971
+ sage: A = SteenrodAlgebra(2)
972
+ sage: F = FreeGradedModule(A, (-2,2,4))
973
+ sage: F.relations()
974
+ ()
975
+ """
976
+ return ()
977
+
978
+ def resolution(self, k, top_dim=None, verbose=False):
979
+ r"""
980
+ Return a free resolution of ``self`` of length ``k``.
981
+
982
+ Since ``self`` is free, the initial map in the resolution will
983
+ be the identity, and the rest of the maps will be zero.
984
+
985
+ INPUT:
986
+
987
+ - ``k`` -- nonnegative integer
988
+ - ``top_dim`` -- stop the computation at this degree. Ignored,
989
+ for compatibility with
990
+ :meth:`sage.modules.fp_graded.module.FPModule.resolution`.
991
+ - ``verbose`` -- boolean (default: ``False``); controls whether log
992
+ messages should be emitted
993
+
994
+ OUTPUT:
995
+
996
+ A list of homomorphisms `[1_M, 0, 0, \ldots, 0]` consisting of
997
+ the identity map on this module followed by zero maps. Other
998
+ than this module, the other modules in the resolution will be
999
+ zero.
1000
+
1001
+ EXAMPLES::
1002
+
1003
+ sage: E.<x,y,z> = ExteriorAlgebra(QQ)
1004
+ sage: M = E.free_graded_module((1,2))
1005
+ sage: M.resolution(0)
1006
+ [Module endomorphism of Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field
1007
+ Defn: g[1] |--> g[1]
1008
+ g[2] |--> g[2]]
1009
+ sage: M.resolution(1)
1010
+ [Module endomorphism of Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field
1011
+ Defn: g[1] |--> g[1]
1012
+ g[2] |--> g[2],
1013
+ Module morphism:
1014
+ From: Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field
1015
+ To: Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field]
1016
+ sage: M.resolution(4)
1017
+ [Module endomorphism of Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field
1018
+ Defn: g[1] |--> g[1]
1019
+ g[2] |--> g[2],
1020
+ Module morphism:
1021
+ From: Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field
1022
+ To: Free graded left module on 2 generators over The exterior algebra of rank 3 over Rational Field,
1023
+ Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field,
1024
+ Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field,
1025
+ Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 3 over Rational Field]
1026
+ """
1027
+ if k < 0:
1028
+ raise ValueError('the length of the resolution must be nonnegative')
1029
+
1030
+ # The first map \epsilon is the identity map
1031
+ ret_complex = [Hom(self, self).identity()]
1032
+
1033
+ if k == 0:
1034
+ return ret_complex
1035
+
1036
+ # All subsequent maps are trivial since self is free
1037
+ T = self.base_ring().free_graded_module(())
1038
+ ret_complex.append(Hom(T, self).zero())
1039
+
1040
+ if k == 1:
1041
+ return ret_complex
1042
+
1043
+ return ret_complex + [Hom(T, T).zero()] * (k - 1)
1044
+
1045
+ def minimal_presentation(self, top_dim=None, verbose=False):
1046
+ r"""
1047
+ Return a minimal presentation of ``self``.
1048
+
1049
+ OUTPUT: the identity morphism as ``self`` is free
1050
+
1051
+ EXAMPLES::
1052
+
1053
+ sage: from sage.modules.fp_graded.module import FPModule
1054
+ sage: A2 = SteenrodAlgebra(2)
1055
+
1056
+ sage: M = A2.free_graded_module([0,1])
1057
+ sage: M.minimal_presentation().is_identity()
1058
+ True
1059
+ """
1060
+ return Hom(self, self).identity()