'Inject ground domain generators into ``f``.
Examples
>>> from sympy import Poly
>>> from sympy.abc import x, y
>>> f = Poly(x**2*y + x*y**3 + x*y + 1, x)
>>> f.inject()
Poly(x**2*y + x*y**3 + x*y + 1, x, y, domain=\'ZZ\')
>>> f.inject(front=True)
Poly(y**3*x + y*x**2 + y*x + 1, y, x, domain=\'ZZ\')'

def inject(f, front=False):

    dom = f.rep.dom
    if dom.is_Numerical:
        return f
    elif (not dom.is_Poly):
        raise DomainError(("can't    inject    generators    over    %s" % dom))
    if hasattr(f.rep, 'inject'):
        result = f.rep.inject(front=front)
    else:
        raise OperationNotSupported(f, 'inject')
    if front:
        gens = (dom.symbols + f.gens)
    else:
        gens = (f.gens + dom.symbols)
    return f.new(result, *gens)
