passagemath-flint 10.6.1rc10__cp311-cp311-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.
Files changed (361) hide show
  1. passagemath_flint-10.6.1rc10.dist-info/METADATA +122 -0
  2. passagemath_flint-10.6.1rc10.dist-info/RECORD +361 -0
  3. passagemath_flint-10.6.1rc10.dist-info/WHEEL +6 -0
  4. passagemath_flint-10.6.1rc10.dist-info/top_level.txt +2 -0
  5. passagemath_flint.libs/libflint-aecb9cc5.so.21.0.0 +0 -0
  6. passagemath_flint.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  7. passagemath_flint.libs/libgfortran-8f1e9814.so.5.0.0 +0 -0
  8. passagemath_flint.libs/libgmp-6e109695.so.10.5.0 +0 -0
  9. passagemath_flint.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  10. passagemath_flint.libs/libmpfi-e3c25853.so.0.0.0 +0 -0
  11. passagemath_flint.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  12. passagemath_flint.libs/libntl-74e7d9a3.so.44.0.1 +0 -0
  13. passagemath_flint.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  14. passagemath_flint.libs/libquadmath-828275a7.so.0.0.0 +0 -0
  15. sage/all__sagemath_flint.py +29 -0
  16. sage/combinat/all__sagemath_flint.py +1 -0
  17. sage/combinat/posets/all__sagemath_flint.py +1 -0
  18. sage/combinat/posets/hasse_cython_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  19. sage/combinat/posets/hasse_cython_flint.pyx +194 -0
  20. sage/data_structures/all__sagemath_flint.py +1 -0
  21. sage/data_structures/bounded_integer_sequences.cpython-311-x86_64-linux-gnu.so +0 -0
  22. sage/data_structures/bounded_integer_sequences.pxd +62 -0
  23. sage/data_structures/bounded_integer_sequences.pyx +1418 -0
  24. sage/graphs/all__sagemath_flint.py +1 -0
  25. sage/graphs/chrompoly.cpython-311-x86_64-linux-gnu.so +0 -0
  26. sage/graphs/chrompoly.pyx +555 -0
  27. sage/graphs/matchpoly.cpython-311-x86_64-linux-gnu.so +0 -0
  28. sage/graphs/matchpoly.pyx +412 -0
  29. sage/libs/all__sagemath_flint.py +17 -0
  30. sage/libs/arb/__init__.py +1 -0
  31. sage/libs/arb/acb.pxd +154 -0
  32. sage/libs/arb/acb_calc.pxd +9 -0
  33. sage/libs/arb/acb_elliptic.pxd +25 -0
  34. sage/libs/arb/acb_hypgeom.pxd +74 -0
  35. sage/libs/arb/acb_mat.pxd +62 -0
  36. sage/libs/arb/acb_modular.pxd +17 -0
  37. sage/libs/arb/acb_poly.pxd +216 -0
  38. sage/libs/arb/arb.pxd +240 -0
  39. sage/libs/arb/arb_fmpz_poly.pxd +21 -0
  40. sage/libs/arb/arb_hypgeom.pxd +83 -0
  41. sage/libs/arb/arb_wrap.h +34 -0
  42. sage/libs/arb/arf.pxd +131 -0
  43. sage/libs/arb/arith.cpython-311-x86_64-linux-gnu.so +0 -0
  44. sage/libs/arb/arith.pyx +87 -0
  45. sage/libs/arb/bernoulli.pxd +6 -0
  46. sage/libs/arb/mag.pxd +77 -0
  47. sage/libs/arb/types.pxd +37 -0
  48. sage/libs/flint/__init__.py +1 -0
  49. sage/libs/flint/acb.pxd +270 -0
  50. sage/libs/flint/acb_calc.pxd +22 -0
  51. sage/libs/flint/acb_dft.pxd +51 -0
  52. sage/libs/flint/acb_dirichlet.pxd +112 -0
  53. sage/libs/flint/acb_elliptic.pxd +42 -0
  54. sage/libs/flint/acb_hypgeom.pxd +169 -0
  55. sage/libs/flint/acb_macros.pxd +9 -0
  56. sage/libs/flint/acb_mat.pxd +136 -0
  57. sage/libs/flint/acb_mat_macros.pxd +10 -0
  58. sage/libs/flint/acb_modular.pxd +62 -0
  59. sage/libs/flint/acb_poly.pxd +251 -0
  60. sage/libs/flint/acb_poly_macros.pxd +8 -0
  61. sage/libs/flint/acb_theta.pxd +124 -0
  62. sage/libs/flint/acf.pxd +32 -0
  63. sage/libs/flint/aprcl.pxd +84 -0
  64. sage/libs/flint/arb.pxd +382 -0
  65. sage/libs/flint/arb_calc.pxd +31 -0
  66. sage/libs/flint/arb_fmpz_poly.pxd +34 -0
  67. sage/libs/flint/arb_fpwrap.pxd +215 -0
  68. sage/libs/flint/arb_hypgeom.pxd +147 -0
  69. sage/libs/flint/arb_macros.pxd +9 -0
  70. sage/libs/flint/arb_mat.pxd +140 -0
  71. sage/libs/flint/arb_mat_macros.pxd +10 -0
  72. sage/libs/flint/arb_poly.pxd +237 -0
  73. sage/libs/flint/arf.pxd +167 -0
  74. sage/libs/flint/arith.cpython-311-x86_64-linux-gnu.so +0 -0
  75. sage/libs/flint/arith.pxd +76 -0
  76. sage/libs/flint/arith.pyx +77 -0
  77. sage/libs/flint/arith_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  78. sage/libs/flint/arith_sage.pyx +308 -0
  79. sage/libs/flint/bernoulli.pxd +28 -0
  80. sage/libs/flint/bool_mat.pxd +52 -0
  81. sage/libs/flint/ca.pxd +203 -0
  82. sage/libs/flint/ca_ext.pxd +34 -0
  83. sage/libs/flint/ca_field.pxd +32 -0
  84. sage/libs/flint/ca_mat.pxd +117 -0
  85. sage/libs/flint/ca_poly.pxd +104 -0
  86. sage/libs/flint/ca_vec.pxd +46 -0
  87. sage/libs/flint/calcium.pxd +27 -0
  88. sage/libs/flint/d_mat.pxd +39 -0
  89. sage/libs/flint/d_vec.pxd +32 -0
  90. sage/libs/flint/dirichlet.pxd +57 -0
  91. sage/libs/flint/dlog.pxd +53 -0
  92. sage/libs/flint/double_extras.pxd +24 -0
  93. sage/libs/flint/double_interval.pxd +36 -0
  94. sage/libs/flint/fexpr.pxd +104 -0
  95. sage/libs/flint/fexpr_builtin.pxd +20 -0
  96. sage/libs/flint/fft.pxd +66 -0
  97. sage/libs/flint/flint.pxd +36 -0
  98. sage/libs/flint/flint_ntl_wrap.h +35 -0
  99. sage/libs/flint/flint_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  100. sage/libs/flint/flint_sage.pyx +163 -0
  101. sage/libs/flint/flint_wrap.h +190 -0
  102. sage/libs/flint/fmpq.pxd +137 -0
  103. sage/libs/flint/fmpq_mat.pxd +105 -0
  104. sage/libs/flint/fmpq_mat_macros.pxd +10 -0
  105. sage/libs/flint/fmpq_mpoly.pxd +165 -0
  106. sage/libs/flint/fmpq_mpoly_factor.pxd +30 -0
  107. sage/libs/flint/fmpq_poly.pxd +241 -0
  108. sage/libs/flint/fmpq_poly_macros.pxd +9 -0
  109. sage/libs/flint/fmpq_poly_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  110. sage/libs/flint/fmpq_poly_sage.pxd +31 -0
  111. sage/libs/flint/fmpq_poly_sage.pyx +48 -0
  112. sage/libs/flint/fmpq_vec.pxd +27 -0
  113. sage/libs/flint/fmpz.pxd +256 -0
  114. sage/libs/flint/fmpz_extras.pxd +32 -0
  115. sage/libs/flint/fmpz_factor.pxd +42 -0
  116. sage/libs/flint/fmpz_factor_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  117. sage/libs/flint/fmpz_factor_sage.pxd +4 -0
  118. sage/libs/flint/fmpz_factor_sage.pyx +29 -0
  119. sage/libs/flint/fmpz_lll.pxd +49 -0
  120. sage/libs/flint/fmpz_macros.pxd +8 -0
  121. sage/libs/flint/fmpz_mat.pxd +184 -0
  122. sage/libs/flint/fmpz_mat_macros.pxd +10 -0
  123. sage/libs/flint/fmpz_mod.pxd +46 -0
  124. sage/libs/flint/fmpz_mod_mat.pxd +71 -0
  125. sage/libs/flint/fmpz_mod_mpoly.pxd +161 -0
  126. sage/libs/flint/fmpz_mod_mpoly_factor.pxd +28 -0
  127. sage/libs/flint/fmpz_mod_poly.pxd +249 -0
  128. sage/libs/flint/fmpz_mod_poly_factor.pxd +46 -0
  129. sage/libs/flint/fmpz_mod_vec.pxd +27 -0
  130. sage/libs/flint/fmpz_mpoly.pxd +224 -0
  131. sage/libs/flint/fmpz_mpoly_factor.pxd +29 -0
  132. sage/libs/flint/fmpz_mpoly_q.pxd +57 -0
  133. sage/libs/flint/fmpz_poly.cpython-311-x86_64-linux-gnu.so +0 -0
  134. sage/libs/flint/fmpz_poly.pxd +407 -0
  135. sage/libs/flint/fmpz_poly.pyx +19 -0
  136. sage/libs/flint/fmpz_poly_factor.pxd +33 -0
  137. sage/libs/flint/fmpz_poly_macros.pxd +8 -0
  138. sage/libs/flint/fmpz_poly_mat.pxd +71 -0
  139. sage/libs/flint/fmpz_poly_q.pxd +55 -0
  140. sage/libs/flint/fmpz_poly_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  141. sage/libs/flint/fmpz_poly_sage.pxd +20 -0
  142. sage/libs/flint/fmpz_poly_sage.pyx +500 -0
  143. sage/libs/flint/fmpz_vec.pxd +80 -0
  144. sage/libs/flint/fmpzi.pxd +52 -0
  145. sage/libs/flint/fq.pxd +97 -0
  146. sage/libs/flint/fq_default.pxd +84 -0
  147. sage/libs/flint/fq_default_mat.pxd +70 -0
  148. sage/libs/flint/fq_default_poly.pxd +97 -0
  149. sage/libs/flint/fq_default_poly_factor.pxd +39 -0
  150. sage/libs/flint/fq_embed.pxd +28 -0
  151. sage/libs/flint/fq_mat.pxd +83 -0
  152. sage/libs/flint/fq_nmod.pxd +95 -0
  153. sage/libs/flint/fq_nmod_embed.pxd +28 -0
  154. sage/libs/flint/fq_nmod_mat.pxd +83 -0
  155. sage/libs/flint/fq_nmod_mpoly.pxd +130 -0
  156. sage/libs/flint/fq_nmod_mpoly_factor.pxd +28 -0
  157. sage/libs/flint/fq_nmod_poly.pxd +202 -0
  158. sage/libs/flint/fq_nmod_poly_factor.pxd +47 -0
  159. sage/libs/flint/fq_nmod_vec.pxd +33 -0
  160. sage/libs/flint/fq_poly.pxd +204 -0
  161. sage/libs/flint/fq_poly_factor.pxd +47 -0
  162. sage/libs/flint/fq_vec.pxd +33 -0
  163. sage/libs/flint/fq_zech.pxd +99 -0
  164. sage/libs/flint/fq_zech_embed.pxd +28 -0
  165. sage/libs/flint/fq_zech_mat.pxd +78 -0
  166. sage/libs/flint/fq_zech_poly.pxd +198 -0
  167. sage/libs/flint/fq_zech_poly_factor.pxd +47 -0
  168. sage/libs/flint/fq_zech_vec.pxd +33 -0
  169. sage/libs/flint/gr.pxd +174 -0
  170. sage/libs/flint/gr_generic.pxd +215 -0
  171. sage/libs/flint/gr_mat.pxd +161 -0
  172. sage/libs/flint/gr_mpoly.pxd +68 -0
  173. sage/libs/flint/gr_poly.pxd +276 -0
  174. sage/libs/flint/gr_special.pxd +237 -0
  175. sage/libs/flint/gr_vec.pxd +120 -0
  176. sage/libs/flint/hypgeom.pxd +24 -0
  177. sage/libs/flint/long_extras.pxd +23 -0
  178. sage/libs/flint/mag.pxd +131 -0
  179. sage/libs/flint/mag_macros.pxd +8 -0
  180. sage/libs/flint/mpf_mat.pxd +36 -0
  181. sage/libs/flint/mpf_vec.pxd +34 -0
  182. sage/libs/flint/mpfr_mat.pxd +27 -0
  183. sage/libs/flint/mpfr_vec.pxd +25 -0
  184. sage/libs/flint/mpn_extras.pxd +41 -0
  185. sage/libs/flint/mpoly.pxd +72 -0
  186. sage/libs/flint/nf.pxd +19 -0
  187. sage/libs/flint/nf_elem.pxd +74 -0
  188. sage/libs/flint/nmod.pxd +35 -0
  189. sage/libs/flint/nmod_mat.pxd +104 -0
  190. sage/libs/flint/nmod_mpoly.pxd +144 -0
  191. sage/libs/flint/nmod_mpoly_factor.pxd +28 -0
  192. sage/libs/flint/nmod_poly.pxd +339 -0
  193. sage/libs/flint/nmod_poly_factor.pxd +44 -0
  194. sage/libs/flint/nmod_poly_linkage.pxi +710 -0
  195. sage/libs/flint/nmod_poly_mat.pxd +76 -0
  196. sage/libs/flint/nmod_vec.pxd +40 -0
  197. sage/libs/flint/ntl_interface.pxd +17 -0
  198. sage/libs/flint/padic.pxd +93 -0
  199. sage/libs/flint/padic_mat.pxd +64 -0
  200. sage/libs/flint/padic_poly.pxd +88 -0
  201. sage/libs/flint/partitions.pxd +23 -0
  202. sage/libs/flint/perm.pxd +26 -0
  203. sage/libs/flint/profiler.pxd +24 -0
  204. sage/libs/flint/qadic.pxd +77 -0
  205. sage/libs/flint/qfb.pxd +44 -0
  206. sage/libs/flint/qqbar.pxd +172 -0
  207. sage/libs/flint/qsieve.cpython-311-x86_64-linux-gnu.so +0 -0
  208. sage/libs/flint/qsieve.pxd +41 -0
  209. sage/libs/flint/qsieve.pyx +21 -0
  210. sage/libs/flint/qsieve_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  211. sage/libs/flint/qsieve_sage.pyx +67 -0
  212. sage/libs/flint/thread_pool.pxd +25 -0
  213. sage/libs/flint/types.pxd +2076 -0
  214. sage/libs/flint/ulong_extras.cpython-311-x86_64-linux-gnu.so +0 -0
  215. sage/libs/flint/ulong_extras.pxd +141 -0
  216. sage/libs/flint/ulong_extras.pyx +21 -0
  217. sage/libs/flint/ulong_extras_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  218. sage/libs/flint/ulong_extras_sage.pyx +21 -0
  219. sage/matrix/all__sagemath_flint.py +1 -0
  220. sage/matrix/change_ring.cpython-311-x86_64-linux-gnu.so +0 -0
  221. sage/matrix/change_ring.pyx +43 -0
  222. sage/matrix/matrix_complex_ball_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  223. sage/matrix/matrix_complex_ball_dense.pxd +14 -0
  224. sage/matrix/matrix_complex_ball_dense.pyx +973 -0
  225. sage/matrix/matrix_cyclo_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  226. sage/matrix/matrix_cyclo_dense.pxd +16 -0
  227. sage/matrix/matrix_cyclo_dense.pyx +1761 -0
  228. sage/matrix/matrix_integer_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  229. sage/matrix/matrix_integer_dense.pxd +32 -0
  230. sage/matrix/matrix_integer_dense.pyx +5801 -0
  231. sage/matrix/matrix_integer_dense_hnf.py +1294 -0
  232. sage/matrix/matrix_integer_dense_saturation.py +346 -0
  233. sage/matrix/matrix_integer_sparse.cpython-311-x86_64-linux-gnu.so +0 -0
  234. sage/matrix/matrix_integer_sparse.pxd +9 -0
  235. sage/matrix/matrix_integer_sparse.pyx +1090 -0
  236. sage/matrix/matrix_rational_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  237. sage/matrix/matrix_rational_dense.pxd +23 -0
  238. sage/matrix/matrix_rational_dense.pyx +2995 -0
  239. sage/matrix/matrix_rational_sparse.cpython-311-x86_64-linux-gnu.so +0 -0
  240. sage/matrix/matrix_rational_sparse.pxd +11 -0
  241. sage/matrix/matrix_rational_sparse.pyx +789 -0
  242. sage/matrix/misc_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  243. sage/matrix/misc_flint.pyx +109 -0
  244. sage/modular/all__sagemath_flint.py +1 -0
  245. sage/modular/modform/all__sagemath_flint.py +1 -0
  246. sage/modular/modform/eis_series_cython.cpython-311-x86_64-linux-gnu.so +0 -0
  247. sage/modular/modform/eis_series_cython.pyx +226 -0
  248. sage/modular/modsym/all__sagemath_flint.py +1 -0
  249. sage/modular/modsym/apply.cpython-311-x86_64-linux-gnu.so +0 -0
  250. sage/modular/modsym/apply.pxd +6 -0
  251. sage/modular/modsym/apply.pyx +113 -0
  252. sage/modular/modsym/heilbronn.cpython-311-x86_64-linux-gnu.so +0 -0
  253. sage/modular/modsym/heilbronn.pyx +966 -0
  254. sage/modular/pollack_stevens/all__sagemath_flint.py +1 -0
  255. sage/modular/pollack_stevens/dist.cpython-311-x86_64-linux-gnu.so +0 -0
  256. sage/modular/pollack_stevens/dist.pxd +38 -0
  257. sage/modular/pollack_stevens/dist.pyx +1439 -0
  258. sage/quivers/algebra.py +691 -0
  259. sage/quivers/algebra_elements.cpython-311-x86_64-linux-gnu.so +0 -0
  260. sage/quivers/algebra_elements.pxd +97 -0
  261. sage/quivers/algebra_elements.pxi +1324 -0
  262. sage/quivers/algebra_elements.pyx +1424 -0
  263. sage/quivers/all.py +1 -0
  264. sage/quivers/ar_quiver.py +917 -0
  265. sage/quivers/homspace.py +640 -0
  266. sage/quivers/morphism.py +1282 -0
  267. sage/quivers/path_semigroup.py +1155 -0
  268. sage/quivers/paths.cpython-311-x86_64-linux-gnu.so +0 -0
  269. sage/quivers/paths.pxd +13 -0
  270. sage/quivers/paths.pyx +809 -0
  271. sage/quivers/representation.py +2975 -0
  272. sage/rings/all__sagemath_flint.py +37 -0
  273. sage/rings/cif.py +4 -0
  274. sage/rings/complex_arb.cpython-311-x86_64-linux-gnu.so +0 -0
  275. sage/rings/complex_arb.pxd +29 -0
  276. sage/rings/complex_arb.pyx +5176 -0
  277. sage/rings/complex_interval.cpython-311-x86_64-linux-gnu.so +0 -0
  278. sage/rings/complex_interval.pxd +30 -0
  279. sage/rings/complex_interval.pyx +2475 -0
  280. sage/rings/complex_interval_field.py +711 -0
  281. sage/rings/convert/all.py +1 -0
  282. sage/rings/convert/mpfi.cpython-311-x86_64-linux-gnu.so +0 -0
  283. sage/rings/convert/mpfi.pxd +6 -0
  284. sage/rings/convert/mpfi.pyx +576 -0
  285. sage/rings/factorint_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  286. sage/rings/factorint_flint.pyx +99 -0
  287. sage/rings/fraction_field_FpT.cpython-311-x86_64-linux-gnu.so +0 -0
  288. sage/rings/fraction_field_FpT.pxd +28 -0
  289. sage/rings/fraction_field_FpT.pyx +2043 -0
  290. sage/rings/imaginary_unit.py +5 -0
  291. sage/rings/monomials.py +73 -0
  292. sage/rings/number_field/S_unit_solver.py +2870 -0
  293. sage/rings/number_field/all__sagemath_flint.py +7 -0
  294. sage/rings/number_field/bdd_height.py +664 -0
  295. sage/rings/number_field/class_group.py +762 -0
  296. sage/rings/number_field/galois_group.py +1307 -0
  297. sage/rings/number_field/homset.py +612 -0
  298. sage/rings/number_field/maps.py +687 -0
  299. sage/rings/number_field/morphism.py +272 -0
  300. sage/rings/number_field/number_field.py +12820 -0
  301. sage/rings/number_field/number_field_element.cpython-311-x86_64-linux-gnu.so +0 -0
  302. sage/rings/number_field/number_field_element.pxd +59 -0
  303. sage/rings/number_field/number_field_element.pyx +5735 -0
  304. sage/rings/number_field/number_field_element_quadratic.cpython-311-x86_64-linux-gnu.so +0 -0
  305. sage/rings/number_field/number_field_element_quadratic.pxd +34 -0
  306. sage/rings/number_field/number_field_element_quadratic.pyx +3185 -0
  307. sage/rings/number_field/number_field_ideal_rel.py +925 -0
  308. sage/rings/number_field/number_field_morphisms.cpython-311-x86_64-linux-gnu.so +0 -0
  309. sage/rings/number_field/number_field_morphisms.pyx +781 -0
  310. sage/rings/number_field/number_field_rel.py +2734 -0
  311. sage/rings/number_field/order.py +2981 -0
  312. sage/rings/number_field/order_ideal.py +804 -0
  313. sage/rings/number_field/selmer_group.py +715 -0
  314. sage/rings/number_field/small_primes_of_degree_one.py +242 -0
  315. sage/rings/number_field/splitting_field.py +606 -0
  316. sage/rings/number_field/structure.py +380 -0
  317. sage/rings/number_field/unit_group.py +721 -0
  318. sage/rings/padics/all__sagemath_flint.py +3 -0
  319. sage/rings/polynomial/all__sagemath_flint.py +1 -0
  320. sage/rings/polynomial/complex_roots.py +312 -0
  321. sage/rings/polynomial/evaluation_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  322. sage/rings/polynomial/evaluation_flint.pxd +7 -0
  323. sage/rings/polynomial/evaluation_flint.pyx +68 -0
  324. sage/rings/polynomial/hilbert.cpython-311-x86_64-linux-gnu.so +0 -0
  325. sage/rings/polynomial/hilbert.pyx +602 -0
  326. sage/rings/polynomial/polynomial_complex_arb.cpython-311-x86_64-linux-gnu.so +0 -0
  327. sage/rings/polynomial/polynomial_complex_arb.pxd +7 -0
  328. sage/rings/polynomial/polynomial_complex_arb.pyx +963 -0
  329. sage/rings/polynomial/polynomial_integer_dense_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  330. sage/rings/polynomial/polynomial_integer_dense_flint.pxd +13 -0
  331. sage/rings/polynomial/polynomial_integer_dense_flint.pyx +1881 -0
  332. sage/rings/polynomial/polynomial_number_field.cpython-311-x86_64-linux-gnu.so +0 -0
  333. sage/rings/polynomial/polynomial_number_field.pyx +345 -0
  334. sage/rings/polynomial/polynomial_rational_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  335. sage/rings/polynomial/polynomial_rational_flint.pxd +20 -0
  336. sage/rings/polynomial/polynomial_rational_flint.pyx +2598 -0
  337. sage/rings/polynomial/polynomial_zmod_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  338. sage/rings/polynomial/polynomial_zmod_flint.pxd +20 -0
  339. sage/rings/polynomial/polynomial_zmod_flint.pyx +1063 -0
  340. sage/rings/polynomial/real_roots.cpython-311-x86_64-linux-gnu.so +0 -0
  341. sage/rings/polynomial/real_roots.pxd +81 -0
  342. sage/rings/polynomial/real_roots.pyx +4704 -0
  343. sage/rings/polynomial/refine_root.cpython-311-x86_64-linux-gnu.so +0 -0
  344. sage/rings/polynomial/refine_root.pyx +142 -0
  345. sage/rings/polynomial/weil/all.py +4 -0
  346. sage/rings/polynomial/weil/power_sums.h +46 -0
  347. sage/rings/polynomial/weil/weil_polynomials.cpython-311-x86_64-linux-gnu.so +0 -0
  348. sage/rings/polynomial/weil/weil_polynomials.pyx +596 -0
  349. sage/rings/qqbar.py +9025 -0
  350. sage/rings/real_arb.cpython-311-x86_64-linux-gnu.so +0 -0
  351. sage/rings/real_arb.pxd +21 -0
  352. sage/rings/real_arb.pyx +4065 -0
  353. sage/rings/real_interval_absolute.cpython-311-x86_64-linux-gnu.so +0 -0
  354. sage/rings/real_interval_absolute.pyx +1073 -0
  355. sage/rings/real_mpfi.cpython-311-x86_64-linux-gnu.so +0 -0
  356. sage/rings/real_mpfi.pyx +5428 -0
  357. sage/schemes/all__sagemath_flint.py +1 -0
  358. sage/schemes/elliptic_curves/all__sagemath_flint.py +1 -0
  359. sage/schemes/elliptic_curves/descent_two_isogeny.cpython-311-x86_64-linux-gnu.so +0 -0
  360. sage/schemes/elliptic_curves/descent_two_isogeny.pyx +1387 -0
  361. sage/schemes/elliptic_curves/descent_two_isogeny_pari.pxd +5 -0
