passagemath-flint 10.6.1rc10__cp312-cp312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- sage/graphs/chrompoly.pyx +555 -0
- sage/graphs/matchpoly.cpython-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- sage/matrix/change_ring.pyx +43 -0
- sage/matrix/matrix_complex_ball_dense.cpython-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- sage/rings/factorint_flint.pyx +99 -0
- sage/rings/fraction_field_FpT.cpython-312-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-312-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-312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/hilbert.pyx +602 -0
- sage/rings/polynomial/polynomial_complex_arb.cpython-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_number_field.pyx +345 -0
- sage/rings/polynomial/polynomial_rational_flint.cpython-312-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-312-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-312-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-312-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-312-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-312-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-312-x86_64-linux-gnu.so +0 -0
- sage/rings/real_interval_absolute.pyx +1073 -0
- sage/rings/real_mpfi.cpython-312-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-312-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,346 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-flint
|
2
|
+
"""
|
3
|
+
Saturation over ZZ
|
4
|
+
"""
|
5
|
+
|
6
|
+
from copy import copy
|
7
|
+
|
8
|
+
from sage.arith.misc import binomial, GCD as gcd
|
9
|
+
from sage.matrix import matrix_integer_dense_hnf
|
10
|
+
from sage.matrix.constructor import identity_matrix, random_matrix
|
11
|
+
from sage.misc.randstate import current_randstate
|
12
|
+
from sage.misc.verbose import verbose
|
13
|
+
from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF
|
14
|
+
from sage.rings.integer_ring import ZZ
|
15
|
+
|
16
|
+
|
17
|
+
def p_saturation(A, p, proof=True):
|
18
|
+
"""
|
19
|
+
INPUT:
|
20
|
+
|
21
|
+
- ``A`` -- a matrix over ZZ
|
22
|
+
- ``p`` -- a prime
|
23
|
+
- ``proof`` -- boolean (default: ``True``)
|
24
|
+
|
25
|
+
OUTPUT:
|
26
|
+
|
27
|
+
The p-saturation of the matrix A, i.e., a new matrix in Hermite form
|
28
|
+
whose row span a ZZ-module that is p-saturated.
|
29
|
+
|
30
|
+
EXAMPLES::
|
31
|
+
|
32
|
+
sage: from sage.matrix.matrix_integer_dense_saturation import p_saturation
|
33
|
+
sage: A = matrix(ZZ, 2, 2, [3,2,3,4]); B = matrix(ZZ, 2,3,[1,2,3,4,5,6])
|
34
|
+
sage: A.det()
|
35
|
+
6
|
36
|
+
sage: C = A*B; C
|
37
|
+
[11 16 21]
|
38
|
+
[19 26 33]
|
39
|
+
sage: C2 = p_saturation(C, 2); C2
|
40
|
+
[ 1 8 15]
|
41
|
+
[ 0 9 18]
|
42
|
+
sage: C2.index_in_saturation()
|
43
|
+
9
|
44
|
+
sage: C3 = p_saturation(C, 3); C3
|
45
|
+
[ 1 0 -1]
|
46
|
+
[ 0 2 4]
|
47
|
+
sage: C3.index_in_saturation()
|
48
|
+
2
|
49
|
+
"""
|
50
|
+
tm = verbose("%s-saturating a %sx%s matrix" % (p, A.nrows(), A.ncols()))
|
51
|
+
H = A.hermite_form(include_zero_rows=False, proof=proof)
|
52
|
+
while True:
|
53
|
+
if p == 2:
|
54
|
+
A = H.change_ring(GF(p))
|
55
|
+
else:
|
56
|
+
try:
|
57
|
+
# Faster than change_ring
|
58
|
+
A = H._reduce(p)
|
59
|
+
except (OverflowError, ImportError):
|
60
|
+
# fall back to generic GF(p) matrices
|
61
|
+
A = H.change_ring(GF(p))
|
62
|
+
assert A.nrows() <= A.ncols()
|
63
|
+
K = A.kernel()
|
64
|
+
if K.dimension() == 0:
|
65
|
+
verbose("done saturating", tm)
|
66
|
+
return H
|
67
|
+
B = K.basis_matrix().lift()
|
68
|
+
C = ((B * H) / p).change_ring(ZZ)
|
69
|
+
H = H.stack(C).hermite_form(include_zero_rows=False, proof=proof)
|
70
|
+
verbose("done saturating", tm)
|
71
|
+
|
72
|
+
|
73
|
+
def random_sublist_of_size(k, n):
|
74
|
+
"""
|
75
|
+
INPUT:
|
76
|
+
|
77
|
+
- ``k`` -- integer
|
78
|
+
- ``n`` -- integer
|
79
|
+
|
80
|
+
OUTPUT: a randomly chosen sublist of ``range(k)`` of size `n`
|
81
|
+
|
82
|
+
EXAMPLES::
|
83
|
+
|
84
|
+
sage: import sage.matrix.matrix_integer_dense_saturation as s
|
85
|
+
sage: l = s.random_sublist_of_size(10, 3)
|
86
|
+
sage: len(l)
|
87
|
+
3
|
88
|
+
sage: l_check = [-1] + l + [10]
|
89
|
+
sage: all(l_check[i] < l_check[i+1] for i in range(4))
|
90
|
+
True
|
91
|
+
sage: l = s.random_sublist_of_size(10, 7)
|
92
|
+
sage: len(l)
|
93
|
+
7
|
94
|
+
sage: l_check = [-1] + l + [10]
|
95
|
+
sage: all(l_check[i] < l_check[i+1] for i in range(8))
|
96
|
+
True
|
97
|
+
"""
|
98
|
+
if n > k:
|
99
|
+
raise ValueError("n must be <= len(v)")
|
100
|
+
if n == k:
|
101
|
+
return list(range(k))
|
102
|
+
if n >= k // 2 + 5:
|
103
|
+
# use complement
|
104
|
+
w = random_sublist_of_size(k, k - n)
|
105
|
+
m = set(w)
|
106
|
+
w = [z for z in range(k) if z not in m]
|
107
|
+
assert len(w) == n
|
108
|
+
return w
|
109
|
+
|
110
|
+
randrange = current_randstate().python_random().randrange
|
111
|
+
|
112
|
+
w = set()
|
113
|
+
while len(w) < n:
|
114
|
+
z = randrange(k)
|
115
|
+
if z not in w:
|
116
|
+
w.add(z)
|
117
|
+
return sorted(w)
|
118
|
+
|
119
|
+
|
120
|
+
def solve_system_with_difficult_last_row(B, A):
|
121
|
+
"""
|
122
|
+
Solve the matrix equation ``B*Z = A`` when the last row of `B`
|
123
|
+
contains huge entries.
|
124
|
+
|
125
|
+
INPUT:
|
126
|
+
|
127
|
+
- ``B`` -- a square n x n nonsingular matrix with painful big bottom row
|
128
|
+
- ``A`` -- an n x k matrix
|
129
|
+
|
130
|
+
OUTPUT: the unique solution to ``B*Z = As``
|
131
|
+
|
132
|
+
EXAMPLES::
|
133
|
+
|
134
|
+
sage: from sage.matrix.matrix_integer_dense_saturation import solve_system_with_difficult_last_row
|
135
|
+
sage: B = matrix(ZZ, 3, [1,2,3, 3,-1,2,939239082,39202803080,2939028038402834]); A = matrix(ZZ,3,2,[1,2,4,3,-1,0])
|
136
|
+
sage: X = solve_system_with_difficult_last_row(B, A); X
|
137
|
+
[ 290668794698843/226075992027744 468068726971/409557956572]
|
138
|
+
[-226078357385539/1582531944194208 1228691305937/2866905696004]
|
139
|
+
[ 2365357795/1582531944194208 -17436221/2866905696004]
|
140
|
+
sage: B*X == A
|
141
|
+
True
|
142
|
+
"""
|
143
|
+
# See the comments in the function of the same name in matrix_integer_dense_hnf.py.
|
144
|
+
# This function is just a generalization of that one to A a matrix.
|
145
|
+
C = copy(B)
|
146
|
+
while True:
|
147
|
+
C[C.nrows()-1] = random_matrix(ZZ,1,C.ncols()).row(0)
|
148
|
+
try:
|
149
|
+
X = C.solve_right(A)
|
150
|
+
except ValueError:
|
151
|
+
verbose("Try difficult solve again with different random vector")
|
152
|
+
else:
|
153
|
+
break
|
154
|
+
D = B.matrix_from_rows(range(C.nrows()-1))
|
155
|
+
N = D._rational_kernel_flint()
|
156
|
+
if N.ncols() != 1:
|
157
|
+
verbose("Difficult solve quickly failed. Using direct approach.")
|
158
|
+
return B.solve_right(A)
|
159
|
+
|
160
|
+
tm = verbose("Recover correct linear combinations")
|
161
|
+
k = N.matrix_from_columns([0])
|
162
|
+
|
163
|
+
# The sought for solution Z to B*Z = A is some linear combination
|
164
|
+
# Z = X + alpha*k
|
165
|
+
# Let w be the last row of B; then Z satisfies
|
166
|
+
# w * Z = A'
|
167
|
+
# where A' is the last row of A. Thus
|
168
|
+
# w * (X + alpha*k) = A'
|
169
|
+
# so w * X + alpha*w*k = A'
|
170
|
+
# so alpha*w*k = A' - w*X.
|
171
|
+
w = B[-1] # last row of B
|
172
|
+
A_prime = A[-1] # last row of A
|
173
|
+
lhs = w*k
|
174
|
+
rhs = A_prime - w * X
|
175
|
+
|
176
|
+
if lhs[0] == 0:
|
177
|
+
verbose("Difficult solve quickly failed. Using direct approach.")
|
178
|
+
return B.solve_right(A)
|
179
|
+
|
180
|
+
for i in range(X.ncols()):
|
181
|
+
alpha = rhs[i] / lhs[0]
|
182
|
+
X.set_column(i, (X.matrix_from_columns([i]) + alpha*k).list())
|
183
|
+
verbose("Done getting linear combinations.", tm)
|
184
|
+
return X
|
185
|
+
|
186
|
+
|
187
|
+
def saturation(A, proof=True, p=0, max_dets=5):
|
188
|
+
r"""
|
189
|
+
Compute a saturation matrix of `A`.
|
190
|
+
|
191
|
+
INPUT:
|
192
|
+
|
193
|
+
- ``A`` -- a matrix over `\ZZ`
|
194
|
+
- ``proof`` -- boolean (default: ``True``)
|
195
|
+
- ``p`` -- integer (default: 0); if not 0 only guarantees that output is
|
196
|
+
`p`-saturated
|
197
|
+
- ``max_dets`` -- integer (default: 4); max number of dets of submatrices to
|
198
|
+
compute
|
199
|
+
|
200
|
+
OUTPUT: matrix; saturation of the matrix `A`
|
201
|
+
|
202
|
+
EXAMPLES::
|
203
|
+
|
204
|
+
sage: from sage.matrix.matrix_integer_dense_saturation import saturation
|
205
|
+
sage: A = matrix(ZZ, 2, 2, [3,2,3,4]); B = matrix(ZZ, 2,3,[1,2,3,4,5,6]); C = A*B
|
206
|
+
sage: C
|
207
|
+
[11 16 21]
|
208
|
+
[19 26 33]
|
209
|
+
sage: C.index_in_saturation()
|
210
|
+
18
|
211
|
+
sage: S = saturation(C); S
|
212
|
+
[11 16 21]
|
213
|
+
[-2 -3 -4]
|
214
|
+
sage: S.index_in_saturation()
|
215
|
+
1
|
216
|
+
sage: saturation(C, proof=False)
|
217
|
+
[11 16 21]
|
218
|
+
[-2 -3 -4]
|
219
|
+
sage: saturation(C, p=2)
|
220
|
+
[11 16 21]
|
221
|
+
[-2 -3 -4]
|
222
|
+
sage: saturation(C, p=2, max_dets=1)
|
223
|
+
[11 16 21]
|
224
|
+
[-2 -3 -4]
|
225
|
+
"""
|
226
|
+
# Find a submatrix of full rank and instead saturate that matrix.
|
227
|
+
r = A.rank()
|
228
|
+
if A.is_square() and r == A.nrows():
|
229
|
+
return identity_matrix(ZZ, r)
|
230
|
+
if A.nrows() > r:
|
231
|
+
P = []
|
232
|
+
while len(P) < r:
|
233
|
+
P = matrix_integer_dense_hnf.probable_pivot_rows(A)
|
234
|
+
A = A.matrix_from_rows(P)
|
235
|
+
|
236
|
+
# Factor out all common factors from all rows, just in case.
|
237
|
+
A = copy(A)
|
238
|
+
A._factor_out_common_factors_from_each_row()
|
239
|
+
|
240
|
+
if A.nrows() <= 1:
|
241
|
+
return A
|
242
|
+
|
243
|
+
A, zero_cols = A._delete_zero_columns()
|
244
|
+
|
245
|
+
if max_dets > 0:
|
246
|
+
# Take the GCD of at most num_dets randomly chosen determinants.
|
247
|
+
nr = A.nrows()
|
248
|
+
nc = A.ncols()
|
249
|
+
d = 0
|
250
|
+
trials = min(binomial(nc, nr), max_dets)
|
251
|
+
already_tried = []
|
252
|
+
while len(already_tried) < trials:
|
253
|
+
v = random_sublist_of_size(nc, nr)
|
254
|
+
tm = verbose('saturation -- checking det condition on submatrix')
|
255
|
+
d = gcd(d, A.matrix_from_columns(v).determinant(proof=proof))
|
256
|
+
verbose('saturation -- got det down to %s' % d, tm)
|
257
|
+
if gcd(d, p) == 1:
|
258
|
+
return A._insert_zero_columns(zero_cols)
|
259
|
+
already_tried.append(v)
|
260
|
+
|
261
|
+
if gcd(d, p) == 1:
|
262
|
+
# already p-saturated
|
263
|
+
return A._insert_zero_columns(zero_cols)
|
264
|
+
|
265
|
+
# Factor and p-saturate at each p.
|
266
|
+
# This is not a good algorithm, because all the HNF's in it are really slow!
|
267
|
+
#
|
268
|
+
#tm = verbose('factoring gcd %s of determinants'%d)
|
269
|
+
#limit = 2**31-1
|
270
|
+
#F = d.factor(limit = limit)
|
271
|
+
#D = [p for p, e in F if p <= limit]
|
272
|
+
#B = [n for n, e in F if n > limit] # all big factors -- there will only be at most one
|
273
|
+
#assert len(B) <= 1
|
274
|
+
#C = B[0]
|
275
|
+
#for p in D:
|
276
|
+
# A = p_saturation(A, p=p, proof=proof)
|
277
|
+
|
278
|
+
# This is a really simple but powerful algorithm.
|
279
|
+
# FACT: If A is a matrix of full rank, then hnf(transpose(A))^(-1)*A is a saturation of A.
|
280
|
+
# To make this practical we use solve_system_with_difficult_last_row, since the
|
281
|
+
# last column of HNF's are typically the only really big ones.
|
282
|
+
B = A.transpose().hermite_form(include_zero_rows=False, proof=proof)
|
283
|
+
B = B.transpose()
|
284
|
+
|
285
|
+
# Now compute B^(-1) * A
|
286
|
+
C = solve_system_with_difficult_last_row(B, A)
|
287
|
+
return C.change_ring(ZZ)._insert_zero_columns(zero_cols)
|
288
|
+
|
289
|
+
|
290
|
+
def index_in_saturation(A, proof=True):
|
291
|
+
r"""
|
292
|
+
The index of A in its saturation.
|
293
|
+
|
294
|
+
INPUT:
|
295
|
+
|
296
|
+
- ``A`` -- matrix over `\ZZ`
|
297
|
+
|
298
|
+
- ``proof`` -- boolean (``True`` or ``False``)
|
299
|
+
|
300
|
+
OUTPUT: integer
|
301
|
+
|
302
|
+
EXAMPLES::
|
303
|
+
|
304
|
+
sage: from sage.matrix.matrix_integer_dense_saturation import index_in_saturation
|
305
|
+
sage: A = matrix(ZZ, 2, 2, [3,2,3,4]); B = matrix(ZZ, 2,3,[1,2,3,4,5,6]); C = A*B; C
|
306
|
+
[11 16 21]
|
307
|
+
[19 26 33]
|
308
|
+
sage: index_in_saturation(C)
|
309
|
+
18
|
310
|
+
sage: W = C.row_space()
|
311
|
+
sage: S = W.saturation()
|
312
|
+
sage: W.index_in(S)
|
313
|
+
18
|
314
|
+
|
315
|
+
For any zero matrix the index in its saturation is 1 (see :issue:`13034`)::
|
316
|
+
|
317
|
+
sage: m = matrix(ZZ, 3)
|
318
|
+
sage: m
|
319
|
+
[0 0 0]
|
320
|
+
[0 0 0]
|
321
|
+
[0 0 0]
|
322
|
+
sage: m.index_in_saturation()
|
323
|
+
1
|
324
|
+
sage: m = matrix(ZZ, 2, 3)
|
325
|
+
sage: m
|
326
|
+
[0 0 0]
|
327
|
+
[0 0 0]
|
328
|
+
sage: m.index_in_saturation()
|
329
|
+
1
|
330
|
+
|
331
|
+
TESTS::
|
332
|
+
|
333
|
+
sage: zero = matrix(ZZ, [[]])
|
334
|
+
sage: zero.index_in_saturation()
|
335
|
+
1
|
336
|
+
"""
|
337
|
+
r = A.rank()
|
338
|
+
if r == 0:
|
339
|
+
return ZZ.one()
|
340
|
+
if r < A.nrows():
|
341
|
+
A = A.hermite_form(proof=proof, include_zero_rows=False)
|
342
|
+
if A.is_square():
|
343
|
+
return abs(A.determinant(proof=proof))
|
344
|
+
A = A.transpose()
|
345
|
+
A = A.hermite_form(proof=proof, include_zero_rows=False)
|
346
|
+
return abs(A.determinant(proof=proof))
|
Binary file
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-flint
|
2
|
+
from sage.modules.vector_integer_sparse cimport mpz_vector
|
3
|
+
from sage.ext.mod_int cimport mod_int
|
4
|
+
from sage.matrix.matrix_sparse cimport Matrix_sparse
|
5
|
+
|
6
|
+
cdef class Matrix_integer_sparse(Matrix_sparse):
|
7
|
+
cdef mpz_vector* _matrix
|
8
|
+
|
9
|
+
cdef _mod_int_c(self, mod_int p)
|