passagemath-flint 10.6.1rc10__cp310-cp310-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-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- sage/graphs/chrompoly.pyx +555 -0
- sage/graphs/matchpoly.cpython-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- sage/matrix/change_ring.pyx +43 -0
- sage/matrix/matrix_complex_ball_dense.cpython-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- sage/rings/factorint_flint.pyx +99 -0
- sage/rings/fraction_field_FpT.cpython-310-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-310-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-310-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-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- sage/rings/polynomial/hilbert.pyx +602 -0
- sage/rings/polynomial/polynomial_complex_arb.cpython-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- sage/rings/polynomial/polynomial_number_field.pyx +345 -0
- sage/rings/polynomial/polynomial_rational_flint.cpython-310-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-310-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-310-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-310-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-310-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-310-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-310-aarch64-linux-gnu.so +0 -0
- sage/rings/real_interval_absolute.pyx +1073 -0
- sage/rings/real_mpfi.cpython-310-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-310-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
sage/quivers/algebra.py
ADDED
@@ -0,0 +1,691 @@
|
|
1
|
+
# sage_setup: distribution = sagemath-flint
|
2
|
+
# sage.doctest: needs sage.graphs
|
3
|
+
"""
|
4
|
+
Path Algebras
|
5
|
+
"""
|
6
|
+
|
7
|
+
# ****************************************************************************
|
8
|
+
# Copyright (C) 2012 Jim Stark <jstarx@gmail.com>
|
9
|
+
# 2013 Simon King <simon.king@uni-jena.de>
|
10
|
+
# 2014 Simon King <simon.king@uni-jena.de>
|
11
|
+
#
|
12
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
13
|
+
#
|
14
|
+
# This code is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty
|
16
|
+
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
17
|
+
#
|
18
|
+
# See the GNU General Public License for more details; the full text
|
19
|
+
# is available at:
|
20
|
+
#
|
21
|
+
# https://www.gnu.org/licenses/
|
22
|
+
# ****************************************************************************
|
23
|
+
|
24
|
+
from sage.combinat.free_module import CombinatorialFreeModule
|
25
|
+
from sage.misc.cachefunc import cached_method
|
26
|
+
|
27
|
+
from .algebra_elements import PathAlgebraElement
|
28
|
+
|
29
|
+
|
30
|
+
class PathAlgebra(CombinatorialFreeModule):
|
31
|
+
r"""
|
32
|
+
Create the path algebra of a :class:`quiver <DiGraph>` over a given field.
|
33
|
+
|
34
|
+
Given a quiver `Q` and a field `k`, the path algebra `kQ` is defined as
|
35
|
+
follows. As a vector space it has basis the set of all paths in `Q`.
|
36
|
+
Multiplication is defined on this basis and extended bilinearly. If `p`
|
37
|
+
is a path with terminal vertex `t` and `q` is a path with initial vertex
|
38
|
+
`i` then the product `p*q` is defined to be the composition of the
|
39
|
+
paths `p` and `q` if `t = i` and `0` otherwise.
|
40
|
+
|
41
|
+
INPUT:
|
42
|
+
|
43
|
+
- ``k`` -- field (or commutative ring), the base field of the path algebra
|
44
|
+
|
45
|
+
- ``P`` -- the path semigroup of a quiver `Q`
|
46
|
+
|
47
|
+
- ``order`` -- string; one of ``'negdegrevlex'`` (default),
|
48
|
+
``'degrevlex'``, ``'negdeglex'`` or ``'deglex'``, defining the monomial
|
49
|
+
order to be used
|
50
|
+
|
51
|
+
OUTPUT: the path algebra `kP` with the given monomial order
|
52
|
+
|
53
|
+
.. NOTE::
|
54
|
+
|
55
|
+
Monomial orders that are not degree orders are not supported.
|
56
|
+
|
57
|
+
EXAMPLES::
|
58
|
+
|
59
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b']}}).path_semigroup()
|
60
|
+
sage: A = P.algebra(GF(7))
|
61
|
+
sage: A
|
62
|
+
Path algebra of Multi-digraph on 3 vertices over Finite Field of size 7
|
63
|
+
sage: A.variable_names()
|
64
|
+
('e_1', 'e_2', 'e_3', 'a', 'b')
|
65
|
+
|
66
|
+
Note that path algebras are uniquely defined by their quiver, field and
|
67
|
+
monomial order::
|
68
|
+
|
69
|
+
sage: A is P.algebra(GF(7))
|
70
|
+
True
|
71
|
+
sage: A is P.algebra(GF(7), order='degrevlex')
|
72
|
+
False
|
73
|
+
sage: A is P.algebra(RR)
|
74
|
+
False
|
75
|
+
sage: A is DiGraph({1:{2:['a']}}).path_semigroup().algebra(GF(7))
|
76
|
+
False
|
77
|
+
|
78
|
+
The path algebra of an acyclic quiver has a finite basis::
|
79
|
+
|
80
|
+
sage: A.dimension()
|
81
|
+
6
|
82
|
+
sage: list(A.basis())
|
83
|
+
[e_1, e_2, e_3, a, b, a*b]
|
84
|
+
|
85
|
+
The path algebra can create elements from paths or from elements of the
|
86
|
+
base ring::
|
87
|
+
|
88
|
+
sage: A(5)
|
89
|
+
5*e_1 + 5*e_2 + 5*e_3
|
90
|
+
sage: S = A.semigroup()
|
91
|
+
sage: S
|
92
|
+
Partial semigroup formed by the directed paths of Multi-digraph on 3 vertices
|
93
|
+
sage: p = S([(1, 2, 'a')])
|
94
|
+
sage: r = S([(2, 3, 'b')])
|
95
|
+
sage: e2 = S([(2, 2)])
|
96
|
+
sage: x = A(p) + A(e2)
|
97
|
+
sage: x
|
98
|
+
a + e_2
|
99
|
+
sage: y = A(p) + A(r)
|
100
|
+
sage: y
|
101
|
+
a + b
|
102
|
+
|
103
|
+
Path algebras are graded algebras. The grading is given by assigning
|
104
|
+
to each basis element the length of the path corresponding to that
|
105
|
+
basis element::
|
106
|
+
|
107
|
+
sage: x.is_homogeneous()
|
108
|
+
False
|
109
|
+
sage: x.degree()
|
110
|
+
Traceback (most recent call last):
|
111
|
+
...
|
112
|
+
ValueError: element is not homogeneous
|
113
|
+
sage: y.is_homogeneous()
|
114
|
+
True
|
115
|
+
sage: y.degree()
|
116
|
+
1
|
117
|
+
sage: A[1]
|
118
|
+
Free module spanned by [a, b] over Finite Field of size 7
|
119
|
+
sage: A[2]
|
120
|
+
Free module spanned by [a*b] over Finite Field of size 7
|
121
|
+
|
122
|
+
TESTS::
|
123
|
+
|
124
|
+
sage: TestSuite(A).run()
|
125
|
+
"""
|
126
|
+
|
127
|
+
Element = PathAlgebraElement
|
128
|
+
|
129
|
+
###########################################################################
|
130
|
+
# #
|
131
|
+
# PRIVATE FUNCTIONS #
|
132
|
+
# These functions are not meant to be seen by the end user. #
|
133
|
+
# #
|
134
|
+
###########################################################################
|
135
|
+
|
136
|
+
def __init__(self, k, P, order='negdegrevlex'):
|
137
|
+
"""
|
138
|
+
Create a :class:`PathAlgebra` object.
|
139
|
+
|
140
|
+
Type ``PathAlgebra?`` for more information.
|
141
|
+
|
142
|
+
INPUT:
|
143
|
+
|
144
|
+
- ``k`` -- a commutative ring
|
145
|
+
- ``P`` -- the partial semigroup formed by the paths of a quiver
|
146
|
+
|
147
|
+
TESTS::
|
148
|
+
|
149
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
|
150
|
+
sage: P.algebra(GF(5))
|
151
|
+
Path algebra of Multi-digraph on 4 vertices over Finite Field of size 5
|
152
|
+
"""
|
153
|
+
# The following hidden methods are relevant:
|
154
|
+
#
|
155
|
+
# - _base
|
156
|
+
# The base ring of the path algebra.
|
157
|
+
# - _basis_keys
|
158
|
+
# Finite enumerated set containing the QuiverPaths that form the
|
159
|
+
# basis.
|
160
|
+
# - _quiver
|
161
|
+
# The quiver of the path algebra
|
162
|
+
# - _semigroup
|
163
|
+
# Shortcut for _quiver.semigroup()
|
164
|
+
|
165
|
+
from sage.categories.graded_algebras_with_basis import GradedAlgebrasWithBasis
|
166
|
+
self._quiver = P.quiver()
|
167
|
+
self._semigroup = P
|
168
|
+
self._ordstr = order
|
169
|
+
super().__init__(k, self._semigroup,
|
170
|
+
prefix='',
|
171
|
+
# element_class=self.Element,
|
172
|
+
category=GradedAlgebrasWithBasis(k),
|
173
|
+
bracket=False)
|
174
|
+
self._assign_names(self._semigroup.variable_names())
|
175
|
+
|
176
|
+
def order_string(self) -> str:
|
177
|
+
"""
|
178
|
+
Return the string that defines the monomial order of this algebra.
|
179
|
+
|
180
|
+
EXAMPLES::
|
181
|
+
|
182
|
+
sage: P1 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'))
|
183
|
+
sage: P2 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'), order='degrevlex')
|
184
|
+
sage: P3 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'), order='negdeglex')
|
185
|
+
sage: P4 = DiGraph({1:{1:['x','y','z']}}).path_semigroup().algebra(GF(25,'t'), order='deglex')
|
186
|
+
sage: P1.order_string()
|
187
|
+
'negdegrevlex'
|
188
|
+
sage: P2.order_string()
|
189
|
+
'degrevlex'
|
190
|
+
sage: P3.order_string()
|
191
|
+
'negdeglex'
|
192
|
+
sage: P4.order_string()
|
193
|
+
'deglex'
|
194
|
+
"""
|
195
|
+
return self._ordstr
|
196
|
+
|
197
|
+
@cached_method
|
198
|
+
def gens(self) -> tuple:
|
199
|
+
"""
|
200
|
+
Return the generators of this algebra (idempotents and arrows).
|
201
|
+
|
202
|
+
EXAMPLES::
|
203
|
+
|
204
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
|
205
|
+
sage: A = P.algebra(GF(5))
|
206
|
+
sage: A.variable_names()
|
207
|
+
('e_1', 'e_2', 'e_3', 'e_4', 'a', 'b', 'c')
|
208
|
+
sage: A.gens()
|
209
|
+
(e_1, e_2, e_3, e_4, a, b, c)
|
210
|
+
"""
|
211
|
+
return tuple(self.gen(i) for i in range(self.ngens()))
|
212
|
+
|
213
|
+
@cached_method
|
214
|
+
def arrows(self):
|
215
|
+
"""
|
216
|
+
Return the arrows of this algebra (corresponding to edges of the
|
217
|
+
underlying quiver).
|
218
|
+
|
219
|
+
EXAMPLES::
|
220
|
+
|
221
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
|
222
|
+
sage: A = P.algebra(GF(5))
|
223
|
+
sage: A.arrows()
|
224
|
+
(a, b, c)
|
225
|
+
"""
|
226
|
+
return tuple(self._from_dict({index: self.base_ring().one()},
|
227
|
+
remove_zeros=False)
|
228
|
+
for index in self._semigroup.arrows())
|
229
|
+
|
230
|
+
@cached_method
|
231
|
+
def idempotents(self):
|
232
|
+
"""
|
233
|
+
Return the idempotents of this algebra (corresponding to vertices
|
234
|
+
of the underlying quiver).
|
235
|
+
|
236
|
+
EXAMPLES::
|
237
|
+
|
238
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
|
239
|
+
sage: A = P.algebra(GF(5))
|
240
|
+
sage: A.idempotents()
|
241
|
+
(e_1, e_2, e_3, e_4)
|
242
|
+
"""
|
243
|
+
return tuple(self._from_dict({index: self.base_ring().one()},
|
244
|
+
remove_zeros=False)
|
245
|
+
for index in self._semigroup.idempotents())
|
246
|
+
|
247
|
+
@cached_method
|
248
|
+
def gen(self, i):
|
249
|
+
"""
|
250
|
+
Return the `i`-th generator of this algebra.
|
251
|
+
|
252
|
+
This is an idempotent (corresponding to a trivial path at a
|
253
|
+
vertex) if `i < n` (where `n` is the number of vertices of the
|
254
|
+
quiver), and a single-edge path otherwise.
|
255
|
+
|
256
|
+
EXAMPLES::
|
257
|
+
|
258
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
|
259
|
+
sage: A = P.algebra(GF(5))
|
260
|
+
sage: A.gens()
|
261
|
+
(e_1, e_2, e_3, e_4, a, b, c)
|
262
|
+
sage: A.gen(2)
|
263
|
+
e_3
|
264
|
+
sage: A.gen(5)
|
265
|
+
b
|
266
|
+
"""
|
267
|
+
return self._from_dict({self._semigroup.gen(i): self.base_ring().one()},
|
268
|
+
remove_zeros=False)
|
269
|
+
|
270
|
+
def ngens(self):
|
271
|
+
"""
|
272
|
+
Number of generators of this algebra.
|
273
|
+
|
274
|
+
EXAMPLES::
|
275
|
+
|
276
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b', 'c']}, 4:{}}).path_semigroup()
|
277
|
+
sage: A = P.algebra(GF(5))
|
278
|
+
sage: A.ngens()
|
279
|
+
7
|
280
|
+
"""
|
281
|
+
return self._semigroup.ngens()
|
282
|
+
|
283
|
+
def _element_constructor_(self, x):
|
284
|
+
"""
|
285
|
+
Attempt to construct an element of ``self`` from ``x``.
|
286
|
+
|
287
|
+
TESTS::
|
288
|
+
|
289
|
+
sage: A = DiGraph({2:{3:['b']}}).path_semigroup().algebra(ZZ)
|
290
|
+
sage: B = DiGraph({0:{1:['a']}, 1:{2:['c']}, 2:{3:['b']}}).path_semigroup().algebra(GF(5))
|
291
|
+
sage: x = A('b') + 1 # indirect doctest
|
292
|
+
sage: x
|
293
|
+
e_2 + b + e_3
|
294
|
+
sage: B(x) # indirect doctest
|
295
|
+
e_2 + b + e_3
|
296
|
+
sage: A(1) # indirect doctest
|
297
|
+
e_2 + e_3
|
298
|
+
sage: B(2) # indirect doctest
|
299
|
+
2*e_0 + 2*e_1 + 2*e_2 + 2*e_3
|
300
|
+
sage: B([(0,1,'a'),(1,2,'c')]) # indirect doctest
|
301
|
+
a*c
|
302
|
+
"""
|
303
|
+
from sage.quivers.paths import QuiverPath
|
304
|
+
# If it's an element of another path algebra, do a linear combination
|
305
|
+
# of the basis
|
306
|
+
if isinstance(x, PathAlgebraElement) and isinstance(x.parent(), PathAlgebra):
|
307
|
+
result = {}
|
308
|
+
coeffs = x.monomial_coefficients()
|
309
|
+
for key in coeffs:
|
310
|
+
result[self._semigroup(key)] = coeffs[key]
|
311
|
+
return self.element_class(self, result)
|
312
|
+
|
313
|
+
# If it's a QuiverPath return the associated basis element
|
314
|
+
if isinstance(x, QuiverPath):
|
315
|
+
return self.element_class(self, {x: self.base_ring().one()})
|
316
|
+
|
317
|
+
# If it's a scalar, return a multiple of one:
|
318
|
+
if x in self.base_ring():
|
319
|
+
return self.one() * x
|
320
|
+
|
321
|
+
# If it's a tuple or a list, try and create a QuiverPath from it and
|
322
|
+
# then return the associated basis element
|
323
|
+
if isinstance(x, (tuple, list, str)):
|
324
|
+
return self.element_class(self, {self._semigroup(x): self.base_ring().one()})
|
325
|
+
|
326
|
+
if isinstance(x, dict):
|
327
|
+
return self.element_class(self, x)
|
328
|
+
|
329
|
+
# Otherwise let CombinatorialFreeModule try
|
330
|
+
return super()._element_constructor_(x)
|
331
|
+
|
332
|
+
def _coerce_map_from_(self, other):
|
333
|
+
"""
|
334
|
+
Return ``True`` if there is a coercion from ``other`` to ``self``.
|
335
|
+
|
336
|
+
The algebras that coerce into a path algebra are rings `k` or path
|
337
|
+
algebras `kQ` such that `k` has a coercion into the base ring of
|
338
|
+
``self`` and `Q` is a subquiver of the quiver of ``self``.
|
339
|
+
|
340
|
+
In particular, the path semigroup of a subquiver coerces into the
|
341
|
+
algebra.
|
342
|
+
|
343
|
+
TESTS::
|
344
|
+
|
345
|
+
sage: P1 = DiGraph({1:{2:['a']}}).path_semigroup()
|
346
|
+
sage: P2 = DiGraph({1:{2:['a','b']}}).path_semigroup()
|
347
|
+
sage: A1 = P1.algebra(GF(3))
|
348
|
+
sage: A2 = P2.algebra(GF(3))
|
349
|
+
sage: A1.coerce_map_from(A2) # indirect doctest
|
350
|
+
sage: A2.coerce_map_from(A1) # indirect doctest
|
351
|
+
Coercion map:
|
352
|
+
From: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
353
|
+
To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
354
|
+
sage: A1.coerce_map_from(ZZ) # indirect doctest
|
355
|
+
Composite map:
|
356
|
+
From: Integer Ring
|
357
|
+
To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
358
|
+
Defn: Natural morphism:
|
359
|
+
From: Integer Ring
|
360
|
+
To: Finite Field of size 3
|
361
|
+
then
|
362
|
+
Generic morphism:
|
363
|
+
From: Finite Field of size 3
|
364
|
+
To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
365
|
+
sage: A1.coerce_map_from(QQ) # indirect doctest
|
366
|
+
sage: A1.coerce_map_from(ZZ)
|
367
|
+
Composite map:
|
368
|
+
From: Integer Ring
|
369
|
+
To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
370
|
+
Defn: Natural morphism:
|
371
|
+
From: Integer Ring
|
372
|
+
To: Finite Field of size 3
|
373
|
+
then
|
374
|
+
Generic morphism:
|
375
|
+
From: Finite Field of size 3
|
376
|
+
To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
377
|
+
|
378
|
+
::
|
379
|
+
|
380
|
+
sage: A2.coerce_map_from(P1)
|
381
|
+
Coercion map:
|
382
|
+
From: Partial semigroup formed by the directed paths of Multi-digraph on 2 vertices
|
383
|
+
To: Path algebra of Multi-digraph on 2 vertices over Finite Field of size 3
|
384
|
+
sage: a = P1(P1.arrows()[0]); a
|
385
|
+
a
|
386
|
+
sage: A2.one() * a == a # indirect doctest
|
387
|
+
True
|
388
|
+
|
389
|
+
::
|
390
|
+
|
391
|
+
sage: A = DiGraph({2:{3:['b']}}).path_semigroup().algebra(ZZ)
|
392
|
+
sage: B = DiGraph({0:{1:['a']}, 1:{2:['c']}, 2:{3:['b']}}).path_semigroup().algebra(GF(5))
|
393
|
+
sage: x = A('b') + 1 # indirect doctest
|
394
|
+
sage: x
|
395
|
+
e_2 + b + e_3
|
396
|
+
sage: B(2)
|
397
|
+
2*e_0 + 2*e_1 + 2*e_2 + 2*e_3
|
398
|
+
sage: B(2)*x*B(3) # indirect doctest
|
399
|
+
e_2 + b + e_3
|
400
|
+
"""
|
401
|
+
if isinstance(other, PathAlgebra) and self._base.has_coerce_map_from(other._base):
|
402
|
+
OQ = other._quiver
|
403
|
+
SQ = self._quiver
|
404
|
+
SQE = self._semigroup._sorted_edges
|
405
|
+
if all(v in SQ for v in OQ.vertex_iterator()) and all(e in SQE for e in other._semigroup._sorted_edges):
|
406
|
+
return True
|
407
|
+
if self._semigroup.has_coerce_map_from(other):
|
408
|
+
return True
|
409
|
+
return self._base.has_coerce_map_from(other)
|
410
|
+
|
411
|
+
def _repr_(self):
|
412
|
+
"""
|
413
|
+
Default string representation.
|
414
|
+
|
415
|
+
TESTS::
|
416
|
+
|
417
|
+
sage: P = DiGraph({1:{2:['a']}, 2:{3:['b']}}).path_semigroup()
|
418
|
+
sage: P.algebra(RR) # indirect doctest
|
419
|
+
Path algebra of Multi-digraph on 3 vertices over Real Field with 53 bits of precision
|
420
|
+
"""
|
421
|
+
return "Path algebra of {0} over {1}".format(self._quiver, self._base)
|
422
|
+
|
423
|
+
# String representation of a monomial
|
424
|
+
def _repr_monomial(self, data):
|
425
|
+
"""
|
426
|
+
String representation of a monomial.
|
427
|
+
|
428
|
+
INPUT:
|
429
|
+
|
430
|
+
- ``data`` -- list providing the indices of the path algebra
|
431
|
+
generators occurring in the monomial
|
432
|
+
|
433
|
+
EXAMPLES::
|
434
|
+
|
435
|
+
sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ.quo(15))
|
436
|
+
sage: X = sage_eval('a+2*b+3*c+5*e_0+3*e_2', A.gens_dict())
|
437
|
+
sage: X # indirect doctest
|
438
|
+
5*e_0 + a + 2*b + 3*c + 3*e_2
|
439
|
+
"""
|
440
|
+
# m is [list, pos, mid], where the list gives the nb of arrows, pos
|
441
|
+
# gives the component in the module, and mid gives the length of the
|
442
|
+
# left factor in a two-sided module.
|
443
|
+
arrows = self.variable_names()
|
444
|
+
return '*'.join(arrows[n] for n in data)
|
445
|
+
|
446
|
+
def _latex_monomial(self, data):
|
447
|
+
"""
|
448
|
+
Latex string representation of a monomial.
|
449
|
+
|
450
|
+
INPUT:
|
451
|
+
|
452
|
+
- ``data`` -- list providing the indices of the path algebra
|
453
|
+
generators occurring in the monomial
|
454
|
+
|
455
|
+
EXAMPLES::
|
456
|
+
|
457
|
+
sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ.quo(15))
|
458
|
+
sage: X = sage_eval('a+2*b+3*c+5*e_0+3*e_2', A.gens_dict())
|
459
|
+
sage: latex(X) # indirect doctest
|
460
|
+
5 e_0 + a + 2 b + 3 c + 3 e_2
|
461
|
+
"""
|
462
|
+
arrows = self.variable_names()
|
463
|
+
return '\\cdot '.join(arrows[n] for n in data)
|
464
|
+
|
465
|
+
@cached_method
|
466
|
+
def one(self):
|
467
|
+
"""
|
468
|
+
Return the multiplicative identity element.
|
469
|
+
|
470
|
+
The multiplicative identity of a path algebra is the sum of the basis
|
471
|
+
elements corresponding to the trivial paths at each vertex.
|
472
|
+
|
473
|
+
EXAMPLES::
|
474
|
+
|
475
|
+
sage: A = DiGraph({1:{2:['a']}, 2:{3:['b']}}).path_semigroup().algebra(QQ)
|
476
|
+
sage: A.one()
|
477
|
+
e_1 + e_2 + e_3
|
478
|
+
"""
|
479
|
+
one = self.base_ring().one()
|
480
|
+
D = {index: one for index in self._semigroup.idempotents()}
|
481
|
+
return self._from_dict(D)
|
482
|
+
|
483
|
+
###########################################################################
|
484
|
+
# #
|
485
|
+
# DATA FUNCTIONS #
|
486
|
+
# These functions return data and subspaces of the path algebra. #
|
487
|
+
# #
|
488
|
+
###########################################################################
|
489
|
+
|
490
|
+
def quiver(self):
|
491
|
+
"""
|
492
|
+
Return the quiver from which the algebra ``self`` was formed.
|
493
|
+
|
494
|
+
OUTPUT: :class:`DiGraph`; the quiver of the algebra
|
495
|
+
|
496
|
+
EXAMPLES::
|
497
|
+
|
498
|
+
sage: P = DiGraph({1:{2:['a', 'b']}}).path_semigroup()
|
499
|
+
sage: A = P.algebra(GF(3))
|
500
|
+
sage: A.quiver() is P.quiver()
|
501
|
+
True
|
502
|
+
"""
|
503
|
+
return self._quiver
|
504
|
+
|
505
|
+
def semigroup(self):
|
506
|
+
"""
|
507
|
+
Return the (partial) semigroup from which the algebra ``self`` was
|
508
|
+
constructed.
|
509
|
+
|
510
|
+
.. NOTE::
|
511
|
+
|
512
|
+
The partial semigroup is formed by the paths of a quiver,
|
513
|
+
multiplied by concatenation. If the quiver has more than a single
|
514
|
+
vertex, then multiplication in the path semigroup is not always
|
515
|
+
defined.
|
516
|
+
|
517
|
+
OUTPUT:
|
518
|
+
|
519
|
+
- the path semigroup from which ``self`` was formed (a partial
|
520
|
+
semigroup)
|
521
|
+
|
522
|
+
EXAMPLES::
|
523
|
+
|
524
|
+
sage: P = DiGraph({1:{2:['a', 'b']}}).path_semigroup()
|
525
|
+
sage: A = P.algebra(GF(3))
|
526
|
+
sage: A.semigroup() is P
|
527
|
+
True
|
528
|
+
"""
|
529
|
+
return self._semigroup
|
530
|
+
|
531
|
+
def degree_on_basis(self, x):
|
532
|
+
"""
|
533
|
+
Return ``x.degree()``.
|
534
|
+
|
535
|
+
This function is here to make some methods work that are inherited
|
536
|
+
from :class:`~sage.combinat.free_module.CombinatorialFreeModule`.
|
537
|
+
|
538
|
+
EXAMPLES::
|
539
|
+
|
540
|
+
sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ)
|
541
|
+
sage: A.inject_variables()
|
542
|
+
Defining e_0, e_1, e_2, a, b, c, d, e, f
|
543
|
+
sage: X = a+2*b+3*c*e-a*d+5*e_0+3*e_2
|
544
|
+
sage: X
|
545
|
+
5*e_0 + a - a*d + 2*b + 3*e_2
|
546
|
+
sage: X.homogeneous_component(0) # indirect doctest
|
547
|
+
5*e_0 + 3*e_2
|
548
|
+
sage: X.homogeneous_component(1)
|
549
|
+
a + 2*b
|
550
|
+
sage: X.homogeneous_component(2)
|
551
|
+
-a*d
|
552
|
+
sage: X.homogeneous_component(3)
|
553
|
+
0
|
554
|
+
"""
|
555
|
+
return x.degree()
|
556
|
+
|
557
|
+
def sum(self, iter_of_elements):
|
558
|
+
"""
|
559
|
+
Return the sum of all elements in ``iter_of_elements``.
|
560
|
+
|
561
|
+
INPUT:
|
562
|
+
|
563
|
+
- ``iter_of_elements`` -- iterator of elements of ``self``
|
564
|
+
|
565
|
+
.. NOTE::
|
566
|
+
|
567
|
+
It overrides a method inherited from
|
568
|
+
:class:`~sage.combinat.free_module.CombinatorialFreeModule`,
|
569
|
+
which relies on a private attribute of elements---an
|
570
|
+
implementation detail that is simply not available for
|
571
|
+
:class:`~sage.quivers.algebra_elements.PathAlgebraElement`.
|
572
|
+
|
573
|
+
EXAMPLES::
|
574
|
+
|
575
|
+
sage: A = DiGraph({0:{1:['a'], 2:['b']}, 1:{0:['c'], 1:['d']}, 2:{0:['e'],2:['f']}}).path_semigroup().algebra(ZZ)
|
576
|
+
sage: A.inject_variables()
|
577
|
+
Defining e_0, e_1, e_2, a, b, c, d, e, f
|
578
|
+
sage: A.sum((a, 2*b, 3*c*e, -a*d, 5*e_0, 3*e_2))
|
579
|
+
5*e_0 + a - a*d + 2*b + 3*e_2
|
580
|
+
"""
|
581
|
+
return sum(iter_of_elements, self.zero())
|
582
|
+
|
583
|
+
def linear_combination(self, iter_of_elements_coeff, factor_on_left=True):
|
584
|
+
r"""
|
585
|
+
Return the linear combination `\lambda_1 v_1 + \cdots +
|
586
|
+
\lambda_k v_k` (resp. the linear combination `v_1 \lambda_1 +
|
587
|
+
\cdots + v_k \lambda_k`) where ``iter_of_elements_coeff`` iterates
|
588
|
+
through the sequence `((v_1, \lambda_1), ..., (v_k, \lambda_k))`.
|
589
|
+
|
590
|
+
INPUT:
|
591
|
+
|
592
|
+
- ``iter_of_elements_coeff`` -- iterator of pairs ``(element, coeff)``
|
593
|
+
with ``element`` in ``self`` and ``coeff`` in ``self.base_ring()``
|
594
|
+
|
595
|
+
- ``factor_on_left`` -- (optional) if ``True``, the coefficients are
|
596
|
+
multiplied from the left if ``False``, the coefficients are
|
597
|
+
multiplied from the right
|
598
|
+
|
599
|
+
.. NOTE::
|
600
|
+
|
601
|
+
It overrides a method inherited from
|
602
|
+
:class:`~sage.combinat.free_module.CombinatorialFreeModule`,
|
603
|
+
which relies on a private attribute of elements---an
|
604
|
+
implementation detail that is simply not available for
|
605
|
+
:class:`~sage.quivers.algebra_elements.PathAlgebraElement`.
|
606
|
+
|
607
|
+
EXAMPLES::
|
608
|
+
|
609
|
+
sage: A = DiGraph({0: {1: ['a'], 2: ['b']},
|
610
|
+
....: 1: {0: ['c'], 1: ['d']},
|
611
|
+
....: 2: {0: ['e'], 2: ['f']}}).path_semigroup().algebra(ZZ)
|
612
|
+
sage: A.inject_variables()
|
613
|
+
Defining e_0, e_1, e_2, a, b, c, d, e, f
|
614
|
+
sage: A.linear_combination([(a, 1), (b, 2), (c*e, 3),
|
615
|
+
....: (a*d, -1), (e_0, 5), (e_2, 3)])
|
616
|
+
5*e_0 + a - a*d + 2*b + 3*e_2
|
617
|
+
"""
|
618
|
+
if factor_on_left:
|
619
|
+
return self.sum(coeff * element
|
620
|
+
for element, coeff in iter_of_elements_coeff)
|
621
|
+
else:
|
622
|
+
return self.sum(element * coeff
|
623
|
+
for element, coeff in iter_of_elements_coeff)
|
624
|
+
|
625
|
+
def homogeneous_component(self, n):
|
626
|
+
"""
|
627
|
+
Return the `n`-th homogeneous piece of the path algebra.
|
628
|
+
|
629
|
+
INPUT:
|
630
|
+
|
631
|
+
- ``n`` -- integer
|
632
|
+
|
633
|
+
OUTPUT:
|
634
|
+
|
635
|
+
- :class:`CombinatorialFreeModule`, module spanned by the paths
|
636
|
+
of length `n` in the quiver
|
637
|
+
|
638
|
+
EXAMPLES::
|
639
|
+
|
640
|
+
sage: P = DiGraph({1:{2:['a'], 3:['b']}, 2:{4:['c']}, 3:{4:['d']}}).path_semigroup()
|
641
|
+
sage: A = P.algebra(GF(7))
|
642
|
+
sage: A.homogeneous_component(2)
|
643
|
+
Free module spanned by [a*c, b*d] over Finite Field of size 7
|
644
|
+
|
645
|
+
sage: D = DiGraph({1: {2: 'a'}, 2: {3: 'b'}, 3: {1: 'c'}})
|
646
|
+
sage: P = D.path_semigroup()
|
647
|
+
sage: A = P.algebra(ZZ)
|
648
|
+
sage: A.homogeneous_component(3)
|
649
|
+
Free module spanned by [a*b*c, b*c*a, c*a*b] over Integer Ring
|
650
|
+
"""
|
651
|
+
basis = []
|
652
|
+
for v in self._semigroup._quiver:
|
653
|
+
basis.extend(self._semigroup.iter_paths_by_length_and_startpoint(n, v))
|
654
|
+
M = CombinatorialFreeModule(self._base, basis, prefix='', bracket=False)
|
655
|
+
M._name = "Free module spanned by {0}".format(basis)
|
656
|
+
return M
|
657
|
+
|
658
|
+
__getitem__ = homogeneous_component
|
659
|
+
|
660
|
+
def homogeneous_components(self):
|
661
|
+
r"""
|
662
|
+
Return the nonzero homogeneous components of ``self``.
|
663
|
+
|
664
|
+
EXAMPLES::
|
665
|
+
|
666
|
+
sage: Q = DiGraph([[1,2,'a'],[2,3,'b'],[3,4,'c']])
|
667
|
+
sage: PQ = Q.path_semigroup()
|
668
|
+
sage: A = PQ.algebra(GF(7))
|
669
|
+
sage: A.homogeneous_components()
|
670
|
+
[Free module spanned by [e_1, e_2, e_3, e_4] over Finite Field of size 7,
|
671
|
+
Free module spanned by [a, b, c] over Finite Field of size 7,
|
672
|
+
Free module spanned by [a*b, b*c] over Finite Field of size 7,
|
673
|
+
Free module spanned by [a*b*c] over Finite Field of size 7]
|
674
|
+
|
675
|
+
.. WARNING::
|
676
|
+
|
677
|
+
Backward incompatible change: since :issue:`12630` and
|
678
|
+
until :issue:`8678`, this feature was implemented under
|
679
|
+
the syntax ``list(A)`` by means of ``A.__iter__``. This
|
680
|
+
was incorrect since ``A.__iter__``, when defined for a
|
681
|
+
parent, should iterate through the elements of `A`.
|
682
|
+
"""
|
683
|
+
result = []
|
684
|
+
i = 0
|
685
|
+
while True:
|
686
|
+
c = self.homogeneous_component(i)
|
687
|
+
if not c.dimension():
|
688
|
+
break
|
689
|
+
result.append(c)
|
690
|
+
i += 1
|
691
|
+
return result
|
Binary file
|