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