(ex, x)
Returns the minimal polynomial of ``cos(ex)``
    see http://mathworld.wolfram.com/TrigonometryAngles.html
Returns the minimal polynomial of ``cos(ex)``
    see http://mathworld.wolfram.com/TrigonometryAngles.html
Returns the minimal polynomial of cos ( ex ) see http : // mathworld . wolfram . com / TrigonometryAngles . html
def _minpoly_cos(ex, x):
    """
    Returns the minimal polynomial of ``cos(ex)``
    see http://mathworld.wolfram.com/TrigonometryAngles.html
    """
    from sympy import sqrt
    c, a = ex.args[0].as_coeff_Mul()
    if a is pi:
        if c.is_rational:
            if c.p == 1:
                if c.q == 7:
                    return 8*x**3 - 4*x**2 - 4*x + 1
                if c.q == 9:
                    return 8*x**3 - 6*x + 1
            elif c.p == 2:
                q = sympify(c.q)
                if q.is_prime:
                    s = _minpoly_sin(ex, x)
                    return _mexpand(s.subs({x:sqrt((1 - x)/2)}))

            # for a = pi*p/q, cos(q*a) =T_q(cos(a)) = (-1)**p
            n = int(c.q)
            a = dup_chebyshevt(n, ZZ)
            a = [x**(n - i)*a[i] for i in range(n + 1)]
            r = Add(*a) - (-1)**c.p
            _, factors = factor_list(r)
            res = _choose_factor(factors, x, ex)
            return res

    raise NotAlgebraic("%s doesn't seem to be an algebraic element" % ex)
def _minpoly_cos ( ex , x ) : from sympy import sqrt c , a = ex . args [ 0 ] . as_coeff_Mul ( ) if a is pi : if c . is_rational : if c . p == 1 : if c . q == 7 : return 8 * x ** 3 - 4 * x ** 2 - 4 * x + 1 if c . q == 9 : return 8 * x ** 3 - 6 * x + 1 elif c . p == 2 : q = sympify ( c . q ) if q . is_prime : s = _minpoly_sin ( ex , x ) return _mexpand ( s . subs ( { x : sqrt ( ( 1 - x ) / 2 ) } ) ) # for a = pi*p/q, cos(q*a) =T_q(cos(a)) = (-1)**p n = int ( c . q ) a = dup_chebyshevt ( n , ZZ ) a = [ x ** ( n - i ) * a [ i ] for i in range ( n + 1 ) ] r = Add ( * a ) - ( - 1 ) ** c . p _ , factors = factor_list ( r ) res = _choose_factor ( factors , x , ex ) return res raise NotAlgebraic ( "%s doesn't seem to be an algebraic element" % ex )