passagemath-flint 10.6.1rc10__cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. passagemath_flint-10.6.1rc10.dist-info/METADATA +122 -0
  2. passagemath_flint-10.6.1rc10.dist-info/RECORD +361 -0
  3. passagemath_flint-10.6.1rc10.dist-info/WHEEL +6 -0
  4. passagemath_flint-10.6.1rc10.dist-info/top_level.txt +2 -0
  5. passagemath_flint.libs/libflint-aecb9cc5.so.21.0.0 +0 -0
  6. passagemath_flint.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
  7. passagemath_flint.libs/libgfortran-8f1e9814.so.5.0.0 +0 -0
  8. passagemath_flint.libs/libgmp-6e109695.so.10.5.0 +0 -0
  9. passagemath_flint.libs/libgsl-cda90e79.so.28.0.0 +0 -0
  10. passagemath_flint.libs/libmpfi-e3c25853.so.0.0.0 +0 -0
  11. passagemath_flint.libs/libmpfr-82690d50.so.6.2.1 +0 -0
  12. passagemath_flint.libs/libntl-74e7d9a3.so.44.0.1 +0 -0
  13. passagemath_flint.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
  14. passagemath_flint.libs/libquadmath-828275a7.so.0.0.0 +0 -0
  15. sage/all__sagemath_flint.py +29 -0
  16. sage/combinat/all__sagemath_flint.py +1 -0
  17. sage/combinat/posets/all__sagemath_flint.py +1 -0
  18. sage/combinat/posets/hasse_cython_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  19. sage/combinat/posets/hasse_cython_flint.pyx +194 -0
  20. sage/data_structures/all__sagemath_flint.py +1 -0
  21. sage/data_structures/bounded_integer_sequences.cpython-311-x86_64-linux-gnu.so +0 -0
  22. sage/data_structures/bounded_integer_sequences.pxd +62 -0
  23. sage/data_structures/bounded_integer_sequences.pyx +1418 -0
  24. sage/graphs/all__sagemath_flint.py +1 -0
  25. sage/graphs/chrompoly.cpython-311-x86_64-linux-gnu.so +0 -0
  26. sage/graphs/chrompoly.pyx +555 -0
  27. sage/graphs/matchpoly.cpython-311-x86_64-linux-gnu.so +0 -0
  28. sage/graphs/matchpoly.pyx +412 -0
  29. sage/libs/all__sagemath_flint.py +17 -0
  30. sage/libs/arb/__init__.py +1 -0
  31. sage/libs/arb/acb.pxd +154 -0
  32. sage/libs/arb/acb_calc.pxd +9 -0
  33. sage/libs/arb/acb_elliptic.pxd +25 -0
  34. sage/libs/arb/acb_hypgeom.pxd +74 -0
  35. sage/libs/arb/acb_mat.pxd +62 -0
  36. sage/libs/arb/acb_modular.pxd +17 -0
  37. sage/libs/arb/acb_poly.pxd +216 -0
  38. sage/libs/arb/arb.pxd +240 -0
  39. sage/libs/arb/arb_fmpz_poly.pxd +21 -0
  40. sage/libs/arb/arb_hypgeom.pxd +83 -0
  41. sage/libs/arb/arb_wrap.h +34 -0
  42. sage/libs/arb/arf.pxd +131 -0
  43. sage/libs/arb/arith.cpython-311-x86_64-linux-gnu.so +0 -0
  44. sage/libs/arb/arith.pyx +87 -0
  45. sage/libs/arb/bernoulli.pxd +6 -0
  46. sage/libs/arb/mag.pxd +77 -0
  47. sage/libs/arb/types.pxd +37 -0
  48. sage/libs/flint/__init__.py +1 -0
  49. sage/libs/flint/acb.pxd +270 -0
  50. sage/libs/flint/acb_calc.pxd +22 -0
  51. sage/libs/flint/acb_dft.pxd +51 -0
  52. sage/libs/flint/acb_dirichlet.pxd +112 -0
  53. sage/libs/flint/acb_elliptic.pxd +42 -0
  54. sage/libs/flint/acb_hypgeom.pxd +169 -0
  55. sage/libs/flint/acb_macros.pxd +9 -0
  56. sage/libs/flint/acb_mat.pxd +136 -0
  57. sage/libs/flint/acb_mat_macros.pxd +10 -0
  58. sage/libs/flint/acb_modular.pxd +62 -0
  59. sage/libs/flint/acb_poly.pxd +251 -0
  60. sage/libs/flint/acb_poly_macros.pxd +8 -0
  61. sage/libs/flint/acb_theta.pxd +124 -0
  62. sage/libs/flint/acf.pxd +32 -0
  63. sage/libs/flint/aprcl.pxd +84 -0
  64. sage/libs/flint/arb.pxd +382 -0
  65. sage/libs/flint/arb_calc.pxd +31 -0
  66. sage/libs/flint/arb_fmpz_poly.pxd +34 -0
  67. sage/libs/flint/arb_fpwrap.pxd +215 -0
  68. sage/libs/flint/arb_hypgeom.pxd +147 -0
  69. sage/libs/flint/arb_macros.pxd +9 -0
  70. sage/libs/flint/arb_mat.pxd +140 -0
  71. sage/libs/flint/arb_mat_macros.pxd +10 -0
  72. sage/libs/flint/arb_poly.pxd +237 -0
  73. sage/libs/flint/arf.pxd +167 -0
  74. sage/libs/flint/arith.cpython-311-x86_64-linux-gnu.so +0 -0
  75. sage/libs/flint/arith.pxd +76 -0
  76. sage/libs/flint/arith.pyx +77 -0
  77. sage/libs/flint/arith_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  78. sage/libs/flint/arith_sage.pyx +308 -0
  79. sage/libs/flint/bernoulli.pxd +28 -0
  80. sage/libs/flint/bool_mat.pxd +52 -0
  81. sage/libs/flint/ca.pxd +203 -0
  82. sage/libs/flint/ca_ext.pxd +34 -0
  83. sage/libs/flint/ca_field.pxd +32 -0
  84. sage/libs/flint/ca_mat.pxd +117 -0
  85. sage/libs/flint/ca_poly.pxd +104 -0
  86. sage/libs/flint/ca_vec.pxd +46 -0
  87. sage/libs/flint/calcium.pxd +27 -0
  88. sage/libs/flint/d_mat.pxd +39 -0
  89. sage/libs/flint/d_vec.pxd +32 -0
  90. sage/libs/flint/dirichlet.pxd +57 -0
  91. sage/libs/flint/dlog.pxd +53 -0
  92. sage/libs/flint/double_extras.pxd +24 -0
  93. sage/libs/flint/double_interval.pxd +36 -0
  94. sage/libs/flint/fexpr.pxd +104 -0
  95. sage/libs/flint/fexpr_builtin.pxd +20 -0
  96. sage/libs/flint/fft.pxd +66 -0
  97. sage/libs/flint/flint.pxd +36 -0
  98. sage/libs/flint/flint_ntl_wrap.h +35 -0
  99. sage/libs/flint/flint_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  100. sage/libs/flint/flint_sage.pyx +163 -0
  101. sage/libs/flint/flint_wrap.h +190 -0
  102. sage/libs/flint/fmpq.pxd +137 -0
  103. sage/libs/flint/fmpq_mat.pxd +105 -0
  104. sage/libs/flint/fmpq_mat_macros.pxd +10 -0
  105. sage/libs/flint/fmpq_mpoly.pxd +165 -0
  106. sage/libs/flint/fmpq_mpoly_factor.pxd +30 -0
  107. sage/libs/flint/fmpq_poly.pxd +241 -0
  108. sage/libs/flint/fmpq_poly_macros.pxd +9 -0
  109. sage/libs/flint/fmpq_poly_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  110. sage/libs/flint/fmpq_poly_sage.pxd +31 -0
  111. sage/libs/flint/fmpq_poly_sage.pyx +48 -0
  112. sage/libs/flint/fmpq_vec.pxd +27 -0
  113. sage/libs/flint/fmpz.pxd +256 -0
  114. sage/libs/flint/fmpz_extras.pxd +32 -0
  115. sage/libs/flint/fmpz_factor.pxd +42 -0
  116. sage/libs/flint/fmpz_factor_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  117. sage/libs/flint/fmpz_factor_sage.pxd +4 -0
  118. sage/libs/flint/fmpz_factor_sage.pyx +29 -0
  119. sage/libs/flint/fmpz_lll.pxd +49 -0
  120. sage/libs/flint/fmpz_macros.pxd +8 -0
  121. sage/libs/flint/fmpz_mat.pxd +184 -0
  122. sage/libs/flint/fmpz_mat_macros.pxd +10 -0
  123. sage/libs/flint/fmpz_mod.pxd +46 -0
  124. sage/libs/flint/fmpz_mod_mat.pxd +71 -0
  125. sage/libs/flint/fmpz_mod_mpoly.pxd +161 -0
  126. sage/libs/flint/fmpz_mod_mpoly_factor.pxd +28 -0
  127. sage/libs/flint/fmpz_mod_poly.pxd +249 -0
  128. sage/libs/flint/fmpz_mod_poly_factor.pxd +46 -0
  129. sage/libs/flint/fmpz_mod_vec.pxd +27 -0
  130. sage/libs/flint/fmpz_mpoly.pxd +224 -0
  131. sage/libs/flint/fmpz_mpoly_factor.pxd +29 -0
  132. sage/libs/flint/fmpz_mpoly_q.pxd +57 -0
  133. sage/libs/flint/fmpz_poly.cpython-311-x86_64-linux-gnu.so +0 -0
  134. sage/libs/flint/fmpz_poly.pxd +407 -0
  135. sage/libs/flint/fmpz_poly.pyx +19 -0
  136. sage/libs/flint/fmpz_poly_factor.pxd +33 -0
  137. sage/libs/flint/fmpz_poly_macros.pxd +8 -0
  138. sage/libs/flint/fmpz_poly_mat.pxd +71 -0
  139. sage/libs/flint/fmpz_poly_q.pxd +55 -0
  140. sage/libs/flint/fmpz_poly_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  141. sage/libs/flint/fmpz_poly_sage.pxd +20 -0
  142. sage/libs/flint/fmpz_poly_sage.pyx +500 -0
  143. sage/libs/flint/fmpz_vec.pxd +80 -0
  144. sage/libs/flint/fmpzi.pxd +52 -0
  145. sage/libs/flint/fq.pxd +97 -0
  146. sage/libs/flint/fq_default.pxd +84 -0
  147. sage/libs/flint/fq_default_mat.pxd +70 -0
  148. sage/libs/flint/fq_default_poly.pxd +97 -0
  149. sage/libs/flint/fq_default_poly_factor.pxd +39 -0
  150. sage/libs/flint/fq_embed.pxd +28 -0
  151. sage/libs/flint/fq_mat.pxd +83 -0
  152. sage/libs/flint/fq_nmod.pxd +95 -0
  153. sage/libs/flint/fq_nmod_embed.pxd +28 -0
  154. sage/libs/flint/fq_nmod_mat.pxd +83 -0
  155. sage/libs/flint/fq_nmod_mpoly.pxd +130 -0
  156. sage/libs/flint/fq_nmod_mpoly_factor.pxd +28 -0
  157. sage/libs/flint/fq_nmod_poly.pxd +202 -0
  158. sage/libs/flint/fq_nmod_poly_factor.pxd +47 -0
  159. sage/libs/flint/fq_nmod_vec.pxd +33 -0
  160. sage/libs/flint/fq_poly.pxd +204 -0
  161. sage/libs/flint/fq_poly_factor.pxd +47 -0
  162. sage/libs/flint/fq_vec.pxd +33 -0
  163. sage/libs/flint/fq_zech.pxd +99 -0
  164. sage/libs/flint/fq_zech_embed.pxd +28 -0
  165. sage/libs/flint/fq_zech_mat.pxd +78 -0
  166. sage/libs/flint/fq_zech_poly.pxd +198 -0
  167. sage/libs/flint/fq_zech_poly_factor.pxd +47 -0
  168. sage/libs/flint/fq_zech_vec.pxd +33 -0
  169. sage/libs/flint/gr.pxd +174 -0
  170. sage/libs/flint/gr_generic.pxd +215 -0
  171. sage/libs/flint/gr_mat.pxd +161 -0
  172. sage/libs/flint/gr_mpoly.pxd +68 -0
  173. sage/libs/flint/gr_poly.pxd +276 -0
  174. sage/libs/flint/gr_special.pxd +237 -0
  175. sage/libs/flint/gr_vec.pxd +120 -0
  176. sage/libs/flint/hypgeom.pxd +24 -0
  177. sage/libs/flint/long_extras.pxd +23 -0
  178. sage/libs/flint/mag.pxd +131 -0
  179. sage/libs/flint/mag_macros.pxd +8 -0
  180. sage/libs/flint/mpf_mat.pxd +36 -0
  181. sage/libs/flint/mpf_vec.pxd +34 -0
  182. sage/libs/flint/mpfr_mat.pxd +27 -0
  183. sage/libs/flint/mpfr_vec.pxd +25 -0
  184. sage/libs/flint/mpn_extras.pxd +41 -0
  185. sage/libs/flint/mpoly.pxd +72 -0
  186. sage/libs/flint/nf.pxd +19 -0
  187. sage/libs/flint/nf_elem.pxd +74 -0
  188. sage/libs/flint/nmod.pxd +35 -0
  189. sage/libs/flint/nmod_mat.pxd +104 -0
  190. sage/libs/flint/nmod_mpoly.pxd +144 -0
  191. sage/libs/flint/nmod_mpoly_factor.pxd +28 -0
  192. sage/libs/flint/nmod_poly.pxd +339 -0
  193. sage/libs/flint/nmod_poly_factor.pxd +44 -0
  194. sage/libs/flint/nmod_poly_linkage.pxi +710 -0
  195. sage/libs/flint/nmod_poly_mat.pxd +76 -0
  196. sage/libs/flint/nmod_vec.pxd +40 -0
  197. sage/libs/flint/ntl_interface.pxd +17 -0
  198. sage/libs/flint/padic.pxd +93 -0
  199. sage/libs/flint/padic_mat.pxd +64 -0
  200. sage/libs/flint/padic_poly.pxd +88 -0
  201. sage/libs/flint/partitions.pxd +23 -0
  202. sage/libs/flint/perm.pxd +26 -0
  203. sage/libs/flint/profiler.pxd +24 -0
  204. sage/libs/flint/qadic.pxd +77 -0
  205. sage/libs/flint/qfb.pxd +44 -0
  206. sage/libs/flint/qqbar.pxd +172 -0
  207. sage/libs/flint/qsieve.cpython-311-x86_64-linux-gnu.so +0 -0
  208. sage/libs/flint/qsieve.pxd +41 -0
  209. sage/libs/flint/qsieve.pyx +21 -0
  210. sage/libs/flint/qsieve_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  211. sage/libs/flint/qsieve_sage.pyx +67 -0
  212. sage/libs/flint/thread_pool.pxd +25 -0
  213. sage/libs/flint/types.pxd +2076 -0
  214. sage/libs/flint/ulong_extras.cpython-311-x86_64-linux-gnu.so +0 -0
  215. sage/libs/flint/ulong_extras.pxd +141 -0
  216. sage/libs/flint/ulong_extras.pyx +21 -0
  217. sage/libs/flint/ulong_extras_sage.cpython-311-x86_64-linux-gnu.so +0 -0
  218. sage/libs/flint/ulong_extras_sage.pyx +21 -0
  219. sage/matrix/all__sagemath_flint.py +1 -0
  220. sage/matrix/change_ring.cpython-311-x86_64-linux-gnu.so +0 -0
  221. sage/matrix/change_ring.pyx +43 -0
  222. sage/matrix/matrix_complex_ball_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  223. sage/matrix/matrix_complex_ball_dense.pxd +14 -0
  224. sage/matrix/matrix_complex_ball_dense.pyx +973 -0
  225. sage/matrix/matrix_cyclo_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  226. sage/matrix/matrix_cyclo_dense.pxd +16 -0
  227. sage/matrix/matrix_cyclo_dense.pyx +1761 -0
  228. sage/matrix/matrix_integer_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  229. sage/matrix/matrix_integer_dense.pxd +32 -0
  230. sage/matrix/matrix_integer_dense.pyx +5801 -0
  231. sage/matrix/matrix_integer_dense_hnf.py +1294 -0
  232. sage/matrix/matrix_integer_dense_saturation.py +346 -0
  233. sage/matrix/matrix_integer_sparse.cpython-311-x86_64-linux-gnu.so +0 -0
  234. sage/matrix/matrix_integer_sparse.pxd +9 -0
  235. sage/matrix/matrix_integer_sparse.pyx +1090 -0
  236. sage/matrix/matrix_rational_dense.cpython-311-x86_64-linux-gnu.so +0 -0
  237. sage/matrix/matrix_rational_dense.pxd +23 -0
  238. sage/matrix/matrix_rational_dense.pyx +2995 -0
  239. sage/matrix/matrix_rational_sparse.cpython-311-x86_64-linux-gnu.so +0 -0
  240. sage/matrix/matrix_rational_sparse.pxd +11 -0
  241. sage/matrix/matrix_rational_sparse.pyx +789 -0
  242. sage/matrix/misc_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  243. sage/matrix/misc_flint.pyx +109 -0
  244. sage/modular/all__sagemath_flint.py +1 -0
  245. sage/modular/modform/all__sagemath_flint.py +1 -0
  246. sage/modular/modform/eis_series_cython.cpython-311-x86_64-linux-gnu.so +0 -0
  247. sage/modular/modform/eis_series_cython.pyx +226 -0
  248. sage/modular/modsym/all__sagemath_flint.py +1 -0
  249. sage/modular/modsym/apply.cpython-311-x86_64-linux-gnu.so +0 -0
  250. sage/modular/modsym/apply.pxd +6 -0
  251. sage/modular/modsym/apply.pyx +113 -0
  252. sage/modular/modsym/heilbronn.cpython-311-x86_64-linux-gnu.so +0 -0
  253. sage/modular/modsym/heilbronn.pyx +966 -0
  254. sage/modular/pollack_stevens/all__sagemath_flint.py +1 -0
  255. sage/modular/pollack_stevens/dist.cpython-311-x86_64-linux-gnu.so +0 -0
  256. sage/modular/pollack_stevens/dist.pxd +38 -0
  257. sage/modular/pollack_stevens/dist.pyx +1439 -0
  258. sage/quivers/algebra.py +691 -0
  259. sage/quivers/algebra_elements.cpython-311-x86_64-linux-gnu.so +0 -0
  260. sage/quivers/algebra_elements.pxd +97 -0
  261. sage/quivers/algebra_elements.pxi +1324 -0
  262. sage/quivers/algebra_elements.pyx +1424 -0
  263. sage/quivers/all.py +1 -0
  264. sage/quivers/ar_quiver.py +917 -0
  265. sage/quivers/homspace.py +640 -0
  266. sage/quivers/morphism.py +1282 -0
  267. sage/quivers/path_semigroup.py +1155 -0
  268. sage/quivers/paths.cpython-311-x86_64-linux-gnu.so +0 -0
  269. sage/quivers/paths.pxd +13 -0
  270. sage/quivers/paths.pyx +809 -0
  271. sage/quivers/representation.py +2975 -0
  272. sage/rings/all__sagemath_flint.py +37 -0
  273. sage/rings/cif.py +4 -0
  274. sage/rings/complex_arb.cpython-311-x86_64-linux-gnu.so +0 -0
  275. sage/rings/complex_arb.pxd +29 -0
  276. sage/rings/complex_arb.pyx +5176 -0
  277. sage/rings/complex_interval.cpython-311-x86_64-linux-gnu.so +0 -0
  278. sage/rings/complex_interval.pxd +30 -0
  279. sage/rings/complex_interval.pyx +2475 -0
  280. sage/rings/complex_interval_field.py +711 -0
  281. sage/rings/convert/all.py +1 -0
  282. sage/rings/convert/mpfi.cpython-311-x86_64-linux-gnu.so +0 -0
  283. sage/rings/convert/mpfi.pxd +6 -0
  284. sage/rings/convert/mpfi.pyx +576 -0
  285. sage/rings/factorint_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  286. sage/rings/factorint_flint.pyx +99 -0
  287. sage/rings/fraction_field_FpT.cpython-311-x86_64-linux-gnu.so +0 -0
  288. sage/rings/fraction_field_FpT.pxd +28 -0
  289. sage/rings/fraction_field_FpT.pyx +2043 -0
  290. sage/rings/imaginary_unit.py +5 -0
  291. sage/rings/monomials.py +73 -0
  292. sage/rings/number_field/S_unit_solver.py +2870 -0
  293. sage/rings/number_field/all__sagemath_flint.py +7 -0
  294. sage/rings/number_field/bdd_height.py +664 -0
  295. sage/rings/number_field/class_group.py +762 -0
  296. sage/rings/number_field/galois_group.py +1307 -0
  297. sage/rings/number_field/homset.py +612 -0
  298. sage/rings/number_field/maps.py +687 -0
  299. sage/rings/number_field/morphism.py +272 -0
  300. sage/rings/number_field/number_field.py +12820 -0
  301. sage/rings/number_field/number_field_element.cpython-311-x86_64-linux-gnu.so +0 -0
  302. sage/rings/number_field/number_field_element.pxd +59 -0
  303. sage/rings/number_field/number_field_element.pyx +5735 -0
  304. sage/rings/number_field/number_field_element_quadratic.cpython-311-x86_64-linux-gnu.so +0 -0
  305. sage/rings/number_field/number_field_element_quadratic.pxd +34 -0
  306. sage/rings/number_field/number_field_element_quadratic.pyx +3185 -0
  307. sage/rings/number_field/number_field_ideal_rel.py +925 -0
  308. sage/rings/number_field/number_field_morphisms.cpython-311-x86_64-linux-gnu.so +0 -0
  309. sage/rings/number_field/number_field_morphisms.pyx +781 -0
  310. sage/rings/number_field/number_field_rel.py +2734 -0
  311. sage/rings/number_field/order.py +2981 -0
  312. sage/rings/number_field/order_ideal.py +804 -0
  313. sage/rings/number_field/selmer_group.py +715 -0
  314. sage/rings/number_field/small_primes_of_degree_one.py +242 -0
  315. sage/rings/number_field/splitting_field.py +606 -0
  316. sage/rings/number_field/structure.py +380 -0
  317. sage/rings/number_field/unit_group.py +721 -0
  318. sage/rings/padics/all__sagemath_flint.py +3 -0
  319. sage/rings/polynomial/all__sagemath_flint.py +1 -0
  320. sage/rings/polynomial/complex_roots.py +312 -0
  321. sage/rings/polynomial/evaluation_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  322. sage/rings/polynomial/evaluation_flint.pxd +7 -0
  323. sage/rings/polynomial/evaluation_flint.pyx +68 -0
  324. sage/rings/polynomial/hilbert.cpython-311-x86_64-linux-gnu.so +0 -0
  325. sage/rings/polynomial/hilbert.pyx +602 -0
  326. sage/rings/polynomial/polynomial_complex_arb.cpython-311-x86_64-linux-gnu.so +0 -0
  327. sage/rings/polynomial/polynomial_complex_arb.pxd +7 -0
  328. sage/rings/polynomial/polynomial_complex_arb.pyx +963 -0
  329. sage/rings/polynomial/polynomial_integer_dense_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  330. sage/rings/polynomial/polynomial_integer_dense_flint.pxd +13 -0
  331. sage/rings/polynomial/polynomial_integer_dense_flint.pyx +1881 -0
  332. sage/rings/polynomial/polynomial_number_field.cpython-311-x86_64-linux-gnu.so +0 -0
  333. sage/rings/polynomial/polynomial_number_field.pyx +345 -0
  334. sage/rings/polynomial/polynomial_rational_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  335. sage/rings/polynomial/polynomial_rational_flint.pxd +20 -0
  336. sage/rings/polynomial/polynomial_rational_flint.pyx +2598 -0
  337. sage/rings/polynomial/polynomial_zmod_flint.cpython-311-x86_64-linux-gnu.so +0 -0
  338. sage/rings/polynomial/polynomial_zmod_flint.pxd +20 -0
  339. sage/rings/polynomial/polynomial_zmod_flint.pyx +1063 -0
  340. sage/rings/polynomial/real_roots.cpython-311-x86_64-linux-gnu.so +0 -0
  341. sage/rings/polynomial/real_roots.pxd +81 -0
  342. sage/rings/polynomial/real_roots.pyx +4704 -0
  343. sage/rings/polynomial/refine_root.cpython-311-x86_64-linux-gnu.so +0 -0
  344. sage/rings/polynomial/refine_root.pyx +142 -0
  345. sage/rings/polynomial/weil/all.py +4 -0
  346. sage/rings/polynomial/weil/power_sums.h +46 -0
  347. sage/rings/polynomial/weil/weil_polynomials.cpython-311-x86_64-linux-gnu.so +0 -0
  348. sage/rings/polynomial/weil/weil_polynomials.pyx +596 -0
  349. sage/rings/qqbar.py +9025 -0
  350. sage/rings/real_arb.cpython-311-x86_64-linux-gnu.so +0 -0
  351. sage/rings/real_arb.pxd +21 -0
  352. sage/rings/real_arb.pyx +4065 -0
  353. sage/rings/real_interval_absolute.cpython-311-x86_64-linux-gnu.so +0 -0
  354. sage/rings/real_interval_absolute.pyx +1073 -0
  355. sage/rings/real_mpfi.cpython-311-x86_64-linux-gnu.so +0 -0
  356. sage/rings/real_mpfi.pyx +5428 -0
  357. sage/schemes/all__sagemath_flint.py +1 -0
  358. sage/schemes/elliptic_curves/all__sagemath_flint.py +1 -0
  359. sage/schemes/elliptic_curves/descent_two_isogeny.cpython-311-x86_64-linux-gnu.so +0 -0
  360. sage/schemes/elliptic_curves/descent_two_isogeny.pyx +1387 -0
  361. sage/schemes/elliptic_curves/descent_two_isogeny_pari.pxd +5 -0
