def _element_constructor_(self, x): r""" Coerce ``x`` into an element of this function field, possibly not canonically. INPUT: - ``x`` -- the element OUTPUT: ``x``, as an element of this function field EXAMPLES:: sage: K.<t> = FunctionField(QQ) sage: a = K._element_constructor_(K.maximal_order().gen()); a t sage: a.parent() Rational function field in t over Rational Field """ if x.parent() is self._field: return FunctionFieldElement_rational(self, x) if isinstance(x, FunctionFieldElement): return FunctionFieldElement_rational(self, self._field(x.element())) if x.parent() is self.polynomial_ring(): return x[0] return FunctionFieldElement_rational(self, self._field(x))
def _element_constructor_(self, f): """ Make ``f`` into an element of this order. EXAMPLES:: sage: K.<y> = FunctionField(QQ) sage: O = K.maximal_order() sage: O._element_constructor_(y) y sage: O._element_constructor_(1/y) Traceback (most recent call last): ... ValueError: `1/y` is not a member of `Maximal order in Rational function field in y over Rational Field` """ if f.parent() is self.fraction_field(): if not f.denominator() in self.fraction_field( ).constant_base_field(): raise ValueError("`%s` is not a member of `%s`" % (f, self)) f = f.element() from function_field_element import FunctionFieldElement_rational return FunctionFieldElement_rational(self, self._ring(f))