コード例 #1
0
def test__eis():
    assert _eis(z).diff(z) == -_eis(z) + 1 / z
    pytest.raises(ArgumentIndexError, lambda: _eis(x).fdiff(2))

    assert _eis(1/z).series(z) == \
        z + z**2 + 2*z**3 + 6*z**4 + 24*z**5 + O(z**6)

    assert Ei(z).rewrite('tractable') == exp(z) * _eis(z)
    assert li(z).rewrite('tractable') == z * _eis(log(z))

    assert _eis(z).rewrite('intractable') == exp(-z) * Ei(z)

    assert expand(li(z).rewrite('tractable').diff(z).rewrite('intractable')) \
        == li(z).diff(z)

    assert expand(Ei(z).rewrite('tractable').diff(z).rewrite('intractable')) \
        == Ei(z).diff(z)

    assert _eis(z).series(
        z,
        n=2) == EulerGamma + log(z) + z * (-log(z) - EulerGamma + 1) + z**2 * (
            log(z) / 2 - Rational(3, 4) + EulerGamma / 2) + O(z**2)

    l = Limit(Ei(y / x) / exp(y / x), x, 0)
    assert l.doit() == l  # cover _eis._eval_aseries
コード例 #2
0
ファイル: test_gruntz.py プロジェクト: goretkin/diofant
def test_gruntz_eval_special():
    # Gruntz, p. 126
    assert gruntz(
        exp(x) * (sin(1 / x + exp(-x)) - sin(1 / x + exp(-x**2))), x) == 1
    assert gruntz((erf(x - exp(-exp(x))) - erf(x)) * exp(exp(x)) * exp(x**2),
                  x) == -2 / sqrt(pi)
    assert gruntz(
        exp(exp(x)) * (exp(sin(1 / x + exp(-exp(x)))) - exp(sin(1 / x))),
        x) == 1
    assert gruntz(exp(x) * (gamma(x + exp(-x)) - gamma(x)), x) == oo
    assert gruntz(exp(exp(digamma(digamma(x)))) / x, x) == exp(-Rational(1, 2))
    assert gruntz(exp(exp(digamma(log(x)))) / x, x) == exp(-Rational(1, 2))
    assert gruntz(digamma(digamma(digamma(x))), x) == oo
    assert gruntz(loggamma(loggamma(x)), x) == oo
    assert gruntz(
        ((gamma(x + 1 / gamma(x)) - gamma(x)) / log(x) - cos(1 / x)) * x *
        log(x), x) == -Rational(1, 2)
    assert gruntz(x * (gamma(x - 1/gamma(x)) - gamma(x) + log(x)), x) \
        == Rational(1, 2)
    assert gruntz((gamma(x + 1 / gamma(x)) - gamma(x)) / log(x), x) == 1
    assert gruntz(
        gamma(x + 1) / sqrt(2 * pi) - exp(-x) *
        (x**(x + Rational(1, 2)) + x**(x - Rational(1, 2)) / 12), x) == oo
    assert gruntz(exp(exp(exp(digamma(digamma(digamma(x)))))) / x, x) == 0
    assert gruntz(exp(gamma(x - exp(-x)) * exp(1 / x)) - exp(gamma(x)),
                  x) == oo
    assert gruntz((Ei(x - exp(-exp(x))) - Ei(x)) * exp(-x) * exp(exp(x)) * x,
                  x) == -1
    assert gruntz(exp((log(2) + 1) * x) * (zeta(x + exp(-x)) - zeta(x)),
                  x) == -log(2)
