def chebfromroots(roots):
if len(roots) == <NUM_LIT:0>:<EOL><INDENT>return np.ones(<NUM_LIT:1>)<EOL><DEDENT>else:<EOL><INDENT>[roots] = pu.as_series([roots], trim=False)<EOL>roots.sort()<EOL>p = [chebline(-r, <NUM_LIT:1>) for r in roots]<EOL>n = len(p)<EOL>while n > <NUM_LIT:1>:<EOL><INDENT>m, r = divmod(n, <NUM_LIT:2>)<EOL>tmp = [chebmul(p[i], p[i+m]) for i in range(m)]<EOL>if r:<EOL><INDENT>tmp[<NUM_LIT:0>] = chebmul(tmp[<NUM_LIT:0>], p[-<NUM_LIT:1>])<EOL><DEDENT>p = tmp<EOL>n = m<EOL><DEDENT>return p[<NUM_LIT:0>]<EOL><DEDENT>
Generate a Chebyshev series with given roots.

The function returns the coefficients of the polynomial

.. math:: p(x) = (x - r_0) * (x - r_1) * ... * (x - r_n),

in Chebyshev form, where the `r_n` are the roots specified in `roots`.
If a zero has multiplicity n, then it must appear in `roots` n times.
For instance, if 2 is a root of multiplicity three and 3 is a root of
multiplicity 2, then `roots` looks something like [2, 2, 2, 3, 3]. The
roots can appear in any order.

If the returned coefficients are `c`, then

.. math:: p(x) = c_0 + c_1 * T_1(x) + ... +  c_n * T_n(x)

The coefficient of the last term is not generally 1 for monic
polynomials in Chebyshev form.

Parameters
----------
roots : array_like
    Sequence containing the roots.

Returns
-------
out : ndarray
    1-D array of coefficients.  If all roots are real then `out` is a
    real array, if some of the roots are complex, then `out` is complex
    even if all the coefficients in the result are real (see Examples
    below).

See Also
--------
polyfromroots, legfromroots, lagfromroots, hermfromroots,
hermefromroots.

Examples
--------
>>> import numpy.polynomial.chebyshev as C
>>> C.chebfromroots((-1,0,1)) # x^3 - x relative to the standard basis
array([ 0.  , -0.25,  0.  ,  0.25])
>>> j = complex(0,1)
>>> C.chebfromroots((-j,j)) # x^2 + 1 relative to the standard basis
array([ 1.5+0.j,  0.0+0.j,  0.5+0.j])