passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-67378ab2.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-23768756.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-7897025b.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-e34bb864.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-503f0c35.3.29.so +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-aarch64-linux-musl.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-aarch64-linux-musl.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-aarch64-linux-musl.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-aarch64-linux-musl.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-aarch64-linux-musl.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-aarch64-linux-musl.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-aarch64-linux-musl.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-aarch64-linux-musl.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-aarch64-linux-musl.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-aarch64-linux-musl.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-aarch64-linux-musl.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-aarch64-linux-musl.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-aarch64-linux-musl.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-aarch64-linux-musl.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-aarch64-linux-musl.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-aarch64-linux-musl.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-aarch64-linux-musl.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-aarch64-linux-musl.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-aarch64-linux-musl.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-aarch64-linux-musl.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-aarch64-linux-musl.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-aarch64-linux-musl.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-aarch64-linux-musl.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-aarch64-linux-musl.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-aarch64-linux-musl.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-aarch64-linux-musl.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-aarch64-linux-musl.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-aarch64-linux-musl.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-aarch64-linux-musl.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-aarch64-linux-musl.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-aarch64-linux-musl.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-aarch64-linux-musl.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-aarch64-linux-musl.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-aarch64-linux-musl.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-aarch64-linux-musl.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-aarch64-linux-musl.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-aarch64-linux-musl.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-aarch64-linux-musl.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-aarch64-linux-musl.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-aarch64-linux-musl.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-aarch64-linux-musl.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-aarch64-linux-musl.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-aarch64-linux-musl.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-aarch64-linux-musl.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-aarch64-linux-musl.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-aarch64-linux-musl.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-aarch64-linux-musl.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-aarch64-linux-musl.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-aarch64-linux-musl.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-aarch64-linux-musl.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-aarch64-linux-musl.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-aarch64-linux-musl.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-aarch64-linux-musl.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-aarch64-linux-musl.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-aarch64-linux-musl.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-aarch64-linux-musl.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-aarch64-linux-musl.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-aarch64-linux-musl.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-aarch64-linux-musl.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-aarch64-linux-musl.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-aarch64-linux-musl.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-aarch64-linux-musl.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-aarch64-linux-musl.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-aarch64-linux-musl.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-aarch64-linux-musl.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-aarch64-linux-musl.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-aarch64-linux-musl.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-aarch64-linux-musl.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-aarch64-linux-musl.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-aarch64-linux-musl.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-aarch64-linux-musl.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-aarch64-linux-musl.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-aarch64-linux-musl.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-aarch64-linux-musl.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-aarch64-linux-musl.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-aarch64-linux-musl.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-aarch64-linux-musl.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-aarch64-linux-musl.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-aarch64-linux-musl.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-aarch64-linux-musl.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-aarch64-linux-musl.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-aarch64-linux-musl.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,907 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.modules
3
+ r"""
4
+ Orlik-Solomon Algebras
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Copyright (C) 2015 William Slofstra
9
+ # Travis Scrimshaw <tscrimsh at umn.edu>
10
+ #
11
+ # This program is free software: you can redistribute it and/or modify
12
+ # it under the terms of the GNU General Public License as published by
13
+ # the Free Software Foundation, either version 2 of the License, or
14
+ # (at your option) any later version.
15
+ # https://www.gnu.org/licenses/
16
+ # ****************************************************************************
17
+
18
+ from sage.misc.cachefunc import cached_method
19
+ from sage.combinat.free_module import CombinatorialFreeModule
20
+ from sage.categories.algebras import Algebras
21
+ from sage.sets.family import Family
22
+ from sage.modules.with_basis.invariant import FiniteDimensionalInvariantModule
23
+
24
+
25
+ class OrlikSolomonAlgebra(CombinatorialFreeModule):
26
+ r"""
27
+ An Orlik-Solomon algebra.
28
+
29
+ Let `R` be a commutative ring. Let `M` be a matroid with groundset
30
+ `X`. Let `C(M)` denote the set of circuits of `M`. Let `E` denote
31
+ the exterior algebra over `R` generated by `\{ e_x \mid x \in X \}`.
32
+ The *Orlik-Solomon ideal* `J(M)` is the ideal of `E` generated by
33
+
34
+ .. MATH::
35
+
36
+ \partial e_S := \sum_{i=1}^t (-1)^{i-1} e_{j_1} \wedge e_{j_2}
37
+ \wedge \cdots \wedge \widehat{e}_{j_i} \wedge \cdots \wedge e_{j_t}
38
+
39
+ for all `S = \left\{ j_1 < j_2 < \cdots < j_t \right\} \in C(M)`,
40
+ where `\widehat{e}_{j_i}` means that the term `e_{j_i}` is being
41
+ omitted. The notation `\partial e_S` is not a coincidence, as
42
+ `\partial e_S` is actually the image of
43
+ `e_S := e_{j_1} \wedge e_{j_2} \wedge \cdots \wedge e_{j_t}` under the
44
+ unique derivation `\partial` of `E` which sends all `e_x` to `1`.
45
+
46
+ It is easy to see that `\partial e_S \in J(M)` not only for circuits
47
+ `S`, but also for any dependent set `S` of `M`. Moreover, every
48
+ dependent set `S` of `M` satisfies `e_S \in J(M)`.
49
+
50
+ The *Orlik-Solomon algebra* `A(M)` is the quotient `E / J(M)`. This is
51
+ a graded finite-dimensional skew-commutative `R`-algebra. Fix
52
+ some ordering on `X`; then, the NBC sets of `M` (that is, the subsets
53
+ of `X` containing no broken circuit of `M`) form a basis of `A(M)`.
54
+ (Here, a *broken circuit* of `M` is defined to be the result of
55
+ removing the smallest element from a circuit of `M`.)
56
+
57
+ In the current implementation, the basis of `A(M)` is indexed by the
58
+ NBC sets, which are implemented as frozensets.
59
+
60
+ INPUT:
61
+
62
+ - ``R`` -- the base ring
63
+ - ``M`` -- the defining matroid
64
+ - ``ordering`` -- (optional) an ordering of the groundset
65
+
66
+ EXAMPLES:
67
+
68
+ We create the Orlik-Solomon algebra of the uniform matroid `U(3, 4)`
69
+ and do some basic computations::
70
+
71
+ sage: M = matroids.Uniform(3, 4)
72
+ sage: OS = M.orlik_solomon_algebra(QQ)
73
+ sage: OS.dimension()
74
+ 14
75
+ sage: G = OS.algebra_generators()
76
+ sage: M.broken_circuits()
77
+ SetSystem of 1 sets over 4 elements
78
+ sage: M.broken_circuits()[0]
79
+ frozenset({1, 2, 3})
80
+ sage: G[1] * G[2] * G[3]
81
+ OS{0, 1, 2} - OS{0, 1, 3} + OS{0, 2, 3}
82
+
83
+ REFERENCES:
84
+
85
+ - :wikipedia:`Arrangement_of_hyperplanes#The_Orlik-Solomon_algebra`
86
+
87
+ - [CE2001]_
88
+ """
89
+ @staticmethod
90
+ def __classcall_private__(cls, R, M, ordering=None):
91
+ """
92
+ Normalize input to ensure a unique representation.
93
+
94
+ EXAMPLES::
95
+
96
+ sage: M = matroids.Wheel(3)
97
+ sage: from sage.algebras.orlik_solomon import OrlikSolomonAlgebra
98
+ sage: OS1 = OrlikSolomonAlgebra(QQ, M)
99
+ sage: OS2 = OrlikSolomonAlgebra(QQ, M, ordering=(0,1,2,3,4,5))
100
+ sage: OS3 = OrlikSolomonAlgebra(QQ, M, ordering=[0,1,2,3,4,5])
101
+ sage: OS1 is OS2 and OS2 is OS3
102
+ True
103
+ """
104
+ if ordering is None:
105
+ ordering = sorted(M.groundset())
106
+ return super().__classcall__(cls, R, M, tuple(ordering))
107
+
108
+ def __init__(self, R, M, ordering=None):
109
+ """
110
+ Initialize ``self``.
111
+
112
+ EXAMPLES::
113
+
114
+ sage: M = matroids.Wheel(3)
115
+ sage: OS = M.orlik_solomon_algebra(QQ)
116
+ sage: TestSuite(OS).run()
117
+
118
+ We check on the matroid associated to the graph with 3 vertices and
119
+ 2 edges between each vertex::
120
+
121
+ sage: # needs sage.graphs
122
+ sage: G = Graph([[1,2],[1,2],[2,3],[2,3],[1,3],[1,3]], multiedges=True)
123
+ sage: MG = Matroid(G)
124
+ sage: OS = MG.orlik_solomon_algebra(QQ)
125
+ sage: elts = OS.some_elements() + list(OS.algebra_generators())
126
+ sage: TestSuite(OS).run(elements=elts)
127
+ """
128
+ self._M = M
129
+ self._sorting = {x:i for i,x in enumerate(ordering)}
130
+
131
+ # set up the dictionary of broken circuits
132
+ self._broken_circuits = {}
133
+ for c in self._M.circuits():
134
+ L = sorted(c, key=lambda x: self._sorting[x])
135
+ self._broken_circuits[frozenset(L[1:])] = L[0]
136
+
137
+ cat = Algebras(R).FiniteDimensional().WithBasis().Graded()
138
+ CombinatorialFreeModule.__init__(self, R, list(M.no_broken_circuits_sets(ordering)),
139
+ prefix='OS', bracket='{',
140
+ sorting_key=self._sort_key,
141
+ category=cat)
142
+
143
+ def _sort_key(self, x):
144
+ """
145
+ Return the key used to sort the terms.
146
+
147
+ EXAMPLES::
148
+
149
+ sage: M = matroids.Wheel(3)
150
+ sage: OS = M.orlik_solomon_algebra(QQ)
151
+ sage: OS._sort_key(frozenset({1, 2}))
152
+ (-2, [1, 2])
153
+ sage: OS._sort_key(frozenset({0, 1, 2}))
154
+ (-3, [0, 1, 2])
155
+ sage: OS._sort_key(frozenset({}))
156
+ (0, [])
157
+ """
158
+ return (-len(x), sorted(x))
159
+
160
+ def _repr_term(self, m):
161
+ """
162
+ Return a string representation of the basis element indexed by `m`.
163
+
164
+ EXAMPLES::
165
+
166
+ sage: M = matroids.Uniform(3, 4)
167
+ sage: OS = M.orlik_solomon_algebra(QQ)
168
+ sage: OS._repr_term(frozenset([0]))
169
+ 'OS{0}'
170
+ """
171
+ return "OS{{{}}}".format(', '.join(str(t) for t in sorted(m)))
172
+
173
+ def _repr_(self):
174
+ """
175
+ Return a string representation of ``self``.
176
+
177
+ EXAMPLES::
178
+
179
+ sage: M = matroids.Wheel(3)
180
+ sage: M.orlik_solomon_algebra(QQ)
181
+ Orlik-Solomon algebra of Wheel(3): Regular matroid of rank 3
182
+ on 6 elements with 16 bases
183
+ """
184
+ return "Orlik-Solomon algebra of {}".format(self._M)
185
+
186
+ @cached_method
187
+ def one_basis(self):
188
+ """
189
+ Return the index of the basis element corresponding to `1`
190
+ in ``self``.
191
+
192
+ EXAMPLES::
193
+
194
+ sage: M = matroids.Wheel(3)
195
+ sage: OS = M.orlik_solomon_algebra(QQ)
196
+ sage: OS.one_basis() == frozenset()
197
+ True
198
+ """
199
+ return frozenset({})
200
+
201
+ @cached_method
202
+ def algebra_generators(self):
203
+ r"""
204
+ Return the algebra generators of ``self``.
205
+
206
+ These form a family indexed by the groundset `X` of `M`. For
207
+ each `x \in X`, the `x`-th element is `e_x`.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: M = matroids.Uniform(2, 2)
212
+ sage: OS = M.orlik_solomon_algebra(QQ)
213
+ sage: OS.algebra_generators()
214
+ Finite family {0: OS{0}, 1: OS{1}}
215
+
216
+ sage: M = matroids.Uniform(1, 2)
217
+ sage: OS = M.orlik_solomon_algebra(QQ)
218
+ sage: OS.algebra_generators()
219
+ Finite family {0: OS{0}, 1: OS{0}}
220
+
221
+ sage: M = matroids.Uniform(1, 3)
222
+ sage: OS = M.orlik_solomon_algebra(QQ)
223
+ sage: OS.algebra_generators()
224
+ Finite family {0: OS{0}, 1: OS{0}, 2: OS{0}}
225
+ """
226
+ return Family(sorted(self._M.groundset()),
227
+ lambda i: self.subset_image(frozenset([i])))
228
+
229
+ @cached_method
230
+ def product_on_basis(self, a, b):
231
+ r"""
232
+ Return the product in ``self`` of the basis elements
233
+ indexed by ``a`` and ``b``.
234
+
235
+ EXAMPLES::
236
+
237
+ sage: M = matroids.Wheel(3)
238
+ sage: OS = M.orlik_solomon_algebra(QQ)
239
+ sage: OS.product_on_basis(frozenset([2]), frozenset([3,4]))
240
+ OS{0, 1, 2} - OS{0, 1, 4} + OS{0, 2, 3} + OS{0, 3, 4}
241
+
242
+ ::
243
+
244
+ sage: G = OS.algebra_generators()
245
+ sage: prod(G)
246
+ 0
247
+ sage: G[2] * G[4]
248
+ -OS{1, 2} + OS{1, 4}
249
+ sage: G[3] * G[4] * G[2]
250
+ OS{0, 1, 2} - OS{0, 1, 4} + OS{0, 2, 3} + OS{0, 3, 4}
251
+ sage: G[2] * G[3] * G[4]
252
+ OS{0, 1, 2} - OS{0, 1, 4} + OS{0, 2, 3} + OS{0, 3, 4}
253
+ sage: G[3] * G[2] * G[4]
254
+ -OS{0, 1, 2} + OS{0, 1, 4} - OS{0, 2, 3} - OS{0, 3, 4}
255
+
256
+ TESTS:
257
+
258
+ Let us check that `e_{s_1} e_{s_2} \cdots e_{s_k} = e_S` for any
259
+ subset `S = \{ s_1 < s_2 < \cdots < s_k \}` of the groundset::
260
+
261
+ sage: # needs sage.graphs
262
+ sage: G = Graph([[1,2],[1,2],[2,3],[3,4],[4,2]], multiedges=True)
263
+ sage: MG = Matroid(G).regular_matroid()
264
+ sage: E = MG.groundset_list()
265
+ sage: OS = MG.orlik_solomon_algebra(ZZ)
266
+ sage: G = OS.algebra_generators()
267
+ sage: import itertools
268
+ sage: def test_prod(F):
269
+ ....: LHS = OS.subset_image(frozenset(F))
270
+ ....: RHS = OS.prod([G[i] for i in sorted(F)])
271
+ ....: return LHS == RHS
272
+ sage: all( test_prod(F) for k in range(len(E)+1)
273
+ ....: for F in itertools.combinations(E, k) )
274
+ True
275
+ """
276
+ if not a:
277
+ return self.basis()[b]
278
+ if not b:
279
+ return self.basis()[a]
280
+
281
+ if not a.isdisjoint(b):
282
+ return self.zero()
283
+
284
+ R = self.base_ring()
285
+ # since a is disjoint from b, we can just multiply the generator
286
+ if len(a) == 1:
287
+ i = list(a)[0]
288
+ # insert i into nbc, keeping track of sign in coeff
289
+ ns = b.union({i})
290
+ ns_sorted = sorted(ns, key=lambda x: self._sorting[x])
291
+ coeff = (-1)**ns_sorted.index(i)
292
+
293
+ return R(coeff) * self.subset_image(ns)
294
+
295
+ # r is the accumulator
296
+ # we reverse a in the product, so add a sign
297
+ # note that l>=2 here
298
+ if len(a) % 4 < 2:
299
+ sign = R.one()
300
+ else:
301
+ sign = - R.one()
302
+ r = self._from_dict({b: sign}, remove_zeros=False)
303
+
304
+ # now do the multiplication generator by generator
305
+ G = self.algebra_generators()
306
+ for i in sorted(a, key=lambda x: self._sorting[x]):
307
+ r = G[i] * r
308
+
309
+ return r
310
+
311
+ @cached_method
312
+ def subset_image(self, S):
313
+ """
314
+ Return the element `e_S` of `A(M)` (``== self``) corresponding to
315
+ a subset `S` of the groundset of `M`.
316
+
317
+ INPUT:
318
+
319
+ - ``S`` -- frozenset which is a subset of the groundset of `M`
320
+
321
+ EXAMPLES::
322
+
323
+ sage: M = matroids.Wheel(3)
324
+ sage: OS = M.orlik_solomon_algebra(QQ)
325
+ sage: BC = sorted(M.broken_circuits(), key=sorted)
326
+ sage: for bc in BC: (sorted(bc), OS.subset_image(bc))
327
+ ([1, 3], -OS{0, 1} + OS{0, 3})
328
+ ([1, 4, 5], OS{0, 1, 4} - OS{0, 1, 5} - OS{0, 3, 4} + OS{0, 3, 5})
329
+ ([2, 3, 4], OS{0, 1, 2} - OS{0, 1, 4} + OS{0, 2, 3} + OS{0, 3, 4})
330
+ ([2, 3, 5], OS{0, 2, 3} + OS{0, 3, 5})
331
+ ([2, 4], -OS{1, 2} + OS{1, 4})
332
+ ([2, 5], -OS{0, 2} + OS{0, 5})
333
+ ([4, 5], -OS{3, 4} + OS{3, 5})
334
+
335
+ sage: # needs sage.graphs
336
+ sage: M4 = matroids.CompleteGraphic(4)
337
+ sage: OSM4 = M4.orlik_solomon_algebra(QQ)
338
+ sage: OSM4.subset_image(frozenset({2,3,4}))
339
+ OS{0, 2, 3} + OS{0, 3, 4}
340
+
341
+ An example of a custom ordering::
342
+
343
+ sage: # needs sage.graphs
344
+ sage: G = Graph([[3, 4], [4, 1], [1, 2], [2, 3], [3, 5], [5, 6], [6, 3]])
345
+ sage: MG = Matroid(G)
346
+ sage: s = [(5, 6), (1, 2), (3, 5), (2, 3), (1, 4), (3, 6), (3, 4)]
347
+ sage: sorted([sorted(c) for c in MG.circuits()])
348
+ [[(1, 2), (1, 4), (2, 3), (3, 4)],
349
+ [(3, 5), (3, 6), (5, 6)]]
350
+ sage: OSMG = MG.orlik_solomon_algebra(QQ, ordering=s)
351
+ sage: OSMG.subset_image(frozenset())
352
+ OS{}
353
+ sage: OSMG.subset_image(frozenset([(1,2),(3,4),(1,4),(2,3)]))
354
+ 0
355
+ sage: OSMG.subset_image(frozenset([(2,3),(1,2),(3,4)]))
356
+ OS{(1, 2), (2, 3), (3, 4)}
357
+ sage: OSMG.subset_image(frozenset([(1,4),(3,4),(2,3),(3,6),(5,6)]))
358
+ -OS{(1, 2), (1, 4), (2, 3), (3, 6), (5, 6)}
359
+ + OS{(1, 2), (1, 4), (3, 4), (3, 6), (5, 6)}
360
+ - OS{(1, 2), (2, 3), (3, 4), (3, 6), (5, 6)}
361
+ sage: OSMG.subset_image(frozenset([(1,4),(3,4),(2,3),(3,6),(3,5)]))
362
+ OS{(1, 2), (1, 4), (2, 3), (3, 5), (5, 6)}
363
+ - OS{(1, 2), (1, 4), (2, 3), (3, 6), (5, 6)}
364
+ + OS{(1, 2), (1, 4), (3, 4), (3, 5), (5, 6)}
365
+ + OS{(1, 2), (1, 4), (3, 4), (3, 6), (5, 6)}
366
+ - OS{(1, 2), (2, 3), (3, 4), (3, 5), (5, 6)}
367
+ - OS{(1, 2), (2, 3), (3, 4), (3, 6), (5, 6)}
368
+
369
+ TESTS::
370
+
371
+ sage: # needs sage.graphs
372
+ sage: G = Graph([[1,2],[1,2],[2,3],[2,3],[1,3],[1,3]], multiedges=True)
373
+ sage: MG = Matroid(G)
374
+ sage: sorted([sorted(c) for c in MG.circuits()])
375
+ [[0, 1], [0, 2, 4], [0, 2, 5], [0, 3, 4],
376
+ [0, 3, 5], [1, 2, 4], [1, 2, 5], [1, 3, 4],
377
+ [1, 3, 5], [2, 3], [4, 5]]
378
+ sage: OSMG = MG.orlik_solomon_algebra(QQ)
379
+ sage: OSMG.subset_image(frozenset())
380
+ OS{}
381
+ sage: OSMG.subset_image(frozenset([1, 2, 3]))
382
+ 0
383
+ sage: OSMG.subset_image(frozenset([1, 3, 5]))
384
+ 0
385
+ sage: OSMG.subset_image(frozenset([1, 2]))
386
+ OS{0, 2}
387
+ sage: OSMG.subset_image(frozenset([3, 4]))
388
+ -OS{0, 2} + OS{0, 4}
389
+ sage: OSMG.subset_image(frozenset([1, 5]))
390
+ OS{0, 4}
391
+
392
+ sage: # needs sage.graphs
393
+ sage: G = Graph([[1,2],[1,2],[2,3],[3,4],[4,2]], multiedges=True)
394
+ sage: MG = Matroid(G)
395
+ sage: sorted([sorted(c) for c in MG.circuits()])
396
+ [[0, 1], [2, 3, 4]]
397
+ sage: OSMG = MG.orlik_solomon_algebra(QQ)
398
+ sage: OSMG.subset_image(frozenset())
399
+ OS{}
400
+ sage: OSMG.subset_image(frozenset([1, 3, 4]))
401
+ -OS{0, 2, 3} + OS{0, 2, 4}
402
+
403
+ We check on a non-standard ordering::
404
+
405
+ sage: M = matroids.Wheel(3)
406
+ sage: o = [5,4,3,2,1,0]
407
+ sage: OS = M.orlik_solomon_algebra(QQ, ordering=o)
408
+ sage: BC = sorted(M.broken_circuits(ordering=o), key=sorted)
409
+ sage: for bc in BC: (sorted(bc), OS.subset_image(bc))
410
+ ([0, 1], OS{0, 3} - OS{1, 3})
411
+ ([0, 1, 4], OS{0, 3, 5} - OS{0, 4, 5} - OS{1, 3, 5} + OS{1, 4, 5})
412
+ ([0, 2], OS{0, 5} - OS{2, 5})
413
+ ([0, 2, 3], -OS{0, 3, 5} + OS{2, 3, 5})
414
+ ([1, 2], OS{1, 4} - OS{2, 4})
415
+ ([1, 2, 3], -OS{1, 3, 5} + OS{1, 4, 5} + OS{2, 3, 5} - OS{2, 4, 5})
416
+ ([3, 4], OS{3, 5} - OS{4, 5})
417
+ """
418
+ if not isinstance(S, frozenset):
419
+ raise ValueError("S needs to be a frozenset")
420
+ for bc in self._broken_circuits:
421
+ if bc.issubset(S):
422
+ i = self._broken_circuits[bc]
423
+ if i in S:
424
+ # ``S`` contains not just a broken circuit, but an
425
+ # actual circuit; then `e_S = 0`.
426
+ return self.zero()
427
+ coeff = self.base_ring().one()
428
+ # Now, reduce ``S``, and build the result ``r``:
429
+ r = self.zero()
430
+ switch = False
431
+ Si = S.union({i})
432
+ Ss = sorted(Si, key=lambda x: self._sorting[x])
433
+ for j in Ss:
434
+ if j in bc:
435
+ r += coeff * self.subset_image(Si.difference({j}))
436
+ if switch:
437
+ coeff *= -1
438
+ if j == i:
439
+ switch = True
440
+ return r
441
+ # So ``S`` is an NBC set.
442
+ return self.monomial(S)
443
+
444
+ def degree_on_basis(self, m):
445
+ """
446
+ Return the degree of the basis element indexed by ``m``.
447
+
448
+ EXAMPLES::
449
+
450
+ sage: M = matroids.Wheel(3)
451
+ sage: OS = M.orlik_solomon_algebra(QQ)
452
+ sage: OS.degree_on_basis(frozenset([1]))
453
+ 1
454
+ sage: OS.degree_on_basis(frozenset([0, 2, 3]))
455
+ 3
456
+ """
457
+ return len(m)
458
+
459
+ def as_gca(self):
460
+ r"""
461
+ Return the graded commutative algebra corresponding to ``self``.
462
+
463
+ EXAMPLES::
464
+
465
+ sage: # needs sage.combinat sage.geometry.polyhedron sage.graphs
466
+ sage: H = hyperplane_arrangements.braid(3)
467
+ sage: O = H.orlik_solomon_algebra(QQ)
468
+ sage: O.as_gca()
469
+ Graded Commutative Algebra with generators ('e0', 'e1', 'e2') in degrees (1, 1, 1)
470
+ with relations [e0*e1 - e0*e2 + e1*e2] over Rational Field
471
+
472
+ ::
473
+
474
+ sage: N = matroids.catalog.Fano()
475
+ sage: O = N.orlik_solomon_algebra(QQ)
476
+ sage: O.as_gca() # needs sage.combinat sage.libs.singular
477
+ Graded Commutative Algebra with generators ('e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6')
478
+ in degrees (1, 1, 1, 1, 1, 1, 1) with relations
479
+ [e1*e2 - e1*e3 + e2*e3, e0*e1*e3 - e0*e1*e4 + e0*e3*e4 - e1*e3*e4,
480
+ e0*e2 - e0*e4 + e2*e4, e3*e4 - e3*e5 + e4*e5,
481
+ e1*e2*e4 - e1*e2*e5 + e1*e4*e5 - e2*e4*e5,
482
+ e0*e2*e3 - e0*e2*e5 + e0*e3*e5 - e2*e3*e5, e0*e1 - e0*e5 + e1*e5,
483
+ e2*e5 - e2*e6 + e5*e6, e1*e3*e5 - e1*e3*e6 + e1*e5*e6 - e3*e5*e6,
484
+ e0*e4*e5 - e0*e4*e6 + e0*e5*e6 - e4*e5*e6, e1*e4 - e1*e6 + e4*e6,
485
+ e2*e3*e4 - e2*e3*e6 + e2*e4*e6 - e3*e4*e6, e0*e3 - e0*e6 + e3*e6,
486
+ e0*e1*e2 - e0*e1*e6 + e0*e2*e6 - e1*e2*e6] over Rational Field
487
+
488
+ TESTS::
489
+
490
+ sage: # needs sage.geometry.polyhedron
491
+ sage: H = hyperplane_arrangements.Catalan(3,QQ).cone()
492
+ sage: O = H.orlik_solomon_algebra(QQ)
493
+ sage: A = O.as_gca() # needs sage.combinat
494
+ sage: H.poincare_polynomial()
495
+ 20*x^3 + 29*x^2 + 10*x + 1
496
+ sage: [len(A.basis(i)) for i in range(5)] # needs sage.combinat
497
+ [1, 10, 29, 20, 0]
498
+ """
499
+ from sage.algebras.commutative_dga import GradedCommutativeAlgebra
500
+ gens = self.algebra_generators()
501
+ gkeys = gens.keys()
502
+ names = ['e{}'.format(i) for i in range(len(gens))]
503
+ A = GradedCommutativeAlgebra(self.base_ring(), names)
504
+ rels = []
505
+ for bc in self._broken_circuits.items():
506
+ bclist = [bc[1]] + list(bc[0])
507
+ indices = [gkeys.index(el) for el in bclist]
508
+ indices.sort()
509
+ rel = A.zero()
510
+ sign = -(-1)**len(indices)
511
+ for i in indices:
512
+ mon = A.one()
513
+ for j in indices:
514
+ if j != i:
515
+ mon *= A.gen(j)
516
+ rel += sign * mon
517
+ sign = -sign
518
+ rels.append(rel)
519
+ I = A.ideal(rels)
520
+ return A.quotient(I)
521
+
522
+ def as_cdga(self):
523
+ r"""
524
+ Return the commutative differential graded algebra corresponding
525
+ to ``self`` with the trivial differential.
526
+
527
+ EXAMPLES::
528
+
529
+ sage: # needs sage.combinat sage.geometry.polyhedron sage.graphs
530
+ sage: H = hyperplane_arrangements.braid(3)
531
+ sage: O = H.orlik_solomon_algebra(QQ)
532
+ sage: O.as_cdga()
533
+ Commutative Differential Graded Algebra with generators ('e0', 'e1', 'e2')
534
+ in degrees (1, 1, 1) with relations [e0*e1 - e0*e2 + e1*e2] over Rational Field
535
+ with differential:
536
+ e0 --> 0
537
+ e1 --> 0
538
+ e2 --> 0
539
+ """
540
+ return self.as_gca().cdg_algebra({})
541
+
542
+ def aomoto_complex(self, omega):
543
+ r"""
544
+ Return the Aomoto complex of ``self`` defined by ``omega``.
545
+
546
+ Let `A(M)` be an Orlik-Solomon algebra of a matroid `M`. Let
547
+ `\omega \in A(M)_1` be an element of (homogeneous) degree 1.
548
+ The Aomoto complete is the chain complex defined on `A(M)`
549
+ with the differential defined by `\omega \wedge`.
550
+
551
+ EXAMPLES::
552
+
553
+ sage: # needs sage.geometry.polyhedron sage.graphs
554
+ sage: OS = hyperplane_arrangements.braid(3).orlik_solomon_algebra(QQ)
555
+ sage: gens = OS.algebra_generators()
556
+ sage: AC = OS.aomoto_complex(gens[0])
557
+ sage: ascii_art(AC)
558
+ [0]
559
+ [1 0 0] [0]
560
+ [0 1 0] [1]
561
+ 0 <-- C_2 <-------- C_1 <---- C_0 <-- 0
562
+ sage: AC.homology()
563
+ {0: Vector space of dimension 0 over Rational Field,
564
+ 1: Vector space of dimension 0 over Rational Field,
565
+ 2: Vector space of dimension 0 over Rational Field}
566
+ sage: AC = OS.aomoto_complex(-2*gens[0] + gens[1] + gens[2]); ascii_art(AC)
567
+ [ 1]
568
+ [-1 -1 -1] [ 1]
569
+ [-1 -1 -1] [-2]
570
+ 0 <-- C_2 <----------- C_1 <----- C_0 <-- 0
571
+ sage: AC.homology()
572
+ {0: Vector space of dimension 0 over Rational Field,
573
+ 1: Vector space of dimension 1 over Rational Field,
574
+ 2: Vector space of dimension 1 over Rational Field}
575
+
576
+ TESTS::
577
+
578
+ sage: # needs sage.geometry.polyhedron sage.graphs
579
+ sage: OS = hyperplane_arrangements.braid(4).orlik_solomon_algebra(QQ)
580
+ sage: gens = OS.algebra_generators()
581
+ sage: OS.aomoto_complex(gens[0] * gens[1] * gens[3])
582
+ Traceback (most recent call last):
583
+ ...
584
+ ValueError: omega must be a homogeneous element of degree 1
585
+
586
+ REFERENCES:
587
+
588
+ - [BY2016]_
589
+ """
590
+ if not omega.is_homogeneous() or omega.degree() != 1:
591
+ raise ValueError("omega must be a homogeneous element of degree 1")
592
+ from sage.homology.chain_complex import ChainComplex
593
+ R = self.base_ring()
594
+ from collections import defaultdict
595
+ from sage.matrix.constructor import matrix
596
+ graded_basis = defaultdict(list)
597
+ B = self.basis()
598
+ for k in B.keys():
599
+ graded_basis[len(k)].append(k)
600
+ degrees = list(graded_basis)
601
+ data = {i: matrix.zero(R, len(graded_basis[i+1]), len(graded_basis[i]))
602
+ for i in degrees}
603
+ for i in degrees:
604
+ mat = data[i]
605
+ for j, key in enumerate(graded_basis[i]):
606
+ ret = (omega * B[key]).monomial_coefficients(copy=False)
607
+ for k, imkey in enumerate(graded_basis[i+1]):
608
+ if imkey in ret:
609
+ mat[k,j] = ret[imkey]
610
+ mat.set_immutable()
611
+ return ChainComplex(data, R)
612
+
613
+
614
+ class OrlikSolomonInvariantAlgebra(FiniteDimensionalInvariantModule):
615
+ r"""
616
+ The invariant algebra of the Orlik-Solomon algebra from the
617
+ action on `A(M)` induced from the ``action_on_groundset``.
618
+
619
+ INPUT:
620
+
621
+ - ``R`` -- the ring of coefficients
622
+ - ``M`` -- a matroid
623
+ - ``G`` -- a semigroup
624
+ - ``action_on_groundset`` -- (optional) a function defining the action
625
+ of ``G`` on the elements of the groundset of ``M``; default is ``g(x)``
626
+
627
+ EXAMPLES:
628
+
629
+ Lets start with the action of `S_3` on the rank `2` braid matroid::
630
+
631
+ sage: # needs sage.graphs
632
+ sage: M = matroids.CompleteGraphic(3)
633
+ sage: M.groundset()
634
+ frozenset({0, 1, 2})
635
+ sage: G = SymmetricGroup(3) # needs sage.groups
636
+
637
+ Calling elements ``g`` of ``G`` on an element `i` of `\{1, 2, 3\}`
638
+ defines the action we want, but since the groundset is `\{0, 1, 2\}`
639
+ we first add `1` and then subtract `1`::
640
+
641
+ sage: def on_groundset(g, x):
642
+ ....: return g(x+1) - 1
643
+
644
+ Now that we have defined an action we can create the invariant, and
645
+ get its basis::
646
+
647
+ sage: # needs sage.graphs sage.groups
648
+ sage: OSG = M.orlik_solomon_algebra(QQ, invariant=(G, on_groundset))
649
+ sage: OSG.basis()
650
+ Finite family {0: B[0], 1: B[1]}
651
+ sage: [OSG.lift(b) for b in OSG.basis()]
652
+ [OS{}, OS{0} + OS{1} + OS{2}]
653
+
654
+ Since it is invariant, the action of any ``g`` in ``G`` is trivial::
655
+
656
+ sage: # needs sage.graphs sage.groups
657
+ sage: x = OSG.an_element(); x
658
+ 2*B[0] + 2*B[1]
659
+ sage: g = G.an_element(); g
660
+ (2,3)
661
+ sage: g * x
662
+ 2*B[0] + 2*B[1]
663
+
664
+ sage: # needs sage.graphs sage.groups
665
+ sage: x = OSG.random_element()
666
+ sage: g = G.random_element()
667
+ sage: g * x == x
668
+ True
669
+
670
+ The underlying ambient module is the Orlik-Solomon algebra,
671
+ which is accessible via :meth:`ambient()`::
672
+
673
+ sage: M.orlik_solomon_algebra(QQ) is OSG.ambient() # needs sage.graphs sage.groups
674
+ True
675
+
676
+ There is not much structure here, so lets look at a bigger example.
677
+ Here we will look at the rank `3` braid matroid, and to make things
678
+ easier, we'll start the indexing at `1` so that the `S_6` action
679
+ on the groundset is simply calling `g`::
680
+
681
+ sage: # needs sage.graphs sage.groups
682
+ sage: M = matroids.CompleteGraphic(4); M.groundset()
683
+ frozenset({0, 1, 2, 3, 4, 5})
684
+ sage: new_bases = [frozenset(i+1 for i in j) for j in M.bases()]
685
+ sage: M = Matroid(bases=new_bases); M.groundset()
686
+ frozenset({1, 2, 3, 4, 5, 6})
687
+ sage: G = SymmetricGroup(6)
688
+ sage: OSG = M.orlik_solomon_algebra(QQ, invariant=G)
689
+ sage: OSG.basis()
690
+ Finite family {0: B[0], 1: B[1]}
691
+ sage: [OSG.lift(b) for b in OSG.basis()]
692
+ [OS{}, OS{1} + OS{2} + OS{3} + OS{4} + OS{5} + OS{6}]
693
+ sage: (OSG.basis()[1])^2
694
+ 0
695
+ sage: 5 * OSG.basis()[1]
696
+ 5*B[1]
697
+
698
+ Next, we look at the same matroid but with an `S_3 \times S_3` action
699
+ (here realized as a Young subgroup of `S_6`)::
700
+
701
+ sage: # needs sage.graphs sage.groups
702
+ sage: H = G.young_subgroup([3, 3])
703
+ sage: OSH = M.orlik_solomon_algebra(QQ, invariant=H)
704
+ sage: OSH.basis()
705
+ Finite family {0: B[0], 1: B[1], 2: B[2]}
706
+ sage: [OSH.lift(b) for b in OSH.basis()]
707
+ [OS{}, OS{4} + OS{5} + OS{6}, OS{1} + OS{2} + OS{3}]
708
+
709
+ We implement an `S_4` action on the vertices::
710
+
711
+ sage: # needs sage.graphs sage.groups
712
+ sage: M = matroids.CompleteGraphic(4)
713
+ sage: G = SymmetricGroup(4)
714
+ sage: edge_map = {i: M.groundset_to_edges([i])[0][:2]
715
+ ....: for i in M.groundset()}
716
+ sage: inv_map = {v: k for k, v in edge_map.items()}
717
+ sage: def vert_action(g, x):
718
+ ....: a, b = edge_map[x]
719
+ ....: return inv_map[tuple(sorted([g(a+1)-1, g(b+1)-1]))]
720
+ sage: OSG = M.orlik_solomon_algebra(QQ, invariant=(G, vert_action))
721
+ sage: B = OSG.basis()
722
+ sage: [OSG.lift(b) for b in B]
723
+ [OS{}, OS{0} + OS{1} + OS{2} + OS{3} + OS{4} + OS{5}]
724
+
725
+ We use this to describe the Young subgroup `S_2 \times S_2` action::
726
+
727
+ sage: # needs sage.graphs sage.groups
728
+ sage: H = G.young_subgroup([2,2])
729
+ sage: OSH = M.orlik_solomon_algebra(QQ, invariant=(H, vert_action))
730
+ sage: B = OSH.basis()
731
+ sage: [OSH.lift(b) for b in B]
732
+ [OS{}, OS{5}, OS{1} + OS{2} + OS{3} + OS{4}, OS{0},
733
+ -1/2*OS{1, 2} + OS{1, 5} - 1/2*OS{3, 4} + OS{3, 5},
734
+ OS{0, 5}, OS{0, 1} + OS{0, 2} + OS{0, 3} + OS{0, 4},
735
+ -1/2*OS{0, 1, 2} + OS{0, 1, 5} - 1/2*OS{0, 3, 4} + OS{0, 3, 5}]
736
+
737
+ We demonstrate the algebra structure::
738
+
739
+ sage: matrix([[b*bp for b in B] for bp in B]) # needs sage.graphs sage.groups
740
+ [ B[0] B[1] B[2] B[3] B[4] B[5] B[6] B[7]]
741
+ [ B[1] 0 2*B[4] B[5] 0 0 2*B[7] 0]
742
+ [ B[2] -2*B[4] 0 B[6] 0 -2*B[7] 0 0]
743
+ [ B[3] -B[5] -B[6] 0 B[7] 0 0 0]
744
+ [ B[4] 0 0 B[7] 0 0 0 0]
745
+ [ B[5] 0 -2*B[7] 0 0 0 0 0]
746
+ [ B[6] 2*B[7] 0 0 0 0 0 0]
747
+ [ B[7] 0 0 0 0 0 0 0]
748
+
749
+ .. NOTE::
750
+
751
+ The algebra structure only exists when the action on the
752
+ groundset yields an equivariant matroid, in the sense that
753
+ `g \cdot I \in \mathcal{I}` for every `g \in G` and for
754
+ every `I \in \mathcal{I}`.
755
+ """
756
+ def __init__(self, R, M, G, action_on_groundset=None, *args, **kwargs):
757
+ r"""
758
+ Initialize ``self``.
759
+
760
+ EXAMPLES::
761
+
762
+ sage: # needs sage.graphs sage.groups
763
+ sage: M = matroids.CompleteGraphic(4)
764
+ sage: new_bases = [frozenset(i+1 for i in j) for j in M.bases()]
765
+ sage: M = Matroid(bases=new_bases)
766
+ sage: G = SymmetricGroup(6)
767
+ sage: OSG = M.orlik_solomon_algebra(QQ, invariant=G)
768
+ sage: TestSuite(OSG).run()
769
+ """
770
+ ordering = kwargs.pop('ordering', None)
771
+ OS = OrlikSolomonAlgebra(R, M, ordering)
772
+ self._ambient = OS
773
+
774
+ if action_on_groundset is None:
775
+ # if sage knows the action, we don't need to provide it
776
+
777
+ def action_on_groundset(g, x):
778
+ return g(x)
779
+
780
+ self._groundset_action = action_on_groundset
781
+
782
+ self._side = kwargs.pop('side', 'left')
783
+ category = kwargs.pop('category', OS.category().Subobjects())
784
+
785
+ def action(g, m):
786
+ return OS.sum(c * self._basis_action(g, x)
787
+ for x, c in m._monomial_coefficients.items())
788
+
789
+ self._action = action
790
+
791
+ # Since an equivariant matroid yields a degree-preserving action
792
+ # on the basis of OS, the matrix which computes the action when
793
+ # computing the invariant will be a block matrix. To avoid dealing
794
+ # with huge matrices, we can split it up into graded pieces.
795
+
796
+ max_deg = max(b.degree() for b in OS.basis())
797
+ B = [] # initialize the basis
798
+ for d in range(max_deg + 1):
799
+ OS_d = OS.homogeneous_component(d)
800
+ OSG_d = OS_d.invariant_module(G, action=action, category=category)
801
+ B += [OS_d.lift(OSG_d.lift(b)) for b in OSG_d.basis()]
802
+
803
+ # `FiniteDimensionalInvariantModule.__init__` is already called
804
+ # by `OS_d.invariant_module`, and so we pass to the superclass
805
+ # of `FiniteDimensionalInvariantModule`, which is `SubmoduleWithBasis`.
806
+ from sage.modules.with_basis.subquotient import SubmoduleWithBasis
807
+ SubmoduleWithBasis.__init__(self, Family(B),
808
+ support_order=OS._compute_support_order(B),
809
+ ambient=OS,
810
+ unitriangular=False,
811
+ category=category,
812
+ *args, **kwargs)
813
+
814
+ # To subclass FiniteDimensionalInvariant module, we also need a
815
+ # self._semigroup attribute.
816
+ self._semigroup = G
817
+
818
+ def construction(self):
819
+ r"""
820
+ Return the functorial construction of ``self``.
821
+
822
+ This implementation of the method only returns ``None``.
823
+
824
+ TESTS::
825
+
826
+ sage: M = matroids.Wheel(3)
827
+ sage: from sage.algebras.orlik_solomon import OrlikSolomonAlgebra
828
+ sage: OS1 = OrlikSolomonAlgebra(QQ, M)
829
+ sage: OS1.construction() is None
830
+ True
831
+ """
832
+ return None
833
+
834
+ def _basis_action(self, g, f):
835
+ r"""
836
+ Return the action of the group element ``g`` on the n.b.c. set ``f``
837
+ in the ambient Orlik-Solomon algebra.
838
+
839
+ INPUT:
840
+
841
+ - ``g`` -- a group element
842
+ - ``f`` -- ``frozenset`` for an n.b.c. set
843
+
844
+ OUTPUT:
845
+
846
+ - the result of the action of ``g`` on ``f`` inside
847
+ of the Orlik-Solomon algebra
848
+
849
+ EXAMPLES::
850
+
851
+ sage: # needs sage.graphs sage.groups
852
+ sage: M = matroids.CompleteGraphic(3)
853
+ sage: M.groundset()
854
+ frozenset({0, 1, 2})
855
+ sage: G = SymmetricGroup(3)
856
+ sage: def on_groundset(g, x):
857
+ ....: return g(x+1)-1
858
+ sage: OSG = M.orlik_solomon_algebra(QQ, invariant=(G,on_groundset))
859
+ sage: act = lambda g: (OSG._basis_action(g,frozenset({0,1})),
860
+ ....: OSG._basis_action(g,frozenset({0,2})))
861
+ sage: [act(g) for g in G]
862
+ [(OS{0, 1}, OS{0, 2}),
863
+ (-OS{0, 2}, OS{0, 1} - OS{0, 2}),
864
+ (-OS{0, 1} + OS{0, 2}, -OS{0, 1}),
865
+ (OS{0, 2}, OS{0, 1}),
866
+ (OS{0, 1} - OS{0, 2}, -OS{0, 2}),
867
+ (-OS{0, 1}, -OS{0, 1} + OS{0, 2})]
868
+
869
+ We also check that the ordering is respected::
870
+
871
+ sage: # needs sage.graphs sage.groups
872
+ sage: fset = frozenset({1,2})
873
+ sage: OS1 = M.orlik_solomon_algebra(QQ)
874
+ sage: OS1.subset_image(fset)
875
+ -OS{0, 1} + OS{0, 2}
876
+ sage: OS2 = M.orlik_solomon_algebra(QQ, range(2,-1,-1))
877
+ sage: OS2.subset_image(fset)
878
+ OS{1, 2}
879
+ sage: OSG2 = M.orlik_solomon_algebra(QQ,
880
+ ....: invariant=(G,on_groundset),
881
+ ....: ordering=range(2,-1,-1))
882
+ sage: g = G.an_element(); g
883
+ (2,3)
884
+
885
+ This choice of ``g`` acting on this choice of ``fset`` reverses
886
+ the sign::
887
+
888
+ sage: OSG._basis_action(g, fset) # needs sage.graphs sage.groups
889
+ OS{0, 1} - OS{0, 2}
890
+ sage: OSG2._basis_action(g, fset) # needs sage.graphs sage.groups
891
+ -OS{1, 2}
892
+ """
893
+ OS = self._ambient
894
+ if not f:
895
+ return OS.one()
896
+
897
+ # basis_elt is an n.b.c. set, but it should be
898
+ # in a standardized order to deal with sign issues
899
+ basis_elt = sorted(f, key=OS._sorting.__getitem__)
900
+
901
+ gx = OS.one()
902
+
903
+ for e in basis_elt:
904
+ fset = frozenset([self._groundset_action(g, e)])
905
+ gx = gx * OS.subset_image(fset)
906
+
907
+ return gx