예제 #1
0
def test_minimal_polynomial_rootof(method):
    e = RootOf(
        x**4 - 3 * x**3 + x**2 * (-3 * sqrt(2) + 1) + 2 * sqrt(2) * x + 2, 0)
    assert (minimal_polynomial(e, method=method)(x) == x**8 - 6 * x**7 +
            11 * x**6 - 6 * x**5 - 13 * x**4 + 12 * x**3 - 4 * x**2 + 4)
    assert minimal_polynomial(e, method=method,
                              domain=e.poly.domain)(y) == e.poly(y)
예제 #2
0
def test_abs_re_im(method):
    # issue diofant/diofant#662
    e1 = abs(sqrt(1 + sqrt(2 + I)))
    e2 = re(sqrt(I), evaluate=False)
    e3 = im(sqrt(I), evaluate=False)
    assert (minimal_polynomial(e1, method=method)(x) == x**16 - 4 * x**12 -
            12 * x**8 - 8 * x**4 + 4)
    assert minimal_polynomial(e2, method=method)(x) == 2 * x**2 - 1
    assert minimal_polynomial(e3, method=method)(x) == 2 * x**2 - 1
예제 #3
0
def test_diofantissue_662():
    e1 = abs(sqrt(1 + sqrt(2 + I)))
    e2 = re(sqrt(I), evaluate=False)
    e3 = im(sqrt(I), evaluate=False)
    for meth in ('compose', 'groebner'):
        assert (minimal_polynomial(e1, method=meth)(x) ==
                x**16 - 4*x**12 - 12*x**8 - 8*x**4 + 4)
        assert minimal_polynomial(e2, method=meth)(x) == 2*x**2 - 1
        assert minimal_polynomial(e3, method=meth)(x) == 2*x**2 - 1
예제 #4
0
def test_minimal_polynomial_sq():
    p = expand_multinomial((1 + 5 * sqrt(2) + 2 * sqrt(3))**3)
    mp = minimal_polynomial(cbrt(p))(x)
    assert mp == x**4 - 4 * x**3 - 118 * x**2 + 244 * x + 1321
    p = expand_multinomial((1 + sqrt(2) - 2 * sqrt(3) + sqrt(7))**3)
    mp = minimal_polynomial(cbrt(p))(x)
    assert mp == x**8 - 8 * x**7 - 56 * x**6 + 448 * x**5 + 480 * x**4 - 5056 * x**3 + 1984 * x**2 + 7424 * x - 3008
    p = Add(*[sqrt(i) for i in range(1, 12)])
    mp = minimal_polynomial(p)(x)
    assert mp.subs({x: 0}) == -71965773323122507776
예제 #5
0
def test_minimal_polynomial_conjugate():
    e = sqrt(1 + sqrt(2 + I))
    ec = conjugate(e)
    for meth in ('compose', 'groebner'):
        assert (minimal_polynomial(ec, method=meth)(x) == minimal_polynomial(
            e, method=meth)(x) == x**8 - 4 * x**6 + 2 * x**4 + 4 * x**2 + 2)
        assert (minimal_polynomial(
            (e + ec) / 2, method=meth)(x) == 4096 * x**16 - 16384 * x**14 +
                20480 * x**12 - 12288 * x**10 - 1152 * x**8 + 3328 * x**6 -
                1600 * x**4 + 64 * x**2 + 1)
예제 #6
0
def test_minimal_polynomial_hi_prec():
    p = 1 / sqrt(1 - 9 * sqrt(2) + 7 * sqrt(3) + Rational(1, 10)**30)
    mp = minimal_polynomial(p)(x)
    # checked with Wolfram Alpha
    assert mp.coeff(
        x**6
    ) == -1232000000000000000000000000001223999999999999999999999999999987999999999999999999999999999996000000000000000000000000000000
