passagemath-flint 10.6.1rc10__cp311-cp311-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-311-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-311-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-311-aarch64-linux-gnu.so +0 -0
  25. sage/graphs/chrompoly.pyx +555 -0
  26. sage/graphs/matchpoly.cpython-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-aarch64-linux-gnu.so +0 -0
  220. sage/matrix/change_ring.pyx +43 -0
  221. sage/matrix/matrix_complex_ball_dense.cpython-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-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-311-aarch64-linux-gnu.so +0 -0
  285. sage/rings/factorint_flint.pyx +99 -0
  286. sage/rings/fraction_field_FpT.cpython-311-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-311-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-311-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-311-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-311-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-311-aarch64-linux-gnu.so +0 -0
  324. sage/rings/polynomial/hilbert.pyx +602 -0
  325. sage/rings/polynomial/polynomial_complex_arb.cpython-311-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-311-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-311-aarch64-linux-gnu.so +0 -0
  332. sage/rings/polynomial/polynomial_number_field.pyx +345 -0
  333. sage/rings/polynomial/polynomial_rational_flint.cpython-311-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-311-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-311-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-311-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-311-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-311-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-311-aarch64-linux-gnu.so +0 -0
  353. sage/rings/real_interval_absolute.pyx +1073 -0
  354. sage/rings/real_mpfi.cpython-311-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-311-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,963 @@