コード例 #3
0
def test_limit():
    assert gruntz(x, x) == oo
    assert gruntz(-x, x) == -oo
    assert gruntz(-x, x) == -oo
    assert gruntz((-x)**2, x) == oo
    assert gruntz(-x**2, x) == -oo
    assert gruntz((1 / x) * log(1 / x), x) == 0  # Gruntz: p15, 2.11
    assert gruntz(1 / x, x) == 0
    assert gruntz(exp(x), x) == oo
    assert gruntz(-exp(x), x) == -oo
    assert gruntz(exp(x) / x, x) == oo
    assert gruntz(1 / x - exp(-x), x) == 0
    assert gruntz(x + 1 / x, x) == oo

    assert gruntz((1 / x)**(1 / x), x) == 1  # Gruntz: p15, 2.11
    assert gruntz((exp(1 / x) - 1) * x, x) == 1
    assert gruntz(1 + 1 / x, x) == 1
    assert gruntz(-exp(1 / x), x) == -1
    assert gruntz(x + exp(-x), x) == oo
    assert gruntz(x + exp(-x**2), x) == oo
    assert gruntz(x + exp(-exp(x)), x) == oo
    assert gruntz(13 + 1 / x - exp(-x), x) == 13

    a = Symbol('a')
    assert gruntz(x - log(1 + exp(x)), x) == 0
    assert gruntz(x - log(a + exp(x)), x) == 0
    assert gruntz(exp(x) / (1 + exp(x)), x) == 1
    assert gruntz(exp(x) / (a + exp(x)), x) == 1

    assert gruntz((3**x + 5**x)**(1 / x), x) == 5  # issue sympy/sympy#3463

    assert gruntz(Ei(x + exp(-x)) * exp(-x) * x, x) == 1

    assert gruntz(1 / li(x), x) == 0
    assert gruntz(1 / Li(x), x) == 0

    # issue diofant/diofant#56
    assert gruntz((log(E + 1 / x) - 1)**(1 - sqrt(E + 1 / x)), x) == oo

    # issue sympy/sympy#9471
    assert gruntz((((27**(log(x, 3)))) / x**3), x) == 1
    assert gruntz((((27**(log(x, 3) + 1))) / x**3), x) == 27

    # issue sympy/sympy#9449
    y = Symbol('y')
    assert gruntz(x * (abs(1 / x + y) - abs(y - 1 / x)) / 2, x) == sign(y)

    # issue sympy/sympy#8481
    assert gruntz(m**x * exp(-m) / factorial(x), x) == 0

    # issue sympy/sympy#4187
    assert gruntz(exp(1 / x) * log(1 / x) - Ei(1 / x), x) == -EulerGamma
    assert gruntz(exp(x) * log(x) - Ei(x), x) == oo

    # issue sympy/sympy#10382
    assert gruntz(fibonacci(x + 1) / fibonacci(x), x) == GoldenRatio

    assert gruntz(zeta(x), x) == 1
    assert gruntz(zeta(m) * zeta(x), x) == zeta(m)
コード例 #4
0
def test_gruntz_eval_special_slow():
    assert gruntz(gamma(x + 1)/sqrt(2*pi)
                  - exp(-x)*(x**(x + Rational(1, 2)) + x**(x - Rational(1, 2))/12), x) == oo
    assert gruntz(exp(exp(exp(digamma(digamma(digamma(x))))))/x, x) == 0
    assert gruntz(exp(gamma(x - exp(-x))*exp(1/x)) - exp(gamma(x)), x) == oo
    assert gruntz(
        (Ei(x - exp(-exp(x))) - Ei(x))*exp(-x)*exp(exp(x))*x, x) == -1
    assert gruntz(
        exp((log(2) + 1)*x) * (zeta(x + exp(-x)) - zeta(x)), x) == -log(2)
