# Can I get a polynomial type from a symbolic expression type?

I am doing some things to a symbolic variable C...

sage: C = var('C')
sage: # ... do a whole bunch of stuff with C as a symbolic variable,
sage: # and at some point get
sage: g = solve(f, C)
sage: print(g)
[0 == 25*C^5 - 325*C^4 + 16276*C^3 - 228488*C^2 - 5940688]
sage: # implicit solution is polynomial in C


... resulting in a polynomial in C that is typed as a symbolic expression:

sage: print g.rhs()
25*C^5 - 325*C^4 + 16276*C^3 - 228488*C^2 - 5940688
sage: type(g.rhs())
<type 'sage.symbolic.expression.Expression'>


I need to call quo_rem on this expression, so I need it to be a

<type 'sage.rings.polynomial.polynomial_rational_flint.Polynomial_rational_flint'>


I can copy and paste the output of print(g.rhs()) into something new and get

sage: P.<C> = PolynomialRing(QQ)
sage: p0 = 25*C^5 - 325*C^4 + 16276*C^3 - 228488*C^2 - 5940688
sage: type(p0)
<type 'sage.rings.polynomial.polynomial_rational_flint.Polynomial_rational_flint'>


and now I can call quo_rem on p0.

How can I get the polynomial type out of the symbolic expression without having to resort to copy and paste?

edit retag close merge delete

Sort by » oldest newest most voted Like that ?

P.<C> = PolynomialRing(QQ)
P(g.rhs())


A basic example:

sage: P = PolynomialRing(QQ,'x')
sage: type(x)
<type 'sage.symbolic.expression.Expression'>
sage: P(x**3+4)
x^3 + 4
sage: type(P)
<class 'sage.rings.polynomial.polynomial_ring.PolynomialRing_field_with_category'>

more

It's even easier than in Frédéric's answer:

sage: C = var('C')
sage: g=25*C^5 - 325*C^4 + 16276*C^3 - 228488*C^2 - 5940688
sage: type(g)
<type 'sage.symbolic.expression.Expression'>
sage: g.polynomial(QQ)
25*C^5 - 325*C^4 + 16276*C^3 - 228488*C^2 - 5940688
sage: type(_)
<type 'sage.rings.polynomial.polynomial_rational_flint.Polynomial_rational_flint'>

more