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
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)
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)
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)
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
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))
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)
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)))
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
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)
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)
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))
def test_sympyissue_6682(): assert gruntz(exp(2 * Ei(-1 / x)) * x**2, x) == exp(2 * EulerGamma)
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))
def test_sympyissue_6682(): assert limitinf(exp(2 * Ei(-1 / x)) * x**2, x) == exp(2 * EulerGamma)
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)