@@ -0,0 +1,1073 @@
1
+ # sage_setup: distribution = sagemath-flint
2
+ # sage.doctest: # needs sage.symbolic
3
+ """
4
+ Real intervals with a fixed absolute precision
5
+ """
6
+
7
+ from sage.ext.stdsage cimport PY_NEW
8
+
9
+ from sage.libs.gmp.mpz cimport *
10
+
11
+ from sage.structure.factory import UniqueFactory
12
+ from sage.structure.element cimport Element, FieldElement
13
+ from sage.rings.ring cimport Field
14
+ from sage.rings.integer cimport Integer
15
+ import sage.rings.abc
16
+
17
+ from sage.structure.parent cimport Parent
18
+ from sage.structure.element cimport parent as parent_of
19
+
20
+ from sage.rings.real_mpfr import RR_min_prec
21
+ from sage.rings.real_mpfi import RealIntervalField, RealIntervalFieldElement
22
+ from sage.rings.rational_field import QQ
23
+
24
+ cdef Integer zero = Integer(0)
25
+ cdef Integer one = Integer(1)
26
+
27
+ cpdef inline Integer shift_floor(Integer x, long shift):
28
+ r"""
29
+ Return `x / 2^s` where `s` is the value of ``shift``, rounded towards
30
+ `-\infty`. For internal use.
31
+
32
+ EXAMPLES::
33
+
34
+ sage: from sage.rings.real_interval_absolute import shift_floor
35
+ sage: shift_floor(15, 2)
36
+ 3
37
+ sage: shift_floor(-15, 2)
38
+ -4
39
+ """
40
+ cdef Integer z = PY_NEW(Integer)
41
+ mpz_fdiv_q_2exp(z.value, x.value, shift)
42
+ return z
43
+
44
+ cpdef inline Integer shift_ceil(Integer x, long shift):
45
+ r"""
46
+ Return `x / 2^s` where `s` is the value of ``shift``, rounded towards
47
+ `+\infty`. For internal use.
48
+
49
+ EXAMPLES::
50
+
51
+ sage: from sage.rings.real_interval_absolute import shift_ceil
52
+ sage: shift_ceil(15, 2)
53
+ 4
54
+ sage: shift_ceil(-15, 2)
55
+ -3
56
+ sage: shift_ceil(32, 2)
57
+ 8
58
+ sage: shift_ceil(-32, 2)
59
+ -8
60
+ """
61
+ cdef Integer z = PY_NEW(Integer)
62
+ mpz_cdiv_q_2exp(z.value, x.value, shift)
63
+ return z
64
+
65
+
66
+ class Factory(UniqueFactory):
67
+ def create_key(self, prec):
68
+ """
69
+ The only piece of data is the precision.
70
+
71
+ TESTS::
72
+
73
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
74
+ sage: RealIntervalAbsoluteField.create_key(1000)
75
+ 1000
76
+ """
77
+ return prec
78
+
79
+ def create_object(self, version, prec):
80
+ """
81
+ Ensures uniqueness.
82
+
83
+ TESTS::
84
+
85
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
86
+ sage: RealIntervalAbsoluteField(23) is RealIntervalAbsoluteField(23) # indirect doctest
87
+ True
88
+ """
89
+ return RealIntervalAbsoluteField_class(prec)
90
+
91
+
92
+ RealIntervalAbsoluteField = Factory('sage.rings.real_interval_absolute.RealIntervalAbsoluteField')
93
+ RealIntervalAbsoluteField.__doc__ = RealIntervalAbsoluteField_class.__doc__
94
+
95
+
96
+ cdef class RealIntervalAbsoluteField_class(Field):
97
+ """
98
+ This field is similar to the :class:`RealIntervalField` except instead of
99
+ truncating everything to a fixed relative precision, it maintains a
100
+ fixed absolute precision.
101
+
102
+ Note that unlike the standard real interval field, elements in this
103
+ field can have different size and experience coefficient blowup. On
104
+ the other hand, it avoids precision loss on addition and subtraction.
105
+ This is useful for, e.g., series computations for special functions.
106
+
107
+ EXAMPLES::
108
+
109
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
110
+ sage: R = RealIntervalAbsoluteField(10); R
111
+ Real Interval Field with absolute precision 2^-10
112
+ sage: R(3/10)
113
+ 0.300?
114
+ sage: R(1000003/10)
115
+ 100000.300?
116
+ sage: R(1e100) + R(1) - R(1e100)
117
+ 1
118
+ """
119
+
120
+ cdef long _absprec
121
+
122
+ def __init__(self, absprec):
123
+ """
124
+ Initialize ``self``.
125
+
126
+ EXAMPLES::
127
+
128
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
129
+ sage: RealIntervalAbsoluteField(100)
130
+ Real Interval Field with absolute precision 2^-100
131
+ sage: RealIntervalAbsoluteField(-100)
132
+ Traceback (most recent call last):
133
+ File "<ipython console>", line 1, in <module>
134
+ File "real_interval_absolute.pyx", line 81, in sage.rings.real_interval_absolute.RealIntervalAbsoluteField.__init__ (sage/rings/real_interval_absolute.c:2463)
135
+ ValueError: Absolute precision must be positive.
136
+ """
137
+ if absprec < 0:
138
+ raise ValueError("Absolute precision must be positive.")
139
+ Field.__init__(self, self)
140
+ self._absprec = absprec
141
+
142
+ def __reduce__(self):
143
+ """
144
+ Used for pickling.
145
+
146
+ TESTS::
147
+
148
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
149
+ sage: R = RealIntervalAbsoluteField(100)
150
+ sage: loads(dumps(R))
151
+ Real Interval Field with absolute precision 2^-100
152
+ """
153
+ return RealIntervalAbsoluteField, (self._absprec,)
154
+
155
+ def _element_constructor_(self, x):
156
+ """
157
+ Construct an element with ``self`` as the parent.
158
+
159
+ TESTS::
160
+
161
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
162
+ sage: R = RealIntervalAbsoluteField(100)
163
+ sage: R(1/2) # indirect doctest
164
+ 0.50000000000000000000000000000000?
165
+ """
166
+ return RealIntervalAbsoluteElement(self, x)
167
+
168
+ cpdef _coerce_map_from_(self, R):
169
+ """
170
+ Anything that coerces into the reals coerces into this ring.
171
+
172
+ TESTS::
173
+
174
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
175
+ sage: R = RealIntervalAbsoluteField(100)
176
+ sage: R.has_coerce_map_from(RR) # indirect doctest
177
+ True
178
+ sage: R.has_coerce_map_from(QQ)
179
+ True
180
+ sage: R.has_coerce_map_from(Qp(5)) # needs sage.rings.padics
181
+ False
182
+
183
+ sage: R(1/2) + 100
184
+ 100.5000000000000000000000000000000?
185
+ sage: R(1/2) + 1.75
186
+ 2.2500000000000000000000000000000?
187
+
188
+ sage: R10 = RealIntervalAbsoluteField(10)
189
+ sage: R10(1/4) + R(1/4)
190
+ 0.50000?
191
+ """
192
+ if isinstance(R, RealIntervalAbsoluteField_class):
193
+ return self._absprec < (<RealIntervalAbsoluteField_class>R)._absprec
194
+ elif isinstance(R, sage.rings.abc.RealIntervalField):
195
+ return True
196
+ else:
197
+ return RR_min_prec.has_coerce_map_from(R)
198
+
199
+ def _repr_(self):
200
+ """
201
+ Return the string representation of ``self``.
202
+
203
+ TESTS::
204
+
205
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
206
+ sage: R = RealIntervalAbsoluteField(100)
207
+ sage: print(R)
208
+ Real Interval Field with absolute precision 2^-100
209
+ sage: R._repr_()
210
+ 'Real Interval Field with absolute precision 2^-100'
211
+ """
212
+ return "Real Interval Field with absolute precision 2^-%s" % self._absprec
213
+
214
+ def absprec(self):
215
+ """
216
+ Return the absolute precision of ``self``.
217
+
218
+ EXAMPLES::
219
+
220
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
221
+ sage: R = RealIntervalAbsoluteField(100)
222
+ sage: R.absprec()
223
+ 100
224
+ sage: RealIntervalAbsoluteField(5).absprec()
225
+ 5
226
+ """
227
+ return self._absprec
228
+
229
+
230
+ cdef inline shift_left(value, shift):
231
+ """
232
+ Utility function for operands that don't support the ``<<`` operator.
233
+ """
234
+ try:
235
+ return value << shift
236
+ except TypeError:
237
+ if isinstance(value, (str, list, tuple)):
238
+ # Better than the OverflowError we would get from trying to multiply.
239
+ raise
240
+ else:
241
+ return value * (one << shift)
242
+
243
+ cdef class RealIntervalAbsoluteElement(FieldElement):
244
+
245
+ # This could be optimized by letting these be raw mpz_t.
246
+ cdef Integer _mantissa # left endpoint
247
+ cdef Integer _diameter
248
+
249
+ def __init__(self, RealIntervalAbsoluteField_class parent, value):
250
+ """
251
+ Create a :class:`RealIntervalAbsoluteElement`.
252
+
253
+ EXAMPLES::
254
+
255
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
256
+ sage: R = RealIntervalAbsoluteField(50)
257
+ sage: R(1)
258
+ 1
259
+ sage: R(1/3)
260
+ 0.333333333333334?
261
+ sage: R(1.3)
262
+ 1.300000000000000?
263
+ sage: R(pi)
264
+ 3.141592653589794?
265
+ sage: R((11, 12))
266
+ 12.?
267
+ sage: R((11, 11.00001))
268
+ 11.00001?
269
+
270
+ sage: R100 = RealIntervalAbsoluteField(100)
271
+ sage: R(R100((5,6)))
272
+ 6.?
273
+ sage: R100(R((5,6)))
274
+ 6.?
275
+ sage: RIF(CIF(NaN))
276
+ [.. NaN ..]
277
+ """
278
+ Element.__init__(self, parent)
279
+
280
+ if isinstance(value, RealIntervalAbsoluteElement):
281
+ prec_diff = (<RealIntervalAbsoluteField_class>(<Element>value)._parent)._absprec - parent._absprec
282
+ if prec_diff > 0:
283
+ self._mantissa = shift_floor((<RealIntervalAbsoluteElement>value)._mantissa, prec_diff)
284
+ self._diameter = shift_ceil((<RealIntervalAbsoluteElement>value)._diameter, prec_diff)
285
+ else:
286
+ self._mantissa = (<RealIntervalAbsoluteElement>value)._mantissa << -prec_diff
287
+ self._diameter = (<RealIntervalAbsoluteElement>value)._diameter << -prec_diff
288
+ return
289
+
290
+ if isinstance(value, tuple):
291
+ value, upper = value
292
+ elif isinstance(value, RealIntervalFieldElement):
293
+ value, upper = value.lower(), value.upper()
294
+ else:
295
+ upper = None
296
+ value = shift_left(value, parent._absprec)
297
+ if upper is not None:
298
+ upper = shift_left(upper, parent._absprec)
299
+ else:
300
+ upper = value
301
+ from sage.functions.other import floor, ceil
302
+ try:
303
+ self._mantissa = floor(value)
304
+ self._diameter = ceil(upper) - self._mantissa
305
+ except OverflowError:
306
+ raise TypeError(type(value))
307
+
308
+ def __reduce__(self):
309
+ """
310
+ Used for pickling.
311
+
312
+ EXAMPLES::
313
+
314
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
315
+ sage: R = RealIntervalAbsoluteField(50)
316
+ sage: loads(dumps(R(1/16)))
317
+ 0.06250000000000000?
318
+ sage: R = RealIntervalAbsoluteField(100)
319
+ sage: loads(dumps(R(1/3)))
320
+ 0.333333333333333333333333333334?
321
+ sage: loads(dumps(R(pi))).endpoints() == R(pi).endpoints()
322
+ True
323
+ """
324
+ return RealIntervalAbsoluteElement, (self._parent, self.endpoints())
325
+
326
+ cdef _new_c(self, Integer _mantissa, Integer _diameter):
327
+ cdef RealIntervalAbsoluteElement x
328
+ x = <RealIntervalAbsoluteElement>RealIntervalAbsoluteElement.__new__(RealIntervalAbsoluteElement)
329
+ x._parent = self._parent
330
+ x._mantissa = _mantissa
331
+ x._diameter = _diameter
332
+ return x
333
+
334
+ cpdef lower(self):
335
+ """
336
+ Return the lower bound of ``self``.
337
+
338
+ EXAMPLES::
339
+
340
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
341
+ sage: R = RealIntervalAbsoluteField(50)
342
+ sage: R(1/4).lower()
343
+ 1/4
344
+ """
345
+ return QQ(self._mantissa) >> (<RealIntervalAbsoluteField_class>self._parent)._absprec
346
+
347
+ cpdef midpoint(self):
348
+ """
349
+ Return the midpoint of ``self``.
350
+
351
+ EXAMPLES::
352
+
353
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
354
+ sage: R = RealIntervalAbsoluteField(100)
355
+ sage: R(1/4).midpoint()
356
+ 1/4
357
+ sage: R(pi).midpoint()
358
+ 7964883625991394727376702227905/2535301200456458802993406410752
359
+ sage: R(pi).midpoint().n()
360
+ 3.14159265358979
361
+ """
362
+ return (self._mantissa + self._diameter / 2) >> (<RealIntervalAbsoluteField_class>self._parent)._absprec
363
+
364
+ cpdef upper(self):
365
+ """
366
+ Return the upper bound of ``self``.
367
+
368
+ EXAMPLES::
369
+
370
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
371
+ sage: R = RealIntervalAbsoluteField(50)
372
+ sage: R(1/4).upper()
373
+ 1/4
374
+ """
375
+ return QQ(self._mantissa + self._diameter) >> (<RealIntervalAbsoluteField_class>self._parent)._absprec
376
+
377
+ cpdef absolute_diameter(self):
378
+ """
379
+ Return the diameter ``self``.
380
+
381
+ EXAMPLES::
382
+
383
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
384
+ sage: R = RealIntervalAbsoluteField(10)
385
+ sage: R(1/4).absolute_diameter()
386
+ 0
387
+ sage: a = R(pi)
388
+ sage: a.absolute_diameter()
389
+ 1/1024
390
+ sage: a.upper() - a.lower()
391
+ 1/1024
392
+ """
393
+ return QQ(self._diameter) >> (<RealIntervalAbsoluteField_class>self._parent)._absprec
394
+
395
+ diameter = absolute_diameter
396
+
397
+ cpdef endpoints(self):
398
+ """
399
+ Return the left and right endpoints of ``self``, as a tuple.
400
+
401
+ EXAMPLES::
402
+
403
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
404
+ sage: R = RealIntervalAbsoluteField(10)
405
+ sage: R(1/4).endpoints()
406
+ (1/4, 1/4)
407
+ sage: R((1,2)).endpoints()
408
+ (1, 2)
409
+ """
410
+ return self.lower(), self.upper()
411
+
412
+ def _real_mpfi_(self, R):
413
+ """
414
+ Create a (relative) real interval out of this absolute real interval.
415
+
416
+ EXAMPLES::
417
+
418
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
419
+ sage: R = RealIntervalAbsoluteField(10)
420
+ sage: R(1/2)._real_mpfi_(RIF)
421
+ 0.50000000000000000?
422
+
423
+ sage: a = RealIntervalAbsoluteField(100)(1/3)
424
+ sage: RIF(a)
425
+ 0.3333333333333334?
426
+ """
427
+ return R(self._mantissa, self._mantissa + self._diameter) >> (<RealIntervalAbsoluteField_class>self._parent)._absprec
428
+
429
+ cpdef long mpfi_prec(self) noexcept:
430
+ """
431
+ Return the precision needed to represent this value as an mpfi interval.
432
+
433
+ EXAMPLES::
434
+
435
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
436
+ sage: R = RealIntervalAbsoluteField(10)
437
+ sage: R(10).mpfi_prec()
438
+ 14
439
+ sage: R(1000).mpfi_prec()
440
+ 20
441
+ """
442
+ return max(mpz_sizeinbase(self._mantissa.value, 2), mpz_sizeinbase(self._diameter.value, 2))
443
+
444
+ def _repr_(self):
445
+ """
446
+ Leverage real interval printing.
447
+
448
+ TESTS::
449
+
450
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
451
+ sage: R = RealIntervalAbsoluteField(10)
452
+ sage: R(1/3) # indirect doctest
453
+ 0.334?
454
+ sage: R(10^50/3)
455
+ 3.3333333333333333333333333333333333333333333333333334?e49
456
+ sage: R(0)
457
+ 0
458
+ """
459
+ prec = max(self.mpfi_prec(), 5)
460
+ return repr(self._real_mpfi_(RealIntervalField(prec)))
461
+
462
+ def __hash__(self):
463
+ """
464
+ Hash to the midpoint of the interval.
465
+
466
+ TESTS::
467
+
468
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
469
+ sage: R = RealIntervalAbsoluteField(10)
470
+ sage: hash(R(10))
471
+ 10
472
+ sage: hash(R((11,13)))
473
+ 12
474
+ sage: hash(R(1/4)) == hash(1/4)
475
+ True
476
+ sage: hash(R(pi))
477
+ 891658780 # 32-bit
478
+ 532995478001132060 # 64-bit
479
+ """
480
+ return hash(self.midpoint())
481
+
482
+ def __contains__(self, x):
483
+ """
484
+ Return whether the given value lies in this interval.
485
+
486
+ EXAMPLES::
487
+
488
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
489
+ sage: R = RealIntervalAbsoluteField(50)
490
+ sage: 1 in R((1,2))
491
+ True
492
+ sage: 2 in R((1,2))
493
+ True
494
+ sage: 3 in R((1,2))
495
+ False
496
+ sage: 1.75 in R((1,2))
497
+ True
498
+ """
499
+ x *= (one << self._parent.absprec())
500
+ return self._mantissa <= x <= self._mantissa + self._diameter
501
+
502
+ cpdef bint is_positive(self) noexcept:
503
+ """
504
+ Return whether ``self`` is definitely positive.
505
+
506
+ EXAMPLES::
507
+
508
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
509
+ sage: R = RealIntervalAbsoluteField(10)
510
+ sage: R(10).is_positive()
511
+ True
512
+ sage: R((10,11)).is_positive()
513
+ True
514
+ sage: R((0,11)).is_positive()
515
+ False
516
+ sage: R((-10,11)).is_positive()
517
+ False
518
+ sage: R((-10,-1)).is_positive()
519
+ False
520
+ sage: R(pi).is_positive()
521
+ True
522
+ """
523
+ return mpz_sgn(self._mantissa.value) == 1
524
+
525
+ cpdef bint contains_zero(self) noexcept:
526
+ """
527
+ Return whether ``self`` contains zero.
528
+
529
+ EXAMPLES::
530
+
531
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
532
+ sage: R = RealIntervalAbsoluteField(10)
533
+ sage: R(10).contains_zero()
534
+ False
535
+ sage: R((10,11)).contains_zero()
536
+ False
537
+ sage: R((0,11)).contains_zero()
538
+ True
539
+ sage: R((-10,11)).contains_zero()
540
+ True
541
+ sage: R((-10,-1)).contains_zero()
542
+ False
543
+ sage: R((-10,0)).contains_zero()
544
+ True
545
+ sage: R(pi).contains_zero()
546
+ False
547
+ """
548
+ return (mpz_sgn(self._mantissa.value) == 0
549
+ or (mpz_sgn(self._mantissa.value) == -1 and mpz_cmpabs(self._mantissa.value, self._diameter.value) <= 0))
550
+
551
+ cpdef bint is_negative(self) noexcept:
552
+ """
553
+ Return whether ``self`` is definitely negative.
554
+
555
+ EXAMPLES::
556
+
557
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
558
+ sage: R = RealIntervalAbsoluteField(100)
559
+ sage: R(10).is_negative()
560
+ False
561
+ sage: R((10,11)).is_negative()
562
+ False
563
+ sage: R((0,11)).is_negative()
564
+ False
565
+ sage: R((-10,11)).is_negative()
566
+ False
567
+ sage: R((-10,-1)).is_negative()
568
+ True
569
+ sage: R(pi).is_negative()
570
+ False
571
+ """
572
+ return (mpz_sgn(self._mantissa.value) == -1
573
+ and mpz_cmpabs(self._mantissa.value, self._diameter.value) > 0)
574
+
575
+ cdef bint is_exact(self) noexcept:
576
+ return not self._diameter
577
+
578
+ def __bool__(self):
579
+ """
580
+ Return ``True`` for anything except exact zero.
581
+
582
+ EXAMPLES::
583
+
584
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
585
+ sage: R = RealIntervalAbsoluteField(10)
586
+ sage: bool(R(1))
587
+ True
588
+ sage: bool(R(0))
589
+ False
590
+ sage: bool(R((0,1)))
591
+ True
592
+ """
593
+ return not not self._mantissa or not not self._diameter
594
+
595
+ def __neg__(self):
596
+ """
597
+ TESTS::
598
+
599
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
600
+ sage: R = RealIntervalAbsoluteField(100)
601
+ sage: -R(1/2)
602
+ -0.50000000000000000000000000000000?
603
+ sage: -R((101,102))
604
+ -102.?
605
+ """
606
+ return self._new_c(-self._mantissa - self._diameter, self._diameter)
607
+
608
+ def __abs__(self):
609
+ """
610
+ EXAMPLES::
611
+
612
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
613
+ sage: R = RealIntervalAbsoluteField(100)
614
+ sage: abs(-R(1/4))
615
+ 0.2500000000000000000000000000000?
616
+ """
617
+ return self.abs()
618
+
619
+ cpdef abs(self):
620
+ """
621
+ Return the absolute value of ``self``.
622
+
623
+ EXAMPLES::
624
+
625
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
626
+ sage: R = RealIntervalAbsoluteField(100)
627
+ sage: R(1/3).abs()
628
+ 0.333333333333333333333333333334?
629
+ sage: R(-1/3).abs()
630
+ 0.333333333333333333333333333334?
631
+ sage: R((-1/3, 1/2)).abs()
632
+ 1.?
633
+ sage: R((-1/3, 1/2)).abs().endpoints()
634
+ (0, 1/2)
635
+ sage: R((-3/2, 1/2)).abs().endpoints()
636
+ (0, 3/2)
637
+ """
638
+ if self.is_positive():
639
+ return self
640
+ elif self.is_negative():
641
+ return -self
642
+ else:
643
+ return self._new_c(zero, max(-self._mantissa, self._mantissa + self._diameter))
644
+
645
+ cpdef _add_(self, _other):
646
+ """
647
+ TESTS::
648
+
649
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
650
+ sage: R = RealIntervalAbsoluteField(10)
651
+ sage: R(1) + R(2) # indirect doctest
652
+ 3
653
+ sage: R(1e100) + R(0.1) + R(-1e100)
654
+ 0.100?
655
+ sage: (R((1,2)) + 1).endpoints()
656
+ (2, 3)
657
+ sage: (R((1,2)) + R((-10,0))).endpoints()
658
+ (-9, 2)
659
+ """
660
+ cdef RealIntervalAbsoluteElement other = <RealIntervalAbsoluteElement>_other
661
+ return self._new_c(self._mantissa + other._mantissa, self._diameter + other._diameter)
662
+
663
+ cpdef _sub_(self, _other):
664
+ """
665
+ TESTS::
666
+
667
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
668
+ sage: R = RealIntervalAbsoluteField(10)
669
+ sage: R(1) - R(2) # indirect doctest
670
+ -1
671
+ sage: R(1e100) - R(0.1) - R(1e100)
672
+ -0.100?
673
+ sage: (R((1,2)) - 1).endpoints()
674
+ (0, 1)
675
+ sage: (R((1,2)) - R((10,100))).endpoints()
676
+ (-99, -8)
677
+ sage: R(pi) - R(pi)
678
+ 0.000?
679
+ """
680
+ cdef RealIntervalAbsoluteElement other = <RealIntervalAbsoluteElement>_other
681
+ return self._new_c(self._mantissa - other._mantissa - other._diameter, self._diameter + other._diameter)
682
+
683
+ cpdef _mul_(self, _other):
684
+ """
685
+ TESTS::
686
+
687
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
688
+ sage: R = RealIntervalAbsoluteField(10)
689
+ sage: R(2) * R(3) # indirect doctest
690
+ 6
691
+ sage: R(2) * R(-3)
692
+ -6
693
+ sage: elts = [R((left, right)) for left in [-2..2] for right in [left+1..2]]
694
+ sage: elts
695
+ [-2.?, -1.?, 0.?e1, 0.?e1, -1.?, 0.?, 0.?e1, 1.?, 1.?, 2.?]
696
+ sage: for a in elts:
697
+ ....: for b in elts:
698
+ ....: if (a*b).lower() != (a._real_mpfi_(RIF)*b._real_mpfi_(RIF)).lower():
699
+ ....: print(a, b)
700
+ ....: if (a*b).upper() != (a._real_mpfi_(RIF)*b._real_mpfi_(RIF)).upper():
701
+ ....: print(a, b)
702
+ sage: R(pi) * R(pi) - R(pi^2)
703
+ 0.00?
704
+ """
705
+ cdef bint negate = False
706
+ cdef RealIntervalAbsoluteElement other = <RealIntervalAbsoluteElement>_other
707
+ cdef long absprec = (<RealIntervalAbsoluteField_class>self._parent)._absprec
708
+
709
+ # Break symmetry.
710
+ if self.is_negative():
711
+ negate = not negate
712
+ self = -self
713
+ if other.is_negative():
714
+ negate = not negate
715
+ other = -other
716
+ elif other.contains_zero():
717
+ self, other = other, self
718
+
719
+ if self.is_positive():
720
+ if other.is_positive():
721
+ res = self._new_c(shift_floor(self._mantissa * other._mantissa, absprec),
722
+ shift_ceil(self._mantissa * other._diameter + (other._mantissa + other._diameter) * self._diameter, absprec))
723
+ else:
724
+ res = self._new_c(shift_floor((self._mantissa + self._diameter) * other._mantissa, absprec),
725
+ shift_ceil((self._mantissa + self._diameter) * other._diameter, absprec))
726
+ else:
727
+ # They both contain zero.
728
+ self_lower, self_upper = self._mantissa, self._mantissa + self._diameter
729
+ other_lower, other_upper = other._mantissa, other._mantissa + other._diameter
730
+ lower = min(self_lower * other_upper, self_upper * other_lower)
731
+ upper = max(self_lower * other_lower, self_upper * other_upper)
732
+ res = self._new_c(shift_floor(lower, absprec),
733
+ shift_ceil(upper - lower, absprec))
734
+ if negate:
735
+ res = -res
736
+ return res
737
+
738
+ cpdef _acted_upon_(self, x, bint self_on_left):
739
+ """
740
+ ``Absprec * relprec -> absprec`` works better than coercing both
741
+ operands to absolute precision first.
742
+
743
+ EXAMPLES::
744
+
745
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
746
+ sage: R = RealIntervalAbsoluteField(4)
747
+ sage: 1/4 * R(100)
748
+ 25
749
+ sage: 1/100 * R(100)
750
+ 1
751
+ sage: R(1/100) * R(100)
752
+ 1.?e1
753
+ sage: RIF(1/100) * R(100)
754
+ 1.0?
755
+
756
+ sage: R(1.5)._acted_upon_(3, True)
757
+ 4.500?
758
+ """
759
+ if x < 0:
760
+ neg = self._acted_upon_(-x, self_on_left)
761
+ return None if neg is None else -neg
762
+ if type(x) in (int, Integer):
763
+ return self._new_c(self._mantissa * x, self._diameter * x)
764
+ P = parent_of(x)
765
+ if isinstance(P, Parent):
766
+ if P.is_exact():
767
+ left = (self._mantissa * x).floor()
768
+ right = ((self._mantissa + self._diameter) * x).ceil()
769
+ return self._new_c(left, right - left)
770
+ elif isinstance(x, RealIntervalFieldElement):
771
+ if x.contains_zero() or self.contains_zero():
772
+ return self * RealIntervalAbsoluteElement(self._parent, (x.lower(), x.upper()))
773
+ # Remember, x > 0
774
+ if self.is_positive():
775
+ left = (self._mantissa * x.lower()).floor()
776
+ right = ((self._mantissa + self._diameter) * x.upper()).ceil()
777
+ else:
778
+ left = (self._mantissa * x.upper()).floor()
779
+ right = ((self._mantissa + self._diameter) * x.lower()).ceil()
780
+ return self._new_c(left, right - left)
781
+
782
+ def __invert__(self):
783
+ """
784
+ EXAMPLES::
785
+
786
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
787
+ sage: R = RealIntervalAbsoluteField(10)
788
+ sage: ~R(2)
789
+ 0.50000?
790
+ sage: ~~R(2)
791
+ 2
792
+ sage: ~R(3)
793
+ 0.334?
794
+ sage: ~~R(3)
795
+ 3.00?
796
+
797
+ sage: R = RealIntervalAbsoluteField(200)
798
+ sage: ~R(1e10)
799
+ 1.00000000000000000000000000000000000000000000000000?e-10
800
+ sage: ~~R(1e10)
801
+ 1.00000000000000000000000000000000000000000000000000?e10
802
+ sage: (~R((1,2))).endpoints()
803
+ (1/2, 1)
804
+ sage: (~R((1/4,8))).endpoints()
805
+ (1/8, 4)
806
+ sage: R(1/pi) - 1/R(pi)
807
+ 0.?e-60
808
+ """
809
+ if self.contains_zero():
810
+ raise ZeroDivisionError("Inversion of an interval containing zero.")
811
+ cdef long absprec = (<RealIntervalAbsoluteField_class>self._parent)._absprec
812
+ cdef bint negate
813
+ if self.is_negative():
814
+ self = -self
815
+ negate = True
816
+ else:
817
+ negate = False
818
+
819
+ # Let our (positive) interval be [2^-B a, 2^-B b].
820
+ # Then its inverse is [2^-B 2^(2B)/b , 2^-B 2^(2B)/a].
821
+
822
+ cdef Integer mantissa = <Integer>PY_NEW(Integer)
823
+ cdef Integer diameter = <Integer>PY_NEW(Integer)
824
+ cdef mpz_t scaling_factor
825
+ mpz_init_set_ui(scaling_factor, 1)
826
+ try:
827
+ mpz_set_ui(scaling_factor, 1)
828
+ mpz_mul_2exp(scaling_factor, scaling_factor, 2 * absprec)
829
+ # Use diameter as temp value for right endpoint...
830
+ mpz_add(diameter.value, self._mantissa.value, self._diameter.value)
831
+ mpz_fdiv_q(mantissa.value, scaling_factor, diameter.value)
832
+ # Divide a second time to get the rounding correct...
833
+ mpz_cdiv_q(diameter.value, scaling_factor, self._mantissa.value)
834
+ mpz_sub(diameter.value, diameter.value, mantissa.value)
835
+ finally:
836
+ mpz_clear(scaling_factor)
837
+
838
+ res = self._new_c(mantissa, diameter)
839
+ if negate:
840
+ res = -res
841
+ return res
842
+
843
+ cpdef _div_(self, _other):
844
+ """
845
+ TESTS::
846
+
847
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
848
+ sage: R = RealIntervalAbsoluteField(10)
849
+ sage: R(5)/R(2) # indirect doctest
850
+ 2.5000?
851
+ sage: a = R((5,6))/R((2,4))
852
+ sage: a.endpoints()
853
+ (5/4, 3)
854
+ sage: a = R((-5,6))/R((2,4))
855
+ sage: a.endpoints()
856
+ (-5/2, 3)
857
+ sage: R(1e100) / R(2e100)
858
+ 0.50000?
859
+ """
860
+ cdef RealIntervalAbsoluteElement other = <RealIntervalAbsoluteElement>_other
861
+ if other.contains_zero():
862
+ raise ZeroDivisionError("Division by an interval containing zero.")
863
+
864
+ cdef Integer mantissa = <Integer>PY_NEW(Integer)
865
+ cdef Integer diameter = <Integer>PY_NEW(Integer)
866
+ cdef long absprec = (<RealIntervalAbsoluteField_class>self._parent)._absprec
867
+ cdef bint negate = False
868
+ cdef mpz_t temp
869
+ mpz_init(temp)
870
+
871
+ try:
872
+
873
+ if self.is_negative():
874
+ negate = True
875
+ self = -self
876
+
877
+ mpz_mul_2exp(mantissa.value, self._mantissa.value, absprec)
878
+ if self.contains_zero():
879
+ mpz_fdiv_q(mantissa.value, mantissa.value, other._mantissa.value)
880
+ else:
881
+ mpz_add(temp, other._mantissa.value, other._diameter.value)
882
+ mpz_fdiv_q(mantissa.value, mantissa.value, temp)
883
+
884
+ mpz_add(temp, self._mantissa.value, self._diameter.value)
885
+ mpz_mul_2exp(diameter.value, temp, absprec)
886
+ mpz_cdiv_q(diameter.value, diameter.value, other._mantissa.value)
887
+ mpz_sub(diameter.value, diameter.value, mantissa.value)
888
+
889
+ finally:
890
+ mpz_clear(temp)
891
+
892
+ res = self._new_c(mantissa, diameter)
893
+ if negate:
894
+ res = -res
895
+ return res
896
+
897
+ def __lshift__(RealIntervalAbsoluteElement self, long n):
898
+ """
899
+ EXAMPLES::
900
+
901
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
902
+ sage: R = RealIntervalAbsoluteField(10)
903
+ sage: R(1) << 2
904
+ 4
905
+ sage: R(3) << -2
906
+ 0.75000?
907
+ sage: (R((1/2, 5)) << 10).endpoints()
908
+ (512, 5120)
909
+ """
910
+ return self.shift(n)
911
+
912
+ def __rshift__(RealIntervalAbsoluteElement self, long n):
913
+ """
914
+ EXAMPLES::
915
+
916
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
917
+ sage: R = RealIntervalAbsoluteField(10)
918
+ sage: R(1) >> 2
919
+ 0.2500?
920
+ sage: R(3) >> -2
921
+ 12
922
+ sage: (R((1/2, 5)) >> 10).endpoints()
923
+ (0, 5/1024)
924
+ """
925
+ return self.shift(-n)
926
+
927
+ cdef shift(self, long n):
928
+ if n >= 0:
929
+ return self._new_c(self._mantissa << n, self._diameter << n)
930
+ else:
931
+ return self._new_c(shift_floor(self._mantissa, -n), shift_ceil(self._diameter, -n))
932
+
933
+ def __pow__(self, exponent, dummy):
934
+ """
935
+ EXAMPLES::
936
+
937
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
938
+ sage: R = RealIntervalAbsoluteField(10)
939
+ sage: R(10)^10
940
+ 10000000000
941
+ sage: R(10)^100
942
+ 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
943
+ sage: R(10)^-2
944
+ 0.010?
945
+ sage: R(10)^-10
946
+ 0.001?
947
+ sage: R(100)^(1/2)
948
+ 10.00?
949
+ sage: (R((2,3))^2).endpoints()
950
+ (4, 9)
951
+ sage: (R((-5,3))^3).endpoints()
952
+ (-125, 75)
953
+ sage: (R((-5,3))^4).endpoints()
954
+ (0, 625)
955
+ """
956
+ cdef RealIntervalAbsoluteElement base
957
+ try:
958
+ base = self
959
+ except TypeError:
960
+ base = exponent.parent()(self)
961
+ cdef RealIntervalAbsoluteField_class parent = self.parent()
962
+ if not base:
963
+ if not exponent:
964
+ raise ZeroDivisionError
965
+ else:
966
+ return base
967
+ import math
968
+ cdef double height
969
+ base_height = max(abs(base.lower()), abs(base.upper()))
970
+ height = math.log(base_height) / math.log(2)
971
+ height *= <double>(exponent.midpoint() if isinstance(exponent, RealIntervalAbsoluteElement) else exponent)
972
+ relprec = max(<long>height + parent._absprec, 10)
973
+ RIF = RealIntervalField(relprec)
974
+ if isinstance(exponent, RealIntervalAbsoluteElement):
975
+ exponent = exponent._real_mpfi_(RIF)
976
+ return parent(base._real_mpfi_(RIF)**exponent)
977
+
978
+ def __getattr__(self, name):
979
+ """
980
+ EXAMPLES::
981
+
982
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
983
+ sage: R = RealIntervalAbsoluteField(100)
984
+ sage: R(1).sin()
985
+ 0.841470984807896506652502321631?
986
+ sage: R(2).log()
987
+ 0.693147180559945309417232121458?
988
+ sage: R(1).exp().log()
989
+ 1.00000000000000000000000000000?
990
+
991
+ sage: R((0,10)).sin().endpoints()
992
+ (-1, 1)
993
+ sage: R(1).sin().parent()
994
+ Real Interval Field with absolute precision 2^-100
995
+ """
996
+ if name[0] != '_' and hasattr(RealIntervalFieldElement, name):
997
+ return MpfrOp(self, name)
998
+ else:
999
+ raise AttributeError(name)
1000
+
1001
+ def sqrt(self):
1002
+ """
1003
+ Return the square root of ``self``.
1004
+
1005
+ EXAMPLES::
1006
+
1007
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
1008
+ sage: R = RealIntervalAbsoluteField(100)
1009
+ sage: R(2).sqrt()
1010
+ 1.414213562373095048801688724210?
1011
+ sage: R((4,9)).sqrt().endpoints()
1012
+ (2, 3)
1013
+ """
1014
+ return self._parent(self._real_mpfi_(RealIntervalField(self.mpfi_prec())).sqrt())
1015
+
1016
+ cdef class MpfrOp:
1017
+ """
1018
+ This class is used to endow absolute real interval field elements with
1019
+ all the methods of (relative) real interval field elements.
1020
+
1021
+ EXAMPLES::
1022
+
1023
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField
1024
+ sage: R = RealIntervalAbsoluteField(100)
1025
+ sage: R(1).sin()
1026
+ 0.841470984807896506652502321631?
1027
+ """
1028
+ cdef object name
1029
+ cdef RealIntervalAbsoluteElement value
1030
+
1031
+ def __init__(self, value, name):
1032
+ """
1033
+ EXAMPLES::
1034
+
1035
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField, MpfrOp
1036
+ sage: R = RealIntervalAbsoluteField(100)
1037
+ sage: MpfrOp(R(1), 'tan')()
1038
+ 1.557407724654902230506974807459?
1039
+ """
1040
+ self.name = name
1041
+ self.value = value
1042
+
1043
+ def __call__(self, *args):
1044
+ """
1045
+ EXAMPLES::
1046
+
1047
+ sage: from sage.rings.real_interval_absolute import RealIntervalAbsoluteField, MpfrOp
1048
+ sage: R = RealIntervalAbsoluteField(100)
1049
+ sage: curried_log = MpfrOp(R(2), 'log')
1050
+ sage: curried_log()
1051
+ 0.693147180559945309417232121458?
1052
+ sage: curried_log(2)
1053
+ 1
1054
+ """
1055
+ cdef RealIntervalAbsoluteField_class parent = self.value._parent
1056
+ cdef long absprec = parent._absprec
1057
+ cdef long relprec = self.value.mpfi_prec()
1058
+ for a in args:
1059
+ if isinstance(a, RealIntervalAbsoluteElement):
1060
+ absprec = min(absprec, (<RealIntervalAbsoluteField_class>(<RealIntervalAbsoluteElement>a)._parent)._absprec)
1061
+ relprec = max(absprec, (<RealIntervalAbsoluteElement>a).mpfi_prec())
1062
+ if parent._absprec > absprec:
1063
+ parent = RealIntervalAbsoluteField(absprec)
1064
+ if relprec < 53:
1065
+ relprec = 53
1066
+ R = RealIntervalField(relprec)
1067
+ new_args = []
1068
+ for a in args:
1069
+ if isinstance(a, RealIntervalAbsoluteElement):
1070
+ new_args.append(a._real_mpfi_(R))
1071
+ else:
1072
+ new_args.append(a)
1073
+ return parent(getattr(self.value._real_mpfi_(R), self.name)(*new_args))