# Help with subs This minimal non-working example returns an output of 'z'. I want 'z^3'! Any help?

B = FunctionField(QQ,'z')
B.inject_variables()
g = z
g.subs(z=z^3)

edit retag close merge delete

The minimal non-working example would probably skip the line defining g and just do z.subs(z=z^3).

Sort by » oldest newest most voted Edit: this is not an answer to the question, but together with the comments below, it may be useful, so I will leave it here.

sage: B = FunctionField(QQ,'z')
sage: B.inject_variables()
Defining z
sage: g = z
sage: g.subs(z=z^3)
z
sage: g(z) = z
sage: g.subs(z=z^3)
z |--> z^3
sage: g = z
sage: g.subs(z=z^3)
z^3


This also "works":

sage: B = FunctionField(QQ,'z')
sage: B.inject_variables()
Defining z
sage: h(z) = z
sage: g = z
sage: g.subs(z=z^3)
z^3

more

1

It's because g(z) = z redefines z as a symbolic expression and g as a callable symbolic expression:

sage: preparse('g(z) = z')
'__tmp__=var("z"); g = symbolic_expression(z).function(z)'


@eric_g: you're right, h(z) = z completely destroys the old meaning of z. I think I might prefer g(z) = ... to raise an error unless I explicitly do var('z') first, but that's not the default behavior.

@john-palmieri: I agree, having h(z) = z silently injecting z in the global namespace is not desirable; I guess that this is a kind of convenience feature that was introduced at the beginning of Sage, but the side effects are too severe IMHO.

@emmanuel-charpentier: it's too bad that subs works with generators of a polynomial ring but not apparently with the named generator of a function field.