예제 #7
0
def test_sympyissue_5934():
    e = ((-240 * sqrt(2) * sqrt(sqrt(5) + 5) * sqrt(8 * sqrt(5) + 40) -
          360 * sqrt(2) * sqrt(-8 * sqrt(5) + 40) * sqrt(-sqrt(5) + 5) -
          120 * sqrt(10) * sqrt(-8 * sqrt(5) + 40) * sqrt(-sqrt(5) + 5) +
          120 * sqrt(2) * sqrt(-8 * sqrt(5) + 40) * sqrt(sqrt(5) + 5) +
          120 * sqrt(2) * sqrt(-sqrt(5) + 5) * sqrt(8 * sqrt(5) + 40) +
          120 * sqrt(10) * sqrt(-8 * sqrt(5) + 40) * sqrt(sqrt(5) + 5) +
          120 * sqrt(10) * sqrt(-sqrt(5) + 5) * sqrt(8 * sqrt(5) + 40)) /
         (-36000 - 7200 * sqrt(5) + (12 * sqrt(10) * sqrt(sqrt(5) + 5) +
                                     24 * sqrt(10) * sqrt(-sqrt(5) + 5))**2))
    assert [minimal_polynomial(i)(x) for i in e.as_numer_denom()] == [x] * 2
예제 #8
0
def test_minpoly_domain():
    F = QQ.algebraic_field(sqrt(2))

    assert minimal_polynomial(sqrt(2), domain=F) == PurePoly(x - sqrt(2), x, domain=F)
    assert minimal_polynomial(sqrt(8), domain=F)(x) == x - 2*sqrt(2)
    assert minimal_polynomial(sqrt(Rational(3, 2)), domain=F)(x) == 2*x**2 - 3

    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(y, domain=QQ))

    # issue sympy/sympy#14494

    F = QQ.algebraic_field(I)
    assert minimal_polynomial(I, domain=F)(x) == x - I

    F = QQ.algebraic_field(sqrt(3)*I)
    assert minimal_polynomial(exp(I*pi/3), domain=F)(x) == 2*x - sqrt(3)*I - 1
예제 #9
0
def test_sympyissue_19760():
    e = 1 / (sqrt(1 + sqrt(2)) - sqrt(2) * sqrt(1 + sqrt(2))) + 1

    for meth in ('compose', 'groebner'):
        minimal_polynomial(e, method=meth)(x) == x**4 - 4 * x**3 + 4 * x**2 - 2
예제 #10
0
def test_diofantissue_224():
    e = (root(root(2, 3) - 1, 3) - root(Rational(1, 9), 3) +
         root(Rational(2, 9), 3) - root(Rational(4, 9), 3))
    a, b, c, d = e.args
    assert minimal_polynomial(Add(d, a, b, c, evaluate=False))(x) == x
    assert minimal_polynomial(e)(x) == x
예제 #11
0
def test_sympyissue_14831():
    assert minimal_polynomial(-3 * sqrt(12 * sqrt(2) + 17) + 12 * sqrt(2) +
                              17 -
                              2 * sqrt(2) * sqrt(12 * sqrt(2) + 17))(x) == x
예제 #12
0
def test_minpoly_fraction_field_slow():
    assert minimal_polynomial(
        minimal_polynomial(sqrt(root(x, 5) - 1))(y).subs(
            {y: sqrt(root(x, 5) - 1)}))(z) == z
