passagemath-flint 10.6.1rc10__cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. passagemath_flint-10.6.1rc10.dist-info/METADATA +122 -0
  2. passagemath_flint-10.6.1rc10.dist-info/RECORD +361 -0
  3. passagemath_flint-10.6.1rc10.dist-info/WHEEL +6 -0
  4. passagemath_flint-10.6.1rc10.dist-info/top_level.txt +2 -0
  5. passagemath_flint.libs/libflint-aecb9cc5.so.21.0.0 +0 -0
  6. passagemath_flint.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  7. passagemath_flint.libs/libgfortran-8f1e9814.so.5.0.0 +0 -0
  8. passagemath_flint.libs/libgmp-6e109695.so.10.5.0 +0 -0
  9. passagemath_flint.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  10. passagemath_flint.libs/libmpfi-e3c25853.so.0.0.0 +0 -0
  11. passagemath_flint.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  12. passagemath_flint.libs/libntl-74e7d9a3.so.44.0.1 +0 -0
  13. passagemath_flint.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  14. passagemath_flint.libs/libquadmath-828275a7.so.0.0.0 +0 -0
  15. sage/all__sagemath_flint.py +29 -0
  16. sage/combinat/all__sagemath_flint.py +1 -0
  17. sage/combinat/posets/all__sagemath_flint.py +1 -0
  18. sage/combinat/posets/hasse_cython_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  19. sage/combinat/posets/hasse_cython_flint.pyx +194 -0
  20. sage/data_structures/all__sagemath_flint.py +1 -0
  21. sage/data_structures/bounded_integer_sequences.cpython-313-x86_64-linux-gnu.so +0 -0
  22. sage/data_structures/bounded_integer_sequences.pxd +62 -0
  23. sage/data_structures/bounded_integer_sequences.pyx +1418 -0
  24. sage/graphs/all__sagemath_flint.py +1 -0
  25. sage/graphs/chrompoly.cpython-313-x86_64-linux-gnu.so +0 -0
  26. sage/graphs/chrompoly.pyx +555 -0
  27. sage/graphs/matchpoly.cpython-313-x86_64-linux-gnu.so +0 -0
  28. sage/graphs/matchpoly.pyx +412 -0
  29. sage/libs/all__sagemath_flint.py +17 -0
  30. sage/libs/arb/__init__.py +1 -0
  31. sage/libs/arb/acb.pxd +154 -0
  32. sage/libs/arb/acb_calc.pxd +9 -0
  33. sage/libs/arb/acb_elliptic.pxd +25 -0
  34. sage/libs/arb/acb_hypgeom.pxd +74 -0
  35. sage/libs/arb/acb_mat.pxd +62 -0
  36. sage/libs/arb/acb_modular.pxd +17 -0
  37. sage/libs/arb/acb_poly.pxd +216 -0
  38. sage/libs/arb/arb.pxd +240 -0
  39. sage/libs/arb/arb_fmpz_poly.pxd +21 -0
  40. sage/libs/arb/arb_hypgeom.pxd +83 -0
  41. sage/libs/arb/arb_wrap.h +34 -0
  42. sage/libs/arb/arf.pxd +131 -0
  43. sage/libs/arb/arith.cpython-313-x86_64-linux-gnu.so +0 -0
  44. sage/libs/arb/arith.pyx +87 -0
  45. sage/libs/arb/bernoulli.pxd +6 -0
  46. sage/libs/arb/mag.pxd +77 -0
  47. sage/libs/arb/types.pxd +37 -0
  48. sage/libs/flint/__init__.py +1 -0
  49. sage/libs/flint/acb.pxd +270 -0
  50. sage/libs/flint/acb_calc.pxd +22 -0
  51. sage/libs/flint/acb_dft.pxd +51 -0
  52. sage/libs/flint/acb_dirichlet.pxd +112 -0
  53. sage/libs/flint/acb_elliptic.pxd +42 -0
  54. sage/libs/flint/acb_hypgeom.pxd +169 -0
  55. sage/libs/flint/acb_macros.pxd +9 -0
  56. sage/libs/flint/acb_mat.pxd +136 -0
  57. sage/libs/flint/acb_mat_macros.pxd +10 -0
  58. sage/libs/flint/acb_modular.pxd +62 -0
  59. sage/libs/flint/acb_poly.pxd +251 -0
  60. sage/libs/flint/acb_poly_macros.pxd +8 -0
  61. sage/libs/flint/acb_theta.pxd +124 -0
  62. sage/libs/flint/acf.pxd +32 -0
  63. sage/libs/flint/aprcl.pxd +84 -0
  64. sage/libs/flint/arb.pxd +382 -0
  65. sage/libs/flint/arb_calc.pxd +31 -0
  66. sage/libs/flint/arb_fmpz_poly.pxd +34 -0
  67. sage/libs/flint/arb_fpwrap.pxd +215 -0
  68. sage/libs/flint/arb_hypgeom.pxd +147 -0
  69. sage/libs/flint/arb_macros.pxd +9 -0
  70. sage/libs/flint/arb_mat.pxd +140 -0
  71. sage/libs/flint/arb_mat_macros.pxd +10 -0
  72. sage/libs/flint/arb_poly.pxd +237 -0
  73. sage/libs/flint/arf.pxd +167 -0
  74. sage/libs/flint/arith.cpython-313-x86_64-linux-gnu.so +0 -0
  75. sage/libs/flint/arith.pxd +76 -0
  76. sage/libs/flint/arith.pyx +77 -0
  77. sage/libs/flint/arith_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  78. sage/libs/flint/arith_sage.pyx +308 -0
  79. sage/libs/flint/bernoulli.pxd +28 -0
  80. sage/libs/flint/bool_mat.pxd +52 -0
  81. sage/libs/flint/ca.pxd +203 -0
  82. sage/libs/flint/ca_ext.pxd +34 -0
  83. sage/libs/flint/ca_field.pxd +32 -0
  84. sage/libs/flint/ca_mat.pxd +117 -0
  85. sage/libs/flint/ca_poly.pxd +104 -0
  86. sage/libs/flint/ca_vec.pxd +46 -0
  87. sage/libs/flint/calcium.pxd +27 -0
  88. sage/libs/flint/d_mat.pxd +39 -0
  89. sage/libs/flint/d_vec.pxd +32 -0
  90. sage/libs/flint/dirichlet.pxd +57 -0
  91. sage/libs/flint/dlog.pxd +53 -0
  92. sage/libs/flint/double_extras.pxd +24 -0
  93. sage/libs/flint/double_interval.pxd +36 -0
  94. sage/libs/flint/fexpr.pxd +104 -0
  95. sage/libs/flint/fexpr_builtin.pxd +20 -0
  96. sage/libs/flint/fft.pxd +66 -0
  97. sage/libs/flint/flint.pxd +36 -0
  98. sage/libs/flint/flint_ntl_wrap.h +35 -0
  99. sage/libs/flint/flint_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  100. sage/libs/flint/flint_sage.pyx +163 -0
  101. sage/libs/flint/flint_wrap.h +190 -0
  102. sage/libs/flint/fmpq.pxd +137 -0
  103. sage/libs/flint/fmpq_mat.pxd +105 -0
  104. sage/libs/flint/fmpq_mat_macros.pxd +10 -0
  105. sage/libs/flint/fmpq_mpoly.pxd +165 -0
  106. sage/libs/flint/fmpq_mpoly_factor.pxd +30 -0
  107. sage/libs/flint/fmpq_poly.pxd +241 -0
  108. sage/libs/flint/fmpq_poly_macros.pxd +9 -0
  109. sage/libs/flint/fmpq_poly_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  110. sage/libs/flint/fmpq_poly_sage.pxd +31 -0
  111. sage/libs/flint/fmpq_poly_sage.pyx +48 -0
  112. sage/libs/flint/fmpq_vec.pxd +27 -0
  113. sage/libs/flint/fmpz.pxd +256 -0
  114. sage/libs/flint/fmpz_extras.pxd +32 -0
  115. sage/libs/flint/fmpz_factor.pxd +42 -0
  116. sage/libs/flint/fmpz_factor_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  117. sage/libs/flint/fmpz_factor_sage.pxd +4 -0
  118. sage/libs/flint/fmpz_factor_sage.pyx +29 -0
  119. sage/libs/flint/fmpz_lll.pxd +49 -0
  120. sage/libs/flint/fmpz_macros.pxd +8 -0
  121. sage/libs/flint/fmpz_mat.pxd +184 -0
  122. sage/libs/flint/fmpz_mat_macros.pxd +10 -0
  123. sage/libs/flint/fmpz_mod.pxd +46 -0
  124. sage/libs/flint/fmpz_mod_mat.pxd +71 -0
  125. sage/libs/flint/fmpz_mod_mpoly.pxd +161 -0
  126. sage/libs/flint/fmpz_mod_mpoly_factor.pxd +28 -0
  127. sage/libs/flint/fmpz_mod_poly.pxd +249 -0
  128. sage/libs/flint/fmpz_mod_poly_factor.pxd +46 -0
  129. sage/libs/flint/fmpz_mod_vec.pxd +27 -0
  130. sage/libs/flint/fmpz_mpoly.pxd +224 -0
  131. sage/libs/flint/fmpz_mpoly_factor.pxd +29 -0
  132. sage/libs/flint/fmpz_mpoly_q.pxd +57 -0
  133. sage/libs/flint/fmpz_poly.cpython-313-x86_64-linux-gnu.so +0 -0
  134. sage/libs/flint/fmpz_poly.pxd +407 -0
  135. sage/libs/flint/fmpz_poly.pyx +19 -0
  136. sage/libs/flint/fmpz_poly_factor.pxd +33 -0
  137. sage/libs/flint/fmpz_poly_macros.pxd +8 -0
  138. sage/libs/flint/fmpz_poly_mat.pxd +71 -0
  139. sage/libs/flint/fmpz_poly_q.pxd +55 -0
  140. sage/libs/flint/fmpz_poly_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  141. sage/libs/flint/fmpz_poly_sage.pxd +20 -0
  142. sage/libs/flint/fmpz_poly_sage.pyx +500 -0
  143. sage/libs/flint/fmpz_vec.pxd +80 -0
  144. sage/libs/flint/fmpzi.pxd +52 -0
  145. sage/libs/flint/fq.pxd +97 -0
  146. sage/libs/flint/fq_default.pxd +84 -0
  147. sage/libs/flint/fq_default_mat.pxd +70 -0
  148. sage/libs/flint/fq_default_poly.pxd +97 -0
  149. sage/libs/flint/fq_default_poly_factor.pxd +39 -0
  150. sage/libs/flint/fq_embed.pxd +28 -0
  151. sage/libs/flint/fq_mat.pxd +83 -0
  152. sage/libs/flint/fq_nmod.pxd +95 -0
  153. sage/libs/flint/fq_nmod_embed.pxd +28 -0
  154. sage/libs/flint/fq_nmod_mat.pxd +83 -0
  155. sage/libs/flint/fq_nmod_mpoly.pxd +130 -0
  156. sage/libs/flint/fq_nmod_mpoly_factor.pxd +28 -0
  157. sage/libs/flint/fq_nmod_poly.pxd +202 -0
  158. sage/libs/flint/fq_nmod_poly_factor.pxd +47 -0
  159. sage/libs/flint/fq_nmod_vec.pxd +33 -0
  160. sage/libs/flint/fq_poly.pxd +204 -0
  161. sage/libs/flint/fq_poly_factor.pxd +47 -0
  162. sage/libs/flint/fq_vec.pxd +33 -0
  163. sage/libs/flint/fq_zech.pxd +99 -0
  164. sage/libs/flint/fq_zech_embed.pxd +28 -0
  165. sage/libs/flint/fq_zech_mat.pxd +78 -0
  166. sage/libs/flint/fq_zech_poly.pxd +198 -0
  167. sage/libs/flint/fq_zech_poly_factor.pxd +47 -0
  168. sage/libs/flint/fq_zech_vec.pxd +33 -0
  169. sage/libs/flint/gr.pxd +174 -0
  170. sage/libs/flint/gr_generic.pxd +215 -0
  171. sage/libs/flint/gr_mat.pxd +161 -0
  172. sage/libs/flint/gr_mpoly.pxd +68 -0
  173. sage/libs/flint/gr_poly.pxd +276 -0
  174. sage/libs/flint/gr_special.pxd +237 -0
  175. sage/libs/flint/gr_vec.pxd +120 -0
  176. sage/libs/flint/hypgeom.pxd +24 -0
  177. sage/libs/flint/long_extras.pxd +23 -0
  178. sage/libs/flint/mag.pxd +131 -0
  179. sage/libs/flint/mag_macros.pxd +8 -0
  180. sage/libs/flint/mpf_mat.pxd +36 -0
  181. sage/libs/flint/mpf_vec.pxd +34 -0
  182. sage/libs/flint/mpfr_mat.pxd +27 -0
  183. sage/libs/flint/mpfr_vec.pxd +25 -0
  184. sage/libs/flint/mpn_extras.pxd +41 -0
  185. sage/libs/flint/mpoly.pxd +72 -0
  186. sage/libs/flint/nf.pxd +19 -0
  187. sage/libs/flint/nf_elem.pxd +74 -0
  188. sage/libs/flint/nmod.pxd +35 -0
  189. sage/libs/flint/nmod_mat.pxd +104 -0
  190. sage/libs/flint/nmod_mpoly.pxd +144 -0
  191. sage/libs/flint/nmod_mpoly_factor.pxd +28 -0
  192. sage/libs/flint/nmod_poly.pxd +339 -0
  193. sage/libs/flint/nmod_poly_factor.pxd +44 -0
  194. sage/libs/flint/nmod_poly_linkage.pxi +710 -0
  195. sage/libs/flint/nmod_poly_mat.pxd +76 -0
  196. sage/libs/flint/nmod_vec.pxd +40 -0
  197. sage/libs/flint/ntl_interface.pxd +17 -0
  198. sage/libs/flint/padic.pxd +93 -0
  199. sage/libs/flint/padic_mat.pxd +64 -0
  200. sage/libs/flint/padic_poly.pxd +88 -0
  201. sage/libs/flint/partitions.pxd +23 -0
  202. sage/libs/flint/perm.pxd +26 -0
  203. sage/libs/flint/profiler.pxd +24 -0
  204. sage/libs/flint/qadic.pxd +77 -0
  205. sage/libs/flint/qfb.pxd +44 -0
  206. sage/libs/flint/qqbar.pxd +172 -0
  207. sage/libs/flint/qsieve.cpython-313-x86_64-linux-gnu.so +0 -0
  208. sage/libs/flint/qsieve.pxd +41 -0
  209. sage/libs/flint/qsieve.pyx +21 -0
  210. sage/libs/flint/qsieve_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  211. sage/libs/flint/qsieve_sage.pyx +67 -0
  212. sage/libs/flint/thread_pool.pxd +25 -0
  213. sage/libs/flint/types.pxd +2076 -0
  214. sage/libs/flint/ulong_extras.cpython-313-x86_64-linux-gnu.so +0 -0
  215. sage/libs/flint/ulong_extras.pxd +141 -0
  216. sage/libs/flint/ulong_extras.pyx +21 -0
  217. sage/libs/flint/ulong_extras_sage.cpython-313-x86_64-linux-gnu.so +0 -0
  218. sage/libs/flint/ulong_extras_sage.pyx +21 -0
  219. sage/matrix/all__sagemath_flint.py +1 -0
  220. sage/matrix/change_ring.cpython-313-x86_64-linux-gnu.so +0 -0
  221. sage/matrix/change_ring.pyx +43 -0
  222. sage/matrix/matrix_complex_ball_dense.cpython-313-x86_64-linux-gnu.so +0 -0
  223. sage/matrix/matrix_complex_ball_dense.pxd +14 -0
  224. sage/matrix/matrix_complex_ball_dense.pyx +973 -0
  225. sage/matrix/matrix_cyclo_dense.cpython-313-x86_64-linux-gnu.so +0 -0
  226. sage/matrix/matrix_cyclo_dense.pxd +16 -0
  227. sage/matrix/matrix_cyclo_dense.pyx +1761 -0
  228. sage/matrix/matrix_integer_dense.cpython-313-x86_64-linux-gnu.so +0 -0
  229. sage/matrix/matrix_integer_dense.pxd +32 -0
  230. sage/matrix/matrix_integer_dense.pyx +5801 -0
  231. sage/matrix/matrix_integer_dense_hnf.py +1294 -0
  232. sage/matrix/matrix_integer_dense_saturation.py +346 -0
  233. sage/matrix/matrix_integer_sparse.cpython-313-x86_64-linux-gnu.so +0 -0
  234. sage/matrix/matrix_integer_sparse.pxd +9 -0
  235. sage/matrix/matrix_integer_sparse.pyx +1090 -0
  236. sage/matrix/matrix_rational_dense.cpython-313-x86_64-linux-gnu.so +0 -0
  237. sage/matrix/matrix_rational_dense.pxd +23 -0
  238. sage/matrix/matrix_rational_dense.pyx +2995 -0
  239. sage/matrix/matrix_rational_sparse.cpython-313-x86_64-linux-gnu.so +0 -0
  240. sage/matrix/matrix_rational_sparse.pxd +11 -0
  241. sage/matrix/matrix_rational_sparse.pyx +789 -0
  242. sage/matrix/misc_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  243. sage/matrix/misc_flint.pyx +109 -0
  244. sage/modular/all__sagemath_flint.py +1 -0
  245. sage/modular/modform/all__sagemath_flint.py +1 -0
  246. sage/modular/modform/eis_series_cython.cpython-313-x86_64-linux-gnu.so +0 -0
  247. sage/modular/modform/eis_series_cython.pyx +226 -0
  248. sage/modular/modsym/all__sagemath_flint.py +1 -0
  249. sage/modular/modsym/apply.cpython-313-x86_64-linux-gnu.so +0 -0
  250. sage/modular/modsym/apply.pxd +6 -0
  251. sage/modular/modsym/apply.pyx +113 -0
  252. sage/modular/modsym/heilbronn.cpython-313-x86_64-linux-gnu.so +0 -0
  253. sage/modular/modsym/heilbronn.pyx +966 -0
  254. sage/modular/pollack_stevens/all__sagemath_flint.py +1 -0
  255. sage/modular/pollack_stevens/dist.cpython-313-x86_64-linux-gnu.so +0 -0
  256. sage/modular/pollack_stevens/dist.pxd +38 -0
  257. sage/modular/pollack_stevens/dist.pyx +1439 -0
  258. sage/quivers/algebra.py +691 -0
  259. sage/quivers/algebra_elements.cpython-313-x86_64-linux-gnu.so +0 -0
  260. sage/quivers/algebra_elements.pxd +97 -0
  261. sage/quivers/algebra_elements.pxi +1324 -0
  262. sage/quivers/algebra_elements.pyx +1424 -0
  263. sage/quivers/all.py +1 -0
  264. sage/quivers/ar_quiver.py +917 -0
  265. sage/quivers/homspace.py +640 -0
  266. sage/quivers/morphism.py +1282 -0
  267. sage/quivers/path_semigroup.py +1155 -0
  268. sage/quivers/paths.cpython-313-x86_64-linux-gnu.so +0 -0
  269. sage/quivers/paths.pxd +13 -0
  270. sage/quivers/paths.pyx +809 -0
  271. sage/quivers/representation.py +2975 -0
  272. sage/rings/all__sagemath_flint.py +37 -0
  273. sage/rings/cif.py +4 -0
  274. sage/rings/complex_arb.cpython-313-x86_64-linux-gnu.so +0 -0
  275. sage/rings/complex_arb.pxd +29 -0
  276. sage/rings/complex_arb.pyx +5176 -0
  277. sage/rings/complex_interval.cpython-313-x86_64-linux-gnu.so +0 -0
  278. sage/rings/complex_interval.pxd +30 -0
  279. sage/rings/complex_interval.pyx +2475 -0
  280. sage/rings/complex_interval_field.py +711 -0
  281. sage/rings/convert/all.py +1 -0
  282. sage/rings/convert/mpfi.cpython-313-x86_64-linux-gnu.so +0 -0
  283. sage/rings/convert/mpfi.pxd +6 -0
  284. sage/rings/convert/mpfi.pyx +576 -0
  285. sage/rings/factorint_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  286. sage/rings/factorint_flint.pyx +99 -0
  287. sage/rings/fraction_field_FpT.cpython-313-x86_64-linux-gnu.so +0 -0
  288. sage/rings/fraction_field_FpT.pxd +28 -0
  289. sage/rings/fraction_field_FpT.pyx +2043 -0
  290. sage/rings/imaginary_unit.py +5 -0
  291. sage/rings/monomials.py +73 -0
  292. sage/rings/number_field/S_unit_solver.py +2870 -0
  293. sage/rings/number_field/all__sagemath_flint.py +7 -0
  294. sage/rings/number_field/bdd_height.py +664 -0
  295. sage/rings/number_field/class_group.py +762 -0
  296. sage/rings/number_field/galois_group.py +1307 -0
  297. sage/rings/number_field/homset.py +612 -0
  298. sage/rings/number_field/maps.py +687 -0
  299. sage/rings/number_field/morphism.py +272 -0
  300. sage/rings/number_field/number_field.py +12820 -0
  301. sage/rings/number_field/number_field_element.cpython-313-x86_64-linux-gnu.so +0 -0
  302. sage/rings/number_field/number_field_element.pxd +59 -0
  303. sage/rings/number_field/number_field_element.pyx +5735 -0
  304. sage/rings/number_field/number_field_element_quadratic.cpython-313-x86_64-linux-gnu.so +0 -0
  305. sage/rings/number_field/number_field_element_quadratic.pxd +34 -0
  306. sage/rings/number_field/number_field_element_quadratic.pyx +3185 -0
  307. sage/rings/number_field/number_field_ideal_rel.py +925 -0
  308. sage/rings/number_field/number_field_morphisms.cpython-313-x86_64-linux-gnu.so +0 -0
  309. sage/rings/number_field/number_field_morphisms.pyx +781 -0
  310. sage/rings/number_field/number_field_rel.py +2734 -0
  311. sage/rings/number_field/order.py +2981 -0
  312. sage/rings/number_field/order_ideal.py +804 -0
  313. sage/rings/number_field/selmer_group.py +715 -0
  314. sage/rings/number_field/small_primes_of_degree_one.py +242 -0
  315. sage/rings/number_field/splitting_field.py +606 -0
  316. sage/rings/number_field/structure.py +380 -0
  317. sage/rings/number_field/unit_group.py +721 -0
  318. sage/rings/padics/all__sagemath_flint.py +3 -0
  319. sage/rings/polynomial/all__sagemath_flint.py +1 -0
  320. sage/rings/polynomial/complex_roots.py +312 -0
  321. sage/rings/polynomial/evaluation_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  322. sage/rings/polynomial/evaluation_flint.pxd +7 -0
  323. sage/rings/polynomial/evaluation_flint.pyx +68 -0
  324. sage/rings/polynomial/hilbert.cpython-313-x86_64-linux-gnu.so +0 -0
  325. sage/rings/polynomial/hilbert.pyx +602 -0
  326. sage/rings/polynomial/polynomial_complex_arb.cpython-313-x86_64-linux-gnu.so +0 -0
  327. sage/rings/polynomial/polynomial_complex_arb.pxd +7 -0
  328. sage/rings/polynomial/polynomial_complex_arb.pyx +963 -0
  329. sage/rings/polynomial/polynomial_integer_dense_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  330. sage/rings/polynomial/polynomial_integer_dense_flint.pxd +13 -0
  331. sage/rings/polynomial/polynomial_integer_dense_flint.pyx +1881 -0
  332. sage/rings/polynomial/polynomial_number_field.cpython-313-x86_64-linux-gnu.so +0 -0
  333. sage/rings/polynomial/polynomial_number_field.pyx +345 -0
  334. sage/rings/polynomial/polynomial_rational_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  335. sage/rings/polynomial/polynomial_rational_flint.pxd +20 -0
  336. sage/rings/polynomial/polynomial_rational_flint.pyx +2598 -0
  337. sage/rings/polynomial/polynomial_zmod_flint.cpython-313-x86_64-linux-gnu.so +0 -0
  338. sage/rings/polynomial/polynomial_zmod_flint.pxd +20 -0
  339. sage/rings/polynomial/polynomial_zmod_flint.pyx +1063 -0
  340. sage/rings/polynomial/real_roots.cpython-313-x86_64-linux-gnu.so +0 -0
  341. sage/rings/polynomial/real_roots.pxd +81 -0
  342. sage/rings/polynomial/real_roots.pyx +4704 -0
  343. sage/rings/polynomial/refine_root.cpython-313-x86_64-linux-gnu.so +0 -0
  344. sage/rings/polynomial/refine_root.pyx +142 -0
  345. sage/rings/polynomial/weil/all.py +4 -0
  346. sage/rings/polynomial/weil/power_sums.h +46 -0
  347. sage/rings/polynomial/weil/weil_polynomials.cpython-313-x86_64-linux-gnu.so +0 -0
  348. sage/rings/polynomial/weil/weil_polynomials.pyx +596 -0
  349. sage/rings/qqbar.py +9025 -0
  350. sage/rings/real_arb.cpython-313-x86_64-linux-gnu.so +0 -0
  351. sage/rings/real_arb.pxd +21 -0
  352. sage/rings/real_arb.pyx +4065 -0
  353. sage/rings/real_interval_absolute.cpython-313-x86_64-linux-gnu.so +0 -0
  354. sage/rings/real_interval_absolute.pyx +1073 -0
  355. sage/rings/real_mpfi.cpython-313-x86_64-linux-gnu.so +0 -0
  356. sage/rings/real_mpfi.pyx +5428 -0
  357. sage/schemes/all__sagemath_flint.py +1 -0
  358. sage/schemes/elliptic_curves/all__sagemath_flint.py +1 -0
  359. sage/schemes/elliptic_curves/descent_two_isogeny.cpython-313-x86_64-linux-gnu.so +0 -0
  360. sage/schemes/elliptic_curves/descent_two_isogeny.pyx +1387 -0
  361. sage/schemes/elliptic_curves/descent_two_isogeny_pari.pxd +5 -0
