passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.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 +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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-x86_64-linux-gnu.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,1340 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.combinat
3
+ r"""
4
+ Finitely presented graded modules
5
+
6
+ Let `R` be a connected graded algebra. A finitely presented module
7
+ over `R` is a module isomorphic to the cokernel of an `R`-linear
8
+ homomorphism `f: F_1 \to F_0` of finitely generated free modules: the
9
+ generators of `F_0` correspond to the generators of the module, and
10
+ the generators of `F_1` correspond to its relations, via the map `f`.
11
+
12
+ This module class takes as input a set of generators and relations
13
+ and uses them to construct a presentation, using the class
14
+ :class:`~sage.modules.fp_graded.free_morphism.FreeGradedModuleMorphism`.
15
+ It also allows such a morphism as input.
16
+
17
+ This package was designed with homological algebra in mind, and its API
18
+ focuses on maps rather than objects. A good example of this is the kernel
19
+ function :meth:`sage.modules.fp_graded.morphism.FPModuleMorphism.kernel_inclusion`,
20
+ which computes the kernel of a homomorphism `f: M\to N`. Its return value
21
+ is not an instance of the module class, but rather an injective homomorphism
22
+ `i: K\to M` with the property that `\operatorname{im}(i) = \ker(f)`.
23
+
24
+ .. NOTE::
25
+
26
+ Some methods here require in addition that `R` be an algebra over a
27
+ field or a PID and that Sage has a description of a basis for `R`.
28
+
29
+ AUTHORS:
30
+
31
+ - Robert R. Bruner, Michael J. Catanzaro (2012): Initial version.
32
+ - Sverre Lunoee--Nielsen and Koen van Woerden (2019-11-29): Updated the
33
+ original software to Sage version 8.9.
34
+ - Sverre Lunoee--Nielsen (2020-07-01): Refactored the code and added
35
+ new documentation and tests.
36
+ """
37
+
38
+ # *****************************************************************************
39
+ # Copyright (C) 2011 Robert R. Bruner <rrb@math.wayne.edu> and
40
+ # Michael J. Catanzaro <mike@math.wayne.edu>
41
+ #
42
+ # This program is free software: you can redistribute it and/or modify
43
+ # it under the terms of the GNU General Public License as published by
44
+ # the Free Software Foundation, either version 2 of the License, or
45
+ # (at your option) any later version.
46
+ # https://www.gnu.org/licenses/
47
+ # ****************************************************************************
48
+
49
+ from sage.categories.homset import Hom
50
+ from sage.categories.morphism import Morphism
51
+ from sage.misc.cachefunc import cached_method
52
+ from sage.rings.infinity import infinity
53
+ from sage.categories.graded_modules import GradedModules
54
+ from sage.modules.module import Module
55
+ from sage.structure.indexed_generators import IndexedGenerators
56
+ from sage.structure.unique_representation import UniqueRepresentation
57
+ from sage.misc.lazy_attribute import lazy_attribute
58
+ from sage.structure.element import parent
59
+
60
+ from sage.modules.fp_graded.free_module import FreeGradedModule
61
+ from sage.modules.fp_graded.free_element import FreeGradedModuleElement
62
+ from sage.modules.fp_graded.element import FPElement
63
+
64
+ # Note that some of the methods below assume that the base ring is a
65
+ # field and that the graded algebra has a chosen free module basis in
66
+ # each degree. See for example :meth:`basis_elements`,
67
+ # :meth:`element_from_coordinates`, :meth:`__getitem__`,
68
+ # :meth:`vector_presentation`, and possibly others.
69
+
70
+
71
+ class FPModule(UniqueRepresentation, IndexedGenerators, Module):
72
+ r"""
73
+ A finitely presented module over a connected graded algebra.
74
+
75
+ INPUT:
76
+
77
+ One of the following:
78
+
79
+ - ``arg0`` -- a morphism such that the module is the cokernel, or
80
+ a free graded module, in which case the output is the same
81
+ module, viewed as finitely presented
82
+
83
+ Otherwise:
84
+
85
+ - ``arg0`` -- the graded connected algebra over which the module is
86
+ defined; this algebra must be equipped with a graded basis
87
+
88
+ - ``generator_degrees`` -- tuple of integer degrees
89
+
90
+ - ``relations`` -- tuple of relations; a relation is a tuple of
91
+ coefficients `(c_1, \ldots, c_n)`, ordered so that they
92
+ correspond to the module generators, that is, such a tuple
93
+ corresponds to the relation
94
+
95
+ .. MATH::
96
+
97
+ c_1 g_1 + \ldots + c_n g_n = 0
98
+
99
+ if the generators are `(g_1, \ldots, g_n)`
100
+
101
+ EXAMPLES::
102
+
103
+ sage: from sage.modules.fp_graded.module import FPModule
104
+
105
+ sage: E.<x,y> = ExteriorAlgebra(QQ)
106
+ sage: M = FPModule(E, [0, 1], [[x, 1]])
107
+ sage: a, b = M.generators()
108
+ sage: x*a + b == 0
109
+ True
110
+ sage: (x*a + b).normalize()
111
+ 0
112
+
113
+ sage: A3 = SteenrodAlgebra(2, profile=(4,3,2,1))
114
+ sage: M = FPModule(A3, [0, 1], [[Sq(2), Sq(1)]])
115
+ sage: M.generators()
116
+ (g[0], g[1])
117
+ sage: M.relations()
118
+ (Sq(2)*g[0] + Sq(1)*g[1],)
119
+ sage: M.is_trivial()
120
+ False
121
+
122
+ sage: Z = FPModule(A3, [])
123
+ sage: Z.generators()
124
+ ()
125
+ sage: Z.relations()
126
+ ()
127
+ sage: Z.is_trivial()
128
+ True
129
+
130
+ sage: from sage.modules.fp_graded.free_module import FreeGradedModule
131
+ sage: F = FreeGradedModule(E, [0, 1])
132
+ sage: one = Hom(F, F).identity()
133
+ sage: Z = FPModule(one)
134
+ sage: Z.is_trivial()
135
+ True
136
+
137
+ sage: FPModule(E.free_graded_module([0, 1]))
138
+ Free graded left module on 2 generators over The exterior algebra of rank 2 over Rational Field
139
+ """
140
+ @staticmethod
141
+ def __classcall__(cls, arg0, generator_degrees=None, relations=(), names=None):
142
+ r"""
143
+ Normalize input to ensure a unique representation.
144
+
145
+ TESTS::
146
+
147
+ sage: from sage.modules.fp_graded.module import FPModule
148
+ sage: A3 = SteenrodAlgebra(2, profile=(4,3,2,1))
149
+ sage: M1.<m0,m1> = FPModule(A3, [0, 1], [[Sq(2), Sq(1)]])
150
+ sage: M2 = FPModule(A3, (0, 1), [[Sq(2), Sq(1)]], names='m0,m1')
151
+ sage: M1 is M2
152
+ True
153
+ """
154
+ if names is not None:
155
+ from sage.structure.category_object import normalize_names
156
+ names = normalize_names(-1, names)
157
+
158
+ # If given a morphism, then that defines a module
159
+ if isinstance(arg0, Morphism):
160
+ if arg0.is_zero():
161
+ # This morphism defines a free module, so just use the codomain
162
+ return arg0.codomain()
163
+ return super().__classcall__(cls, arg0, names=names)
164
+
165
+ if isinstance(arg0, FreeGradedModule):
166
+ return arg0
167
+
168
+ if generator_degrees is None:
169
+ raise ValueError("the generator_degrees must be specified")
170
+
171
+ # The free module on the generators of the module.
172
+ generator_module = arg0.free_graded_module(generator_degrees, names=names)
173
+
174
+ if not relations: # If we are trivially free, then just use the free module
175
+ return generator_module
176
+
177
+ # Use the coefficients given for the relations and make module elements
178
+ # from them. Filter out the zero elements, as they are redundant.
179
+ rels = [v for v in [generator_module(r) for r in relations] if not v.is_zero()]
180
+
181
+ # The free module for the relations of the module.
182
+ relations_module = arg0.free_graded_module(tuple([r.degree() for r in rels]))
183
+
184
+ # The module we want to model is the cokernel of the following morphism
185
+ j = Hom(relations_module, generator_module)(rels)
186
+ return super().__classcall__(cls, j, names=names)
187
+
188
+ def __init__(self, j, names):
189
+ r"""
190
+ Create a finitely presented module over a connected graded algebra.
191
+
192
+ TESTS::
193
+
194
+ sage: from sage.modules.fp_graded.module import FPModule
195
+ sage: A3 = SteenrodAlgebra(2, profile=(4,3,2,1))
196
+ sage: M = FPModule(A3, [0, 1], [[Sq(2), Sq(1)]])
197
+ sage: TestSuite(M).run()
198
+
199
+ Checking containment::
200
+
201
+ sage: from sage.modules.fp_graded.module import FPModule
202
+ sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
203
+ sage: x = M([Sq(1), 1])
204
+ sage: x in M
205
+ True
206
+ sage: N = FPModule(SteenrodAlgebra(2), [0], [[Sq(2)]])
207
+ sage: y = Sq(2) * N.generator(0)
208
+ sage: y in M
209
+ False
210
+ """
211
+ self._j = j
212
+ codomain = j.codomain()
213
+
214
+ self._generator_degrees = codomain.generator_degrees()
215
+ algebra = codomain.base_ring()
216
+
217
+ # Call the base class constructors.
218
+ keys = j.codomain().basis().keys()
219
+ cat = GradedModules(algebra).FinitelyPresented()
220
+ IndexedGenerators.__init__(self, keys)
221
+ Module.__init__(self, algebra, category=cat, names=names)
222
+
223
+ from sage.combinat.family import Family
224
+ self._spanning_set = Family(self._indices, self.monomial)
225
+
226
+ Element = FPElement
227
+
228
+ def defining_homomorphism(self):
229
+ """
230
+ Return the homomorphism defining ``self``.
231
+
232
+ ``self`` is a finitely presented module defined as the
233
+ cokernel of a map `j: F_0 \to F_1` of free modules, and this
234
+ returns that map.
235
+
236
+ EXAMPLES::
237
+
238
+ sage: from sage.modules.fp_graded.module import FPModule
239
+ sage: E.<x,y> = ExteriorAlgebra(QQ)
240
+ sage: M = FPModule(E, [0, 1], [[x, 1]])
241
+ sage: M.defining_homomorphism()
242
+ Module morphism:
243
+ From: Free graded left module on 1 generator over The exterior algebra of rank 2 over Rational Field
244
+ To: Free graded left module on 2 generators over The exterior algebra of rank 2 over Rational Field
245
+ Defn: g[1] |--> x*g[0] + g[1]
246
+ """
247
+ return self._j
248
+
249
+ def _free_module(self):
250
+ """
251
+ Return the free module of which ``self`` is a quotient.
252
+
253
+ EXAMPLES::
254
+
255
+ sage: from sage.modules.fp_graded.module import FPModule
256
+ sage: A = SteenrodAlgebra()
257
+ sage: M.<x,y> = FPModule(A, [0, 1], [[Sq(2), Sq(1)]])
258
+ sage: M.generators()
259
+ (x, y)
260
+ sage: F = M._free_module()
261
+ sage: F.generators()
262
+ (x, y)
263
+ """
264
+ return self._j.codomain()
265
+
266
+ def change_ring(self, algebra):
267
+ r"""
268
+ Change the base ring of ``self``.
269
+
270
+ INPUT:
271
+
272
+ - ``algebra`` -- a connected graded algebra
273
+
274
+ OUTPUT:
275
+
276
+ The finitely presented module over ``algebra`` defined with the
277
+ exact same number of generators of the same degrees and relations
278
+ as ``self``.
279
+
280
+ EXAMPLES::
281
+
282
+ sage: from sage.modules.fp_graded.module import FPModule
283
+ sage: A = SteenrodAlgebra(2)
284
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
285
+
286
+ sage: M = FPModule(A, [0,1], [[Sq(2), Sq(1)]])
287
+ sage: N = M.change_ring(A2); N
288
+ Finitely presented left module on 2 generators and 1 relation over
289
+ sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
290
+
291
+ Changing back yields the original module::
292
+
293
+ sage: N.change_ring(A) is M
294
+ True
295
+
296
+ TESTS:
297
+
298
+ Subclasses preserve their type::
299
+
300
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
301
+ sage: A = SteenrodAlgebra(2)
302
+ sage: A1 = SteenrodAlgebra(2, profile=(2,1))
303
+
304
+ sage: M = SteenrodFPModule(A, [0,1], [[Sq(2), Sq(1)]])
305
+ sage: N = M.change_ring(A1)
306
+ sage: isinstance(N, SteenrodFPModule)
307
+ True
308
+
309
+ Changing back yields the original module::
310
+
311
+ sage: N.change_ring(A) is M
312
+ True
313
+ """
314
+ return type(self).__base__(self._j.change_ring(algebra), names=self._names)
315
+
316
+ def _from_dict(self, d, coerce=False, remove_zeros=True):
317
+ r"""
318
+ Construct an element of ``self`` from an ``{index: coefficient}``
319
+ dictionary.
320
+
321
+ INPUT:
322
+
323
+ - ``d`` -- dictionary
324
+
325
+ This code is taken from the method of the same name for
326
+ ``sage.combinat.free_module.FreeModule``.
327
+
328
+ EXAMPLES::
329
+
330
+ sage: from sage.modules.fp_graded.module import FPModule
331
+ sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
332
+ sage: x = M.an_element()
333
+ sage: M._from_dict(x.monomial_coefficients()) == x
334
+ True
335
+ """
336
+ assert isinstance(d, dict)
337
+ if coerce:
338
+ R = self.base_ring()
339
+ d = {key: R(coeff) for key, coeff in d.items()}
340
+ if remove_zeros:
341
+ d = {key: coeff for key, coeff in d.items() if coeff}
342
+ return self.element_class(self, d)
343
+
344
+ def _monomial(self, index):
345
+ """
346
+ EXAMPLES::
347
+
348
+ sage: from sage.modules.fp_graded.module import FPModule
349
+ sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
350
+ sage: M._monomial(0)
351
+ g[0]
352
+
353
+ TESTS::
354
+
355
+ sage: M.monomial(3)
356
+ Traceback (most recent call last):
357
+ ...
358
+ ValueError: index not in indices
359
+ """
360
+ if index not in self._indices:
361
+ raise ValueError("index not in indices")
362
+ return self._from_dict({index: self.base_ring().one()}, remove_zeros=False)
363
+
364
+ @lazy_attribute
365
+ def monomial(self):
366
+ """
367
+ Return the basis element indexed by ``i``.
368
+
369
+ INPUT:
370
+
371
+ - ``i`` -- an element of the index set
372
+
373
+ EXAMPLES::
374
+
375
+ sage: from sage.modules.fp_graded.module import FPModule
376
+ sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
377
+ sage: M.monomial(0)
378
+ g[0]
379
+ sage: M.monomial(1)
380
+ g[1]
381
+ """
382
+ # Should use a real Map, as soon as combinatorial_classes are enumerated sets, and therefore parents
383
+ from sage.categories.poor_man_map import PoorManMap
384
+ return PoorManMap(self._monomial, domain=self._indices, codomain=self, name="Term map")
385
+
386
+ @cached_method
387
+ def zero(self):
388
+ r"""
389
+ Return the zero element.
390
+
391
+ EXAMPLES::
392
+
393
+ sage: from sage.modules.fp_graded.module import FPModule
394
+ sage: M = FPModule(SteenrodAlgebra(2), [0,1], [[Sq(4), Sq(3)]])
395
+ sage: M.zero()
396
+ 0
397
+ """
398
+ return self.element_class(self, {})
399
+
400
+ def _element_constructor_(self, x):
401
+ r"""
402
+ Construct any element of ``self``.
403
+
404
+ INPUT:
405
+
406
+ - ``x`` -- tuple of coefficients, an element of FPModule, or the
407
+ zero integer constant
408
+
409
+ OUTPUT:
410
+
411
+ An instance of the element class with coefficients from ``x``, the
412
+ element ``x`` if it already was an element, or the zero element.
413
+
414
+ EXAMPLES::
415
+
416
+ sage: from sage.modules.fp_graded.module import FPModule
417
+ sage: A = SteenrodAlgebra(2)
418
+ sage: M.<a0,a2,a4> = FPModule(A, [0,2,4], [[Sq(4), Sq(2), 0]])
419
+
420
+ Creating an element from coefficients::
421
+
422
+ sage: e = M((Sq(6), 0, Sq(2))); e
423
+ Sq(6)*a0 + Sq(2)*a4
424
+ sage: e in M
425
+ True
426
+
427
+ Creating the zero element::
428
+
429
+ sage: z = M(0); z
430
+ 0
431
+ sage: z.is_zero()
432
+ True
433
+
434
+ Idempotent on elements belonging to the module::
435
+
436
+ sage: M(e)
437
+ Sq(6)*a0 + Sq(2)*a4
438
+ sage: e is M(e)
439
+ True
440
+ """
441
+ if parent(x) is self:
442
+ return x
443
+ if not self._generator_degrees: # the trivial module
444
+ return self.zero()
445
+ if not x:
446
+ return self.zero()
447
+ B = self._spanning_set
448
+ if isinstance(x, FreeGradedModuleElement):
449
+ if x.parent() is self._free_module():
450
+ # x.parent() should have the same generator list as self.
451
+ coeffs = x.monomial_coefficients()
452
+ return sum(coeffs[idx] * B[idx] for idx in coeffs)
453
+ raise ValueError("element is not in this module")
454
+ return self._from_dict({b: c for (c, b) in zip(x, self._indices) if c},
455
+ remove_zeros=False)
456
+
457
+ def _repr_(self):
458
+ r"""
459
+ Construct a string representation of ``self``.
460
+
461
+ EXAMPLES::
462
+
463
+ sage: from sage.modules.fp_graded.module import FPModule
464
+ sage: A = SteenrodAlgebra(2)
465
+ sage: M = FPModule(A, [0,2,4], [[Sq(4),Sq(2),0]]); M
466
+ Finitely presented left module on 3 generators and 1 relation over
467
+ mod 2 Steenrod algebra, milnor basis
468
+ sage: N = FPModule(A, [0,1], [[Sq(2),Sq(1)], [Sq(2)*Sq(1),Sq(2)]]); N
469
+ Finitely presented left module on 2 generators and 2 relations over
470
+ mod 2 Steenrod algebra, milnor basis
471
+ sage: F = FPModule(A, [2]); F
472
+ Free graded left module on 1 generator over
473
+ mod 2 Steenrod algebra, milnor basis
474
+ """
475
+ return "Finitely presented left module on %s generator%s and %s relation%s over %s"\
476
+ % (len(self._free_module().generator_degrees()),
477
+ "" if len(self._free_module().generator_degrees()) == 1 else "s",
478
+ len(self._j.values()), "" if len(self._j.values()) == 1 else "s",
479
+ self.base_ring())
480
+
481
+ def _repr_term(self, m):
482
+ """
483
+ Return a string representing the generator indexed by ``m``.
484
+
485
+ EXAMPLES::
486
+
487
+ sage: from sage.modules.fp_graded.module import FPModule
488
+ sage: A = SteenrodAlgebra(2)
489
+ sage: M = FPModule(A, [0,2,4], [[Sq(4),Sq(2),0]])
490
+ sage: M._repr_term(4)
491
+ 'g[4]'
492
+ """
493
+ return self._free_module()._repr_term(m)
494
+
495
+ def _latex_term(self, m):
496
+ """
497
+ Return a LaTeX representing the generator indexed by ``m``.
498
+
499
+ EXAMPLES::
500
+
501
+ sage: from sage.modules.fp_graded.module import FPModule
502
+ sage: A = SteenrodAlgebra(2)
503
+ sage: M = FPModule(A, [0,2,4], [[Sq(4),Sq(2),0]])
504
+ sage: M._latex_term(4)
505
+ 'g_{4}'
506
+ """
507
+ return self._free_module()._latex_term(m)
508
+
509
+ def connectivity(self):
510
+ r"""
511
+ The connectivity of ``self``.
512
+
513
+ Since a finitely presented module over a connected algebra is in
514
+ particular bounded below, the connectivity is an integer when the
515
+ module is non-trivial, and `+\infty` when the module is trivial.
516
+
517
+ EXAMPLES::
518
+
519
+ sage: from sage.modules.fp_graded.module import FPModule
520
+ sage: A = SteenrodAlgebra(2)
521
+
522
+ sage: M = FPModule(A, [0,2,4], [[0, Sq(5), Sq(3)], [Sq(7), 0, Sq(2)*Sq(1)]])
523
+ sage: M.connectivity()
524
+ 0
525
+
526
+ sage: G = FPModule(A, [0,2], [[1,0]])
527
+ sage: G.connectivity()
528
+ 2
529
+
530
+ TESTS::
531
+
532
+ sage: C = FPModule(SteenrodAlgebra(2, profile=(3,2,1)), [0], relations=[[Sq(1)], [0]])
533
+ sage: C.connectivity()
534
+ 0
535
+
536
+ sage: F = FPModule(A, [-1])
537
+ sage: F.connectivity()
538
+ -1
539
+
540
+ sage: F = FPModule(A, [])
541
+ sage: F.connectivity()
542
+ +Infinity
543
+
544
+ sage: F = FPModule(A, [0], [[1]])
545
+ sage: F.connectivity()
546
+ +Infinity
547
+ """
548
+ # In case there are no relations, the connectivity is the equal to
549
+ # the connectivity of the free module on the generators.
550
+ if self._j._degree is None:
551
+ return self._free_module().connectivity()
552
+
553
+ # We must check that the generator(s) in the free generator module are
554
+ # not hit by relations, since we are not guaranteed that the
555
+ # presentation we have is minimal.
556
+ X = sorted(self.generator_degrees())
557
+
558
+ previous = None
559
+ for k in X:
560
+ if previous is not None and k == previous:
561
+ continue
562
+ if not self._j.vector_presentation(k - self._j._degree).is_surjective():
563
+ return k
564
+ previous = k
565
+
566
+ return infinity
567
+
568
+ def is_trivial(self) -> bool:
569
+ r"""
570
+ Return ``True`` if ``self`` is isomorphic to the trivial module
571
+ and ``False`` otherwise.
572
+
573
+ EXAMPLES::
574
+
575
+ sage: from sage.modules.fp_graded.module import FPModule
576
+ sage: A = SteenrodAlgebra(2)
577
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
578
+
579
+ sage: M = FPModule(A2, [])
580
+ sage: M.is_trivial()
581
+ True
582
+
583
+ sage: N = FPModule(A, [1,2])
584
+ sage: N.is_trivial()
585
+ False
586
+
587
+ sage: P = FPModule(A, [1,2], [[1,0], [0,1]])
588
+ sage: P.is_trivial()
589
+ True
590
+
591
+ TESTS::
592
+
593
+ sage: C = FPModule(SteenrodAlgebra(2, profile=(3,2,1)), [0], [[Sq(1)], [0]])
594
+ sage: C.is_trivial()
595
+ False
596
+
597
+ sage: C = FPModule(SteenrodAlgebra(2), [0], [[Sq(1)], [1]])
598
+ sage: C.is_trivial()
599
+ True
600
+ """
601
+ return self.connectivity() == infinity
602
+
603
+ def has_relations(self) -> bool:
604
+ r"""
605
+ Return ``True`` if no relations are defined, and ``False``
606
+ otherwise.
607
+
608
+ .. NOTE::
609
+
610
+ This module is free if this function returns ``False``, but a free
611
+ module can have (redundant) relations.
612
+
613
+ EXAMPLES::
614
+
615
+ sage: from sage.modules.fp_graded.module import FPModule
616
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
617
+
618
+ sage: F = FPModule(A2, [1,2])
619
+ sage: F.has_relations()
620
+ False
621
+
622
+ sage: M = FPModule(A2, [1,2], [[Sq(2), Sq(1)]])
623
+ sage: M.has_relations()
624
+ True
625
+
626
+ A free module constructed with a redundant generator and relation::
627
+
628
+ sage: N = FPModule(A2, [0, 0], [[0, 1]])
629
+ sage: N.has_relations()
630
+ True
631
+ sage: # Computing a minimal presentation reveals an
632
+ ....: # isomorphic module with no relations.
633
+ sage: N_min = N.minimal_presentation().domain()
634
+ sage: N_min.has_relations()
635
+ False
636
+ """
637
+ return not self._j.is_zero()
638
+
639
+ def an_element(self, n=None):
640
+ r"""
641
+ An element of this module.
642
+
643
+ This function chooses deterministically an element, i.e. the output
644
+ depends only on the module and its input ``n``.
645
+
646
+ INPUT:
647
+
648
+ - ``n`` -- (optional) the degree of the element to construct
649
+
650
+ OUTPUT: a module element of the given degree
651
+
652
+ EXAMPLES::
653
+
654
+ sage: from sage.modules.fp_graded.module import FPModule
655
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
656
+ sage: M = FPModule(A2, [0,2,4], [[0, Sq(5), Sq(3)], [Sq(7), 0, Sq(2)*Sq(1)]])
657
+
658
+ sage: [M.an_element(i) for i in range(10)]
659
+ [g[0],
660
+ Sq(1)*g[0],
661
+ Sq(2)*g[0] + g[2],
662
+ Sq(0,1)*g[0] + Sq(1)*g[2],
663
+ Sq(1,1)*g[0] + Sq(2)*g[2] + g[4],
664
+ Sq(2,1)*g[0] + Sq(0,1)*g[2] + Sq(1)*g[4],
665
+ Sq(0,2)*g[0] + Sq(1,1)*g[2] + Sq(2)*g[4],
666
+ Sq(0,0,1)*g[0] + Sq(2,1)*g[2] + Sq(0,1)*g[4],
667
+ Sq(1,0,1)*g[0] + Sq(6)*g[2] + Sq(1,1)*g[4],
668
+ Sq(2,0,1)*g[0] + Sq(4,1)*g[2] + Sq(2,1)*g[4]]
669
+ """
670
+ a_free_element = self._free_module().an_element(n)
671
+ return self(a_free_element)
672
+
673
+ @cached_method
674
+ def basis_elements(self, n, verbose=False):
675
+ r"""
676
+ Return a basis for the free module of degree ``n`` module elements.
677
+
678
+ .. NOTE::
679
+
680
+ Suppose ``self`` is a module over the graded algebra `A` with
681
+ base ring `R`. This returns a basis as a free module over `R`.
682
+
683
+ INPUT:
684
+
685
+ - ``n`` -- integer
686
+ - ``verbose`` -- boolean (default: ``False``); controls whether log
687
+ messages should be emitted
688
+
689
+ OUTPUT:
690
+
691
+ A list of homogeneous module elements of degree ``n`` which is
692
+ a basis for the free module of all degree ``n`` module elements.
693
+
694
+ .. SEEALSO::
695
+
696
+ :meth:`vector_presentation`, :meth:`element_from_coordinates`
697
+
698
+ EXAMPLES::
699
+
700
+ sage: from sage.modules.fp_graded.module import FPModule
701
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
702
+ sage: M.<m0,m2> = FPModule(A2, [0,2], [[Sq(4), Sq(2)], [0, Sq(6)]])
703
+
704
+ sage: M.basis_elements(4)
705
+ (Sq(1,1)*m0, Sq(4)*m0)
706
+
707
+ sage: M.basis_elements(5)
708
+ (Sq(2,1)*m0, Sq(5)*m0, Sq(0,1)*m2)
709
+
710
+ sage: M.basis_elements(25)
711
+ ()
712
+
713
+ sage: M.basis_elements(0)
714
+ (m0,)
715
+
716
+ sage: M.basis_elements(2)
717
+ (Sq(2)*m0, m2)
718
+
719
+ TESTS::
720
+
721
+ sage: Z0 = FPModule(A2, [])
722
+ sage: Z0.basis_elements(n=10)
723
+ ()
724
+
725
+ sage: Z1 = FPModule(A2, [1], [[1]])
726
+ sage: Z1.basis_elements(n=10)
727
+ ()
728
+ """
729
+ return tuple([self.element_from_coordinates(x, n) for
730
+ x in self.vector_presentation(n, verbose).basis()])
731
+
732
+ @cached_method
733
+ def element_from_coordinates(self, coordinates, n):
734
+ r"""
735
+ Return the module element in degree ``n`` having the given coordinates
736
+ with respect to the basis returned by :meth:`basis_elements`.
737
+
738
+ This function is inverse to
739
+ :meth:`sage.modules.fp_graded.element.FPElement.vector_presentation`.
740
+
741
+ INPUT:
742
+
743
+ - ``coordinates`` -- a vector of coordinates
744
+ - ``n`` -- the degree of the element to construct
745
+
746
+ OUTPUT:
747
+
748
+ A module element of degree ``n`` having the given coordinates
749
+ with respect to the basis returned by :meth:`basis_elements`.
750
+
751
+ EXAMPLES::
752
+
753
+ sage: from sage.modules.fp_graded.module import FPModule
754
+ sage: A = SteenrodAlgebra(2)
755
+ sage: M = FPModule(A, [0], [[Sq(4)], [Sq(7)], [Sq(4)*Sq(9)]])
756
+
757
+ sage: M.vector_presentation(12).dimension()
758
+ 3
759
+ sage: x = M.element_from_coordinates((0,1,0), 12); x
760
+ Sq(0,4)*g[0]
761
+
762
+ Applying the inverse function brings us back to the coordinate form::
763
+
764
+ sage: x.vector_presentation()
765
+ (0, 1, 0)
766
+
767
+ TESTS::
768
+
769
+ sage: M.element_from_coordinates((0,1,0,0), 12)
770
+ Traceback (most recent call last):
771
+ ...
772
+ ValueError: the given coordinate vector has incorrect length (4);
773
+ it should have length 3
774
+
775
+ .. SEEALSO::
776
+
777
+ :meth:`sage.modules.fp_graded.module.FPModule.vector_presentation`
778
+ """
779
+ M_n = self.vector_presentation(n)
780
+
781
+ if len(coordinates) != M_n.dimension():
782
+ raise ValueError('the given coordinate vector has incorrect length (%d); '
783
+ 'it should have length %d' % (len(coordinates), M_n.dimension()))
784
+
785
+ free_element = self._free_module().element_from_coordinates(
786
+ M_n.lift(coordinates), n)
787
+
788
+ return self(free_element.dense_coefficient_list())
789
+
790
+ @cached_method
791
+ def vector_presentation(self, n, verbose=False):
792
+ r"""
793
+ Return a free module isomorphic to the free module of module
794
+ elements of degree ``n``.
795
+
796
+ INPUT:
797
+
798
+ - ``n`` -- the degree of the presentation
799
+
800
+ OUTPUT: a vector space
801
+
802
+ .. SEEALSO::
803
+
804
+ :meth:`basis_elements`, :meth:`element_from_coordinates`
805
+
806
+ EXAMPLES::
807
+
808
+ sage: from sage.modules.fp_graded.module import FPModule
809
+ sage: A = SteenrodAlgebra(2)
810
+ sage: M = FPModule(A, [0,2,4], [[Sq(4),Sq(2),0]])
811
+
812
+ sage: V = M.vector_presentation(4)
813
+ sage: V.dimension()
814
+ 3
815
+
816
+ sage: len(M.basis_elements(4))
817
+ 3
818
+
819
+ TESTS::
820
+
821
+ sage: from sage.modules.fp_graded.module import FPModule
822
+ sage: A = SteenrodAlgebra(2)
823
+ sage: M = FPModule(A, [0,2,4], [[Sq(4),Sq(2),0]])
824
+ sage: M[4].dimension()
825
+ 3
826
+ """
827
+ # Get the vector space presentation of the free module on the
828
+ # module generators.
829
+ F_n = self._free_module().vector_presentation(n)
830
+
831
+ # Compute the sub vector space generated by the relations.
832
+ spanning_set = []
833
+
834
+ if verbose:
835
+ num_total_iterations = 0
836
+ for relation in self._j.values():
837
+ if relation.is_zero():
838
+ continue
839
+
840
+ num_total_iterations += len(self.base_ring().basis(n - relation.degree()))
841
+
842
+ progress = 0
843
+ iteration_count = 0
844
+
845
+ for relation in self._j.values():
846
+ if relation.is_zero():
847
+ continue
848
+
849
+ for a in self.base_ring().basis(n - relation.degree()):
850
+ if verbose:
851
+ iteration_count += 1
852
+ prog = int(100 * iteration_count / num_total_iterations)
853
+ if prog > progress:
854
+ progress = prog
855
+ print('Progress: %d/100' % prog)
856
+
857
+ # assert: isinstance(FreeElement, relation)
858
+ v = (a * relation).vector_presentation()
859
+ if v is not None:
860
+ spanning_set.append(v)
861
+
862
+ R_n = F_n.submodule(spanning_set)
863
+
864
+ # Return the quotient of the free part by the relations.
865
+ return F_n / R_n
866
+
867
+ __getitem__ = vector_presentation
868
+
869
+ def _Hom_(self, Y, category):
870
+ r"""
871
+ The internal hook used by the free function
872
+ :meth:`sage.categories.homset.hom.Hom` to create homsets
873
+ involving ``self``.
874
+
875
+ TESTS::
876
+
877
+ sage: from sage.modules.fp_graded.module import FPModule
878
+ sage: A = SteenrodAlgebra(2)
879
+ sage: F = FPModule(A, [1,3])
880
+ sage: L = FPModule(A, [2,3], [[Sq(2),Sq(1)], [0,Sq(2)]])
881
+
882
+ sage: Hom(F, L)
883
+ Set of Morphisms from Free graded left module on 2 generators ...
884
+
885
+ sage: M = A.free_graded_module((2,1))
886
+ sage: Hom(F, M)
887
+ Set of Morphisms from Free graded left module on 2 generators ...
888
+ """
889
+ from .homspace import FPModuleHomspace
890
+ if not isinstance(Y, (FPModule, FreeGradedModule)):
891
+ raise ValueError('cannot create homspace between incompatible types:\n%s ->\n%s' % (self.__class__, type(Y)))
892
+ if Y.base_ring() != self.base_ring():
893
+ raise ValueError('the modules are not defined over the same base ring')
894
+
895
+ return FPModuleHomspace(self, Y, category)
896
+
897
+ def generator_degrees(self):
898
+ r"""
899
+ Return the degrees of the generators for ``self``.
900
+
901
+ EXAMPLES::
902
+
903
+ sage: from sage.modules.fp_graded.module import FPModule
904
+ sage: A4 = SteenrodAlgebra(2, profile=(4,3,2,1))
905
+ sage: N = FPModule(A4, [0, 1], [[Sq(2), Sq(1)]])
906
+
907
+ sage: N.generator_degrees()
908
+ (0, 1)
909
+ """
910
+ return self._generator_degrees
911
+
912
+ def generators(self):
913
+ r"""
914
+ Return the generators of ``self``.
915
+
916
+ EXAMPLES::
917
+
918
+ sage: from sage.modules.fp_graded.module import FPModule
919
+ sage: A4 = SteenrodAlgebra(2, profile=(4,3,2,1))
920
+
921
+ sage: M = FPModule(A4, [0,0,2,3])
922
+ sage: M.generators()
923
+ (g[0, 0], g[0, 1], g[2, 0], g[3, 0])
924
+
925
+ sage: N = FPModule(A4, [0, 1], [[Sq(2), Sq(1)]], names='h')
926
+ sage: N.generators()
927
+ (h[0], h[1])
928
+
929
+ sage: Z = FPModule(A4, [])
930
+ sage: Z.generators()
931
+ ()
932
+ """
933
+ return tuple([self.generator(i) for i in range(len(self.generator_degrees()))])
934
+
935
+ gens = generators
936
+
937
+ def generator(self, index):
938
+ r"""
939
+ Return the module generator with the given index.
940
+
941
+ EXAMPLES::
942
+
943
+ sage: from sage.modules.fp_graded.module import FPModule
944
+ sage: A4 = SteenrodAlgebra(2, profile=(4,3,2,1))
945
+
946
+ sage: M = FPModule(A4, [0,2,3])
947
+ sage: M.generator(0)
948
+ g[0]
949
+
950
+ sage: N = FPModule(A4, [0, 1], [[Sq(2), Sq(1)]], names='h')
951
+ sage: N.generator(1)
952
+ h[1]
953
+ """
954
+ return self(self._free_module().generator(index))
955
+
956
+ gen = generator
957
+
958
+ def relations(self):
959
+ r"""
960
+ Return the relations of ``self``.
961
+
962
+ EXAMPLES::
963
+
964
+ sage: from sage.modules.fp_graded.module import FPModule
965
+ sage: A4 = SteenrodAlgebra(2, profile=(4,3,2,1))
966
+
967
+ sage: M = FPModule(A4, [0,2,3])
968
+ sage: M.relations()
969
+ ()
970
+
971
+ sage: N = FPModule(A4, [0, 1], [[Sq(2), Sq(1)]])
972
+ sage: N.relations()
973
+ (Sq(2)*g[0] + Sq(1)*g[1],)
974
+
975
+ sage: Z = FPModule(A4, [])
976
+ sage: Z.relations()
977
+ ()
978
+ """
979
+ return self._j.values()
980
+
981
+ def relation(self, index):
982
+ r"""
983
+ Return the module relation of the given index.
984
+
985
+ EXAMPLES::
986
+
987
+ sage: from sage.modules.fp_graded.module import FPModule
988
+ sage: A4 = SteenrodAlgebra(2, profile=(4,3,2,1))
989
+ sage: N = FPModule(A4, [0, 1], [[Sq(2), Sq(1)]])
990
+ sage: N.relation(0)
991
+ Sq(2)*g[0] + Sq(1)*g[1]
992
+ """
993
+ return self._j.values()[index]
994
+
995
+ def minimal_presentation(self, top_dim=None, verbose=False):
996
+ r"""
997
+ Return a minimal presentation of ``self``.
998
+
999
+ OUTPUT:
1000
+
1001
+ An isomorphism `M \to S`, where `M` has minimal presentation
1002
+ and `S` is ``self``.
1003
+
1004
+ EXAMPLES::
1005
+
1006
+ sage: from sage.modules.fp_graded.module import FPModule
1007
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
1008
+
1009
+ sage: M = FPModule(A2, [0,1], [[Sq(2),Sq(1)],[0,Sq(2)],[Sq(3),0]])
1010
+ sage: i = M.minimal_presentation()
1011
+ sage: M_min = i.domain()
1012
+
1013
+ ``i`` is an isomorphism between ``M_min`` and ``M``::
1014
+
1015
+ sage: i.codomain() is M
1016
+ True
1017
+ sage: i.is_injective()
1018
+ True
1019
+ sage: i.is_surjective()
1020
+ True
1021
+
1022
+ There are more relations in ``M`` than in ``M_min``::
1023
+
1024
+ sage: M.relations()
1025
+ (Sq(2)*g[0] + Sq(1)*g[1], Sq(2)*g[1], Sq(3)*g[0])
1026
+ sage: M_min.relations()
1027
+ (Sq(2)*g[0] + Sq(1)*g[1], Sq(2)*g[1])
1028
+
1029
+ TESTS::
1030
+
1031
+ sage: T = FPModule(A2, [0], [[1]])
1032
+ sage: T_min = T.minimal_presentation().domain()
1033
+ sage: T_min.is_trivial()
1034
+ True
1035
+ sage: T_min
1036
+ Free graded left module on 0 generators over ...
1037
+
1038
+ Similar example but using
1039
+ :class:`sage.modules.fp_graded.steenrod.module.SteenrodFPModule`::
1040
+
1041
+ sage: from sage.modules.fp_graded.steenrod.module import SteenrodFPModule
1042
+ sage: A = SteenrodAlgebra(2)
1043
+ sage: M = SteenrodFPModule(A, [0,1], [[Sq(2),Sq(1)],[0,Sq(2)],[Sq(3),0]])
1044
+
1045
+ sage: i = M.minimal_presentation()
1046
+ sage: i.codomain() is M
1047
+ True
1048
+
1049
+ sage: i.is_injective()
1050
+ True
1051
+ sage: i.is_surjective()
1052
+ True
1053
+
1054
+ sage: i.domain().relations()
1055
+ (Sq(2)*g[0] + Sq(1)*g[1], Sq(2)*g[1])
1056
+
1057
+ sage: i.codomain().relations()
1058
+ (Sq(2)*g[0] + Sq(1)*g[1], Sq(2)*g[1], Sq(3)*g[0])
1059
+ """
1060
+ return Hom(self, self).identity().image(top_dim, verbose)
1061
+
1062
+ def suspension(self, t):
1063
+ r"""
1064
+ Return the suspension of ``self`` by degree ``t``.
1065
+
1066
+ INPUT:
1067
+
1068
+ - ``t`` -- integer degree by which the module is suspended
1069
+
1070
+ OUTPUT:
1071
+
1072
+ A module which is identical to this module by a shift of
1073
+ degrees by the integer ``t``.
1074
+
1075
+ EXAMPLES::
1076
+
1077
+ sage: from sage.modules.fp_graded.module import FPModule
1078
+ sage: A = SteenrodAlgebra(2)
1079
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
1080
+
1081
+ sage: Y = FPModule(A2, [0], [[Sq(1)]])
1082
+ sage: X = Y.suspension(4)
1083
+ sage: X.generator_degrees()
1084
+ (4,)
1085
+ sage: X.relations()
1086
+ (Sq(1)*g[4],)
1087
+
1088
+ sage: M = FPModule(A, [2,3], [[Sq(2), Sq(1)], [0, Sq(2)]])
1089
+ sage: Q = M.suspension(1)
1090
+ sage: Q.generator_degrees()
1091
+ (3, 4)
1092
+ sage: Q.relations()
1093
+ (Sq(2)*g[3] + Sq(1)*g[4], Sq(2)*g[4])
1094
+ sage: Q = M.suspension(-3)
1095
+ sage: Q.generator_degrees()
1096
+ (-1, 0)
1097
+ sage: Q = M.suspension(0)
1098
+ sage: Q.generator_degrees()
1099
+ (2, 3)
1100
+ """
1101
+ relations = tuple([r.dense_coefficient_list() for r in self._j._values])
1102
+ return type(self).__base__(self.base_ring(),
1103
+ tuple([g + t for g in self._generator_degrees]),
1104
+ relations)
1105
+
1106
+ def submodule_inclusion(self, spanning_elements):
1107
+ r"""
1108
+ Return the inclusion morphism of the submodule of ``self`` spanned
1109
+ by the given elements.
1110
+
1111
+ INPUT:
1112
+
1113
+ - ``spanning_elements`` -- an iterable of elements
1114
+
1115
+ OUTPUT: the inclusion of the submodule into this module
1116
+
1117
+ Because a submodule of a finitely presented module need not be
1118
+ finitely presented, this method will only work if the
1119
+ underlying algebra is finite-dimensional. Indeed, the current
1120
+ implementation only works if the algebra has a ``top_class``
1121
+ method, which gets used in
1122
+ :meth:`sage.modules.fp_graded.morphism._resolve_kernel`.
1123
+
1124
+ EXAMPLES::
1125
+
1126
+ sage: from sage.modules.fp_graded.module import FPModule
1127
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
1128
+
1129
+ sage: M = FPModule(A2, [0,1], [[Sq(2),Sq(1)]])
1130
+ sage: i = M.submodule_inclusion([M.generator(0)])
1131
+ sage: i.codomain() is M
1132
+ True
1133
+ sage: i.is_injective()
1134
+ True
1135
+ sage: i.domain().generator_degrees()
1136
+ (0,)
1137
+ sage: i.domain().relations()
1138
+ (Sq(3)*g[0],)
1139
+ """
1140
+ # Create the graded module on the set of spanning elements.
1141
+ degs = [x.degree() for x in spanning_elements]
1142
+ F = type(self).__base__(self.base_ring(), tuple(degs))
1143
+
1144
+ # The submodule is the module generated by the spanning elements.
1145
+ return Hom(F, self)(spanning_elements).image()
1146
+
1147
+ def resolution(self, k, top_dim=None, verbose=False):
1148
+ r"""
1149
+ Return a free resolution of this module of length ``k``.
1150
+
1151
+ INPUT:
1152
+
1153
+ - ``k`` -- nonnegative integer
1154
+ - ``top_dim`` -- stop the computation at this degree
1155
+ (default: ``None``, but required if the algebra is
1156
+ not finite-dimensional)
1157
+ - ``verbose`` -- boolean (default: ``False``); control if
1158
+ log messages should be emitted
1159
+
1160
+ OUTPUT: list of homomorphisms `[\epsilon, f_1, \ldots, f_k]` such that
1161
+
1162
+ .. MATH::
1163
+
1164
+ f_i: F_i \to F_{i-1} \text{ for } 1 < i \leq k,
1165
+ \qquad
1166
+ \epsilon: F_0 \to M,
1167
+
1168
+ where each `F_i` is a finitely generated free module, and the
1169
+ sequence
1170
+
1171
+ .. MATH::
1172
+
1173
+ F_k \xrightarrow{\mathit{f_k}} F_{k-1}
1174
+ \xrightarrow{\mathit{f_{k-1}}} \ldots \rightarrow F_0
1175
+ \xrightarrow{\epsilon} M \rightarrow 0
1176
+
1177
+ is exact. Note that the 0th element in this list is the map
1178
+ `\epsilon`, and the rest of the maps are between free
1179
+ modules.
1180
+
1181
+ EXAMPLES::
1182
+
1183
+ sage: from sage.modules.fp_graded.module import FPModule
1184
+
1185
+ sage: E.<x,y> = ExteriorAlgebra(QQ)
1186
+ sage: M = FPModule(E, [0], [[x], [y]])
1187
+ sage: res = M.resolution(3); res
1188
+ [Module morphism:
1189
+ From: Free graded left module on 1 generator over The exterior algebra of rank 2 over Rational Field
1190
+ To: Finitely presented left module on 1 generator and 2 relations over The exterior algebra of rank 2 over Rational Field
1191
+ Defn: g[0] |--> g[0],
1192
+ Module morphism:
1193
+ From: Free graded left module on 2 generators over The exterior algebra of rank 2 over Rational Field
1194
+ To: Free graded left module on 1 generator over The exterior algebra of rank 2 over Rational Field
1195
+ Defn: g[1, 0] |--> x*g[0]
1196
+ g[1, 1] |--> y*g[0],
1197
+ Module morphism:
1198
+ From: Free graded left module on 3 generators over The exterior algebra of rank 2 over Rational Field
1199
+ To: Free graded left module on 2 generators over The exterior algebra of rank 2 over Rational Field
1200
+ Defn: g[2, 0] |--> x*g[1, 0]
1201
+ g[2, 1] |--> y*g[1, 0] + x*g[1, 1]
1202
+ g[2, 2] |--> y*g[1, 1],
1203
+ Module morphism:
1204
+ From: Free graded left module on 4 generators over The exterior algebra of rank 2 over Rational Field
1205
+ To: Free graded left module on 3 generators over The exterior algebra of rank 2 over Rational Field
1206
+ Defn: g[3, 0] |--> x*g[2, 0]
1207
+ g[3, 1] |--> y*g[2, 0] + x*g[2, 1]
1208
+ g[3, 2] |--> y*g[2, 1] + x*g[2, 2]
1209
+ g[3, 3] |--> y*g[2, 2]]
1210
+ sage: all((res[i] * res[i+1]).is_zero() for i in range(len(res)-1))
1211
+ True
1212
+
1213
+ sage: # needs sage.libs.flint
1214
+ sage: e = SymmetricFunctions(QQ).e()
1215
+ sage: M = FPModule(e, [0], [[e[2]+e[1,1]], [e[1,1]]])
1216
+ sage: res = M.resolution(3, top_dim=10)
1217
+ sage: all((res[i] * res[i+1]).is_zero() for i in range(2))
1218
+ True
1219
+ sage: res[-1].domain().is_trivial()
1220
+ True
1221
+ sage: M = FPModule(e, [0,2], [[e[2]+e[1,1], 0], [e[2,1], e[1]], [0, e[1,1]]])
1222
+ sage: res = M.resolution(3, top_dim=10)
1223
+ sage: all((res[i] * res[i+1]).is_zero() for i in range(2))
1224
+ True
1225
+ sage: res[-1].domain().is_trivial()
1226
+ True
1227
+
1228
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
1229
+ sage: M = FPModule(A2, [0,1], [[Sq(2), Sq(1)]])
1230
+ sage: M.resolution(0)
1231
+ [Module morphism:
1232
+ From: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1233
+ To: Finitely presented left module on 2 generators and 1 relation over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1234
+ Defn: g[0] |--> g[0]
1235
+ g[1] |--> g[1]]
1236
+ sage: res = M.resolution(4, verbose=True)
1237
+ Computing f_1 (1/4)
1238
+ Computing f_2 (2/4)
1239
+ Computing using the profile:
1240
+ (2, 1)
1241
+ Resolving the kernel in the range of dimensions [2, 8]: 2 3 4 5 6 7 8.
1242
+ Computing f_3 (3/4)
1243
+ Computing using the profile:
1244
+ (2, 1)
1245
+ Resolving the kernel in the range of dimensions [8, 14]: 8 9 10 11 12 13 14.
1246
+ Computing f_4 (4/4)
1247
+ Computing using the profile:
1248
+ (2, 1)
1249
+ Resolving the kernel in the range of dimensions [9, 16]: 9 10 11 12 13 14 15 16.
1250
+ sage: len(res)
1251
+ 5
1252
+ sage: res
1253
+ [Module morphism:
1254
+ From: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1255
+ To: Finitely presented left module on 2 generators and 1 relation over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1256
+ Defn: g[0] |--> g[0]
1257
+ g[1] |--> g[1],
1258
+ Module morphism:
1259
+ From: Free graded left module on 1 generator over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1260
+ To: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1261
+ Defn: g[2] |--> Sq(2)*g[0] + Sq(1)*g[1],
1262
+ Module morphism:
1263
+ From: Free graded left module on 1 generator over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1264
+ To: Free graded left module on 1 generator over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1265
+ Defn: g[8] |--> Sq(3,1)*g[2],
1266
+ Module morphism:
1267
+ From: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1268
+ To: Free graded left module on 1 generator over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1269
+ Defn: g[9] |--> Sq(1)*g[8]
1270
+ g[10] |--> Sq(2)*g[8],
1271
+ Module morphism:
1272
+ From: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1273
+ To: Free graded left module on 2 generators over sub-Hopf algebra of mod 2 Steenrod algebra, milnor basis, profile function [3, 2, 1]
1274
+ Defn: g[10] |--> Sq(1)*g[9]
1275
+ g[12] |--> Sq(0,1)*g[9] + Sq(2)*g[10]]
1276
+ sage: for i in range(len(res)-1):
1277
+ ....: assert (res[i] * res[i+1]).is_zero(), 'the result is not a complex'
1278
+
1279
+ We construct `\GF{3}` as a `\ZZ`-module (with trivial grading
1280
+ concentrated in degree 0) and compute its resolution::
1281
+
1282
+ sage: E = ExteriorAlgebra(ZZ, 0)
1283
+ sage: M = FPModule(E, [0], [[3]])
1284
+ sage: res = M.resolution(3)
1285
+ sage: res
1286
+ [Module morphism:
1287
+ From: Free graded left module on 1 generator over The exterior algebra of rank 0 over Integer Ring
1288
+ To: Finitely presented left module on 1 generator and 1 relation over The exterior algebra of rank 0 over Integer Ring
1289
+ Defn: g[0] |--> g[0],
1290
+ Module endomorphism of Free graded left module on 1 generator over The exterior algebra of rank 0 over Integer Ring
1291
+ Defn: g[0] |--> 3*g[0],
1292
+ Module morphism:
1293
+ From: Free graded left module on 0 generators over The exterior algebra of rank 0 over Integer Ring
1294
+ To: Free graded left module on 1 generator over The exterior algebra of rank 0 over Integer Ring,
1295
+ Module endomorphism of Free graded left module on 0 generators over The exterior algebra of rank 0 over Integer Ring]
1296
+
1297
+ TESTS::
1298
+
1299
+ sage: A2 = SteenrodAlgebra(2, profile=(3,2,1))
1300
+ sage: M = FPModule(A2, [0,1], [[Sq(2), Sq(1)]])
1301
+ sage: res2 = M.resolution(2)
1302
+ sage: [type(f) for f in res2]
1303
+ [<class '...SteenrodFreeModuleHomspace...'>,
1304
+ <class '...SteenrodFreeModuleHomspace...'>,
1305
+ <class '...SteenrodFreeModuleHomspace...'>]
1306
+ """
1307
+ def _print_progress(i, k):
1308
+ if verbose:
1309
+ print('Computing f_%d (%d/%d)' % (i, i, k))
1310
+
1311
+ if k < 0:
1312
+ raise ValueError('the length of the resolution must be nonnegative')
1313
+
1314
+ ret_complex = []
1315
+
1316
+ # Epsilon: F_0 -> M
1317
+ F_0 = self._free_module()
1318
+ epsilon = Hom(F_0, self)(self.generators())
1319
+ ret_complex.append(epsilon)
1320
+
1321
+ if k == 0:
1322
+ return ret_complex
1323
+
1324
+ # f_1: F_1 -> F_0
1325
+ _print_progress(1, k)
1326
+ F_1 = self._j.domain()
1327
+ pres = Hom(F_1, F_0)(tuple([F_0(x.dense_coefficient_list())
1328
+ for x in self._j.values()]))
1329
+
1330
+ ret_complex.append(pres)
1331
+
1332
+ # f_i: F_i -> F_i-1, for i > 1
1333
+ for i in range(2, k + 1):
1334
+ _print_progress(i, k)
1335
+
1336
+ f = ret_complex[i - 1]
1337
+ ret_complex.append(f._resolve_kernel(top_dim=top_dim,
1338
+ verbose=verbose))
1339
+
1340
+ return ret_complex