コード例 #5
0
ファイル: test_gruntz.py プロジェクト: diofant/diofant
def test_gruntz_eval_special_slow():
    assert limit(gamma(x + 1)/sqrt(2*pi) - exp(-x)*(x**(x + Rational(1, 2)) +
                 x**(x - Rational(1, 2))/12), x, oo) == oo
    assert limit(exp(exp(exp(digamma(digamma(digamma(x))))))/x, x, oo) == 0
    assert limit(exp(gamma(x - exp(-x))*exp(1/x)) - exp(gamma(x)), x, oo) == oo
    assert limit((Ei(x - exp(-exp(x))) - Ei(x)) *
                 exp(-x)*exp(exp(x))*x, x, oo) == -1
    assert limit(exp((log(2) + 1)*x)*(zeta(x + exp(-x)) - zeta(x)),
                 x, oo) == -log(2)
    # TODO 8.36 (bessel)
    assert limit(Max(x, exp(x))/log(Min(exp(-x), exp(-exp(x)))), x, oo) == -1
コード例 #6
0
def test_si():
    assert Si(I * x) == I * Shi(x)
    assert Shi(I * x) == I * Si(x)
    assert Si(-I * x) == -I * Shi(x)
    assert Shi(-I * x) == -I * Si(x)
    assert Si(-x) == -Si(x)
    assert Shi(-x) == -Shi(x)
    assert Si(exp_polar(2 * pi * I) * x) == Si(x)
    assert Si(exp_polar(-2 * pi * I) * x) == Si(x)
    assert Shi(exp_polar(2 * pi * I) * x) == Shi(x)
    assert Shi(exp_polar(-2 * pi * I) * x) == Shi(x)

    assert Si(oo) == pi / 2
    assert Si(-oo) == -pi / 2
    assert Shi(oo) == oo
    assert Shi(-oo) == -oo

    assert mytd(Si(x), sin(x) / x, x)
    assert mytd(Shi(x), sinh(x) / x, x)

    assert mytn(
        Si(x),
        Si(x).rewrite(Ei),
        -I * (-Ei(x * exp_polar(-I * pi / 2)) / 2 +
              Ei(x * exp_polar(I * pi / 2)) / 2 - I * pi) + pi / 2, x)
    assert mytn(
        Si(x),
        Si(x).rewrite(expint),
        -I * (-expint(1, x * exp_polar(-I * pi / 2)) / 2 +
              expint(1, x * exp_polar(I * pi / 2)) / 2) + pi / 2, x)
    assert mytn(Shi(x),
                Shi(x).rewrite(Ei),
                Ei(x) / 2 - Ei(x * exp_polar(I * pi)) / 2 + I * pi / 2, x)
    assert mytn(
        Shi(x),
        Shi(x).rewrite(expint),
        expint(1, x) / 2 - expint(1, x * exp_polar(I * pi)) / 2 - I * pi / 2,
        x)

    assert tn_arg(Si)
    assert tn_arg(Shi)

    assert Si(x).nseries(x, n=8) == \
        x - x**3/18 + x**5/600 - x**7/35280 + O(x**9)
    assert Shi(x).nseries(x, n=8) == \
        x + x**3/18 + x**5/600 + x**7/35280 + O(x**9)
    assert Si(sin(x)).nseries(
        x, n=5) == x - 2 * x**3 / 9 + 17 * x**5 / 450 + O(x**7)
    assert Si(x).series(x, 1, n=3) == \
        Si(1) + (x - 1)*sin(1) + (x - 1)**2*(-sin(1)/2 + cos(1)/2) + O((x - 1)**3, (x, 1))

    pytest.raises(ArgumentIndexError, lambda: Si(z).fdiff(2))
