(ex, x)
Returns the minimal polynomial of ``sin(ex)``
    see http://mathworld.wolfram.com/TrigonometryAngles.html
Returns the minimal polynomial of ``sin(ex)``
    see http://mathworld.wolfram.com/TrigonometryAngles.html
Returns the minimal polynomial of sin ( ex ) see http : // mathworld . wolfram . com / TrigonometryAngles . html
def _minpoly_sin(ex, x):
    """
    Returns the minimal polynomial of ``sin(ex)``
    see http://mathworld.wolfram.com/TrigonometryAngles.html
    """
    from sympy.functions.combinatorial.factorials import binomial
    c, a = ex.args[0].as_coeff_Mul()
    if a is pi:
        if c.is_rational:
            n = c.q
            q = sympify(n)
            if q.is_prime:
                # for a = pi*p/q with q odd prime, using chebyshevt
                # write sin(q*a) = mp(sin(a))*sin(a);
                # the roots of mp(x) are sin(pi*p/q) for p = 1,..., q - 1
                a = dup_chebyshevt(n, ZZ)
                return Add(*[x**(n - i - 1)*a[i] for i in range(n)])
            if c.p == 1:
                if q == 9:
                    return 64*x**6 - 96*x**4 + 36*x**2 - 3

            if n % 2 == 1:
                # for a = pi*p/q with q odd, use
                # sin(q*a) = 0 to see that the minimal polynomial must be
                # a factor of dup_chebyshevt(n, ZZ)
                a = dup_chebyshevt(n, ZZ)
                a = [x**(n - i)*a[i] for i in range(n + 1)]
                r = Add(*a)
                _, factors = factor_list(r)
                res = _choose_factor(factors, x, ex)
                return res

            expr = ((1 - C.cos(2*c*pi))/2)**S.Half
            res = _minpoly_compose(expr, x, QQ)
            return res

    raise NotAlgebraic("%s doesn't seem to be an algebraic element" % ex)
def _minpoly_sin ( ex , x ) : from sympy . functions . combinatorial . factorials import binomial c , a = ex . args [ 0 ] . as_coeff_Mul ( ) if a is pi : if c . is_rational : n = c . q q = sympify ( n ) if q . is_prime : # for a = pi*p/q with q odd prime, using chebyshevt # write sin(q*a) = mp(sin(a))*sin(a); # the roots of mp(x) are sin(pi*p/q) for p = 1,..., q - 1 a = dup_chebyshevt ( n , ZZ ) return Add ( * [ x ** ( n - i - 1 ) * a [ i ] for i in range ( n ) ] ) if c . p == 1 : if q == 9 : return 64 * x ** 6 - 96 * x ** 4 + 36 * x ** 2 - 3 if n % 2 == 1 : # for a = pi*p/q with q odd, use # sin(q*a) = 0 to see that the minimal polynomial must be # a factor of dup_chebyshevt(n, ZZ) a = dup_chebyshevt ( n , ZZ ) a = [ x ** ( n - i ) * a [ i ] for i in range ( n + 1 ) ] r = Add ( * a ) _ , factors = factor_list ( r ) res = _choose_factor ( factors , x , ex ) return res expr = ( ( 1 - C . cos ( 2 * c * pi ) ) / 2 ) ** S . Half res = _minpoly_compose ( expr , x , QQ ) return res raise NotAlgebraic ( "%s doesn't seem to be an algebraic element" % ex )