passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_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 (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -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-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,595 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.graphs
3
+ r"""
4
+ Algebraic topological model for a cell complex
5
+
6
+ This file contains two functions, :func:`algebraic_topological_model`
7
+ and :func:`algebraic_topological_model_delta_complex`. The second
8
+ works more generally: for all simplicial, cubical, and
9
+ `\Delta`-complexes. The first only works for simplicial and cubical
10
+ complexes, but it is faster in those cases.
11
+
12
+ AUTHORS:
13
+
14
+ - John H. Palmieri (2015-09)
15
+ """
16
+ ########################################################################
17
+ # Copyright (C) 2015 John H. Palmieri <palmieri@math.washington.edu>
18
+ #
19
+ # Distributed under the terms of the GNU General Public License (GPL)
20
+ # as published by the Free Software Foundation; either version 2 of
21
+ # the License, or (at your option) any later version.
22
+ #
23
+ # https://www.gnu.org/licenses/
24
+ ########################################################################
25
+
26
+ # TODO: cythonize this.
27
+
28
+ from sage.modules.free_module_element import vector
29
+ from sage.modules.free_module import VectorSpace
30
+ from sage.matrix.constructor import matrix, zero_matrix
31
+ from sage.matrix.matrix_space import MatrixSpace
32
+ from .chain_complex import ChainComplex
33
+ from .chain_complex_morphism import ChainComplexMorphism
34
+ from .chain_homotopy import ChainContraction
35
+ from sage.rings.rational_field import QQ
36
+
37
+
38
+ def algebraic_topological_model(K, base_ring=None):
39
+ r"""
40
+ Algebraic topological model for cell complex ``K``
41
+ with coefficients in the field ``base_ring``.
42
+
43
+ INPUT:
44
+
45
+ - ``K`` -- either a simplicial complex or a cubical complex
46
+ - ``base_ring`` -- coefficient ring; must be a field
47
+
48
+ OUTPUT: a pair ``(phi, M)`` consisting of
49
+
50
+ - chain contraction ``phi``
51
+ - chain complex `M`
52
+
53
+ This construction appears in a paper by Pilarczyk and Réal [PR2015]_.
54
+ Given a cell complex `K` and a field `F`, there is a chain complex
55
+ `C` associated to `K` with coefficients in `F`. The *algebraic
56
+ topological model* for `K` is a chain complex `M` with trivial
57
+ differential, along with chain maps `\pi: C \to M` and `\iota: M
58
+ \to C` such that
59
+
60
+ - `\pi \iota = 1_M`, and
61
+ - there is a chain homotopy `\phi` between `1_C` and `\iota \pi`.
62
+
63
+ In particular, `\pi` and `\iota` induce isomorphisms on homology,
64
+ and since `M` has trivial differential, it is its own homology,
65
+ and thus also the homology of `C`. Thus `\iota` lifts homology
66
+ classes to their cycle representatives.
67
+
68
+ The chain homotopy `\phi` satisfies some additional properties,
69
+ making it a *chain contraction*:
70
+
71
+ - `\phi \phi = 0`,
72
+ - `\pi \phi = 0`,
73
+ - `\phi \iota = 0`.
74
+
75
+ Given an algebraic topological model for `K`, it is then easy to
76
+ compute cup products and cohomology operations on the cohomology
77
+ of `K`, as described in [GDR2003]_ and [PR2015]_.
78
+
79
+ Implementation details: the cell complex `K` must have an
80
+ :meth:`~sage.topology.cell_complex.GenericCellComplex.n_cells`
81
+ method from which we can extract a list of cells in each
82
+ dimension. Combining the lists in increasing order of dimension
83
+ then defines a filtration of the complex: a list of cells in which
84
+ the boundary of each cell consists of cells earlier in the
85
+ list. This is required by Pilarczyk and Réal's algorithm. There
86
+ must also be a
87
+ :meth:`~sage.topology.cell_complex.GenericCellComplex.chain_complex`
88
+ method, to construct the chain complex `C` associated to this
89
+ chain complex.
90
+
91
+ In particular, this works for simplicial complexes and cubical
92
+ complexes. It doesn't work for `\Delta`-complexes, though: the list
93
+ of their `n`-cells has the wrong format.
94
+
95
+ Note that from the chain contraction ``phi``, one can recover the
96
+ chain maps `\pi` and `\iota` via ``phi.pi()`` and
97
+ ``phi.iota()``. Then one can recover `C` and `M` from, for
98
+ example, ``phi.pi().domain()`` and ``phi.pi().codomain()``,
99
+ respectively.
100
+
101
+ EXAMPLES::
102
+
103
+ sage: from sage.homology.algebraic_topological_model import algebraic_topological_model
104
+ sage: RP2 = simplicial_complexes.RealProjectivePlane()
105
+ sage: phi, M = algebraic_topological_model(RP2, GF(2))
106
+ sage: M.homology()
107
+ {0: Vector space of dimension 1 over Finite Field of size 2,
108
+ 1: Vector space of dimension 1 over Finite Field of size 2,
109
+ 2: Vector space of dimension 1 over Finite Field of size 2}
110
+ sage: T = cubical_complexes.Torus()
111
+ sage: phi, M = algebraic_topological_model(T, QQ)
112
+ sage: M.homology()
113
+ {0: Vector space of dimension 1 over Rational Field,
114
+ 1: Vector space of dimension 2 over Rational Field,
115
+ 2: Vector space of dimension 1 over Rational Field}
116
+
117
+ If you want to work with cohomology rather than homology, just
118
+ dualize the outputs of this function::
119
+
120
+ sage: M.dual().homology()
121
+ {0: Vector space of dimension 1 over Rational Field,
122
+ 1: Vector space of dimension 2 over Rational Field,
123
+ 2: Vector space of dimension 1 over Rational Field}
124
+ sage: M.dual().degree_of_differential()
125
+ 1
126
+ sage: phi.dual()
127
+ Chain homotopy between:
128
+ Chain complex endomorphism of
129
+ Chain complex with at most 3 nonzero terms over Rational Field
130
+ and Chain complex morphism:
131
+ From: Chain complex with at most 3 nonzero terms over Rational Field
132
+ To: Chain complex with at most 3 nonzero terms over Rational Field
133
+
134
+ In degree 0, the inclusion of the homology `M` into the chain
135
+ complex `C` sends the homology generator to a single vertex::
136
+
137
+ sage: K = simplicial_complexes.Simplex(2)
138
+ sage: phi, M = algebraic_topological_model(K, QQ)
139
+ sage: phi.iota().in_degree(0)
140
+ [0]
141
+ [0]
142
+ [1]
143
+
144
+ In cohomology, though, one needs the dual of every degree 0 cell
145
+ to detect the degree 0 cohomology generator::
146
+
147
+ sage: phi.dual().iota().in_degree(0)
148
+ [1]
149
+ [1]
150
+ [1]
151
+
152
+ TESTS::
153
+
154
+ sage: T = cubical_complexes.Torus()
155
+ sage: C = T.chain_complex()
156
+ sage: H, M = T.algebraic_topological_model()
157
+ sage: C.differential(1) * H.iota().in_degree(1).column(0) == 0
158
+ True
159
+ sage: C.differential(1) * H.iota().in_degree(1).column(1) == 0
160
+ True
161
+ sage: coC = T.chain_complex(cochain=True)
162
+ sage: coC.differential(1) * H.dual().iota().in_degree(1).column(0) == 0
163
+ True
164
+ sage: coC.differential(1) * H.dual().iota().in_degree(1).column(1) == 0
165
+ True
166
+ """
167
+ if not base_ring.is_field():
168
+ raise ValueError('the coefficient ring must be a field')
169
+
170
+ # The following are all dictionaries indexed by dimension.
171
+ # For each n, gens[n] is an ordered list of the n-cells generating the complex M.
172
+ gens = {}
173
+ # For each n, phi_dict[n] is a dictionary of the form {idx:
174
+ # vector}, where idx is the index of an n-cell in the list of
175
+ # n-cells in K, and vector is the image of that n-cell, as an
176
+ # element in the free module of (n+1)-chains for K.
177
+ phi_dict = {}
178
+ # For each n, pi_dict[n] is a dictionary of the same form, except
179
+ # that the target vectors should be elements of the chain complex M.
180
+ pi_dict = {}
181
+ # For each n, iota_dict[n] is a dictionary of the form {cell:
182
+ # vector}, where cell is one of the generators for M and vector is
183
+ # its image in C, as an element in the free module of n-chains.
184
+ iota_dict = {}
185
+
186
+ for n in range(K.dimension()+1):
187
+ gens[n] = []
188
+ phi_dict[n] = {}
189
+ pi_dict[n] = {}
190
+ iota_dict[n] = {}
191
+
192
+ C = K.chain_complex(base_ring=base_ring)
193
+ # old_cells: cells one dimension lower.
194
+ old_cells = []
195
+
196
+ for dim in range(K.dimension()+1):
197
+ n_cells = K._n_cells_sorted(dim)
198
+ diff = C.differential(dim)
199
+ # diff is sparse and low density. Dense matrices are faster
200
+ # over finite fields, but for low density matrices, sparse
201
+ # matrices are faster over the rationals.
202
+ if base_ring != QQ:
203
+ diff = diff.dense_matrix()
204
+
205
+ rank = len(n_cells)
206
+ old_rank = len(old_cells)
207
+ V_old = VectorSpace(base_ring, old_rank)
208
+ zero = V_old.zero_vector()
209
+
210
+ for c_idx, c in enumerate(zip(n_cells, VectorSpace(base_ring, rank).gens())):
211
+ # c is the pair (cell, the corresponding standard basis
212
+ # vector in the free module of chains). Separate its
213
+ # components, calling them c and c_vec:
214
+ c_vec = c[1]
215
+ c = c[0]
216
+ # No need to set zero values for any of the maps: we will
217
+ # assume any unset values are zero.
218
+ # From the paper: phi_dict[c] = 0.
219
+
220
+ # c_bar = c - phi(bdry(c))
221
+ c_bar = c_vec
222
+ bdry_c = diff * c_vec
223
+ # Apply phi to bdry_c and subtract from c_bar.
224
+ for (idx, coord) in bdry_c.items():
225
+ try:
226
+ c_bar -= coord * phi_dict[dim-1][idx]
227
+ except KeyError:
228
+ pass
229
+
230
+ bdry_c_bar = diff * c_bar
231
+
232
+ # Evaluate pi(bdry(c_bar)).
233
+ pi_bdry_c_bar = zero
234
+
235
+ for (idx, coeff) in bdry_c_bar.items():
236
+ try:
237
+ pi_bdry_c_bar += coeff * pi_dict[dim-1][idx]
238
+ except KeyError:
239
+ pass
240
+
241
+ # One small typo in the published algorithm: it says
242
+ # "if bdry(c_bar) == 0", but should say
243
+ # "if pi(bdry(c_bar)) == 0".
244
+ if not pi_bdry_c_bar:
245
+ # Append c to list of gens.
246
+ gens[dim].append(c)
247
+ # iota(c) = c_bar
248
+ iota_dict[dim][c] = c_bar
249
+ # pi(c) = c
250
+ pi_dict[dim][c_idx] = c_vec
251
+ else:
252
+ # Take any u in gens so that lambda_i = <u, pi(bdry(c_bar))> != 0.
253
+ # u_idx will be the index of the corresponding cell.
254
+ for u_idx in pi_bdry_c_bar.nonzero_positions():
255
+ lambda_i = pi_bdry_c_bar[u_idx]
256
+ # Now find the actual cell.
257
+ u = old_cells[u_idx]
258
+ if u in gens[dim-1]:
259
+ break
260
+
261
+ # pi(c) = 0: no need to do anything about this.
262
+ for c_j_idx in range(old_rank):
263
+ # eta_ij = <u, pi(c_j)>.
264
+ try:
265
+ eta_ij = pi_dict[dim-1][c_j_idx][u_idx]
266
+ except (KeyError, IndexError):
267
+ eta_ij = 0
268
+ if eta_ij:
269
+ # Adjust phi(c_j).
270
+ try:
271
+ phi_dict[dim-1][c_j_idx] += eta_ij * lambda_i**(-1) * c_bar
272
+ except KeyError:
273
+ phi_dict[dim-1][c_j_idx] = eta_ij * lambda_i**(-1) * c_bar
274
+ # Adjust pi(c_j).
275
+ try:
276
+ pi_dict[dim-1][c_j_idx] += -eta_ij * lambda_i**(-1) * pi_bdry_c_bar
277
+ except KeyError:
278
+ pi_dict[dim-1][c_j_idx] = -eta_ij * lambda_i**(-1) * pi_bdry_c_bar
279
+
280
+ gens[dim-1].remove(u)
281
+ del iota_dict[dim-1][u]
282
+ old_cells = n_cells
283
+
284
+ # Now we have constructed the raw data for M, pi, iota, phi, so we
285
+ # have to convert that to data which can be used to construct chain
286
+ # complexes, chain maps, and chain contractions.
287
+
288
+ # M_data will contain (trivial) matrices defining the differential
289
+ # on M. Keep track of the sizes using "M_rows" and "M_cols", which are
290
+ # just the ranks of consecutive graded pieces of M.
291
+ M_data = {}
292
+ M_rows = 0
293
+ # pi_data: the matrices defining pi. Similar for iota_data and phi_data.
294
+ pi_data = {}
295
+ iota_data = {}
296
+ phi_data = {}
297
+ for n in range(K.dimension()+1):
298
+ n_cells = K._n_cells_sorted(n)
299
+ # Remove zero entries from pi_dict and phi_dict.
300
+ pi_dict[n] = {i: pi_dict[n][i] for i in pi_dict[n] if pi_dict[n][i]}
301
+ phi_dict[n] = {i: phi_dict[n][i] for i in phi_dict[n] if phi_dict[n][i]}
302
+ # Convert gens to data defining the chain complex M with
303
+ # trivial differential.
304
+ M_cols = len(gens[n])
305
+ M_data[n] = zero_matrix(base_ring, M_rows, M_cols)
306
+ M_rows = M_cols
307
+ # Convert the dictionaries for pi, iota, phi to matrices which
308
+ # will define chain maps and chain homotopies.
309
+ pi_cols = []
310
+ phi_cols = []
311
+ for (idx, c) in enumerate(n_cells):
312
+ # First pi:
313
+ if idx in pi_dict[n]:
314
+ column = vector(base_ring, M_rows)
315
+ for (entry, coeff) in pi_dict[n][idx].items():
316
+ # Translate from cells in n_cells to cells in gens[n].
317
+ column[gens[n].index(n_cells[entry])] = coeff
318
+ else:
319
+ column = vector(base_ring, M_rows)
320
+ pi_cols.append(column)
321
+
322
+ # Now phi:
323
+ try:
324
+ column = phi_dict[n][idx]
325
+ except KeyError:
326
+ column = vector(base_ring, len(K.n_cells(n+1)))
327
+ phi_cols.append(column)
328
+ # Now iota:
329
+ iota_cols = [iota_dict[n][c] for c in gens[n]]
330
+
331
+ pi_data[n] = matrix(base_ring, pi_cols).transpose()
332
+ iota_data[n] = matrix(base_ring, len(gens[n]), len(n_cells), iota_cols).transpose()
333
+ phi_data[n] = matrix(base_ring, phi_cols).transpose()
334
+
335
+ M = ChainComplex(M_data, base_ring=base_ring, degree=-1)
336
+ pi = ChainComplexMorphism(pi_data, C, M)
337
+ iota = ChainComplexMorphism(iota_data, M, C)
338
+ phi = ChainContraction(phi_data, pi, iota)
339
+ return phi, M
340
+
341
+
342
+ def algebraic_topological_model_delta_complex(K, base_ring=None):
343
+ r"""
344
+ Algebraic topological model for cell complex ``K``
345
+ with coefficients in the field ``base_ring``.
346
+
347
+ This has the same basic functionality as
348
+ :func:`algebraic_topological_model`, but it also works for
349
+ `\Delta`-complexes. For simplicial and cubical complexes it is
350
+ somewhat slower, though.
351
+
352
+ INPUT:
353
+
354
+ - ``K`` -- a simplicial complex, a cubical complex, or a
355
+ `\Delta`-complex
356
+ - ``base_ring`` -- coefficient ring; must be a field
357
+
358
+ OUTPUT: a pair ``(phi, M)`` consisting of
359
+
360
+ - chain contraction ``phi``
361
+ - chain complex `M`
362
+
363
+ See :func:`algebraic_topological_model` for the main
364
+ documentation. The difference in implementation between the two:
365
+ this uses matrix and vector algebra. The other function does more
366
+ of the computations "by hand" and uses cells (given as simplices
367
+ or cubes) to index various dictionaries. Since the cells in
368
+ `\Delta`-complexes are not as nice, the other function does not
369
+ work for them, while this function relies almost entirely on the
370
+ structure of the associated chain complex.
371
+
372
+ EXAMPLES::
373
+
374
+ sage: from sage.homology.algebraic_topological_model import algebraic_topological_model_delta_complex as AT_model
375
+ sage: RP2 = simplicial_complexes.RealProjectivePlane()
376
+ sage: phi, M = AT_model(RP2, GF(2))
377
+ sage: M.homology()
378
+ {0: Vector space of dimension 1 over Finite Field of size 2,
379
+ 1: Vector space of dimension 1 over Finite Field of size 2,
380
+ 2: Vector space of dimension 1 over Finite Field of size 2}
381
+ sage: T = delta_complexes.Torus()
382
+ sage: phi, M = AT_model(T, QQ)
383
+ sage: M.homology()
384
+ {0: Vector space of dimension 1 over Rational Field,
385
+ 1: Vector space of dimension 2 over Rational Field,
386
+ 2: Vector space of dimension 1 over Rational Field}
387
+
388
+ If you want to work with cohomology rather than homology, just
389
+ dualize the outputs of this function::
390
+
391
+ sage: M.dual().homology()
392
+ {0: Vector space of dimension 1 over Rational Field,
393
+ 1: Vector space of dimension 2 over Rational Field,
394
+ 2: Vector space of dimension 1 over Rational Field}
395
+ sage: M.dual().degree_of_differential()
396
+ 1
397
+ sage: phi.dual()
398
+ Chain homotopy between:
399
+ Chain complex endomorphism of Chain complex with at most 3 nonzero terms over Rational Field
400
+ and Chain complex morphism:
401
+ From: Chain complex with at most 3 nonzero terms over Rational Field
402
+ To: Chain complex with at most 3 nonzero terms over Rational Field
403
+
404
+ In degree 0, the inclusion of the homology `M` into the chain
405
+ complex `C` sends the homology generator to a single vertex::
406
+
407
+ sage: K = delta_complexes.Simplex(2)
408
+ sage: phi, M = AT_model(K, QQ)
409
+ sage: phi.iota().in_degree(0)
410
+ [0]
411
+ [0]
412
+ [1]
413
+
414
+ In cohomology, though, one needs the dual of every degree 0 cell
415
+ to detect the degree 0 cohomology generator::
416
+
417
+ sage: phi.dual().iota().in_degree(0)
418
+ [1]
419
+ [1]
420
+ [1]
421
+
422
+ TESTS::
423
+
424
+ sage: T = cubical_complexes.Torus()
425
+ sage: C = T.chain_complex()
426
+ sage: H, M = AT_model(T, QQ)
427
+ sage: C.differential(1) * H.iota().in_degree(1).column(0) == 0
428
+ True
429
+ sage: C.differential(1) * H.iota().in_degree(1).column(1) == 0
430
+ True
431
+ sage: coC = T.chain_complex(cochain=True)
432
+ sage: coC.differential(1) * H.dual().iota().in_degree(1).column(0) == 0
433
+ True
434
+ sage: coC.differential(1) * H.dual().iota().in_degree(1).column(1) == 0
435
+ True
436
+ """
437
+ def conditionally_sparse(m):
438
+ """
439
+ Return a sparse matrix if the characteristic is zero.
440
+
441
+ Multiplication of matrices with low density seems to be quicker
442
+ if the matrices are sparse, when over the rationals. Over
443
+ finite fields, dense matrices are faster regardless of
444
+ density.
445
+ """
446
+ if base_ring == QQ:
447
+ return m.sparse_matrix()
448
+ else:
449
+ return m
450
+
451
+ if not base_ring.is_field():
452
+ raise ValueError('the coefficient ring must be a field')
453
+
454
+ # The following are all dictionaries indexed by dimension.
455
+ # For each n, gens[n] is an ordered list of the n-cells generating the complex M.
456
+ gens = {}
457
+ pi_data = {}
458
+ phi_data = {}
459
+ iota_data = {}
460
+
461
+ for n in range(-1, K.dimension()+1):
462
+ gens[n] = []
463
+
464
+ C = K.chain_complex(base_ring=base_ring)
465
+ n_cells = []
466
+ pi_cols = []
467
+ iota_cols = {}
468
+
469
+ for dim in range(K.dimension()+1):
470
+ # old_cells: cells one dimension lower.
471
+ old_cells = n_cells
472
+ # n_cells: the standard basis for the vector space C.free_module(dim).
473
+ n_cells = C.free_module(dim).gens()
474
+ diff = C.differential(dim)
475
+ # diff is sparse and low density. Dense matrices are faster
476
+ # over finite fields, but for low density matrices, sparse
477
+ # matrices are faster over the rationals.
478
+ if base_ring != QQ:
479
+ diff = diff.dense_matrix()
480
+
481
+ rank = len(n_cells)
482
+ old_rank = len(old_cells)
483
+
484
+ # Create some matrix spaces to try to speed up matrix creation.
485
+ MS_pi_t = MatrixSpace(base_ring, old_rank, len(gens[dim-1]))
486
+
487
+ pi_old = MS_pi_t.matrix(pi_cols).transpose()
488
+ iota_cols_old = iota_cols
489
+ iota_cols = {}
490
+ pi_cols_old = pi_cols
491
+ pi_cols = []
492
+ phi_old = MatrixSpace(base_ring, rank, old_rank, sparse=(base_ring == QQ)).zero()
493
+ phi_old_cols = phi_old.columns()
494
+ phi_old = conditionally_sparse(phi_old)
495
+ to_be_deleted = []
496
+
497
+ zero_vector = vector(base_ring, rank)
498
+ pi_nrows = pi_old.nrows()
499
+
500
+ for c_idx, c in enumerate(n_cells):
501
+ # c_bar = c - phi(bdry(c)):
502
+ # Avoid a bug in matrix-vector multiplication (trac 19378):
503
+ if not diff:
504
+ c_bar = c
505
+ pi_bdry_c_bar = False
506
+ else:
507
+ if base_ring == QQ:
508
+ c_bar = c - phi_old * (diff * c)
509
+ pi_bdry_c_bar = conditionally_sparse(pi_old) * (diff * c_bar)
510
+ else:
511
+ c_bar = c - phi_old * diff * c
512
+ pi_bdry_c_bar = conditionally_sparse(pi_old) * diff * c_bar
513
+
514
+ # One small typo in the published algorithm: it says
515
+ # "if bdry(c_bar) == 0", but should say
516
+ # "if pi(bdry(c_bar)) == 0".
517
+ if not pi_bdry_c_bar:
518
+ # Append c to list of gens.
519
+ gens[dim].append(c_idx)
520
+ # iota(c) = c_bar
521
+ iota_cols[c_idx] = c_bar
522
+ # pi(c) = c
523
+ pi_cols.append(c)
524
+ else:
525
+ # Take any u in gens so that lambda_i = <u, pi(bdry(c_bar))> != 0.
526
+ # u_idx will be the index of the corresponding cell.
527
+ (u_idx, lambda_i) = pi_bdry_c_bar.leading_item()
528
+ for (u_idx, lambda_i) in pi_bdry_c_bar.items():
529
+ if u_idx not in to_be_deleted:
530
+ break
531
+ # This element/column needs to be deleted from gens and
532
+ # iota_old. Do that later.
533
+ to_be_deleted.append(u_idx)
534
+ # pi(c) = 0.
535
+ pi_cols.append(zero_vector)
536
+ for c_j_idx, c_j in enumerate(old_cells):
537
+ # eta_ij = <u, pi(c_j)>.
538
+ # That is, eta_ij is the u_idx entry in the vector pi_old * c_j:
539
+ eta_ij = c_j.dot_product(pi_old.row(u_idx))
540
+ if eta_ij:
541
+ # Adjust phi(c_j).
542
+ phi_old_cols[c_j_idx] += eta_ij * lambda_i**(-1) * c_bar
543
+ # Adjust pi(c_j).
544
+ pi_cols_old[c_j_idx] -= eta_ij * lambda_i**(-1) * pi_bdry_c_bar
545
+
546
+ # The matrices involved have many zero entries. For
547
+ # such matrices, using sparse matrices is faster over
548
+ # the rationals, slower over finite fields.
549
+ phi_old = matrix(base_ring, phi_old_cols, sparse=(base_ring == QQ)).transpose()
550
+ keep = vector(base_ring, pi_nrows, {i: 1 for i in range(pi_nrows)
551
+ if i not in to_be_deleted})
552
+ cols = [v.pairwise_product(keep) for v in pi_cols_old]
553
+ pi_old = MS_pi_t.matrix(cols).transpose()
554
+
555
+ # Here cols is a temporary storage for the columns of iota.
556
+ cols = [iota_cols_old[i] for i in sorted(iota_cols_old.keys())]
557
+ for r in sorted(to_be_deleted, reverse=True):
558
+ del cols[r]
559
+ del gens[dim-1][r]
560
+ iota_data[dim-1] = matrix(base_ring, len(gens[dim-1]), old_rank, cols).transpose()
561
+ # keep: rows to keep in pi_cols_old. Start with all
562
+ # columns, then delete those in to_be_deleted.
563
+ keep = sorted(set(range(pi_nrows)).difference(to_be_deleted))
564
+ # Now cols is a temporary storage for columns of pi.
565
+ cols = [v.list_from_positions(keep) for v in pi_cols_old]
566
+ pi_data[dim-1] = matrix(base_ring, old_rank, len(gens[dim-1]), cols).transpose()
567
+ phi_data[dim-1] = phi_old
568
+
569
+ V_gens = VectorSpace(base_ring, len(gens[dim]))
570
+ if pi_cols:
571
+ cols = []
572
+ for v in pi_cols:
573
+ cols.append(V_gens(v.list_from_positions(gens[dim])))
574
+ pi_cols = cols
575
+
576
+ pi_data[dim] = matrix(base_ring, rank, len(gens[dim]), pi_cols).transpose()
577
+ cols = [iota_cols[i] for i in sorted(iota_cols.keys())]
578
+ iota_data[dim] = matrix(base_ring, len(gens[dim]), rank, cols).transpose()
579
+
580
+ # M_data will contain (trivial) matrices defining the differential
581
+ # on M. Keep track of the sizes using "M_rows" and "M_cols", which are
582
+ # just the ranks of consecutive graded pieces of M.
583
+ M_data = {}
584
+ M_rows = 0
585
+ for n in range(K.dimension()+1):
586
+ M_cols = len(gens[n])
587
+ M_data[n] = zero_matrix(base_ring, M_rows, M_cols)
588
+ M_rows = M_cols
589
+
590
+ M = ChainComplex(M_data, base_ring=base_ring, degree=-1)
591
+
592
+ pi = ChainComplexMorphism(pi_data, C, M)
593
+ iota = ChainComplexMorphism(iota_data, M, C)
594
+ phi = ChainContraction(phi_data, pi, iota)
595
+ return phi, M
sage/homology/all.py ADDED
@@ -0,0 +1,2 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ from sage.homology.all__sagemath_modules import *
@@ -0,0 +1,8 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ from sage.homology.chain_complex import ChainComplex
3
+
4
+ from sage.homology.chain_complex_morphism import ChainComplexMorphism
5
+
6
+ from sage.misc.lazy_import import lazy_import
7
+ lazy_import('sage.homology.koszul_complex', 'KoszulComplex')
8
+ del lazy_import