'Construct an indexed complex root of a polynomial.
See ``rootof`` for the parameters.
The default value of ``radicals`` is ``False`` to satisfy
``eval(srepr(expr) == expr``.'

def __new__(cls, f, x, index=None, radicals=False, expand=True):

    x = sympify(x)
    if ((index is None) and x.is_Integer):
        (x, index) = (None, x)
    else:
        index = sympify(index)
    if ((index is not None) and index.is_Integer):
        index = int(index)
    else:
        raise ValueError(('expected    an    integer    root    index,    got    %s' % index))
    poly = PurePoly(f, x, greedy=False, expand=expand)
    if (not poly.is_univariate):
        raise PolynomialError('only    univariate    polynomials    are    allowed')
    degree = poly.degree()
    if (degree <= 0):
        raise PolynomialError(("can't    construct    CRootOf    object    for    %s" % f))
    if ((index < (- degree)) or (index >= degree)):
        raise IndexError(('root    index    out    of    [%d,    %d]    range,    got    %d' % ((- degree), (degree - 1), index)))
    elif (index < 0):
        index += degree
    dom = poly.get_domain()
    if (not dom.is_Exact):
        poly = poly.to_exact()
    roots = cls._roots_trivial(poly, radicals)
    if (roots is not None):
        return roots[index]
    (coeff, poly) = preprocess_roots(poly)
    dom = poly.get_domain()
    if (not dom.is_ZZ):
        raise NotImplementedError(('CRootOf    is    not    supported    over    %s' % dom))
    root = cls._indexed_root(poly, index)
    return (coeff * cls._postprocess_root(root, radicals))