@@ -0,0 +1,691 @@
1
+ # sage_setup: distribution = sagemath-flint
2
+ # sage.doctest: needs sage.graphs
3
+ """
4
+ Path Algebras
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Copyright (C) 2012 Jim Stark <jstarx@gmail.com>
9
+ # 2013 Simon King <simon.king@uni-jena.de>
10
+ # 2014 Simon King <simon.king@uni-jena.de>
11
+ #
12
+ # Distributed under the terms of the GNU General Public License (GPL)
13
+ #
14
+ # This code is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty
16
+ # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
+ #
18
+ # See the GNU General Public License for more details; the full text
19
+ # is available at:
20
+ #
21
+ # https://www.gnu.org/licenses/
22
+ # ****************************************************************************
23
+
24
+ from sage.combinat.free_module import CombinatorialFreeModule
25
+ from sage.misc.cachefunc import cached_method
26
+
27
+ from .algebra_elements import PathAlgebraElement
28
+
29
+
30
+ class PathAlgebra(CombinatorialFreeModule):
31
+ r"""
32
+ Create the path algebra of a :class:`quiver <DiGraph>` over a given field.
33
+
34
+ Given a quiver `Q` and a field `k`, the path algebra `kQ` is defined as
35
+ follows. As a vector space it has basis the set of all paths in `Q`.
36
+ Multiplication is defined on this basis and extended bilinearly. If `p`
37
+ is a path with terminal vertex `t` and `q` is a path with initial vertex
38
+ `i` then the product `p*q` is defined to be the composition of the
39
+ paths `p` and `q` if `t = i` and `0` otherwise.
40
+
41
+ INPUT:
42
+
43
+ - ``k`` -- field (or commutative ring), the base field of the path algebra
44
+
45
+ - ``P`` -- the path semigroup of a quiver `Q`
46
+
47
+ - ``order`` -- string; one of ``'negdegrevlex'`` (default),
48
+ ``'degrevlex'``, ``'negdeglex'`` or ``'deglex'``, defining the monomial
49
+ order to be used
50
+
51
+ OUTPUT: the path algebra `kP` with the given monomial order
52
+
53
+ .. NOTE::
54
+
55
+ Monomial orders that are not degree orders are not supported.
56
+
57
+ EXAMPLES::
58
+
59
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b']}}).path_semigroup()
60
+ sage: A = P.algebra(GF(7))
61
+ sage: A
62
+ Path algebra of Multi-digraph on 3 vertices over Finite Field of size 7
63
+ sage: A.variable_names()
64
+ ('e_1', 'e_2', 'e_3', 'a', 'b')
65
+
66
+ Note that path algebras are uniquely defined by their quiver, field and
67
+ monomial order::
68
+
69
+ sage: A is P.algebra(GF(7))
70
+ True
71
+ sage: A is P.algebra(GF(7), order='degrevlex')
72
+ False
73
+ sage: A is P.algebra(RR)
74
+ False
75
+ sage: A is DiGraph({1:{2:['a']}}).path_semigroup().algebra(GF(7))
76
+ False
77
+
78
+ The path algebra of an acyclic quiver has a finite basis::
79
+
80
+ sage: A.dimension()
81
+ 6
82
+ sage: list(A.basis())
83
+ [e_1, e_2, e_3, a, b, a*b]
84
+
85
+ The path algebra can create elements from paths or from elements of the
86
+ base ring::
87
+
88
+ sage: A(5)
89
+ 5*e_1 + 5*e_2 + 5*e_3
90
+ sage: S = A.semigroup()
91
+ sage: S
92
+ Partial semigroup formed by the directed paths of Multi-digraph on 3 vertices
93
+ sage: p = S([(1, 2, 'a')])
94
+ sage: r = S([(2, 3, 'b')])
95
+ sage: e2 = S([(2, 2)])
96
+ sage: x = A(p) + A(e2)
97
+ sage: x
98
+ a + e_2
99
+ sage: y = A(p) + A(r)
100
+ sage: y
101
+ a + b
102
+
103
+ Path algebras are graded algebras. The grading is given by assigning
104
+ to each basis element the length of the path corresponding to that
105
+ basis element::
106
+
107
+ sage: x.is_homogeneous()
108
+ False
109
+ sage: x.degree()
110
+ Traceback (most recent call last):
111
+ ...
112
+ ValueError: element is not homogeneous
113
+ sage: y.is_homogeneous()
114
+ True
115
+ sage: y.degree()
116
+ 1
117
+ sage: A[1]
118
+ Free module spanned by [a, b] over Finite Field of size 7
119
+ sage: A[2]
120
+ Free module spanned by [a*b] over Finite Field of size 7
121
+
122
+ TESTS::
123
+
124
+ sage: TestSuite(A).run()
125
+ """
126
+
127
+ Element = PathAlgebraElement
128
+
129
+ ###########################################################################
130
+ # #
131
+ # PRIVATE FUNCTIONS #
132
+ # These functions are not meant to be seen by the end user. #
133
+ # #
134
+ ###########################################################################
135
+
136
+ def __init__(self, k, P, order='negdegrevlex'):
137
+ """
138
+ Create a :class:`PathAlgebra` object.
139
+
140
+ Type ``PathAlgebra?`` for more information.
141
+
142
+ INPUT:
143
+
144
+ - ``k`` -- a commutative ring
145
+ - ``P`` -- the partial semigroup formed by the paths of a quiver
146
+
147
+ TESTS::
148
+
149
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
150
+ sage: P.algebra(GF(5))
151
+ Path algebra of Multi-digraph on 4 vertices over Finite Field of size 5
152
+ """
153
+ # The following hidden methods are relevant:
154
+ #
155
+ # - _base
156
+ # The base ring of the path algebra.
157
+ # - _basis_keys
158
+ # Finite enumerated set containing the QuiverPaths that form the
159
+ # basis.
160
+ # - _quiver
161
+ # The quiver of the path algebra
162
+ # - _semigroup
163
+ # Shortcut for _quiver.semigroup()
164
+
165
+ from sage.categories.graded_algebras_with_basis import GradedAlgebrasWithBasis
166
+ self._quiver = P.quiver()
167
+ self._semigroup = P
168
+ self._ordstr = order
169
+ super().__init__(k, self._semigroup,
170
+ prefix='',
171
+ # element_class=self.Element,
172
+ category=GradedAlgebrasWithBasis(k),
173
+ bracket=False)
174
+ self._assign_names(self._semigroup.variable_names())
175
+
176
+ def order_string(self) -> str:
177
+ """
178
+ Return the string that defines the monomial order of this algebra.
179
+
180
+ EXAMPLES::
181
+
182
+ sage: P1 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'))
183
+ sage: P2 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'), order='degrevlex')
184
+ sage: P3 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'), order='negdeglex')
185
+ sage: P4 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'), order='deglex')
186
+ sage: P1.order_string()
187
+ 'negdegrevlex'
188
+ sage: P2.order_string()
189
+ 'degrevlex'
190
+ sage: P3.order_string()
191
+ 'negdeglex'
192
+ sage: P4.order_string()
193
+ 'deglex'
194
+ """
195
+ return self._ordstr
196
+
197
+ @cached_method
198
+ def gens(self) -> tuple:
199
+ """
200
+ Return the generators of this algebra (idempotents and arrows).
201
+
202
+ EXAMPLES::
203
+
204
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
205
+ sage: A = P.algebra(GF(5))
206
+ sage: A.variable_names()
207
+ ('e_1', 'e_2', 'e_3', 'e_4', 'a', 'b', 'c')
208
+ sage: A.gens()
209
+ (e_1, e_2, e_3, e_4, a, b, c)
210
+ """
211
+ return tuple(self.gen(i) for i in range(self.ngens()))
212
+
213
+ @cached_method
214
+ def arrows(self):
215
+ """
216
+ Return the arrows of this algebra (corresponding to edges of the
217
+ underlying quiver).
218
+
219
+ EXAMPLES::
220
+
221
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
222
+ sage: A = P.algebra(GF(5))
223
+ sage: A.arrows()
224
+ (a, b, c)
225
+ """
226
+ return tuple(self._from_dict({index: self.base_ring().one()},
227
+ remove_zeros=False)
228
+ for index in self._semigroup.arrows())
229
+
230
+ @cached_method
231
+ def idempotents(self):
232
+ """
233
+ Return the idempotents of this algebra (corresponding to vertices
234
+ of the underlying quiver).
235
+
236
+ EXAMPLES::
237
+
238
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
239
+ sage: A = P.algebra(GF(5))
240
+ sage: A.idempotents()
241
+ (e_1, e_2, e_3, e_4)
242
+ """
243
+ return tuple(self._from_dict({index: self.base_ring().one()},
244
+ remove_zeros=False)
245
+ for index in self._semigroup.idempotents())
246
+
247
+ @cached_method
248
+ def gen(self, i):
249
+ """
250
+ Return the `i`-th generator of this algebra.
251
+
252
+ This is an idempotent (corresponding to a trivial path at a
253
+ vertex) if `i < n` (where `n` is the number of vertices of the
254
+ quiver), and a single-edge path otherwise.
255
+
256
+ EXAMPLES::
257
+
258
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
259
+ sage: A = P.algebra(GF(5))
260
+ sage: A.gens()
261
+ (e_1, e_2, e_3, e_4, a, b, c)
262
+ sage: A.gen(2)
263
+ e_3
264
+ sage: A.gen(5)
265
+ b
266
+ """
267
+ return self._from_dict({self._semigroup.gen(i): self.base_ring().one()},
268
+ remove_zeros=False)
269
+
270
+ def ngens(self):
271
+ """
272
+ Number of generators of this algebra.
273
+
274
+ EXAMPLES::
275
+
276
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
277
+ sage: A = P.algebra(GF(5))
278
+ sage: A.ngens()
279
+ 7
280
+ """
281
+ return self._semigroup.ngens()
282
+
283
+ def _element_constructor_(self, x):
284
+ """
285
+ Attempt to construct an element of ``self`` from ``x``.
286
+
287
+ TESTS::
288
+
289
+ sage: A = DiGraph({2:{3:['b']}}).path_semigroup().algebra(ZZ)
290
+ sage: B = DiGraph({0:{1:['a']}, 1:{2:['c']}, 2:{3:['b']}}).path_semigroup().algebra(GF(5))
291
+ sage: x = A('b') + 1 # indirect doctest
292
+ sage: x
293
+ e_2 + b + e_3
294
+ sage: B(x) # indirect doctest
295
+ e_2 + b + e_3
296
+ sage: A(1) # indirect doctest
297
+ e_2 + e_3
298
+ sage: B(2) # indirect doctest
299
+ 2*e_0 + 2*e_1 + 2*e_2 + 2*e_3
300
+ sage: B([(0,1,'a'),(1,2,'c')]) # indirect doctest
301
+ a*c
302
+ """
303
+ from sage.quivers.paths import QuiverPath
304
+ # If it's an element of another path algebra, do a linear combination
305
+ # of the basis
306
+ if isinstance(x, PathAlgebraElement) and isinstance(x.parent(), PathAlgebra):
307
+ result = {}
308
+ coeffs = x.monomial_coefficients()
309
+ for key in coeffs:
310
+ result[self._semigroup(key)] = coeffs[key]
311
+ return self.element_class(self, result)
312
+
313
+ # If it's a QuiverPath return the associated basis element
314
+ if isinstance(x, QuiverPath):
315
+ return self.element_class(self, {x: self.base_ring().one()})
316
+
317
+ # If it's a scalar, return a multiple of one:
318
+ if x in self.base_ring():
319
+ return self.one() * x
320
+
321
+ # If it's a tuple or a list, try and create a QuiverPath from it and
322
+ # then return the associated basis element
323
+ if isinstance(x, (tuple, list, str)):
324
+ return self.element_class(self, {self._semigroup(x): self.base_ring().one()})
325
+
326
+ if isinstance(x, dict):
327
+ return self.element_class(self, x)
328
+
329
+ # Otherwise let CombinatorialFreeModule try
330
+ return super()._element_constructor_(x)
331
+
332
+ def _coerce_map_from_(self, other):
333
+ """
334
+ Return ``True`` if there is a coercion from ``other`` to ``self``.
335
+
336
+ The algebras that coerce into a path algebra are rings `k` or path
337
+ algebras `kQ` such that `k` has a coercion into the base ring of
338
+ ``self`` and `Q` is a subquiver of the quiver of ``self``.
339
+
340
+ In particular, the path semigroup of a subquiver coerces into the
341
+ algebra.
342
+
343
+ TESTS::
344
+
345
+ sage: P1 = DiGraph({1:{2:['a']}}).path_semigroup()
346
+ sage: P2 = DiGraph({1:{2:['a','b']}}).path_semigroup()
347
+ sage: A1 = P1.algebra(GF(3))
348
+ sage: A2 = P2.algebra(GF(3))
349
+ sage: A1.coerce_map_from(A2) # indirect doctest
350
+ sage: A2.coerce_map_from(A1) # indirect doctest
351
+ Coercion map:
352
+ From: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
353
+ To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
354
+ sage: A1.coerce_map_from(ZZ) # indirect doctest
355
+ Composite map:
356
+ From: Integer Ring
357
+ To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
358
+ Defn: Natural morphism:
359
+ From: Integer Ring
360
+ To: Finite Field of size 3
361
+ then
362
+ Generic morphism:
363
+ From: Finite Field of size 3
364
+ To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
365
+ sage: A1.coerce_map_from(QQ) # indirect doctest
366
+ sage: A1.coerce_map_from(ZZ)
367
+ Composite map:
368
+ From: Integer Ring
369
+ To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
370
+ Defn: Natural morphism:
371
+ From: Integer Ring
372
+ To: Finite Field of size 3
373
+ then
374
+ Generic morphism:
375
+ From: Finite Field of size 3
376
+ To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
377
+
378
+ ::
379
+
380
+ sage: A2.coerce_map_from(P1)
381
+ Coercion map:
382
+ From: Partial semigroup formed by the directed paths of Multi-digraph on 2 vertices
383
+ To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
384
+ sage: a = P1(P1.arrows()[0]); a
385
+ a
386
+ sage: A2.one() * a == a # indirect doctest
387
+ True
388
+
389
+ ::
390
+
391
+ sage: A = DiGraph({2:{3:['b']}}).path_semigroup().algebra(ZZ)
392
+ sage: B = DiGraph({0:{1:['a']}, 1:{2:['c']}, 2:{3:['b']}}).path_semigroup().algebra(GF(5))
393
+ sage: x = A('b') + 1 # indirect doctest
394
+ sage: x
395
+ e_2 + b + e_3
396
+ sage: B(2)
397
+ 2*e_0 + 2*e_1 + 2*e_2 + 2*e_3
398
+ sage: B(2)*x*B(3) # indirect doctest
399
+ e_2 + b + e_3
400
+ """
401
+ if isinstance(other, PathAlgebra) and self._base.has_coerce_map_from(other._base):
402
+ OQ = other._quiver
403
+ SQ = self._quiver
404
+ SQE = self._semigroup._sorted_edges
405
+ if all(v in SQ for v in OQ.vertex_iterator()) and all(e in SQE for e in other._semigroup._sorted_edges):
406
+ return True
407
+ if self._semigroup.has_coerce_map_from(other):
408
+ return True
409
+ return self._base.has_coerce_map_from(other)
410
+
411
+ def _repr_(self):
412
+ """
413
+ Default string representation.
414
+
415
+ TESTS::
416
+
417
+ sage: P = DiGraph({1:{2:['a']}, 2:{3:['b']}}).path_semigroup()
418
+ sage: P.algebra(RR) # indirect doctest
419
+ Path algebra of Multi-digraph on 3 vertices over Real Field with 53 bits of precision
420
+ """
421
+ return "Path algebra of {0} over {1}".format(self._quiver, self._base)
422
+
423
+ # String representation of a monomial
424
+ def _repr_monomial(self, data):
425
+ """
426
+ String representation of a monomial.
427
+
428
+ INPUT:
429
+
430
+ - ``data`` -- list providing the indices of the path algebra
431
+ generators occurring in the monomial
432
+
433
+ EXAMPLES::
434
+
435
+ sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ.quo(15))
436
+ sage: X = sage_eval('a+2*b+3*c+5*e_0+3*e_2', A.gens_dict())
437
+ sage: X # indirect doctest
438
+ 5*e_0 + a + 2*b + 3*c + 3*e_2
439
+ """
440
+ # m is [list, pos, mid], where the list gives the nb of arrows, pos
441
+ # gives the component in the module, and mid gives the length of the
442
+ # left factor in a two-sided module.
443
+ arrows = self.variable_names()
444
+ return '*'.join(arrows[n] for n in data)
445
+
446
+ def _latex_monomial(self, data):
447
+ """
448
+ Latex string representation of a monomial.
449
+
450
+ INPUT:
451
+
452
+ - ``data`` -- list providing the indices of the path algebra
453
+ generators occurring in the monomial
454
+
455
+ EXAMPLES::
456
+
457
+ sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ.quo(15))
458
+ sage: X = sage_eval('a+2*b+3*c+5*e_0+3*e_2', A.gens_dict())
459
+ sage: latex(X) # indirect doctest
460
+ 5 e_0 + a + 2 b + 3 c + 3 e_2
461
+ """
462
+ arrows = self.variable_names()
463
+ return '\\cdot '.join(arrows[n] for n in data)
464
+
465
+ @cached_method
466
+ def one(self):
467
+ """
468
+ Return the multiplicative identity element.
469
+
470
+ The multiplicative identity of a path algebra is the sum of the basis
471
+ elements corresponding to the trivial paths at each vertex.
472
+
473
+ EXAMPLES::
474
+
475
+ sage: A = DiGraph({1:{2:['a']}, 2:{3:['b']}}).path_semigroup().algebra(QQ)
476
+ sage: A.one()
477
+ e_1 + e_2 + e_3
478
+ """
479
+ one = self.base_ring().one()
480
+ D = {index: one for index in self._semigroup.idempotents()}
481
+ return self._from_dict(D)
482
+
483
+ ###########################################################################
484
+ # #
485
+ # DATA FUNCTIONS #
486
+ # These functions return data and subspaces of the path algebra. #
487
+ # #
488
+ ###########################################################################
489
+
490
+ def quiver(self):
491
+ """
492
+ Return the quiver from which the algebra ``self`` was formed.
493
+
494
+ OUTPUT: :class:`DiGraph`; the quiver of the algebra
495
+
496
+ EXAMPLES::
497
+
498
+ sage: P = DiGraph({1:{2:['a', 'b']}}).path_semigroup()
499
+ sage: A = P.algebra(GF(3))
500
+ sage: A.quiver() is P.quiver()
501
+ True
502
+ """
503
+ return self._quiver
504
+
505
+ def semigroup(self):
506
+ """
507
+ Return the (partial) semigroup from which the algebra ``self`` was
508
+ constructed.
509
+
510
+ .. NOTE::
511
+
512
+ The partial semigroup is formed by the paths of a quiver,
513
+ multiplied by concatenation. If the quiver has more than a single
514
+ vertex, then multiplication in the path semigroup is not always
515
+ defined.
516
+
517
+ OUTPUT:
518
+
519
+ - the path semigroup from which ``self`` was formed (a partial
520
+ semigroup)
521
+
522
+ EXAMPLES::
523
+
524
+ sage: P = DiGraph({1:{2:['a', 'b']}}).path_semigroup()
525
+ sage: A = P.algebra(GF(3))
526
+ sage: A.semigroup() is P
527
+ True
528
+ """
529
+ return self._semigroup
530
+
531
+ def degree_on_basis(self, x):
532
+ """
533
+ Return ``x.degree()``.
534
+
535
+ This function is here to make some methods work that are inherited
536
+ from :class:`~sage.combinat.free_module.CombinatorialFreeModule`.
537
+
538
+ EXAMPLES::
539
+
540
+ sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ)
541
+ sage: A.inject_variables()
542
+ Defining e_0, e_1, e_2, a, b, c, d, e, f
543
+ sage: X = a+2*b+3*c*e-a*d+5*e_0+3*e_2
544
+ sage: X
545
+ 5*e_0 + a - a*d + 2*b + 3*e_2
546
+ sage: X.homogeneous_component(0) # indirect doctest
547
+ 5*e_0 + 3*e_2
548
+ sage: X.homogeneous_component(1)
549
+ a + 2*b
550
+ sage: X.homogeneous_component(2)
551
+ -a*d
552
+ sage: X.homogeneous_component(3)
553
+ 0
554
+ """
555
+ return x.degree()
556
+
557
+ def sum(self, iter_of_elements):
558
+ """
559
+ Return the sum of all elements in ``iter_of_elements``.
560
+
561
+ INPUT:
562
+
563
+ - ``iter_of_elements`` -- iterator of elements of ``self``
564
+
565
+ .. NOTE::
566
+
567
+ It overrides a method inherited from
568
+ :class:`~sage.combinat.free_module.CombinatorialFreeModule`,
569
+ which relies on a private attribute of elements---an
570
+ implementation detail that is simply not available for
571
+ :class:`~sage.quivers.algebra_elements.PathAlgebraElement`.
572
+
573
+ EXAMPLES::
574
+
575
+ sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ)
576
+ sage: A.inject_variables()
577
+ Defining e_0, e_1, e_2, a, b, c, d, e, f
578
+ sage: A.sum((a, 2*b, 3*c*e, -a*d, 5*e_0, 3*e_2))
579
+ 5*e_0 + a - a*d + 2*b + 3*e_2
580
+ """
581
+ return sum(iter_of_elements, self.zero())
582
+
583
+ def linear_combination(self, iter_of_elements_coeff, factor_on_left=True):
584
+ r"""
585
+ Return the linear combination `\lambda_1 v_1 + \cdots +
586
+ \lambda_k v_k` (resp. the linear combination `v_1 \lambda_1 +
587
+ \cdots + v_k \lambda_k`) where ``iter_of_elements_coeff`` iterates
588
+ through the sequence `((v_1, \lambda_1), ..., (v_k, \lambda_k))`.
589
+
590
+ INPUT:
591
+
592
+ - ``iter_of_elements_coeff`` -- iterator of pairs ``(element, coeff)``
593
+ with ``element`` in ``self`` and ``coeff`` in ``self.base_ring()``
594
+
595
+ - ``factor_on_left`` -- (optional) if ``True``, the coefficients are
596
+ multiplied from the left if ``False``, the coefficients are
597
+ multiplied from the right
598
+
599
+ .. NOTE::
600
+
601
+ It overrides a method inherited from
602
+ :class:`~sage.combinat.free_module.CombinatorialFreeModule`,
603
+ which relies on a private attribute of elements---an
604
+ implementation detail that is simply not available for
605
+ :class:`~sage.quivers.algebra_elements.PathAlgebraElement`.
606
+
607
+ EXAMPLES::
608
+
609
+ sage: A = DiGraph({0: {1: ['a'], 2: ['b']},
610
+ ....: 1: {0: ['c'], 1: ['d']},
611
+ ....: 2: {0: ['e'], 2: ['f']}}).path_semigroup().algebra(ZZ)
612
+ sage: A.inject_variables()
613
+ Defining e_0, e_1, e_2, a, b, c, d, e, f
614
+ sage: A.linear_combination([(a, 1), (b, 2), (c*e, 3),
615
+ ....: (a*d, -1), (e_0, 5), (e_2, 3)])
616
+ 5*e_0 + a - a*d + 2*b + 3*e_2
617
+ """
618
+ if factor_on_left:
619
+ return self.sum(coeff * element
620
+ for element, coeff in iter_of_elements_coeff)
621
+ else:
622
+ return self.sum(element * coeff
623
+ for element, coeff in iter_of_elements_coeff)
624
+
625
+ def homogeneous_component(self, n):
626
+ """
627
+ Return the `n`-th homogeneous piece of the path algebra.
628
+
629
+ INPUT:
630
+
631
+ - ``n`` -- integer
632
+
633
+ OUTPUT:
634
+
635
+ - :class:`CombinatorialFreeModule`, module spanned by the paths
636
+ of length `n` in the quiver
637
+
638
+ EXAMPLES::
639
+
640
+ sage: P = DiGraph({1:{2:['a'], 3:['b']}, 2:{4:['c']}, 3:{4:['d']}}).path_semigroup()
641
+ sage: A = P.algebra(GF(7))
642
+ sage: A.homogeneous_component(2)
643
+ Free module spanned by [a*c, b*d] over Finite Field of size 7
644
+
645
+ sage: D = DiGraph({1: {2: 'a'}, 2: {3: 'b'}, 3: {1: 'c'}})
646
+ sage: P = D.path_semigroup()
647
+ sage: A = P.algebra(ZZ)
648
+ sage: A.homogeneous_component(3)
649
+ Free module spanned by [a*b*c, b*c*a, c*a*b] over Integer Ring
650
+ """
651
+ basis = []
652
+ for v in self._semigroup._quiver:
653
+ basis.extend(self._semigroup.iter_paths_by_length_and_startpoint(n, v))
654
+ M = CombinatorialFreeModule(self._base, basis, prefix='', bracket=False)
655
+ M._name = "Free module spanned by {0}".format(basis)
656
+ return M
657
+
658
+ __getitem__ = homogeneous_component
659
+
660
+ def homogeneous_components(self):
661
+ r"""
662
+ Return the nonzero homogeneous components of ``self``.
663
+
664
+ EXAMPLES::
665
+
666
+ sage: Q = DiGraph([[1,2,'a'],[2,3,'b'],[3,4,'c']])
667
+ sage: PQ = Q.path_semigroup()
668
+ sage: A = PQ.algebra(GF(7))
669
+ sage: A.homogeneous_components()
670
+ [Free module spanned by [e_1, e_2, e_3, e_4] over Finite Field of size 7,
671
+ Free module spanned by [a, b, c] over Finite Field of size 7,
672
+ Free module spanned by [a*b, b*c] over Finite Field of size 7,
673
+ Free module spanned by [a*b*c] over Finite Field of size 7]
674
+
675
+ .. WARNING::
676
+
677
+ Backward incompatible change: since :issue:`12630` and
678
+ until :issue:`8678`, this feature was implemented under
679
+ the syntax ``list(A)`` by means of ``A.__iter__``. This
680
+ was incorrect since ``A.__iter__``, when defined for a
681
+ parent, should iterate through the elements of `A`.
682
+ """
683
+ result = []
684
+ i = 0
685
+ while True:
686
+ c = self.homogeneous_component(i)
687
+ if not c.dimension():
688
+ break
689
+ result.append(c)
690
+ i += 1
691
+ return result