예제 #13
0
def test_minpoly_fraction_field():
    assert minimal_polynomial(1 / x)(y) == x * y - 1
    assert minimal_polynomial(1 / (x + 1))(y) == x * y + y - 1

    assert minimal_polynomial(sqrt(x))(y) == y**2 - x
    assert minimal_polynomial(sqrt(x), method='groebner')(y) == y**2 - x

    assert minimal_polynomial(sqrt(x + 1))(y) == y**2 - x - 1
    assert minimal_polynomial(sqrt(x) / x)(y) == x * y**2 - 1
    assert minimal_polynomial(sqrt(2) * sqrt(x))(y) == y**2 - 2 * x

    assert minimal_polynomial(sqrt(2) + sqrt(x))(y) == \
        y**4 - 2*x*y**2 - 4*y**2 + x**2 - 4*x + 4
    assert minimal_polynomial(sqrt(2) + sqrt(x), method='groebner')(y) == \
        y**4 - 2*x*y**2 - 4*y**2 + x**2 - 4*x + 4

    assert minimal_polynomial(cbrt(x))(y) == y**3 - x
    assert minimal_polynomial(cbrt(x) + sqrt(x))(y) == \
        y**6 - 3*x*y**4 - 2*x*y**3 + 3*x**2*y**2 - 6*x**2*y - x**3 + x**2

    assert minimal_polynomial(sqrt(x) / z)(y) == z**2 * y**2 - x
    assert minimal_polynomial(
        sqrt(x) / (z + 1))(y) == z**2 * y**2 + 2 * z * y**2 + y**2 - x

    assert minimal_polynomial(1 / x) == PurePoly(x * y - 1, y)
    assert minimal_polynomial(1 / (x + 1)) == PurePoly((x + 1) * y - 1, y)
    assert minimal_polynomial(sqrt(x)) == PurePoly(y**2 - x, y)
    assert minimal_polynomial(sqrt(x) / z) == PurePoly(z**2 * y**2 - x, y)

    # this is (sqrt(1 + x**3)/x).integrate(x).diff(x) - sqrt(1 + x**3)/x
    a = sqrt(x) / sqrt(1 + x**(-3)) - sqrt(x**3 + 1) / x + 1 / (
        x**Rational(5, 2) *
        (1 + x**(-3))**Rational(3, 2)) + 1 / (x**Rational(11, 2) *
                                              (1 + x**(-3))**Rational(3, 2))

    assert minimal_polynomial(a)(y) == y

    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(exp(x)))
예제 #14
0
def test_minpoly_sympyissue_7574():
    ex = -cbrt(-1) + (-1)**Rational(2, 3)
    assert minimal_polynomial(ex)(x) == x + 1
예제 #15
0
def test_minpoly_sympyissue_7113():
    # see discussion in https://github.com/sympy/sympy/pull/2234
    r = nsimplify(pi, tolerance=0.000000001)
    mp = minimal_polynomial(r)(x)
    assert mp == 1768292677839237920489538677417507171630859375*x**109 - \
        2734577732179183863586489182929671773182898498218854181690460140337930774573792597743853652058046464