@@ -0,0 +1,711 @@
1
+ # sage_setup: distribution = sagemath-flint
2
+ r"""
3
+ Arbitrary precision complex intervals (parent class)
4
+
5
+ AUTHORS:
6
+
7
+ - William Stein wrote complex_field.py.
8
+
9
+ - William Stein (2006-01-26): complete rewrite
10
+
11
+ Then ``complex_field.py`` was copied to ``complex_interval_field.py`` and
12
+ heavily modified:
13
+
14
+ - Carl Witty (2007-10-24): rewrite for intervals
15
+
16
+ - Niles Johnson (2010-08): :issue:`3893`: ``random_element()``
17
+ should pass on ``*args`` and ``**kwds``.
18
+
19
+ - Travis Scrimshaw (2012-10-18): Added documentation to get full coverage.
20
+
21
+ .. NOTE::
22
+
23
+ The :class:`ComplexIntervalField` differs from :class:`ComplexField` in
24
+ that :class:`ComplexIntervalField` only gives the digits with exact
25
+ precision, then a ``?`` signifying that the last digit can have an error of
26
+ ``+/-1``.
27
+ """
28
+
29
+ # ****************************************************************************
30
+ # Copyright (C) 2006 William Stein <wstein@gmail.com>
31
+ #
32
+ # This program is free software: you can redistribute it and/or modify
33
+ # it under the terms of the GNU General Public License as published by
34
+ # the Free Software Foundation, either version 2 of the License, or
35
+ # (at your option) any later version.
36
+ # https://www.gnu.org/licenses/
37
+ # ****************************************************************************
38
+
39
+
40
+ import weakref
41
+
42
+ import sage.rings.abc
43
+ from sage.misc.cachefunc import cached_method
44
+ from sage.rings import complex_interval, integer
45
+ from sage.rings.complex_mpfr import ComplexField
46
+ from sage.rings.integer_ring import ZZ
47
+ from sage.rings.rational_field import QQ
48
+ from sage.rings.real_mpfi import RealIntervalField, RealIntervalField_class
49
+ from sage.rings.ring import Field
50
+ from sage.structure.parent import Parent
51
+
52
+ cache = {}
53
+
54
+
55
+ def ComplexIntervalField(prec=53, names=None):
56
+ """
57
+ Return the complex interval field with real and imaginary parts having
58
+ ``prec`` *bits* of precision.
59
+
60
+ EXAMPLES::
61
+
62
+ sage: ComplexIntervalField()
63
+ Complex Interval Field with 53 bits of precision
64
+ sage: ComplexIntervalField(100)
65
+ Complex Interval Field with 100 bits of precision
66
+ sage: ComplexIntervalField(100).base_ring()
67
+ Real Interval Field with 100 bits of precision
68
+ sage: i = ComplexIntervalField(200).gen()
69
+ sage: i^2
70
+ -1
71
+ sage: i^i
72
+ 0.207879576350761908546955619834978770033877841631769608075136?
73
+ """
74
+ global cache
75
+ if prec in cache:
76
+ X = cache[prec]
77
+ C = X()
78
+ if C is not None:
79
+ return C
80
+ C = ComplexIntervalField_class(prec)
81
+ cache[prec] = weakref.ref(C)
82
+ return C
83
+
84
+
85
+ class ComplexIntervalField_class(sage.rings.abc.ComplexIntervalField):
86
+ """
87
+ The field of complex (interval) numbers.
88
+
89
+ EXAMPLES::
90
+
91
+ sage: C = ComplexIntervalField(); C
92
+ Complex Interval Field with 53 bits of precision
93
+ sage: Q = RationalField()
94
+ sage: C(1/3)
95
+ 0.3333333333333334?
96
+ sage: C(1/3, 2)
97
+ 0.3333333333333334? + 2*I
98
+
99
+ We can also coerce rational numbers and integers into ``C``, but
100
+ coercing a polynomial will raise an exception::
101
+
102
+ sage: Q = RationalField()
103
+ sage: C(1/3)
104
+ 0.3333333333333334?
105
+ sage: S.<x> = PolynomialRing(Q)
106
+ sage: C(x)
107
+ Traceback (most recent call last):
108
+ ...
109
+ TypeError: cannot convert nonconstant polynomial
110
+
111
+ This illustrates precision::
112
+
113
+ sage: CIF = ComplexIntervalField(10); CIF(1/3, 2/3)
114
+ 0.334? + 0.667?*I
115
+ sage: CIF
116
+ Complex Interval Field with 10 bits of precision
117
+ sage: CIF = ComplexIntervalField(100); CIF
118
+ Complex Interval Field with 100 bits of precision
119
+ sage: z = CIF(1/3, 2/3); z
120
+ 0.333333333333333333333333333334? + 0.666666666666666666666666666667?*I
121
+
122
+ We can load and save complex numbers and the complex interval field::
123
+
124
+ sage: saved_z = loads(z.dumps())
125
+ sage: saved_z.endpoints() == z.endpoints()
126
+ True
127
+ sage: loads(CIF.dumps()) == CIF
128
+ True
129
+ sage: k = ComplexIntervalField(100)
130
+ sage: loads(dumps(k)) == k
131
+ True
132
+
133
+ This illustrates basic properties of a complex (interval) field::
134
+
135
+ sage: CIF = ComplexIntervalField(200)
136
+ sage: CIF.is_field()
137
+ True
138
+ sage: CIF.characteristic()
139
+ 0
140
+ sage: CIF.precision()
141
+ 200
142
+ sage: CIF.variable_name()
143
+ 'I'
144
+ sage: CIF == ComplexIntervalField(200)
145
+ True
146
+ sage: CIF == ComplexIntervalField(53)
147
+ False
148
+ sage: CIF == 1.1
149
+ False
150
+ sage: CIF = ComplexIntervalField(53)
151
+
152
+ sage: CIF.category()
153
+ Category of infinite fields
154
+ sage: TestSuite(CIF).run(skip='_test_gcd_vs_xgcd')
155
+
156
+ TESTS:
157
+
158
+ This checks that :issue:`15355` is fixed::
159
+
160
+ sage: x + CIF(RIF(-2,2), 0)
161
+ x + 0.?e1
162
+ sage: x + CIF(RIF(-2,2), RIF(-2,2))
163
+ x + 0.?e1 + 0.?e1*I
164
+ sage: x + RIF(-2,2)
165
+ x + 0.?e1
166
+ sage: x + CIF(RIF(3.14,3.15), RIF(3.14, 3.15))
167
+ x + 3.15? + 3.15?*I
168
+ sage: CIF(RIF(-2,2), RIF(-2,2))
169
+ 0.?e1 + 0.?e1*I
170
+ sage: x + CIF(RIF(3.14,3.15), 0)
171
+ x + 3.15?
172
+
173
+ Methods inherited from categories::
174
+
175
+ sage: CIF.is_finite()
176
+ False
177
+
178
+ .. SEEALSO::
179
+
180
+ - :mod:`sage.rings.real_mpfi`
181
+ - :class:`sage.rings.complex_arb.ComplexBallField` (alternative
182
+ implementation of complex intervals, with more features)
183
+ """
184
+ Element = complex_interval.ComplexIntervalFieldElement
185
+
186
+ def __init__(self, prec=53):
187
+ """
188
+ Initialize ``self``.
189
+
190
+ EXAMPLES::
191
+
192
+ sage: ComplexIntervalField()
193
+ Complex Interval Field with 53 bits of precision
194
+ sage: ComplexIntervalField(200)
195
+ Complex Interval Field with 200 bits of precision
196
+ """
197
+ self._prec = int(prec)
198
+ from sage.categories.fields import Fields
199
+ Field.__init__(self, self.real_field(), ("I",), False,
200
+ category=Fields().Infinite())
201
+ self._populate_coercion_lists_(convert_method_name='_complex_mpfi_')
202
+
203
+ def __reduce__(self):
204
+ """
205
+ Used for pickling.
206
+
207
+ TESTS::
208
+
209
+ sage: loads(dumps(CIF)) == CIF
210
+ True
211
+ """
212
+ return ComplexIntervalField, (self._prec, )
213
+
214
+ def construction(self):
215
+ """
216
+ Return the functorial construction of this complex interval field,
217
+ namely as the algebraic closure of the real interval field with
218
+ the same precision.
219
+
220
+ EXAMPLES::
221
+
222
+ sage: c, S = CIF.construction(); c, S
223
+ (AlgebraicClosureFunctor,
224
+ Real Interval Field with 53 bits of precision)
225
+ sage: CIF == c(S)
226
+ True
227
+
228
+ TESTS:
229
+
230
+ Test that :issue:`19922` is fixed::
231
+
232
+ sage: c = ComplexIntervalField(128).an_element()
233
+ sage: r = RealIntervalField(64).an_element()
234
+ sage: c + r
235
+ 1 + 1*I
236
+ sage: r + c
237
+ 1 + 1*I
238
+ sage: parent(c+r)
239
+ Complex Interval Field with 64 bits of precision
240
+ sage: R = ComplexIntervalField(128)['x']
241
+ sage: (R.gen() * RIF.one()).parent()
242
+ Univariate Polynomial Ring in x over Complex Interval Field with 53 bits of precision
243
+ """
244
+ from sage.categories.pushout import AlgebraicClosureFunctor
245
+ return (AlgebraicClosureFunctor(), self.real_field())
246
+
247
+ def is_exact(self):
248
+ """
249
+ The complex interval field is not exact.
250
+
251
+ EXAMPLES::
252
+
253
+ sage: CIF.is_exact()
254
+ False
255
+ """
256
+ return False
257
+
258
+ def prec(self):
259
+ """
260
+ Return the precision of ``self`` (in bits).
261
+
262
+ EXAMPLES::
263
+
264
+ sage: CIF.prec()
265
+ 53
266
+ sage: ComplexIntervalField(200).prec()
267
+ 200
268
+ """
269
+ return self._prec
270
+
271
+ def to_prec(self, prec):
272
+ """
273
+ Return a complex interval field with the given precision.
274
+
275
+ EXAMPLES::
276
+
277
+ sage: CIF.to_prec(150)
278
+ Complex Interval Field with 150 bits of precision
279
+ sage: CIF.to_prec(15)
280
+ Complex Interval Field with 15 bits of precision
281
+ sage: CIF.to_prec(53) is CIF
282
+ True
283
+ """
284
+ return ComplexIntervalField(prec)
285
+
286
+ def _magma_init_(self, magma):
287
+ r"""
288
+ Return a string representation of ``self`` in the Magma language.
289
+
290
+ EXAMPLES::
291
+
292
+ sage: magma(ComplexIntervalField(100)) # optional - magma # indirect doctest
293
+ Complex field of precision 30
294
+ sage: floor(RR(log(2**100, 10))) # needs sage.symbolic
295
+ 30
296
+ """
297
+ return "ComplexField(%s : Bits := true)" % self.prec()
298
+
299
+ def _sage_input_(self, sib, coerce):
300
+ r"""
301
+ Produce an expression which will reproduce this value when evaluated.
302
+
303
+ EXAMPLES::
304
+
305
+ sage: sage_input(CIF, verify=True)
306
+ # Verified
307
+ CIF
308
+ sage: sage_input(ComplexIntervalField(25), verify=True)
309
+ # Verified
310
+ ComplexIntervalField(25)
311
+ sage: k = (CIF, ComplexIntervalField(37), ComplexIntervalField(1024))
312
+ sage: sage_input(k, verify=True)
313
+ # Verified
314
+ (CIF, ComplexIntervalField(37), ComplexIntervalField(1024))
315
+ sage: sage_input((k, k), verify=True)
316
+ # Verified
317
+ CIF37 = ComplexIntervalField(37)
318
+ CIF1024 = ComplexIntervalField(1024)
319
+ ((CIF, CIF37, CIF1024), (CIF, CIF37, CIF1024))
320
+ sage: from sage.misc.sage_input import SageInputBuilder
321
+ sage: ComplexIntervalField(2)._sage_input_(SageInputBuilder(), False)
322
+ {call: {atomic:ComplexIntervalField}({atomic:2})}
323
+ """
324
+ if self.prec() == 53:
325
+ return sib.name('CIF')
326
+
327
+ v = sib.name('ComplexIntervalField')(sib.int(self.prec()))
328
+ name = 'CIF%d' % self.prec()
329
+ sib.cache(self, v, name)
330
+ return v
331
+
332
+ precision = prec
333
+
334
+ @cached_method
335
+ def real_field(self):
336
+ """
337
+ Return the underlying :class:`RealIntervalField`.
338
+
339
+ EXAMPLES::
340
+
341
+ sage: R = CIF.real_field(); R
342
+ Real Interval Field with 53 bits of precision
343
+ sage: ComplexIntervalField(200).real_field()
344
+ Real Interval Field with 200 bits of precision
345
+ sage: CIF.real_field() is R
346
+ True
347
+ """
348
+ return RealIntervalField(self._prec)
349
+
350
+ # For compatibility with other complex number implementations
351
+ # such as CC.
352
+ _real_field = real_field
353
+
354
+ @cached_method
355
+ def middle_field(self):
356
+ """
357
+ Return the corresponding :class:`ComplexField` with the same precision
358
+ as ``self``.
359
+
360
+ EXAMPLES::
361
+
362
+ sage: CIF.middle_field()
363
+ Complex Field with 53 bits of precision
364
+ sage: ComplexIntervalField(200).middle_field()
365
+ Complex Field with 200 bits of precision
366
+ """
367
+ return ComplexField(self._prec)
368
+
369
+ def __eq__(self, other):
370
+ """
371
+ Test whether ``self`` is equal to ``other``.
372
+
373
+ If ``other`` is not a :class:`ComplexIntervalField_class`,
374
+ return ``False``. Otherwise, return ``True`` if ``self`` and
375
+ ``other`` have the same precision.
376
+
377
+ EXAMPLES::
378
+
379
+ sage: CIF == ComplexIntervalField(200)
380
+ False
381
+ sage: CIF == CC
382
+ False
383
+ sage: CIF == CIF
384
+ True
385
+ """
386
+ if not isinstance(other, ComplexIntervalField_class):
387
+ return False
388
+ return self._prec == other._prec
389
+
390
+ def __hash__(self):
391
+ """
392
+ Return the hash.
393
+
394
+ EXAMPLES::
395
+
396
+ sage: C = ComplexIntervalField(200)
397
+ sage: from sage.rings.complex_interval_field import ComplexIntervalField_class
398
+ sage: D = ComplexIntervalField_class(200)
399
+ sage: hash(C) == hash(D)
400
+ True
401
+ """
402
+ return hash((self.__class__, self._prec))
403
+
404
+ def __ne__(self, other):
405
+ """
406
+ Test whether ``self`` is not equal to ``other``.
407
+
408
+ EXAMPLES::
409
+
410
+ sage: CIF != ComplexIntervalField(200)
411
+ True
412
+ sage: CIF != CC
413
+ True
414
+ sage: CIF != CIF
415
+ False
416
+ """
417
+ return not (self == other)
418
+
419
+ def __call__(self, x=None, im=None, **kwds):
420
+ """
421
+ Construct an element.
422
+
423
+ EXAMPLES::
424
+
425
+ sage: CIF(2) # indirect doctest
426
+ 2
427
+ sage: CIF(CIF.0)
428
+ 1*I
429
+ sage: CIF('1+I')
430
+ Traceback (most recent call last):
431
+ ...
432
+ TypeError: unable to convert '1+I' to real interval
433
+ sage: CIF(2,3)
434
+ 2 + 3*I
435
+ sage: CIF(pi, e) # needs sage.symbolic
436
+ 3.141592653589794? + 2.718281828459046?*I
437
+ sage: ComplexIntervalField(100)(CIF(RIF(2,3)))
438
+ 3.?
439
+
440
+ sage: QQi.<i> = QuadraticField(-1)
441
+ sage: CIF(i)
442
+ 1*I
443
+ sage: QQi.<i> = QuadraticField(-1, embedding=CC(0,-1)) # needs sage.libs.pari
444
+ sage: CIF(i) # needs sage.libs.pari
445
+ -1*I
446
+ sage: QQi.<i> = QuadraticField(-1, embedding=None)
447
+ sage: CIF(i)
448
+ 1*I
449
+
450
+ ::
451
+
452
+ sage: R.<x> = CIF[]
453
+ sage: a = R(CIF(0,1)); a
454
+ I
455
+ sage: CIF(a)
456
+ 1*I
457
+ """
458
+ # Note: we override Parent.__call__ because we want to support
459
+ # CIF(a, b) and that is hard to do using coerce maps.
460
+ if im is not None or kwds:
461
+ return self.element_class(self, x, im, **kwds)
462
+ return Parent.__call__(self, x)
463
+
464
+ def _coerce_map_from_(self, S):
465
+ """
466
+ Canonical coercion from ``S`` to this complex interval field.
467
+
468
+ The rings that canonically coerce to the MPFI complex field are:
469
+
470
+ - this MPFI complex field, or any other of higher precision
471
+
472
+ - anything that canonically coerces to the real interval field
473
+ with this precision
474
+
475
+ - some exact or lazy parents representing subsets of the complex
476
+ numbers, such as ``QQbar`` and ``CLF``.
477
+
478
+ EXAMPLES::
479
+
480
+ sage: CIF((2,1)) + 2 + I # indirect doctest
481
+ 4 + 2*I
482
+ sage: CIF((2,1)) + CC.pi()
483
+ Traceback (most recent call last):
484
+ ...
485
+ TypeError: unsupported operand parent(s) for +: 'Complex Interval Field with 53 bits of precision' and 'Complex Field with 53 bits of precision'
486
+
487
+ sage: CIF.coerce_map_from(QQ)
488
+ Coercion map:
489
+ From: Rational Field
490
+ To: Complex Interval Field with 53 bits of precision
491
+ sage: CIF.coerce_map_from(int)
492
+ Coercion map:
493
+ From: Set of Python objects of class 'int'
494
+ To: Complex Interval Field with 53 bits of precision
495
+ sage: CIF.coerce_map_from(GaussianIntegers()) # needs sage.rings.number_field
496
+ Conversion via _complex_mpfi_ method map:
497
+ From: Gaussian Integers generated by I in Number Field in I
498
+ with defining polynomial x^2 + 1 with I = 1*I
499
+ To: Complex Interval Field with 53 bits of precision
500
+ sage: CIF.coerce_map_from(QQbar) # needs sage.rings.number_field
501
+ Conversion via _complex_mpfi_ method map:
502
+ From: Algebraic Field
503
+ To: Complex Interval Field with 53 bits of precision
504
+ sage: CIF.coerce_map_from(AA) # needs sage.rings.number_field
505
+ Conversion via _complex_mpfi_ method map:
506
+ From: Algebraic Real Field
507
+ To: Complex Interval Field with 53 bits of precision
508
+ sage: CIF.coerce_map_from(UniversalCyclotomicField()) # needs sage.libs.gap sage.rings.number_field
509
+ Conversion via _complex_mpfi_ method map:
510
+ From: Universal Cyclotomic Field
511
+ To: Complex Interval Field with 53 bits of precision
512
+
513
+ TESTS::
514
+
515
+ sage: CIF.has_coerce_map_from(RR)
516
+ False
517
+ sage: CIF.has_coerce_map_from(RDF)
518
+ False
519
+ sage: CIF.has_coerce_map_from(float)
520
+ False
521
+ """
522
+ # Direct and efficient conversions
523
+ if S is ZZ or S is QQ or S is int:
524
+ return True
525
+ if isinstance(S, (ComplexIntervalField_class,
526
+ RealIntervalField_class)):
527
+ return S.precision() >= self._prec
528
+
529
+ # If coercion to CC is possible and there is a _complex_mpfi_
530
+ # method, assume that it defines a coercion to CIF
531
+ if self.middle_field().has_coerce_map_from(S):
532
+ f = self._convert_method_map(S)
533
+ if f is not None:
534
+ return f
535
+
536
+ return self._coerce_map_via( (self.real_field(),), S)
537
+
538
+ def _repr_(self):
539
+ """
540
+ Return a string representation of ``self``.
541
+
542
+ EXAMPLES::
543
+
544
+ sage: ComplexIntervalField() # indirect doctest
545
+ Complex Interval Field with 53 bits of precision
546
+ sage: ComplexIntervalField(100) # indirect doctest
547
+ Complex Interval Field with 100 bits of precision
548
+ """
549
+ return "Complex Interval Field with %s bits of precision" % self._prec
550
+
551
+ def _latex_(self):
552
+ r"""
553
+ Return a latex representation of ``self``.
554
+
555
+ EXAMPLES::
556
+
557
+ sage: latex(ComplexIntervalField()) # indirect doctest
558
+ \Bold{C}
559
+ """
560
+ return "\\Bold{C}"
561
+
562
+ def characteristic(self):
563
+ """
564
+ Return the characteristic of the complex (interval) field, which is 0.
565
+
566
+ EXAMPLES::
567
+
568
+ sage: CIF.characteristic()
569
+ 0
570
+ """
571
+ return integer.Integer(0)
572
+
573
+ def gen(self, n=0):
574
+ """
575
+ Return the generator of the complex (interval) field.
576
+
577
+ EXAMPLES::
578
+
579
+ sage: CIF.0
580
+ 1*I
581
+ sage: CIF.gen(0)
582
+ 1*I
583
+ """
584
+ if n != 0:
585
+ raise IndexError("n must be 0")
586
+ return self.element_class(self, 0, 1)
587
+
588
+ def random_element(self, *args, **kwds):
589
+ """
590
+ Create a random element of ``self``.
591
+
592
+ This simply chooses the real and imaginary part randomly, passing
593
+ arguments and keywords to the underlying real interval field.
594
+
595
+ EXAMPLES::
596
+
597
+ sage: CIF.random_element().parent() is CIF
598
+ True
599
+ sage: re, im = CIF.random_element(10, 20)
600
+ sage: 10 <= re <= 20
601
+ True
602
+ sage: 10 <= im <= 20
603
+ True
604
+
605
+ Passes extra positional or keyword arguments through::
606
+
607
+ sage: re, im = CIF.random_element(max=0, min=-5)
608
+ sage: -5 <= re <= 0
609
+ True
610
+ sage: -5 <= im <= 0
611
+ True
612
+ """
613
+ rand = self.real_field().random_element
614
+ re = rand(*args, **kwds)
615
+ im = rand(*args, **kwds)
616
+ return self.element_class(self, re, im)
617
+
618
+ def is_field(self, proof=True):
619
+ """
620
+ Return ``True``, since the complex numbers are a field.
621
+
622
+ EXAMPLES::
623
+
624
+ sage: CIF.is_field()
625
+ True
626
+ """
627
+ return True
628
+
629
+ def pi(self):
630
+ r"""
631
+ Return `\pi` as an element in the complex (interval) field.
632
+
633
+ EXAMPLES::
634
+
635
+ sage: ComplexIntervalField(100).pi()
636
+ 3.14159265358979323846264338328?
637
+ """
638
+ return self.element_class(self, self.real_field().pi())
639
+
640
+ def ngens(self):
641
+ r"""
642
+ The number of generators of this complex (interval) field as an
643
+ `\RR`-algebra.
644
+
645
+ There is one generator, namely ``sqrt(-1)``.
646
+
647
+ EXAMPLES::
648
+
649
+ sage: CIF.ngens()
650
+ 1
651
+ """
652
+ return 1
653
+
654
+ def zeta(self, n=2):
655
+ r"""
656
+ Return a primitive `n`-th root of unity.
657
+
658
+ .. TODO::
659
+
660
+ Implement :class:`ComplexIntervalFieldElement` multiplicative order
661
+ and set this output to have multiplicative order ``n``.
662
+
663
+ INPUT:
664
+
665
+ - ``n`` -- integer (default: 2)
666
+
667
+ OUTPUT: a complex `n`-th root of unity
668
+
669
+ EXAMPLES::
670
+
671
+ sage: CIF.zeta(2)
672
+ -1
673
+ sage: CIF.zeta(5)
674
+ 0.309016994374948? + 0.9510565162951536?*I
675
+ """
676
+ from .integer import Integer
677
+ n = Integer(n)
678
+ if n == 1:
679
+ x = self.element_class(self, 1)
680
+ elif n == 2:
681
+ x = self.element_class(self, -1)
682
+ elif n >= 3:
683
+ # Use De Moivre
684
+ # e^(2*pi*i/n) = cos(2pi/n) + i *sin(2pi/n)
685
+ RIF = self.real_field()
686
+ pi = RIF.pi()
687
+ z = 2*pi/n
688
+ x = self.element_class(self, z.cos(), z.sin())
689
+ # Uncomment after implemented
690
+ #x._set_multiplicative_order( n )
691
+ return x
692
+
693
+ def scientific_notation(self, status=None):
694
+ """
695
+ Set or return the scientific notation printing flag.
696
+
697
+ If this flag is ``True`` then complex numbers with this space as parent
698
+ print using scientific notation.
699
+
700
+ EXAMPLES::
701
+
702
+ sage: CIF((0.025, 2))
703
+ 0.025000000000000002? + 2*I
704
+ sage: CIF.scientific_notation(True)
705
+ sage: CIF((0.025, 2))
706
+ 2.5000000000000002?e-2 + 2*I
707
+ sage: CIF.scientific_notation(False)
708
+ sage: CIF((0.025, 2))
709
+ 0.025000000000000002? + 2*I
710
+ """
711
+ return self.real_field().scientific_notation(status)
@@ -0,0 +1 @@
1
+ # sage_setup: distribution = sagemath-flint