1
+ # sage_setup: distribution = sagemath-flint
2
+ r"""
3
+ Univariate polynomials over `\CC` with Arb ball coefficients.
4
+
5
+ This is a binding to the `acb_poly module of FLINT <https://flintlib.org/doc/acb_poly.html>`_;
6
+ it may be useful to refer to its documentation for more details.
7
+
8
+ Parts of the documentation for this module are copied or adapted from Arb's
9
+ (now FLINT's) own documentation, licenced (at the time) under the GNU General
10
+ Public License version 2, or later.
11
+
12
+ .. SEEALSO::
13
+
14
+ - :mod:`Complex balls using Arb <sage.rings.complex_arb>`
15
+
16
+ TESTS:
17
+
18
+ sage: type(polygen(ComplexBallField(140)))
19
+ <class 'sage.rings.polynomial.polynomial_complex_arb.Polynomial_complex_arb'>
20
+ sage: Pol.<x> = CBF[]
21
+ sage: (x+1/2)^3
22
+ x^3 + 1.500000000000000*x^2 + 0.7500000000000000*x + 0.1250000000000000
23
+ """
24
+
25
+ from cysignals.signals cimport sig_on, sig_off
26
+
27
+ from sage.libs.flint.acb cimport *
28
+ from sage.libs.flint.fmpz cimport *
29
+ from sage.rings.integer cimport Integer, smallInteger
30
+ from sage.rings.complex_arb cimport ComplexBall
31
+ from sage.structure.element cimport Element
32
+
33
+ from sage.structure.element import coerce_binop
34
+
35
+ cdef inline long prec(Polynomial_complex_arb pol) noexcept:
36
+ return pol._parent._base._prec
37
+
38
+
39
+ cdef class Polynomial_complex_arb(Polynomial):
40
+ r"""
41
+ Wrapper for `FLINT <https://flintlib.org>`_ polynomials of type
42
+ ``acb_poly_t``
43
+
44
+ EXAMPLES::
45
+
46
+ sage: Pol.<x> = CBF[]
47
+ sage: type(x)
48
+ <class 'sage.rings.polynomial.polynomial_complex_arb.Polynomial_complex_arb'>
49
+
50
+ sage: Pol(), Pol(1), Pol([0,1,2]), Pol({1: pi, 3: i}) # needs sage.symbolic
51
+ (0,
52
+ 1.000000000000000,
53
+ 2.000000000000000*x^2 + x,
54
+ I*x^3 + ([3.141592653589793 +/- ...e-16])*x)
55
+
56
+ sage: Pol("x - 2/3")
57
+ x + [-0.666666666666667 +/- ...e-16]
58
+ sage: Pol(polygen(QQ))
59
+ x
60
+
61
+ sage: all(Pol.has_coerce_map_from(P) for P in
62
+ ....: (QQ['x'], QuadraticField(-1), RealBallField(100)))
63
+ True
64
+ sage: any(Pol.has_coerce_map_from(P) for P in
65
+ ....: (QQ['y'], RR, CC, RDF, CDF, RIF, CIF, RealBallField(20)))
66
+ False
67
+ """
68
+
69
+ # Memory management and initialization
70
+
71
+ def __cinit__(self):
72
+ r"""
73
+ TESTS::
74
+
75
+ sage: ComplexBallField(2)['y']()
76
+ 0
77
+ """
78
+ acb_poly_init(self._poly)
79
+
80
+ def __dealloc__(self):
81
+ r"""
82
+ TESTS::
83
+
84
+ sage: pol = CBF['x']()
85
+ sage: del pol
86
+ """
87
+ acb_poly_clear(self._poly)
88
+
89
+ cdef Polynomial_complex_arb _new(self):
90
+ r"""
91
+ Return a new polynomial with the same parent as this one.
92
+ """
93
+ cdef Polynomial_complex_arb res = Polynomial_complex_arb.__new__(Polynomial_complex_arb)
94
+ res._parent = self._parent
95
+ res._is_gen = 0
96
+ return res
97
+
98
+ def __init__(self, parent, x=None, check=True, is_gen=False, construct=False):
99
+ r"""
100
+ Initialize this polynomial to the specified value.
101
+
102
+ TESTS::
103
+
104
+ sage: from sage.rings.polynomial.polynomial_complex_arb import Polynomial_complex_arb
105
+ sage: Pol = CBF['x']
106
+ sage: Polynomial_complex_arb(Pol)
107
+ 0
108
+ sage: Polynomial_complex_arb(Pol, is_gen=True)
109
+ x
110
+ sage: Polynomial_complex_arb(Pol, 42, is_gen=True)
111
+ x
112
+ sage: Polynomial_complex_arb(Pol, CBF(1))
113
+ 1.000000000000000
114
+ sage: Polynomial_complex_arb(Pol, [])
115
+ 0
116
+ sage: Polynomial_complex_arb(Pol, [0])
117
+ 0
118
+ sage: Polynomial_complex_arb(Pol, [0, 2, 0])
119
+ 2.000000000000000*x
120
+ sage: Polynomial_complex_arb(Pol, (1,))
121
+ 1.000000000000000
122
+ sage: Polynomial_complex_arb(Pol, (CBF(i), 1)) # needs sage.symbolic
123
+ x + I
124
+ sage: Polynomial_complex_arb(Pol, polygen(QQ,'y')+2)
125
+ x + 2.000000000000000
126
+ sage: Polynomial_complex_arb(Pol, QQ['x'](0))
127
+ 0
128
+ sage: Polynomial_complex_arb(Pol, {10: pi}) # needs sage.symbolic
129
+ ([3.141592653589793 +/- ...e-16])*x^10
130
+ sage: Polynomial_complex_arb(Pol, pi) # needs sage.symbolic
131
+ [3.141592653589793 +/- ...e-16]
132
+ """
133
+ cdef ComplexBall ball
134
+ cdef Polynomial pol
135
+ cdef list lst
136
+ cdef tuple tpl
137
+ cdef dict dct
138
+ cdef long length, i
139
+
140
+ Polynomial.__init__(self, parent, is_gen=is_gen)
141
+
142
+ if is_gen:
143
+ acb_poly_set_coeff_si(self._poly, 1, 1)
144
+ elif x is None:
145
+ acb_poly_zero(self._poly)
146
+ elif isinstance(x, Polynomial_complex_arb):
147
+ acb_poly_set(self._poly, (<Polynomial_complex_arb> x)._poly)
148
+ elif isinstance(x, ComplexBall):
149
+ acb_poly_set_coeff_acb(self._poly, 0, (<ComplexBall> x).value)
150
+ else:
151
+ Coeff = parent.base_ring()
152
+ if isinstance(x, list):
153
+ lst = <list> x
154
+ length = len(lst)
155
+ sig_on()
156
+ acb_poly_fit_length(self._poly, length)
157
+ sig_off()
158
+ for i in range(length):
159
+ ball = Coeff(lst[i])
160
+ acb_poly_set_coeff_acb(self._poly, i, ball.value)
161
+ elif isinstance(x, tuple):
162
+ tpl = <tuple> x
163
+ length = len(tpl)
164
+ sig_on()
165
+ acb_poly_fit_length(self._poly, length)
166
+ sig_off()
167
+ for i in range(length):
168
+ ball = Coeff(tpl[i])
169
+ acb_poly_set_coeff_acb(self._poly, i, ball.value)
170
+ elif isinstance(x, Polynomial):
171
+ pol = <Polynomial> x
172
+ length = pol.degree() + 1
173
+ sig_on()
174
+ acb_poly_fit_length(self._poly, length)
175
+ sig_off()
176
+ for i in range(length):
177
+ ball = Coeff(pol.get_unsafe(i))
178
+ acb_poly_set_coeff_acb(self._poly, i, ball.value)
179
+ elif isinstance(x, dict):
180
+ dct = <dict> x
181
+ if len(dct) == 0:
182
+ acb_poly_zero(self._poly)
183
+ else:
184
+ length = max(int(i) for i in dct) + 1
185
+ sig_on()
186
+ acb_poly_fit_length(self._poly, length)
187
+ sig_off()
188
+ for i, c in dct.iteritems():
189
+ ball = Coeff(c)
190
+ acb_poly_set_coeff_acb(self._poly, i, ball.value)
191
+ else:
192
+ ball = Coeff(x)
193
+ acb_poly_set_coeff_acb(self._poly, 0, ball.value)
194
+
195
+ def __reduce__(self):
196
+ r"""
197
+ Serialize a polynomial for pickling.
198
+
199
+ TESTS::
200
+
201
+ sage: # needs sage.symbolic
202
+ sage: Pol.<x> = ComplexBallField(42)[]
203
+ sage: pol = (x + i)/3
204
+ sage: pol2 = loads(dumps(pol))
205
+ sage: pol.degree() == pol2.degree()
206
+ True
207
+ sage: all(a.identical(b) for (a, b) in zip(pol, pol2))
208
+ True
209
+ """
210
+ return (self.__class__,
211
+ (self.parent(), self.list(), False, self.is_gen()))
212
+
213
+ # Access
214
+
215
+ def degree(self):
216
+ r"""
217
+ Return the (apparent) degree of this polynomial.
218
+
219
+ EXAMPLES::
220
+
221
+ sage: Pol.<x> = CBF[]
222
+ sage: (x^2 + 1).degree()
223
+ 2
224
+ sage: pol = (x/3 + 1) - x/3; pol
225
+ ([+/- ...e-16])*x + 1.000000000000000
226
+ sage: pol.degree()
227
+ 1
228
+ sage: Pol([1, 0, 0, 0]).degree()
229
+ 0
230
+ """
231
+ return smallInteger(acb_poly_degree(self._poly))
232
+
233
+ cdef get_unsafe(self, Py_ssize_t n):
234
+ cdef ComplexBall res = ComplexBall.__new__(ComplexBall)
235
+ res._parent = self._parent._base
236
+ acb_poly_get_coeff_acb(res.value, self._poly, n)
237
+ return res
238
+
239
+ cpdef list list(self, bint copy=True):
240
+ r"""
241
+ Return the coefficient list of this polynomial.
242
+
243
+ EXAMPLES::
244
+
245
+ sage: Pol.<x> = CBF[]
246
+ sage: (x^2/3).list()
247
+ [0, 0, [0.3333333333333333 +/- ...e-17]]
248
+ sage: Pol(0).list()
249
+ []
250
+ sage: Pol([0, 1, RBF(0, rad=.1), 0]).list()
251
+ [0, 1.000000000000000, [+/- 0.101]]
252
+ """
253
+ cdef unsigned long length = acb_poly_length(self._poly)
254
+ return [self.get_unsafe(n) for n in range(length)]
255
+
256
+ def __bool__(self):
257
+ r"""
258
+ Return ``False`` if this polynomial is exactly zero, ``True`` otherwise.
259
+
260
+ EXAMPLES::
261
+
262
+ sage: Pol.<x> = CBF[]
263
+ sage: bool(Pol(0))
264
+ False
265
+ sage: z = Pol(1/3) - 1/3
266
+ sage: bool(z)
267
+ True
268
+ """
269
+ return acb_poly_length(self._poly)
270
+
271
+ # Ring and Euclidean arithmetic
272
+
273
+ cpdef _add_(self, other):
274
+ r"""
275
+ Return the sum of two polynomials.
276
+
277
+ EXAMPLES::
278
+
279
+ sage: Pol.<x> = CBF[]
280
+ sage: (x + 1) + (x/3 - 2)
281
+ ([1.333333333333333 +/- ...e-16])*x - 1.000000000000000
282
+ """
283
+ cdef Polynomial_complex_arb res = self._new()
284
+ sig_on()
285
+ acb_poly_add(
286
+ res._poly,
287
+ self._poly,
288
+ (<Polynomial_complex_arb> other)._poly,
289
+ prec(self))
290
+ sig_off()
291
+ return res
292
+
293
+ cpdef _neg_(self):
294
+ r"""
295
+ Return the opposite of this polynomial.
296
+
297
+ EXAMPLES::
298
+
299
+ sage: Pol.<x> = CBF[]
300
+ sage: -(x/3 - 2)
301
+ ([-0.3333333333333333 +/- ...e-17])*x + 2.000000000000000
302
+ """
303
+ cdef Polynomial_complex_arb res = self._new()
304
+ sig_on()
305
+ acb_poly_neg(res._poly, self._poly)
306
+ sig_off()
307
+ return res
308
+
309
+ cpdef _sub_(self, other):
310
+ r"""
311
+ Return the difference of two polynomials.
312
+
313
+ EXAMPLES::
314
+
315
+ sage: Pol.<x> = CBF[]
316
+ sage: (x + 1) - (x/3 - 2)
317
+ ([0.666666666666667 +/- ...e-16])*x + 3.000000000000000
318
+ """
319
+ cdef Polynomial_complex_arb res = self._new()
320
+ sig_on()
321
+ acb_poly_sub(
322
+ res._poly,
323
+ self._poly,
324
+ (<Polynomial_complex_arb> other)._poly,
325
+ prec(self))
326
+ sig_off()
327
+ return res
328
+
329
+ cpdef _mul_(self, other):
330
+ r"""
331
+ Return the product of two polynomials.
332
+
333
+ EXAMPLES::
334
+
335
+ sage: Pol.<x> = CBF[]
336
+ sage: (x + 1)*(x/3 - 2)
337
+ ([0.3333333333333333 +/- ...e-17])*x^2
338
+ + ([-1.666666666666667 +/- ...e-16])*x - 2.000000000000000
339
+ """
340
+ cdef Polynomial_complex_arb res = self._new()
341
+ sig_on()
342
+ acb_poly_mul(
343
+ res._poly,
344
+ self._poly,
345
+ (<Polynomial_complex_arb> other)._poly,
346
+ prec(self))
347
+ sig_off()
348
+ return res
349
+
350
+ cpdef _lmul_(self, Element a):
351
+ r"""
352
+ TESTS::
353
+
354
+ sage: Pol.<x> = CBF[]
355
+ sage: (x + 1)._lmul_(CBF(3))
356
+ 3.000000000000000*x + 3.000000000000000
357
+ sage: (1 + x)*(1/3)
358
+ ([0.3333333333333333 +/- ...e-17])*x + [0.3333333333333333 +/- ...e-17]
359
+ sage: (1 + x)*GF(2)(1)
360
+ Traceback (most recent call last):
361
+ ...
362
+ TypeError: unsupported operand parent(s)...
363
+ """
364
+ cdef Polynomial_complex_arb res = self._new()
365
+ sig_on()
366
+ acb_poly_scalar_mul(res._poly, self._poly, (<ComplexBall> a).value, prec(self))
367
+ sig_off()
368
+ return res
369
+
370
+ cpdef _rmul_(self, Element a):
371
+ r"""
372
+ TESTS::
373
+
374
+ sage: Pol.<x> = CBF[]
375
+ sage: (x + 1)._rmul_(CBF(3))
376
+ 3.000000000000000*x + 3.000000000000000
377
+ sage: (1/3)*(1 + x)
378
+ ([0.3333333333333333 +/- ...e-17])*x + [0.3333333333333333 +/- ...e-17]
379
+ """
380
+ return self._lmul_(a)
381
+
382
+ @coerce_binop
383
+ def quo_rem(self, divisor):
384
+ r"""
385
+ Compute the Euclidean division of this ball polynomial by ``divisor``.
386
+
387
+ Raises a :exc:`ZeroDivisionError` when the divisor is zero or its leading
388
+ coefficient contains zero. Returns a pair (quotient, remainder)
389
+ otherwise.
390
+
391
+ EXAMPLES::
392
+
393
+ sage: Pol.<x> = CBF[]
394
+
395
+ sage: (x^3/7 - CBF(i)).quo_rem(x + CBF(pi)) # needs sage.symbolic
396
+ (([0.1428571428571428 +/- ...e-17])*x^2
397
+ + ([-0.448798950512828 +/- ...e-16])*x
398
+ + [1.409943485869908 +/- ...e-16],
399
+ [-4.42946809718569 +/- ...e-15] - I)
400
+
401
+ sage: Pol(0).quo_rem(x + 1)
402
+ (0, 0)
403
+
404
+ sage: (x + 1).quo_rem(0)
405
+ Traceback (most recent call last):
406
+ ...
407
+ ZeroDivisionError: ('cannot divide by this polynomial', 0)
408
+
409
+ sage: div = (x^2/3 + x + 1) - x^2/3; div
410
+ ([+/- ...e-16])*x^2 + x + 1.000000000000000
411
+ sage: (x + 1).quo_rem(div)
412
+ Traceback (most recent call last):
413
+ ...
414
+ ZeroDivisionError: ('cannot divide by this polynomial',
415
+ ([+/- ...e-16])*x^2 + x + 1.000000000000000)
416
+ """
417
+ cdef Polynomial_complex_arb div = <Polynomial_complex_arb> divisor
418
+ cdef Polynomial_complex_arb quo = self._new()
419
+ cdef Polynomial_complex_arb rem = self._new()
420
+ sig_on()
421
+ cdef bint success = acb_poly_divrem(quo._poly, rem._poly, self._poly,
422
+ div._poly, prec(self))
423
+ sig_off()
424
+ if success:
425
+ return quo, rem
426
+ else:
427
+ raise ZeroDivisionError("cannot divide by this polynomial", divisor)
428
+
429
+ # Syntactic transformations
430
+
431
+ cpdef Polynomial truncate(self, long n):
432
+ r"""
433
+ Return the truncation to degree `n - 1` of this polynomial.
434
+
435
+ EXAMPLES::
436
+
437
+ sage: pol = CBF['x'](range(1,5)); pol
438
+ 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
439
+ sage: pol.truncate(2)
440
+ 2.000000000000000*x + 1.000000000000000
441
+ sage: pol.truncate(0)
442
+ 0
443
+ sage: pol.truncate(-1)
444
+ 0
445
+
446
+ TESTS::
447
+
448
+ sage: pol.truncate(6)
449
+ 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
450
+ sage: pol.truncate(4)
451
+ 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
452
+ """
453
+ cdef Polynomial_complex_arb res = self._new()
454
+ if n < 0:
455
+ n = 0
456
+ sig_on()
457
+ acb_poly_set(res._poly, self._poly)
458
+ acb_poly_truncate(res._poly, n)
459
+ sig_off()
460
+ return res
461
+
462
+ cdef _inplace_truncate(self, long n):
463
+ if n < 0:
464
+ n = 0
465
+ acb_poly_truncate(self._poly, n)
466
+ return self
467
+
468
+ def __lshift__(val, n):
469
+ r"""
470
+ Shift ``val`` to the left, i.e. multiply it by `x^n`, throwing away
471
+ coefficients if `n < 0`.
472
+
473
+ EXAMPLES::
474
+
475
+ sage: pol = CBF['x'](range(1,5)); pol
476
+ 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
477
+ sage: pol << 2
478
+ 4.000000000000000*x^5 + 3.000000000000000*x^4 + 2.000000000000000*x^3 + x^2
479
+ sage: pol << (-2)
480
+ 4.000000000000000*x + 3.000000000000000
481
+
482
+ TESTS::
483
+
484
+ sage: 1 << pol
485
+ Traceback (most recent call last):
486
+ ...
487
+ TypeError: unsupported operands for <<: 1, 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
488
+ """
489
+ if not isinstance(val, Polynomial_complex_arb):
490
+ raise TypeError("unsupported operand type(s) for <<: '{}' and '{}'"
491
+ .format(type(val).__name__, type(n).__name__))
492
+ if n < 0:
493
+ return val.__rshift__(-n)
494
+ cdef Polynomial_complex_arb self = (<Polynomial_complex_arb> val)
495
+ cdef Polynomial_complex_arb res = self._new()
496
+ sig_on()
497
+ acb_poly_shift_left(res._poly, self._poly, n)
498
+ sig_off()
499
+ return res
500
+
501
+ def __rshift__(val, n):
502
+ r"""
503
+ Shift ``val`` to the left, i.e. divide it by `x^n`, throwing away
504
+ coefficients if `n > 0`.
505
+
506
+ EXAMPLES::
507
+
508
+ sage: pol = CBF['x'](range(1,5)); pol
509
+ 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
510
+ sage: pol >> 2
511
+ 4.000000000000000*x + 3.000000000000000
512
+ sage: pol >> -2
513
+ 4.000000000000000*x^5 + 3.000000000000000*x^4 + 2.000000000000000*x^3 + x^2
514
+
515
+ TESTS::
516
+
517
+ sage: 1 >> pol
518
+ Traceback (most recent call last):
519
+ ...
520
+ TypeError: unsupported operands for >>: 1, 4.000000000000000*x^3 + 3.000000000000000*x^2 + 2.000000000000000*x + 1.000000000000000
521
+ """
522
+ if not isinstance(val, Polynomial_complex_arb):
523
+ raise TypeError("unsupported operand type(s) for <<: '{}' and '{}'"
524
+ .format(type(val).__name__, type(n).__name__))
525
+ if n < 0:
526
+ return val.__lshift__(-n)
527
+ cdef Polynomial_complex_arb self = (<Polynomial_complex_arb> val)
528
+ cdef Polynomial_complex_arb res = self._new()
529
+ sig_on()
530
+ acb_poly_shift_right(res._poly, self._poly, n)
531
+ sig_off()
532
+ return res
533
+
534
+ # Truncated and power series arithmetic
535
+
536
+ cpdef Polynomial _mul_trunc_(self, Polynomial other, long n):
537
+ r"""
538
+ Return the product of ``self`` and ``other``, truncated before degree `n`.
539
+
540
+ EXAMPLES::
541
+
542
+ sage: Pol.<x> = CBF[]
543
+ sage: (x + 1)._mul_trunc_(x + 2, 2)
544
+ 3.000000000000000*x + 2.000000000000000
545
+ sage: (x + 1)._mul_trunc_(x + 2, 0)
546
+ 0
547
+ sage: (x + 1)._mul_trunc_(x + 2, -1)
548
+ 0
549
+
550
+ TESTS::
551
+
552
+ sage: (x + 1)._mul_trunc_(x + 2, 4)
553
+ x^2 + 3.000000000000000*x + 2.000000000000000
554
+ """
555
+ cdef Polynomial_complex_arb my_other = <Polynomial_complex_arb> other
556
+ cdef Polynomial_complex_arb res = self._new()
557
+ if n < 0:
558
+ n = 0
559
+ sig_on()
560
+ acb_poly_mullow(res._poly, self._poly, my_other._poly, n, prec(self))
561
+ sig_off()
562
+ return res
563
+
564
+ cpdef Polynomial inverse_series_trunc(self, long n):
565
+ r"""
566
+ Return the power series expansion at 0 of the inverse of this
567
+ polynomial, truncated before degree `n`.
568
+
569
+ EXAMPLES::
570
+
571
+ sage: Pol.<x> = CBF[]
572
+ sage: (1 - x/3).inverse_series_trunc(3)
573
+ ([0.1111111111111111 +/- ...e-17])*x^2 + ([0.3333333333333333 +/- ...e-17])*x + 1.000000000000000
574
+ sage: x.inverse_series_trunc(1)
575
+ nan
576
+ sage: Pol(0).inverse_series_trunc(2)
577
+ (nan + nan*I)*x + nan + nan*I
578
+
579
+ TESTS::
580
+
581
+ sage: Pol(0).inverse_series_trunc(-1)
582
+ 0
583
+ """
584
+ cdef Polynomial_complex_arb res = self._new()
585
+ if n < 0:
586
+ n = 0
587
+ sig_on()
588
+ acb_poly_inv_series(res._poly, self._poly, n, prec(self))
589
+ sig_off()
590
+ return res
591
+
592
+ cpdef Polynomial _power_trunc(self, unsigned long expo, long n):
593
+ r"""
594
+ Return a power of this polynomial, truncated before degree `n`.
595
+
596
+ INPUT:
597
+
598
+ - ``expo`` -- nonnegative integer exponent
599
+ - ``n`` -- truncation order
600
+
601
+ EXAMPLES::
602
+
603
+ sage: Pol.<x> = CBF[]
604
+ sage: (x^2 + 1)._power_trunc(10^9, 3)
605
+ 1000000000.000000*x^2 + 1.000000000000000
606
+ sage: (x^2 + 1)._power_trunc(10^20, 0)
607
+ Traceback (most recent call last):
608
+ ...
609
+ OverflowError: ... int too large to convert...
610
+
611
+ TESTS::
612
+
613
+ sage: (x^2 + 1)._power_trunc(10, -3)
614
+ 0
615
+ sage: (x^2 + 1)._power_trunc(-1, 0)
616
+ Traceback (most recent call last):
617
+ ...
618
+ OverflowError: can...t convert negative value to unsigned long
619
+ """
620
+ cdef Polynomial_complex_arb res = self._new()
621
+ if n < 0:
622
+ n = 0
623
+ sig_on()
624
+ acb_poly_pow_ui_trunc_binexp(res._poly, self._poly, expo, n, prec(self))
625
+ sig_off()
626
+ return res
627
+
628
+ def _log_series(self, long n):
629
+ r"""
630
+ Return the power series expansion at 0 of the logarithm of this
631
+ polynomial, truncated before degree `n`.
632
+
633
+ EXAMPLES::
634
+
635
+ sage: Pol.<x> = CBF[]
636
+ sage: (1 + x/3)._log_series(3)
637
+ ([-0.0555555555555555 +/- ...e-17])*x^2 + ([0.3333333333333333 +/- ...e-17])*x
638
+ sage: (-1 + x)._log_series(3)
639
+ -0.5000000000000000*x^2 - x + [3.141592653589793 +/- ...e-16]*I
640
+
641
+ An example where the constant term crosses the branch cut of the
642
+ logarithm::
643
+
644
+ sage: pol = CBF(-1, RBF(0, rad=.01)) + x; pol
645
+ x - 1.000000000000000 + [+/- 0.0101]*I
646
+ sage: pol._log_series(2)
647
+ ([-1.000 +/- ...e-4] + [+/- 0.0101]*I)*x + [+/- ...e-5] + [+/- 3.15]*I
648
+
649
+ Some cases where the result is not defined::
650
+
651
+ sage: x._log_series(1)
652
+ nan + nan*I
653
+ sage: Pol(0)._log_series(1)
654
+ nan + nan*I
655
+ """
656
+ cdef Polynomial_complex_arb res = self._new()
657
+ if n < 0:
658
+ n = 0
659
+ sig_on()
660
+ acb_poly_log_series(res._poly, self._poly, n, prec(self))
661
+ sig_off()
662
+ return res
663
+
664
+ def _exp_series(self, long n):
665
+ r"""
666
+ Return the power series expansion at 0 of the exponential of this
667
+ polynomial, truncated before degree `n`.
668
+
669
+ EXAMPLES::
670
+
671
+ sage: Pol.<x> = CBF[]
672
+ sage: x._exp_series(3)
673
+ 0.5000000000000000*x^2 + x + 1.000000000000000
674
+ sage: (1 + x/3)._log_series(3)._exp_series(3)
675
+ ([+/- ...e-17])*x^2 + ([0.3333333333333333 +/- ...e-17])*x + 1.000000000000000
676
+ sage: (CBF(0, pi) + x)._exp_series(4) # needs sage.symbolic
677
+ ([-0.166...] + [+/- ...]*I)*x^3 + ([-0.500...] + [+/- ...]*I)*x^2
678
+ + ([-1.000...] + [+/- ...]*I)*x + [-1.000...] + [+/- ...]*I
679
+ """
680
+ cdef Polynomial_complex_arb res = self._new()
681
+ if n < 0:
682
+ n = 0
683
+ sig_on()
684
+ acb_poly_exp_series(res._poly, self._poly, n, prec(self))
685
+ sig_off()
686
+ return res
687
+
688
+ def _sqrt_series(self, long n):
689
+ r"""
690
+ Return the power series expansion at 0 of the square root of this
691
+ polynomial, truncated before degree `n`.
692
+
693
+ EXAMPLES::
694
+
695
+ sage: Pol.<x> = CBF[]
696
+ sage: (1 + x)._sqrt_series(3)
697
+ -0.1250000000000000*x^2 + 0.5000000000000000*x + 1.000000000000000
698
+ sage: pol = CBF(-1, RBF(0, rad=.01)) + x; pol
699
+ x - 1.000000000000000 + [+/- 0.0101]*I
700
+ sage: pol._sqrt_series(2)
701
+ ([+/- ...e-3] + [+/- 0.501]*I)*x + [+/- ...e-3] + [+/- 1.01]*I
702
+ sage: x._sqrt_series(2)
703
+ (nan + nan*I)*x
704
+ """
705
+ cdef Polynomial_complex_arb res = self._new()
706
+ if n < 0:
707
+ n = 0
708
+ sig_on()
709
+ acb_poly_sqrt_series(res._poly, self._poly, n, prec(self))
710
+ sig_off()
711
+ return res
712
+
713
+ def _gamma_series(self, long n):
714
+ r"""
715
+ Return the series expansion of the gamma function composed
716
+ with this polynomial, truncated before degree ``n``.
717
+
718
+ EXAMPLES::
719
+
720
+ sage: Pol.<x> = CBF[]
721
+ sage: (1 + x)._gamma_series(3)
722
+ ([0.98905599532797...])*x^2 + ([-0.57721566490153...])*x + 1.000000000000000
723
+ """
724
+ cdef Polynomial_complex_arb res = self._new()
725
+ if n < 0:
726
+ n = 0
727
+ sig_on()
728
+ acb_poly_gamma_series(res._poly, self._poly, n, prec(self))
729
+ sig_off()
730
+ return res
731
+
732
+ def _lgamma_series(self, long n):
733
+ r"""
734
+ Return the series expansion of the log-gamma function composed
735
+ with this polynomial, truncated before degree ``n``.
736
+
737
+ EXAMPLES::
738
+
739
+ sage: Pol.<x> = CBF[]
740
+ sage: (1000 + x)._lgamma_series(3)
741
+ ([0.00050025008333331...])*x^2 + ([6.9072551956488...])*x + [5905.2204232091...]
742
+ """
743
+ cdef Polynomial_complex_arb res = self._new()
744
+ if n < 0:
745
+ n = 0
746
+ sig_on()
747
+ acb_poly_lgamma_series(res._poly, self._poly, n, prec(self))
748
+ sig_off()
749
+ return res
750
+
751
+ def _rgamma_series(self, long n):
752
+ r"""
753
+ Return the series expansion of the reciprocal gamma function composed
754
+ with this polynomial, truncated before degree ``n``.
755
+
756
+ EXAMPLES::
757
+
758
+ sage: Pol.<x> = CBF[]
759
+ sage: (-1 + x)._rgamma_series(4)
760
+ ([1.23309373642178...])*x^3 + ([0.422784335098467...])*x^2 - x
761
+ """
762
+ cdef Polynomial_complex_arb res = self._new()
763
+ if n < 0:
764
+ n = 0
765
+ sig_on()
766
+ acb_poly_rgamma_series(res._poly, self._poly, n, prec(self))
767
+ sig_off()
768
+ return res
769
+
770
+ def _lambert_w_series(self, long n, branch=0):
771
+ r"""
772
+ Return the series expansion of the specified branch of the Lambert W
773
+ function composed with this polynomial, truncated before degree ``n``.
774
+
775
+ EXAMPLES::
776
+
777
+ sage: Pol.<x> = CBF[]
778
+ sage: (1 + x)._lambert_w_series(3)
779
+ ([-0.10727032...])*x^2 + ([0.36189625...])*x + [0.56714329...]
780
+ sage: (CBF(1, 1) + x)._lambert_w_series(2)
781
+ ([0.26651990...] + [-0.15238505...]*I)*x + [0.65696606...] + [0.32545033...]*I
782
+ sage: (1 + x)._lambert_w_series(2, branch=3)
783
+ ([1.00625557...] + [0.05775573...]*I)*x + [-2.85358175...] + [17.1135355...]*I
784
+ sage: (1 + x)._lambert_w_series(2, branch=-3)
785
+ ([1.00625557...] + [-0.05775573...]*I)*x + [-2.85358175...] + [-17.1135355...]*I
786
+ sage: (1 + x)._lambert_w_series(2, branch=2^100)
787
+ ([1.00000000...] + [1.25551112...]*I)*x + [-71.1525951...] + [7.96488362...]*I
788
+ """
789
+ cdef fmpz_t _branch
790
+ fmpz_init(_branch)
791
+ fmpz_set_mpz(_branch, (<Integer> Integer(branch)).value)
792
+ cdef Polynomial_complex_arb res = self._new()
793
+ if n < 0:
794
+ n = 0
795
+ sig_on()
796
+ acb_poly_lambertw_series(res._poly, self._poly, _branch, 0, n, prec(self))
797
+ sig_off()
798
+ fmpz_clear(_branch)
799
+ return res
800
+
801
+ def _zeta_series(self, long n, a=1, deflate=False):
802
+ r"""
803
+ Return the series expansion of the Hurwitz zeta function composed
804
+ with this polynomial, truncated before degree ``n``.
805
+
806
+ For ``a = 1``, this computes the usual Riemann zeta function.
807
+
808
+ If ``deflate`` is True, evaluate ζ(s,a) + 1/(1-s), see the FLINT
809
+ documentation for details.
810
+
811
+ EXAMPLES::
812
+
813
+ sage: Pol.<x> = CBF[]
814
+ sage: (CBF(1/2, 1) + x)._zeta_series(2)
815
+ ([0.55898247...] + [-0.64880821...]*I)*x + [0.14393642...] + [-0.72209974...]*I
816
+ sage: (1/2 + x^2)._zeta_series(3, a=1/3)
817
+ ([-2.13199508...])*x^2 + [-0.11808332...]
818
+ sage: (1 + x)._zeta_series(2, deflate=True)
819
+ ([0.07281584...])*x + [0.57721566...]
820
+ """
821
+ if n < 0:
822
+ n = 0
823
+ cdef ComplexBall _a = <ComplexBall> (self._parent._base.coerce(a))
824
+ cdef Polynomial_complex_arb res = self._new()
825
+ sig_on()
826
+ acb_poly_zeta_series(res._poly, self._poly, _a.value, deflate, n, prec(self))
827
+ sig_off()
828
+ return res
829
+
830
+ def compose_trunc(self, Polynomial other, long n):
831
+ r"""
832
+ Return the composition of ``self`` and ``other``, truncated before degree `n`.
833
+
834
+ EXAMPLES::
835
+
836
+ sage: Pol.<x> = CBF[]
837
+ sage: Pol.<x> = CBF[]
838
+ sage: pol = x*(x-1)^2
839
+ sage: pol.compose_trunc(x + x^2, 4)
840
+ -3.000000000000000*x^3 - x^2 + x
841
+ sage: pol.compose_trunc(1 + x, 4)
842
+ x^3 + x^2
843
+ sage: pol.compose_trunc(2 + x/3, 2)
844
+ ([1.666666666666667 +/- ...e-16])*x + 2.000000000000000
845
+ sage: pol.compose_trunc(2 + x/3, 0)
846
+ 0
847
+ sage: pol.compose_trunc(2 + x/3, -1)
848
+ 0
849
+ """
850
+ if n < 0:
851
+ n = 0
852
+ if not isinstance(other, Polynomial_complex_arb):
853
+ return self(other).truncate(n)
854
+ cdef Polynomial_complex_arb other1 = <Polynomial_complex_arb> other
855
+ cdef Polynomial_complex_arb res = self._new()
856
+ cdef acb_poly_t self_ts, other_ts
857
+ cdef acb_ptr cc
858
+ if acb_poly_length(other1._poly) > 0:
859
+ cc = acb_poly_get_coeff_ptr(other1._poly, 0)
860
+ if not acb_is_zero(cc):
861
+ sig_on()
862
+ try:
863
+ acb_poly_init(self_ts)
864
+ acb_poly_init(other_ts)
865
+ acb_poly_taylor_shift(self_ts, self._poly, cc, prec(self))
866
+ acb_poly_set(other_ts, other1._poly)
867
+ acb_zero(acb_poly_get_coeff_ptr(other_ts, 0))
868
+ acb_poly_compose_series(res._poly, self_ts, other_ts, n, prec(self))
869
+ finally:
870
+ acb_poly_clear(other_ts)
871
+ acb_poly_clear(self_ts)
872
+ sig_off()
873
+ return res
874
+ sig_on()
875
+ acb_poly_compose_series(res._poly, self._poly, other1._poly, n, prec(self))
876
+ sig_off()
877
+ return res
878
+
879
+ def revert_series(self, long n):
880
+ r"""
881
+ Return a polynomial ``f`` such that
882
+ ``f(self(x)) = self(f(x)) = x mod x^n``.
883
+
884
+ EXAMPLES::
885
+
886
+ sage: Pol.<x> = CBF[]
887
+
888
+ sage: (2*x).revert_series(5)
889
+ 0.5000000000000000*x
890
+
891
+ sage: (x + x^3/6 + x^5/120).revert_series(6)
892
+ ([0.075000000000000 +/- ...e-17])*x^5 + ([-0.166666666666667 +/- ...e-16])*x^3 + x
893
+
894
+ sage: (1 + x).revert_series(6)
895
+ Traceback (most recent call last):
896
+ ...
897
+ ValueError: the constant coefficient must be zero
898
+
899
+ sage: (x^2).revert_series(6)
900
+ Traceback (most recent call last):
901
+ ...
902
+ ValueError: the linear term must be nonzero
903
+ """
904
+ cdef Polynomial_complex_arb res = self._new()
905
+ if n < 0:
906
+ n = 0
907
+ if not acb_is_zero(acb_poly_get_coeff_ptr(self._poly, 0)):
908
+ raise ValueError("the constant coefficient must be zero")
909
+ if acb_contains_zero(acb_poly_get_coeff_ptr(self._poly, 1)):
910
+ raise ValueError("the linear term must be nonzero")
911
+ sig_on()
912
+ acb_poly_revert_series(res._poly, self._poly, n, prec(self))
913
+ sig_off()
914
+ return res
915
+
916
+ # Evaluation
917
+
918
+ def __call__(self, *x, **kwds):
919
+ r"""
920
+ Evaluate this polynomial.
921
+
922
+ EXAMPLES::
923
+
924
+ sage: Pol.<x> = CBF[]
925
+ sage: pol = x^2 - 1
926
+ sage: pol(CBF(pi)) # needs sage.symbolic
927
+ [8.86960440108936 +/- ...e-15]
928
+ sage: pol(x^3 + 1)
929
+ x^6 + 2.000000000000000*x^3
930
+ sage: pol(matrix([[1,2],[3,4]]))
931
+ [6.000000000000000 10.00000000000000]
932
+ [15.00000000000000 21.00000000000000]
933
+
934
+ TESTS::
935
+
936
+ sage: P.<x> = CBF[]
937
+ sage: Q.<y> = CBF[]
938
+ sage: x(y)
939
+ y
940
+ """
941
+ cdef ComplexBall ball
942
+ cdef Polynomial_complex_arb poly
943
+ if len(x) == 1 and not kwds:
944
+ point = x[0]
945
+ if isinstance(point, ComplexBall):
946
+ # parent of result = base ring of self (not parent of point)
947
+ ball = ComplexBall.__new__(ComplexBall)
948
+ ball._parent = self._parent._base
949
+ sig_on()
950
+ acb_poly_evaluate(ball.value, self._poly,
951
+ (<ComplexBall> point).value, prec(self))
952
+ sig_off()
953
+ return ball
954
+ elif isinstance(point, Polynomial_complex_arb):
955
+ poly = (<Polynomial_complex_arb> point)._new()
956
+ sig_on()
957
+ acb_poly_compose(poly._poly, self._poly,
958
+ (<Polynomial_complex_arb> point)._poly, prec(self))
959
+ sig_off()
960
+ return poly
961
+ # TODO: perhaps add more special cases, e.g. for real ball,
962
+ # integers and rationals
963
+ return Polynomial.__call__(self, *x, **kwds)