passagemath-schemes 10.6.40__cp314-cp314-macosx_13_0_arm64.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.
Potentially problematic release.
This version of passagemath-schemes might be problematic. Click here for more details.
- passagemath_schemes/.dylibs/libflint.22.0.dylib +0 -0
- passagemath_schemes/.dylibs/libgmp.10.dylib +0 -0
- passagemath_schemes/.dylibs/libgmpxx.4.dylib +0 -0
- passagemath_schemes/.dylibs/libmpfr.6.dylib +0 -0
- passagemath_schemes/__init__.py +3 -0
- passagemath_schemes-10.6.40.dist-info/METADATA +204 -0
- passagemath_schemes-10.6.40.dist-info/METADATA.bak +205 -0
- passagemath_schemes-10.6.40.dist-info/RECORD +314 -0
- passagemath_schemes-10.6.40.dist-info/WHEEL +6 -0
- passagemath_schemes-10.6.40.dist-info/top_level.txt +3 -0
- sage/all__sagemath_schemes.py +23 -0
- sage/databases/all__sagemath_schemes.py +7 -0
- sage/databases/cremona.py +1723 -0
- sage/dynamics/all__sagemath_schemes.py +2 -0
- sage/dynamics/arithmetic_dynamics/affine_ds.py +1083 -0
- sage/dynamics/arithmetic_dynamics/all.py +14 -0
- sage/dynamics/arithmetic_dynamics/berkovich_ds.py +1101 -0
- sage/dynamics/arithmetic_dynamics/dynamical_semigroup.py +1543 -0
- sage/dynamics/arithmetic_dynamics/endPN_automorphism_group.py +2426 -0
- sage/dynamics/arithmetic_dynamics/endPN_minimal_model.py +1169 -0
- sage/dynamics/arithmetic_dynamics/generic_ds.py +663 -0
- sage/dynamics/arithmetic_dynamics/product_projective_ds.py +339 -0
- sage/dynamics/arithmetic_dynamics/projective_ds.py +9558 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.cpython-314-darwin.so +0 -0
- sage/dynamics/arithmetic_dynamics/projective_ds_helper.pyx +301 -0
- sage/dynamics/arithmetic_dynamics/wehlerK3.py +2576 -0
- sage/lfunctions/all.py +18 -0
- sage/lfunctions/dokchitser.py +745 -0
- sage/lfunctions/pari.py +818 -0
- sage/lfunctions/zero_sums.cpython-314-darwin.so +0 -0
- sage/lfunctions/zero_sums.pyx +1847 -0
- sage/modular/abvar/abvar.py +5135 -0
- sage/modular/abvar/abvar_ambient_jacobian.py +413 -0
- sage/modular/abvar/abvar_newform.py +244 -0
- sage/modular/abvar/all.py +8 -0
- sage/modular/abvar/constructor.py +186 -0
- sage/modular/abvar/cuspidal_subgroup.py +371 -0
- sage/modular/abvar/finite_subgroup.py +896 -0
- sage/modular/abvar/homology.py +720 -0
- sage/modular/abvar/homspace.py +998 -0
- sage/modular/abvar/lseries.py +415 -0
- sage/modular/abvar/morphism.py +935 -0
- sage/modular/abvar/torsion_point.py +274 -0
- sage/modular/abvar/torsion_subgroup.py +740 -0
- sage/modular/all.py +43 -0
- sage/modular/arithgroup/all.py +20 -0
- sage/modular/arithgroup/arithgroup_element.cpython-314-darwin.so +0 -0
- sage/modular/arithgroup/arithgroup_element.pyx +474 -0
- sage/modular/arithgroup/arithgroup_generic.py +1402 -0
- sage/modular/arithgroup/arithgroup_perm.py +2692 -0
- sage/modular/arithgroup/congroup.cpython-314-darwin.so +0 -0
- sage/modular/arithgroup/congroup.pyx +334 -0
- sage/modular/arithgroup/congroup_gamma.py +363 -0
- sage/modular/arithgroup/congroup_gamma0.py +692 -0
- sage/modular/arithgroup/congroup_gamma1.py +653 -0
- sage/modular/arithgroup/congroup_gammaH.py +1469 -0
- sage/modular/arithgroup/congroup_generic.py +628 -0
- sage/modular/arithgroup/congroup_sl2z.py +267 -0
- sage/modular/arithgroup/farey_symbol.cpython-314-darwin.so +0 -0
- sage/modular/arithgroup/farey_symbol.pyx +1066 -0
- sage/modular/arithgroup/tests.py +418 -0
- sage/modular/btquotients/all.py +4 -0
- sage/modular/btquotients/btquotient.py +3753 -0
- sage/modular/btquotients/pautomorphicform.py +2570 -0
- sage/modular/buzzard.py +100 -0
- sage/modular/congroup.py +29 -0
- sage/modular/congroup_element.py +13 -0
- sage/modular/cusps.py +1109 -0
- sage/modular/cusps_nf.py +1270 -0
- sage/modular/dims.py +569 -0
- sage/modular/dirichlet.py +3310 -0
- sage/modular/drinfeld_modform/all.py +2 -0
- sage/modular/drinfeld_modform/element.py +446 -0
- sage/modular/drinfeld_modform/ring.py +773 -0
- sage/modular/drinfeld_modform/tutorial.py +236 -0
- sage/modular/etaproducts.py +1065 -0
- sage/modular/hecke/algebra.py +746 -0
- sage/modular/hecke/all.py +20 -0
- sage/modular/hecke/ambient_module.py +1019 -0
- sage/modular/hecke/degenmap.py +119 -0
- sage/modular/hecke/element.py +325 -0
- sage/modular/hecke/hecke_operator.py +780 -0
- sage/modular/hecke/homspace.py +206 -0
- sage/modular/hecke/module.py +1767 -0
- sage/modular/hecke/morphism.py +174 -0
- sage/modular/hecke/submodule.py +989 -0
- sage/modular/hypergeometric_misc.cpython-314-darwin.so +0 -0
- sage/modular/hypergeometric_misc.pxd +4 -0
- sage/modular/hypergeometric_misc.pyx +166 -0
- sage/modular/hypergeometric_motive.py +2017 -0
- sage/modular/local_comp/all.py +2 -0
- sage/modular/local_comp/liftings.py +292 -0
- sage/modular/local_comp/local_comp.py +1071 -0
- sage/modular/local_comp/smoothchar.py +1825 -0
- sage/modular/local_comp/type_space.py +748 -0
- sage/modular/modform/all.py +30 -0
- sage/modular/modform/ambient.py +815 -0
- sage/modular/modform/ambient_R.py +177 -0
- sage/modular/modform/ambient_eps.py +306 -0
- sage/modular/modform/ambient_g0.py +124 -0
- sage/modular/modform/ambient_g1.py +204 -0
- sage/modular/modform/constructor.py +545 -0
- sage/modular/modform/cuspidal_submodule.py +708 -0
- sage/modular/modform/defaults.py +14 -0
- sage/modular/modform/eis_series.py +505 -0
- sage/modular/modform/eisenstein_submodule.py +663 -0
- sage/modular/modform/element.py +4131 -0
- sage/modular/modform/find_generators.py +59 -0
- sage/modular/modform/half_integral.py +154 -0
- sage/modular/modform/hecke_operator_on_qexp.py +247 -0
- sage/modular/modform/j_invariant.py +47 -0
- sage/modular/modform/l_series_gross_zagier.py +133 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.cpython-314-darwin.so +0 -0
- sage/modular/modform/l_series_gross_zagier_coeffs.pyx +177 -0
- sage/modular/modform/notes.py +45 -0
- sage/modular/modform/numerical.py +514 -0
- sage/modular/modform/periods.py +14 -0
- sage/modular/modform/ring.py +1257 -0
- sage/modular/modform/space.py +1860 -0
- sage/modular/modform/submodule.py +118 -0
- sage/modular/modform/tests.py +64 -0
- sage/modular/modform/theta.py +110 -0
- sage/modular/modform/vm_basis.py +381 -0
- sage/modular/modform/weight1.py +220 -0
- sage/modular/modform_hecketriangle/abstract_ring.py +1932 -0
- sage/modular/modform_hecketriangle/abstract_space.py +2528 -0
- sage/modular/modform_hecketriangle/all.py +30 -0
- sage/modular/modform_hecketriangle/analytic_type.py +590 -0
- sage/modular/modform_hecketriangle/constructor.py +416 -0
- sage/modular/modform_hecketriangle/element.py +351 -0
- sage/modular/modform_hecketriangle/functors.py +752 -0
- sage/modular/modform_hecketriangle/graded_ring.py +541 -0
- sage/modular/modform_hecketriangle/graded_ring_element.py +2225 -0
- sage/modular/modform_hecketriangle/hecke_triangle_group_element.py +3352 -0
- sage/modular/modform_hecketriangle/hecke_triangle_groups.py +1432 -0
- sage/modular/modform_hecketriangle/readme.py +1214 -0
- sage/modular/modform_hecketriangle/series_constructor.py +580 -0
- sage/modular/modform_hecketriangle/space.py +1037 -0
- sage/modular/modform_hecketriangle/subspace.py +423 -0
- sage/modular/modsym/all.py +17 -0
- sage/modular/modsym/ambient.py +3846 -0
- sage/modular/modsym/boundary.py +1420 -0
- sage/modular/modsym/element.py +336 -0
- sage/modular/modsym/g1list.py +178 -0
- sage/modular/modsym/ghlist.py +182 -0
- sage/modular/modsym/hecke_operator.py +73 -0
- sage/modular/modsym/manin_symbol.cpython-314-darwin.so +0 -0
- sage/modular/modsym/manin_symbol.pxd +5 -0
- sage/modular/modsym/manin_symbol.pyx +497 -0
- sage/modular/modsym/manin_symbol_list.py +1295 -0
- sage/modular/modsym/modsym.py +400 -0
- sage/modular/modsym/modular_symbols.py +384 -0
- sage/modular/modsym/p1list.cpython-314-darwin.so +0 -0
- sage/modular/modsym/p1list.pxd +29 -0
- sage/modular/modsym/p1list.pyx +1372 -0
- sage/modular/modsym/p1list_nf.py +1241 -0
- sage/modular/modsym/relation_matrix.py +591 -0
- sage/modular/modsym/relation_matrix_pyx.cpython-314-darwin.so +0 -0
- sage/modular/modsym/relation_matrix_pyx.pyx +108 -0
- sage/modular/modsym/space.py +2468 -0
- sage/modular/modsym/subspace.py +455 -0
- sage/modular/modsym/tests.py +375 -0
- sage/modular/multiple_zeta.py +2632 -0
- sage/modular/multiple_zeta_F_algebra.py +786 -0
- sage/modular/overconvergent/all.py +6 -0
- sage/modular/overconvergent/genus0.py +1878 -0
- sage/modular/overconvergent/hecke_series.py +1187 -0
- sage/modular/overconvergent/weightspace.py +778 -0
- sage/modular/pollack_stevens/all.py +4 -0
- sage/modular/pollack_stevens/distributions.py +874 -0
- sage/modular/pollack_stevens/fund_domain.py +1572 -0
- sage/modular/pollack_stevens/manin_map.py +859 -0
- sage/modular/pollack_stevens/modsym.py +1593 -0
- sage/modular/pollack_stevens/padic_lseries.py +417 -0
- sage/modular/pollack_stevens/sigma0.py +534 -0
- sage/modular/pollack_stevens/space.py +1076 -0
- sage/modular/quasimodform/all.py +3 -0
- sage/modular/quasimodform/element.py +845 -0
- sage/modular/quasimodform/ring.py +828 -0
- sage/modular/quatalg/all.py +3 -0
- sage/modular/quatalg/brandt.py +1642 -0
- sage/modular/ssmod/all.py +8 -0
- sage/modular/ssmod/ssmod.py +827 -0
- sage/rings/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/all__sagemath_schemes.py +1 -0
- sage/rings/polynomial/binary_form_reduce.py +585 -0
- sage/schemes/all.py +41 -0
- sage/schemes/berkovich/all.py +6 -0
- sage/schemes/berkovich/berkovich_cp_element.py +2582 -0
- sage/schemes/berkovich/berkovich_space.py +748 -0
- sage/schemes/curves/affine_curve.py +2928 -0
- sage/schemes/curves/all.py +33 -0
- sage/schemes/curves/closed_point.py +434 -0
- sage/schemes/curves/constructor.py +381 -0
- sage/schemes/curves/curve.py +542 -0
- sage/schemes/curves/plane_curve_arrangement.py +1283 -0
- sage/schemes/curves/point.py +463 -0
- sage/schemes/curves/projective_curve.py +3026 -0
- sage/schemes/curves/zariski_vankampen.py +1932 -0
- sage/schemes/cyclic_covers/all.py +2 -0
- sage/schemes/cyclic_covers/charpoly_frobenius.py +320 -0
- sage/schemes/cyclic_covers/constructor.py +137 -0
- sage/schemes/cyclic_covers/cycliccover_finite_field.py +1309 -0
- sage/schemes/cyclic_covers/cycliccover_generic.py +310 -0
- sage/schemes/elliptic_curves/BSD.py +1036 -0
- sage/schemes/elliptic_curves/Qcurves.py +592 -0
- sage/schemes/elliptic_curves/addition_formulas_ring.py +94 -0
- sage/schemes/elliptic_curves/all.py +49 -0
- sage/schemes/elliptic_curves/cardinality.py +609 -0
- sage/schemes/elliptic_curves/cm.py +1102 -0
- sage/schemes/elliptic_curves/constructor.py +1552 -0
- sage/schemes/elliptic_curves/ec_database.py +175 -0
- sage/schemes/elliptic_curves/ell_curve_isogeny.py +3972 -0
- sage/schemes/elliptic_curves/ell_egros.py +459 -0
- sage/schemes/elliptic_curves/ell_field.py +2836 -0
- sage/schemes/elliptic_curves/ell_finite_field.py +3359 -0
- sage/schemes/elliptic_curves/ell_generic.py +3760 -0
- sage/schemes/elliptic_curves/ell_local_data.py +1207 -0
- sage/schemes/elliptic_curves/ell_modular_symbols.py +775 -0
- sage/schemes/elliptic_curves/ell_number_field.py +4220 -0
- sage/schemes/elliptic_curves/ell_padic_field.py +107 -0
- sage/schemes/elliptic_curves/ell_point.py +4787 -0
- sage/schemes/elliptic_curves/ell_rational_field.py +7368 -0
- sage/schemes/elliptic_curves/ell_tate_curve.py +671 -0
- sage/schemes/elliptic_curves/ell_torsion.py +436 -0
- sage/schemes/elliptic_curves/ell_wp.py +352 -0
- sage/schemes/elliptic_curves/formal_group.py +760 -0
- sage/schemes/elliptic_curves/gal_reps.py +1459 -0
- sage/schemes/elliptic_curves/gal_reps_number_field.py +1669 -0
- sage/schemes/elliptic_curves/gp_simon.py +152 -0
- sage/schemes/elliptic_curves/heegner.py +7335 -0
- sage/schemes/elliptic_curves/height.py +2109 -0
- sage/schemes/elliptic_curves/hom.py +1406 -0
- sage/schemes/elliptic_curves/hom_composite.py +934 -0
- sage/schemes/elliptic_curves/hom_frobenius.py +522 -0
- sage/schemes/elliptic_curves/hom_scalar.py +531 -0
- sage/schemes/elliptic_curves/hom_sum.py +682 -0
- sage/schemes/elliptic_curves/hom_velusqrt.py +1290 -0
- sage/schemes/elliptic_curves/homset.py +271 -0
- sage/schemes/elliptic_curves/isogeny_class.py +1521 -0
- sage/schemes/elliptic_curves/isogeny_small_degree.py +2797 -0
- sage/schemes/elliptic_curves/jacobian.py +237 -0
- sage/schemes/elliptic_curves/kodaira_symbol.py +344 -0
- sage/schemes/elliptic_curves/kraus.py +1014 -0
- sage/schemes/elliptic_curves/lseries_ell.py +943 -0
- sage/schemes/elliptic_curves/mod5family.py +105 -0
- sage/schemes/elliptic_curves/mod_poly.py +197 -0
- sage/schemes/elliptic_curves/mod_sym_num.cpython-314-darwin.so +0 -0
- sage/schemes/elliptic_curves/mod_sym_num.pyx +3796 -0
- sage/schemes/elliptic_curves/modular_parametrization.py +305 -0
- sage/schemes/elliptic_curves/padic_lseries.py +1793 -0
- sage/schemes/elliptic_curves/padics.py +1816 -0
- sage/schemes/elliptic_curves/period_lattice.py +2234 -0
- sage/schemes/elliptic_curves/period_lattice_region.cpython-314-darwin.so +0 -0
- sage/schemes/elliptic_curves/period_lattice_region.pyx +722 -0
- sage/schemes/elliptic_curves/saturation.py +715 -0
- sage/schemes/elliptic_curves/sha_tate.py +1158 -0
- sage/schemes/elliptic_curves/weierstrass_morphism.py +1117 -0
- sage/schemes/elliptic_curves/weierstrass_transform.py +200 -0
- sage/schemes/hyperelliptic_curves/all.py +6 -0
- sage/schemes/hyperelliptic_curves/constructor.py +291 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_finite_field.py +1914 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_g2.py +192 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_generic.py +954 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_padic_field.py +1332 -0
- sage/schemes/hyperelliptic_curves/hyperelliptic_rational_field.py +84 -0
- sage/schemes/hyperelliptic_curves/invariants.py +410 -0
- sage/schemes/hyperelliptic_curves/jacobian_endomorphism_utils.py +315 -0
- sage/schemes/hyperelliptic_curves/jacobian_g2.py +32 -0
- sage/schemes/hyperelliptic_curves/jacobian_generic.py +419 -0
- sage/schemes/hyperelliptic_curves/jacobian_homset.py +186 -0
- sage/schemes/hyperelliptic_curves/jacobian_morphism.py +875 -0
- sage/schemes/hyperelliptic_curves/kummer_surface.py +99 -0
- sage/schemes/hyperelliptic_curves/mestre.py +302 -0
- sage/schemes/hyperelliptic_curves/monsky_washnitzer.py +3871 -0
- sage/schemes/jacobians/abstract_jacobian.py +277 -0
- sage/schemes/jacobians/all.py +2 -0
- sage/schemes/overview.py +161 -0
- sage/schemes/plane_conics/all.py +22 -0
- sage/schemes/plane_conics/con_field.py +1296 -0
- sage/schemes/plane_conics/con_finite_field.py +158 -0
- sage/schemes/plane_conics/con_number_field.py +456 -0
- sage/schemes/plane_conics/con_rational_field.py +406 -0
- sage/schemes/plane_conics/con_rational_function_field.py +580 -0
- sage/schemes/plane_conics/constructor.py +249 -0
- sage/schemes/plane_quartics/all.py +2 -0
- sage/schemes/plane_quartics/quartic_constructor.py +71 -0
- sage/schemes/plane_quartics/quartic_generic.py +73 -0
- sage/schemes/riemann_surfaces/all.py +1 -0
- sage/schemes/riemann_surfaces/riemann_surface.py +4117 -0
- sage_wheels/share/cremona/cremona_mini.db +0 -0
- sage_wheels/share/ellcurves/rank0 +30427 -0
- sage_wheels/share/ellcurves/rank1 +31871 -0
- sage_wheels/share/ellcurves/rank10 +6 -0
- sage_wheels/share/ellcurves/rank11 +6 -0
- sage_wheels/share/ellcurves/rank12 +1 -0
- sage_wheels/share/ellcurves/rank14 +1 -0
- sage_wheels/share/ellcurves/rank15 +1 -0
- sage_wheels/share/ellcurves/rank17 +1 -0
- sage_wheels/share/ellcurves/rank19 +1 -0
- sage_wheels/share/ellcurves/rank2 +2388 -0
- sage_wheels/share/ellcurves/rank20 +1 -0
- sage_wheels/share/ellcurves/rank21 +1 -0
- sage_wheels/share/ellcurves/rank22 +1 -0
- sage_wheels/share/ellcurves/rank23 +1 -0
- sage_wheels/share/ellcurves/rank24 +1 -0
- sage_wheels/share/ellcurves/rank28 +1 -0
- sage_wheels/share/ellcurves/rank3 +836 -0
- sage_wheels/share/ellcurves/rank4 +10 -0
- sage_wheels/share/ellcurves/rank5 +5 -0
- sage_wheels/share/ellcurves/rank6 +5 -0
- sage_wheels/share/ellcurves/rank7 +5 -0
- sage_wheels/share/ellcurves/rank8 +6 -0
- sage_wheels/share/ellcurves/rank9 +7 -0
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-schemes
|
|
2
|
+
# sage.doctest: needs sage.combinat sage.graphs
|
|
3
|
+
r"""
|
|
4
|
+
Constructor for spaces of modular forms for Hecke triangle groups based on a type
|
|
5
|
+
|
|
6
|
+
AUTHORS:
|
|
7
|
+
|
|
8
|
+
- Jonas Jermann (2013): initial version
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# ****************************************************************************
|
|
12
|
+
# Copyright (C) 2013-2014 Jonas Jermann <jjermann2@gmail.com>
|
|
13
|
+
#
|
|
14
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
15
|
+
# as published by the Free Software Foundation; either version 2 of
|
|
16
|
+
# the License, or (at your option) any later version.
|
|
17
|
+
# https://www.gnu.org/licenses/
|
|
18
|
+
# ****************************************************************************
|
|
19
|
+
|
|
20
|
+
from sage.rings.integer_ring import ZZ
|
|
21
|
+
from sage.rings.rational_field import QQ
|
|
22
|
+
from sage.rings.infinity import infinity
|
|
23
|
+
from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
|
|
24
|
+
from sage.rings.fraction_field import FractionField
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def rational_type(f, n=ZZ(3), base_ring=ZZ):
|
|
28
|
+
r"""
|
|
29
|
+
Return the basic analytic properties that can be determined
|
|
30
|
+
directly from the specified rational function ``f``
|
|
31
|
+
which is interpreted as a representation of an
|
|
32
|
+
element of a FormsRing for the Hecke Triangle group
|
|
33
|
+
with parameter ``n`` and the specified ``base_ring``.
|
|
34
|
+
|
|
35
|
+
In particular the following degree of the generators is assumed:
|
|
36
|
+
|
|
37
|
+
`deg(1) := (0, 1)`
|
|
38
|
+
`deg(x) := (4/(n-2), 1)`
|
|
39
|
+
`deg(y) := (2n/(n-2), -1)`
|
|
40
|
+
`deg(z) := (2, -1)`
|
|
41
|
+
|
|
42
|
+
The meaning of homogeneous elements changes accordingly.
|
|
43
|
+
|
|
44
|
+
INPUT:
|
|
45
|
+
|
|
46
|
+
- ``f`` -- a rational function in ``x,y,z,d`` over ``base_ring``
|
|
47
|
+
|
|
48
|
+
- ``n`` -- integer greater or equal to `3` corresponding
|
|
49
|
+
to the ``HeckeTriangleGroup`` with that parameter (default: `3`)
|
|
50
|
+
|
|
51
|
+
- ``base_ring`` -- the base ring of the corresponding forms ring, resp.
|
|
52
|
+
polynomial ring (default: ``ZZ``)
|
|
53
|
+
|
|
54
|
+
OUTPUT:
|
|
55
|
+
|
|
56
|
+
A tuple ``(elem, homo, k, ep, analytic_type)`` describing the basic
|
|
57
|
+
analytic properties of `f` (with the interpretation indicated above).
|
|
58
|
+
|
|
59
|
+
- ``elem`` -- ``True`` if `f` has a homogeneous denominator
|
|
60
|
+
|
|
61
|
+
- ``homo`` -- ``True`` if `f` also has a homogeneous numerator
|
|
62
|
+
|
|
63
|
+
- ``k`` -- ``None`` if `f` is not homogeneous, otherwise
|
|
64
|
+
the weight of `f` (which is the first component of its degree)
|
|
65
|
+
|
|
66
|
+
- ``ep`` -- ``None`` if `f` is not homogeneous, otherwise
|
|
67
|
+
the multiplier of `f` (which is the second component of its degree)
|
|
68
|
+
|
|
69
|
+
- ``analytic_type`` -- the :class:`AnalyticType` of `f`
|
|
70
|
+
|
|
71
|
+
For the zero function the degree `(0, 1)` is chosen.
|
|
72
|
+
|
|
73
|
+
This function is (heavily) used to determine the type of elements
|
|
74
|
+
and to check if the element really is contained in its parent.
|
|
75
|
+
|
|
76
|
+
EXAMPLES::
|
|
77
|
+
|
|
78
|
+
sage: from sage.modular.modform_hecketriangle.constructor import rational_type
|
|
79
|
+
|
|
80
|
+
sage: rational_type(0, n=4)
|
|
81
|
+
(True, True, 0, 1, zero)
|
|
82
|
+
sage: rational_type(1, n=12)
|
|
83
|
+
(True, True, 0, 1, modular)
|
|
84
|
+
|
|
85
|
+
sage: # needs sage.symbolic
|
|
86
|
+
sage: (x,y,z,d) = var("x,y,z,d")
|
|
87
|
+
sage: rational_type(x^3 - y^2)
|
|
88
|
+
(True, True, 12, 1, cuspidal)
|
|
89
|
+
sage: rational_type(x * z, n=7)
|
|
90
|
+
(True, True, 14/5, -1, quasi modular)
|
|
91
|
+
sage: rational_type(1/(x^3 - y^2) + z/d)
|
|
92
|
+
(True, False, None, None, quasi weakly holomorphic modular)
|
|
93
|
+
sage: rational_type(x^3/(x^3 - y^2))
|
|
94
|
+
(True, True, 0, 1, weakly holomorphic modular)
|
|
95
|
+
sage: rational_type(1/(x + z))
|
|
96
|
+
(False, False, None, None, None)
|
|
97
|
+
sage: rational_type(1/x + 1/z)
|
|
98
|
+
(True, False, None, None, quasi meromorphic modular)
|
|
99
|
+
sage: rational_type(d/x, n=10)
|
|
100
|
+
(True, True, -1/2, 1, meromorphic modular)
|
|
101
|
+
sage: rational_type(1.1 * z * (x^8-y^2), n=8, base_ring=CC)
|
|
102
|
+
(True, True, 22/3, -1, quasi cuspidal)
|
|
103
|
+
sage: rational_type(x-y^2, n=infinity)
|
|
104
|
+
(True, True, 4, 1, modular)
|
|
105
|
+
sage: rational_type(x*(x-y^2), n=infinity)
|
|
106
|
+
(True, True, 8, 1, cuspidal)
|
|
107
|
+
sage: rational_type(1/x, n=infinity)
|
|
108
|
+
(True, True, -4, 1, weakly holomorphic modular)
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
from .analytic_type import AnalyticType
|
|
112
|
+
AT = AnalyticType()
|
|
113
|
+
|
|
114
|
+
# Determine whether f is zero
|
|
115
|
+
if (f == 0):
|
|
116
|
+
# elem, homo, k, ep, analytic_type
|
|
117
|
+
return (True, True, QQ(0), ZZ(1), AT([]))
|
|
118
|
+
|
|
119
|
+
analytic_type = AT(["quasi", "mero"])
|
|
120
|
+
|
|
121
|
+
R = PolynomialRing(base_ring, 'x,y,z,d')
|
|
122
|
+
F = FractionField(R)
|
|
123
|
+
x, y, z, d = R.gens()
|
|
124
|
+
R2 = PolynomialRing(PolynomialRing(base_ring, 'd'), 'x,y,z')
|
|
125
|
+
dhom = R.hom(R2.gens() + (R2.base().gen(),), R2)
|
|
126
|
+
|
|
127
|
+
f = F(f)
|
|
128
|
+
|
|
129
|
+
num = R(f.numerator())
|
|
130
|
+
denom = R(f.denominator())
|
|
131
|
+
ep_num = {ZZ.one() - 2*((sum([g.exponents()[0][m] for m in [1, 2]])) % 2) for g in dhom(num).monomials()}
|
|
132
|
+
ep_denom = {ZZ.one() - 2*((sum([g.exponents()[0][m] for m in [1, 2]])) % 2) for g in dhom(denom).monomials()}
|
|
133
|
+
|
|
134
|
+
if (n == infinity):
|
|
135
|
+
hom_num = R(num.subs(x=x**4, y=y**2, z=z**2))
|
|
136
|
+
hom_denom = R(denom.subs(x=x**4, y=y**2, z=z**2))
|
|
137
|
+
else:
|
|
138
|
+
n = ZZ(n)
|
|
139
|
+
hom_num = R(num.subs(x=x**4, y=y**(2*n), z=z**(2*(n-2))))
|
|
140
|
+
hom_denom = R(denom.subs(x=x**4, y=y**(2*n), z=z**(2*(n-2))))
|
|
141
|
+
|
|
142
|
+
# Determine whether the denominator of f is homogeneous
|
|
143
|
+
if (len(ep_denom) == 1 and dhom(hom_denom).is_homogeneous()):
|
|
144
|
+
elem = True
|
|
145
|
+
else:
|
|
146
|
+
# elem, homo, k, ep, analytic_type
|
|
147
|
+
return (False, False, None, None, None)
|
|
148
|
+
|
|
149
|
+
# Determine whether f is homogeneous
|
|
150
|
+
if len(ep_num) == 1 and dhom(hom_num).is_homogeneous():
|
|
151
|
+
homo = True
|
|
152
|
+
if n == infinity:
|
|
153
|
+
weight = (dhom(hom_num).degree() - dhom(hom_denom).degree())
|
|
154
|
+
else:
|
|
155
|
+
weight = (dhom(hom_num).degree() - dhom(hom_denom).degree()) / (n-2)
|
|
156
|
+
ep = ep_num.pop() / ep_denom.pop()
|
|
157
|
+
# TODO: decompose f (resp. its degrees) into homogeneous parts
|
|
158
|
+
else:
|
|
159
|
+
homo = False
|
|
160
|
+
weight = None
|
|
161
|
+
ep = None
|
|
162
|
+
|
|
163
|
+
# Note that we intentionally leave out the d-factor!
|
|
164
|
+
if n == infinity:
|
|
165
|
+
finf_pol = (x-y**2)
|
|
166
|
+
else:
|
|
167
|
+
finf_pol = x**n-y**2
|
|
168
|
+
|
|
169
|
+
# Determine whether f is modular
|
|
170
|
+
if not (num.degree(z) > 0 or denom.degree(z) > 0):
|
|
171
|
+
analytic_type = analytic_type.reduce_to("mero")
|
|
172
|
+
|
|
173
|
+
# Determine whether f is holomorphic
|
|
174
|
+
if dhom(denom).is_constant():
|
|
175
|
+
analytic_type = analytic_type.reduce_to(["quasi", "holo"])
|
|
176
|
+
# Determine whether f is cuspidal in the sense that finf divides it...
|
|
177
|
+
# Bug in singular: finf_pol.divides(1.0) fails over RR
|
|
178
|
+
if (not dhom(num).is_constant() and finf_pol.divides(num)):
|
|
179
|
+
if (n != infinity or x.divides(num)):
|
|
180
|
+
analytic_type = analytic_type.reduce_to(["quasi", "cusp"])
|
|
181
|
+
else:
|
|
182
|
+
# -> Because of a bug with singular in some cases
|
|
183
|
+
try:
|
|
184
|
+
while finf_pol.divides(denom):
|
|
185
|
+
# a simple "denom /= finf_pol" is strangely not enough for non-exact rings
|
|
186
|
+
# and dividing would/may result with an element of the quotient ring of the polynomial ring
|
|
187
|
+
denom = denom.quo_rem(finf_pol)[0]
|
|
188
|
+
denom = R(denom)
|
|
189
|
+
if (n == infinity):
|
|
190
|
+
while (x.divides(denom)):
|
|
191
|
+
# a simple "denom /= x" is strangely not enough for non-exact rings
|
|
192
|
+
# and dividing would/may result with an element of the quotient ring of the polynomial ring
|
|
193
|
+
denom = denom.quo_rem(x)[0]
|
|
194
|
+
denom = R(denom)
|
|
195
|
+
except TypeError:
|
|
196
|
+
pass
|
|
197
|
+
|
|
198
|
+
# Determine whether f is weakly holomorphic in the sense that at most powers of finf occur in denom
|
|
199
|
+
if (dhom(denom).is_constant()):
|
|
200
|
+
analytic_type = analytic_type.reduce_to(["quasi", "weak"])
|
|
201
|
+
|
|
202
|
+
return (elem, homo, weight, ep, analytic_type)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def FormsSpace(analytic_type, group=3, base_ring=ZZ, k=QQ(0), ep=None):
|
|
206
|
+
r"""
|
|
207
|
+
Return the FormsSpace with the given ``analytic_type``, ``group``
|
|
208
|
+
``base_ring`` and degree (``k``, ``ep``).
|
|
209
|
+
|
|
210
|
+
INPUT:
|
|
211
|
+
|
|
212
|
+
- ``analytic_type`` -- an element of ``AnalyticType()`` describing
|
|
213
|
+
the analytic type of the space
|
|
214
|
+
|
|
215
|
+
- ``group`` -- the index of the (Hecke triangle) group of the space (default: `3`)
|
|
216
|
+
|
|
217
|
+
- ``base_ring`` -- the base ring of the space (default: ``ZZ``)
|
|
218
|
+
|
|
219
|
+
- ``k`` -- the weight of the space, a rational number (default: ``0``)
|
|
220
|
+
|
|
221
|
+
- ``ep`` -- the multiplier of the space, `1`, `-1` or ``None``
|
|
222
|
+
(in which case ``ep`` should be determined from ``k``). Default: ``None``.
|
|
223
|
+
|
|
224
|
+
For the variables ``group``, ``base_ring``, ``k``, ``ep``
|
|
225
|
+
the same arguments as for the class ``FormsSpace_abstract`` can be used.
|
|
226
|
+
The variables will then be put in canonical form.
|
|
227
|
+
In particular the multiplier ``ep`` is calculated
|
|
228
|
+
as usual from ``k`` if ``ep == None``.
|
|
229
|
+
|
|
230
|
+
OUTPUT: the FormsSpace with the given properties
|
|
231
|
+
|
|
232
|
+
EXAMPLES::
|
|
233
|
+
|
|
234
|
+
sage: from sage.modular.modform_hecketriangle.constructor import FormsSpace
|
|
235
|
+
sage: FormsSpace([])
|
|
236
|
+
ZeroForms(n=3, k=0, ep=1) over Integer Ring
|
|
237
|
+
sage: FormsSpace(["quasi"]) # not implemented
|
|
238
|
+
|
|
239
|
+
sage: FormsSpace("cusp", group=5, base_ring=CC, k=12, ep=1)
|
|
240
|
+
CuspForms(n=5, k=12, ep=1) over Complex Field with 53 bits of precision
|
|
241
|
+
|
|
242
|
+
sage: FormsSpace("holo")
|
|
243
|
+
ModularForms(n=3, k=0, ep=1) over Integer Ring
|
|
244
|
+
|
|
245
|
+
sage: FormsSpace("weak", group=6, base_ring=ZZ, k=0, ep=-1)
|
|
246
|
+
WeakModularForms(n=6, k=0, ep=-1) over Integer Ring
|
|
247
|
+
|
|
248
|
+
sage: FormsSpace("mero", group=7, base_ring=ZZ, k=2, ep=-1)
|
|
249
|
+
MeromorphicModularForms(n=7, k=2, ep=-1) over Integer Ring
|
|
250
|
+
|
|
251
|
+
sage: FormsSpace(["quasi", "cusp"], group=5, base_ring=CC, k=12, ep=1)
|
|
252
|
+
QuasiCuspForms(n=5, k=12, ep=1) over Complex Field with 53 bits of precision
|
|
253
|
+
|
|
254
|
+
sage: FormsSpace(["quasi", "holo"])
|
|
255
|
+
QuasiModularForms(n=3, k=0, ep=1) over Integer Ring
|
|
256
|
+
|
|
257
|
+
sage: FormsSpace(["quasi", "weak"], group=6, base_ring=ZZ, k=0, ep=-1)
|
|
258
|
+
QuasiWeakModularForms(n=6, k=0, ep=-1) over Integer Ring
|
|
259
|
+
|
|
260
|
+
sage: FormsSpace(["quasi", "mero"], group=7, base_ring=ZZ, k=2, ep=-1)
|
|
261
|
+
QuasiMeromorphicModularForms(n=7, k=2, ep=-1) over Integer Ring
|
|
262
|
+
|
|
263
|
+
sage: FormsSpace(["quasi", "cusp"], group=infinity, base_ring=ZZ, k=2, ep=-1)
|
|
264
|
+
QuasiCuspForms(n=+Infinity, k=2, ep=-1) over Integer Ring
|
|
265
|
+
"""
|
|
266
|
+
|
|
267
|
+
from .space import canonical_parameters
|
|
268
|
+
(group, base_ring, k, ep, n) = canonical_parameters(group, base_ring, k, ep)
|
|
269
|
+
|
|
270
|
+
from .analytic_type import AnalyticType
|
|
271
|
+
AT = AnalyticType()
|
|
272
|
+
analytic_type = AT(analytic_type)
|
|
273
|
+
|
|
274
|
+
if analytic_type <= AT("mero"):
|
|
275
|
+
if analytic_type <= AT("weak"):
|
|
276
|
+
if analytic_type <= AT("holo"):
|
|
277
|
+
if analytic_type <= AT("cusp"):
|
|
278
|
+
if analytic_type <= AT([]):
|
|
279
|
+
from .space import ZeroForm
|
|
280
|
+
return ZeroForm(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
281
|
+
else:
|
|
282
|
+
from .space import CuspForms
|
|
283
|
+
return CuspForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
284
|
+
else:
|
|
285
|
+
from .space import ModularForms
|
|
286
|
+
return ModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
287
|
+
else:
|
|
288
|
+
from .space import WeakModularForms
|
|
289
|
+
return WeakModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
290
|
+
else:
|
|
291
|
+
from .space import MeromorphicModularForms
|
|
292
|
+
return MeromorphicModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
293
|
+
elif analytic_type <= AT(["mero", "quasi"]):
|
|
294
|
+
if analytic_type <= AT(["weak", "quasi"]):
|
|
295
|
+
if analytic_type <= AT(["holo", "quasi"]):
|
|
296
|
+
if analytic_type <= AT(["cusp", "quasi"]):
|
|
297
|
+
if analytic_type <= AT(["quasi"]):
|
|
298
|
+
raise ValueError("There should be only non-quasi ZeroForms. That could be changed but then this exception should be removed.")
|
|
299
|
+
from .space import ZeroForm
|
|
300
|
+
return ZeroForm(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
301
|
+
else:
|
|
302
|
+
from .space import QuasiCuspForms
|
|
303
|
+
return QuasiCuspForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
304
|
+
else:
|
|
305
|
+
from .space import QuasiModularForms
|
|
306
|
+
return QuasiModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
307
|
+
else:
|
|
308
|
+
from .space import QuasiWeakModularForms
|
|
309
|
+
return QuasiWeakModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
310
|
+
else:
|
|
311
|
+
from .space import QuasiMeromorphicModularForms
|
|
312
|
+
return QuasiMeromorphicModularForms(group=group, base_ring=base_ring, k=k, ep=ep)
|
|
313
|
+
else:
|
|
314
|
+
raise NotImplementedError("Analytic type not implemented.")
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def FormsRing(analytic_type, group=3, base_ring=ZZ, red_hom=False):
|
|
318
|
+
r"""
|
|
319
|
+
Return the FormsRing with the given ``analytic_type``, ``group``
|
|
320
|
+
``base_ring`` and variable ``red_hom``.
|
|
321
|
+
|
|
322
|
+
INPUT:
|
|
323
|
+
|
|
324
|
+
- ``analytic_type`` -- an element of ``AnalyticType()`` describing
|
|
325
|
+
the analytic type of the space
|
|
326
|
+
|
|
327
|
+
- ``group`` -- the index of the (Hecke triangle) group of the space
|
|
328
|
+
(default: 3`)
|
|
329
|
+
|
|
330
|
+
- ``base_ring`` -- the base ring of the space (default: ``ZZ``)
|
|
331
|
+
|
|
332
|
+
- ``red_hom`` -- the (boolean) variable ``red_hom`` of the space
|
|
333
|
+
(default: ``False``)
|
|
334
|
+
|
|
335
|
+
For the variables ``group``, ``base_ring``, ``red_hom``
|
|
336
|
+
the same arguments as for the class :class:`FormsRing_abstract` can be used.
|
|
337
|
+
The variables will then be put in canonical form.
|
|
338
|
+
|
|
339
|
+
OUTPUT: the FormsRing with the given properties
|
|
340
|
+
|
|
341
|
+
EXAMPLES::
|
|
342
|
+
|
|
343
|
+
sage: from sage.modular.modform_hecketriangle.constructor import FormsRing
|
|
344
|
+
sage: FormsRing("cusp", group=5, base_ring=CC)
|
|
345
|
+
CuspFormsRing(n=5) over Complex Field with 53 bits of precision
|
|
346
|
+
|
|
347
|
+
sage: FormsRing("holo")
|
|
348
|
+
ModularFormsRing(n=3) over Integer Ring
|
|
349
|
+
|
|
350
|
+
sage: FormsRing("weak", group=6, base_ring=ZZ, red_hom=True)
|
|
351
|
+
WeakModularFormsRing(n=6) over Integer Ring
|
|
352
|
+
|
|
353
|
+
sage: FormsRing("mero", group=7, base_ring=ZZ)
|
|
354
|
+
MeromorphicModularFormsRing(n=7) over Integer Ring
|
|
355
|
+
|
|
356
|
+
sage: FormsRing(["quasi", "cusp"], group=5, base_ring=CC)
|
|
357
|
+
QuasiCuspFormsRing(n=5) over Complex Field with 53 bits of precision
|
|
358
|
+
|
|
359
|
+
sage: FormsRing(["quasi", "holo"])
|
|
360
|
+
QuasiModularFormsRing(n=3) over Integer Ring
|
|
361
|
+
|
|
362
|
+
sage: FormsRing(["quasi", "weak"], group=6, base_ring=ZZ, red_hom=True)
|
|
363
|
+
QuasiWeakModularFormsRing(n=6) over Integer Ring
|
|
364
|
+
|
|
365
|
+
sage: FormsRing(["quasi", "mero"], group=7, base_ring=ZZ, red_hom=True)
|
|
366
|
+
QuasiMeromorphicModularFormsRing(n=7) over Integer Ring
|
|
367
|
+
|
|
368
|
+
sage: FormsRing(["quasi", "cusp"], group=infinity)
|
|
369
|
+
QuasiCuspFormsRing(n=+Infinity) over Integer Ring
|
|
370
|
+
"""
|
|
371
|
+
|
|
372
|
+
from .graded_ring import canonical_parameters
|
|
373
|
+
(group, base_ring, red_hom, n) = canonical_parameters(group, base_ring, red_hom)
|
|
374
|
+
|
|
375
|
+
from .analytic_type import AnalyticType
|
|
376
|
+
AT = AnalyticType()
|
|
377
|
+
analytic_type = AT(analytic_type)
|
|
378
|
+
|
|
379
|
+
if analytic_type <= AT("mero"):
|
|
380
|
+
if analytic_type <= AT("weak"):
|
|
381
|
+
if analytic_type <= AT("holo"):
|
|
382
|
+
if analytic_type <= AT("cusp"):
|
|
383
|
+
if analytic_type <= AT([]):
|
|
384
|
+
raise ValueError("Analytic type Zero is not valid for forms rings.")
|
|
385
|
+
else:
|
|
386
|
+
from .graded_ring import CuspFormsRing
|
|
387
|
+
return CuspFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
388
|
+
else:
|
|
389
|
+
from .graded_ring import ModularFormsRing
|
|
390
|
+
return ModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
391
|
+
else:
|
|
392
|
+
from .graded_ring import WeakModularFormsRing
|
|
393
|
+
return WeakModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
394
|
+
else:
|
|
395
|
+
from .graded_ring import MeromorphicModularFormsRing
|
|
396
|
+
return MeromorphicModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
397
|
+
elif analytic_type <= AT(["mero", "quasi"]):
|
|
398
|
+
if analytic_type <= AT(["weak", "quasi"]):
|
|
399
|
+
if analytic_type <= AT(["holo", "quasi"]):
|
|
400
|
+
if analytic_type <= AT(["cusp", "quasi"]):
|
|
401
|
+
if analytic_type <= AT(["quasi"]):
|
|
402
|
+
raise ValueError("Analytic type Zero is not valid for forms rings.")
|
|
403
|
+
else:
|
|
404
|
+
from .graded_ring import QuasiCuspFormsRing
|
|
405
|
+
return QuasiCuspFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
406
|
+
else:
|
|
407
|
+
from .graded_ring import QuasiModularFormsRing
|
|
408
|
+
return QuasiModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
409
|
+
else:
|
|
410
|
+
from .graded_ring import QuasiWeakModularFormsRing
|
|
411
|
+
return QuasiWeakModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
412
|
+
else:
|
|
413
|
+
from .graded_ring import QuasiMeromorphicModularFormsRing
|
|
414
|
+
return QuasiMeromorphicModularFormsRing(group=group, base_ring=base_ring, red_hom=red_hom)
|
|
415
|
+
else:
|
|
416
|
+
raise NotImplementedError("Analytic type not implemented.")
|