passagemath-flint 10.6.1rc10__cp312-cp312-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-312-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-312-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-312-aarch64-linux-gnu.so +0 -0
- sage/graphs/chrompoly.pyx +555 -0
- sage/graphs/matchpoly.cpython-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-aarch64-linux-gnu.so +0 -0
- sage/matrix/change_ring.pyx +43 -0
- sage/matrix/matrix_complex_ball_dense.cpython-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-aarch64-linux-gnu.so +0 -0
- sage/rings/factorint_flint.pyx +99 -0
- sage/rings/fraction_field_FpT.cpython-312-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-312-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-312-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-312-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-312-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-312-aarch64-linux-gnu.so +0 -0
- sage/rings/polynomial/hilbert.pyx +602 -0
- sage/rings/polynomial/polynomial_complex_arb.cpython-312-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-312-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-312-aarch64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_number_field.pyx +345 -0
- sage/rings/polynomial/polynomial_rational_flint.cpython-312-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-312-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-312-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-312-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-312-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-312-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-312-aarch64-linux-gnu.so +0 -0
- sage/rings/real_interval_absolute.pyx +1073 -0
- sage/rings/real_mpfi.cpython-312-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-312-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,242 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-flint
|
2
|
+
# sage.doctest: needs sage.libs.pari
|
3
|
+
r"""
|
4
|
+
Small primes of degree one
|
5
|
+
|
6
|
+
Iterator for finding several primes of absolute degree one of a number field of
|
7
|
+
*small* prime norm.
|
8
|
+
|
9
|
+
ALGORITHM:
|
10
|
+
|
11
|
+
Let `P` denote the product of some set of prime numbers. (In practice, we
|
12
|
+
use the product of the first 10000 primes, because Pari computes this many by
|
13
|
+
default.)
|
14
|
+
|
15
|
+
Let `K` be a number field and let `f(x)` be a polynomial defining `K` over the
|
16
|
+
rational field. Let `\alpha` be a root of `f` in `K`.
|
17
|
+
|
18
|
+
We know that `[ O_K : \ZZ[\alpha] ]^2 = | \Delta(f(x)) / \Delta(O_K) |`, where
|
19
|
+
`\Delta` denotes the discriminant (see, for example, Proposition 4.4.4, p165 of
|
20
|
+
[Coh1993]_). Therefore, after discarding primes dividing `\Delta(f(x))` (this
|
21
|
+
includes all ramified primes), any integer `n` such that `\gcd(f(n), P) > 0`
|
22
|
+
yields a prime `p | P` such that `f(x)` has a root modulo `p`. By the
|
23
|
+
condition on discriminants, this root is a single root. As is well known (see,
|
24
|
+
for example Theorem 4.8.13, p199 of [Coh1993]_), the ideal generated by `(p, \alpha -
|
25
|
+
n)` is prime and of degree one.
|
26
|
+
|
27
|
+
.. WARNING::
|
28
|
+
|
29
|
+
It is possible that there are no primes of `K` of absolute degree one of
|
30
|
+
small prime norm, and it is possible that this algorithm will not find
|
31
|
+
any primes of small norm.
|
32
|
+
|
33
|
+
.. TODO::
|
34
|
+
|
35
|
+
There are situations when this will fail. There are questions of finding
|
36
|
+
primes of relative degree one. There are questions of finding primes of exact
|
37
|
+
degree larger than one. In short, if you can contribute, please do!
|
38
|
+
|
39
|
+
EXAMPLES::
|
40
|
+
|
41
|
+
sage: x = ZZ['x'].gen()
|
42
|
+
sage: F.<a> = NumberField(x^2 - 2)
|
43
|
+
sage: Ps = F.primes_of_degree_one_list(3)
|
44
|
+
sage: Ps # random
|
45
|
+
[Fractional ideal (2*a + 1), Fractional ideal (-3*a + 1), Fractional ideal (-a + 5)]
|
46
|
+
sage: [ P.norm() for P in Ps ] # random
|
47
|
+
[7, 17, 23]
|
48
|
+
sage: all(ZZ(P.norm()).is_prime() for P in Ps)
|
49
|
+
True
|
50
|
+
sage: all(P.residue_class_degree() == 1 for P in Ps)
|
51
|
+
True
|
52
|
+
|
53
|
+
The next two examples are for relative number fields.::
|
54
|
+
|
55
|
+
sage: L.<b> = F.extension(x^3 - a)
|
56
|
+
sage: Ps = L.primes_of_degree_one_list(3)
|
57
|
+
sage: Ps # random
|
58
|
+
[Fractional ideal (17, b - 5), Fractional ideal (23, b - 4), Fractional ideal (31, b - 2)]
|
59
|
+
sage: [ P.absolute_norm() for P in Ps ] # random
|
60
|
+
[17, 23, 31]
|
61
|
+
sage: all(ZZ(P.absolute_norm()).is_prime() for P in Ps)
|
62
|
+
True
|
63
|
+
sage: all(P.residue_class_degree() == 1 for P in Ps)
|
64
|
+
True
|
65
|
+
sage: M.<c> = NumberField(x^2 - x*b^2 + b)
|
66
|
+
sage: Ps = M.primes_of_degree_one_list(3)
|
67
|
+
sage: Ps # random
|
68
|
+
[Fractional ideal (17, c - 2), Fractional ideal (c - 1), Fractional ideal (41, c + 15)]
|
69
|
+
sage: [ P.absolute_norm() for P in Ps ] # random
|
70
|
+
[17, 31, 41]
|
71
|
+
sage: all(ZZ(P.absolute_norm()).is_prime() for P in Ps)
|
72
|
+
True
|
73
|
+
sage: all(P.residue_class_degree() == 1 for P in Ps)
|
74
|
+
True
|
75
|
+
|
76
|
+
AUTHORS:
|
77
|
+
|
78
|
+
- Nick Alexander (2008): initial version
|
79
|
+
- David Loeffler (2009): fixed a bug with relative fields
|
80
|
+
- Maarten Derickx (2017): fixed a bug with number fields not generated by an integral element
|
81
|
+
"""
|
82
|
+
|
83
|
+
#*****************************************************************************
|
84
|
+
# Copyright (C) 2008 William Stein
|
85
|
+
#
|
86
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
87
|
+
#
|
88
|
+
# This code is distributed in the hope that it will be useful,
|
89
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
90
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
91
|
+
# General Public License for more details.
|
92
|
+
#
|
93
|
+
# The full text of the GPL is available at:
|
94
|
+
#
|
95
|
+
# http://www.gnu.org/licenses/
|
96
|
+
#*****************************************************************************
|
97
|
+
|
98
|
+
from sage.rings.integer_ring import ZZ
|
99
|
+
|
100
|
+
|
101
|
+
class Small_primes_of_degree_one_iter:
|
102
|
+
r"""
|
103
|
+
Iterator that finds primes of a number field of absolute degree
|
104
|
+
one and bounded small prime norm.
|
105
|
+
|
106
|
+
INPUT:
|
107
|
+
|
108
|
+
- ``field`` -- a :class:`NumberField`
|
109
|
+
|
110
|
+
- ``num_integer_primes`` -- integer (default: 10000); we try to find
|
111
|
+
primes of absolute norm no greater than the ``num_integer_primes``-th
|
112
|
+
prime number. For example, if ``num_integer_primes`` is 2, the largest
|
113
|
+
norm found will be 3, since the second prime is 3.
|
114
|
+
|
115
|
+
- ``max_iterations`` -- integer (default: 100); we test ``max_iterations``
|
116
|
+
integers to find small primes before raising :class:`StopIteration`
|
117
|
+
|
118
|
+
AUTHOR:
|
119
|
+
|
120
|
+
- Nick Alexander
|
121
|
+
"""
|
122
|
+
def __init__(self, field, num_integer_primes=10000, max_iterations=100):
|
123
|
+
r"""
|
124
|
+
Construct a new iterator of small degree one primes.
|
125
|
+
|
126
|
+
EXAMPLES::
|
127
|
+
|
128
|
+
sage: x = QQ['x'].gen()
|
129
|
+
sage: K.<a> = NumberField(x^2 - 3)
|
130
|
+
sage: K.primes_of_degree_one_list(3) # random
|
131
|
+
[Fractional ideal (2*a + 1), Fractional ideal (-a + 4), Fractional ideal (3*a + 2)]
|
132
|
+
"""
|
133
|
+
self._field = field
|
134
|
+
self._poly = self._field.absolute_field('b').defining_polynomial()
|
135
|
+
self._poly = ZZ['x'](self._poly.denominator() * self._poly()) # make integer polynomial
|
136
|
+
self._lc = self._poly.leading_coefficient()
|
137
|
+
|
138
|
+
# this uses that [ O_K : Z[a] ]^2 = | disc(f(x)) / disc(O_K) |
|
139
|
+
from sage.libs.pari import pari
|
140
|
+
self._prod_of_small_primes = ZZ(pari('TEMPn = %s; TEMPps = primes(TEMPn); prod(X = 1, TEMPn, TEMPps[X])' % num_integer_primes))
|
141
|
+
self._prod_of_small_primes //= self._prod_of_small_primes.gcd(self._poly.discriminant() * self._lc)
|
142
|
+
|
143
|
+
self._integer_iter = iter(ZZ)
|
144
|
+
self._queue = []
|
145
|
+
self._max_iterations = max_iterations
|
146
|
+
|
147
|
+
def __iter__(self):
|
148
|
+
r"""
|
149
|
+
Return ``self`` as an iterator.
|
150
|
+
|
151
|
+
EXAMPLES::
|
152
|
+
|
153
|
+
sage: x = QQ['x'].gen()
|
154
|
+
sage: K.<a> = NumberField(x^2 - 3)
|
155
|
+
sage: it = K.primes_of_degree_one_iter()
|
156
|
+
sage: iter(it) == it # indirect doctest
|
157
|
+
True
|
158
|
+
"""
|
159
|
+
return self
|
160
|
+
|
161
|
+
def _lengthen_queue(self):
|
162
|
+
r"""
|
163
|
+
Try to find more primes of absolute degree one of small prime
|
164
|
+
norm.
|
165
|
+
|
166
|
+
Checks \code{self._max_iterations} integers before failing.
|
167
|
+
|
168
|
+
WARNING:
|
169
|
+
|
170
|
+
Internal function. Not for external use!
|
171
|
+
|
172
|
+
EXAMPLES::
|
173
|
+
|
174
|
+
sage: x = QQ['x'].gen()
|
175
|
+
sage: K.<a> = NumberField(x^2 - 3)
|
176
|
+
sage: Ps = K.primes_of_degree_one_list(20, max_iterations=3) # indirect doctest
|
177
|
+
sage: len(Ps) == 20
|
178
|
+
True
|
179
|
+
"""
|
180
|
+
count = 0
|
181
|
+
while count < self._max_iterations:
|
182
|
+
n = next(self._integer_iter)
|
183
|
+
g = self._prod_of_small_primes.gcd(self._poly(n))
|
184
|
+
self._prod_of_small_primes //= g
|
185
|
+
self._queue = self._queue + [ (p, n) for p in g.prime_divisors() ]
|
186
|
+
count += 1
|
187
|
+
self._queue.sort() # sorts in ascending order
|
188
|
+
|
189
|
+
def __next__(self):
|
190
|
+
r"""
|
191
|
+
Return a prime of absolute degree one of small prime norm.
|
192
|
+
|
193
|
+
Raises ``StopIteration`` if such a prime cannot be easily found.
|
194
|
+
|
195
|
+
EXAMPLES::
|
196
|
+
|
197
|
+
sage: x = QQ['x'].gen()
|
198
|
+
sage: K.<a> = NumberField(x^2 - 3)
|
199
|
+
sage: it = K.primes_of_degree_one_iter()
|
200
|
+
sage: [ next(it) for i in range(3) ] # random
|
201
|
+
[Fractional ideal (2*a + 1), Fractional ideal (-a + 4), Fractional ideal (3*a + 2)]
|
202
|
+
|
203
|
+
TESTS:
|
204
|
+
|
205
|
+
We test that :issue:`6396` is fixed. Note that the doctest is
|
206
|
+
flagged as random since the string representation of ideals is
|
207
|
+
somewhat unpredictable::
|
208
|
+
|
209
|
+
sage: N.<a,b> = NumberField([x^2 + 1, x^2 - 5])
|
210
|
+
sage: ids = N.primes_of_degree_one_list(10); ids # random
|
211
|
+
[Fractional ideal ((-1/2*b + 1/2)*a + 2),
|
212
|
+
Fractional ideal (-b*a + 1/2*b + 1/2),
|
213
|
+
Fractional ideal ((1/2*b + 3/2)*a - b),
|
214
|
+
Fractional ideal ((-1/2*b - 3/2)*a + b - 1),
|
215
|
+
Fractional ideal (-b*a - b + 1),
|
216
|
+
Fractional ideal (3*a + 1/2*b - 1/2),
|
217
|
+
Fractional ideal ((-3/2*b + 1/2)*a + 1/2*b - 1/2),
|
218
|
+
Fractional ideal ((-1/2*b - 5/2)*a - b + 1),
|
219
|
+
Fractional ideal (2*a - 3/2*b - 1/2),
|
220
|
+
Fractional ideal (3*a + 1/2*b + 5/2)]
|
221
|
+
sage: [x.absolute_norm() for x in ids]
|
222
|
+
[29, 41, 61, 89, 101, 109, 149, 181, 229, 241]
|
223
|
+
sage: ids[9] == N.ideal(3*a + 1/2*b + 5/2)
|
224
|
+
True
|
225
|
+
|
226
|
+
We test that :issue:`23468` is fixed::
|
227
|
+
|
228
|
+
sage: R.<z> = QQ[]
|
229
|
+
sage: K.<y> = QQ.extension(25*z^2 + 26*z + 5)
|
230
|
+
sage: for p in K.primes_of_degree_one_list(10):
|
231
|
+
....: assert p.is_prime()
|
232
|
+
"""
|
233
|
+
if not self._queue:
|
234
|
+
self._lengthen_queue()
|
235
|
+
if not self._queue:
|
236
|
+
raise StopIteration
|
237
|
+
|
238
|
+
p, n = self._queue.pop(0)
|
239
|
+
x = self._field.absolute_generator()
|
240
|
+
return self._field.ideal([p, (x - n) * self._lc])
|
241
|
+
|
242
|
+
next = __next__
|