コード例 #7
0
def test_heurisch_hacking():
    assert (heurisch(sqrt(1 + 7 * x**2), x,
                     hints=[]) == x * sqrt(1 + 7 * x**2) / 2 +
            sqrt(7) * asinh(sqrt(7) * x) / 14)
    assert (heurisch(sqrt(1 - 7 * x**2), x,
                     hints=[]) == x * sqrt(1 - 7 * x**2) / 2 +
            sqrt(7) * asin(sqrt(7) * x) / 14)

    assert heurisch(sqrt(y * x**2 - 1), x, hints=[]) is None

    assert (heurisch(1 / sqrt(1 + 7 * x**2), x,
                     hints=[]) == sqrt(7) * asinh(sqrt(7) * x) / 7)
    assert (heurisch(1 / sqrt(1 - 7 * x**2), x,
                     hints=[]) == sqrt(7) * asin(sqrt(7) * x) / 7)

    assert heurisch(exp(-7 * x**2), x,
                    hints=[]) == sqrt(7 * pi) * erf(sqrt(7) * x) / 14
    assert heurisch(exp(2 * x**2), x,
                    hints=[]) == sqrt(2) * sqrt(pi) * erfi(sqrt(2) * x) / 4

    assert (heurisch(exp(2 * x**2 - 3 * x), x,
                     hints=[]) == sqrt(2) * sqrt(pi) *
            erfi(sqrt(2) * x - 3 * sqrt(2) / 4) / (4 * E**Rational(9, 8)))

    assert heurisch(1 / sqrt(9 - 4 * x**2), x, hints=[]) == asin(2 * x / 3) / 2
    assert heurisch(1 / sqrt(9 + 4 * x**2), x,
                    hints=[]) == asinh(2 * x / 3) / 2

    assert heurisch(li(x), x, hints=[]) == x * li(x) - Ei(2 * log(x))
    assert heurisch(li(log(x)), x, hints=[]) is None

    assert (heurisch(sqrt(1 + x), x,
                     hints=[x, sqrt(1 + x)]) == 2 * x * sqrt(x + 1) / 3 +
            2 * sqrt(x + 1) / 3)
コード例 #8
0
def test_li():
    z = Symbol("z")
    zr = Symbol("z", extended_real=True)
    zp = Symbol("z", positive=True)
    zn = Symbol("z", negative=True)

    assert li(0) == 0
    assert li(1) == -oo
    assert li(oo) == oo

    assert isinstance(li(z), li)

    assert diff(li(z), z) == 1/log(z)

    assert conjugate(li(z)) == li(conjugate(z))
    assert conjugate(li(-zr)) == li(-zr)
    assert conjugate(li(-zp)) == conjugate(li(-zp))
    assert conjugate(li(zn)) == conjugate(li(zn))

    assert li(z).rewrite(Li) == Li(z) + li(2)
    assert li(z).rewrite(Ei) == Ei(log(z))
    assert li(z).rewrite(uppergamma) == (-log(1/log(z))/2 - log(-log(z)) +
                                         log(log(z))/2 - expint(1, -log(z)))
    assert li(z).rewrite(Si) == (-log(I*log(z)) - log(1/log(z))/2 +
                                 log(log(z))/2 + Ci(I*log(z)) + Shi(log(z)))
    assert li(z).rewrite(Ci) == (-log(I*log(z)) - log(1/log(z))/2 +
                                 log(log(z))/2 + Ci(I*log(z)) + Shi(log(z)))
    assert li(z).rewrite(Shi) == (-log(1/log(z))/2 + log(log(z))/2 +
                                  Chi(log(z)) - Shi(log(z)))
    assert li(z).rewrite(Chi) == (-log(1/log(z))/2 + log(log(z))/2 +
                                  Chi(log(z)) - Shi(log(z)))
    assert li(z).rewrite(hyper) == (log(z)*hyper((1, 1), (2, 2), log(z)) -
                                   log(1/log(z))/2 + log(log(z))/2 + EulerGamma)
    assert li(z).rewrite(meijerg) == (-log(1/log(z))/2 - log(-log(z)) + log(log(z))/2 -
                                      meijerg(((), (1,)), ((0, 0), ()), -log(z)))
