passagemath-flint 10.6.1rc10__cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. passagemath_flint-10.6.1rc10.dist-info/METADATA +122 -0
  2. passagemath_flint-10.6.1rc10.dist-info/RECORD +360 -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-3701249d.so.21.0.0 +0 -0
  6. passagemath_flint.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  7. passagemath_flint.libs/libgfortran-8a9a71bc.so.5.0.0 +0 -0
  8. passagemath_flint.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  9. passagemath_flint.libs/libgsl-e3525837.so.28.0.0 +0 -0
  10. passagemath_flint.libs/libmpfi-ad12a86d.so.0.0.0 +0 -0
  11. passagemath_flint.libs/libmpfr-e0f11cf3.so.6.2.1 +0 -0
  12. passagemath_flint.libs/libntl-1004113e.so.44.0.1 +0 -0
  13. passagemath_flint.libs/libopenblasp-r0-4c5b64b1.3.29.so +0 -0
  14. sage/all__sagemath_flint.py +29 -0
  15. sage/combinat/all__sagemath_flint.py +1 -0
  16. sage/combinat/posets/all__sagemath_flint.py +1 -0
  17. sage/combinat/posets/hasse_cython_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  18. sage/combinat/posets/hasse_cython_flint.pyx +194 -0
  19. sage/data_structures/all__sagemath_flint.py +1 -0
  20. sage/data_structures/bounded_integer_sequences.cpython-313-aarch64-linux-gnu.so +0 -0
  21. sage/data_structures/bounded_integer_sequences.pxd +62 -0
  22. sage/data_structures/bounded_integer_sequences.pyx +1418 -0
  23. sage/graphs/all__sagemath_flint.py +1 -0
  24. sage/graphs/chrompoly.cpython-313-aarch64-linux-gnu.so +0 -0
  25. sage/graphs/chrompoly.pyx +555 -0
  26. sage/graphs/matchpoly.cpython-313-aarch64-linux-gnu.so +0 -0
  27. sage/graphs/matchpoly.pyx +412 -0
  28. sage/libs/all__sagemath_flint.py +17 -0
  29. sage/libs/arb/__init__.py +1 -0
  30. sage/libs/arb/acb.pxd +154 -0
  31. sage/libs/arb/acb_calc.pxd +9 -0
  32. sage/libs/arb/acb_elliptic.pxd +25 -0
  33. sage/libs/arb/acb_hypgeom.pxd +74 -0
  34. sage/libs/arb/acb_mat.pxd +62 -0
  35. sage/libs/arb/acb_modular.pxd +17 -0
  36. sage/libs/arb/acb_poly.pxd +216 -0
  37. sage/libs/arb/arb.pxd +240 -0
  38. sage/libs/arb/arb_fmpz_poly.pxd +21 -0
  39. sage/libs/arb/arb_hypgeom.pxd +83 -0
  40. sage/libs/arb/arb_wrap.h +34 -0
  41. sage/libs/arb/arf.pxd +131 -0
  42. sage/libs/arb/arith.cpython-313-aarch64-linux-gnu.so +0 -0
  43. sage/libs/arb/arith.pyx +87 -0
  44. sage/libs/arb/bernoulli.pxd +6 -0
  45. sage/libs/arb/mag.pxd +77 -0
  46. sage/libs/arb/types.pxd +37 -0
  47. sage/libs/flint/__init__.py +1 -0
  48. sage/libs/flint/acb.pxd +270 -0
  49. sage/libs/flint/acb_calc.pxd +22 -0
  50. sage/libs/flint/acb_dft.pxd +51 -0
  51. sage/libs/flint/acb_dirichlet.pxd +112 -0
  52. sage/libs/flint/acb_elliptic.pxd +42 -0
  53. sage/libs/flint/acb_hypgeom.pxd +169 -0
  54. sage/libs/flint/acb_macros.pxd +9 -0
  55. sage/libs/flint/acb_mat.pxd +136 -0
  56. sage/libs/flint/acb_mat_macros.pxd +10 -0
  57. sage/libs/flint/acb_modular.pxd +62 -0
  58. sage/libs/flint/acb_poly.pxd +251 -0
  59. sage/libs/flint/acb_poly_macros.pxd +8 -0
  60. sage/libs/flint/acb_theta.pxd +124 -0
  61. sage/libs/flint/acf.pxd +32 -0
  62. sage/libs/flint/aprcl.pxd +84 -0
  63. sage/libs/flint/arb.pxd +382 -0
  64. sage/libs/flint/arb_calc.pxd +31 -0
  65. sage/libs/flint/arb_fmpz_poly.pxd +34 -0
  66. sage/libs/flint/arb_fpwrap.pxd +215 -0
  67. sage/libs/flint/arb_hypgeom.pxd +147 -0
  68. sage/libs/flint/arb_macros.pxd +9 -0
  69. sage/libs/flint/arb_mat.pxd +140 -0
  70. sage/libs/flint/arb_mat_macros.pxd +10 -0
  71. sage/libs/flint/arb_poly.pxd +237 -0
  72. sage/libs/flint/arf.pxd +167 -0
  73. sage/libs/flint/arith.cpython-313-aarch64-linux-gnu.so +0 -0
  74. sage/libs/flint/arith.pxd +76 -0
  75. sage/libs/flint/arith.pyx +77 -0
  76. sage/libs/flint/arith_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  77. sage/libs/flint/arith_sage.pyx +308 -0
  78. sage/libs/flint/bernoulli.pxd +28 -0
  79. sage/libs/flint/bool_mat.pxd +52 -0
  80. sage/libs/flint/ca.pxd +203 -0
  81. sage/libs/flint/ca_ext.pxd +34 -0
  82. sage/libs/flint/ca_field.pxd +32 -0
  83. sage/libs/flint/ca_mat.pxd +117 -0
  84. sage/libs/flint/ca_poly.pxd +104 -0
  85. sage/libs/flint/ca_vec.pxd +46 -0
  86. sage/libs/flint/calcium.pxd +27 -0
  87. sage/libs/flint/d_mat.pxd +39 -0
  88. sage/libs/flint/d_vec.pxd +32 -0
  89. sage/libs/flint/dirichlet.pxd +57 -0
  90. sage/libs/flint/dlog.pxd +53 -0
  91. sage/libs/flint/double_extras.pxd +24 -0
  92. sage/libs/flint/double_interval.pxd +36 -0
  93. sage/libs/flint/fexpr.pxd +104 -0
  94. sage/libs/flint/fexpr_builtin.pxd +20 -0
  95. sage/libs/flint/fft.pxd +66 -0
  96. sage/libs/flint/flint.pxd +36 -0
  97. sage/libs/flint/flint_ntl_wrap.h +35 -0
  98. sage/libs/flint/flint_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  99. sage/libs/flint/flint_sage.pyx +163 -0
  100. sage/libs/flint/flint_wrap.h +190 -0
  101. sage/libs/flint/fmpq.pxd +137 -0
  102. sage/libs/flint/fmpq_mat.pxd +105 -0
  103. sage/libs/flint/fmpq_mat_macros.pxd +10 -0
  104. sage/libs/flint/fmpq_mpoly.pxd +165 -0
  105. sage/libs/flint/fmpq_mpoly_factor.pxd +30 -0
  106. sage/libs/flint/fmpq_poly.pxd +241 -0
  107. sage/libs/flint/fmpq_poly_macros.pxd +9 -0
  108. sage/libs/flint/fmpq_poly_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  109. sage/libs/flint/fmpq_poly_sage.pxd +31 -0
  110. sage/libs/flint/fmpq_poly_sage.pyx +48 -0
  111. sage/libs/flint/fmpq_vec.pxd +27 -0
  112. sage/libs/flint/fmpz.pxd +256 -0
  113. sage/libs/flint/fmpz_extras.pxd +32 -0
  114. sage/libs/flint/fmpz_factor.pxd +42 -0
  115. sage/libs/flint/fmpz_factor_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  116. sage/libs/flint/fmpz_factor_sage.pxd +4 -0
  117. sage/libs/flint/fmpz_factor_sage.pyx +29 -0
  118. sage/libs/flint/fmpz_lll.pxd +49 -0
  119. sage/libs/flint/fmpz_macros.pxd +8 -0
  120. sage/libs/flint/fmpz_mat.pxd +184 -0
  121. sage/libs/flint/fmpz_mat_macros.pxd +10 -0
  122. sage/libs/flint/fmpz_mod.pxd +46 -0
  123. sage/libs/flint/fmpz_mod_mat.pxd +71 -0
  124. sage/libs/flint/fmpz_mod_mpoly.pxd +161 -0
  125. sage/libs/flint/fmpz_mod_mpoly_factor.pxd +28 -0
  126. sage/libs/flint/fmpz_mod_poly.pxd +249 -0
  127. sage/libs/flint/fmpz_mod_poly_factor.pxd +46 -0
  128. sage/libs/flint/fmpz_mod_vec.pxd +27 -0
  129. sage/libs/flint/fmpz_mpoly.pxd +224 -0
  130. sage/libs/flint/fmpz_mpoly_factor.pxd +29 -0
  131. sage/libs/flint/fmpz_mpoly_q.pxd +57 -0
  132. sage/libs/flint/fmpz_poly.cpython-313-aarch64-linux-gnu.so +0 -0
  133. sage/libs/flint/fmpz_poly.pxd +407 -0
  134. sage/libs/flint/fmpz_poly.pyx +19 -0
  135. sage/libs/flint/fmpz_poly_factor.pxd +33 -0
  136. sage/libs/flint/fmpz_poly_macros.pxd +8 -0
  137. sage/libs/flint/fmpz_poly_mat.pxd +71 -0
  138. sage/libs/flint/fmpz_poly_q.pxd +55 -0
  139. sage/libs/flint/fmpz_poly_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  140. sage/libs/flint/fmpz_poly_sage.pxd +20 -0
  141. sage/libs/flint/fmpz_poly_sage.pyx +500 -0
  142. sage/libs/flint/fmpz_vec.pxd +80 -0
  143. sage/libs/flint/fmpzi.pxd +52 -0
  144. sage/libs/flint/fq.pxd +97 -0
  145. sage/libs/flint/fq_default.pxd +84 -0
  146. sage/libs/flint/fq_default_mat.pxd +70 -0
  147. sage/libs/flint/fq_default_poly.pxd +97 -0
  148. sage/libs/flint/fq_default_poly_factor.pxd +39 -0
  149. sage/libs/flint/fq_embed.pxd +28 -0
  150. sage/libs/flint/fq_mat.pxd +83 -0
  151. sage/libs/flint/fq_nmod.pxd +95 -0
  152. sage/libs/flint/fq_nmod_embed.pxd +28 -0
  153. sage/libs/flint/fq_nmod_mat.pxd +83 -0
  154. sage/libs/flint/fq_nmod_mpoly.pxd +130 -0
  155. sage/libs/flint/fq_nmod_mpoly_factor.pxd +28 -0
  156. sage/libs/flint/fq_nmod_poly.pxd +202 -0
  157. sage/libs/flint/fq_nmod_poly_factor.pxd +47 -0
  158. sage/libs/flint/fq_nmod_vec.pxd +33 -0
  159. sage/libs/flint/fq_poly.pxd +204 -0
  160. sage/libs/flint/fq_poly_factor.pxd +47 -0
  161. sage/libs/flint/fq_vec.pxd +33 -0
  162. sage/libs/flint/fq_zech.pxd +99 -0
  163. sage/libs/flint/fq_zech_embed.pxd +28 -0
  164. sage/libs/flint/fq_zech_mat.pxd +78 -0
  165. sage/libs/flint/fq_zech_poly.pxd +198 -0
  166. sage/libs/flint/fq_zech_poly_factor.pxd +47 -0
  167. sage/libs/flint/fq_zech_vec.pxd +33 -0
  168. sage/libs/flint/gr.pxd +174 -0
  169. sage/libs/flint/gr_generic.pxd +215 -0
  170. sage/libs/flint/gr_mat.pxd +161 -0
  171. sage/libs/flint/gr_mpoly.pxd +68 -0
  172. sage/libs/flint/gr_poly.pxd +276 -0
  173. sage/libs/flint/gr_special.pxd +237 -0
  174. sage/libs/flint/gr_vec.pxd +120 -0
  175. sage/libs/flint/hypgeom.pxd +24 -0
  176. sage/libs/flint/long_extras.pxd +23 -0
  177. sage/libs/flint/mag.pxd +131 -0
  178. sage/libs/flint/mag_macros.pxd +8 -0
  179. sage/libs/flint/mpf_mat.pxd +36 -0
  180. sage/libs/flint/mpf_vec.pxd +34 -0
  181. sage/libs/flint/mpfr_mat.pxd +27 -0
  182. sage/libs/flint/mpfr_vec.pxd +25 -0
  183. sage/libs/flint/mpn_extras.pxd +41 -0
  184. sage/libs/flint/mpoly.pxd +72 -0
  185. sage/libs/flint/nf.pxd +19 -0
  186. sage/libs/flint/nf_elem.pxd +74 -0
  187. sage/libs/flint/nmod.pxd +35 -0
  188. sage/libs/flint/nmod_mat.pxd +104 -0
  189. sage/libs/flint/nmod_mpoly.pxd +144 -0
  190. sage/libs/flint/nmod_mpoly_factor.pxd +28 -0
  191. sage/libs/flint/nmod_poly.pxd +339 -0
  192. sage/libs/flint/nmod_poly_factor.pxd +44 -0
  193. sage/libs/flint/nmod_poly_linkage.pxi +710 -0
  194. sage/libs/flint/nmod_poly_mat.pxd +76 -0
  195. sage/libs/flint/nmod_vec.pxd +40 -0
  196. sage/libs/flint/ntl_interface.pxd +17 -0
  197. sage/libs/flint/padic.pxd +93 -0
  198. sage/libs/flint/padic_mat.pxd +64 -0
  199. sage/libs/flint/padic_poly.pxd +88 -0
  200. sage/libs/flint/partitions.pxd +23 -0
  201. sage/libs/flint/perm.pxd +26 -0
  202. sage/libs/flint/profiler.pxd +24 -0
  203. sage/libs/flint/qadic.pxd +77 -0
  204. sage/libs/flint/qfb.pxd +44 -0
  205. sage/libs/flint/qqbar.pxd +172 -0
  206. sage/libs/flint/qsieve.cpython-313-aarch64-linux-gnu.so +0 -0
  207. sage/libs/flint/qsieve.pxd +41 -0
  208. sage/libs/flint/qsieve.pyx +21 -0
  209. sage/libs/flint/qsieve_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  210. sage/libs/flint/qsieve_sage.pyx +67 -0
  211. sage/libs/flint/thread_pool.pxd +25 -0
  212. sage/libs/flint/types.pxd +2076 -0
  213. sage/libs/flint/ulong_extras.cpython-313-aarch64-linux-gnu.so +0 -0
  214. sage/libs/flint/ulong_extras.pxd +141 -0
  215. sage/libs/flint/ulong_extras.pyx +21 -0
  216. sage/libs/flint/ulong_extras_sage.cpython-313-aarch64-linux-gnu.so +0 -0
  217. sage/libs/flint/ulong_extras_sage.pyx +21 -0
  218. sage/matrix/all__sagemath_flint.py +1 -0
  219. sage/matrix/change_ring.cpython-313-aarch64-linux-gnu.so +0 -0
  220. sage/matrix/change_ring.pyx +43 -0
  221. sage/matrix/matrix_complex_ball_dense.cpython-313-aarch64-linux-gnu.so +0 -0
  222. sage/matrix/matrix_complex_ball_dense.pxd +14 -0
  223. sage/matrix/matrix_complex_ball_dense.pyx +973 -0
  224. sage/matrix/matrix_cyclo_dense.cpython-313-aarch64-linux-gnu.so +0 -0
  225. sage/matrix/matrix_cyclo_dense.pxd +16 -0
  226. sage/matrix/matrix_cyclo_dense.pyx +1761 -0
  227. sage/matrix/matrix_integer_dense.cpython-313-aarch64-linux-gnu.so +0 -0
  228. sage/matrix/matrix_integer_dense.pxd +32 -0
  229. sage/matrix/matrix_integer_dense.pyx +5801 -0
  230. sage/matrix/matrix_integer_dense_hnf.py +1294 -0
  231. sage/matrix/matrix_integer_dense_saturation.py +346 -0
  232. sage/matrix/matrix_integer_sparse.cpython-313-aarch64-linux-gnu.so +0 -0
  233. sage/matrix/matrix_integer_sparse.pxd +9 -0
  234. sage/matrix/matrix_integer_sparse.pyx +1090 -0
  235. sage/matrix/matrix_rational_dense.cpython-313-aarch64-linux-gnu.so +0 -0
  236. sage/matrix/matrix_rational_dense.pxd +23 -0
  237. sage/matrix/matrix_rational_dense.pyx +2995 -0
  238. sage/matrix/matrix_rational_sparse.cpython-313-aarch64-linux-gnu.so +0 -0
  239. sage/matrix/matrix_rational_sparse.pxd +11 -0
  240. sage/matrix/matrix_rational_sparse.pyx +789 -0
  241. sage/matrix/misc_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  242. sage/matrix/misc_flint.pyx +109 -0
  243. sage/modular/all__sagemath_flint.py +1 -0
  244. sage/modular/modform/all__sagemath_flint.py +1 -0
  245. sage/modular/modform/eis_series_cython.cpython-313-aarch64-linux-gnu.so +0 -0
  246. sage/modular/modform/eis_series_cython.pyx +226 -0
  247. sage/modular/modsym/all__sagemath_flint.py +1 -0
  248. sage/modular/modsym/apply.cpython-313-aarch64-linux-gnu.so +0 -0
  249. sage/modular/modsym/apply.pxd +6 -0
  250. sage/modular/modsym/apply.pyx +113 -0
  251. sage/modular/modsym/heilbronn.cpython-313-aarch64-linux-gnu.so +0 -0
  252. sage/modular/modsym/heilbronn.pyx +966 -0
  253. sage/modular/pollack_stevens/all__sagemath_flint.py +1 -0
  254. sage/modular/pollack_stevens/dist.cpython-313-aarch64-linux-gnu.so +0 -0
  255. sage/modular/pollack_stevens/dist.pxd +38 -0
  256. sage/modular/pollack_stevens/dist.pyx +1439 -0
  257. sage/quivers/algebra.py +691 -0
  258. sage/quivers/algebra_elements.cpython-313-aarch64-linux-gnu.so +0 -0
  259. sage/quivers/algebra_elements.pxd +97 -0
  260. sage/quivers/algebra_elements.pxi +1324 -0
  261. sage/quivers/algebra_elements.pyx +1424 -0
  262. sage/quivers/all.py +1 -0
  263. sage/quivers/ar_quiver.py +917 -0
  264. sage/quivers/homspace.py +640 -0
  265. sage/quivers/morphism.py +1282 -0
  266. sage/quivers/path_semigroup.py +1155 -0
  267. sage/quivers/paths.cpython-313-aarch64-linux-gnu.so +0 -0
  268. sage/quivers/paths.pxd +13 -0
  269. sage/quivers/paths.pyx +809 -0
  270. sage/quivers/representation.py +2975 -0
  271. sage/rings/all__sagemath_flint.py +37 -0
  272. sage/rings/cif.py +4 -0
  273. sage/rings/complex_arb.cpython-313-aarch64-linux-gnu.so +0 -0
  274. sage/rings/complex_arb.pxd +29 -0
  275. sage/rings/complex_arb.pyx +5176 -0
  276. sage/rings/complex_interval.cpython-313-aarch64-linux-gnu.so +0 -0
  277. sage/rings/complex_interval.pxd +30 -0
  278. sage/rings/complex_interval.pyx +2475 -0
  279. sage/rings/complex_interval_field.py +711 -0
  280. sage/rings/convert/all.py +1 -0
  281. sage/rings/convert/mpfi.cpython-313-aarch64-linux-gnu.so +0 -0
  282. sage/rings/convert/mpfi.pxd +6 -0
  283. sage/rings/convert/mpfi.pyx +576 -0
  284. sage/rings/factorint_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  285. sage/rings/factorint_flint.pyx +99 -0
  286. sage/rings/fraction_field_FpT.cpython-313-aarch64-linux-gnu.so +0 -0
  287. sage/rings/fraction_field_FpT.pxd +28 -0
  288. sage/rings/fraction_field_FpT.pyx +2043 -0
  289. sage/rings/imaginary_unit.py +5 -0
  290. sage/rings/monomials.py +73 -0
  291. sage/rings/number_field/S_unit_solver.py +2870 -0
  292. sage/rings/number_field/all__sagemath_flint.py +7 -0
  293. sage/rings/number_field/bdd_height.py +664 -0
  294. sage/rings/number_field/class_group.py +762 -0
  295. sage/rings/number_field/galois_group.py +1307 -0
  296. sage/rings/number_field/homset.py +612 -0
  297. sage/rings/number_field/maps.py +687 -0
  298. sage/rings/number_field/morphism.py +272 -0
  299. sage/rings/number_field/number_field.py +12820 -0
  300. sage/rings/number_field/number_field_element.cpython-313-aarch64-linux-gnu.so +0 -0
  301. sage/rings/number_field/number_field_element.pxd +59 -0
  302. sage/rings/number_field/number_field_element.pyx +5735 -0
  303. sage/rings/number_field/number_field_element_quadratic.cpython-313-aarch64-linux-gnu.so +0 -0
  304. sage/rings/number_field/number_field_element_quadratic.pxd +34 -0
  305. sage/rings/number_field/number_field_element_quadratic.pyx +3185 -0
  306. sage/rings/number_field/number_field_ideal_rel.py +925 -0
  307. sage/rings/number_field/number_field_morphisms.cpython-313-aarch64-linux-gnu.so +0 -0
  308. sage/rings/number_field/number_field_morphisms.pyx +781 -0
  309. sage/rings/number_field/number_field_rel.py +2734 -0
  310. sage/rings/number_field/order.py +2981 -0
  311. sage/rings/number_field/order_ideal.py +804 -0
  312. sage/rings/number_field/selmer_group.py +715 -0
  313. sage/rings/number_field/small_primes_of_degree_one.py +242 -0
  314. sage/rings/number_field/splitting_field.py +606 -0
  315. sage/rings/number_field/structure.py +380 -0
  316. sage/rings/number_field/unit_group.py +721 -0
  317. sage/rings/padics/all__sagemath_flint.py +3 -0
  318. sage/rings/polynomial/all__sagemath_flint.py +1 -0
  319. sage/rings/polynomial/complex_roots.py +312 -0
  320. sage/rings/polynomial/evaluation_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  321. sage/rings/polynomial/evaluation_flint.pxd +7 -0
  322. sage/rings/polynomial/evaluation_flint.pyx +68 -0
  323. sage/rings/polynomial/hilbert.cpython-313-aarch64-linux-gnu.so +0 -0
  324. sage/rings/polynomial/hilbert.pyx +602 -0
  325. sage/rings/polynomial/polynomial_complex_arb.cpython-313-aarch64-linux-gnu.so +0 -0
  326. sage/rings/polynomial/polynomial_complex_arb.pxd +7 -0
  327. sage/rings/polynomial/polynomial_complex_arb.pyx +963 -0
  328. sage/rings/polynomial/polynomial_integer_dense_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  329. sage/rings/polynomial/polynomial_integer_dense_flint.pxd +13 -0
  330. sage/rings/polynomial/polynomial_integer_dense_flint.pyx +1881 -0
  331. sage/rings/polynomial/polynomial_number_field.cpython-313-aarch64-linux-gnu.so +0 -0
  332. sage/rings/polynomial/polynomial_number_field.pyx +345 -0
  333. sage/rings/polynomial/polynomial_rational_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  334. sage/rings/polynomial/polynomial_rational_flint.pxd +20 -0
  335. sage/rings/polynomial/polynomial_rational_flint.pyx +2598 -0
  336. sage/rings/polynomial/polynomial_zmod_flint.cpython-313-aarch64-linux-gnu.so +0 -0
  337. sage/rings/polynomial/polynomial_zmod_flint.pxd +20 -0
  338. sage/rings/polynomial/polynomial_zmod_flint.pyx +1063 -0
  339. sage/rings/polynomial/real_roots.cpython-313-aarch64-linux-gnu.so +0 -0
  340. sage/rings/polynomial/real_roots.pxd +81 -0
  341. sage/rings/polynomial/real_roots.pyx +4704 -0
  342. sage/rings/polynomial/refine_root.cpython-313-aarch64-linux-gnu.so +0 -0
  343. sage/rings/polynomial/refine_root.pyx +142 -0
  344. sage/rings/polynomial/weil/all.py +4 -0
  345. sage/rings/polynomial/weil/power_sums.h +46 -0
  346. sage/rings/polynomial/weil/weil_polynomials.cpython-313-aarch64-linux-gnu.so +0 -0
  347. sage/rings/polynomial/weil/weil_polynomials.pyx +596 -0
  348. sage/rings/qqbar.py +9025 -0
  349. sage/rings/real_arb.cpython-313-aarch64-linux-gnu.so +0 -0
  350. sage/rings/real_arb.pxd +21 -0
  351. sage/rings/real_arb.pyx +4065 -0
  352. sage/rings/real_interval_absolute.cpython-313-aarch64-linux-gnu.so +0 -0
  353. sage/rings/real_interval_absolute.pyx +1073 -0
  354. sage/rings/real_mpfi.cpython-313-aarch64-linux-gnu.so +0 -0
  355. sage/rings/real_mpfi.pyx +5428 -0
  356. sage/schemes/all__sagemath_flint.py +1 -0
  357. sage/schemes/elliptic_curves/all__sagemath_flint.py +1 -0
  358. sage/schemes/elliptic_curves/descent_two_isogeny.cpython-313-aarch64-linux-gnu.so +0 -0
  359. sage/schemes/elliptic_curves/descent_two_isogeny.pyx +1387 -0
  360. sage/schemes/elliptic_curves/descent_two_isogeny_pari.pxd +5 -0
