passagemath-modules 10.6.31rc3__cp314-cp314-musllinux_1_2_x86_64.whl

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

Potentially problematic release.


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

Files changed (808) hide show
  1. passagemath_modules-10.6.31rc3.dist-info/METADATA +281 -0
  2. passagemath_modules-10.6.31rc3.dist-info/RECORD +808 -0
  3. passagemath_modules-10.6.31rc3.dist-info/WHEEL +5 -0
  4. passagemath_modules-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_modules.libs/libgcc_s-0cd532bd.so.1 +0 -0
  6. passagemath_modules.libs/libgfortran-2c33b284.so.5.0.0 +0 -0
  7. passagemath_modules.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
  8. passagemath_modules.libs/libgsl-42cda06f.so.28.0.0 +0 -0
  9. passagemath_modules.libs/libmpc-d8ebe4b5.so.3.3.1 +0 -0
  10. passagemath_modules.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
  11. passagemath_modules.libs/libopenblasp-r0-905cb27d.3.29.so +0 -0
  12. passagemath_modules.libs/libquadmath-bb76a5fc.so.0.0.0 +0 -0
  13. sage/algebras/all__sagemath_modules.py +20 -0
  14. sage/algebras/catalog.py +148 -0
  15. sage/algebras/clifford_algebra.py +3107 -0
  16. sage/algebras/clifford_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  17. sage/algebras/clifford_algebra_element.pxd +16 -0
  18. sage/algebras/clifford_algebra_element.pyx +997 -0
  19. sage/algebras/commutative_dga.py +4252 -0
  20. sage/algebras/exterior_algebra_groebner.cpython-314-x86_64-linux-musl.so +0 -0
  21. sage/algebras/exterior_algebra_groebner.pxd +55 -0
  22. sage/algebras/exterior_algebra_groebner.pyx +727 -0
  23. sage/algebras/finite_dimensional_algebras/all.py +2 -0
  24. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra.py +1029 -0
  25. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  26. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pxd +12 -0
  27. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_element.pyx +706 -0
  28. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_ideal.py +196 -0
  29. sage/algebras/finite_dimensional_algebras/finite_dimensional_algebra_morphism.py +255 -0
  30. sage/algebras/finite_gca.py +528 -0
  31. sage/algebras/group_algebra.py +232 -0
  32. sage/algebras/lie_algebras/abelian.py +197 -0
  33. sage/algebras/lie_algebras/affine_lie_algebra.py +1213 -0
  34. sage/algebras/lie_algebras/all.py +25 -0
  35. sage/algebras/lie_algebras/all__sagemath_modules.py +1 -0
  36. sage/algebras/lie_algebras/bch.py +177 -0
  37. sage/algebras/lie_algebras/bgg_dual_module.py +1184 -0
  38. sage/algebras/lie_algebras/bgg_resolution.py +232 -0
  39. sage/algebras/lie_algebras/center_uea.py +767 -0
  40. sage/algebras/lie_algebras/classical_lie_algebra.py +2516 -0
  41. sage/algebras/lie_algebras/examples.py +683 -0
  42. sage/algebras/lie_algebras/free_lie_algebra.py +973 -0
  43. sage/algebras/lie_algebras/heisenberg.py +820 -0
  44. sage/algebras/lie_algebras/lie_algebra.py +1562 -0
  45. sage/algebras/lie_algebras/lie_algebra_element.cpython-314-x86_64-linux-musl.so +0 -0
  46. sage/algebras/lie_algebras/lie_algebra_element.pxd +68 -0
  47. sage/algebras/lie_algebras/lie_algebra_element.pyx +2122 -0
  48. sage/algebras/lie_algebras/morphism.py +661 -0
  49. sage/algebras/lie_algebras/nilpotent_lie_algebra.py +457 -0
  50. sage/algebras/lie_algebras/onsager.py +1324 -0
  51. sage/algebras/lie_algebras/poincare_birkhoff_witt.py +816 -0
  52. sage/algebras/lie_algebras/quotient.py +462 -0
  53. sage/algebras/lie_algebras/rank_two_heisenberg_virasoro.py +355 -0
  54. sage/algebras/lie_algebras/representation.py +1040 -0
  55. sage/algebras/lie_algebras/structure_coefficients.py +459 -0
  56. sage/algebras/lie_algebras/subalgebra.py +967 -0
  57. sage/algebras/lie_algebras/symplectic_derivation.py +289 -0
  58. sage/algebras/lie_algebras/verma_module.py +1630 -0
  59. sage/algebras/lie_algebras/virasoro.py +1186 -0
  60. sage/algebras/octonion_algebra.cpython-314-x86_64-linux-musl.so +0 -0
  61. sage/algebras/octonion_algebra.pxd +20 -0
  62. sage/algebras/octonion_algebra.pyx +987 -0
  63. sage/algebras/orlik_solomon.py +907 -0
  64. sage/algebras/orlik_terao.py +779 -0
  65. sage/algebras/steenrod/all.py +7 -0
  66. sage/algebras/steenrod/steenrod_algebra.py +4258 -0
  67. sage/algebras/steenrod/steenrod_algebra_bases.py +1179 -0
  68. sage/algebras/steenrod/steenrod_algebra_misc.py +1167 -0
  69. sage/algebras/steenrod/steenrod_algebra_mult.py +954 -0
  70. sage/algebras/weyl_algebra.py +1126 -0
  71. sage/all__sagemath_modules.py +62 -0
  72. sage/calculus/all__sagemath_modules.py +19 -0
  73. sage/calculus/expr.py +205 -0
  74. sage/calculus/integration.cpython-314-x86_64-linux-musl.so +0 -0
  75. sage/calculus/integration.pyx +698 -0
  76. sage/calculus/interpolation.cpython-314-x86_64-linux-musl.so +0 -0
  77. sage/calculus/interpolation.pxd +13 -0
  78. sage/calculus/interpolation.pyx +387 -0
  79. sage/calculus/interpolators.cpython-314-x86_64-linux-musl.so +0 -0
  80. sage/calculus/interpolators.pyx +326 -0
  81. sage/calculus/ode.cpython-314-x86_64-linux-musl.so +0 -0
  82. sage/calculus/ode.pxd +5 -0
  83. sage/calculus/ode.pyx +610 -0
  84. sage/calculus/riemann.cpython-314-x86_64-linux-musl.so +0 -0
  85. sage/calculus/riemann.pyx +1521 -0
  86. sage/calculus/test_sympy.py +201 -0
  87. sage/calculus/transforms/all.py +7 -0
  88. sage/calculus/transforms/dft.py +844 -0
  89. sage/calculus/transforms/dwt.cpython-314-x86_64-linux-musl.so +0 -0
  90. sage/calculus/transforms/dwt.pxd +7 -0
  91. sage/calculus/transforms/dwt.pyx +160 -0
  92. sage/calculus/transforms/fft.cpython-314-x86_64-linux-musl.so +0 -0
  93. sage/calculus/transforms/fft.pxd +12 -0
  94. sage/calculus/transforms/fft.pyx +487 -0
  95. sage/calculus/wester.py +662 -0
  96. sage/coding/abstract_code.py +1108 -0
  97. sage/coding/ag_code.py +868 -0
  98. sage/coding/ag_code_decoders.cpython-314-x86_64-linux-musl.so +0 -0
  99. sage/coding/ag_code_decoders.pyx +2639 -0
  100. sage/coding/all.py +15 -0
  101. sage/coding/bch_code.py +494 -0
  102. sage/coding/binary_code.cpython-314-x86_64-linux-musl.so +0 -0
  103. sage/coding/binary_code.pxd +124 -0
  104. sage/coding/binary_code.pyx +4139 -0
  105. sage/coding/bounds_catalog.py +43 -0
  106. sage/coding/channel.py +819 -0
  107. sage/coding/channels_catalog.py +29 -0
  108. sage/coding/code_bounds.py +755 -0
  109. sage/coding/code_constructions.py +804 -0
  110. sage/coding/codes_catalog.py +111 -0
  111. sage/coding/cyclic_code.py +1329 -0
  112. sage/coding/databases.py +316 -0
  113. sage/coding/decoder.py +373 -0
  114. sage/coding/decoders_catalog.py +88 -0
  115. sage/coding/delsarte_bounds.py +709 -0
  116. sage/coding/encoder.py +390 -0
  117. sage/coding/encoders_catalog.py +64 -0
  118. sage/coding/extended_code.py +468 -0
  119. sage/coding/gabidulin_code.py +1058 -0
  120. sage/coding/golay_code.py +404 -0
  121. sage/coding/goppa_code.py +441 -0
  122. sage/coding/grs_code.py +2371 -0
  123. sage/coding/guava.py +107 -0
  124. sage/coding/guruswami_sudan/all.py +1 -0
  125. sage/coding/guruswami_sudan/gs_decoder.py +897 -0
  126. sage/coding/guruswami_sudan/interpolation.py +409 -0
  127. sage/coding/guruswami_sudan/utils.py +176 -0
  128. sage/coding/hamming_code.py +176 -0
  129. sage/coding/information_set_decoder.py +1032 -0
  130. sage/coding/kasami_codes.cpython-314-x86_64-linux-musl.so +0 -0
  131. sage/coding/kasami_codes.pyx +351 -0
  132. sage/coding/linear_code.py +3067 -0
  133. sage/coding/linear_code_no_metric.py +1354 -0
  134. sage/coding/linear_rank_metric.py +961 -0
  135. sage/coding/parity_check_code.py +353 -0
  136. sage/coding/punctured_code.py +719 -0
  137. sage/coding/reed_muller_code.py +999 -0
  138. sage/coding/self_dual_codes.py +942 -0
  139. sage/coding/source_coding/all.py +2 -0
  140. sage/coding/source_coding/huffman.py +553 -0
  141. sage/coding/subfield_subcode.py +423 -0
  142. sage/coding/two_weight_db.py +399 -0
  143. sage/combinat/all__sagemath_modules.py +7 -0
  144. sage/combinat/cartesian_product.py +347 -0
  145. sage/combinat/family.py +11 -0
  146. sage/combinat/free_module.py +1977 -0
  147. sage/combinat/root_system/all.py +147 -0
  148. sage/combinat/root_system/ambient_space.py +527 -0
  149. sage/combinat/root_system/associahedron.py +471 -0
  150. sage/combinat/root_system/braid_move_calculator.py +143 -0
  151. sage/combinat/root_system/braid_orbit.cpython-314-x86_64-linux-musl.so +0 -0
  152. sage/combinat/root_system/braid_orbit.pyx +144 -0
  153. sage/combinat/root_system/branching_rules.py +2301 -0
  154. sage/combinat/root_system/cartan_matrix.py +1245 -0
  155. sage/combinat/root_system/cartan_type.py +3069 -0
  156. sage/combinat/root_system/coxeter_group.py +162 -0
  157. sage/combinat/root_system/coxeter_matrix.py +1261 -0
  158. sage/combinat/root_system/coxeter_type.py +681 -0
  159. sage/combinat/root_system/dynkin_diagram.py +900 -0
  160. sage/combinat/root_system/extended_affine_weyl_group.py +2993 -0
  161. sage/combinat/root_system/fundamental_group.py +795 -0
  162. sage/combinat/root_system/hecke_algebra_representation.py +1203 -0
  163. sage/combinat/root_system/integrable_representations.py +1227 -0
  164. sage/combinat/root_system/non_symmetric_macdonald_polynomials.py +1965 -0
  165. sage/combinat/root_system/pieri_factors.py +1147 -0
  166. sage/combinat/root_system/plot.py +1615 -0
  167. sage/combinat/root_system/root_lattice_realization_algebras.py +1214 -0
  168. sage/combinat/root_system/root_lattice_realizations.py +4628 -0
  169. sage/combinat/root_system/root_space.py +487 -0
  170. sage/combinat/root_system/root_system.py +882 -0
  171. sage/combinat/root_system/type_A.py +348 -0
  172. sage/combinat/root_system/type_A_affine.py +227 -0
  173. sage/combinat/root_system/type_A_infinity.py +241 -0
  174. sage/combinat/root_system/type_B.py +347 -0
  175. sage/combinat/root_system/type_BC_affine.py +287 -0
  176. sage/combinat/root_system/type_B_affine.py +216 -0
  177. sage/combinat/root_system/type_C.py +317 -0
  178. sage/combinat/root_system/type_C_affine.py +188 -0
  179. sage/combinat/root_system/type_D.py +357 -0
  180. sage/combinat/root_system/type_D_affine.py +208 -0
  181. sage/combinat/root_system/type_E.py +641 -0
  182. sage/combinat/root_system/type_E_affine.py +231 -0
  183. sage/combinat/root_system/type_F.py +387 -0
  184. sage/combinat/root_system/type_F_affine.py +137 -0
  185. sage/combinat/root_system/type_G.py +293 -0
  186. sage/combinat/root_system/type_G_affine.py +132 -0
  187. sage/combinat/root_system/type_H.py +105 -0
  188. sage/combinat/root_system/type_I.py +110 -0
  189. sage/combinat/root_system/type_Q.py +150 -0
  190. sage/combinat/root_system/type_affine.py +509 -0
  191. sage/combinat/root_system/type_dual.py +704 -0
  192. sage/combinat/root_system/type_folded.py +301 -0
  193. sage/combinat/root_system/type_marked.py +748 -0
  194. sage/combinat/root_system/type_reducible.py +601 -0
  195. sage/combinat/root_system/type_relabel.py +730 -0
  196. sage/combinat/root_system/type_super_A.py +837 -0
  197. sage/combinat/root_system/weight_lattice_realizations.py +1188 -0
  198. sage/combinat/root_system/weight_space.py +639 -0
  199. sage/combinat/root_system/weyl_characters.py +2238 -0
  200. sage/crypto/__init__.py +4 -0
  201. sage/crypto/all.py +28 -0
  202. sage/crypto/block_cipher/all.py +7 -0
  203. sage/crypto/block_cipher/des.py +1065 -0
  204. sage/crypto/block_cipher/miniaes.py +2171 -0
  205. sage/crypto/block_cipher/present.py +909 -0
  206. sage/crypto/block_cipher/sdes.py +1527 -0
  207. sage/crypto/boolean_function.cpython-314-x86_64-linux-musl.so +0 -0
  208. sage/crypto/boolean_function.pxd +10 -0
  209. sage/crypto/boolean_function.pyx +1487 -0
  210. sage/crypto/cipher.py +78 -0
  211. sage/crypto/classical.py +3668 -0
  212. sage/crypto/classical_cipher.py +569 -0
  213. sage/crypto/cryptosystem.py +387 -0
  214. sage/crypto/key_exchange/all.py +7 -0
  215. sage/crypto/key_exchange/catalog.py +24 -0
  216. sage/crypto/key_exchange/diffie_hellman.py +323 -0
  217. sage/crypto/key_exchange/key_exchange_scheme.py +107 -0
  218. sage/crypto/lattice.py +312 -0
  219. sage/crypto/lfsr.py +295 -0
  220. sage/crypto/lwe.py +840 -0
  221. sage/crypto/mq/__init__.py +4 -0
  222. sage/crypto/mq/mpolynomialsystemgenerator.py +204 -0
  223. sage/crypto/mq/rijndael_gf.py +2345 -0
  224. sage/crypto/mq/sbox.py +7 -0
  225. sage/crypto/mq/sr.py +3344 -0
  226. sage/crypto/public_key/all.py +5 -0
  227. sage/crypto/public_key/blum_goldwasser.py +776 -0
  228. sage/crypto/sbox.cpython-314-x86_64-linux-musl.so +0 -0
  229. sage/crypto/sbox.pyx +2090 -0
  230. sage/crypto/sboxes.py +2090 -0
  231. sage/crypto/stream.py +390 -0
  232. sage/crypto/stream_cipher.py +297 -0
  233. sage/crypto/util.py +519 -0
  234. sage/ext/all__sagemath_modules.py +1 -0
  235. sage/ext/interpreters/__init__.py +1 -0
  236. sage/ext/interpreters/all__sagemath_modules.py +2 -0
  237. sage/ext/interpreters/wrapper_cc.cpython-314-x86_64-linux-musl.so +0 -0
  238. sage/ext/interpreters/wrapper_cc.pxd +30 -0
  239. sage/ext/interpreters/wrapper_cc.pyx +252 -0
  240. sage/ext/interpreters/wrapper_cdf.cpython-314-x86_64-linux-musl.so +0 -0
  241. sage/ext/interpreters/wrapper_cdf.pxd +26 -0
  242. sage/ext/interpreters/wrapper_cdf.pyx +245 -0
  243. sage/ext/interpreters/wrapper_rdf.cpython-314-x86_64-linux-musl.so +0 -0
  244. sage/ext/interpreters/wrapper_rdf.pxd +23 -0
  245. sage/ext/interpreters/wrapper_rdf.pyx +221 -0
  246. sage/ext/interpreters/wrapper_rr.cpython-314-x86_64-linux-musl.so +0 -0
  247. sage/ext/interpreters/wrapper_rr.pxd +28 -0
  248. sage/ext/interpreters/wrapper_rr.pyx +335 -0
  249. sage/geometry/all__sagemath_modules.py +5 -0
  250. sage/geometry/toric_lattice.py +1745 -0
  251. sage/geometry/toric_lattice_element.cpython-314-x86_64-linux-musl.so +0 -0
  252. sage/geometry/toric_lattice_element.pyx +432 -0
  253. sage/groups/abelian_gps/abelian_group.py +1925 -0
  254. sage/groups/abelian_gps/abelian_group_element.py +164 -0
  255. sage/groups/abelian_gps/all__sagemath_modules.py +5 -0
  256. sage/groups/abelian_gps/dual_abelian_group.py +421 -0
  257. sage/groups/abelian_gps/dual_abelian_group_element.py +179 -0
  258. sage/groups/abelian_gps/element_base.py +341 -0
  259. sage/groups/abelian_gps/values.py +488 -0
  260. sage/groups/additive_abelian/additive_abelian_group.py +476 -0
  261. sage/groups/additive_abelian/additive_abelian_wrapper.py +857 -0
  262. sage/groups/additive_abelian/all.py +4 -0
  263. sage/groups/additive_abelian/qmodnz.py +231 -0
  264. sage/groups/additive_abelian/qmodnz_element.py +349 -0
  265. sage/groups/affine_gps/affine_group.py +535 -0
  266. sage/groups/affine_gps/all.py +1 -0
  267. sage/groups/affine_gps/catalog.py +17 -0
  268. sage/groups/affine_gps/euclidean_group.py +246 -0
  269. sage/groups/affine_gps/group_element.py +562 -0
  270. sage/groups/all__sagemath_modules.py +12 -0
  271. sage/groups/galois_group.py +479 -0
  272. sage/groups/matrix_gps/all.py +4 -0
  273. sage/groups/matrix_gps/all__sagemath_modules.py +13 -0
  274. sage/groups/matrix_gps/catalog.py +26 -0
  275. sage/groups/matrix_gps/coxeter_group.py +927 -0
  276. sage/groups/matrix_gps/finitely_generated.py +487 -0
  277. sage/groups/matrix_gps/group_element.cpython-314-x86_64-linux-musl.so +0 -0
  278. sage/groups/matrix_gps/group_element.pxd +11 -0
  279. sage/groups/matrix_gps/group_element.pyx +431 -0
  280. sage/groups/matrix_gps/linear.py +440 -0
  281. sage/groups/matrix_gps/matrix_group.py +617 -0
  282. sage/groups/matrix_gps/named_group.py +296 -0
  283. sage/groups/matrix_gps/orthogonal.py +544 -0
  284. sage/groups/matrix_gps/symplectic.py +251 -0
  285. sage/groups/matrix_gps/unitary.py +436 -0
  286. sage/groups/misc_gps/all__sagemath_modules.py +1 -0
  287. sage/groups/misc_gps/argument_groups.py +1905 -0
  288. sage/groups/misc_gps/imaginary_groups.py +479 -0
  289. sage/groups/perm_gps/all__sagemath_modules.py +1 -0
  290. sage/groups/perm_gps/partn_ref/all__sagemath_modules.py +1 -0
  291. sage/groups/perm_gps/partn_ref/refinement_binary.cpython-314-x86_64-linux-musl.so +0 -0
  292. sage/groups/perm_gps/partn_ref/refinement_binary.pxd +41 -0
  293. sage/groups/perm_gps/partn_ref/refinement_binary.pyx +1167 -0
  294. sage/groups/perm_gps/partn_ref/refinement_matrices.cpython-314-x86_64-linux-musl.so +0 -0
  295. sage/groups/perm_gps/partn_ref/refinement_matrices.pxd +31 -0
  296. sage/groups/perm_gps/partn_ref/refinement_matrices.pyx +385 -0
  297. sage/homology/algebraic_topological_model.py +595 -0
  298. sage/homology/all.py +2 -0
  299. sage/homology/all__sagemath_modules.py +8 -0
  300. sage/homology/chain_complex.py +2148 -0
  301. sage/homology/chain_complex_homspace.py +165 -0
  302. sage/homology/chain_complex_morphism.py +629 -0
  303. sage/homology/chain_homotopy.py +604 -0
  304. sage/homology/chains.py +653 -0
  305. sage/homology/free_resolution.py +923 -0
  306. sage/homology/graded_resolution.py +567 -0
  307. sage/homology/hochschild_complex.py +756 -0
  308. sage/homology/homology_group.py +188 -0
  309. sage/homology/homology_morphism.py +422 -0
  310. sage/homology/homology_vector_space_with_basis.py +1454 -0
  311. sage/homology/koszul_complex.py +169 -0
  312. sage/homology/matrix_utils.py +205 -0
  313. sage/libs/all__sagemath_modules.py +1 -0
  314. sage/libs/gsl/__init__.py +1 -0
  315. sage/libs/gsl/airy.pxd +56 -0
  316. sage/libs/gsl/all.pxd +66 -0
  317. sage/libs/gsl/array.cpython-314-x86_64-linux-musl.so +0 -0
  318. sage/libs/gsl/array.pxd +5 -0
  319. sage/libs/gsl/array.pyx +102 -0
  320. sage/libs/gsl/bessel.pxd +208 -0
  321. sage/libs/gsl/blas.pxd +116 -0
  322. sage/libs/gsl/blas_types.pxd +34 -0
  323. sage/libs/gsl/block.pxd +52 -0
  324. sage/libs/gsl/chebyshev.pxd +37 -0
  325. sage/libs/gsl/clausen.pxd +12 -0
  326. sage/libs/gsl/combination.pxd +47 -0
  327. sage/libs/gsl/complex.pxd +151 -0
  328. sage/libs/gsl/coulomb.pxd +30 -0
  329. sage/libs/gsl/coupling.pxd +21 -0
  330. sage/libs/gsl/dawson.pxd +12 -0
  331. sage/libs/gsl/debye.pxd +24 -0
  332. sage/libs/gsl/dilog.pxd +14 -0
  333. sage/libs/gsl/eigen.pxd +46 -0
  334. sage/libs/gsl/elementary.pxd +12 -0
  335. sage/libs/gsl/ellint.pxd +48 -0
  336. sage/libs/gsl/elljac.pxd +8 -0
  337. sage/libs/gsl/erf.pxd +32 -0
  338. sage/libs/gsl/errno.pxd +26 -0
  339. sage/libs/gsl/exp.pxd +44 -0
  340. sage/libs/gsl/expint.pxd +44 -0
  341. sage/libs/gsl/fermi_dirac.pxd +44 -0
  342. sage/libs/gsl/fft.pxd +121 -0
  343. sage/libs/gsl/fit.pxd +50 -0
  344. sage/libs/gsl/gamma.pxd +94 -0
  345. sage/libs/gsl/gegenbauer.pxd +26 -0
  346. sage/libs/gsl/histogram.pxd +176 -0
  347. sage/libs/gsl/hyperg.pxd +52 -0
  348. sage/libs/gsl/integration.pxd +69 -0
  349. sage/libs/gsl/interp.pxd +109 -0
  350. sage/libs/gsl/laguerre.pxd +24 -0
  351. sage/libs/gsl/lambert.pxd +16 -0
  352. sage/libs/gsl/legendre.pxd +90 -0
  353. sage/libs/gsl/linalg.pxd +185 -0
  354. sage/libs/gsl/log.pxd +26 -0
  355. sage/libs/gsl/math.pxd +43 -0
  356. sage/libs/gsl/matrix.pxd +143 -0
  357. sage/libs/gsl/matrix_complex.pxd +130 -0
  358. sage/libs/gsl/min.pxd +67 -0
  359. sage/libs/gsl/monte.pxd +56 -0
  360. sage/libs/gsl/ntuple.pxd +32 -0
  361. sage/libs/gsl/odeiv.pxd +70 -0
  362. sage/libs/gsl/permutation.pxd +78 -0
  363. sage/libs/gsl/poly.pxd +40 -0
  364. sage/libs/gsl/pow_int.pxd +12 -0
  365. sage/libs/gsl/psi.pxd +28 -0
  366. sage/libs/gsl/qrng.pxd +29 -0
  367. sage/libs/gsl/random.pxd +257 -0
  368. sage/libs/gsl/rng.pxd +100 -0
  369. sage/libs/gsl/roots.pxd +72 -0
  370. sage/libs/gsl/sort.pxd +36 -0
  371. sage/libs/gsl/statistics.pxd +59 -0
  372. sage/libs/gsl/sum.pxd +55 -0
  373. sage/libs/gsl/synchrotron.pxd +16 -0
  374. sage/libs/gsl/transport.pxd +24 -0
  375. sage/libs/gsl/trig.pxd +58 -0
  376. sage/libs/gsl/types.pxd +137 -0
  377. sage/libs/gsl/vector.pxd +101 -0
  378. sage/libs/gsl/vector_complex.pxd +83 -0
  379. sage/libs/gsl/wavelet.pxd +49 -0
  380. sage/libs/gsl/zeta.pxd +28 -0
  381. sage/libs/mpc/__init__.pxd +114 -0
  382. sage/libs/mpc/types.pxd +28 -0
  383. sage/libs/mpfr/__init__.pxd +299 -0
  384. sage/libs/mpfr/types.pxd +26 -0
  385. sage/libs/mpmath/__init__.py +1 -0
  386. sage/libs/mpmath/all.py +27 -0
  387. sage/libs/mpmath/all__sagemath_modules.py +1 -0
  388. sage/libs/mpmath/utils.cpython-314-x86_64-linux-musl.so +0 -0
  389. sage/libs/mpmath/utils.pxd +4 -0
  390. sage/libs/mpmath/utils.pyx +319 -0
  391. sage/matrix/action.cpython-314-x86_64-linux-musl.so +0 -0
  392. sage/matrix/action.pxd +26 -0
  393. sage/matrix/action.pyx +596 -0
  394. sage/matrix/all.py +9 -0
  395. sage/matrix/args.cpython-314-x86_64-linux-musl.so +0 -0
  396. sage/matrix/args.pxd +144 -0
  397. sage/matrix/args.pyx +1668 -0
  398. sage/matrix/benchmark.py +1258 -0
  399. sage/matrix/berlekamp_massey.py +95 -0
  400. sage/matrix/compute_J_ideal.py +926 -0
  401. sage/matrix/constructor.cpython-314-x86_64-linux-musl.so +0 -0
  402. sage/matrix/constructor.pyx +750 -0
  403. sage/matrix/docs.py +430 -0
  404. sage/matrix/echelon_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  405. sage/matrix/echelon_matrix.pyx +155 -0
  406. sage/matrix/matrix.pxd +2 -0
  407. sage/matrix/matrix0.cpython-314-x86_64-linux-musl.so +0 -0
  408. sage/matrix/matrix0.pxd +68 -0
  409. sage/matrix/matrix0.pyx +6324 -0
  410. sage/matrix/matrix1.cpython-314-x86_64-linux-musl.so +0 -0
  411. sage/matrix/matrix1.pxd +8 -0
  412. sage/matrix/matrix1.pyx +2851 -0
  413. sage/matrix/matrix2.cpython-314-x86_64-linux-musl.so +0 -0
  414. sage/matrix/matrix2.pxd +25 -0
  415. sage/matrix/matrix2.pyx +20181 -0
  416. sage/matrix/matrix_cdv.cpython-314-x86_64-linux-musl.so +0 -0
  417. sage/matrix/matrix_cdv.pxd +4 -0
  418. sage/matrix/matrix_cdv.pyx +93 -0
  419. sage/matrix/matrix_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  420. sage/matrix/matrix_complex_double_dense.pxd +5 -0
  421. sage/matrix/matrix_complex_double_dense.pyx +98 -0
  422. sage/matrix/matrix_dense.cpython-314-x86_64-linux-musl.so +0 -0
  423. sage/matrix/matrix_dense.pxd +5 -0
  424. sage/matrix/matrix_dense.pyx +343 -0
  425. sage/matrix/matrix_domain_dense.pxd +5 -0
  426. sage/matrix/matrix_domain_sparse.pxd +5 -0
  427. sage/matrix/matrix_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  428. sage/matrix/matrix_double_dense.pxd +7 -0
  429. sage/matrix/matrix_double_dense.pyx +3906 -0
  430. sage/matrix/matrix_double_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  431. sage/matrix/matrix_double_sparse.pxd +6 -0
  432. sage/matrix/matrix_double_sparse.pyx +248 -0
  433. sage/matrix/matrix_generic_dense.cpython-314-x86_64-linux-musl.so +0 -0
  434. sage/matrix/matrix_generic_dense.pxd +7 -0
  435. sage/matrix/matrix_generic_dense.pyx +354 -0
  436. sage/matrix/matrix_generic_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  437. sage/matrix/matrix_generic_sparse.pxd +7 -0
  438. sage/matrix/matrix_generic_sparse.pyx +461 -0
  439. sage/matrix/matrix_laurent_mpolynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  440. sage/matrix/matrix_laurent_mpolynomial_dense.pxd +5 -0
  441. sage/matrix/matrix_laurent_mpolynomial_dense.pyx +115 -0
  442. sage/matrix/matrix_misc.py +313 -0
  443. sage/matrix/matrix_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  444. sage/matrix/matrix_numpy_dense.pxd +14 -0
  445. sage/matrix/matrix_numpy_dense.pyx +450 -0
  446. sage/matrix/matrix_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  447. sage/matrix/matrix_numpy_integer_dense.pxd +7 -0
  448. sage/matrix/matrix_numpy_integer_dense.pyx +59 -0
  449. sage/matrix/matrix_polynomial_dense.cpython-314-x86_64-linux-musl.so +0 -0
  450. sage/matrix/matrix_polynomial_dense.pxd +5 -0
  451. sage/matrix/matrix_polynomial_dense.pyx +5341 -0
  452. sage/matrix/matrix_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  453. sage/matrix/matrix_real_double_dense.pxd +7 -0
  454. sage/matrix/matrix_real_double_dense.pyx +122 -0
  455. sage/matrix/matrix_space.py +2848 -0
  456. sage/matrix/matrix_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  457. sage/matrix/matrix_sparse.pxd +5 -0
  458. sage/matrix/matrix_sparse.pyx +1222 -0
  459. sage/matrix/matrix_window.cpython-314-x86_64-linux-musl.so +0 -0
  460. sage/matrix/matrix_window.pxd +37 -0
  461. sage/matrix/matrix_window.pyx +242 -0
  462. sage/matrix/misc_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  463. sage/matrix/misc_mpfr.pyx +80 -0
  464. sage/matrix/operation_table.py +1182 -0
  465. sage/matrix/special.py +3666 -0
  466. sage/matrix/strassen.cpython-314-x86_64-linux-musl.so +0 -0
  467. sage/matrix/strassen.pyx +851 -0
  468. sage/matrix/symplectic_basis.py +541 -0
  469. sage/matrix/template.pxd +6 -0
  470. sage/matrix/tests.py +71 -0
  471. sage/matroids/advanced.py +77 -0
  472. sage/matroids/all.py +13 -0
  473. sage/matroids/basis_exchange_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  474. sage/matroids/basis_exchange_matroid.pxd +96 -0
  475. sage/matroids/basis_exchange_matroid.pyx +2344 -0
  476. sage/matroids/basis_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  477. sage/matroids/basis_matroid.pxd +45 -0
  478. sage/matroids/basis_matroid.pyx +1217 -0
  479. sage/matroids/catalog.py +44 -0
  480. sage/matroids/chow_ring.py +473 -0
  481. sage/matroids/chow_ring_ideal.py +849 -0
  482. sage/matroids/circuit_closures_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  483. sage/matroids/circuit_closures_matroid.pxd +16 -0
  484. sage/matroids/circuit_closures_matroid.pyx +559 -0
  485. sage/matroids/circuits_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  486. sage/matroids/circuits_matroid.pxd +38 -0
  487. sage/matroids/circuits_matroid.pyx +947 -0
  488. sage/matroids/constructor.py +1086 -0
  489. sage/matroids/database_collections.py +365 -0
  490. sage/matroids/database_matroids.py +5338 -0
  491. sage/matroids/dual_matroid.py +583 -0
  492. sage/matroids/extension.cpython-314-x86_64-linux-musl.so +0 -0
  493. sage/matroids/extension.pxd +34 -0
  494. sage/matroids/extension.pyx +519 -0
  495. sage/matroids/flats_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  496. sage/matroids/flats_matroid.pxd +28 -0
  497. sage/matroids/flats_matroid.pyx +715 -0
  498. sage/matroids/gammoid.py +600 -0
  499. sage/matroids/graphic_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  500. sage/matroids/graphic_matroid.pxd +39 -0
  501. sage/matroids/graphic_matroid.pyx +2024 -0
  502. sage/matroids/lean_matrix.cpython-314-x86_64-linux-musl.so +0 -0
  503. sage/matroids/lean_matrix.pxd +126 -0
  504. sage/matroids/lean_matrix.pyx +3667 -0
  505. sage/matroids/linear_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  506. sage/matroids/linear_matroid.pxd +180 -0
  507. sage/matroids/linear_matroid.pyx +6649 -0
  508. sage/matroids/matroid.cpython-314-x86_64-linux-musl.so +0 -0
  509. sage/matroids/matroid.pxd +243 -0
  510. sage/matroids/matroid.pyx +8759 -0
  511. sage/matroids/matroids_catalog.py +190 -0
  512. sage/matroids/matroids_plot_helpers.py +890 -0
  513. sage/matroids/minor_matroid.py +480 -0
  514. sage/matroids/minorfix.h +9 -0
  515. sage/matroids/named_matroids.py +5 -0
  516. sage/matroids/rank_matroid.py +268 -0
  517. sage/matroids/set_system.cpython-314-x86_64-linux-musl.so +0 -0
  518. sage/matroids/set_system.pxd +38 -0
  519. sage/matroids/set_system.pyx +800 -0
  520. sage/matroids/transversal_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  521. sage/matroids/transversal_matroid.pxd +14 -0
  522. sage/matroids/transversal_matroid.pyx +893 -0
  523. sage/matroids/union_matroid.cpython-314-x86_64-linux-musl.so +0 -0
  524. sage/matroids/union_matroid.pxd +20 -0
  525. sage/matroids/union_matroid.pyx +331 -0
  526. sage/matroids/unpickling.cpython-314-x86_64-linux-musl.so +0 -0
  527. sage/matroids/unpickling.pyx +843 -0
  528. sage/matroids/utilities.py +809 -0
  529. sage/misc/all__sagemath_modules.py +20 -0
  530. sage/misc/c3.cpython-314-x86_64-linux-musl.so +0 -0
  531. sage/misc/c3.pyx +238 -0
  532. sage/misc/compat.py +87 -0
  533. sage/misc/element_with_label.py +173 -0
  534. sage/misc/func_persist.py +79 -0
  535. sage/misc/pickle_old.cpython-314-x86_64-linux-musl.so +0 -0
  536. sage/misc/pickle_old.pyx +19 -0
  537. sage/misc/proof.py +7 -0
  538. sage/misc/replace_dot_all.py +472 -0
  539. sage/misc/sagedoc_conf.py +168 -0
  540. sage/misc/sphinxify.py +167 -0
  541. sage/misc/test_class_pickling.py +85 -0
  542. sage/modules/all.py +42 -0
  543. sage/modules/complex_double_vector.py +25 -0
  544. sage/modules/diamond_cutting.py +380 -0
  545. sage/modules/fg_pid/all.py +1 -0
  546. sage/modules/fg_pid/fgp_element.py +456 -0
  547. sage/modules/fg_pid/fgp_module.py +2091 -0
  548. sage/modules/fg_pid/fgp_morphism.py +550 -0
  549. sage/modules/filtered_vector_space.py +1271 -0
  550. sage/modules/finite_submodule_iter.cpython-314-x86_64-linux-musl.so +0 -0
  551. sage/modules/finite_submodule_iter.pxd +27 -0
  552. sage/modules/finite_submodule_iter.pyx +452 -0
  553. sage/modules/fp_graded/all.py +1 -0
  554. sage/modules/fp_graded/element.py +346 -0
  555. sage/modules/fp_graded/free_element.py +298 -0
  556. sage/modules/fp_graded/free_homspace.py +53 -0
  557. sage/modules/fp_graded/free_module.py +1060 -0
  558. sage/modules/fp_graded/free_morphism.py +217 -0
  559. sage/modules/fp_graded/homspace.py +563 -0
  560. sage/modules/fp_graded/module.py +1340 -0
  561. sage/modules/fp_graded/morphism.py +1990 -0
  562. sage/modules/fp_graded/steenrod/all.py +1 -0
  563. sage/modules/fp_graded/steenrod/homspace.py +65 -0
  564. sage/modules/fp_graded/steenrod/module.py +477 -0
  565. sage/modules/fp_graded/steenrod/morphism.py +404 -0
  566. sage/modules/fp_graded/steenrod/profile.py +241 -0
  567. sage/modules/free_module.py +8447 -0
  568. sage/modules/free_module_element.cpython-314-x86_64-linux-musl.so +0 -0
  569. sage/modules/free_module_element.pxd +22 -0
  570. sage/modules/free_module_element.pyx +5445 -0
  571. sage/modules/free_module_homspace.py +369 -0
  572. sage/modules/free_module_integer.py +896 -0
  573. sage/modules/free_module_morphism.py +823 -0
  574. sage/modules/free_module_pseudohomspace.py +352 -0
  575. sage/modules/free_module_pseudomorphism.py +578 -0
  576. sage/modules/free_quadratic_module.py +1706 -0
  577. sage/modules/free_quadratic_module_integer_symmetric.py +1790 -0
  578. sage/modules/matrix_morphism.py +1745 -0
  579. sage/modules/misc.py +103 -0
  580. sage/modules/module_functors.py +192 -0
  581. sage/modules/multi_filtered_vector_space.py +719 -0
  582. sage/modules/ore_module.py +2208 -0
  583. sage/modules/ore_module_element.py +178 -0
  584. sage/modules/ore_module_homspace.py +147 -0
  585. sage/modules/ore_module_morphism.py +968 -0
  586. sage/modules/quotient_module.py +699 -0
  587. sage/modules/real_double_vector.py +22 -0
  588. sage/modules/submodule.py +255 -0
  589. sage/modules/tensor_operations.py +567 -0
  590. sage/modules/torsion_quadratic_module.py +1352 -0
  591. sage/modules/tutorial_free_modules.py +248 -0
  592. sage/modules/vector_complex_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  593. sage/modules/vector_complex_double_dense.pxd +6 -0
  594. sage/modules/vector_complex_double_dense.pyx +117 -0
  595. sage/modules/vector_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  596. sage/modules/vector_double_dense.pxd +6 -0
  597. sage/modules/vector_double_dense.pyx +604 -0
  598. sage/modules/vector_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  599. sage/modules/vector_integer_dense.pxd +15 -0
  600. sage/modules/vector_integer_dense.pyx +361 -0
  601. sage/modules/vector_integer_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  602. sage/modules/vector_integer_sparse.pxd +29 -0
  603. sage/modules/vector_integer_sparse.pyx +406 -0
  604. sage/modules/vector_modn_dense.cpython-314-x86_64-linux-musl.so +0 -0
  605. sage/modules/vector_modn_dense.pxd +12 -0
  606. sage/modules/vector_modn_dense.pyx +394 -0
  607. sage/modules/vector_modn_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  608. sage/modules/vector_modn_sparse.pxd +21 -0
  609. sage/modules/vector_modn_sparse.pyx +298 -0
  610. sage/modules/vector_numpy_dense.cpython-314-x86_64-linux-musl.so +0 -0
  611. sage/modules/vector_numpy_dense.pxd +15 -0
  612. sage/modules/vector_numpy_dense.pyx +304 -0
  613. sage/modules/vector_numpy_integer_dense.cpython-314-x86_64-linux-musl.so +0 -0
  614. sage/modules/vector_numpy_integer_dense.pxd +7 -0
  615. sage/modules/vector_numpy_integer_dense.pyx +54 -0
  616. sage/modules/vector_rational_dense.cpython-314-x86_64-linux-musl.so +0 -0
  617. sage/modules/vector_rational_dense.pxd +15 -0
  618. sage/modules/vector_rational_dense.pyx +387 -0
  619. sage/modules/vector_rational_sparse.cpython-314-x86_64-linux-musl.so +0 -0
  620. sage/modules/vector_rational_sparse.pxd +30 -0
  621. sage/modules/vector_rational_sparse.pyx +413 -0
  622. sage/modules/vector_real_double_dense.cpython-314-x86_64-linux-musl.so +0 -0
  623. sage/modules/vector_real_double_dense.pxd +6 -0
  624. sage/modules/vector_real_double_dense.pyx +126 -0
  625. sage/modules/vector_space_homspace.py +430 -0
  626. sage/modules/vector_space_morphism.py +989 -0
  627. sage/modules/with_basis/all.py +15 -0
  628. sage/modules/with_basis/cell_module.py +494 -0
  629. sage/modules/with_basis/indexed_element.cpython-314-x86_64-linux-musl.so +0 -0
  630. sage/modules/with_basis/indexed_element.pxd +13 -0
  631. sage/modules/with_basis/indexed_element.pyx +1058 -0
  632. sage/modules/with_basis/invariant.py +1075 -0
  633. sage/modules/with_basis/morphism.py +1636 -0
  634. sage/modules/with_basis/representation.py +2939 -0
  635. sage/modules/with_basis/subquotient.py +685 -0
  636. sage/numerical/all__sagemath_modules.py +6 -0
  637. sage/numerical/gauss_legendre.cpython-314-x86_64-linux-musl.so +0 -0
  638. sage/numerical/gauss_legendre.pyx +381 -0
  639. sage/numerical/optimize.py +910 -0
  640. sage/probability/all.py +10 -0
  641. sage/probability/probability_distribution.cpython-314-x86_64-linux-musl.so +0 -0
  642. sage/probability/probability_distribution.pyx +1242 -0
  643. sage/probability/random_variable.py +411 -0
  644. sage/quadratic_forms/all.py +4 -0
  645. sage/quadratic_forms/all__sagemath_modules.py +15 -0
  646. sage/quadratic_forms/binary_qf.py +2042 -0
  647. sage/quadratic_forms/bqf_class_group.py +748 -0
  648. sage/quadratic_forms/constructions.py +93 -0
  649. sage/quadratic_forms/count_local_2.cpython-314-x86_64-linux-musl.so +0 -0
  650. sage/quadratic_forms/count_local_2.pyx +365 -0
  651. sage/quadratic_forms/extras.py +195 -0
  652. sage/quadratic_forms/quadratic_form.py +1753 -0
  653. sage/quadratic_forms/quadratic_form__count_local_2.py +221 -0
  654. sage/quadratic_forms/quadratic_form__equivalence_testing.py +708 -0
  655. sage/quadratic_forms/quadratic_form__evaluate.cpython-314-x86_64-linux-musl.so +0 -0
  656. sage/quadratic_forms/quadratic_form__evaluate.pyx +139 -0
  657. sage/quadratic_forms/quadratic_form__local_density_congruence.py +977 -0
  658. sage/quadratic_forms/quadratic_form__local_field_invariants.py +1072 -0
  659. sage/quadratic_forms/quadratic_form__neighbors.py +424 -0
  660. sage/quadratic_forms/quadratic_form__reduction_theory.py +488 -0
  661. sage/quadratic_forms/quadratic_form__split_local_covering.py +416 -0
  662. sage/quadratic_forms/quadratic_form__ternary_Tornaria.py +657 -0
  663. sage/quadratic_forms/quadratic_form__theta.py +352 -0
  664. sage/quadratic_forms/quadratic_form__variable_substitutions.py +370 -0
  665. sage/quadratic_forms/random_quadraticform.py +209 -0
  666. sage/quadratic_forms/ternary.cpython-314-x86_64-linux-musl.so +0 -0
  667. sage/quadratic_forms/ternary.pyx +1154 -0
  668. sage/quadratic_forms/ternary_qf.py +2027 -0
  669. sage/rings/all__sagemath_modules.py +28 -0
  670. sage/rings/asymptotic/all__sagemath_modules.py +1 -0
  671. sage/rings/asymptotic/misc.py +1252 -0
  672. sage/rings/cc.py +4 -0
  673. sage/rings/cfinite_sequence.py +1306 -0
  674. sage/rings/complex_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  675. sage/rings/complex_conversion.pxd +8 -0
  676. sage/rings/complex_conversion.pyx +23 -0
  677. sage/rings/complex_double.cpython-314-x86_64-linux-musl.so +0 -0
  678. sage/rings/complex_double.pxd +21 -0
  679. sage/rings/complex_double.pyx +2654 -0
  680. sage/rings/complex_mpc.cpython-314-x86_64-linux-musl.so +0 -0
  681. sage/rings/complex_mpc.pxd +21 -0
  682. sage/rings/complex_mpc.pyx +2576 -0
  683. sage/rings/complex_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  684. sage/rings/complex_mpfr.pxd +18 -0
  685. sage/rings/complex_mpfr.pyx +3602 -0
  686. sage/rings/derivation.py +2334 -0
  687. sage/rings/finite_rings/all__sagemath_modules.py +1 -0
  688. sage/rings/finite_rings/maps_finite_field.py +191 -0
  689. sage/rings/function_field/all__sagemath_modules.py +8 -0
  690. sage/rings/function_field/derivations.py +102 -0
  691. sage/rings/function_field/derivations_rational.py +132 -0
  692. sage/rings/function_field/differential.py +853 -0
  693. sage/rings/function_field/divisor.py +1107 -0
  694. sage/rings/function_field/drinfeld_modules/action.py +199 -0
  695. sage/rings/function_field/drinfeld_modules/all.py +1 -0
  696. sage/rings/function_field/drinfeld_modules/charzero_drinfeld_module.py +673 -0
  697. sage/rings/function_field/drinfeld_modules/drinfeld_module.py +2087 -0
  698. sage/rings/function_field/drinfeld_modules/finite_drinfeld_module.py +1131 -0
  699. sage/rings/function_field/drinfeld_modules/homset.py +420 -0
  700. sage/rings/function_field/drinfeld_modules/morphism.py +820 -0
  701. sage/rings/function_field/hermite_form_polynomial.cpython-314-x86_64-linux-musl.so +0 -0
  702. sage/rings/function_field/hermite_form_polynomial.pyx +188 -0
  703. sage/rings/function_field/khuri_makdisi.cpython-314-x86_64-linux-musl.so +0 -0
  704. sage/rings/function_field/khuri_makdisi.pyx +935 -0
  705. sage/rings/invariants/all.py +4 -0
  706. sage/rings/invariants/invariant_theory.py +4597 -0
  707. sage/rings/invariants/reconstruction.py +395 -0
  708. sage/rings/polynomial/all__sagemath_modules.py +17 -0
  709. sage/rings/polynomial/integer_valued_polynomials.py +1230 -0
  710. sage/rings/polynomial/laurent_polynomial_mpair.cpython-314-x86_64-linux-musl.so +0 -0
  711. sage/rings/polynomial/laurent_polynomial_mpair.pxd +15 -0
  712. sage/rings/polynomial/laurent_polynomial_mpair.pyx +2023 -0
  713. sage/rings/polynomial/ore_function_element.py +952 -0
  714. sage/rings/polynomial/ore_function_field.py +1028 -0
  715. sage/rings/polynomial/ore_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  716. sage/rings/polynomial/ore_polynomial_element.pxd +48 -0
  717. sage/rings/polynomial/ore_polynomial_element.pyx +3145 -0
  718. sage/rings/polynomial/ore_polynomial_ring.py +1334 -0
  719. sage/rings/polynomial/polynomial_real_mpfr_dense.cpython-314-x86_64-linux-musl.so +0 -0
  720. sage/rings/polynomial/polynomial_real_mpfr_dense.pyx +788 -0
  721. sage/rings/polynomial/q_integer_valued_polynomials.py +1264 -0
  722. sage/rings/polynomial/skew_polynomial_element.cpython-314-x86_64-linux-musl.so +0 -0
  723. sage/rings/polynomial/skew_polynomial_element.pxd +9 -0
  724. sage/rings/polynomial/skew_polynomial_element.pyx +684 -0
  725. sage/rings/polynomial/skew_polynomial_finite_field.cpython-314-x86_64-linux-musl.so +0 -0
  726. sage/rings/polynomial/skew_polynomial_finite_field.pxd +19 -0
  727. sage/rings/polynomial/skew_polynomial_finite_field.pyx +1093 -0
  728. sage/rings/polynomial/skew_polynomial_finite_order.cpython-314-x86_64-linux-musl.so +0 -0
  729. sage/rings/polynomial/skew_polynomial_finite_order.pxd +10 -0
  730. sage/rings/polynomial/skew_polynomial_finite_order.pyx +567 -0
  731. sage/rings/polynomial/skew_polynomial_ring.py +908 -0
  732. sage/rings/real_double_element_gsl.cpython-314-x86_64-linux-musl.so +0 -0
  733. sage/rings/real_double_element_gsl.pxd +8 -0
  734. sage/rings/real_double_element_gsl.pyx +794 -0
  735. sage/rings/real_field.py +58 -0
  736. sage/rings/real_mpfr.cpython-314-x86_64-linux-musl.so +0 -0
  737. sage/rings/real_mpfr.pxd +29 -0
  738. sage/rings/real_mpfr.pyx +6122 -0
  739. sage/rings/ring_extension.cpython-314-x86_64-linux-musl.so +0 -0
  740. sage/rings/ring_extension.pxd +42 -0
  741. sage/rings/ring_extension.pyx +2779 -0
  742. sage/rings/ring_extension_conversion.cpython-314-x86_64-linux-musl.so +0 -0
  743. sage/rings/ring_extension_conversion.pxd +16 -0
  744. sage/rings/ring_extension_conversion.pyx +462 -0
  745. sage/rings/ring_extension_element.cpython-314-x86_64-linux-musl.so +0 -0
  746. sage/rings/ring_extension_element.pxd +21 -0
  747. sage/rings/ring_extension_element.pyx +1635 -0
  748. sage/rings/ring_extension_homset.py +64 -0
  749. sage/rings/ring_extension_morphism.cpython-314-x86_64-linux-musl.so +0 -0
  750. sage/rings/ring_extension_morphism.pxd +35 -0
  751. sage/rings/ring_extension_morphism.pyx +920 -0
  752. sage/schemes/all__sagemath_modules.py +1 -0
  753. sage/schemes/projective/all__sagemath_modules.py +1 -0
  754. sage/schemes/projective/coherent_sheaf.py +300 -0
  755. sage/schemes/projective/cohomology.py +510 -0
  756. sage/stats/all.py +15 -0
  757. sage/stats/basic_stats.py +489 -0
  758. sage/stats/distributions/all.py +7 -0
  759. sage/stats/distributions/catalog.py +34 -0
  760. sage/stats/distributions/dgs.h +50 -0
  761. sage/stats/distributions/dgs.pxd +111 -0
  762. sage/stats/distributions/dgs_bern.h +400 -0
  763. sage/stats/distributions/dgs_gauss.h +614 -0
  764. sage/stats/distributions/dgs_misc.h +104 -0
  765. sage/stats/distributions/discrete_gaussian_integer.cpython-314-x86_64-linux-musl.so +0 -0
  766. sage/stats/distributions/discrete_gaussian_integer.pxd +14 -0
  767. sage/stats/distributions/discrete_gaussian_integer.pyx +498 -0
  768. sage/stats/distributions/discrete_gaussian_lattice.py +908 -0
  769. sage/stats/distributions/discrete_gaussian_polynomial.py +141 -0
  770. sage/stats/hmm/all.py +15 -0
  771. sage/stats/hmm/chmm.cpython-314-x86_64-linux-musl.so +0 -0
  772. sage/stats/hmm/chmm.pyx +1595 -0
  773. sage/stats/hmm/distributions.cpython-314-x86_64-linux-musl.so +0 -0
  774. sage/stats/hmm/distributions.pxd +29 -0
  775. sage/stats/hmm/distributions.pyx +531 -0
  776. sage/stats/hmm/hmm.cpython-314-x86_64-linux-musl.so +0 -0
  777. sage/stats/hmm/hmm.pxd +17 -0
  778. sage/stats/hmm/hmm.pyx +1388 -0
  779. sage/stats/hmm/util.cpython-314-x86_64-linux-musl.so +0 -0
  780. sage/stats/hmm/util.pxd +7 -0
  781. sage/stats/hmm/util.pyx +165 -0
  782. sage/stats/intlist.cpython-314-x86_64-linux-musl.so +0 -0
  783. sage/stats/intlist.pxd +14 -0
  784. sage/stats/intlist.pyx +588 -0
  785. sage/stats/r.py +49 -0
  786. sage/stats/time_series.cpython-314-x86_64-linux-musl.so +0 -0
  787. sage/stats/time_series.pxd +6 -0
  788. sage/stats/time_series.pyx +2546 -0
  789. sage/tensor/all.py +2 -0
  790. sage/tensor/modules/all.py +8 -0
  791. sage/tensor/modules/alternating_contr_tensor.py +761 -0
  792. sage/tensor/modules/comp.py +5598 -0
  793. sage/tensor/modules/ext_pow_free_module.py +824 -0
  794. sage/tensor/modules/finite_rank_free_module.py +3589 -0
  795. sage/tensor/modules/format_utilities.py +333 -0
  796. sage/tensor/modules/free_module_alt_form.py +858 -0
  797. sage/tensor/modules/free_module_automorphism.py +1207 -0
  798. sage/tensor/modules/free_module_basis.py +1074 -0
  799. sage/tensor/modules/free_module_element.py +284 -0
  800. sage/tensor/modules/free_module_homset.py +652 -0
  801. sage/tensor/modules/free_module_linear_group.py +564 -0
  802. sage/tensor/modules/free_module_morphism.py +1581 -0
  803. sage/tensor/modules/free_module_tensor.py +3289 -0
  804. sage/tensor/modules/reflexive_module.py +386 -0
  805. sage/tensor/modules/tensor_free_module.py +780 -0
  806. sage/tensor/modules/tensor_free_submodule.py +538 -0
  807. sage/tensor/modules/tensor_free_submodule_basis.py +140 -0
  808. sage/tensor/modules/tensor_with_indices.py +1043 -0
