passagemath-modules 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

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

Potentially problematic release.


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

Files changed (807) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +807 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
  6. passagemath_modules.libs/libgmp-6e109695.so.10.5.0 +0 -0
  7. passagemath_modules.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  8. passagemath_modules.libs/libmpc-7f678fcf.so.3.3.1 +0 -0
  9. passagemath_modules.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  10. passagemath_modules.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  11. passagemath_modules.libs/libquadmath-2284e583.so.0.0.0 +0 -0
  12. sage/algebras/all__sagemath_modules.py +20 -0
  13. sage/algebras/catalog.py +148 -0
  14. sage/algebras/clifford_algebra.py +3107 -0
  15. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  16. sage/algebras/clifford_algebra_element.pxd +16 -0
  17. sage/algebras/clifford_algebra_element.pyx +997 -0
  18. sage/algebras/commutative_dga.py +4252 -0
  19. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-gnu.so +0 -0
  20. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  21. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  22. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  23. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  29. sage/algebras/finite_gca.py +528 -0
  30. sage/algebras/group_algebra.py +232 -0
  31. sage/algebras/lie_algebras/abelian.py +197 -0
  32. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  33. sage/algebras/lie_algebras/all.py +25 -0
  34. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  35. sage/algebras/lie_algebras/bch.py +177 -0
  36. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  37. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  38. sage/algebras/lie_algebras/center_uea.py +767 -0
  39. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  40. sage/algebras/lie_algebras/examples.py +683 -0
  41. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  42. sage/algebras/lie_algebras/heisenberg.py +820 -0
  43. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  44. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-gnu.so +0 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  47. sage/algebras/lie_algebras/morphism.py +661 -0
  48. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  49. sage/algebras/lie_algebras/onsager.py +1324 -0
  50. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  51. sage/algebras/lie_algebras/quotient.py +462 -0
  52. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  53. sage/algebras/lie_algebras/representation.py +1040 -0
  54. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  55. sage/algebras/lie_algebras/subalgebra.py +967 -0
  56. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  57. sage/algebras/lie_algebras/verma_module.py +1630 -0
  58. sage/algebras/lie_algebras/virasoro.py +1186 -0
  59. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-gnu.so +0 -0
  60. sage/algebras/octonion_algebra.pxd +20 -0
  61. sage/algebras/octonion_algebra.pyx +987 -0
  62. sage/algebras/orlik_solomon.py +907 -0
  63. sage/algebras/orlik_terao.py +779 -0
  64. sage/algebras/steenrod/all.py +7 -0
  65. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  66. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  67. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  68. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  69. sage/algebras/weyl_algebra.py +1126 -0
  70. sage/all__sagemath_modules.py +62 -0
  71. sage/calculus/all__sagemath_modules.py +19 -0
  72. sage/calculus/expr.py +205 -0
  73. sage/calculus/integration.cpython-314-x86_64-linux-gnu.so +0 -0
  74. sage/calculus/integration.pyx +698 -0
  75. sage/calculus/interpolation.cpython-314-x86_64-linux-gnu.so +0 -0
  76. sage/calculus/interpolation.pxd +13 -0
  77. sage/calculus/interpolation.pyx +387 -0
  78. sage/calculus/interpolators.cpython-314-x86_64-linux-gnu.so +0 -0
  79. sage/calculus/interpolators.pyx +326 -0
  80. sage/calculus/ode.cpython-314-x86_64-linux-gnu.so +0 -0
  81. sage/calculus/ode.pxd +5 -0
  82. sage/calculus/ode.pyx +610 -0
  83. sage/calculus/riemann.cpython-314-x86_64-linux-gnu.so +0 -0
  84. sage/calculus/riemann.pyx +1521 -0
  85. sage/calculus/test_sympy.py +201 -0
  86. sage/calculus/transforms/all.py +7 -0
  87. sage/calculus/transforms/dft.py +844 -0
  88. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-gnu.so +0 -0
  89. sage/calculus/transforms/dwt.pxd +7 -0
  90. sage/calculus/transforms/dwt.pyx +160 -0
  91. sage/calculus/transforms/fft.cpython-314-x86_64-linux-gnu.so +0 -0
  92. sage/calculus/transforms/fft.pxd +12 -0
  93. sage/calculus/transforms/fft.pyx +487 -0
  94. sage/calculus/wester.py +662 -0
  95. sage/coding/abstract_code.py +1108 -0
  96. sage/coding/ag_code.py +868 -0
  97. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-gnu.so +0 -0
  98. sage/coding/ag_code_decoders.pyx +2639 -0
  99. sage/coding/all.py +15 -0
  100. sage/coding/bch_code.py +494 -0
  101. sage/coding/binary_code.cpython-314-x86_64-linux-gnu.so +0 -0
  102. sage/coding/binary_code.pxd +124 -0
  103. sage/coding/binary_code.pyx +4139 -0
  104. sage/coding/bounds_catalog.py +43 -0
  105. sage/coding/channel.py +819 -0
  106. sage/coding/channels_catalog.py +29 -0
  107. sage/coding/code_bounds.py +755 -0
  108. sage/coding/code_constructions.py +804 -0
  109. sage/coding/codes_catalog.py +111 -0
  110. sage/coding/cyclic_code.py +1329 -0
  111. sage/coding/databases.py +316 -0
  112. sage/coding/decoder.py +373 -0
  113. sage/coding/decoders_catalog.py +88 -0
  114. sage/coding/delsarte_bounds.py +709 -0
  115. sage/coding/encoder.py +390 -0
  116. sage/coding/encoders_catalog.py +64 -0
  117. sage/coding/extended_code.py +468 -0
  118. sage/coding/gabidulin_code.py +1058 -0
  119. sage/coding/golay_code.py +404 -0
  120. sage/coding/goppa_code.py +441 -0
  121. sage/coding/grs_code.py +2371 -0
  122. sage/coding/guava.py +107 -0
  123. sage/coding/guruswami_sudan/all.py +1 -0
  124. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  125. sage/coding/guruswami_sudan/interpolation.py +409 -0
  126. sage/coding/guruswami_sudan/utils.py +176 -0
  127. sage/coding/hamming_code.py +176 -0
  128. sage/coding/information_set_decoder.py +1032 -0
  129. sage/coding/kasami_codes.cpython-314-x86_64-linux-gnu.so +0 -0
  130. sage/coding/kasami_codes.pyx +351 -0
  131. sage/coding/linear_code.py +3067 -0
  132. sage/coding/linear_code_no_metric.py +1354 -0
  133. sage/coding/linear_rank_metric.py +961 -0
  134. sage/coding/parity_check_code.py +353 -0
  135. sage/coding/punctured_code.py +719 -0
  136. sage/coding/reed_muller_code.py +999 -0
  137. sage/coding/self_dual_codes.py +942 -0
  138. sage/coding/source_coding/all.py +2 -0
  139. sage/coding/source_coding/huffman.py +553 -0
  140. sage/coding/subfield_subcode.py +423 -0
  141. sage/coding/two_weight_db.py +399 -0
  142. sage/combinat/all__sagemath_modules.py +7 -0
  143. sage/combinat/cartesian_product.py +347 -0
  144. sage/combinat/family.py +11 -0
  145. sage/combinat/free_module.py +1977 -0
  146. sage/combinat/root_system/all.py +147 -0
  147. sage/combinat/root_system/ambient_space.py +527 -0
  148. sage/combinat/root_system/associahedron.py +471 -0
  149. sage/combinat/root_system/braid_move_calculator.py +143 -0
  150. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-gnu.so +0 -0
  151. sage/combinat/root_system/braid_orbit.pyx +144 -0
  152. sage/combinat/root_system/branching_rules.py +2301 -0
  153. sage/combinat/root_system/cartan_matrix.py +1245 -0
  154. sage/combinat/root_system/cartan_type.py +3069 -0
  155. sage/combinat/root_system/coxeter_group.py +162 -0
  156. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  157. sage/combinat/root_system/coxeter_type.py +681 -0
  158. sage/combinat/root_system/dynkin_diagram.py +900 -0
  159. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  160. sage/combinat/root_system/fundamental_group.py +795 -0
  161. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  162. sage/combinat/root_system/integrable_representations.py +1227 -0
  163. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  164. sage/combinat/root_system/pieri_factors.py +1147 -0
  165. sage/combinat/root_system/plot.py +1615 -0
  166. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  167. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  168. sage/combinat/root_system/root_space.py +487 -0
  169. sage/combinat/root_system/root_system.py +882 -0
  170. sage/combinat/root_system/type_A.py +348 -0
  171. sage/combinat/root_system/type_A_affine.py +227 -0
  172. sage/combinat/root_system/type_A_infinity.py +241 -0
  173. sage/combinat/root_system/type_B.py +347 -0
  174. sage/combinat/root_system/type_BC_affine.py +287 -0
  175. sage/combinat/root_system/type_B_affine.py +216 -0
  176. sage/combinat/root_system/type_C.py +317 -0
  177. sage/combinat/root_system/type_C_affine.py +188 -0
  178. sage/combinat/root_system/type_D.py +357 -0
  179. sage/combinat/root_system/type_D_affine.py +208 -0
  180. sage/combinat/root_system/type_E.py +641 -0
  181. sage/combinat/root_system/type_E_affine.py +231 -0
  182. sage/combinat/root_system/type_F.py +387 -0
  183. sage/combinat/root_system/type_F_affine.py +137 -0
  184. sage/combinat/root_system/type_G.py +293 -0
  185. sage/combinat/root_system/type_G_affine.py +132 -0
  186. sage/combinat/root_system/type_H.py +105 -0
  187. sage/combinat/root_system/type_I.py +110 -0
  188. sage/combinat/root_system/type_Q.py +150 -0
  189. sage/combinat/root_system/type_affine.py +509 -0
  190. sage/combinat/root_system/type_dual.py +704 -0
  191. sage/combinat/root_system/type_folded.py +301 -0
  192. sage/combinat/root_system/type_marked.py +748 -0
  193. sage/combinat/root_system/type_reducible.py +601 -0
  194. sage/combinat/root_system/type_relabel.py +730 -0
  195. sage/combinat/root_system/type_super_A.py +837 -0
  196. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  197. sage/combinat/root_system/weight_space.py +639 -0
  198. sage/combinat/root_system/weyl_characters.py +2238 -0
  199. sage/crypto/__init__.py +4 -0
  200. sage/crypto/all.py +28 -0
  201. sage/crypto/block_cipher/all.py +7 -0
  202. sage/crypto/block_cipher/des.py +1065 -0
  203. sage/crypto/block_cipher/miniaes.py +2171 -0
  204. sage/crypto/block_cipher/present.py +909 -0
  205. sage/crypto/block_cipher/sdes.py +1527 -0
  206. sage/crypto/boolean_function.cpython-314-x86_64-linux-gnu.so +0 -0
  207. sage/crypto/boolean_function.pxd +10 -0
  208. sage/crypto/boolean_function.pyx +1487 -0
  209. sage/crypto/cipher.py +78 -0
  210. sage/crypto/classical.py +3668 -0
  211. sage/crypto/classical_cipher.py +569 -0
  212. sage/crypto/cryptosystem.py +387 -0
  213. sage/crypto/key_exchange/all.py +7 -0
  214. sage/crypto/key_exchange/catalog.py +24 -0
  215. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  216. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  217. sage/crypto/lattice.py +312 -0
  218. sage/crypto/lfsr.py +295 -0
  219. sage/crypto/lwe.py +840 -0
  220. sage/crypto/mq/__init__.py +4 -0
  221. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  222. sage/crypto/mq/rijndael_gf.py +2345 -0
  223. sage/crypto/mq/sbox.py +7 -0
  224. sage/crypto/mq/sr.py +3344 -0
  225. sage/crypto/public_key/all.py +5 -0
  226. sage/crypto/public_key/blum_goldwasser.py +776 -0
  227. sage/crypto/sbox.cpython-314-x86_64-linux-gnu.so +0 -0
  228. sage/crypto/sbox.pyx +2090 -0
  229. sage/crypto/sboxes.py +2090 -0
  230. sage/crypto/stream.py +390 -0
  231. sage/crypto/stream_cipher.py +297 -0
  232. sage/crypto/util.py +519 -0
  233. sage/ext/all__sagemath_modules.py +1 -0
  234. sage/ext/interpreters/__init__.py +1 -0
  235. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  236. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-gnu.so +0 -0
  237. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  238. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  239. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-gnu.so +0 -0
  240. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  241. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  242. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-gnu.so +0 -0
  243. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  244. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  245. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-gnu.so +0 -0
  246. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  247. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  248. sage/geometry/all__sagemath_modules.py +5 -0
  249. sage/geometry/toric_lattice.py +1745 -0
  250. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-gnu.so +0 -0
  251. sage/geometry/toric_lattice_element.pyx +432 -0
  252. sage/groups/abelian_gps/abelian_group.py +1925 -0
  253. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  254. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  255. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  256. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  257. sage/groups/abelian_gps/element_base.py +341 -0
  258. sage/groups/abelian_gps/values.py +488 -0
  259. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  260. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  261. sage/groups/additive_abelian/all.py +4 -0
  262. sage/groups/additive_abelian/qmodnz.py +231 -0
  263. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  264. sage/groups/affine_gps/affine_group.py +535 -0
  265. sage/groups/affine_gps/all.py +1 -0
  266. sage/groups/affine_gps/catalog.py +17 -0
  267. sage/groups/affine_gps/euclidean_group.py +246 -0
  268. sage/groups/affine_gps/group_element.py +562 -0
  269. sage/groups/all__sagemath_modules.py +12 -0
  270. sage/groups/galois_group.py +479 -0
  271. sage/groups/matrix_gps/all.py +4 -0
  272. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  273. sage/groups/matrix_gps/catalog.py +26 -0
  274. sage/groups/matrix_gps/coxeter_group.py +927 -0
  275. sage/groups/matrix_gps/finitely_generated.py +487 -0
  276. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-gnu.so +0 -0
  277. sage/groups/matrix_gps/group_element.pxd +11 -0
  278. sage/groups/matrix_gps/group_element.pyx +431 -0
  279. sage/groups/matrix_gps/linear.py +440 -0
  280. sage/groups/matrix_gps/matrix_group.py +617 -0
  281. sage/groups/matrix_gps/named_group.py +296 -0
  282. sage/groups/matrix_gps/orthogonal.py +544 -0
  283. sage/groups/matrix_gps/symplectic.py +251 -0
  284. sage/groups/matrix_gps/unitary.py +436 -0
  285. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  286. sage/groups/misc_gps/argument_groups.py +1905 -0
  287. sage/groups/misc_gps/imaginary_groups.py +479 -0
  288. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  289. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-gnu.so +0 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  293. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-gnu.so +0 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  296. sage/homology/algebraic_topological_model.py +595 -0
  297. sage/homology/all.py +2 -0
  298. sage/homology/all__sagemath_modules.py +8 -0
  299. sage/homology/chain_complex.py +2148 -0
  300. sage/homology/chain_complex_homspace.py +165 -0
  301. sage/homology/chain_complex_morphism.py +629 -0
  302. sage/homology/chain_homotopy.py +604 -0
  303. sage/homology/chains.py +653 -0
  304. sage/homology/free_resolution.py +923 -0
  305. sage/homology/graded_resolution.py +567 -0
  306. sage/homology/hochschild_complex.py +756 -0
  307. sage/homology/homology_group.py +188 -0
  308. sage/homology/homology_morphism.py +422 -0
  309. sage/homology/homology_vector_space_with_basis.py +1454 -0
  310. sage/homology/koszul_complex.py +169 -0
  311. sage/homology/matrix_utils.py +205 -0
  312. sage/libs/all__sagemath_modules.py +1 -0
  313. sage/libs/gsl/__init__.py +1 -0
  314. sage/libs/gsl/airy.pxd +56 -0
  315. sage/libs/gsl/all.pxd +66 -0
  316. sage/libs/gsl/array.cpython-314-x86_64-linux-gnu.so +0 -0
  317. sage/libs/gsl/array.pxd +5 -0
  318. sage/libs/gsl/array.pyx +102 -0
  319. sage/libs/gsl/bessel.pxd +208 -0
  320. sage/libs/gsl/blas.pxd +116 -0
  321. sage/libs/gsl/blas_types.pxd +34 -0
  322. sage/libs/gsl/block.pxd +52 -0
  323. sage/libs/gsl/chebyshev.pxd +37 -0
  324. sage/libs/gsl/clausen.pxd +12 -0
  325. sage/libs/gsl/combination.pxd +47 -0
  326. sage/libs/gsl/complex.pxd +151 -0
  327. sage/libs/gsl/coulomb.pxd +30 -0
  328. sage/libs/gsl/coupling.pxd +21 -0
  329. sage/libs/gsl/dawson.pxd +12 -0
  330. sage/libs/gsl/debye.pxd +24 -0
  331. sage/libs/gsl/dilog.pxd +14 -0
  332. sage/libs/gsl/eigen.pxd +46 -0
  333. sage/libs/gsl/elementary.pxd +12 -0
  334. sage/libs/gsl/ellint.pxd +48 -0
  335. sage/libs/gsl/elljac.pxd +8 -0
  336. sage/libs/gsl/erf.pxd +32 -0
  337. sage/libs/gsl/errno.pxd +26 -0
  338. sage/libs/gsl/exp.pxd +44 -0
  339. sage/libs/gsl/expint.pxd +44 -0
  340. sage/libs/gsl/fermi_dirac.pxd +44 -0
  341. sage/libs/gsl/fft.pxd +121 -0
  342. sage/libs/gsl/fit.pxd +50 -0
  343. sage/libs/gsl/gamma.pxd +94 -0
  344. sage/libs/gsl/gegenbauer.pxd +26 -0
  345. sage/libs/gsl/histogram.pxd +176 -0
  346. sage/libs/gsl/hyperg.pxd +52 -0
  347. sage/libs/gsl/integration.pxd +69 -0
  348. sage/libs/gsl/interp.pxd +109 -0
  349. sage/libs/gsl/laguerre.pxd +24 -0
  350. sage/libs/gsl/lambert.pxd +16 -0
  351. sage/libs/gsl/legendre.pxd +90 -0
  352. sage/libs/gsl/linalg.pxd +185 -0
  353. sage/libs/gsl/log.pxd +26 -0
  354. sage/libs/gsl/math.pxd +43 -0
  355. sage/libs/gsl/matrix.pxd +143 -0
  356. sage/libs/gsl/matrix_complex.pxd +130 -0
  357. sage/libs/gsl/min.pxd +67 -0
  358. sage/libs/gsl/monte.pxd +56 -0
  359. sage/libs/gsl/ntuple.pxd +32 -0
  360. sage/libs/gsl/odeiv.pxd +70 -0
  361. sage/libs/gsl/permutation.pxd +78 -0
  362. sage/libs/gsl/poly.pxd +40 -0
  363. sage/libs/gsl/pow_int.pxd +12 -0
  364. sage/libs/gsl/psi.pxd +28 -0
  365. sage/libs/gsl/qrng.pxd +29 -0
  366. sage/libs/gsl/random.pxd +257 -0
  367. sage/libs/gsl/rng.pxd +100 -0
  368. sage/libs/gsl/roots.pxd +72 -0
  369. sage/libs/gsl/sort.pxd +36 -0
  370. sage/libs/gsl/statistics.pxd +59 -0
  371. sage/libs/gsl/sum.pxd +55 -0
  372. sage/libs/gsl/synchrotron.pxd +16 -0
  373. sage/libs/gsl/transport.pxd +24 -0
  374. sage/libs/gsl/trig.pxd +58 -0
  375. sage/libs/gsl/types.pxd +137 -0
  376. sage/libs/gsl/vector.pxd +101 -0
  377. sage/libs/gsl/vector_complex.pxd +83 -0
  378. sage/libs/gsl/wavelet.pxd +49 -0
  379. sage/libs/gsl/zeta.pxd +28 -0
  380. sage/libs/mpc/__init__.pxd +114 -0
  381. sage/libs/mpc/types.pxd +28 -0
  382. sage/libs/mpfr/__init__.pxd +299 -0
  383. sage/libs/mpfr/types.pxd +26 -0
  384. sage/libs/mpmath/__init__.py +1 -0
  385. sage/libs/mpmath/all.py +27 -0
  386. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  387. sage/libs/mpmath/utils.cpython-314-x86_64-linux-gnu.so +0 -0
  388. sage/libs/mpmath/utils.pxd +4 -0
  389. sage/libs/mpmath/utils.pyx +319 -0
  390. sage/matrix/action.cpython-314-x86_64-linux-gnu.so +0 -0
  391. sage/matrix/action.pxd +26 -0
  392. sage/matrix/action.pyx +596 -0
  393. sage/matrix/all.py +9 -0
  394. sage/matrix/args.cpython-314-x86_64-linux-gnu.so +0 -0
  395. sage/matrix/args.pxd +144 -0
  396. sage/matrix/args.pyx +1668 -0
  397. sage/matrix/benchmark.py +1258 -0
  398. sage/matrix/berlekamp_massey.py +95 -0
  399. sage/matrix/compute_J_ideal.py +926 -0
  400. sage/matrix/constructor.cpython-314-x86_64-linux-gnu.so +0 -0
  401. sage/matrix/constructor.pyx +750 -0
  402. sage/matrix/docs.py +430 -0
  403. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  404. sage/matrix/echelon_matrix.pyx +155 -0
  405. sage/matrix/matrix.pxd +2 -0
  406. sage/matrix/matrix0.cpython-314-x86_64-linux-gnu.so +0 -0
  407. sage/matrix/matrix0.pxd +68 -0
  408. sage/matrix/matrix0.pyx +6324 -0
  409. sage/matrix/matrix1.cpython-314-x86_64-linux-gnu.so +0 -0
  410. sage/matrix/matrix1.pxd +8 -0
  411. sage/matrix/matrix1.pyx +2851 -0
  412. sage/matrix/matrix2.cpython-314-x86_64-linux-gnu.so +0 -0
  413. sage/matrix/matrix2.pxd +25 -0
  414. sage/matrix/matrix2.pyx +20181 -0
  415. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-gnu.so +0 -0
  416. sage/matrix/matrix_cdv.pxd +4 -0
  417. sage/matrix/matrix_cdv.pyx +93 -0
  418. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  419. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  420. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  421. sage/matrix/matrix_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  422. sage/matrix/matrix_dense.pxd +5 -0
  423. sage/matrix/matrix_dense.pyx +343 -0
  424. sage/matrix/matrix_domain_dense.pxd +5 -0
  425. sage/matrix/matrix_domain_sparse.pxd +5 -0
  426. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  427. sage/matrix/matrix_double_dense.pxd +7 -0
  428. sage/matrix/matrix_double_dense.pyx +3906 -0
  429. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  430. sage/matrix/matrix_double_sparse.pxd +6 -0
  431. sage/matrix/matrix_double_sparse.pyx +248 -0
  432. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  433. sage/matrix/matrix_generic_dense.pxd +7 -0
  434. sage/matrix/matrix_generic_dense.pyx +354 -0
  435. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  436. sage/matrix/matrix_generic_sparse.pxd +7 -0
  437. sage/matrix/matrix_generic_sparse.pyx +461 -0
  438. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  441. sage/matrix/matrix_misc.py +313 -0
  442. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  443. sage/matrix/matrix_numpy_dense.pxd +14 -0
  444. sage/matrix/matrix_numpy_dense.pyx +450 -0
  445. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  446. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  447. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  448. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  449. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  450. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  451. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  452. sage/matrix/matrix_real_double_dense.pxd +7 -0
  453. sage/matrix/matrix_real_double_dense.pyx +122 -0
  454. sage/matrix/matrix_space.py +2848 -0
  455. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  456. sage/matrix/matrix_sparse.pxd +5 -0
  457. sage/matrix/matrix_sparse.pyx +1222 -0
  458. sage/matrix/matrix_window.cpython-314-x86_64-linux-gnu.so +0 -0
  459. sage/matrix/matrix_window.pxd +37 -0
  460. sage/matrix/matrix_window.pyx +242 -0
  461. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  462. sage/matrix/misc_mpfr.pyx +80 -0
  463. sage/matrix/operation_table.py +1182 -0
  464. sage/matrix/special.py +3666 -0
  465. sage/matrix/strassen.cpython-314-x86_64-linux-gnu.so +0 -0
  466. sage/matrix/strassen.pyx +851 -0
  467. sage/matrix/symplectic_basis.py +541 -0
  468. sage/matrix/template.pxd +6 -0
  469. sage/matrix/tests.py +71 -0
  470. sage/matroids/advanced.py +77 -0
  471. sage/matroids/all.py +13 -0
  472. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  473. sage/matroids/basis_exchange_matroid.pxd +96 -0
  474. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  475. sage/matroids/basis_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  476. sage/matroids/basis_matroid.pxd +45 -0
  477. sage/matroids/basis_matroid.pyx +1217 -0
  478. sage/matroids/catalog.py +44 -0
  479. sage/matroids/chow_ring.py +473 -0
  480. sage/matroids/chow_ring_ideal.py +849 -0
  481. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  482. sage/matroids/circuit_closures_matroid.pxd +16 -0
  483. sage/matroids/circuit_closures_matroid.pyx +559 -0
  484. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  485. sage/matroids/circuits_matroid.pxd +38 -0
  486. sage/matroids/circuits_matroid.pyx +947 -0
  487. sage/matroids/constructor.py +1086 -0
  488. sage/matroids/database_collections.py +365 -0
  489. sage/matroids/database_matroids.py +5338 -0
  490. sage/matroids/dual_matroid.py +583 -0
  491. sage/matroids/extension.cpython-314-x86_64-linux-gnu.so +0 -0
  492. sage/matroids/extension.pxd +34 -0
  493. sage/matroids/extension.pyx +519 -0
  494. sage/matroids/flats_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  495. sage/matroids/flats_matroid.pxd +28 -0
  496. sage/matroids/flats_matroid.pyx +715 -0
  497. sage/matroids/gammoid.py +600 -0
  498. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  499. sage/matroids/graphic_matroid.pxd +39 -0
  500. sage/matroids/graphic_matroid.pyx +2024 -0
  501. sage/matroids/lean_matrix.cpython-314-x86_64-linux-gnu.so +0 -0
  502. sage/matroids/lean_matrix.pxd +126 -0
  503. sage/matroids/lean_matrix.pyx +3667 -0
  504. sage/matroids/linear_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  505. sage/matroids/linear_matroid.pxd +180 -0
  506. sage/matroids/linear_matroid.pyx +6649 -0
  507. sage/matroids/matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  508. sage/matroids/matroid.pxd +243 -0
  509. sage/matroids/matroid.pyx +8759 -0
  510. sage/matroids/matroids_catalog.py +190 -0
  511. sage/matroids/matroids_plot_helpers.py +890 -0
  512. sage/matroids/minor_matroid.py +480 -0
  513. sage/matroids/minorfix.h +9 -0
  514. sage/matroids/named_matroids.py +5 -0
  515. sage/matroids/rank_matroid.py +268 -0
  516. sage/matroids/set_system.cpython-314-x86_64-linux-gnu.so +0 -0
  517. sage/matroids/set_system.pxd +38 -0
  518. sage/matroids/set_system.pyx +800 -0
  519. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  520. sage/matroids/transversal_matroid.pxd +14 -0
  521. sage/matroids/transversal_matroid.pyx +893 -0
  522. sage/matroids/union_matroid.cpython-314-x86_64-linux-gnu.so +0 -0
  523. sage/matroids/union_matroid.pxd +20 -0
  524. sage/matroids/union_matroid.pyx +331 -0
  525. sage/matroids/unpickling.cpython-314-x86_64-linux-gnu.so +0 -0
  526. sage/matroids/unpickling.pyx +843 -0
  527. sage/matroids/utilities.py +809 -0
  528. sage/misc/all__sagemath_modules.py +20 -0
  529. sage/misc/c3.cpython-314-x86_64-linux-gnu.so +0 -0
  530. sage/misc/c3.pyx +238 -0
  531. sage/misc/compat.py +87 -0
  532. sage/misc/element_with_label.py +173 -0
  533. sage/misc/func_persist.py +79 -0
  534. sage/misc/pickle_old.cpython-314-x86_64-linux-gnu.so +0 -0
  535. sage/misc/pickle_old.pyx +19 -0
  536. sage/misc/proof.py +7 -0
  537. sage/misc/replace_dot_all.py +472 -0
  538. sage/misc/sagedoc_conf.py +168 -0
  539. sage/misc/sphinxify.py +167 -0
  540. sage/misc/test_class_pickling.py +85 -0
  541. sage/modules/all.py +42 -0
  542. sage/modules/complex_double_vector.py +25 -0
  543. sage/modules/diamond_cutting.py +380 -0
  544. sage/modules/fg_pid/all.py +1 -0
  545. sage/modules/fg_pid/fgp_element.py +456 -0
  546. sage/modules/fg_pid/fgp_module.py +2091 -0
  547. sage/modules/fg_pid/fgp_morphism.py +550 -0
  548. sage/modules/filtered_vector_space.py +1271 -0
  549. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-gnu.so +0 -0
  550. sage/modules/finite_submodule_iter.pxd +27 -0
  551. sage/modules/finite_submodule_iter.pyx +452 -0
  552. sage/modules/fp_graded/all.py +1 -0
  553. sage/modules/fp_graded/element.py +346 -0
  554. sage/modules/fp_graded/free_element.py +298 -0
  555. sage/modules/fp_graded/free_homspace.py +53 -0
  556. sage/modules/fp_graded/free_module.py +1060 -0
  557. sage/modules/fp_graded/free_morphism.py +217 -0
  558. sage/modules/fp_graded/homspace.py +563 -0
  559. sage/modules/fp_graded/module.py +1340 -0
  560. sage/modules/fp_graded/morphism.py +1990 -0
  561. sage/modules/fp_graded/steenrod/all.py +1 -0
  562. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  563. sage/modules/fp_graded/steenrod/module.py +477 -0
  564. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  565. sage/modules/fp_graded/steenrod/profile.py +241 -0
  566. sage/modules/free_module.py +8447 -0
  567. sage/modules/free_module_element.cpython-314-x86_64-linux-gnu.so +0 -0
  568. sage/modules/free_module_element.pxd +22 -0
  569. sage/modules/free_module_element.pyx +5445 -0
  570. sage/modules/free_module_homspace.py +369 -0
  571. sage/modules/free_module_integer.py +896 -0
  572. sage/modules/free_module_morphism.py +823 -0
  573. sage/modules/free_module_pseudohomspace.py +352 -0
  574. sage/modules/free_module_pseudomorphism.py +578 -0
  575. sage/modules/free_quadratic_module.py +1706 -0
  576. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  577. sage/modules/matrix_morphism.py +1745 -0
  578. sage/modules/misc.py +103 -0
  579. sage/modules/module_functors.py +192 -0
  580. sage/modules/multi_filtered_vector_space.py +719 -0
  581. sage/modules/ore_module.py +2208 -0
  582. sage/modules/ore_module_element.py +178 -0
  583. sage/modules/ore_module_homspace.py +147 -0
  584. sage/modules/ore_module_morphism.py +968 -0
  585. sage/modules/quotient_module.py +699 -0
  586. sage/modules/real_double_vector.py +22 -0
  587. sage/modules/submodule.py +255 -0
  588. sage/modules/tensor_operations.py +567 -0
  589. sage/modules/torsion_quadratic_module.py +1352 -0
  590. sage/modules/tutorial_free_modules.py +248 -0
  591. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  592. sage/modules/vector_complex_double_dense.pxd +6 -0
  593. sage/modules/vector_complex_double_dense.pyx +117 -0
  594. sage/modules/vector_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  595. sage/modules/vector_double_dense.pxd +6 -0
  596. sage/modules/vector_double_dense.pyx +604 -0
  597. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  598. sage/modules/vector_integer_dense.pxd +15 -0
  599. sage/modules/vector_integer_dense.pyx +361 -0
  600. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  601. sage/modules/vector_integer_sparse.pxd +29 -0
  602. sage/modules/vector_integer_sparse.pyx +406 -0
  603. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  604. sage/modules/vector_modn_dense.pxd +12 -0
  605. sage/modules/vector_modn_dense.pyx +394 -0
  606. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  607. sage/modules/vector_modn_sparse.pxd +21 -0
  608. sage/modules/vector_modn_sparse.pyx +298 -0
  609. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  610. sage/modules/vector_numpy_dense.pxd +15 -0
  611. sage/modules/vector_numpy_dense.pyx +304 -0
  612. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  613. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  614. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  615. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  616. sage/modules/vector_rational_dense.pxd +15 -0
  617. sage/modules/vector_rational_dense.pyx +387 -0
  618. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-gnu.so +0 -0
  619. sage/modules/vector_rational_sparse.pxd +30 -0
  620. sage/modules/vector_rational_sparse.pyx +413 -0
  621. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  622. sage/modules/vector_real_double_dense.pxd +6 -0
  623. sage/modules/vector_real_double_dense.pyx +126 -0
  624. sage/modules/vector_space_homspace.py +430 -0
  625. sage/modules/vector_space_morphism.py +989 -0
  626. sage/modules/with_basis/all.py +15 -0
  627. sage/modules/with_basis/cell_module.py +494 -0
  628. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-gnu.so +0 -0
  629. sage/modules/with_basis/indexed_element.pxd +13 -0
  630. sage/modules/with_basis/indexed_element.pyx +1058 -0
  631. sage/modules/with_basis/invariant.py +1075 -0
  632. sage/modules/with_basis/morphism.py +1636 -0
  633. sage/modules/with_basis/representation.py +2939 -0
  634. sage/modules/with_basis/subquotient.py +685 -0
  635. sage/numerical/all__sagemath_modules.py +6 -0
  636. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-gnu.so +0 -0
  637. sage/numerical/gauss_legendre.pyx +381 -0
  638. sage/numerical/optimize.py +910 -0
  639. sage/probability/all.py +10 -0
  640. sage/probability/probability_distribution.cpython-314-x86_64-linux-gnu.so +0 -0
  641. sage/probability/probability_distribution.pyx +1242 -0
  642. sage/probability/random_variable.py +411 -0
  643. sage/quadratic_forms/all.py +4 -0
  644. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  645. sage/quadratic_forms/binary_qf.py +2042 -0
  646. sage/quadratic_forms/bqf_class_group.py +748 -0
  647. sage/quadratic_forms/constructions.py +93 -0
  648. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-gnu.so +0 -0
  649. sage/quadratic_forms/count_local_2.pyx +365 -0
  650. sage/quadratic_forms/extras.py +195 -0
  651. sage/quadratic_forms/quadratic_form.py +1753 -0
  652. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  653. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  654. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-gnu.so +0 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  656. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  657. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  658. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  659. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  660. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  661. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  662. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  663. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  664. sage/quadratic_forms/random_quadraticform.py +209 -0
  665. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-gnu.so +0 -0
  666. sage/quadratic_forms/ternary.pyx +1154 -0
  667. sage/quadratic_forms/ternary_qf.py +2027 -0
  668. sage/rings/all__sagemath_modules.py +28 -0
  669. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  670. sage/rings/asymptotic/misc.py +1252 -0
  671. sage/rings/cc.py +4 -0
  672. sage/rings/cfinite_sequence.py +1306 -0
  673. sage/rings/complex_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  674. sage/rings/complex_conversion.pxd +8 -0
  675. sage/rings/complex_conversion.pyx +23 -0
  676. sage/rings/complex_double.cpython-314-x86_64-linux-gnu.so +0 -0
  677. sage/rings/complex_double.pxd +21 -0
  678. sage/rings/complex_double.pyx +2654 -0
  679. sage/rings/complex_mpc.cpython-314-x86_64-linux-gnu.so +0 -0
  680. sage/rings/complex_mpc.pxd +21 -0
  681. sage/rings/complex_mpc.pyx +2576 -0
  682. sage/rings/complex_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  683. sage/rings/complex_mpfr.pxd +18 -0
  684. sage/rings/complex_mpfr.pyx +3602 -0
  685. sage/rings/derivation.py +2334 -0
  686. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  687. sage/rings/finite_rings/maps_finite_field.py +191 -0
  688. sage/rings/function_field/all__sagemath_modules.py +8 -0
  689. sage/rings/function_field/derivations.py +102 -0
  690. sage/rings/function_field/derivations_rational.py +132 -0
  691. sage/rings/function_field/differential.py +853 -0
  692. sage/rings/function_field/divisor.py +1107 -0
  693. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  694. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  695. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  696. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  697. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  698. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  699. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  700. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-gnu.so +0 -0
  701. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  702. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-gnu.so +0 -0
  703. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  704. sage/rings/invariants/all.py +4 -0
  705. sage/rings/invariants/invariant_theory.py +4597 -0
  706. sage/rings/invariants/reconstruction.py +395 -0
  707. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  708. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  709. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-gnu.so +0 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  712. sage/rings/polynomial/ore_function_element.py +952 -0
  713. sage/rings/polynomial/ore_function_field.py +1028 -0
  714. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  715. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  716. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  717. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  718. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-gnu.so +0 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  720. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  721. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-gnu.so +0 -0
  722. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  723. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  724. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-gnu.so +0 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  727. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-gnu.so +0 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  730. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  731. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-gnu.so +0 -0
  732. sage/rings/real_double_element_gsl.pxd +8 -0
  733. sage/rings/real_double_element_gsl.pyx +794 -0
  734. sage/rings/real_field.py +58 -0
  735. sage/rings/real_mpfr.cpython-314-x86_64-linux-gnu.so +0 -0
  736. sage/rings/real_mpfr.pxd +29 -0
  737. sage/rings/real_mpfr.pyx +6122 -0
  738. sage/rings/ring_extension.cpython-314-x86_64-linux-gnu.so +0 -0
  739. sage/rings/ring_extension.pxd +42 -0
  740. sage/rings/ring_extension.pyx +2779 -0
  741. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-gnu.so +0 -0
  742. sage/rings/ring_extension_conversion.pxd +16 -0
  743. sage/rings/ring_extension_conversion.pyx +462 -0
  744. sage/rings/ring_extension_element.cpython-314-x86_64-linux-gnu.so +0 -0
  745. sage/rings/ring_extension_element.pxd +21 -0
  746. sage/rings/ring_extension_element.pyx +1635 -0
  747. sage/rings/ring_extension_homset.py +64 -0
  748. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-gnu.so +0 -0
  749. sage/rings/ring_extension_morphism.pxd +35 -0
  750. sage/rings/ring_extension_morphism.pyx +920 -0
  751. sage/schemes/all__sagemath_modules.py +1 -0
  752. sage/schemes/projective/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/coherent_sheaf.py +300 -0
  754. sage/schemes/projective/cohomology.py +510 -0
  755. sage/stats/all.py +15 -0
  756. sage/stats/basic_stats.py +489 -0
  757. sage/stats/distributions/all.py +7 -0
  758. sage/stats/distributions/catalog.py +34 -0
  759. sage/stats/distributions/dgs.h +50 -0
  760. sage/stats/distributions/dgs.pxd +111 -0
  761. sage/stats/distributions/dgs_bern.h +400 -0
  762. sage/stats/distributions/dgs_gauss.h +614 -0
  763. sage/stats/distributions/dgs_misc.h +104 -0
  764. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-gnu.so +0 -0
  765. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  767. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  768. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  769. sage/stats/hmm/all.py +15 -0
  770. sage/stats/hmm/chmm.cpython-314-x86_64-linux-gnu.so +0 -0
  771. sage/stats/hmm/chmm.pyx +1595 -0
  772. sage/stats/hmm/distributions.cpython-314-x86_64-linux-gnu.so +0 -0
  773. sage/stats/hmm/distributions.pxd +29 -0
  774. sage/stats/hmm/distributions.pyx +531 -0
  775. sage/stats/hmm/hmm.cpython-314-x86_64-linux-gnu.so +0 -0
  776. sage/stats/hmm/hmm.pxd +17 -0
  777. sage/stats/hmm/hmm.pyx +1388 -0
  778. sage/stats/hmm/util.cpython-314-x86_64-linux-gnu.so +0 -0
  779. sage/stats/hmm/util.pxd +7 -0
  780. sage/stats/hmm/util.pyx +165 -0
  781. sage/stats/intlist.cpython-314-x86_64-linux-gnu.so +0 -0
  782. sage/stats/intlist.pxd +14 -0
  783. sage/stats/intlist.pyx +588 -0
  784. sage/stats/r.py +49 -0
  785. sage/stats/time_series.cpython-314-x86_64-linux-gnu.so +0 -0
  786. sage/stats/time_series.pxd +6 -0
  787. sage/stats/time_series.pyx +2546 -0
  788. sage/tensor/all.py +2 -0
  789. sage/tensor/modules/all.py +8 -0
  790. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  791. sage/tensor/modules/comp.py +5598 -0
  792. sage/tensor/modules/ext_pow_free_module.py +824 -0
  793. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  794. sage/tensor/modules/format_utilities.py +333 -0
  795. sage/tensor/modules/free_module_alt_form.py +858 -0
  796. sage/tensor/modules/free_module_automorphism.py +1207 -0
  797. sage/tensor/modules/free_module_basis.py +1074 -0
  798. sage/tensor/modules/free_module_element.py +284 -0
  799. sage/tensor/modules/free_module_homset.py +652 -0
  800. sage/tensor/modules/free_module_linear_group.py +564 -0
  801. sage/tensor/modules/free_module_morphism.py +1581 -0
  802. sage/tensor/modules/free_module_tensor.py +3289 -0
  803. sage/tensor/modules/reflexive_module.py +386 -0
  804. sage/tensor/modules/tensor_free_module.py +780 -0
  805. sage/tensor/modules/tensor_free_submodule.py +538 -0
  806. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  807. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1075 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ # sage.doctest: needs sage.groups