@@ -0,0 +1,917 @@
1
+ # sage_setup: distribution = sagemath-flint
2
+ # sage.doctest: needs sage.graphs sage.modules
3
+ r"""
4
+ Auslander-Reiten Quivers
5
+ """
6
+
7
+ # ****************************************************************************
8
+ # Copyright (C) 2024 Travis Scrimshaw <tcscrims at gmail.com>
9
+ #
10
+ # This program is free software: you can redistribute it and/or modify
11
+ # it under the terms of the GNU General Public License as published by
12
+ # the Free Software Foundation, either version 2 of the License, or
13
+ # (at your option) any later version.
14
+ # https://www.gnu.org/licenses/
15
+ # ****************************************************************************
16
+
17
+ from sage.categories.sets_cat import Sets
18
+ from sage.combinat.free_module import CombinatorialFreeModule
19
+ from sage.combinat.root_system.cartan_type import CartanType
20
+ from sage.graphs.digraph import DiGraph
21
+ from sage.misc.cachefunc import cached_method
22
+ from sage.rings.integer_ring import ZZ
23
+ from sage.sets.family import Family
24
+ from sage.structure.element import Element
25
+ from sage.structure.global_options import GlobalOptions
26
+ from sage.structure.parent import Parent
27
+ from sage.structure.richcmp import richcmp
28
+ from sage.structure.unique_representation import UniqueRepresentation
29
+
30
+
31
+ class AuslanderReitenQuiver(UniqueRepresentation, Parent):
32
+ r"""
33
+ The Auslander-Reiten quiver.
34
+
35
+ Let `Q = (Q_0, Q_1)` be a finite acyclic quiver. The
36
+ *Auslander-Reiten quiver* (AR quiver) `\Gamma_Q` is the quiver
37
+ whose vertices correspond to the indecompositible modules of `Q`
38
+ (equivalently its path algebra over an algebraically closed field)
39
+ and edges are irreducible morphisms.
40
+
41
+ In this implementation, we denote the vertices of `\Gamma_Q` as
42
+ certain pairs `\langle v, k \rangle`, where `v \in Q_0` and
43
+ `k \in \ZZ \setminus \{0\}` is called the *level*. When `k > 0`
44
+ (resp. `k < 0`), then it corresponds to a preprojective (resp.
45
+ postinjective) module. When the quiver is a finite type Dynkin
46
+ quiver, we consider all modules to be preprojectives and denoted
47
+ by a positive level.
48
+
49
+ .. NOTE::
50
+
51
+ We use the terminology *postinjective* instead of *preinjective*
52
+ given that they follow from injectives by AR translation.
53
+
54
+ ALGORITHM:
55
+
56
+ We compute the dimension vectors of a projective `\langle v, 1 \rangle`
57
+ by counting the number of (directed) paths `u \to v` in `Q`. We then
58
+ proceed inductively to compute all of the dimension vectors of level
59
+ `k` by using the translation equation
60
+
61
+ .. MATH::
62
+
63
+ dim \langle v, k-1 \rangle + \dim \langle v, k \rangle
64
+ = \sum_{u,k'} \dim \langle u, k' \rangle,
65
+
66
+ where the sum is over all paths from `\langle v, k-1 \rangle` to
67
+ `\langle v, k \rangle` in `\Gamma_Q`. More specifically, for each edge
68
+ `(u, v, \ell) \in Q_1` (resp. `(v, u, \ell) \in Q_1`), we have
69
+ `\langle u, k-1 \rangle` (resp. `\langle u, k \rangle`) in the sum
70
+ (assuming the node is in the AR quiver).
71
+
72
+ The algorithm for postinjectives is dual to the above.
73
+
74
+ .. TODO::
75
+
76
+ This only is implemented for the preprojectives and postinjectives
77
+ when the quiver is not a finite type Dynkin quiver.
78
+
79
+ .. TODO::
80
+
81
+ Implement this for general Artinian algebras.
82
+
83
+ EXAMPLES:
84
+
85
+ We create the AR quivers for finite type `A_3` Dynkin quivers::
86
+
87
+ sage: DA = DiGraph([[1, 2], [2, 3]])
88
+ sage: AR = DA.auslander_reiten_quiver()
89
+ sage: AR.digraph().edges(labels=False)
90
+ [(<1, 1>, <2, 2>), (<2, 1>, <1, 1>), (<2, 1>, <3, 2>), (<3, 1>, <2, 1>),
91
+ (<2, 2>, <3, 3>), (<3, 2>, <2, 2>)]
92
+
93
+ sage: DA = DiGraph([[1, 2], [3, 2]])
94
+ sage: AR = DA.auslander_reiten_quiver()
95
+ sage: AR.digraph().edges(labels=False)
96
+ [(<1, 1>, <2, 2>), (<2, 1>, <1, 1>), (<2, 1>, <3, 1>), (<3, 1>, <2, 2>),
97
+ (<2, 2>, <1, 2>), (<2, 2>, <3, 2>)]
98
+
99
+ sage: DA = DiGraph([[2, 1], [2, 3]])
100
+ sage: AR = DA.auslander_reiten_quiver()
101
+ sage: AR.digraph().edges(labels=False)
102
+ [(<1, 1>, <2, 1>), (<2, 1>, <1, 2>), (<2, 1>, <3, 2>), (<3, 1>, <2, 1>),
103
+ (<1, 2>, <2, 2>), (<3, 2>, <2, 2>)]
104
+
105
+ sage: DA = DiGraph([[2, 1], [3, 2]])
106
+ sage: AR = DA.auslander_reiten_quiver()
107
+ sage: AR.digraph().edges(labels=False)
108
+ [(<1, 1>, <2, 1>), (<2, 1>, <3, 1>), (<2, 1>, <1, 2>), (<3, 1>, <2, 2>),
109
+ (<1, 2>, <2, 2>), (<2, 2>, <1, 3>)]
110
+
111
+ An example for the type `D_5` Dynkin quiver::
112
+
113
+ sage: DD = DiGraph([[5,3], [4,3], [3,2], [2,1]])
114
+ sage: AR = DD.auslander_reiten_quiver()
115
+ sage: AR
116
+ Auslander-Reiten quiver of a ['D', 5] Dynkin quiver
117
+ sage: len(list(DD))
118
+ 5
119
+
120
+ An `E_8` Dynkin quiver::
121
+
122
+ sage: DE = DiGraph([[8,7], [7,6], [5,6], [5,3], [3,4], [3,2], [2,1]])
123
+ sage: AR = DE.auslander_reiten_quiver()
124
+ sage: AR
125
+ Auslander-Reiten quiver of a ['E', 8] Dynkin quiver
126
+ sage: len(list(AR))
127
+ 120
128
+ sage: len(list(RootSystem(['E', 8]).root_lattice().positive_roots()))
129
+ 120
130
+
131
+ The Kronecker quiver::
132
+
133
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
134
+ sage: AR = D.auslander_reiten_quiver()
135
+ sage: for i in range(1, 5):
136
+ ....: for v in D.vertices():
137
+ ....: pp = AR(v, i)
138
+ ....: pi = AR(v, -i)
139
+ ....: print(pp, pp.dimension_vector(), " ", pi, pi.dimension_vector())
140
+ <1, 1> v1 + 2*v2 <1, -1> v1
141
+ <2, 1> v2 <2, -1> 2*v1 + v2
142
+ <1, 2> 3*v1 + 4*v2 <1, -2> 3*v1 + 2*v2
143
+ <2, 2> 2*v1 + 3*v2 <2, -2> 4*v1 + 3*v2
144
+ <1, 3> 5*v1 + 6*v2 <1, -3> 5*v1 + 4*v2
145
+ <2, 3> 4*v1 + 5*v2 <2, -3> 6*v1 + 5*v2
146
+ <1, 4> 7*v1 + 8*v2 <1, -4> 7*v1 + 6*v2
147
+ <2, 4> 6*v1 + 7*v2 <2, -4> 8*v1 + 7*v2
148
+ """
149
+ @staticmethod
150
+ def __classcall_private__(cls, quiver):
151
+ """
152
+ Normalize input to ensure a unique representation.
153
+
154
+ EXAMPLES::
155
+
156
+ sage: D = DiGraph([[1,2], [2,3], [3,1]])
157
+ sage: D.auslander_reiten_quiver()
158
+ Traceback (most recent call last):
159
+ ...
160
+ ValueError: the quiver must not have cycles
161
+ """
162
+ if quiver.has_loops() or not quiver.is_directed_acyclic():
163
+ raise ValueError("the quiver must not have cycles")
164
+ quiver = quiver.copy(immutable=True)
165
+ return super().__classcall__(cls, quiver)
166
+
167
+ def __init__(self, quiver):
168
+ r"""
169
+ Initialize ``self``.
170
+
171
+ EXAMPLES::
172
+
173
+ sage: DE = DiGraph([[7,6], [6,5], [5,3], [3,4], [2,3], [1,2]])
174
+ sage: AR = DE.auslander_reiten_quiver()
175
+ sage: TestSuite(AR).run()
176
+
177
+ sage: D = DiGraph([[1,2], [3,4]])
178
+ sage: AR = D.auslander_reiten_quiver()
179
+ sage: TestSuite(AR).run()
180
+
181
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
182
+ sage: AR = D.auslander_reiten_quiver()
183
+ sage: TestSuite(AR).run()
184
+ """
185
+ self._quiver = quiver
186
+ self._top_sort = quiver.topological_sort()
187
+ self._dim_vec_space = CombinatorialFreeModule(ZZ, quiver.vertices(), prefix='v', bracket=False)
188
+ self._max_level = float('inf')
189
+
190
+ dynkin_type = detect_dynkin_quiver(quiver)
191
+ if dynkin_type is not None:
192
+ self._cartan_type = dynkin_type
193
+ self._is_finite = dynkin_type is not None
194
+ cat = Sets().Enumerated().Finite() if self._is_finite else Sets().Infinite()
195
+ super().__init__(self, category=cat)
196
+
197
+ def _repr_(self) -> str:
198
+ """
199
+ Return a string representation of ``self``.
200
+
201
+ EXAMPLES::
202
+
203
+ sage: DE = DiGraph([[5,6], [5,3], [3,4], [2,3], [1,2]])
204
+ sage: DE.auslander_reiten_quiver()
205
+ Auslander-Reiten quiver of a ['E', 6] Dynkin quiver
206
+
207
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
208
+ sage: D.auslander_reiten_quiver()
209
+ Auslander-Reiten quiver of Multi-digraph on 2 vertices
210
+ """
211
+ if self._is_finite:
212
+ return "Auslander-Reiten quiver of a {} Dynkin quiver".format(self._cartan_type)
213
+ return "Auslander-Reiten quiver of {}".format(self._quiver)
214
+
215
+ # add options to class
216
+ class options(GlobalOptions):
217
+ r"""
218
+ Set and display the global options for Auslander-Reiten quivers.
219
+ If no parameters are set, then the function returns a copy of the
220
+ options dictionary.
221
+
222
+ The ``options`` to partitions can be accessed as the method
223
+ :obj:`AuslanderReitenQuiver.options` of
224
+ :class:`~sage.quivers.ar_quiver.AuslanderReitenQuiver`.
225
+
226
+ @OPTIONS@
227
+
228
+ EXAMPLES::
229
+
230
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
231
+ sage: AR = D.auslander_reiten_quiver()
232
+ sage: node = AR(2, 2)
233
+ sage: latex(node)
234
+ \left\langle 2, 2 \right\rangle
235
+ sage: AR.options.latex = "dimension_vector"
236
+ sage: latex(node)
237
+ 2 v_{1} + 3 v_{2}
238
+ sage: AR.options.latex = "both"
239
+ sage: latex(node)
240
+ \begin{gathered} \left\langle 2, 2 \right\rangle \\ 2 v_{1} + 3 v_{2} \end{gathered}
241
+ sage: AR.options._reset()
242
+ """
243
+ NAME = 'AuslanderReitenQuiver'
244
+ module = 'sage.quivers.ar_quiver'
245
+ latex = dict(default='node',
246
+ description='Specifies how nodes of the AR quiver should be latexed',
247
+ values=dict(node='latex as the node description',
248
+ dimension_vector='latex as the dimension vector',
249
+ both='latex as both'),
250
+ case_sensitive=False)
251
+
252
+ def _an_element_(self):
253
+ r"""
254
+ Return an element of ``self``.
255
+
256
+ EXAMPLES::
257
+
258
+ sage: DE = DiGraph([[7,8], [7,6], [5,6], [3,5], [4,3], [2,3], [1,2]])
259
+ sage: AR = DE.auslander_reiten_quiver()
260
+ sage: AR._an_element_()
261
+ <1, 1>
262
+
263
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
264
+ sage: AR = D.auslander_reiten_quiver()
265
+ sage: AR._an_element_()
266
+ <1, 1>
267
+ """
268
+ return next(iter(self.projectives()))
269
+
270
+ def quiver(self):
271
+ r"""
272
+ Return the quiver defining ``self``.
273
+
274
+ EXAMPLES::
275
+
276
+ sage: DE = DiGraph([[7,8], [7,6], [5,6], [3,5], [4,3], [2,3], [1,2]])
277
+ sage: AR = DE.auslander_reiten_quiver()
278
+ sage: AR.quiver() == DE
279
+ True
280
+ """
281
+ return self._quiver
282
+
283
+ def projectives(self):
284
+ r"""
285
+ Return the projectives of ``self``.
286
+
287
+ EXAMPLES::
288
+
289
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
290
+ sage: AR = D.auslander_reiten_quiver()
291
+ sage: AR.projectives()
292
+ Finite family {1: <1, 1>, 2: <2, 1>}
293
+ """
294
+ return Family({v: self.element_class(self, v, 1) for v in self._quiver.vertex_iterator()})
295
+
296
+ @cached_method
297
+ def simples(self):
298
+ r"""
299
+ Return the simples of ``self``.
300
+
301
+ EXAMPLES::
302
+
303
+ sage: DE = DiGraph([[7,8], [7,6], [5,6], [3,5], [4,3], [2,3], [1,2]])
304
+ sage: AR = DE.auslander_reiten_quiver()
305
+ sage: AR.simples()
306
+ Finite family {1: <1, 15>, 2: <1, 14>, 3: <8, 4>, 4: <4, 15>,
307
+ 5: <8, 3>, 6: <6, 1>, 7: <7, 15>, 8: <8, 1>}
308
+ """
309
+ ret = {}
310
+ for elt in self:
311
+ supp = elt.dimension_vector().support()
312
+ if len(supp) != 1:
313
+ continue
314
+ ret[next(iter(supp))] = elt
315
+ return Family(ret)
316
+
317
+ def injectives(self):
318
+ r"""
319
+ Return the injectives of ``self``.
320
+
321
+ EXAMPLES::
322
+
323
+ sage: DE = DiGraph([[7,6], [6,5], [5,3], [4,3], [2,3], [1,2]])
324
+ sage: AR = DE.auslander_reiten_quiver()
325
+ sage: AR.injectives()
326
+ Finite family {1: <1, 9>, 2: <2, 9>, 3: <3, 9>, 4: <4, 9>,
327
+ 5: <5, 9>, 6: <6, 9>, 7: <7, 9>}
328
+ """
329
+ if self._is_finite:
330
+ self.digraph() # sets self._injective attribute
331
+ return self._injectives
332
+ return Family({v: self(v, -1) for v in self._quiver.vertex_iterator()})
333
+
334
+ def _digraph_set_latex_options(self, G):
335
+ """
336
+ Set the latex options of the digraph ``G``.
337
+
338
+ EXAMPLES::
339
+
340
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
341
+ sage: AR = D.auslander_reiten_quiver()
342
+ sage: G = AR.digraph_preprojectives(2)
343
+ sage: G = AR._digraph_set_latex_options(G)
344
+ sage: G.latex_options().get_option('edge_labels')
345
+ True
346
+ """
347
+ G.set_latex_options(edge_labels=True)
348
+
349
+ from sage.graphs.dot2tex_utils import have_dot2tex
350
+ if have_dot2tex():
351
+ from sage.misc.latex import LatexExpr
352
+
353
+ def edge_options(data):
354
+ u, v, l = data
355
+ edge_opts = {}
356
+ if l == 'ART':
357
+ edge_opts["color"] = "dashed,blue"
358
+ edge_opts["label"] = LatexExpr(r"\tau")
359
+ return edge_opts
360
+
361
+ G.set_latex_options(format='dot2tex', edge_options=edge_options)
362
+ return G
363
+
364
+ def digraph_preprojectives(self, max_depth, with_translations=False):
365
+ r"""
366
+ Return the digraph of preprojectives of ``self`` up to ``max_depth``.
367
+
368
+ EXAMPLES::
369
+
370
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
371
+ sage: AR = D.auslander_reiten_quiver()
372
+ sage: G = AR.digraph_preprojectives(3)
373
+ sage: [node.dimension_vector() for node in G]
374
+ [v1 + 2*v2, v2, 3*v1 + 4*v2, 2*v1 + 3*v2, 5*v1 + 6*v2, 4*v1 + 5*v2]
375
+ sage: AR.digraph_preprojectives(0)
376
+ Digraph on 0 vertices
377
+ """
378
+ if max_depth < 1:
379
+ return self._digraph_set_latex_options(DiGraph())
380
+
381
+ k = 2
382
+ prev = dict(self.projectives())
383
+ verts = list(prev.values())
384
+ edges = [(prev[v], prev[u], l) for u, v, l in self._quiver.edge_iterator()]
385
+ cur = self._dim_vecs_level(k)
386
+ while k <= max_depth:
387
+ # convert cur to the appropriate data
388
+ cur = {v: self.element_class(self, v, k) for v in cur}
389
+ verts.extend(cur.values())
390
+ edges.extend((cur[v], cur[u], l)
391
+ for u in cur for _, v, l in self._quiver.outgoing_edge_iterator(u) if v in cur)
392
+ edges.extend((prev[u], cur[v], l) for v in cur
393
+ for u, _, l in self._quiver.incoming_edge_iterator(v) if u in prev)
394
+ if with_translations:
395
+ edges.extend((cur[v], prev[v], 'ART') for v in cur if v in prev)
396
+ k += 1
397
+ prev = cur
398
+ cur = self._dim_vecs_level(k)
399
+
400
+ G = DiGraph([verts, edges], format='vertices_and_edges', multiedges=True, immutable=True)
401
+ return self._digraph_set_latex_options(G)
402
+
403
+ def digraph_postinjectives(self, max_depth, with_translations=False):
404
+ """
405
+ Return the digraph of postinjectives of ``self`` up to ``max_depth``.
406
+
407
+ EXAMPLES::
408
+
409
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
410
+ sage: AR = D.auslander_reiten_quiver()
411
+ sage: G = AR.digraph_postinjectives(3)
412
+ sage: [node.dimension_vector() for node in G]
413
+ [5*v1 + 4*v2, 6*v1 + 5*v2, 3*v1 + 2*v2, 4*v1 + 3*v2, v1, 2*v1 + v2]
414
+ sage: AR.digraph_postinjectives(0)
415
+ Digraph on 0 vertices
416
+ """
417
+ if max_depth < 1:
418
+ return self._digraph_set_latex_options(DiGraph())
419
+
420
+ k = 2
421
+ prev = dict(self.injectives())
422
+ verts = list(prev.values())
423
+ edges = [(prev[u], prev[v], l) for u, v, l in self._quiver.edge_iterator()]
424
+ cur = self._dim_vecs_level(-k)
425
+ while k <= max_depth:
426
+ # convert cur to the appropriate data
427
+ cur = {v: self.element_class(self, v, -k) for v in cur}
428
+ verts.extend(cur.values())
429
+ edges.extend((cur[u], cur[v], l)
430
+ for u in cur for _, v, l in self._quiver.outgoing_edge_iterator(u) if v in cur)
431
+ edges.extend((cur[v], prev[u], l) for v in cur
432
+ for u, _, l in self._quiver.incoming_edge_iterator(v) if u in prev)
433
+ if with_translations:
434
+ edges.extend((prev[v], cur[v], 'ART') for v in cur if v in prev)
435
+ k += 1
436
+ prev = cur
437
+ cur = self._dim_vecs_level(-k)
438
+
439
+ G = DiGraph([verts, edges], format='vertices_and_edges', multiedges=True, immutable=True)
440
+ return self._digraph_set_latex_options(G)
441
+
442
+ @cached_method
443
+ def digraph(self, with_translations=False):
444
+ r"""
445
+ Return the digraph of ``self``.
446
+
447
+ INPUT:
448
+
449
+ - ``with_translations`` -- boolean (default: ``False``); if ``True``,
450
+ then include the arrows corresponding to the translations
451
+
452
+ EXAMPLES::
453
+
454
+ sage: DA = DiGraph([[1,2]])
455
+ sage: AR = DA.auslander_reiten_quiver()
456
+ sage: G = AR.digraph(); G
457
+ Digraph on 3 vertices
458
+ sage: G.edges()
459
+ [(<1, 1>, <2, 2>, None), (<2, 1>, <1, 1>, None)]
460
+ sage: GT = AR.digraph(with_translations=True)
461
+ sage: GT.edges()
462
+ [(<1, 1>, <2, 2>, None), (<2, 1>, <1, 1>, None), (<2, 2>, <2, 1>, 'ART')]
463
+ """
464
+ if not self._is_finite:
465
+ raise TypeError("the AR quiver is not finite")
466
+
467
+ if with_translations:
468
+ G = self.digraph().copy(immutable=False)
469
+ for v in G.vertex_iterator():
470
+ u = v.translation()
471
+ if u is not None:
472
+ G.add_edge(v, u, 'ART')
473
+ G = G.copy(immutable=True)
474
+
475
+ else:
476
+ k = 2
477
+ prev = dict(self.projectives())
478
+ injectives = dict(prev) # make a shallow copy since we will mutate it
479
+ verts = list(prev.values())
480
+ edges = [(prev[v], prev[u], l) for u, v, l in self._quiver.edge_iterator()]
481
+ cur = self._dim_vecs_level(k)
482
+ while cur:
483
+ # convert cur to the appropriate data
484
+ cur = {v: self.element_class(self, v, k) for v in cur}
485
+ injectives.update(cur)
486
+ verts.extend(cur.values())
487
+ edges.extend((cur[v], cur[u], l)
488
+ for u in cur for _, v, l in self._quiver.outgoing_edge_iterator(u) if v in cur)
489
+ edges.extend((prev[u], cur[v], l) for v in cur
490
+ for u, _, l in self._quiver.incoming_edge_iterator(v) if u in prev)
491
+ k += 1
492
+ prev = cur
493
+ cur = self._dim_vecs_level(k)
494
+
495
+ self._injectives = Family(injectives)
496
+ G = DiGraph([verts, edges], format='vertices_and_edges', immutable=True)
497
+
498
+ return self._digraph_set_latex_options(G)
499
+
500
+ def __iter__(self):
501
+ r"""
502
+ Iterate over ``self`` when possible.
503
+
504
+ EXAMPLES::
505
+
506
+ sage: DD = DiGraph([[3,2], [4,2], [2,1]])
507
+ sage: AR = DD.auslander_reiten_quiver()
508
+ sage: list(AR)
509
+ [<1, 1>, <2, 1>, <3, 1>, <4, 1>, <1, 2>, <2, 2>, <3, 2>, <4, 2>,
510
+ <1, 3>, <2, 3>, <3, 3>, <4, 3>]
511
+ """
512
+ return iter(self.digraph())
513
+
514
+ def _element_constructor_(self, vertex, level=None):
515
+ r"""
516
+ Construct an element of ``self``.
517
+
518
+ EXAMPLES::
519
+
520
+ sage: DA = DiGraph([[4,3], [3,2], [2,1]])
521
+ sage: AR = DA.auslander_reiten_quiver()
522
+ sage: AR(2, 2)
523
+ <2, 2>
524
+ sage: AR((2, 3))
525
+ <2, 3>
526
+ sage: AR(2, 4)
527
+ Traceback (most recent call last):
528
+ ...
529
+ ValueError: no 2 at level 4
530
+ sage: AR(2, 1/2)
531
+ Traceback (most recent call last):
532
+ ...
533
+ ValueError: the level 1/2 must be an integer
534
+ sage: AR(10, 1)
535
+ Traceback (most recent call last):
536
+ ...
537
+ ValueError: 10 is not a vertex of the quiver
538
+ """
539
+ if level is None:
540
+ if len(vertex) == 2:
541
+ vertex, level = vertex
542
+ if vertex not in self._quiver:
543
+ raise ValueError(f"{vertex} is not a vertex of the quiver")
544
+ if level == 1:
545
+ return self.element_class(self, vertex, level)
546
+ if level not in ZZ:
547
+ raise ValueError(f"the level {level} must be an integer")
548
+
549
+ if not self._is_finite:
550
+ if level == -1 or vertex in self._dim_vecs_level(level):
551
+ return self.element_class(self, vertex, level)
552
+ # This is likely never true
553
+ raise ValueError(f"no {vertex} at level {level}")
554
+
555
+ # otherwise the AR quiver is finite
556
+ if level < 0:
557
+ self.digraph() # computes the max level
558
+ level = self._max_level - level
559
+ if level > 1:
560
+ if vertex in self._dim_vecs_level(level):
561
+ return self.element_class(self, vertex, level)
562
+ raise ValueError(f"no {vertex} at level {level}")
563
+
564
+ @cached_method
565
+ def _dim_vecs_level(self, k):
566
+ r"""
567
+ Return a ``dict`` of dimension vectors of level ``k``.
568
+
569
+ .. WARNING::
570
+
571
+ This is only meant to be used internally as the output is
572
+ mutable but cached. Thus, the output should not be changed.
573
+
574
+ EXAMPLES::
575
+
576
+ sage: DA = DiGraph([[4,3], [3,2], [2,1]])
577
+ sage: AR = DA.auslander_reiten_quiver()
578
+ sage: AR._dim_vecs_level(1)
579
+ {1: v1, 2: v1 + v2, 3: v1 + v2 + v3, 4: v1 + v2 + v3 + v4}
580
+ sage: AR._dim_vecs_level(2)
581
+ {1: v2, 2: v2 + v3, 3: v2 + v3 + v4}
582
+ sage: AR._dim_vecs_level(3)
583
+ {1: v3, 2: v3 + v4}
584
+ sage: AR._dim_vecs_level(4)
585
+ {1: v4}
586
+ sage: AR._dim_vecs_level(-1)
587
+ {1: v1 + v2 + v3 + v4, 2: v2 + v3 + v4, 3: v3 + v4, 4: v4}
588
+ sage: AR._dim_vecs_level(-2)
589
+ {2: v1 + v2 + v3, 3: v2 + v3, 4: v3}
590
+ sage: AR._dim_vecs_level(-3)
591
+ {3: v1 + v2, 4: v2}
592
+ sage: AR._dim_vecs_level(-4)
593
+ {4: v1}
594
+ """
595
+ if k == 0:
596
+ raise ValueError("k must not be 0")
597
+ M = self._dim_vec_space
598
+ Q = self._quiver
599
+ if k == 1:
600
+ ret = {v: M._from_dict({u: ZZ(len(Q.all_paths(v, u, use_multiedges=True))) for u in Q.vertex_iterator()})
601
+ for v in Q.vertex_iterator()}
602
+ elif k > 1:
603
+ if k > self._max_level:
604
+ return {}
605
+ prev = self._dim_vecs_level(k - 1)
606
+ if k > self._max_level: # this might get set on the recursive call
607
+ return {}
608
+ ret = {}
609
+ for v in reversed(self._top_sort):
610
+ if v not in prev: # assumption: this vertex will never reappear
611
+ continue
612
+ temp = -prev[v]
613
+ for u, _, _ in Q.incoming_edge_iterator(v):
614
+ if u in prev:
615
+ temp += prev[u]
616
+ for _, u, _ in Q.outgoing_edge_iterator(v):
617
+ if u in ret:
618
+ temp += ret[u]
619
+ if all(coeff > 0 for key, coeff in temp):
620
+ ret[v] = temp
621
+ if not ret:
622
+ self._max_level = k
623
+
624
+ elif k == -1:
625
+ ret = {v: M._from_dict({u: ZZ(len(Q.all_paths(u, v, use_multiedges=True))) for u in Q.vertex_iterator()})
626
+ for v in Q.vertex_iterator()}
627
+
628
+ elif k < -1:
629
+ prev = self._dim_vecs_level(k + 1)
630
+ ret = {}
631
+ for v in self._top_sort:
632
+ if v not in prev: # assumption: this vertex will never reappear
633
+ continue
634
+ temp = -prev[v]
635
+ for _, u, _ in Q.outgoing_edge_iterator(v):
636
+ if u in prev:
637
+ temp += prev[u]
638
+ for u, _, _ in Q.incoming_edge_iterator(v):
639
+ if u in ret:
640
+ temp += ret[u]
641
+ if all(coeff > 0 for key, coeff in temp):
642
+ ret[v] = temp
643
+
644
+ return ret
645
+
646
+ def dimension_vectors_of_level(self, k):
647
+ r"""
648
+ Return a :class:`Family` of dimension vectors of level ``k``.
649
+
650
+ EXAMPLES::
651
+
652
+ sage: DA = DiGraph([[4,3], [2,3], [2,1]])
653
+ sage: AR = DA.auslander_reiten_quiver()
654
+ sage: AR.dimension_vectors_of_level(1)
655
+ {1: v1, 2: v1 + v2 + v3, 3: v3, 4: v3 + v4}
656
+ sage: AR.dimension_vectors_of_level(3)
657
+ {1: v4, 3: v2}
658
+ sage: AR.dimension_vectors_of_level(10)
659
+ {}
660
+ sage: AR.dimension_vectors_of_level(-1)
661
+ {1: v1 + v2, 2: v2, 3: v2 + v3 + v4, 4: v4}
662
+ sage: AR.dimension_vectors_of_level(-2)
663
+ {1: v3 + v4, 2: v1 + v2 + v3 + v4, 3: v1 + v2 + v3, 4: v2 + v3}
664
+
665
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
666
+ sage: AR = D.auslander_reiten_quiver()
667
+ sage: AR.dimension_vectors_of_level(1)
668
+ {1: v1 + 2*v2, 2: v2}
669
+ sage: AR.dimension_vectors_of_level(3)
670
+ {1: 5*v1 + 6*v2, 2: 4*v1 + 5*v2}
671
+ sage: AR.dimension_vectors_of_level(-1)
672
+ {1: v1, 2: 2*v1 + v2}
673
+ sage: AR.dimension_vectors_of_level(-3)
674
+ {1: 5*v1 + 4*v2, 2: 6*v1 + 5*v2}
675
+ """
676
+ ret = self._dim_vecs_level(k)
677
+ return dict(ret) # make a (shallow) copy to allow a user to mutate it
678
+
679
+ class Element(Element):
680
+ r"""
681
+ A node in the AR quiver.
682
+ """
683
+ def __init__(self, parent, vertex, level):
684
+ r"""
685
+ Initialize ``self``.
686
+
687
+ EXAMPLES::
688
+
689
+ sage: DA = DiGraph([[4,3], [3,2], [2,1]])
690
+ sage: AR = DA.auslander_reiten_quiver()
691
+ sage: TestSuite(AR(1, 3)).run()
692
+
693
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
694
+ sage: AR = D.auslander_reiten_quiver()
695
+ sage: TestSuite(AR(2, 3)).run()
696
+ sage: TestSuite(AR(1, -4)).run()
697
+ """
698
+ self._vertex = vertex
699
+ self._level = ZZ(level)
700
+ Element.__init__(self, parent)
701
+
702
+ def _repr_(self) -> str:
703
+ r"""
704
+ Return a string representation of ``self``.
705
+
706
+ EXAMPLES::
707
+
708
+ sage: DA = DiGraph([[4,3], [3,2], [2,1]])
709
+ sage: AR = DA.auslander_reiten_quiver()
710
+ sage: AR(1, 3)
711
+ <1, 3>
712
+ """
713
+ return f"<{self._vertex}, {self._level}>"
714
+
715
+ def _latex_(self) -> str:
716
+ r"""
717
+ Return a latex representation of ``self``.
718
+
719
+ EXAMPLES::
720
+
721
+ sage: DA = DiGraph([[4,3], [3,2], [2,1]])
722
+ sage: AR = DA.auslander_reiten_quiver()
723
+ sage: node = AR(2, 2)
724
+ sage: latex(node)
725
+ \left\langle 2, 2 \right\rangle
726
+ sage: AR.options.latex = "dimension_vector"
727
+ sage: latex(node)
728
+ v_{2} + v_{3}
729
+ sage: AR.options.latex = "both"
730
+ sage: latex(node)
731
+ \begin{gathered} \left\langle 2, 2 \right\rangle \\ v_{2} + v_{3} \end{gathered}
732
+ sage: AR.options._reset()
733
+ """
734
+ from sage.misc.latex import latex
735
+ node = r"\left\langle {}, {} \right\rangle".format(latex(self._vertex), self._level)
736
+ latex_option = self.parent().options.latex
737
+ if latex_option == "node":
738
+ return node
739
+ dim_vec = latex(self.dimension_vector())
740
+ if latex_option == "dimension_vector":
741
+ return dim_vec
742
+ return r"\begin{{gathered}} {} \\ {} \end{{gathered}}".format(node, dim_vec)
743
+
744
+ def _richcmp_(self, other, op) -> bool:
745
+ r"""
746
+ Rich comparison of ``self`` to ``other`` by ``op``.
747
+
748
+ EXAMPLES::
749
+
750
+ sage: DA = DiGraph([[2,3], [2,1]])
751
+ sage: AR = DA.auslander_reiten_quiver()
752
+ sage: sorted(AR)
753
+ [<1, 1>, <2, 1>, <3, 1>, <1, 2>, <2, 2>, <3, 2>]
754
+ """
755
+ return richcmp((self._level, self._vertex), (other._level, other._vertex), op)
756
+
757
+ def __hash__(self) -> int:
758
+ r"""
759
+ Return the hash of ``self``.
760
+
761
+ EXAMPLES::
762
+
763
+ sage: DA = DiGraph([[2,3], [2,1]])
764
+ sage: AR = DA.auslander_reiten_quiver()
765
+ sage: node = AR(1, 2)
766
+ sage: hash(node) == hash((2, 1))
767
+ True
768
+ """
769
+ return hash((self._level, self._vertex))
770
+
771
+ def vertex(self):
772
+ r"""
773
+ Return the vertex of the quiver corresponding to ``self``.
774
+
775
+ EXAMPLES::
776
+
777
+ sage: DA = DiGraph([[2,3], [2,1]])
778
+ sage: AR = DA.auslander_reiten_quiver()
779
+ sage: node = AR(1, 2)
780
+ sage: node.vertex()
781
+ 1
782
+ """
783
+ return self._vertex
784
+
785
+ def level(self):
786
+ r"""
787
+ Return the level of ``self``.
788
+
789
+ EXAMPLES::
790
+
791
+ sage: DA = DiGraph([[2,3], [2,1]])
792
+ sage: AR = DA.auslander_reiten_quiver()
793
+ sage: node = AR(1, 2)
794
+ sage: node.level()
795
+ 2
796
+ """
797
+ return self._level
798
+
799
+ def translation(self):
800
+ r"""
801
+ Return the AR translation of ``self``.
802
+
803
+ EXAMPLES::
804
+
805
+ sage: DA = DiGraph([[4,3], [3,2], [2,1]])
806
+ sage: AR = DA.auslander_reiten_quiver()
807
+ sage: node = AR(1, 1)
808
+ sage: node.translation() is None
809
+ True
810
+ sage: node = AR(1, 2)
811
+ sage: node.translation()
812
+ <1, 1>
813
+ """
814
+ if self._level == 1:
815
+ return None
816
+ dim_vecs = self.parent()._dim_vecs_level(self._level - 1)
817
+ if self._vertex not in dim_vecs: # this likely never happens
818
+ return None
819
+ return type(self)(self.parent(), self._vertex, self._level - 1)
820
+
821
+ def inverse_translation(self):
822
+ r"""
823
+ Return the inverse AR translation of ``self``.
824
+
825
+ EXAMPLES::
826
+
827
+ sage: DA = DiGraph([[2,3], [2,1]])
828
+ sage: AR = DA.auslander_reiten_quiver()
829
+ sage: node = AR(1, 1)
830
+ sage: node.inverse_translation()
831
+ <1, 2>
832
+ sage: node = AR(1, 2)
833
+ sage: node.inverse_translation() is None
834
+ True
835
+
836
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
837
+ sage: AR = D.auslander_reiten_quiver()
838
+ sage: AR(2, -1).inverse_translation() is None
839
+ True
840
+ """
841
+ if self._level == -1:
842
+ return None
843
+ dim_vecs = self.parent()._dim_vecs_level(self._level + 1)
844
+ if self._vertex not in dim_vecs:
845
+ return None
846
+ return type(self)(self.parent(), self._vertex, self._level + 1)
847
+
848
+ def dimension_vector(self):
849
+ r"""
850
+ Return the dimension vector of ``self``.
851
+
852
+ EXAMPLES::
853
+
854
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
855
+ sage: AR = D.auslander_reiten_quiver()
856
+ sage: node = AR(2, -4)
857
+ sage: node.dimension_vector()
858
+ 8*v1 + 7*v2
859
+ """
860
+ return self.parent()._dim_vecs_level(self._level)[self._vertex]
861
+
862
+
863
+ def detect_dynkin_quiver(quiver):
864
+ """
865
+ Determine if ``quiver`` is a finite type Dynkin quiver.
866
+
867
+ EXAMPLES::
868
+
869
+ sage: from sage.quivers.ar_quiver import detect_dynkin_quiver
870
+ sage: D = DiGraph([[1,2], [2,3], [3, 4], [4,0], ['a','b'], ['b','c'], ['c','d'], ['c','e']])
871
+ sage: detect_dynkin_quiver(D)
872
+ D5xA5
873
+
874
+ sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True)
875
+ sage: detect_dynkin_quiver(D) is None
876
+ True
877
+ sage: D = DiGraph([[1, 2], [2, 3], [1, 3]])
878
+ sage: detect_dynkin_quiver(D) is None
879
+ True
880
+ sage: D = DiGraph([[1,2], [1,3], [1,4], [1,5]])
881
+ sage: detect_dynkin_quiver(D) is None
882
+ True
883
+ sage: D = DiGraph([[1,2], [2,3], [2,4], [4,5], [6,4]])
884
+ sage: detect_dynkin_quiver(D) is None
885
+ True
886
+ sage: D = DiGraph([[1,2], [2,3], [3,4], [4,5], [5,6], [6,7], [7,8], [8,9], [0,3]])
887
+ sage: detect_dynkin_quiver(D) is None
888
+ True
889
+ sage: D = DiGraph([[1,2], [2,3], [3,4], [4,5], [5,6], [6,7], [0,4]])
890
+ sage: detect_dynkin_quiver(D) is None
891
+ True
892
+ """
893
+ dynkin_type = []
894
+ for Q in quiver.connected_components_subgraphs():
895
+ if Q.has_multiple_edges():
896
+ return None
897
+ G = Q.to_undirected()
898
+ if G.is_path():
899
+ dynkin_type.append(['A', Q.num_verts()])
900
+ continue
901
+ degthree = G.vertices(degree=3)
902
+ if len(degthree) != 1:
903
+ return None
904
+ G = G.copy(immutable=False)
905
+ G.delete_vertex(degthree[0])
906
+ path_lengths = sorted(G.connected_components_sizes())
907
+ if len(path_lengths) != 3:
908
+ return None
909
+ if path_lengths[:2] == [1, 1]:
910
+ dynkin_type.append(['D', G.num_verts() + 1])
911
+ elif path_lengths[:2] == [1, 2] and path_lengths[2] in [2, 3, 4]:
912
+ dynkin_type.append(['E', G.num_verts() + 1])
913
+ else:
914
+ return None
915
+ if len(dynkin_type) == 1:
916
+ return CartanType(dynkin_type[0])
917
+ return CartanType(dynkin_type)