예제 #16
0
def test_minpoly_compose():
    # issue sympy/sympy#6868
    eq = (-1 / (800 * sqrt(
        Rational(-1, 240) + 1 /
        (18000 * cbrt(Rational(-1, 17280000) + sqrt(15) * I / 28800000)) +
        2 * cbrt(Rational(-1, 17280000) + sqrt(15) * I / 28800000))))
    mp = minimal_polynomial(eq + 3)(x)
    assert mp == 8000 * x**2 - 48000 * x + 71999

    # issue sympy/sympy#5888
    assert minimal_polynomial(exp(I * pi / 8))(x) == x**8 + 1

    mp = minimal_polynomial(sin(pi / 7) + sqrt(2))(x)
    assert mp == 4096*x**12 - 63488*x**10 + 351488*x**8 - 826496*x**6 + \
        770912*x**4 - 268432*x**2 + 28561
    mp = minimal_polynomial(cos(pi / 7) + sqrt(2))(x)
    assert mp == 64*x**6 - 64*x**5 - 432*x**4 + 304*x**3 + 712*x**2 - \
        232*x - 239
    mp = minimal_polynomial(exp(I * pi / 7) + sqrt(2))(x)
    assert mp == x**12 - 2 * x**11 - 9 * x**10 + 16 * x**9 + 43 * x**8 - 70 * x**7 - 97 * x**6 + 126 * x**5 + 211 * x**4 - 212 * x**3 - 37 * x**2 + 142 * x + 127

    mp = minimal_polynomial(cos(pi / 9))(x)
    assert mp == 8 * x**3 - 6 * x - 1

    mp = minimal_polynomial(sin(pi / 7) + sqrt(2))(x)
    assert mp == 4096*x**12 - 63488*x**10 + 351488*x**8 - 826496*x**6 + \
        770912*x**4 - 268432*x**2 + 28561
    mp = minimal_polynomial(cos(pi / 7) + sqrt(2))(x)
    assert mp == 64*x**6 - 64*x**5 - 432*x**4 + 304*x**3 + 712*x**2 - \
        232*x - 239
    mp = minimal_polynomial(exp(I * pi / 7) + sqrt(2))(x)
    assert mp == x**12 - 2 * x**11 - 9 * x**10 + 16 * x**9 + 43 * x**8 - 70 * x**7 - 97 * x**6 + 126 * x**5 + 211 * x**4 - 212 * x**3 - 37 * x**2 + 142 * x + 127

    mp = minimal_polynomial(exp(2 * I * pi / 7))(x)
    assert mp == x**6 + x**5 + x**4 + x**3 + x**2 + x + 1
    mp = minimal_polynomial(exp(2 * I * pi / 15))(x)
    assert mp == x**8 - x**7 + x**5 - x**4 + x**3 - x + 1
    mp = minimal_polynomial(cos(2 * pi / 7))(x)
    assert mp == 8 * x**3 + 4 * x**2 - 4 * x - 1
    mp = minimal_polynomial(sin(2 * pi / 7))(x)
    ex = (5 * cos(2 * pi / 7) - 7) / (9 * cos(pi / 7) - 5 * cos(3 * pi / 7))
    mp = minimal_polynomial(ex)(x)
    assert mp == x**3 + 2 * x**2 - x - 1
    assert minimal_polynomial(-1 /
                              (2 * cos(pi / 7)))(x) == x**3 + 2 * x**2 - x - 1
    assert minimal_polynomial(sin(2*pi/15))(x) == \
        256*x**8 - 448*x**6 + 224*x**4 - 32*x**2 + 1
    assert minimal_polynomial(sin(5 * pi /
                                  14))(x) == 8 * x**3 - 4 * x**2 - 4 * x + 1
    assert minimal_polynomial(cos(
        pi / 15))(x) == 16 * x**4 + 8 * x**3 - 16 * x**2 - 8 * x + 1
    assert minimal_polynomial(cos(
        pi / 17))(x) == (256 * x**8 - 128 * x**7 - 448 * x**6 + 192 * x**5 +
                         240 * x**4 - 80 * x**3 - 40 * x**2 + 8 * x + 1)
    assert minimal_polynomial(cos(
        2 * pi / 21))(x) == (64 * x**6 - 32 * x**5 - 96 * x**4 + 48 * x**3 +
                             32 * x**2 - 16 * x + 1)

    ex = RootOf(x**3 + x * 4 + 1, 0)
    mp = minimal_polynomial(ex)(x)
    assert mp == x**3 + 4 * x + 1
    mp = minimal_polynomial(ex + 1)(x)
    assert mp == x**3 - 3 * x**2 + 7 * x - 4
    assert minimal_polynomial(exp(I * pi / 3))(x) == x**2 - x + 1
    assert minimal_polynomial(exp(I * pi / 4))(x) == x**4 + 1
    assert minimal_polynomial(exp(I * pi / 6))(x) == x**4 - x**2 + 1
    assert minimal_polynomial(exp(I * pi / 9))(x) == x**6 - x**3 + 1
    assert minimal_polynomial(exp(I * pi /
                                  10))(x) == x**8 - x**6 + x**4 - x**2 + 1
    assert minimal_polynomial(exp(I * pi / 18))(x) == x**12 - x**6 + 1
    assert minimal_polynomial(sin(
        pi / 9))(x) == 64 * x**6 - 96 * x**4 + 36 * x**2 - 3
    assert minimal_polynomial(sin(pi/11))(x) == 1024*x**10 - 2816*x**8 + \
        2816*x**6 - 1232*x**4 + 220*x**2 - 11

    ex = cbrt(2) * exp(Rational(2, 3) * I * pi)
    assert minimal_polynomial(ex)(x) == x**3 - 2

    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(cos(pi * sqrt(2))))
    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(sin(pi * sqrt(2))))
    pytest.raises(NotAlgebraic,
                  lambda: minimal_polynomial(exp(I * pi * sqrt(2))))

    # issue sympy/sympy#5934
    ex = 1 / (-36000 - 7200 * sqrt(5) +
              (12 * sqrt(10) * sqrt(sqrt(5) + 5) +
               24 * sqrt(10) * sqrt(-sqrt(5) + 5))**2) + 1
    pytest.raises(ZeroDivisionError, lambda: minimal_polynomial(ex))

    ex = sqrt(1 + cbrt(2)) + sqrt(1 + root(2, 4)) + sqrt(2)
    mp = minimal_polynomial(ex)(x)
    assert degree(mp) == 48 and mp.subs({x: 0}) == -16630256576

    mp = minimal_polynomial(sin(pi / 27))(x)
    assert mp == (262144 * x**18 - 1179648 * x**16 + 2211840 * x**14 -
                  2236416 * x**12 + 1317888 * x**10 - 456192 * x**8 +
                  88704 * x**6 - 8640 * x**4 + 324 * x**2 - 3)

    ex = sqrt(2) - RootOf(x**2 - 2, 0, radicals=False)
    for meth in ('compose', 'groebner'):
        assert minimal_polynomial(ex, method=meth)(x) == x**2 - 8