コード例 #9
0
def test_ci():
    m1 = exp_polar(I * pi)
    m1_ = exp_polar(-I * pi)
    pI = exp_polar(I * pi / 2)
    mI = exp_polar(-I * pi / 2)

    assert Ci(m1 * x) == Ci(x) + I * pi
    assert Ci(m1_ * x) == Ci(x) - I * pi
    assert Ci(pI * x) == Chi(x) + I * pi / 2
    assert Ci(mI * x) == Chi(x) - I * pi / 2
    assert Chi(m1 * x) == Chi(x) + I * pi
    assert Chi(m1_ * x) == Chi(x) - I * pi
    assert Chi(pI * x) == Ci(x) + I * pi / 2
    assert Chi(mI * x) == Ci(x) - I * pi / 2
    assert Ci(exp_polar(2 * I * pi) * x) == Ci(x) + 2 * I * pi
    assert Chi(exp_polar(-2 * I * pi) * x) == Chi(x) - 2 * I * pi
    assert Chi(exp_polar(2 * I * pi) * x) == Chi(x) + 2 * I * pi
    assert Ci(exp_polar(-2 * I * pi) * x) == Ci(x) - 2 * I * pi

    assert Ci(oo) == 0
    assert Ci(-oo) == I * pi
    assert Chi(oo) == oo
    assert Chi(-oo) == oo

    assert mytd(Ci(x), cos(x) / x, x)
    assert mytd(Chi(x), cosh(x) / x, x)

    assert mytn(
        Ci(x),
        Ci(x).rewrite(Ei),
        Ei(x * exp_polar(-I * pi / 2)) / 2 + Ei(x * exp_polar(I * pi / 2)) / 2,
        x)
    assert mytn(Chi(x),
                Chi(x).rewrite(Ei),
                Ei(x) / 2 + Ei(x * exp_polar(I * pi)) / 2 - I * pi / 2, x)

    assert tn_arg(Ci)
    assert tn_arg(Chi)

    from diofant import O, EulerGamma, log, limit
    assert Ci(x).nseries(x, n=4) == \
        EulerGamma + log(x) - x**2/4 + x**4/96 + O(x**6)
    assert Chi(x).nseries(x, n=4) == \
        EulerGamma + log(x) + x**2/4 + x**4/96 + O(x**6)
    assert limit(log(x) - Ci(2 * x), x, 0) == -log(2) - EulerGamma
コード例 #10
0
def test__eis():
    assert _eis(z).diff(z) == -_eis(z) + 1/z

    assert _eis(1/z).series(z) == \
        z + z**2 + 2*z**3 + 6*z**4 + 24*z**5 + O(z**6)

    assert Ei(z).rewrite('tractable') == exp(z)*_eis(z)
    assert li(z).rewrite('tractable') == z*_eis(log(z))

    assert _eis(z).rewrite('intractable') == exp(-z)*Ei(z)

    assert expand(li(z).rewrite('tractable').diff(z).rewrite('intractable')) \
        == li(z).diff(z)

    assert expand(Ei(z).rewrite('tractable').diff(z).rewrite('intractable')) \
        == Ei(z).diff(z)

    assert _eis(z).series(z, n=2) == EulerGamma + log(z) + z*(-log(z) -
        EulerGamma + 1) + z**2*(log(z)/2 - Rational(3, 4) + EulerGamma/2) + O(z**2)
