I'm trying to implement a polynomial ring of two variables, where the coefficient ring is the ring of quasimodular forms (code). I did
QM = QuasiModularForms(1)
PQM.<v1,v2> = QM['v1,v2']
and I got the following error:
TypeError Traceback (most recent call last)
Cell In [9], line 2
1 QM = QuasiModularForms(Integer(1))
----> 2 PQM = QM['v1,v2']; (v1, v2,) = PQM._first_ngens(2)
File /private/var/tmp/sage-9.8-current/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sage/structure/parent.pyx:1274, in sage.structure.parent.Parent.__getitem__ (build/cythonized/sage/structure/parent.c:11540)()
1272 except AttributeError:
1273 return self.list()[n]
-> 1274 return meth(n)
1275
1276 #########################################################################
File /private/var/tmp/sage-9.8-current/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sage/categories/rings.py:1220, in Rings.ParentMethods.__getitem__(self, arg)
1217 # 2. Otherwise, try to return a polynomial ring
1219 from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing
-> 1220 return PolynomialRing(self, elts)
File /private/var/tmp/sage-9.8-current/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py:693, in PolynomialRing(base_ring, *args, **kwds)
690 raise TypeError("variable names specified twice inconsistently: %r and %r" % (names, kwnames))
692 if multivariate or len(names) != 1:
--> 693 return _multi_variate(base_ring, names, **kwds)
694 else:
695 return _single_variate(base_ring, names, **kwds)
File /private/var/tmp/sage-9.8-current/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sage/rings/polynomial/polynomial_ring_constructor.py:844, in _multi_variate(base_ring, names, sparse, order, implementation)
842 else:
843 constructor = multi_polynomial_ring.MPolynomialRing_polydict
--> 844 R = constructor(base_ring, n, names, order)
846 if R is None:
847 raise ValueError("unknown implementation %r for multivariate polynomial rings" % (implementation,))
File /private/var/tmp/sage-9.8-current/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sage/rings/polynomial/multi_polynomial_ring.py:130, in MPolynomialRing_polydict.__init__(self, base_ring, n, names, order)
128 self._gens = tuple(self._gens)
129 self._zero_tuple = tuple(v)
--> 130 MPolynomialRing_base.__init__(self, base_ring, n, names, order)
131 self._has_singular = can_convert_to_singular(self)
File /private/var/tmp/sage-9.8-current/local/var/lib/sage/venv-python3.11.1/lib/python3.11/site-packages/sage/rings/polynomial/multi_polynomial_ring_base.pyx:84, in sage.rings.polynomial.multi_polynomial_ring_base.MPolynomialRing_base.__init__ (build/cythonized/sage/rings/polynomial/multi_polynomial_ring_base.c:4101)()
82 """
83 if base_ring not in _CommutativeRings:
---> 84 raise TypeError("The base ring %s is not a commutative ring" % base_ring)
85
86 n = int(n)
TypeError: The base ring Ring of Quasimodular Forms for Modular Group SL(2,Z) over Rational Field is not a commutative ring
So first of all, the ring of quasimodular forms is a commutative ring - the default coefficient is over the rationals. I tried to look at the details of the implementation, and here's what I found. The ring QuasiModularForms
is essentially a polynomial ring of one variable (E2
) with coefficient ModularForms
(code), and the ring ModularForms
is also a polynomial ring with certain generators. Hence if the base field is just rationals QQ
, then everything should be a commutative ring (which is true mathematically). I wonder if there's a way to make it as a commutative ring in Sage. Thanks in advance.