예제 #17
0
def test_sympyissue_19760(method):
    e = 1 / (sqrt(1 + sqrt(2)) - sqrt(2) * sqrt(1 + sqrt(2))) + 1
    assert minimal_polynomial(
        e, method=method)(x) == x**4 - 4 * x**3 + 4 * x**2 - 2
예제 #18
0
def test_minimal_polynomial_GoldenRatio(method):
    assert minimal_polynomial(GoldenRatio, method=method)(x) == x**2 - x - 1
예제 #19
0
def test_sympyissue_22400(method):
    e = root(2, 3) + root(3, 3) + (-1 + I * sqrt(3)) / 2 * root(5, 3)
    r = (x**27 - 90 * x**24 + 1089 * x**21 - 62130 * x**18 + 105507 * x**15 -
         16537410 * x**12 - 30081453 * x**9 - 1886601330 * x**6 +
         73062900 * x**3 - 6859000)
    assert minimal_polynomial(e, method=method)(x) == r
예제 #20
0
def test_minimal_polynomial():
    assert minimal_polynomial(-7)(x) == x + 7
    assert minimal_polynomial(-1)(x) == x + 1
    assert minimal_polynomial(+0)(x) == x
    assert minimal_polynomial(+1)(x) == x - 1
    assert minimal_polynomial(+7)(x) == x - 7

    assert minimal_polynomial(Rational(1, 3),
                              method='groebner')(x) == 3 * x - 1

    pytest.raises(NotAlgebraic,
                  lambda: minimal_polynomial(pi, method='groebner'))
    pytest.raises(NotAlgebraic,
                  lambda: minimal_polynomial(sin(sqrt(2)), method='groebner'))
    pytest.raises(NotAlgebraic,
                  lambda: minimal_polynomial(2**pi, method='groebner'))

    pytest.raises(ValueError, lambda: minimal_polynomial(1, method='spam'))

    assert minimal_polynomial(sqrt(2))(x) == x**2 - 2
    assert minimal_polynomial(sqrt(5))(x) == x**2 - 5
    assert minimal_polynomial(sqrt(6))(x) == x**2 - 6

    assert minimal_polynomial(2 * sqrt(2))(x) == x**2 - 8
    assert minimal_polynomial(3 * sqrt(5))(x) == x**2 - 45
    assert minimal_polynomial(4 * sqrt(6))(x) == x**2 - 96

    assert minimal_polynomial(2 * sqrt(2) + 3)(x) == x**2 - 6 * x + 1
    assert minimal_polynomial(3 * sqrt(5) + 6)(x) == x**2 - 12 * x - 9
    assert minimal_polynomial(4 * sqrt(6) + 7)(x) == x**2 - 14 * x - 47

    assert minimal_polynomial(2 * sqrt(2) - 3)(x) == x**2 + 6 * x + 1
    assert minimal_polynomial(3 * sqrt(5) - 6)(x) == x**2 + 12 * x - 9
    assert minimal_polynomial(4 * sqrt(6) - 7)(x) == x**2 + 14 * x - 47

    assert minimal_polynomial(sqrt(1 + sqrt(6)))(x) == x**4 - 2 * x**2 - 5
    assert minimal_polynomial(sqrt(I + sqrt(6)))(x) == x**8 - 10 * x**4 + 49

    assert minimal_polynomial(2 * I +
                              sqrt(2 + I))(x) == x**4 + 4 * x**2 + 8 * x + 37

    assert minimal_polynomial(sqrt(2) + sqrt(3))(x) == x**4 - 10 * x**2 + 1
    assert minimal_polynomial(sqrt(2) + sqrt(3) +
                              sqrt(6))(x) == x**4 - 22 * x**2 - 48 * x - 23

    e = 1 / sqrt(sqrt(1 + sqrt(3)) - 4)
    assert minimal_polynomial(e) == minimal_polynomial(e, method='groebner')
    assert minimal_polynomial(e)(x) == (222 * x**8 + 240 * x**6 + 94 * x**4 +
                                        16 * x**2 + 1)

    a = 1 - 9 * sqrt(2) + 7 * sqrt(3)

    assert minimal_polynomial(
        1 / a)(x) == 392 * x**4 - 1232 * x**3 + 612 * x**2 + 4 * x - 1
    assert minimal_polynomial(
        1 / sqrt(a))(x) == 392 * x**8 - 1232 * x**6 + 612 * x**4 + 4 * x**2 - 1

    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(oo))
    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(2**y))
    pytest.raises(NotAlgebraic, lambda: minimal_polynomial(sin(1)))

    assert minimal_polynomial(sqrt(2))(x) == x**2 - 2

    assert minimal_polynomial(sqrt(2)) == PurePoly(x**2 - 2)
    assert minimal_polynomial(sqrt(2), method='groebner') == PurePoly(x**2 - 2)

    a = sqrt(2)
    b = sqrt(3)

    assert minimal_polynomial(b)(x) == x**2 - 3

    assert minimal_polynomial(a) == PurePoly(x**2 - 2)
    assert minimal_polynomial(b) == PurePoly(x**2 - 3)

    assert minimal_polynomial(sqrt(a)) == PurePoly(x**4 - 2)
    assert minimal_polynomial(a + 1) == PurePoly(x**2 - 2 * x - 1)
    assert minimal_polynomial(sqrt(a / 2 +
                                   17))(x) == 2 * x**4 - 68 * x**2 + 577
    assert minimal_polynomial(sqrt(b / 2 +
                                   17))(x) == 4 * x**4 - 136 * x**2 + 1153

    # issue diofant/diofant#431
    K = QQ.algebraic_field(sqrt(2))
    theta = K.to_expr(K([17, Rational(1, 2)]))
    assert minimal_polynomial(theta)(x) == 2 * x**2 - 68 * x + 577

    K = QQ.algebraic_field(RootOf(x**7 + x - 1, 3))
    theta = K.to_expr(K([1, 0, 0, 2, 1]))
    ans = minimal_polynomial(theta)(x)
    assert ans == (x**7 - 7 * x**6 + 19 * x**5 - 27 * x**4 + 63 * x**3 -
                   115 * x**2 + 82 * x - 147)
    assert minimal_polynomial(theta, method='groebner')(x) == ans
    K = QQ.algebraic_field(RootOf(x**5 + 5 * x - 1, 2))
    theta = K.to_expr(K([1, -1, 1]))
    ans = (x**30 - 15 * x**28 - 10 * x**27 + 135 * x**26 + 330 * x**25 -
           705 * x**24 - 150 * x**23 + 3165 * x**22 - 6850 * x**21 +
           7182 * x**20 + 3900 * x**19 + 4435 * x**18 + 11970 * x**17 -
           259725 * x**16 - 18002 * x**15 + 808215 * x**14 - 200310 * x**13 -
           647115 * x**12 + 299280 * x**11 - 1999332 * x**10 + 910120 * x**9 +
           2273040 * x**8 - 5560320 * x**7 + 5302000 * x**6 - 2405376 * x**5 +
           1016640 * x**4 - 804480 * x**3 + 257280 * x**2 - 53760 * x + 1280)
    assert minimal_polynomial(sqrt(theta) + root(theta, 3),
                              method='groebner')(x) == ans
    K1 = QQ.algebraic_field(RootOf(x**3 + 4 * x - 15, 1))
    K2 = QQ.algebraic_field(RootOf(x**3 - x + 1, 0))
    theta = sqrt(1 + 1 / (K1.to_expr(K1([1, 0, 1])) + 1 /
                          (sqrt(3) + K2.to_expr(K2([-1, 2, 1])))))
    ans = (2262264837876687263 * x**36 - 38939909597855051866 * x**34 +
           315720420314462950715 * x**32 - 1601958657418182606114 * x**30 +
           5699493671077371036494 * x**28 - 15096777696140985506150 * x**26 +
           30847690820556462893974 * x**24 - 49706549068200640994022 * x**22 +
           64013601241426223813103 * x**20 - 66358713088213594372990 * x**18 +
           55482571280904904971976 * x**16 - 37309340229165533529076 * x**14 +
           20016999328983554519040 * x**12 - 8446273798231518826782 * x**10 +
           2738866994867366499481 * x**8 - 657825125060873756424 * x**6 +
           110036313740049140508 * x**4 - 11416087328869938298 * x**2 +
           551322649782053543)
    assert minimal_polynomial(theta)(x) == ans

    a = sqrt(2) / 3 + 7
    f = 81*x**8 - 2268*x**6 - 4536*x**5 + 22644*x**4 + 63216*x**3 - \
        31608*x**2 - 189648*x + 141358

    assert minimal_polynomial(sqrt(a) + sqrt(sqrt(a)))(x) == f

    assert minimal_polynomial(a**Rational(
        3, 2))(x) == 729 * x**4 - 506898 * x**2 + 84604519

    K = QQ.algebraic_field(RootOf(x**3 + x - 1, 0))
    a = K.to_expr(K([0, 1]))
    assert minimal_polynomial(1 / a**2)(x) == x**3 - x**2 - 2 * x - 1

    # issue sympy/sympy#5994
    eq = (-1 / (800 * sqrt(
        Rational(-1, 240) + 1 /
        (18000 * cbrt(Rational(-1, 17280000) + sqrt(15) * I / 28800000)) +
        2 * cbrt(Rational(-1, 17280000) + sqrt(15) * I / 28800000))))
    assert minimal_polynomial(eq)(x) == 8000 * x**2 - 1

    ex = 1 + sqrt(2) + sqrt(3)
    mp = minimal_polynomial(ex)(x)
    assert mp == x**4 - 4 * x**3 - 4 * x**2 + 16 * x - 8

    ex = 1 / (1 + sqrt(2) + sqrt(3))
    mp = minimal_polynomial(ex)(x)
    assert mp == 8 * x**4 - 16 * x**3 + 4 * x**2 + 4 * x - 1

    p = cbrt(expand((1 + sqrt(2) - 2 * sqrt(3) + sqrt(7))**3))
    mp = minimal_polynomial(p)(x)
    assert mp == x**8 - 8 * x**7 - 56 * x**6 + 448 * x**5 + 480 * x**4 - 5056 * x**3 + 1984 * x**2 + 7424 * x - 3008
    p = expand((1 + sqrt(2) - 2 * sqrt(3) + sqrt(7))**3)
    mp = minimal_polynomial(p)(x)
    assert mp == x**8 - 512 * x**7 - 118208 * x**6 + 31131136 * x**5 + 647362560 * x**4 - 56026611712 * x**3 + 116994310144 * x**2 + 404854931456 * x - 27216576512

    assert minimal_polynomial(-sqrt(5) / 2 - Rational(1, 2) +
                              (-sqrt(5) / 2 - Rational(1, 2))**2)(x) == x - 1
    a = 1 + sqrt(2)
    assert minimal_polynomial((a * sqrt(2) + a)**3)(x) == x**2 - 198 * x + 1

    p = 1 / (1 + sqrt(2) + sqrt(3))
    assert minimal_polynomial(
        p, method='groebner')(x) == 8 * x**4 - 16 * x**3 + 4 * x**2 + 4 * x - 1

    p = 2 / (1 + sqrt(2) + sqrt(3))
    assert minimal_polynomial(
        p, method='groebner')(x) == x**4 - 4 * x**3 + 2 * x**2 + 4 * x - 2

    assert minimal_polynomial(1 + sqrt(2) * I,
                              method='groebner')(x) == x**2 - 2 * x + 3
    assert minimal_polynomial(1 / (1 + sqrt(2)) + 1,
                              method='groebner')(x) == x**2 - 2
    assert minimal_polynomial(sqrt(2) * I + I * (1 + sqrt(2)),
                              method='groebner')(x) == x**4 + 18 * x**2 + 49

    assert minimal_polynomial(exp_polar(0))(x) == x - 1