@@ -0,0 +1,1058 @@
1
+ # sage_setup: distribution = sagemath-modules
2
+ r"""
3
+ An element in an indexed free module
4
+
5
+ AUTHORS:
6
+
7
+ - Travis Scrimshaw (03-2017): Moved code from :mod:`sage.combinat.free_module`.
8
+ - Travis Scrimshaw (29-08-2022): Implemented ``copy`` as the identity map.
9
+ """
10
+
11
+ # ****************************************************************************
12
+ # Copyright (C) 2017, 2022 Travis Scrimshaw <tcscrims at gmail.com>
13
+ #
14
+ # This program is free software: you can redistribute it and/or modify
15
+ # it under the terms of the GNU General Public License as published by
16
+ # the Free Software Foundation, either version 2 of the License, or
17
+ # (at your option) any later version.
18
+ # https://www.gnu.org/licenses/
19
+ # ****************************************************************************
20
+
21
+ from sage.structure.element cimport parent
22
+ from sage.structure.richcmp cimport richcmp, rich_to_bool
23
+ from cpython.object cimport Py_NE, Py_EQ
24
+
25
+ from sage.misc.repr import repr_lincomb
26
+ from sage.misc.superseded import deprecation
27
+ from sage.typeset.ascii_art import AsciiArt, empty_ascii_art, ascii_art
28
+ from sage.typeset.unicode_art import UnicodeArt, empty_unicode_art, unicode_art
29
+ from sage.data_structures.blas_dict cimport add, negate, scal, axpy
30
+ from sage.categories.modules import _Fields
31
+
32
+
33
+ cdef class IndexedFreeModuleElement(ModuleElement):
34
+ r"""
35
+ Element class for :class:`~sage.combinat.free_module.CombinatorialFreeModule`.
36
+
37
+ TESTS::
38
+
39
+ sage: import collections.abc
40
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
41
+ sage: B = F.basis()
42
+ sage: f = B['a'] + 3*B['c']; f
43
+ B['a'] + 3*B['c']
44
+ sage: isinstance(f, collections.abc.Sized)
45
+ True
46
+ sage: isinstance(f, collections.abc.Iterable)
47
+ True
48
+ sage: isinstance(f, collections.abc.Collection) # known bug - will be fixed by removing __contains__
49
+ False
50
+ """
51
+ def __init__(self, M, x):
52
+ """
53
+ Create a combinatorial module element.
54
+
55
+ This should never be called directly, but only through the
56
+ parent combinatorial free module's :meth:`__call__` method.
57
+
58
+ TESTS::
59
+
60
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
61
+ sage: B = F.basis()
62
+ sage: f = B['a'] + 3*B['c']; f
63
+ B['a'] + 3*B['c']
64
+ sage: f == loads(dumps(f))
65
+ True
66
+ """
67
+ ModuleElement.__init__(self, M)
68
+ self._monomial_coefficients = x
69
+ self._hash_set = False
70
+
71
+ def __iter__(self):
72
+ """
73
+ EXAMPLES::
74
+
75
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
76
+ sage: B = F.basis()
77
+ sage: f = B['a'] + 3*B['c']
78
+ sage: [i for i in sorted(f)]
79
+ [('a', 1), ('c', 3)]
80
+
81
+ sage: s = SymmetricFunctions(QQ).schur() # needs sage.combinat
82
+ sage: a = s([2,1]) + s([3]) # needs sage.combinat
83
+ sage: [i for i in sorted(a)] # needs sage.combinat
84
+ [([2, 1], 1), ([3], 1)]
85
+ """
86
+ return iter(self._monomial_coefficients.items())
87
+
88
+ def __contains__(self, x):
89
+ """
90
+ Return whether or not a combinatorial object ``x`` indexing a basis
91
+ element is in the support of ``self``.
92
+
93
+ EXAMPLES::
94
+
95
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
96
+ sage: B = F.basis()
97
+ sage: f = B['a'] + 3*B['c']
98
+ sage: 'a' in f
99
+ doctest:warning...
100
+ DeprecationWarning: using 'index in vector' is deprecated; use 'index in vector.support()' instead
101
+ See https://github.com/sagemath/sage/issues/34509 for details.
102
+ True
103
+ sage: 'b' in f
104
+ False
105
+
106
+ sage: # needs sage.combinat
107
+ sage: s = SymmetricFunctions(QQ).schur()
108
+ sage: a = s([2,1]) + s([3])
109
+ sage: Partition([2,1]) in a
110
+ True
111
+ sage: Partition([1,1,1]) in a
112
+ False
113
+ """
114
+ deprecation(34509, "using 'index in vector' is deprecated; use 'index in vector.support()' instead")
115
+ return x in self.support()
116
+
117
+ def __hash__(self):
118
+ """
119
+ Return the hash value for ``self``.
120
+
121
+ The result is cached.
122
+
123
+ EXAMPLES::
124
+
125
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
126
+ sage: B = F.basis()
127
+ sage: f = B['a'] + 3*B['c']
128
+ sage: hash(f) == hash(B['a'] + 3*B['c'])
129
+ True
130
+ sage: hash(f) == hash(B['a'] + 4*B['c'])
131
+ False
132
+
133
+ sage: # needs sage.combinat
134
+ sage: F = RootSystem(['A',2]).ambient_space()
135
+ sage: f = F.simple_root(0)
136
+ sage: hash(f) == hash(F.simple_root(0))
137
+ True
138
+ sage: hash(f) == hash(F.simple_root(1))
139
+ False
140
+
141
+ This uses the recipe that was proposed for frozendicts in
142
+ :pep:`416` (and adds the hash of the parent). This recipe
143
+ relies on the hash function for frozensets which uses tricks
144
+ to mix the hash values of the items in case they are similar.
145
+
146
+ .. TODO::
147
+
148
+ It would be desirable to make the hash value depend on the
149
+ hash value of the parent. See :issue:`15959`.
150
+ """
151
+ if not self._hash_set:
152
+ self._hash = hash(frozenset(self._monomial_coefficients.items()))
153
+ self._hash_set = True
154
+ return self._hash
155
+
156
+ def __reduce__(self):
157
+ """
158
+ For pickling.
159
+
160
+ EXAMPLES::
161
+
162
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
163
+ sage: loads(dumps(F.an_element())) == F.an_element()
164
+ True
165
+ """
166
+ return (_unpickle_element, (self._parent, self._monomial_coefficients))
167
+
168
+ def __setstate__(self, state):
169
+ r"""
170
+ For unpickling old ``CombinatorialFreeModuleElement`` classes.
171
+
172
+ See :issue:`22632` and ``register_unpickle_override`` below.
173
+
174
+ EXAMPLES::
175
+
176
+ sage: loads(b'x\x9c\x95R\xcbn\x131\x14\xd5\x00\r\x89KK\xcb\xa3'
177
+ ....: b'\xbc\xa1\xbc\xd3\xcd,\xe0\x0f\n\xad\xc4\xa2Y\x0c\xb2XZ'
178
+ ....: b'\x8e\xe7N\xe6\x8a\xb1\xa7\xd7\x0f\x91,F\x82E&\xe2\xafq3'
179
+ ....: b'\x13\xa4"X\xb0\xb1}\xae}\xce=\xf7\xc8\xdf\xaf(\'g\x90:o'
180
+ ....: b'\x83\xf2\xc1B\x9a/\x8c\xd4\xa8\x84\xaa\xa4s\xec2\xa2d'
181
+ ....: b'\xcc\xdf\x7f\xa8\xf5\x14\x8d\xf4\xb5EY\x9dZ\x80\xb3:'
182
+ ....: b'\x0f\x15\x88o\xe8K\xa1\xa4\x87Ym\x17)T\xa0\xc1\xf8\x8eH}'
183
+ ....: b'\x17\xd5S\xd3"\xd2\x84^\xf3\xd8?\xf4N:\x01FW\x95\x10\xd3'
184
+ ....: b'\x80\x95G#\x04\x9b\x81\x97\xde[F\xd7:I\x8dN\xad\x17\xa6dU'
185
+ ....: b'\t\r\xbe\xacsF[\xe5\xd6\x9f\x83\x05\x83\x14@X8\xb7\xe0'
186
+ ....: b'\xa2\xb2\xf4X\x1b\x16\x8c\x85<(`4\xe8=v\x13 \xb8\xb43'
187
+ ....: b'\xe8\xd8Y\xbf\xd3\xf5\xee\x89E3s)\x9a\xf8\x10\xac\xb8@'
188
+ ....: b'\xecS\x07\xb2\x8b3\r\x8f2\x1a-\x1bb|\x98\xa3;\x97^\x95'
189
+ ....: b'\xb4\xfd\xd3\xad\xe8FF;|\xbbKJ\xce\xb1\xd6\xb4\xcbG_":'
190
+ ....: b'\x96\x0e\x1d\xdd\\e\xb4W\xee\xf2\xfdS4\xe8\xe1#\xc6\x00'
191
+ ....: b'\\4)+\xda\x8fW\xb7\xf8\xce\xe5To\xb7\x19\xddi\xe9\xeed2'
192
+ ....: b'\xf1\x19\x1d\x1c\xfd\xa0{\xe5\xe0\xff\x93ft\xbf\x1cm\x88'
193
+ ....: b'\x0e\xbcK\x8bu\x7f\x01&h\xb01\x8f\\\xc42\xeb\\\x9d\xfc.~'
194
+ ....: b'\x8e5z\xc0\x939O\x16-=\\6+z\x94\xd1\xe3\xb6\xa1\'c>\xdc'
195
+ ....: b'\xfc\x04zZ\xee\xf1A\xcc\xbc\xc09=\xe3\xc9qX\xd1aF\xcf'
196
+ ....: b'\x1bz\xc1\x0f\xa23S\xeb\xe8F\xa8\x1a\x8a\x02\x15\xc6\xe9'
197
+ ....: b'\x1c\xbdl\xe8\xd58\xaa\xfe%n\xa6\xe5W\x10\x1b@\xafy\xf2n'
198
+ ....: b'\x99\xd1\x9b\xe8\xa2\xec\xcfo\x83k\xa7\xe9/\xc1\xe1\t\x17')
199
+ 2*B['x'] + 2*B['y']
200
+ """
201
+ self._set_parent(state[0])
202
+ for k, v in state[1].items():
203
+ setattr(self, k, v)
204
+
205
+ def __copy__(self):
206
+ r"""
207
+ Return ``self`` since ``self`` is immutable.
208
+
209
+ EXAMPLES::
210
+
211
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
212
+ sage: x = F.an_element()
213
+ sage: copy(x) is x
214
+ True
215
+ """
216
+ return self
217
+
218
+ def __deepcopy__(self, memo=None):
219
+ r"""
220
+ Return ``self`` since ``self`` is immutable.
221
+
222
+ EXAMPLES::
223
+
224
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
225
+ sage: x = F.an_element()
226
+ sage: deepcopy(x) is x
227
+ True
228
+ """
229
+ return self
230
+
231
+ cpdef dict monomial_coefficients(self, bint copy=True):
232
+ """
233
+ Return the internal dictionary which has the combinatorial objects
234
+ indexing the basis as keys and their corresponding coefficients as
235
+ values.
236
+
237
+ INPUT:
238
+
239
+ - ``copy`` -- boolean (default: ``True``); if ``self`` is internally
240
+ represented by a dictionary ``d``, then make a copy of ``d``.
241
+ If ``False``, then this can cause undesired behavior by
242
+ mutating ``d``.
243
+
244
+ EXAMPLES::
245
+
246
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
247
+ sage: B = F.basis()
248
+ sage: f = B['a'] + 3*B['c']
249
+ sage: d = f.monomial_coefficients()
250
+ sage: d['a']
251
+ 1
252
+ sage: d['c']
253
+ 3
254
+
255
+ To run through the monomials of an element, it is better to
256
+ use the idiom::
257
+
258
+ sage: for (t,c) in f:
259
+ ....: print("{} {}".format(t,c))
260
+ a 1
261
+ c 3
262
+
263
+ ::
264
+
265
+ sage: # needs sage.combinat
266
+ sage: s = SymmetricFunctions(QQ).schur()
267
+ sage: a = s([2,1])+2*s([3,2])
268
+ sage: d = a.monomial_coefficients()
269
+ sage: type(d)
270
+ <... 'dict'>
271
+ sage: d[ Partition([2,1]) ]
272
+ 1
273
+ sage: d[ Partition([3,2]) ]
274
+ 2
275
+ """
276
+ if copy:
277
+ return dict(self._monomial_coefficients)
278
+ return self._monomial_coefficients
279
+
280
+ def _sorted_items_for_printing(self):
281
+ """
282
+ Return the items (i.e. terms) of ``self``, sorted for printing.
283
+
284
+ EXAMPLES::
285
+
286
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
287
+ sage: B = F.basis()
288
+ sage: f = B['a'] + 2*B['c'] + 3 * B['b']
289
+ sage: f._sorted_items_for_printing()
290
+ [('a', 1), ('b', 3), ('c', 2)]
291
+ sage: F.print_options(sorting_reverse=True)
292
+ sage: f._sorted_items_for_printing()
293
+ [('c', 2), ('b', 3), ('a', 1)]
294
+ sage: F.print_options(sorting_reverse=False) #reset to original state
295
+
296
+ .. SEEALSO:: :meth:`_repr_`, :meth:`_latex_`, :meth:`print_options`
297
+ """
298
+ print_options = self._parent.print_options()
299
+ v = list(self._monomial_coefficients.items())
300
+ try:
301
+ v.sort(key=lambda monomial_coeff:
302
+ print_options['sorting_key'](monomial_coeff[0]),
303
+ reverse=print_options['sorting_reverse'])
304
+ except Exception: # Sorting the output is a plus, but if we can't, no big deal
305
+ pass
306
+ return v
307
+
308
+ def _repr_(self):
309
+ """
310
+ EXAMPLES::
311
+
312
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b', 'c'], prefix='F')
313
+ sage: e = F.basis()
314
+ sage: e['a'] + 2*e['b'] # indirect doctest
315
+ F['a'] + 2*F['b']
316
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b', 'c'], prefix='')
317
+ sage: e = F.basis()
318
+ sage: e['a'] + 2*e['b'] # indirect doctest
319
+ ['a'] + 2*['b']
320
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b', 'c'], prefix='', scalar_mult=' ', bracket=False)
321
+ sage: e = F.basis()
322
+ sage: e['a'] + 2*e['b'] # indirect doctest
323
+ 'a' + 2 'b'
324
+
325
+ Controling the order of terms by providing a comparison
326
+ function on elements of the support::
327
+
328
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b', 'c'],
329
+ ....: sorting_reverse=True)
330
+ sage: e = F.basis()
331
+ sage: e['a'] + 3*e['b'] + 2*e['c']
332
+ 2*B['c'] + 3*B['b'] + B['a']
333
+
334
+ sage: F = CombinatorialFreeModule(QQ, ['ac', 'ba', 'cb'],
335
+ ....: sorting_key=lambda x: x[1])
336
+ sage: e = F.basis()
337
+ sage: e['ac'] + 3*e['ba'] + 2*e['cb']
338
+ 3*B['ba'] + 2*B['cb'] + B['ac']
339
+ """
340
+ return repr_lincomb(self._sorted_items_for_printing(),
341
+ scalar_mult=self._parent._print_options['scalar_mult'],
342
+ repr_monomial = self._parent._repr_term,
343
+ strip_one = True)
344
+
345
+ def _ascii_art_(self):
346
+ r"""
347
+ TESTS::
348
+
349
+ sage: # needs sage.combinat
350
+ sage: M = QuasiSymmetricFunctions(QQ).M()
351
+ sage: ascii_art(M[1,3]**2) # indirect doctest
352
+ 4*M + 2*M + 2*M + 2*M + 2*M + M
353
+ *** ****** *** *** *** ******
354
+ *** * * **** *** **
355
+ * * *** * **
356
+ * *
357
+ sage: ascii_art(M.zero())
358
+ 0
359
+ sage: DA = DescentAlgebra(QQ, 4)
360
+ sage: ascii_art(DA.an_element())
361
+ 2*B + 2*B + 3*B
362
+ * ** *
363
+ * * **
364
+ * * *
365
+ *
366
+
367
+ We can get the ascii art when there is no ``one_basis`` method
368
+ (and the basis keys do not compare with ``None``)::
369
+
370
+ sage: # needs sage.groups
371
+ sage: DC3 = groups.permutation.DiCyclic(3)
372
+ sage: L = DC3.regular_representation(QQ, side='left')
373
+ sage: E2 = L.exterior_power(2)
374
+ sage: ascii_art(E2.an_element())
375
+ 2*()/\(5,6,7) + 2*()/\(5,7,6) + 3*()/\(1,2)(3,4)
376
+
377
+ We can also get the ascii art when ``one_basis``
378
+ is ``NotImplemented``::
379
+
380
+ sage: # needs sage.combinat sage.graphs sage.modules
381
+ sage: TL = TemperleyLiebAlgebra(8, -1, QQ)
382
+ sage: C = TL.cellular_basis()
383
+ sage: ascii_art(list(C.basis())[0])
384
+ C
385
+ ( .-. .-. .-. .-. .-. .-. .-. .-. )
386
+ ( 0, o o o o o o o o, o o o o o o o o )
387
+ """
388
+ from sage.misc.repr import coeff_repr
389
+ terms = self._sorted_items_for_printing()
390
+ scalar_mult = self._parent._print_options['scalar_mult']
391
+ repr_monomial = self._parent._ascii_art_term
392
+ strip_one = True
393
+
394
+ if repr_monomial is None:
395
+ repr_monomial = str
396
+
397
+ chunks = []
398
+ first = True
399
+
400
+ if scalar_mult is None:
401
+ scalar_mult = "*"
402
+
403
+ one_basis = None
404
+ try:
405
+ if self._parent.one_basis is not NotImplemented:
406
+ one_basis = self._parent.one_basis()
407
+ except (AttributeError, NotImplementedError, ValueError, TypeError):
408
+ pass
409
+
410
+ for monomial, c in terms:
411
+ b = repr_monomial(monomial) # PCR
412
+ if c != 0:
413
+ break_points = []
414
+ coeff = coeff_repr(c, False)
415
+ if coeff != "0":
416
+ if coeff == "1":
417
+ coeff = ""
418
+ elif coeff == "-1":
419
+ coeff = "-"
420
+ elif b._l > 0:
421
+ if one_basis is not None and len(coeff) > 0 and monomial == one_basis and strip_one:
422
+ b = empty_ascii_art # ""
423
+ else:
424
+ b = AsciiArt([scalar_mult]) + b
425
+ if not first:
426
+ if len(coeff) > 0 and coeff[0] == "-":
427
+ coeff = " - %s" % coeff[1:]
428
+ else:
429
+ coeff = " + %s" % coeff
430
+ break_points = [2]
431
+ else:
432
+ coeff = "%s" % coeff
433
+ if coeff:
434
+ chunks.append(AsciiArt([coeff], break_points))
435
+ if b._l:
436
+ chunks.append(b)
437
+ first = False
438
+ s = ascii_art(*chunks)
439
+ if first:
440
+ return AsciiArt(["0"])
441
+ if s == empty_ascii_art:
442
+ return AsciiArt(["1"])
443
+ return s
444
+
445
+ def _unicode_art_(self):
446
+ r"""
447
+ TESTS::
448
+
449
+ sage: M = QuasiSymmetricFunctions(QQ).M() # needs sage.combinat
450
+ sage: unicode_art(M[1,1]**2) # indirect doctest # needs sage.combinat
451
+ 6*M + 2*M + 2*M + 2*M + M
452
+ ┌┐ ┌┬┐ ┌┐ ┌┐ ┌┬┐
453
+ ├┤ ├┼┘ ┌┼┤ ├┤ ┌┼┼┘
454
+ ├┤ ├┤ ├┼┘ ┌┼┤ └┴┘
455
+ ├┤ └┘ └┘ └┴┘
456
+ └┘
457
+
458
+ The following test failed before :issue:`26850`::
459
+
460
+ sage: unicode_art([M.zero()]) # indirect doctest # needs sage.combinat
461
+ [ 0 ]
462
+
463
+ We can get the unicode art when there is no ``one_basis`` method
464
+ (and the basis keys do not compare with ``None``)::
465
+
466
+ sage: # needs sage.groups
467
+ sage: DC3 = groups.permutation.DiCyclic(3)
468
+ sage: L = DC3.regular_representation(QQ, side='left')
469
+ sage: E2 = L.exterior_power(2)
470
+ sage: unicode_art(E2.an_element())
471
+ 2*()∧(5,6,7) + 2*()∧(5,7,6) + 3*()∧(1,2)(3,4)
472
+
473
+ We can also get the unicode art when ``one_basis``
474
+ is ``NotImplemented``::
475
+
476
+ sage: # needs sage.combinat sage.graphs sage.modules
477
+ sage: TL = TemperleyLiebAlgebra(8, -1, QQ)
478
+ sage: C = TL.cellular_basis()
479
+ sage: unicode_art(list(C.basis())[0])
480
+ C
481
+ ⎛ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ╭─╮ ⎞
482
+ ⎝ 0, ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬, ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⚬ ⎠
483
+ """
484
+ from sage.misc.repr import coeff_repr
485
+ terms = self._sorted_items_for_printing()
486
+ scalar_mult = self._parent._print_options['scalar_mult']
487
+ repr_monomial = self._parent._unicode_art_term
488
+ strip_one = True
489
+
490
+ if repr_monomial is None:
491
+ repr_monomial = str
492
+
493
+ chunks = []
494
+ first = True
495
+
496
+ if scalar_mult is None:
497
+ scalar_mult = "*"
498
+
499
+ one_basis = None
500
+ try:
501
+ if self._parent.one_basis is not NotImplemented:
502
+ one_basis = self._parent.one_basis()
503
+ except (AttributeError, NotImplementedError, ValueError, TypeError):
504
+ pass
505
+
506
+ for (monomial, c) in terms:
507
+ b = repr_monomial(monomial) # PCR
508
+ if c != 0:
509
+ break_points = []
510
+ coeff = coeff_repr(c, False)
511
+ if coeff != "0":
512
+ if coeff == "1":
513
+ coeff = ""
514
+ elif coeff == "-1":
515
+ coeff = "-"
516
+ elif b._l > 0:
517
+ if one_basis is not None and len(coeff) > 0 and monomial == one_basis and strip_one:
518
+ b = empty_unicode_art # ""
519
+ else:
520
+ b = UnicodeArt([scalar_mult]) + b
521
+ if not first:
522
+ if len(coeff) > 0 and coeff[0] == "-":
523
+ coeff = " - %s" % coeff[1:]
524
+ else:
525
+ coeff = " + %s" % coeff
526
+ break_points = [2]
527
+ else:
528
+ coeff = "%s" % coeff
529
+ if coeff:
530
+ chunks.append(UnicodeArt([coeff], break_points))
531
+ if b._l:
532
+ chunks.append(b)
533
+ first = False
534
+ s = unicode_art(*chunks)
535
+ if first:
536
+ return UnicodeArt(["0"])
537
+ elif s == empty_unicode_art:
538
+ return UnicodeArt(["1"])
539
+ else:
540
+ return s
541
+
542
+ def _latex_(self):
543
+ r"""
544
+ EXAMPLES::
545
+
546
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
547
+ sage: B = F.basis()
548
+ sage: f = B['a'] + 3*B['c']
549
+ sage: latex(f)
550
+ B_{a} + 3 B_{c}
551
+
552
+ ::
553
+
554
+ sage: QS3 = SymmetricGroupAlgebra(QQ, 3) # needs sage.combinat
555
+ sage: a = 2 + QS3([2,1,3]) # needs sage.combinat
556
+ sage: latex(a) #indirect doctest # needs sage.combinat
557
+ 2 [1, 2, 3] + [2, 1, 3]
558
+
559
+ ::
560
+
561
+ sage: F = CombinatorialFreeModule(QQ, ['a','b'], prefix='beta', latex_prefix='\\beta')
562
+ sage: x = F.an_element()
563
+ sage: x
564
+ 2*beta['a'] + 2*beta['b']
565
+ sage: latex(x)
566
+ 2 \beta_{a} + 2 \beta_{b}
567
+
568
+ Controling the order of terms by providing a comparison
569
+ function on elements of the support::
570
+
571
+ sage: F = CombinatorialFreeModule(QQ, ['a', 'b', 'c'],
572
+ ....: sorting_reverse=True)
573
+ sage: e = F.basis()
574
+ sage: latex(e['a'] + 3*e['b'] + 2*e['c'])
575
+ 2 B_{c} + 3 B_{b} + B_{a}
576
+
577
+ sage: F = CombinatorialFreeModule(QQ, ['ac', 'ba', 'cb'],
578
+ ....: sorting_key=lambda x: x[1])
579
+ sage: e = F.basis()
580
+ sage: latex(e['ac'] + 3*e['ba'] + 2*e['cb'])
581
+ 3 B_{ba} + 2 B_{cb} + B_{ac}
582
+ """
583
+ return repr_lincomb(self._sorted_items_for_printing(),
584
+ scalar_mult = self._parent._print_options['scalar_mult'],
585
+ latex_scalar_mult = self._parent._print_options['latex_scalar_mult'],
586
+ repr_monomial = self._parent._latex_term,
587
+ is_latex=True, strip_one=True)
588
+
589
+ cpdef _richcmp_(self, other, int op):
590
+ """
591
+ Rich comparison for equal parents.
592
+
593
+ EXAMPLES::
594
+
595
+ sage: F1 = CombinatorialFreeModule(QQ, [1, 2, 3])
596
+ sage: F2 = CombinatorialFreeModule(QQ, [1, 2, 3], prefix = "g")
597
+ sage: F1.zero() == F1.zero()
598
+ True
599
+ sage: F1.zero() == F1.an_element()
600
+ False
601
+ sage: F1.an_element() == F1.an_element()
602
+ True
603
+ sage: F1.an_element() is None
604
+ False
605
+
606
+ ::
607
+
608
+ sage: F3 = CombinatorialFreeModule(QQ, ['a','b','c'])
609
+ sage: F3.an_element() != F3.an_element()
610
+ False
611
+ sage: F3.an_element() != F3.zero()
612
+ True
613
+
614
+ ::
615
+
616
+ sage: # needs sage.combinat
617
+ sage: s = SymmetricFunctions(QQ).schur()
618
+ sage: a = s([2,1])
619
+ sage: b = s([1,1,1])
620
+ sage: a == b
621
+ False
622
+
623
+ .. TODO::
624
+
625
+ Currently, if ``self`` and ``other`` do not have the same parent,
626
+ seemingly equal elements do not evaluate equal, since conversions
627
+ between different modules have not been established.
628
+
629
+ ::
630
+
631
+ sage: F1.zero() == 0
632
+ True
633
+ sage: F1(0)
634
+ 0
635
+
636
+ ::
637
+
638
+ sage: F1.zero() == F2.zero()
639
+ False
640
+ sage: F1(F2.zero())
641
+ Traceback (most recent call last):
642
+ ...
643
+ TypeError: do not know how to make x (= 0) an element of self (=Free module generated by {1, 2, 3} over Rational Field)
644
+
645
+ sage: # needs sage.combinat
646
+ sage: F = AlgebrasWithBasis(QQ).example()
647
+ sage: F.one() == 1
648
+ True
649
+ sage: 1 == F.one()
650
+ True
651
+ sage: 2 * F.one() == int(2)
652
+ True
653
+ sage: int(2) == 2 * F.one()
654
+ True
655
+
656
+ sage: S = SymmetricFunctions(QQ); s = S.s(); p = S.p() # needs sage.combinat
657
+ sage: p[2] == s[2] - s[1, 1] # needs sage.combinat
658
+ True
659
+ sage: p[2] == s[2] # needs sage.combinat
660
+ False
661
+
662
+ This feature is disputable, in particular since it can make
663
+ equality testing costly. It may be removed at some point.
664
+
665
+ Equality testing can be a bit tricky when the order of terms
666
+ can vary because their indices are incomparable with
667
+ ``cmp``. The following test did fail before :issue:`12489` ::
668
+
669
+ sage: # needs sage.combinat
670
+ sage: F = CombinatorialFreeModule(QQ, Subsets([1,2,3]))
671
+ sage: x = F.an_element()
672
+ sage: (x+F.zero()).terms() # random
673
+ [2*B[{1}], 3*B[{2}], B[{}]]
674
+ sage: x.terms() # random
675
+ [2*B[{1}], B[{}], 3*B[{2}]]
676
+ sage: x+F.zero() == x
677
+ True
678
+
679
+ TESTS::
680
+
681
+ sage: TestSuite(F1).run()
682
+ sage: TestSuite(F).run() # needs sage.combinat
683
+ """
684
+ cdef IndexedFreeModuleElement elt = <IndexedFreeModuleElement> other
685
+
686
+ if self._monomial_coefficients == elt._monomial_coefficients:
687
+ return rich_to_bool(op, 0)
688
+
689
+ # Not equal
690
+ if op == Py_EQ:
691
+ return False
692
+ if op == Py_NE:
693
+ return True
694
+
695
+ v = sorted(self._monomial_coefficients.items())
696
+ w = sorted(elt._monomial_coefficients.items())
697
+ return richcmp(v, w, op)
698
+
699
+ cpdef _add_(self, other):
700
+ """
701
+ EXAMPLES::
702
+
703
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
704
+ sage: B = F.basis()
705
+ sage: B['a'] + 3*B['c']
706
+ B['a'] + 3*B['c']
707
+
708
+ ::
709
+
710
+ sage: # needs sage.combinat
711
+ sage: s = SymmetricFunctions(QQ).schur()
712
+ sage: s([2,1]) + s([5,4]) # indirect doctest
713
+ s[2, 1] + s[5, 4]
714
+ sage: a = s([2,1]) + 0
715
+ sage: len(a.monomial_coefficients())
716
+ 1
717
+ """
718
+ return type(self)(self._parent,
719
+ add(self._monomial_coefficients,
720
+ (<IndexedFreeModuleElement>other)._monomial_coefficients))
721
+
722
+ cpdef _neg_(self):
723
+ """
724
+ EXAMPLES::
725
+
726
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
727
+ sage: B = F.basis()
728
+ sage: f = B['a'] + 3*B['c']
729
+ sage: -f
730
+ -B['a'] - 3*B['c']
731
+
732
+ ::
733
+
734
+ sage: s = SymmetricFunctions(QQ).schur() # needs sage.combinat
735
+ sage: -s([2,1]) # indirect doctest # needs sage.combinat
736
+ -s[2, 1]
737
+ """
738
+ return type(self)(self._parent, negate(self._monomial_coefficients))
739
+
740
+ cpdef _sub_(self, other):
741
+ """
742
+ EXAMPLES::
743
+
744
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
745
+ sage: B = F.basis()
746
+ sage: B['a'] - 3*B['c']
747
+ B['a'] - 3*B['c']
748
+
749
+ ::
750
+
751
+ sage: s = SymmetricFunctions(QQ).schur() # needs sage.combinat
752
+ sage: s([2,1]) - s([5,4]) # indirect doctest # needs sage.combinat
753
+ s[2, 1] - s[5, 4]
754
+ """
755
+ return type(self)(self._parent,
756
+ axpy(-1,
757
+ (<IndexedFreeModuleElement>other)._monomial_coefficients,
758
+ self._monomial_coefficients))
759
+
760
+ def __getitem__(self, m):
761
+ """
762
+ Return the coefficient of ``m`` in ``self``.
763
+
764
+ EXAMPLES::
765
+
766
+ sage: # needs sage.combinat
767
+ sage: p = Partition([2,1])
768
+ sage: q = Partition([1,1,1])
769
+ sage: s = SymmetricFunctions(QQ).schur()
770
+ sage: a = s(p)
771
+ sage: a[p]
772
+ 1
773
+ sage: a[q]
774
+ 0
775
+ sage: a[[2,1]]
776
+ Traceback (most recent call last):
777
+ ...
778
+ TypeError: ...unhashable type: 'list'...
779
+ """
780
+ res = self._monomial_coefficients.get(m)
781
+ if res is None:
782
+ return self.base_ring().zero()
783
+ return res
784
+
785
+ def _vector_(self, new_base_ring=None, order=None, sparse=False):
786
+ r"""
787
+ Return ``self`` as a vector.
788
+
789
+ INPUT:
790
+
791
+ - ``new_base_ring`` -- a ring (default: ``None``)
792
+ - ``order`` -- (optional) an ordering of the support of ``self``
793
+ - ``sparse`` -- boolean (default: ``False``); whether to return a sparse
794
+ vector or a dense vector
795
+
796
+ OUTPUT: a :func:`FreeModule` vector
797
+
798
+ .. WARNING:: This will crash/run forever if ``self`` is infinite dimensional!
799
+
800
+ .. SEEALSO::
801
+
802
+ - :func:`vector`
803
+ - :meth:`CombinatorialFreeModule.get_order`
804
+ - :meth:`CombinatorialFreeModule.from_vector`
805
+ - :meth:`CombinatorialFreeModule._dense_free_module`
806
+
807
+ EXAMPLES::
808
+
809
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
810
+ sage: B = F.basis()
811
+ sage: f = B['a'] - 3*B['c']
812
+ sage: f._vector_()
813
+ (1, 0, -3)
814
+
815
+ One can use equivalently::
816
+
817
+ sage: f.to_vector()
818
+ (1, 0, -3)
819
+ sage: vector(f)
820
+ (1, 0, -3)
821
+
822
+ More examples::
823
+
824
+ sage: # needs sage.combinat
825
+ sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
826
+ sage: a = 2*QS3([1,2,3]) + 4*QS3([3,2,1])
827
+ sage: a._vector_()
828
+ (2, 0, 0, 0, 0, 4)
829
+ sage: a.to_vector()
830
+ (2, 0, 0, 0, 0, 4)
831
+ sage: vector(a)
832
+ (2, 0, 0, 0, 0, 4)
833
+ sage: a == QS3.from_vector(a.to_vector())
834
+ True
835
+ sage: a.to_vector(sparse=True)
836
+ (2, 0, 0, 0, 0, 4)
837
+
838
+ If ``new_base_ring`` is specified, then a vector over
839
+ ``new_base_ring`` is returned::
840
+
841
+ sage: a._vector_(RDF) # needs sage.combinat
842
+ (2.0, 0.0, 0.0, 0.0, 0.0, 4.0)
843
+
844
+ .. NOTE::
845
+
846
+ :issue:`13406`: the current implementation has been optimized, at
847
+ the price of breaking the encapsulation for FreeModule
848
+ elements creation, with the following use case as metric,
849
+ on a 2008' Macbook Pro::
850
+
851
+ sage: F = CombinatorialFreeModule(QQ, range(10))
852
+ sage: f = F.an_element()
853
+ sage: %timeit f._vector_() # not tested
854
+ 625 loops, best of 3: 17.5 micros per loop
855
+
856
+ Other use cases may call for different or further
857
+ optimizations.
858
+ """
859
+ free_module = self._parent._dense_free_module(new_base_ring)
860
+ if sparse:
861
+ free_module = free_module.sparse_module()
862
+ d = self._monomial_coefficients
863
+ zero = free_module.base_ring().zero()
864
+ if sparse:
865
+ if order is None:
866
+ order = {k: i for i, k in enumerate(self._parent.get_order())}
867
+ return free_module.element_class(free_module,
868
+ {order[k]: c for k, c in d.items()},
869
+ coerce=True, copy=False)
870
+ else:
871
+ if order is None:
872
+ order = self._parent.get_order()
873
+ return free_module.element_class(free_module,
874
+ [d.get(m, zero) for m in order],
875
+ coerce=True, copy=False)
876
+
877
+ to_vector = _vector_
878
+
879
+ cpdef _acted_upon_(self, scalar, bint self_on_left):
880
+ """
881
+ Return the action of ``scalar`` (an element of the base ring) on
882
+ ``self``.
883
+
884
+ EXAMPLES::
885
+
886
+ sage: F = CombinatorialFreeModule(QQ, ['a','b','c'])
887
+ sage: B = F.basis()
888
+ sage: B['a']*(1/2) # indirect doctest
889
+ 1/2*B['a']
890
+ sage: B['a']/2
891
+ 1/2*B['a']
892
+ sage: B['a']*2 # indirect doctest
893
+ 2*B['a']
894
+ sage: B['a']*int(2) # indirect doctest
895
+ 2*B['a']
896
+
897
+ sage: 1/2*B['a']
898
+ 1/2*B['a']
899
+ sage: 2*B['a'] # indirect doctest
900
+ 2*B['a']
901
+ sage: int(2)*B['a'] # indirect doctest
902
+ 2*B['a']
903
+
904
+ TESTS::
905
+
906
+ sage: coercion_model.get_action(F, QQ, operator.mul)
907
+ Right scalar multiplication by Rational Field on Free module generated by {'a', 'b', 'c'} over Rational Field
908
+ sage: coercion_model.get_action(QQ, F, operator.mul)
909
+ Left scalar multiplication by Rational Field on Free module generated by {'a', 'b', 'c'} over Rational Field
910
+ sage: coercion_model.get_action(F, ZZ, operator.mul)
911
+ Right scalar multiplication by Integer Ring on Free module generated by {'a', 'b', 'c'} over Rational Field
912
+ sage: print(coercion_model.get_action(F, F, operator.mul))
913
+ None
914
+
915
+ This also works when a coercion of the coefficient is needed, for
916
+ example with polynomials or fraction fields (:issue:`8832`)::
917
+
918
+ sage: P.<q> = QQ['q']
919
+ sage: V = CombinatorialFreeModule(P, Permutations())
920
+ sage: el = V(Permutation([3,1,2]))
921
+ sage: (3/2)*el
922
+ 3/2*B[[3, 1, 2]]
923
+
924
+ sage: # needs sage.combinat
925
+ sage: P.<q> = QQ['q']
926
+ sage: F = FractionField(P)
927
+ sage: V = CombinatorialFreeModule(F, Words())
928
+ sage: w = Words()('abc')
929
+ sage: (1+q)*V(w)
930
+ (q+1)*B[word: abc]
931
+ sage: ((1+q)/q)*V(w)
932
+ ((q+1)/q)*B[word: abc]
933
+
934
+ .. TODO::
935
+
936
+ Add non commutative tests.
937
+ """
938
+ # With the current design, the coercion model does not have
939
+ # enough information to detect a priori that this method only
940
+ # accepts scalars; so it tries on some elements(), and we need
941
+ # to make sure to report an error.
942
+ if isinstance(scalar, Element) and parent(scalar) is not self.base_ring():
943
+ # Temporary needed by coercion (see Polynomial/FractionField tests).
944
+ if self.base_ring().has_coerce_map_from(parent(scalar)):
945
+ scalar = self.base_ring()( scalar )
946
+ else:
947
+ return None
948
+
949
+ return type(self)(self._parent,
950
+ scal(scalar, self._monomial_coefficients,
951
+ factor_on_left=not self_on_left))
952
+
953
+ cpdef _lmul_(self, Element right):
954
+ """
955
+ For backward compatibility.
956
+
957
+ EXAMPLES::
958
+
959
+ sage: C = CombinatorialFreeModule(QQ, [1,2,3])
960
+ sage: C.an_element()._lmul_(2)
961
+ 4*B[1] + 4*B[2] + 6*B[3]
962
+ """
963
+ return self._acted_upon_(right, True)
964
+
965
+ cpdef _rmul_(self, Element left):
966
+ """
967
+ For backward compatibility.
968
+
969
+ EXAMPLES::
970
+
971
+ sage: C = CombinatorialFreeModule(QQ, [1,2,3])
972
+ sage: C.an_element()._rmul_(2)
973
+ 4*B[1] + 4*B[2] + 6*B[3]
974
+ """
975
+ return self._acted_upon_(left, False)
976
+
977
+ def __truediv__(left, x):
978
+ """
979
+ Division by coefficients.
980
+
981
+ EXAMPLES::
982
+
983
+ sage: F = CombinatorialFreeModule(QQ, [1,2,3])
984
+ sage: x = F._from_dict({1:2, 2:3})
985
+ sage: from operator import truediv
986
+ sage: truediv(x, 2)
987
+ B[1] + 3/2*B[2]
988
+
989
+ ::
990
+
991
+ sage: F = CombinatorialFreeModule(QQ, [1,2,3])
992
+ sage: B = F.basis()
993
+ sage: f = 2*B[2] + 4*B[3]
994
+ sage: truediv(f, 2)
995
+ B[2] + 2*B[3]
996
+
997
+ TESTS::
998
+
999
+ sage: truediv(x, x)
1000
+ Traceback (most recent call last):
1001
+ ...
1002
+ TypeError: unable to convert 2*B[1] + 3*B[2] to a rational
1003
+ sage: truediv("hello", x)
1004
+ Traceback (most recent call last):
1005
+ ...
1006
+ TypeError: unsupported operand type(s) for /: 'str' and 'CombinatorialFreeModule_with_category.element_class'
1007
+
1008
+ sage: # needs sage.combinat
1009
+ sage: L = LazyPowerSeriesRing(QQ, 't')
1010
+ sage: t = L.gen()
1011
+ sage: F = algebras.Free(L, ['A', 'B'])
1012
+ sage: A, B = F.gens()
1013
+ sage: f = t*A + t**2*B/2
1014
+ """
1015
+ if not isinstance(left, IndexedFreeModuleElement):
1016
+ return NotImplemented
1017
+
1018
+ cdef IndexedFreeModuleElement self = <IndexedFreeModuleElement>left
1019
+ F = self._parent
1020
+ B = self.base_ring()
1021
+ D = self._monomial_coefficients
1022
+ if B not in _Fields:
1023
+ return type(self)(F, {k: c._divide_if_possible(x)
1024
+ for k, c in D.items()})
1025
+
1026
+ x_inv = B(x) ** -1
1027
+ return type(self)(F, scal(x_inv, D))
1028
+
1029
+ def _magma_init_(self, magma):
1030
+ r"""
1031
+ Convert ``self`` to Magma.
1032
+ """
1033
+ # Get a reference to Magma version of parent.
1034
+ R = magma(self.parent()).name()
1035
+ # use dict {key: coefficient}.
1036
+ return '+'.join(f"({c._magma_init_(magma)})*{R}.{m._magma_init_(magma)}"
1037
+ for m, c in self.monomial_coefficients().items())
1038
+
1039
+
1040
+ def _unpickle_element(C, d):
1041
+ """
1042
+ Unpickle an element in ``C`` given by ``d``.
1043
+
1044
+ EXAMPLES::
1045
+
1046
+ sage: from sage.modules.with_basis.indexed_element import _unpickle_element
1047
+ sage: C = CombinatorialFreeModule(QQ, [1,2,3])
1048
+ sage: _unpickle_element(C, {1: -2, 3: -12})
1049
+ -2*B[1] - 12*B[3]
1050
+ """
1051
+ return C._from_dict(d, coerce=False, remove_zeros=False)
1052
+
1053
+
1054
+ # Handle old CombinatorialFreeModuleElement pickles, see Issue #22632
1055
+ from sage.misc.persist import register_unpickle_override
1056
+ register_unpickle_override("sage.combinat.free_module",
1057
+ "CombinatorialFreeModuleElement",
1058
+ IndexedFreeModuleElement)