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