コード例 #11
0
def test_expint():
    assert mytn(expint(x, y),
                expint(x, y).rewrite(uppergamma),
                y**(x - 1) * uppergamma(1 - x, y), x)
    assert mytd(expint(x, y),
                -y**(x - 1) * meijerg([], [1, 1], [0, 0, 1 - x], [], y), x)
    assert mytd(expint(x, y), -expint(x - 1, y), y)
    assert mytn(expint(1, x),
                expint(1, x).rewrite(Ei), -Ei(x * polar_lift(-1)) + I * pi, x)

    assert expint(-4, x) == exp(-x)/x + 4*exp(-x)/x**2 + 12*exp(-x)/x**3 \
        + 24*exp(-x)/x**4 + 24*exp(-x)/x**5
    assert expint(-Rational(3, 2), x) == \
        exp(-x)/x + 3*exp(-x)/(2*x**2) - 3*sqrt(pi)*erf(sqrt(x))/(4*x**Rational(5, 2)) \
        + 3*sqrt(pi)/(4*x**Rational(5, 2))

    assert tn_branch(expint, 1)
    assert tn_branch(expint, 2)
    assert tn_branch(expint, 3)
    assert tn_branch(expint, 1.7)
    assert tn_branch(expint, pi)

    assert expint(y, x*exp_polar(2*I*pi)) == \
        x**(y - 1)*(exp(2*I*pi*y) - 1)*gamma(-y + 1) + expint(y, x)
    assert expint(y, x*exp_polar(-2*I*pi)) == \
        x**(y - 1)*(exp(-2*I*pi*y) - 1)*gamma(-y + 1) + expint(y, x)
    assert expint(2,
                  x * exp_polar(2 * I * pi)) == 2 * I * pi * x + expint(2, x)
    assert expint(2, x *
                  exp_polar(-2 * I * pi)) == -2 * I * pi * x + expint(2, x)
    assert expint(1, x).rewrite(Ei).rewrite(expint) == expint(1, x)

    assert mytn(E1(x), E1(x).rewrite(Shi), Shi(x) - Chi(x), x)
    assert mytn(E1(polar_lift(I) * x),
                E1(polar_lift(I) * x).rewrite(Si),
                -Ci(x) + I * Si(x) - I * pi / 2, x)

    assert mytn(expint(2, x),
                expint(2, x).rewrite(Ei).rewrite(expint), -x * E1(x) + exp(-x),
                x)
    assert mytn(expint(3, x),
                expint(3, x).rewrite(Ei).rewrite(expint),
                x**2 * E1(x) / 2 + (1 - x) * exp(-x) / 2, x)

    assert expint(Rational(3, 2), z).nseries(z, n=10) == \
        2 + 2*z - z**2/3 + z**3/15 - z**4/84 + z**5/540 - \
        2*sqrt(pi)*sqrt(z) + O(z**6)

    assert E1(z).series(z) == -EulerGamma - log(z) + z - \
        z**2/4 + z**3/18 - z**4/96 + z**5/600 + O(z**6)

    assert expint(4, z).series(z) == Rational(1, 3) - z/2 + z**2/2 + \
        z**3*(log(z)/6 - Rational(11, 36) + EulerGamma/6) - z**4/24 + \
        z**5/240 + O(z**6)
コード例 #12
0
def test_heurisch_hacking():
    assert (heurisch(sqrt(1 + 7 * x**2), x,
                     hints=[]) == x * sqrt(1 + 7 * x**2) / 2 +
            sqrt(7) * asinh(sqrt(7) * x) / 14)
    assert (heurisch(sqrt(1 - 7 * x**2), x,
                     hints=[]) == x * sqrt(1 - 7 * x**2) / 2 +
            sqrt(7) * asin(sqrt(7) * x) / 14)

    assert (heurisch(1 / sqrt(1 + 7 * x**2), x,
                     hints=[]) == sqrt(7) * asinh(sqrt(7) * x) / 7)
    assert (heurisch(1 / sqrt(1 - 7 * x**2), x,
                     hints=[]) == sqrt(7) * asin(sqrt(7) * x) / 7)

    assert (heurisch(exp(-7 * x**2), x,
                     hints=[]) == sqrt(7 * pi) * erf(sqrt(7) * x) / 14)

    assert heurisch(1 / sqrt(9 - 4 * x**2), x, hints=[]) == asin(2 * x / 3) / 2
    assert heurisch(1 / sqrt(9 + 4 * x**2), x,
                    hints=[]) == asinh(2 * x / 3) / 2

    assert heurisch(li(x), x, hints=[]) == x * li(x) - Ei(2 * log(x))
コード例 #13
0
def test_sympyissue_6682():
    assert gruntz(exp(2 * Ei(-1 / x)) * x**2, x) == exp(2 * EulerGamma)
