I need the variables of a polynomial c in InfinitePolynomialRing(SR) as an element of that ring (rather than as an element of the PolynomialRing).
I understand that polynomials are hard, but does anybody see a workaround?
Martin
sage: R.<a> = InfinitePolynomialRing(SR)
sage: c = 3*a[0]
sage: c.variables()[0].parent()
Multivariate Polynomial Ring in a_1, a_0 over Symbolic Ring
sage: R(c.variables()[0])
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In [9], line 1
----> 1 R(c.variables()[Integer(0)])
File ~/sage/src/sage/structure/parent.pyx:901, in sage.structure.parent.Parent.__call__()
899 if mor is not None:
900 if no_extra_args:
--> 901 return mor._call_(x)
902 else:
903 return mor._call_with_args(x, args, kwds)
File ~/sage/src/sage/structure/coerce_maps.pyx:163, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
161 print(type(C), C)
162 print(type(C._element_constructor), C._element_constructor)
--> 163 raise
164
165 cpdef Element _call_with_args(self, x, args=(), kwds={}) noexcept:
File ~/sage/src/sage/structure/coerce_maps.pyx:158, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
156 cdef Parent C = self._codomain
157 try:
--> 158 return C._element_constructor(x)
159 except Exception:
160 if print_warnings:
File ~/sage/src/sage/rings/polynomial/infinite_polynomial_ring.py:988, in InfinitePolynomialRing_sparse._element_constructor_(self, x)
985 # By now, x or self._P are not libsingular. Since MPolynomialRing_polydict
986 # is too buggy, we use string evaluation
987 try:
--> 988 return sage_eval(repr(x), self.gens_dict())
989 except (ValueError, TypeError, NameError):
990 raise ValueError("cannot convert %s into an element of %s - no conversion into underlying polynomial ring" % (x, self))
File ~/sage/src/sage/misc/cachefunc.pyx:2329, in sage.misc.cachefunc.CachedMethodCallerNoArgs.__call__()
2327 if self.cache is None:
2328 f = self.f
-> 2329 self.cache = f(self._instance)
2330 return self.cache
2331
File ~/sage/src/sage/rings/polynomial/infinite_polynomial_ring.py:1278, in InfinitePolynomialRing_sparse.gens_dict(self)
1263 @cached_method
1264 def gens_dict(self):
1265 """
1266 Return a dictionary-like object containing the infinitely many
1267 ``{var_name:variable}`` pairs.
(...)
1276 a_5
1277 """
-> 1278 return GenDictWithBasering(self, InfiniteGenDict(self.gens()))
File ~/sage/src/sage/rings/polynomial/infinite_polynomial_ring.py:560, in GenDictWithBasering.__init__(self, parent, start)
558 while hasattr(P, 'base_ring') and (P.base_ring() is not P):
559 P = P.base_ring()
--> 560 D = P.gens_dict()
561 if isinstance(D, GenDictWithBasering):
562 self._D.extend(D._D)
File ~/sage/src/sage/structure/category_object.pyx:287, in sage.structure.category_object.CategoryObject.gens_dict()
285 """
286 if copy:
--> 287 return dict(self.__gens_dict())
288 else:
289 return self.__gens_dict()
File ~/sage/src/sage/misc/cachefunc.pyx:2329, in sage.misc.cachefunc.CachedMethodCallerNoArgs.__call__()
2327 if self.cache is None:
2328 f = self.f
-> 2329 self.cache = f(self._instance)
2330 return self.cache
2331
File ~/sage/src/sage/structure/category_object.pyx:261, in sage.structure.category_object.CategoryObject._CategoryObject__gens_dict()
259 def __gens_dict(self):
260 cdef dict v = {}
--> 261 for x in self._defining_names():
262 v[str(x)] = x
263 return v
File ~/sage/src/sage/misc/cachefunc.pyx:2329, in sage.misc.cachefunc.CachedMethodCallerNoArgs.__call__()
2327 if self.cache is None:
2328 f = self.f
-> 2329 self.cache = f(self._instance)
2330 return self.cache
2331
File ~/sage/src/sage/structure/category_object.pyx:407, in sage.structure.category_object.CategoryObject._defining_names()
405 ((1/2, 0, 0), (0, 1, 0))
406 """
--> 407 return self.gens()
408
409 #################################################################################################
File ~/sage/src/sage/structure/parent_gens.pyx:119, in sage.structure.parent_gens.ParentWithGens.gens()
117 if self._gens is not None:
118 return self._gens
--> 119 self._gens = tuple(self.gen(i) for i in range(self.ngens()))
120 return self._gens
121
File ~/sage/src/sage/structure/parent_gens.pyx:103, in sage.structure.parent_gens.ParentWithGens.ngens()
101 # Derived class *must* define ngens method.
102 def ngens(self):
--> 103 check_old_coerce(self)
104 raise NotImplementedError("Number of generators not known.")
105
File ~/sage/src/sage/structure/parent_gens.pyx:78, in sage.structure.parent_gens.check_old_coerce()
76 cdef inline check_old_coerce(parent.Parent p) noexcept:
77 if p._element_constructor is not None:
---> 78 raise RuntimeError("%s still using old coercion framework" % p)
79
80
RuntimeError: Symbolic Ring still using old coercion framework