3
+ r"""
4
+ Invariant modules
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Copyright (C) 2021 Trevor K. Karn <karnx018 at umn.edu>
9
+ # 2021 Travis Scrimshaw
10
+ # 2022 Matthias Koeppe
11
+ #
12
+ # This program is free software: you can redistribute it and/or modify
13
+ # it under the terms of the GNU General Public License as published by
14
+ # the Free Software Foundation, either version 2 of the License, or
15
+ # (at your option) any later version.
16
+ # https://www.gnu.org/licenses/
17
+ # ****************************************************************************
18
+
19
+ import operator
20
+ from sage.modules.with_basis.subquotient import SubmoduleWithBasis
21
+ from sage.modules.with_basis.representation import Representation
22
+ from sage.categories.finitely_generated_semigroups import FinitelyGeneratedSemigroups
23
+ from sage.categories.finite_dimensional_modules_with_basis import FiniteDimensionalModulesWithBasis
24
+ from sage.sets.family import Family
25
+ from sage.matrix.constructor import Matrix
26
+
27
+
28
+ class FiniteDimensionalInvariantModule(SubmoduleWithBasis):
29
+ r"""
30
+ The invariant submodule under a semigroup action.
31
+
32
+ When a semigroup `S` acts on a module `M`, the invariant module is the
33
+ set of elements `m \in M` such that `s \cdot m = m` for all `s \in S`:
34
+
35
+ .. MATH::
36
+
37
+ M^S := \{m \in M : s \cdot m = m,\, \forall s \in S \}.
38
+
39
+ INPUT:
40
+
41
+ - ``M`` -- a module in the category of
42
+ :class:`~sage.categories.finite_dimensional_modules_with_basis.FiniteDimensionalModulesWithBasis`
43
+
44
+ - ``S`` -- a semigroup in the category of
45
+ :class:`~sage.categories.finitely_generated_semigroups.FinitelyGeneratedSemigroups`
46
+
47
+ - ``action`` -- (default: ``operator.mul``) the action of ``S`` on ``M``
48
+
49
+ - ``side`` -- (default: ``'left'``) the side on which ``S`` acts
50
+
51
+ EXAMPLES:
52
+
53
+ First, we create the invariant defined by the cyclic group action on the
54
+ free module with basis `\{1,2,3\}`::
55
+
56
+ sage: G = CyclicPermutationGroup(3)
57
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M')
58
+ sage: action = lambda g, m: M.monomial(g(m)) # cyclically permute coordinates
59
+
60
+ In order to give the module an action of ``G``, we create a
61
+ :class:`~sage.modules.with_basis.representation.Representation`::
62
+
63
+ sage: from sage.modules.with_basis.representation import Representation
64
+ sage: R = Representation(G, M, action)
65
+ sage: I = R.invariant_module()
66
+
67
+ Then we can lift the basis from the invariant to the original module::
68
+
69
+ sage: [I.lift(b) for b in I.basis()]
70
+ [M[1] + M[2] + M[3]]
71
+
72
+ The we could also have the action be a right-action, instead of the
73
+ default left-action::
74
+
75
+ sage: def rt_action(g, m): return M.monomial(g(m)) # cyclically permute coordinates
76
+ sage: R = Representation(G, M, rt_action, side='right') # same as last but on right
77
+ sage: g = G.an_element(); g
78
+ (1,2,3)
79
+ sage: r = R.an_element(); r
80
+ 2*M[1] + 2*M[2] + 3*M[3]
81
+ sage: R.side()
82
+ 'right'
83
+
84
+ So now we can see that multiplication with ``g`` on the right sends
85
+ ``M[1]`` to ``M[2]`` and so on::
86
+
87
+ sage: r * g
88
+ 3*M[1] + 2*M[2] + 2*M[3]
89
+ sage: I = R.invariant_module()
90
+ sage: [I.lift(b) for b in I.basis()]
91
+ [M[1] + M[2] + M[3]]
92
+
93
+ Now we will take the regular representation of the symmetric group on
94
+ three elements to be the module, and compute its invariant submodule::
95
+
96
+ sage: G = SymmetricGroup(3)
97
+ sage: R = G.regular_representation(QQ)
98
+ sage: I = R.invariant_module()
99
+ sage: [I.lift(b).to_vector() for b in I.basis()]
100
+ [(1, 1, 1, 1, 1, 1)]
101
+
102
+ We can also check the scalar multiplication by elements of the base ring
103
+ (for this example, the rational field)::
104
+
105
+ sage: [I.lift(3*b).to_vector() for b in I.basis()]
106
+ [(3, 3, 3, 3, 3, 3)]
107
+
108
+ A more subtle example is the invariant submodule of a skew-commutative
109
+ module, for example the exterior algebra `E[x_0,x_1,x_2]` generated
110
+ by three elements::
111
+
112
+ sage: G = CyclicPermutationGroup(3)
113
+ sage: M = algebras.Exterior(QQ, 'x', 3)
114
+ sage: def cyclic_ext_action(g, m):
115
+ ....: # cyclically permute generators
116
+ ....: return M.prod([M.monomial(FrozenBitset([g(j+1)-1])) for j in m])
117
+
118
+ If you care about being able to exploit the algebra structure of the
119
+ exterior algebra (i.e. if you want to multiply elements together), you
120
+ should make sure the representation knows it is also an algebra with
121
+ the semigroup action being by algebra endomorphisms::
122
+
123
+ sage: cat = Algebras(QQ).WithBasis().FiniteDimensional()
124
+ sage: R = Representation(G, M, cyclic_ext_action, category=cat)
125
+ sage: I = R.invariant_module()
126
+
127
+ We can express the basis in the ambient algebra (`E[x_0,x_1,x_2]`)::
128
+
129
+ sage: [I.lift(b) for b in I.basis()]
130
+ [1, x0 + x1 + x2, x0*x1 - x0*x2 + x1*x2, x0*x1*x2]
131
+
132
+ or we can express the basis intrinsicallly to the invariant ``I``::
133
+
134
+ sage: B = I.basis()
135
+ sage: m = 3*B[0] + 2*B[1] + 7*B[3]
136
+
137
+ This lifts to the exterior algebra::
138
+
139
+ sage: I.lift(m)
140
+ 3 + 2*x0 + 7*x0*x1*x2 + 2*x1 + 2*x2
141
+
142
+ We can also check using the invariant element ``m`` that arithmetic works::
143
+
144
+ sage: m^2
145
+ 9*B[0] + 12*B[1] + 42*B[3]
146
+ sage: m+m
147
+ 6*B[0] + 4*B[1] + 14*B[3]
148
+
149
+ To see the actual elements expressed in the exterior algebra, we lift them
150
+ again::
151
+
152
+ sage: I.lift(m+m)
153
+ 6 + 4*x0 + 14*x0*x1*x2 + 4*x1 + 4*x2
154
+ sage: 7*m
155
+ 21*B[0] + 14*B[1] + 49*B[3]
156
+ sage: I.lift(7*m)
157
+ 21 + 14*x0 + 49*x0*x1*x2 + 14*x1 + 14*x2
158
+
159
+ The classic example of an invariant module is the module of symmetric
160
+ functions, which is the invariant module of polynomials whose variables
161
+ are acted upon by permutation. We can create a module isomorphic to the
162
+ homogeneous component of a a polynomial ring in `n` variable of a fixed
163
+ degree `d` by looking at weak compositions of `d` of length `n`, which
164
+ we consider as the exponent vector. For example, `x^2yz \in \QQ[x,y,z]`
165
+ would have the exponent vector `(2,1,1)`. The vector `(2,1,1)` is a
166
+ weak composition of `4`, with length `3`, and so we can think of it as
167
+ being in the degree-`4` homogeneous component of a polynomial ring
168
+ in three variables::
169
+
170
+ sage: C = IntegerVectors(4, length=3, min_part=0) # representing degree-4 monomials
171
+ sage: M = CombinatorialFreeModule(QQ, C) # isomorphic to deg-4 homog. polynomials
172
+ sage: G = SymmetricGroup(3)
173
+ sage: def perm_action(g, x): return M.monomial(C(g(list(x))))
174
+ sage: perm_action(G((1,2,3)), C([4,3,2]))
175
+ B[[3, 2, 4]]
176
+ sage: R = Representation(G, M, perm_action)
177
+ sage: I = R.invariant_module()
178
+ sage: [I.lift(b) for b in I.basis()]
179
+ [B[[0, 0, 4]] + B[[0, 4, 0]] + B[[4, 0, 0]],
180
+ B[[0, 1, 3]] + B[[0, 3, 1]] + B[[1, 0, 3]]
181
+ + B[[1, 3, 0]] + B[[3, 0, 1]] + B[[3, 1, 0]],
182
+ B[[0, 2, 2]] + B[[2, 0, 2]] + B[[2, 2, 0]],
183
+ B[[1, 1, 2]] + B[[1, 2, 1]] + B[[2, 1, 1]]]
184
+
185
+ These are the monomial symmetric functions, which are a well-known
186
+ basis for the symmetric functions. For comparison::
187
+
188
+ sage: Sym = SymmetricFunctions(QQ)
189
+ sage: m = Sym.monomial()
190
+ sage: [m[mu].expand(3) for mu in Partitions(4)]
191
+ [x0^4 + x1^4 + x2^4,
192
+ x0^3*x1 + x0*x1^3 + x0^3*x2 + x1^3*x2 + x0*x2^3 + x1*x2^3,
193
+ x0^2*x1^2 + x0^2*x2^2 + x1^2*x2^2,
194
+ x0^2*x1*x2 + x0*x1^2*x2 + x0*x1*x2^2,
195
+ 0]
196
+
197
+ .. NOTE::
198
+
199
+ The current implementation works when `S` is a finitely-generated
200
+ semigroup, and when `M` is a finite-dimensional free module with
201
+ a distinguished basis.
202
+
203
+ .. TODO::
204
+
205
+ Extend this to have multiple actions, including actions on both sides.
206
+
207
+ .. TODO::
208
+
209
+ Extend when `M` does not have a basis and `S` is a permutation
210
+ group using:
211
+
212
+ - :arxiv:`0812.3082`
213
+ - https://www.dmtcs.org/pdfpapers/dmAA0123.pdf
214
+ """
215
+ def __init__(self, M, S, action=operator.mul, side='left', *args, **kwargs):
216
+ """
217
+ Initialize ``self``.
218
+
219
+ EXAMPLES::
220
+
221
+ sage: G = CyclicPermutationGroup(3)
222
+ sage: R = G.regular_representation()
223
+ sage: I = R.invariant_module()
224
+ sage: TestSuite(I).run()
225
+
226
+ TESTS::
227
+
228
+ sage: G = GroupExp()(QQ) # a group that is not finitely generated
229
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3])
230
+ sage: def on_basis(g, m): return M.monomial(m) # trivial rep'n
231
+ sage: from sage.modules.with_basis.representation import Representation
232
+ sage: R = Representation(G, M, on_basis)
233
+ sage: R.invariant_module()
234
+ Traceback (most recent call last):
235
+ ...
236
+ ValueError: Multiplicative form of Rational Field is not finitely generated
237
+ """
238
+ if S not in FinitelyGeneratedSemigroups():
239
+ raise ValueError(f"{S} is not finitely generated")
240
+ if M not in FiniteDimensionalModulesWithBasis:
241
+ raise ValueError(f"{M} is not a finite dimensional module with a distinguished basis")
242
+
243
+ if side == "left":
244
+ def _invariant_map(g, x):
245
+ return action(g, x) - x
246
+ elif side == "right":
247
+ def _invariant_map(g, x):
248
+ return action(x, g) - x
249
+ else:
250
+ raise ValueError("side must either be 'left' or 'right'")
251
+
252
+ self._side = side
253
+ self._action = action
254
+ self._semigroup = S
255
+
256
+ category = kwargs.pop("category", M.category().Subobjects())
257
+
258
+ # Give the intersection of kernels of the map `s*x-x` to determine when
259
+ # `s*x = x` for all generators `s` of `S`
260
+ basis = M.annihilator_basis(S.gens(), action=_invariant_map, side='left')
261
+
262
+ super().__init__(Family(basis),
263
+ support_order=M._compute_support_order(basis),
264
+ ambient=M,
265
+ unitriangular=False,
266
+ category=category,
267
+ *args, **kwargs)
268
+
269
+ def construction(self):
270
+ r"""
271
+ Return the functorial construction of ``self``.
272
+
273
+ EXAMPLES::
274
+
275
+ sage: G = CyclicPermutationGroup(3)
276
+ sage: R = G.regular_representation(); R
277
+ Left Regular Representation of Cyclic group of order 3 as a permutation group over Integer Ring
278
+ sage: I = R.invariant_module()
279
+ sage: I.construction()
280
+ (EquivariantSubobjectConstructionFunctor,
281
+ Left Regular Representation of Cyclic group of order 3 as a permutation group over Integer Ring)
282
+ """
283
+ from sage.categories.pushout import EquivariantSubobjectConstructionFunctor
284
+ return (EquivariantSubobjectConstructionFunctor(self._semigroup,
285
+ self._action,
286
+ self._side),
287
+ self.ambient())
288
+
289
+ def _repr_(self):
290
+ r"""
291
+ Return a string representation of ``self``.
292
+
293
+ EXAMPLES::
294
+
295
+ sage: G = CyclicPermutationGroup(3)
296
+ sage: R = G.trivial_representation()
297
+ sage: R.invariant_module()
298
+ (Cyclic group of order 3 as a permutation group)-invariant submodule of
299
+ Trivial representation of Cyclic group of order 3 as a permutation group over Integer Ring
300
+
301
+ sage: G = CyclicPermutationGroup(3)
302
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M')
303
+ sage: action = lambda g, m: M.monomial(g(m)) # cyclically permute coordinates
304
+ sage: M.invariant_module(G, action_on_basis=action)
305
+ (Cyclic group of order 3 as a permutation group)-invariant submodule of
306
+ Free module generated by {1, 2, 3} over Rational Field
307
+ """
308
+ M = self._ambient
309
+ if isinstance(self._ambient, Representation):
310
+ M = M._module
311
+ return f"({self._semigroup})-invariant submodule of {M}"
312
+
313
+ def _latex_(self) -> str:
314
+ r"""
315
+ Return a latex representation of ``self``.
316
+
317
+ EXAMPLES::
318
+
319
+ sage: G = CyclicPermutationGroup(3)
320
+ sage: R = G.algebra(QQ)
321
+ sage: latex(R.invariant_module(G))
322
+ \left( \Bold{Q}[\langle (1,2,3) \rangle] \right)^{\langle (1,2,3) \rangle}
323
+ """
324
+ M = self._ambient
325
+ if isinstance(self._ambient, Representation):
326
+ M = M._module
327
+ from sage.misc.latex import latex
328
+ return "\\left( {} \\right)^{{{}}}".format(latex(M), latex(self._semigroup))
329
+
330
+ def _test_invariant(self, **options):
331
+ """
332
+ Check (on some elements) that ``self`` is invariant.
333
+
334
+ EXAMPLES::
335
+
336
+ sage: G = SymmetricGroup(3)
337
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M')
338
+ sage: def action(g, x): return M.monomial(g(x))
339
+ sage: I = M.invariant_module(G, action_on_basis=action)
340
+ sage: I._test_invariant()
341
+
342
+ sage: G = SymmetricGroup(10)
343
+ sage: M = CombinatorialFreeModule(QQ, list(range(1,11)), prefix='M')
344
+ sage: def action(g, x): return M.monomial(g(x))
345
+ sage: I = M.invariant_module(G, action_on_basis=action)
346
+ sage: I._test_invariant(max_runs=10)
347
+ """
348
+ tester = self._tester(**options)
349
+ X = tester.some_elements()
350
+ L = []
351
+ max_len = tester._max_runs
352
+
353
+ # FIXME: This is max_len * dim number of runs!!!
354
+ for i, x in enumerate(self._semigroup):
355
+ L.append(x)
356
+ if i >= max_len:
357
+ break
358
+
359
+ for x in L:
360
+ for elt in X:
361
+ lifted = self.lift(elt)
362
+ if self._side == 'left':
363
+ tester.assertEqual(self._action(x, lifted), lifted)
364
+ else:
365
+ tester.assertEqual(self._action(lifted, x), lifted)
366
+
367
+ def semigroup(self):
368
+ r"""
369
+ Return the semigroup `S` whose action ``self`` is invariant under.
370
+
371
+ EXAMPLES::
372
+
373
+ sage: G = SymmetricGroup(3)
374
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M')
375
+ sage: def action(g, x): return M.monomial(g(x))
376
+ sage: I = M.invariant_module(G, action_on_basis=action)
377
+ sage: I.semigroup()
378
+ Symmetric group of order 3! as a permutation group
379
+ """
380
+ return self._semigroup
381
+
382
+ semigroup_representation = SubmoduleWithBasis.ambient
383
+
384
+ class Element(SubmoduleWithBasis.Element):
385
+ def _mul_(self, other):
386
+ r"""
387
+ Multiply ``self`` and ``other``.
388
+
389
+ EXAMPLES:
390
+
391
+ In general, there is not a well defined multiplication between
392
+ two elements of a given module, but there is a multiplication
393
+ with scalars::
394
+
395
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M');
396
+ sage: G = CyclicPermutationGroup(3); G.rename('G')
397
+ sage: g = G.an_element(); g
398
+ (1,2,3)
399
+ sage: from sage.modules.with_basis.representation import Representation
400
+ sage: R = Representation(G,M,lambda g,x:M.monomial(g(x))); R.rename('R')
401
+ sage: I = R.invariant_module()
402
+ sage: B = I.basis()
403
+ sage: [I.lift(b) for b in B]
404
+ [M[1] + M[2] + M[3]]
405
+ sage: v = B[0]
406
+ sage: v*v
407
+ Traceback (most recent call last):
408
+ ...
409
+ TypeError: unsupported operand parent(s) for *: 'R' and 'R'
410
+ sage: (1/2) * v
411
+ 1/2*B[0]
412
+ sage: v * (1/2)
413
+ 1/2*B[0]
414
+ sage: R.rename() # reset name
415
+
416
+ Sometimes, the module is also a ring. To ensure the multiplication
417
+ works as desired, we should be sure to pass the correct category to
418
+ the :class:`~sage.modules.with_basis.representation.Representation`.
419
+ In the following example, we use the exterior algebra over `\QQ`
420
+ with three generators, which is in the category of finite
421
+ dimensional `\QQ`-algebras with a basis::
422
+
423
+ sage: G = CyclicPermutationGroup(3); G.rename('G')
424
+ sage: M = algebras.Exterior(QQ, 'x', 3)
425
+ sage: def on_basis(g, m): return M.prod([M.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
426
+ sage: R = Representation(G, M, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional(), side='right')
427
+ sage: I = R.invariant_module(); I.rename('I')
428
+ sage: B = I.basis()
429
+ sage: v = B[0] + 2*B[1]; I.lift(v)
430
+ 1 + 2*x0 + 2*x1 + 2*x2
431
+ sage: w = B[2]; I.lift(w)
432
+ x0*x1 - x0*x2 + x1*x2
433
+ sage: v * w
434
+ B[2] + 6*B[3]
435
+ sage: I.lift(v*w)
436
+ x0*x1 + 6*x0*x1*x2 - x0*x2 + x1*x2
437
+ sage: w * v
438
+ B[2] + 6*B[3]
439
+ sage: (1/2) * v
440
+ 1/2*B[0] + B[1]
441
+ sage: w * (1/2)
442
+ 1/2*B[2]
443
+ sage: g = G((1,3,2))
444
+ sage: v * g
445
+ B[0] + 2*B[1]
446
+ sage: w * g
447
+ B[2]
448
+ sage: g * v
449
+ Traceback (most recent call last):
450
+ ...
451
+ TypeError: unsupported operand parent(s) for *: 'G' and 'I'
452
+ sage: I.rename() # reset name
453
+
454
+ sage: R = Representation(G, M, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional())
455
+ sage: I = R.invariant_module(); I.rename('I')
456
+ sage: B = I.basis()
457
+ sage: v = B[0] + 2*B[1]; I.lift(v)
458
+ 1 + 2*x0 + 2*x1 + 2*x2
459
+ sage: w = B[2]; I.lift(w)
460
+ x0*x1 - x0*x2 + x1*x2
461
+ sage: v * w
462
+ B[2] + 6*B[3]
463
+ sage: I.lift(v*w)
464
+ x0*x1 + 6*x0*x1*x2 - x0*x2 + x1*x2
465
+ sage: w * v
466
+ B[2] + 6*B[3]
467
+ sage: (1/2) * v
468
+ 1/2*B[0] + B[1]
469
+ sage: w * (1/2)
470
+ 1/2*B[2]
471
+ sage: g = G((1,3,2))
472
+ sage: v * v
473
+ B[0] + 4*B[1]
474
+ sage: g * w
475
+ B[2]
476
+ sage: v * g
477
+ Traceback (most recent call last):
478
+ ...
479
+ TypeError: unsupported operand parent(s) for *: 'I' and 'G'
480
+ sage: G.rename(); I.rename() # reset names
481
+ """
482
+ P = self.parent()
483
+ return P.retract(P.lift(self) * P.lift(other))
484
+
485
+ def _acted_upon_(self, scalar, self_on_left=False):
486
+ """
487
+ EXAMPLES::
488
+
489
+ sage: G = CyclicPermutationGroup(3)
490
+ sage: g = G.an_element(); g
491
+ (1,2,3)
492
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3])
493
+ sage: from sage.modules.with_basis.representation import Representation
494
+ sage: R = Representation(G, M, lambda g,x: M.monomial(g(x)))
495
+ sage: I = R.invariant_module()
496
+ sage: [b._acted_upon_(G((1,3,2))) for b in I.basis()]
497
+ [B[0]]
498
+ sage: v = I.an_element(); v
499
+ 2*B[0]
500
+ sage: g * v
501
+ 2*B[0]
502
+ sage: [g * v for g in G.list()]
503
+ [2*B[0], 2*B[0], 2*B[0]]
504
+
505
+
506
+ sage: E = algebras.Exterior(QQ, 'x', 3)
507
+ sage: def on_basis(g, m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
508
+ sage: R = Representation(G, E, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional())
509
+ sage: I = R.invariant_module()
510
+ sage: B = I.basis()
511
+ sage: [I.lift(b) for b in B]
512
+ [1, x0 + x1 + x2, x0*x1 - x0*x2 + x1*x2, x0*x1*x2]
513
+ sage: [[g*b for g in G] for b in B]
514
+ [[B[0], B[0], B[0]],
515
+ [B[1], B[1], B[1]],
516
+ [B[2], B[2], B[2]],
517
+ [B[3], B[3], B[3]]]
518
+ sage: 3 * I.basis()[0]
519
+ 3*B[0]
520
+ sage: 3*B[0] + B[1]*2
521
+ 3*B[0] + 2*B[1]
522
+
523
+ sage: R = G.regular_representation(QQ)
524
+ sage: I = R.invariant_module()
525
+ sage: B = I.basis()
526
+ sage: [I.lift(b) for b in B]
527
+ [() + (1,2,3) + (1,3,2)]
528
+ sage: B[0]._acted_upon_(G((1,3,2)))
529
+ B[0]
530
+ sage: B[0]._acted_upon_(G((1,3,2)), self_on_left=True) is None
531
+ True
532
+
533
+ sage: R = G.regular_representation(QQ, side='right')
534
+ sage: I = R.invariant_module()
535
+ sage: B = I.basis()
536
+ sage: [I.lift(b) for b in B]
537
+ [() + (1,2,3) + (1,3,2)]
538
+ sage: g = G((1,3,2))
539
+ sage: B[0]._acted_upon_(g, self_on_left=True)
540
+ B[0]
541
+ sage: B[0]._acted_upon_(g, self_on_left=False) is None
542
+ True
543
+
544
+ sage: R = Representation(G, M, lambda g,x: M.monomial(g(x)), side='right')
545
+ sage: I = R.invariant_module()
546
+ sage: v = I.an_element(); v
547
+ 2*B[0]
548
+ sage: v * g
549
+ 2*B[0]
550
+ sage: [v * g for g in G.list()]
551
+ [2*B[0], 2*B[0], 2*B[0]]
552
+ sage: [b._acted_upon_(G((1,3,2)), self_on_left=True) for b in I.basis()]
553
+ [B[0]]
554
+
555
+ sage: def on_basis(g, m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m]) # cyclically permute generators
556
+ sage: R = Representation(G, E, on_basis, category=Algebras(QQ).WithBasis().FiniteDimensional(), side='right')
557
+ sage: I = R.invariant_module()
558
+ sage: B = I.basis()
559
+ sage: [I.lift(b) for b in B]
560
+ [1, x0 + x1 + x2, x0*x1 - x0*x2 + x1*x2, x0*x1*x2]
561
+ sage: [[b * g for g in G] for b in B]
562
+ [[B[0], B[0], B[0]],
563
+ [B[1], B[1], B[1]],
564
+ [B[2], B[2], B[2]],
565
+ [B[3], B[3], B[3]]]
566
+ sage: 3 * B[0] + B[1] * 2
567
+ 3*B[0] + 2*B[1]
568
+ """
569
+ if scalar in self.parent()._semigroup and self_on_left == (self.parent()._side == 'right'):
570
+ return self
571
+ return super()._acted_upon_(scalar, self_on_left)
572
+
573
+
574
+ class FiniteDimensionalTwistedInvariantModule(SubmoduleWithBasis):
575
+ r"""
576
+ Construct the `\chi`-twisted invariant submodule of `M`.
577
+
578
+ When a group `G` acts on a module `M`, the `\chi`-*twisted invariant
579
+ submodule* of `M` is the isotypic component of the representation `M`
580
+ corresponding to the irreducible character `\chi`.
581
+
582
+ For more information, see [Sta1979]_.
583
+
584
+ INPUT:
585
+
586
+ - ``M`` -- a module in the category of
587
+ :class:`~sage.categories.finite_dimensional_modules_with_basis.FiniteDimensionalModulesWithBasis`
588
+ and whose base ring contains all the values passed to ``chi`` and `1/|G|`
589
+
590
+ - ``G`` -- a finitely generated group
591
+
592
+ - ``chi`` -- list/tuple of the character values of the irreducible representation
593
+ onto which you want to project. The order of values of `chi` must
594
+ agree with the order of ``G.conjugacy_classes()``
595
+
596
+ - ``action`` -- (default: ``operator.mul``) the action of ``G`` on ``M``
597
+
598
+ - ``side`` -- (default: ``'left'``) the side on which ``G`` acts
599
+
600
+ .. WARNING::
601
+
602
+ The current implementation does not check if ``chi`` is irreducible.
603
+ Passing character values of non-irreducible representations may lead
604
+ to mathematically incorrect results.
605
+
606
+ EXAMPLES:
607
+
608
+ Suppose that the symmetric group `S_3` acts on a four dimensional
609
+ vector space by permuting the first three coordinates only::
610
+
611
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3,4], prefix='M')
612
+ sage: G = SymmetricGroup(3)
613
+ sage: action = lambda g,x: M.term(g(x))
614
+
615
+ The trivial representation corresponds to the usual invariant module,
616
+ so trying to create the twisted invariant module when there is no twist
617
+ returns a :class:`~sage.modules.with_basis.invariant.FiniteDimensionalInvariantModule`::
618
+
619
+ sage: chi = ClassFunction(G, (1,1,1))
620
+ sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
621
+ sage: type(T)
622
+ <class 'sage.modules.with_basis.invariant.FiniteDimensionalInvariantModule_with_category'>
623
+
624
+ In this case, there are two copies of the trivial representation, one
625
+ coming from the first three coordinates and the other coming from the
626
+ fact that `S_3` does not touch the fourth coordinate::
627
+
628
+ sage: T.basis()
629
+ Finite family {0: B[0], 1: B[1]}
630
+ sage: [T.lift(b) for b in T.basis()]
631
+ [M[1] + M[2] + M[3], M[4]]
632
+
633
+ The character values of the standard representation are `2,0,-1`::
634
+
635
+ sage: chi = ClassFunction(G, [2,0,-1])
636
+ sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
637
+ sage: type(T)
638
+ <class 'sage.modules.with_basis.invariant.FiniteDimensionalTwistedInvariantModule_with_category'>
639
+ sage: T.basis()
640
+ Finite family {0: B[0], 1: B[1]}
641
+ sage: [T.lift(b) for b in T.basis()]
642
+ [M[1] - M[3], M[2] - M[3]]
643
+
644
+ The permutation representation is the direct sum of the standard
645
+ representation with the trivial representation, and the action on the
646
+ basis element ``B[4]`` is itself a copy of the trivial representation,
647
+ so the sign representation does not appear in the decomposition::
648
+
649
+ sage: T = M.twisted_invariant_module(G, [1,-1,1], action_on_basis=action)
650
+ sage: T.basis()
651
+ Finite family {}
652
+
653
+ We can also get two copies of the standard representation by looking at
654
+ two copies of the permutation representation, found by reduction modulo
655
+ three on the indices of a six-dimensional module::
656
+
657
+ sage: M = CombinatorialFreeModule(QQ, [0,1,2,3,4,5], prefix='M')
658
+ sage: action = lambda g,x: M.term(g(x%3 + 1)-1 + (x>=3)*3)
659
+ sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
660
+ sage: T.basis()
661
+ Finite family {0: B[0], 1: B[1], 2: B[2], 3: B[3]}
662
+ sage: [T.lift(b) for b in T.basis()]
663
+ [M[0] - M[2], M[1] - M[2], M[3] - M[5], M[4] - M[5]]
664
+
665
+ sage: T = M.twisted_invariant_module(G, [1,1,1], action_on_basis=action)
666
+ sage: T.basis()
667
+ Finite family {0: B[0], 1: B[1]}
668
+ sage: [T.lift(b) for b in T.basis()]
669
+ [M[0] + M[1] + M[2], M[3] + M[4] + M[5]]
670
+
671
+ There are still no copies of the sign representation::
672
+
673
+ sage: T = M.twisted_invariant_module(G, [1,-1,1], action_on_basis=action)
674
+ sage: T.basis()
675
+ Finite family {}
676
+
677
+ The trivial representation also contains no copies of the sign
678
+ representation::
679
+
680
+ sage: R = G.trivial_representation(QQ)
681
+ sage: T = R.twisted_invariant_module([1,-1,1])
682
+ sage: T.basis()
683
+ Finite family {}
684
+
685
+ The regular representation contains two copies of the standard
686
+ representation and one copy each of the trivial and the sign::
687
+
688
+ sage: R = G.regular_representation(QQ)
689
+ sage: std = R.twisted_invariant_module([2,0,-1])
690
+ sage: std.basis()
691
+ Finite family {0: B[0], 1: B[1], 2: B[2], 3: B[3]}
692
+ sage: [std.lift(b) for b in std.basis()]
693
+ [() - (1,2,3), -(1,2,3) + (1,3,2), (2,3) - (1,2), -(1,2) + (1,3)]
694
+
695
+ sage: triv = R.twisted_invariant_module([1,1,1])
696
+ sage: triv.basis()
697
+ Finite family {0: B[0]}
698
+ sage: [triv.lift(b) for b in triv.basis()]
699
+ [() + (2,3) + (1,2) + (1,2,3) + (1,3,2) + (1,3)]
700
+
701
+ sage: sgn = R.twisted_invariant_module([1,-1,1])
702
+ sage: sgn.basis()
703
+ Finite family {0: B[0]}
704
+ sage: [sgn.lift(b) for b in sgn.basis()]
705
+ [() - (2,3) - (1,2) + (1,2,3) + (1,3,2) - (1,3)]
706
+
707
+ For the next example, we construct a twisted invariant by the character
708
+ for the 2 dimensional representation of `S_3` on the natural action on
709
+ the exterior algebra. While `S_3` acts by automorphisms, the twisted
710
+ invariants do not form an algebra in this case::
711
+
712
+ sage: G = SymmetricGroup(3); G.rename('S3')
713
+ sage: E = algebras.Exterior(QQ, 'x', 3); E.rename('E')
714
+ sage: def action(g, m): return E.prod([E.monomial(FrozenBitset([g(j+1)-1])) for j in m])
715
+ sage: from sage.modules.with_basis.representation import Representation
716
+ sage: EA = Representation(G, E, action, category=Algebras(QQ).WithBasis().FiniteDimensional())
717
+ sage: T = EA.twisted_invariant_module([2,0,-1])
718
+ sage: t = T.an_element(); t
719
+ 2*B[0] + 2*B[1] + 3*B[2]
720
+
721
+ We can still get meaningful information about the product
722
+ by taking the product in the ambient space::
723
+
724
+ sage: T.lift(t) * T.lift(t)
725
+ -36*x0*x1*x2
726
+
727
+ We can see this does not lie in this twisted invariant algebra::
728
+
729
+ sage: T.retract(T.lift(t) * T.lift(t))
730
+ Traceback (most recent call last):
731
+ ...
732
+ ValueError: -36*x0*x1*x2 is not in the image
733
+
734
+ sage: [T.lift(b) for b in T.basis()]
735
+ [x0 - x2, x1 - x2, x0*x1 - x1*x2, x0*x2 + x1*x2]
736
+
737
+ It happens to be in the trivial isotypic component (equivalently in
738
+ the usual invariant algebra) but Sage does not know this.
739
+
740
+ ::
741
+
742
+ sage: G.rename(); E.rename() # reset the names
743
+
744
+ .. TODO::
745
+
746
+ - Replace ``G`` by ``S`` in :class:`~sage.categories.finitely_generated_semigroups.FinitelyGeneratedSemigroups`
747
+ - Allow for ``chi`` to be a :class:`~sage.modules.with_basis.representation.Representation`
748
+ - Add check for irreducibility of ``chi``
749
+ """
750
+
751
+ @staticmethod
752
+ def __classcall_private__(cls, M, G, chi,
753
+ action=operator.mul, side='left', **kwargs):
754
+ r"""
755
+ TESTS:
756
+
757
+ Check that it works for lists::
758
+
759
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3])
760
+ sage: G = SymmetricGroup(3)
761
+ sage: def action(g, x): return M.term(g(x))
762
+ sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
763
+
764
+ Check that it works for tuples::
765
+
766
+ sage: T2 = M.twisted_invariant_module(G, (2,0,-1), action_on_basis=action)
767
+ sage: T is T2
768
+ True
769
+
770
+ Check that it works for class functions::
771
+
772
+ sage: chi = ClassFunction(G, [2,0,-1])
773
+ sage: T3 = M.twisted_invariant_module(G, chi, action_on_basis=action)
774
+ sage: T is T3
775
+ True
776
+
777
+ Check that it works when the character values are not an instance of
778
+ :class:`~sage.rings.integer.Integer`::
779
+
780
+ sage: chi = [QQ(2), QQ(0), QQ(-1)]
781
+ sage: T4 = M.twisted_invariant_module(G, chi, action_on_basis=action)
782
+ sage: T is T4
783
+ True
784
+
785
+ Check that the trivial character returns an instance of
786
+ :class:`~sage.modules.with_basis.invariant.FiniteDimensionalInvariantModule`::
787
+
788
+ sage: chi = [1, 1, 1] # check for list
789
+ sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
790
+ sage: type(T)
791
+ <class 'sage.modules.with_basis.invariant.FiniteDimensionalInvariantModule_with_category'>
792
+
793
+ sage: chi = (1, 1, 1) # check for tuple
794
+ sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
795
+ sage: type(T)
796
+ <class 'sage.modules.with_basis.invariant.FiniteDimensionalInvariantModule_with_category'>
797
+
798
+ sage: chi = ClassFunction(G, [1,1,1]) # check for class function
799
+ sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
800
+ sage: type(T)
801
+ <class 'sage.modules.with_basis.invariant.FiniteDimensionalInvariantModule_with_category'>
802
+
803
+ Check the :exc:`ValueError`::
804
+
805
+ sage: T = M.twisted_invariant_module(G, "ichigo", action_on_basis=action)
806
+ Traceback (most recent call last):
807
+ ...
808
+ ValueError: chi must be a list/tuple or a class function of the group G
809
+ """
810
+ from sage.groups.class_function import ClassFunction, ClassFunction_libgap
811
+ from sage.libs.gap.libgap import libgap
812
+
813
+ if isinstance(chi, (list, tuple)):
814
+ chi = ClassFunction(G, libgap(chi))
815
+ elif not isinstance(chi, ClassFunction_libgap):
816
+ raise ValueError("chi must be a list/tuple or a class function of the group G")
817
+
818
+ try:
819
+ is_trivial = all(chi(next(iter(conj))) == 1 for conj in G.conjugacy_classes())
820
+ except AttributeError: # to handle ReflectionGroups
821
+ is_trivial = all(chi(G(next(iter(conj)))) == 1 for conj in G.conjugacy_classes())
822
+
823
+ if is_trivial:
824
+ action_on_basis = kwargs.pop('action_on_basis', None)
825
+ if action_on_basis is not None:
826
+ return M.invariant_module(G, action_on_basis=action_on_basis)
827
+ return M.invariant_module(G, action=action)
828
+
829
+ return super().__classcall__(cls, M, G, chi, action=operator.mul,
830
+ side='left', **kwargs)
831
+
832
+ def __init__(self, M, G, chi, action=operator.mul, side='left', **kwargs):
833
+ r"""
834
+ Initialize ``self``.
835
+
836
+ EXAMPLES:
837
+
838
+ As a first example we will consider the permutation representation
839
+ of `S_3`::
840
+
841
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M');
842
+ sage: G = SymmetricGroup(3); G.conjugacy_classes()
843
+ [Conjugacy class of cycle type [1, 1, 1] in Symmetric group of order 3! as a permutation group,
844
+ Conjugacy class of cycle type [2, 1] in Symmetric group of order 3! as a permutation group,
845
+ Conjugacy class of cycle type [3] in Symmetric group of order 3! as a permutation group]
846
+ sage: from sage.groups.class_function import ClassFunction
847
+ sage: chi = ClassFunction(G, [2,0,-1]) # the standard representation character values
848
+ sage: def action(g, x): return M.term(g(x))
849
+ sage: import __main__
850
+ sage: __main__.action = action
851
+ sage: T = M.twisted_invariant_module(G, chi, action_on_basis=action)
852
+ sage: TestSuite(T).run()
853
+
854
+ We know that the permutation representation decomposes as a direct
855
+ sum of one copy of the standard representation which is two-dimensional
856
+ and one copy of the trivial representation::
857
+
858
+ sage: T.basis()
859
+ Finite family {0: B[0], 1: B[1]}
860
+ sage: [T.lift(b) for b in T.basis()]
861
+ [M[1] - M[3], M[2] - M[3]]
862
+ """
863
+
864
+ if G not in FinitelyGeneratedSemigroups():
865
+ raise ValueError(f"{G} is not finitely generated")
866
+ if M not in FiniteDimensionalModulesWithBasis:
867
+ raise ValueError(f"{M} is not a finite dimensional module with a distinguished basis")
868
+
869
+ self._chi = chi
870
+ self._group = G
871
+ self._action = action
872
+ self._side = side
873
+
874
+ # define a private action to deal
875
+ # with sidedness issues in the action.
876
+ if side == 'left':
877
+ self.__sided_action__ = action
878
+ elif side == 'right':
879
+ # flip the sides since the second argument
880
+ # to action should be the group element
881
+ def __sided_action__(g, x):
882
+ return action(x, g)
883
+ self.__sided_action__ = __sided_action__
884
+ else:
885
+ raise ValueError("side must either be 'left' or 'right'")
886
+
887
+ proj_matrix = Matrix(M.dimension()) # initialize the zero-matrix
888
+ for g in self._group:
889
+ proj_matrix += self._chi(g)*Matrix((self.__sided_action__(g, b)).to_vector() for b in M.basis())
890
+
891
+ n = self._chi(self._group.identity()) # chi(1) is the dimension
892
+ g = self._group.order()
893
+
894
+ self._projection_matrix = (n/g)*proj_matrix
895
+
896
+ self._project_ambient = M.module_morphism(matrix=self._projection_matrix,
897
+ codomain=M)
898
+
899
+ category = kwargs.pop("category", M.category().Subobjects())
900
+
901
+ # Give the kernel of the map `\pi(x)-x` to determine when `x` lies
902
+ # within the isotypic component of `R`.
903
+
904
+ def proj_difference(g, x):
905
+ return self._project_ambient(x) - x
906
+
907
+ basis = M.annihilator_basis(M.basis(),
908
+ action=proj_difference,
909
+ side='left')
910
+
911
+ super().__init__(Family(basis),
912
+ support_order=M._compute_support_order(basis),
913
+ ambient=M,
914
+ unitriangular=False,
915
+ category=category,
916
+ **kwargs)
917
+
918
+ def _repr_(self):
919
+ r"""
920
+ Return a string representation of ``self``.
921
+
922
+ EXAMPLES::
923
+
924
+ sage: G = CyclicPermutationGroup(3)
925
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3], prefix='M')
926
+ sage: action = lambda g, m: M.monomial(g(m)) # cyclically permute coordinates
927
+ sage: M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
928
+ Twist of (Cyclic group of order 3 as a permutation group)-invariant submodule of
929
+ Free module generated by {1, 2, 3} over Rational Field by character [2, 0, -1]
930
+ """
931
+ M = self._ambient
932
+ if isinstance(self._ambient, Representation):
933
+ M = M._module
934
+ return f"Twist of ({self._group})-invariant submodule of {M} by character {self._chi.values()}"
935
+
936
+ def project(self, x):
937
+ r"""
938
+ Project ``x`` in the ambient module onto ``self``.
939
+
940
+ EXAMPLES:
941
+
942
+ The standard representation is the orthogonal complement
943
+ of the trivial representation inside of the permutation
944
+ representation, so the basis for the trivial representation
945
+ projects to `0`::
946
+
947
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3]); M.rename('M')
948
+ sage: B = M.basis()
949
+ sage: G = SymmetricGroup(3); G.rename('S3')
950
+ sage: def action(g, x): return M.term(g(x))
951
+ sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
952
+ sage: m = B[1] + B[2] + B[3]
953
+ sage: parent(m)
954
+ M
955
+ sage: t = T.project(m); t
956
+ 0
957
+ sage: parent(t)
958
+ Twist of (S3)-invariant submodule of M by character [2, 0, -1]
959
+
960
+ sage: G.rename(); M.rename() # reset names
961
+ """
962
+ return self.retract(self.project_ambient(x))
963
+
964
+ def project_ambient(self, x):
965
+ r"""
966
+ Project ``x`` in the ambient representation onto the submodule of the
967
+ ambient representation to which ``self`` is isomorphic as a module.
968
+
969
+ .. NOTE::
970
+
971
+ The image of ``self.project_ambient`` is not in ``self`` but
972
+ rather is in ``self.ambient()``.
973
+
974
+ EXAMPLES::
975
+
976
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3]); M.rename('M')
977
+ sage: B = M.basis()
978
+ sage: G = SymmetricGroup(3); G.rename('S3')
979
+ sage: def action(g, x): return M.term(g(x))
980
+ sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
981
+
982
+ To compare with ``self.project``, we can inspect the parents.
983
+ The image of ``self.project`` is in ``self``, while the image
984
+ of ``self.project_ambient`` is in ``self._ambient``::
985
+
986
+ sage: t = T.project(B[1] + B[2] + B[3]); t
987
+ 0
988
+ sage: parent(t)
989
+ Twist of (S3)-invariant submodule of M by character [2, 0, -1]
990
+ sage: s = T.project_ambient(B[1] + B[2] + B[3]); s
991
+ 0
992
+ sage: parent(s)
993
+ Representation of S3 indexed by {1, 2, 3} over Rational Field
994
+
995
+ Note that because of the construction of ``T``, ``self._ambient``
996
+ is an instance of
997
+ :class:`~sage.modules.with_basis.representation.Representation`,
998
+ but you still may pass elements of ``M``, which is an instance of
999
+ :class:`~sage.combinat.free_module.CombinatorialFreeModule`,
1000
+ because the underlying ``Representation`` is built off of ``M``
1001
+ and we can canonically construct elements of the ``Representation``
1002
+ from elements of ``M``.
1003
+
1004
+ ::
1005
+
1006
+ sage: G.rename(); M.rename() # reset names
1007
+ """
1008
+ if (isinstance(self._ambient, Representation)
1009
+ and x.parent() is self._ambient._module):
1010
+ x = self._ambient._element_constructor_(x)
1011
+ return self._project_ambient(x)
1012
+
1013
+ def projection_matrix(self):
1014
+ r"""
1015
+ Return the matrix defining the projection map from
1016
+ the ambient representation onto ``self``.
1017
+
1018
+ EXAMPLES::
1019
+
1020
+ sage: M = CombinatorialFreeModule(QQ, [1,2,3])
1021
+ sage: def action(g, x): return(M.term(g(x)))
1022
+ sage: G = SymmetricGroup(3)
1023
+
1024
+ If the matrix `A` has columns form a basis for
1025
+ the subspace onto which we are trying to project,
1026
+ then we can find the projection matrix via the
1027
+ formula `P = A (A^T A)^{-1} A^T`. Recall that the
1028
+ standard representation twisted invariant has basis
1029
+ ``(B[1] - B[3], B[2] - B[3])``, hence::
1030
+
1031
+ sage: A = Matrix([[1,0],[0,1],[-1,-1]])
1032
+ sage: P = A*(A.transpose()*A).inverse()*A.transpose()
1033
+ sage: T = M.twisted_invariant_module(G, [2,0,-1], action_on_basis=action)
1034
+ sage: P == T.projection_matrix()
1035
+ True
1036
+
1037
+ Moreover, since there is no component of the sign
1038
+ representation in this representation, the projection
1039
+ matrix is just the zero matrix::
1040
+
1041
+ sage: T = M.twisted_invariant_module(G, [1,-1,1], action_on_basis=action)
1042
+ sage: T.projection_matrix()
1043
+ [0 0 0]
1044
+ [0 0 0]
1045
+ [0 0 0]
1046
+ """
1047
+ return self._projection_matrix
1048
+
1049
+ class Element(SubmoduleWithBasis.Element):
1050
+ def _acted_upon_(self, scalar, self_on_left=False):
1051
+ r"""
1052
+ Return the action of ``scalar`` on ``self``.
1053
+
1054
+ EXAMPLES::
1055
+
1056
+ sage: G = SymmetricGroup(3)
1057
+ sage: R = G.regular_representation(QQ)
1058
+ sage: T = R.twisted_invariant_module([2,0,-1])
1059
+ sage: t = T.an_element()
1060
+ sage: 5 * t
1061
+ 10*B[0] + 10*B[1] + 15*B[2]
1062
+ sage: t * -2/3
1063
+ -4/3*B[0] - 4/3*B[1] - 2*B[2]
1064
+ sage: [g * t for g in G]
1065
+ [2*B[0] + 2*B[1] + 3*B[2],
1066
+ -4*B[0] + 2*B[1] - 3*B[3],
1067
+ 2*B[0] - 4*B[1] - 3*B[2] + 3*B[3],
1068
+ 3*B[0] + 2*B[2] + 2*B[3],
1069
+ -3*B[1] - 4*B[2] + 2*B[3],
1070
+ -3*B[0] + 3*B[1] + 2*B[2] - 4*B[3]]
1071
+ """
1072
+ P = self.parent()
1073
+ if scalar in P._group and self_on_left == (P._side == 'right'):
1074
+ return P.retract(scalar * P.lift(self))
1075
+ return super()._acted_upon_(scalar, self_on_left)