コード例 #14
0
def test_ei():
    pos = Symbol('p', positive=True)
    neg = Symbol('n', negative=True)
    assert Ei(0) == -oo
    assert Ei(+oo) == oo
    assert Ei(-oo) == 0
    assert Ei(-pos) == Ei(polar_lift(-1) * pos) - I * pi
    assert Ei(neg) == Ei(polar_lift(neg)) - I * pi
    assert tn_branch(Ei)
    assert mytd(Ei(x), exp(x) / x, x)
    assert mytn(Ei(x),
                Ei(x).rewrite(uppergamma),
                -uppergamma(0, x * polar_lift(-1)) - I * pi, x)
    assert mytn(Ei(x),
                Ei(x).rewrite(expint), -expint(1, x * polar_lift(-1)) - I * pi,
                x)
    assert Ei(x).rewrite(expint).rewrite(Ei) == Ei(x)
    assert Ei(x * exp_polar(2 * I * pi)) == Ei(x) + 2 * I * pi
    assert Ei(x * exp_polar(-2 * I * pi)) == Ei(x) - 2 * I * pi

    assert mytn(Ei(x), Ei(x).rewrite(Shi), Chi(x) + Shi(x), x)
    assert mytn(Ei(x * polar_lift(I)),
                Ei(x * polar_lift(I)).rewrite(Si),
                Ci(x) + I * Si(x) + I * pi / 2, x)

    assert Ei(log(x)).rewrite(li) == li(x)
    assert Ei(2 * log(x)).rewrite(li) == li(x**2)

    assert Ei(x).series(x) == (EulerGamma + log(x) + x + x**2 / 4 + x**3 / 18 +
                               x**4 / 96 + x**5 / 600 + O(x**6))
    assert Ei(1 + x).series(x) == (Ei(1) + E * x + E * x**3 / 6 -
                                   E * x**4 / 12 + 3 * E * x**5 / 40 + O(x**6))

    pytest.raises(ArgumentIndexError, lambda: Ei(x).fdiff(2))
コード例 #15
0
ファイル: test_gruntz.py プロジェクト: naveensaigit/diofant
def test_sympyissue_6682():
    assert limitinf(exp(2 * Ei(-1 / x)) * x**2, x) == exp(2 * EulerGamma)
コード例 #16
0
def test_ei():
    pos = Symbol('p', positive=True)
    neg = Symbol('n', negative=True)
    assert Ei(-pos) == Ei(polar_lift(-1)*pos) - I*pi
    assert Ei(neg) == Ei(polar_lift(neg)) - I*pi
    assert tn_branch(Ei)
    assert mytd(Ei(x), exp(x)/x, x)
    assert mytn(Ei(x), Ei(x).rewrite(uppergamma),
                -uppergamma(0, x*polar_lift(-1)) - I*pi, x)
    assert mytn(Ei(x), Ei(x).rewrite(expint),
                -expint(1, x*polar_lift(-1)) - I*pi, x)
    assert Ei(x).rewrite(expint).rewrite(Ei) == Ei(x)
    assert Ei(x*exp_polar(2*I*pi)) == Ei(x) + 2*I*pi
    assert Ei(x*exp_polar(-2*I*pi)) == Ei(x) - 2*I*pi

    assert mytn(Ei(x), Ei(x).rewrite(Shi), Chi(x) + Shi(x), x)
    assert mytn(Ei(x*polar_lift(I)), Ei(x*polar_lift(I)).rewrite(Si),
                Ci(x) + I*Si(x) + I*pi/2, x)

    assert Ei(log(x)).rewrite(li) == li(x)
    assert Ei(2*log(x)).rewrite(li) == li(x**2)

    assert Ei(x).series(x) == EulerGamma + log(x) + x + x**2/4 + \
        x**3/18 + x**4/96 + x**5/600 + O(x**6)