Best Python code snippet using hypothesis
test_util.py
Source:test_util.py  
1from sympy import (Symbol, S, exp, log, sqrt, oo, E, zoo, pi, tan, sin, cos,2                   cot, sec, csc, Abs, symbols, I, re, simplify,3                   expint, Rational)4from sympy.calculus.util import (function_range, continuous_domain, not_empty_in,5                                 periodicity, lcim, AccumBounds, is_convex,6                                 stationary_points, minimum, maximum)7from sympy.core import Add, Mul, Pow8from sympy.sets.sets import (Interval, FiniteSet, EmptySet, Complement,9                            Union)10from sympy.testing.pytest import raises11from sympy.abc import x12a = Symbol('a', real=True)13def test_function_range():14    x, y, a, b = symbols('x y a b')15    assert function_range(sin(x), x, Interval(-pi/2, pi/2)16        ) == Interval(-1, 1)17    assert function_range(sin(x), x, Interval(0, pi)18        ) == Interval(0, 1)19    assert function_range(tan(x), x, Interval(0, pi)20        ) == Interval(-oo, oo)21    assert function_range(tan(x), x, Interval(pi/2, pi)22        ) == Interval(-oo, 0)23    assert function_range((x + 3)/(x - 2), x, Interval(-5, 5)24        ) == Union(Interval(-oo, Rational(2, 7)), Interval(Rational(8, 3), oo))25    assert function_range(1/(x**2), x, Interval(-1, 1)26        ) == Interval(1, oo)27    assert function_range(exp(x), x, Interval(-1, 1)28        ) == Interval(exp(-1), exp(1))29    assert function_range(log(x) - x, x, S.Reals30        ) == Interval(-oo, -1)31    assert function_range(sqrt(3*x - 1), x, Interval(0, 2)32        ) == Interval(0, sqrt(5))33    assert function_range(x*(x - 1) - (x**2 - x), x, S.Reals34        ) == FiniteSet(0)35    assert function_range(x*(x - 1) - (x**2 - x) + y, x, S.Reals36        ) == FiniteSet(y)37    assert function_range(sin(x), x, Union(Interval(-5, -3), FiniteSet(4))38        ) == Union(Interval(-sin(3), 1), FiniteSet(sin(4)))39    assert function_range(cos(x), x, Interval(-oo, -4)40        ) == Interval(-1, 1)41    assert function_range(cos(x), x, S.EmptySet) == S.EmptySet42    raises(NotImplementedError, lambda : function_range(43        exp(x)*(sin(x) - cos(x))/2 - x, x, S.Reals))44    raises(NotImplementedError, lambda : function_range(45        sin(x) + x, x, S.Reals)) # issue 1327346    raises(NotImplementedError, lambda : function_range(47        log(x), x, S.Integers))48    raises(NotImplementedError, lambda : function_range(49        sin(x)/2, x, S.Naturals))50def test_continuous_domain():51    x = Symbol('x')52    assert continuous_domain(sin(x), x, Interval(0, 2*pi)) == Interval(0, 2*pi)53    assert continuous_domain(tan(x), x, Interval(0, 2*pi)) == \54        Union(Interval(0, pi/2, False, True), Interval(pi/2, pi*Rational(3, 2), True, True),55              Interval(pi*Rational(3, 2), 2*pi, True, False))56    assert continuous_domain((x - 1)/((x - 1)**2), x, S.Reals) == \57        Union(Interval(-oo, 1, True, True), Interval(1, oo, True, True))58    assert continuous_domain(log(x) + log(4*x - 1), x, S.Reals) == \59        Interval(Rational(1, 4), oo, True, True)60    assert continuous_domain(1/sqrt(x - 3), x, S.Reals) == Interval(3, oo, True, True)61    assert continuous_domain(1/x - 2, x, S.Reals) == \62        Union(Interval.open(-oo, 0), Interval.open(0, oo))63    assert continuous_domain(1/(x**2 - 4) + 2, x, S.Reals) == \64        Union(Interval.open(-oo, -2), Interval.open(-2, 2), Interval.open(2, oo))65    domain = continuous_domain(log(tan(x)**2 + 1), x, S.Reals)66    assert not domain.contains(3*pi/2)67    assert domain.contains(5)68def test_not_empty_in():69    assert not_empty_in(FiniteSet(x, 2*x).intersect(Interval(1, 2, True, False)), x) == \70        Interval(S.Half, 2, True, False)71    assert not_empty_in(FiniteSet(x, x**2).intersect(Interval(1, 2)), x) == \72        Union(Interval(-sqrt(2), -1), Interval(1, 2))73    assert not_empty_in(FiniteSet(x**2 + x, x).intersect(Interval(2, 4)), x) == \74        Union(Interval(-sqrt(17)/2 - S.Half, -2),75              Interval(1, Rational(-1, 2) + sqrt(17)/2), Interval(2, 4))76    assert not_empty_in(FiniteSet(x/(x - 1)).intersect(S.Reals), x) == \77        Complement(S.Reals, FiniteSet(1))78    assert not_empty_in(FiniteSet(a/(a - 1)).intersect(S.Reals), a) == \79        Complement(S.Reals, FiniteSet(1))80    assert not_empty_in(FiniteSet((x**2 - 3*x + 2)/(x - 1)).intersect(S.Reals), x) == \81        Complement(S.Reals, FiniteSet(1))82    assert not_empty_in(FiniteSet(3, 4, x/(x - 1)).intersect(Interval(2, 3)), x) == \83        Interval(-oo, oo)84    assert not_empty_in(FiniteSet(4, x/(x - 1)).intersect(Interval(2, 3)), x) == \85        Interval(S(3)/2, 2)86    assert not_empty_in(FiniteSet(x/(x**2 - 1)).intersect(S.Reals), x) == \87        Complement(S.Reals, FiniteSet(-1, 1))88    assert not_empty_in(FiniteSet(x, x**2).intersect(Union(Interval(1, 3, True, True),89                                                           Interval(4, 5))), x) == \90        Union(Interval(-sqrt(5), -2), Interval(-sqrt(3), -1, True, True),91              Interval(1, 3, True, True), Interval(4, 5))92    assert not_empty_in(FiniteSet(1).intersect(Interval(3, 4)), x) == S.EmptySet93    assert not_empty_in(FiniteSet(x**2/(x + 2)).intersect(Interval(1, oo)), x) == \94        Union(Interval(-2, -1, True, False), Interval(2, oo))95    raises(ValueError, lambda: not_empty_in(x))96    raises(ValueError, lambda: not_empty_in(Interval(0, 1), x))97    raises(NotImplementedError,98           lambda: not_empty_in(FiniteSet(x).intersect(S.Reals), x, a))99def test_periodicity():100    x = Symbol('x')101    y = Symbol('y')102    z = Symbol('z', real=True)103    assert periodicity(sin(2*x), x) == pi104    assert periodicity((-2)*tan(4*x), x) == pi/4105    assert periodicity(sin(x)**2, x) == 2*pi106    assert periodicity(3**tan(3*x), x) == pi/3107    assert periodicity(tan(x)*cos(x), x) == 2*pi108    assert periodicity(sin(x)**(tan(x)), x) == 2*pi109    assert periodicity(tan(x)*sec(x), x) == 2*pi110    assert periodicity(sin(2*x)*cos(2*x) - y, x) == pi/2111    assert periodicity(tan(x) + cot(x), x) == pi112    assert periodicity(sin(x) - cos(2*x), x) == 2*pi113    assert periodicity(sin(x) - 1, x) == 2*pi114    assert periodicity(sin(4*x) + sin(x)*cos(x), x) == pi115    assert periodicity(exp(sin(x)), x) == 2*pi116    assert periodicity(log(cot(2*x)) - sin(cos(2*x)), x) == pi117    assert periodicity(sin(2*x)*exp(tan(x) - csc(2*x)), x) == pi118    assert periodicity(cos(sec(x) - csc(2*x)), x) == 2*pi119    assert periodicity(tan(sin(2*x)), x) == pi120    assert periodicity(2*tan(x)**2, x) == pi121    assert periodicity(sin(x%4), x) == 4122    assert periodicity(sin(x)%4, x) == 2*pi123    assert periodicity(tan((3*x-2)%4), x) == Rational(4, 3)124    assert periodicity((sqrt(2)*(x+1)+x) % 3, x) == 3 / (sqrt(2)+1)125    assert periodicity((x**2+1) % x, x) is None126    assert periodicity(sin(re(x)), x) == 2*pi127    assert periodicity(sin(x)**2 + cos(x)**2, x) is S.Zero128    assert periodicity(tan(x), y) is S.Zero129    assert periodicity(sin(x) + I*cos(x), x) == 2*pi130    assert periodicity(x - sin(2*y), y) == pi131    assert periodicity(exp(x), x) is None132    assert periodicity(exp(I*x), x) == 2*pi133    assert periodicity(exp(I*z), z) == 2*pi134    assert periodicity(exp(z), z) is None135    assert periodicity(exp(log(sin(z) + I*cos(2*z)), evaluate=False), z) == 2*pi136    assert periodicity(exp(log(sin(2*z) + I*cos(z)), evaluate=False), z) == 2*pi137    assert periodicity(exp(sin(z)), z) == 2*pi138    assert periodicity(exp(2*I*z), z) == pi139    assert periodicity(exp(z + I*sin(z)), z) is None140    assert periodicity(exp(cos(z/2) + sin(z)), z) == 4*pi141    assert periodicity(log(x), x) is None142    assert periodicity(exp(x)**sin(x), x) is None143    assert periodicity(sin(x)**y, y) is None144    assert periodicity(Abs(sin(Abs(sin(x)))), x) == pi145    assert all(periodicity(Abs(f(x)), x) == pi for f in (146        cos, sin, sec, csc, tan, cot))147    assert periodicity(Abs(sin(tan(x))), x) == pi148    assert periodicity(Abs(sin(sin(x) + tan(x))), x) == 2*pi149    assert periodicity(sin(x) > S.Half, x) == 2*pi150    assert periodicity(x > 2, x) is None151    assert periodicity(x**3 - x**2 + 1, x) is None152    assert periodicity(Abs(x), x) is None153    assert periodicity(Abs(x**2 - 1), x) is None154    assert periodicity((x**2 + 4)%2, x) is None155    assert periodicity((E**x)%3, x) is None156    assert periodicity(sin(expint(1, x))/expint(1, x), x) is None157def test_periodicity_check():158    x = Symbol('x')159    y = Symbol('y')160    assert periodicity(tan(x), x, check=True) == pi161    assert periodicity(sin(x) + cos(x), x, check=True) == 2*pi162    assert periodicity(sec(x), x) == 2*pi163    assert periodicity(sin(x*y), x) == 2*pi/abs(y)164    assert periodicity(Abs(sec(sec(x))), x) == pi165def test_lcim():166    from sympy import pi167    assert lcim([S.Half, S(2), S(3)]) == 6168    assert lcim([pi/2, pi/4, pi]) == pi169    assert lcim([2*pi, pi/2]) == 2*pi170    assert lcim([S.One, 2*pi]) is None171    assert lcim([S(2) + 2*E, E/3 + Rational(1, 3), S.One + E]) == S(2) + 2*E172def test_is_convex():173    assert is_convex(1/x, x, domain=Interval(0, oo)) == True174    assert is_convex(1/x, x, domain=Interval(-oo, 0)) == False175    assert is_convex(x**2, x, domain=Interval(0, oo)) == True176    assert is_convex(log(x), x) == False177    raises(NotImplementedError, lambda: is_convex(log(x), x, a))178def test_stationary_points():179    x, y = symbols('x y')180    assert stationary_points(sin(x), x, Interval(-pi/2, pi/2)181        ) == {-pi/2, pi/2}182    assert  stationary_points(sin(x), x, Interval.Ropen(0, pi/4)183        ) == EmptySet()184    assert stationary_points(tan(x), x,185        ) == EmptySet()186    assert stationary_points(sin(x)*cos(x), x, Interval(0, pi)187        ) == {pi/4, pi*Rational(3, 4)}188    assert stationary_points(sec(x), x, Interval(0, pi)189        ) == {0, pi}190    assert stationary_points((x+3)*(x-2), x191        ) == FiniteSet(Rational(-1, 2))192    assert stationary_points((x + 3)/(x - 2), x, Interval(-5, 5)193        ) == EmptySet()194    assert stationary_points((x**2+3)/(x-2), x195        ) == {2 - sqrt(7), 2 + sqrt(7)}196    assert stationary_points((x**2+3)/(x-2), x, Interval(0, 5)197        ) == {2 + sqrt(7)}198    assert stationary_points(x**4 + x**3 - 5*x**2, x, S.Reals199        ) == FiniteSet(-2, 0, Rational(5, 4))200    assert stationary_points(exp(x), x201        ) == EmptySet()202    assert stationary_points(log(x) - x, x, S.Reals203        ) == {1}204    assert stationary_points(cos(x), x, Union(Interval(0, 5), Interval(-6, -3))205        ) == {0, -pi, pi}206    assert stationary_points(y, x, S.Reals207        ) == S.Reals208    assert stationary_points(y, x, S.EmptySet) == S.EmptySet209def test_maximum():210    x, y = symbols('x y')211    assert maximum(sin(x), x) is S.One212    assert maximum(sin(x), x, Interval(0, 1)) == sin(1)213    assert maximum(tan(x), x) is oo214    assert maximum(tan(x), x, Interval(-pi/4, pi/4)) is S.One215    assert maximum(sin(x)*cos(x), x, S.Reals) == S.Half216    assert simplify(maximum(sin(x)*cos(x), x, Interval(pi*Rational(3, 8), pi*Rational(5, 8)))217        ) == sqrt(2)/4218    assert maximum((x+3)*(x-2), x) is oo219    assert maximum((x+3)*(x-2), x, Interval(-5, 0)) == S(14)220    assert maximum((x+3)/(x-2), x, Interval(-5, 0)) == Rational(2, 7)221    assert simplify(maximum(-x**4-x**3+x**2+10, x)222        ) == 41*sqrt(41)/512 + Rational(5419, 512)223    assert maximum(exp(x), x, Interval(-oo, 2)) == exp(2)224    assert maximum(log(x) - x, x, S.Reals) is S.NegativeOne225    assert maximum(cos(x), x, Union(Interval(0, 5), Interval(-6, -3))226        ) is S.One227    assert maximum(cos(x)-sin(x), x, S.Reals) == sqrt(2)228    assert maximum(y, x, S.Reals) == y229    raises(ValueError, lambda : maximum(sin(x), x, S.EmptySet))230    raises(ValueError, lambda : maximum(log(cos(x)), x, S.EmptySet))231    raises(ValueError, lambda : maximum(1/(x**2 + y**2 + 1), x, S.EmptySet))232    raises(ValueError, lambda : maximum(sin(x), sin(x)))233    raises(ValueError, lambda : maximum(sin(x), x*y, S.EmptySet))234    raises(ValueError, lambda : maximum(sin(x), S.One))235def test_minimum():236    x, y = symbols('x y')237    assert minimum(sin(x), x) is S.NegativeOne238    assert minimum(sin(x), x, Interval(1, 4)) == sin(4)239    assert minimum(tan(x), x) is -oo240    assert minimum(tan(x), x, Interval(-pi/4, pi/4)) is S.NegativeOne241    assert minimum(sin(x)*cos(x), x, S.Reals) == Rational(-1, 2)242    assert simplify(minimum(sin(x)*cos(x), x, Interval(pi*Rational(3, 8), pi*Rational(5, 8)))243        ) == -sqrt(2)/4244    assert minimum((x+3)*(x-2), x) == Rational(-25, 4)245    assert minimum((x+3)/(x-2), x, Interval(-5, 0)) == Rational(-3, 2)246    assert minimum(x**4-x**3+x**2+10, x) == S(10)247    assert minimum(exp(x), x, Interval(-2, oo)) == exp(-2)248    assert minimum(log(x) - x, x, S.Reals) is -oo249    assert minimum(cos(x), x, Union(Interval(0, 5), Interval(-6, -3))250        ) is S.NegativeOne251    assert minimum(cos(x)-sin(x), x, S.Reals) == -sqrt(2)252    assert minimum(y, x, S.Reals) == y253    raises(ValueError, lambda : minimum(sin(x), x, S.EmptySet))254    raises(ValueError, lambda : minimum(log(cos(x)), x, S.EmptySet))255    raises(ValueError, lambda : minimum(1/(x**2 + y**2 + 1), x, S.EmptySet))256    raises(ValueError, lambda : minimum(sin(x), sin(x)))257    raises(ValueError, lambda : minimum(sin(x), x*y, S.EmptySet))258    raises(ValueError, lambda : minimum(sin(x), S.One))259def test_AccumBounds():260    assert AccumBounds(1, 2).args == (1, 2)261    assert AccumBounds(1, 2).delta is S.One262    assert AccumBounds(1, 2).mid == Rational(3, 2)263    assert AccumBounds(1, 3).is_real == True264    assert AccumBounds(1, 1) is S.One265    assert AccumBounds(1, 2) + 1 == AccumBounds(2, 3)266    assert 1 + AccumBounds(1, 2) == AccumBounds(2, 3)267    assert AccumBounds(1, 2) + AccumBounds(2, 3) == AccumBounds(3, 5)268    assert -AccumBounds(1, 2) == AccumBounds(-2, -1)269    assert AccumBounds(1, 2) - 1 == AccumBounds(0, 1)270    assert 1 - AccumBounds(1, 2) == AccumBounds(-1, 0)271    assert AccumBounds(2, 3) - AccumBounds(1, 2) == AccumBounds(0, 2)272    assert x + AccumBounds(1, 2) == Add(AccumBounds(1, 2), x)273    assert a + AccumBounds(1, 2) == AccumBounds(1 + a, 2 + a)274    assert AccumBounds(1, 2) - x == Add(AccumBounds(1, 2), -x)275    assert AccumBounds(-oo, 1) + oo == AccumBounds(-oo, oo)276    assert AccumBounds(1, oo) + oo is oo277    assert AccumBounds(1, oo) - oo == AccumBounds(-oo, oo)278    assert (-oo - AccumBounds(-1, oo)) is -oo279    assert AccumBounds(-oo, 1) - oo is -oo280    assert AccumBounds(1, oo) - oo == AccumBounds(-oo, oo)281    assert AccumBounds(-oo, 1) - (-oo) == AccumBounds(-oo, oo)282    assert (oo - AccumBounds(1, oo)) == AccumBounds(-oo, oo)283    assert (-oo - AccumBounds(1, oo)) is -oo284    assert AccumBounds(1, 2)/2 == AccumBounds(S.Half, 1)285    assert 2/AccumBounds(2, 3) == AccumBounds(Rational(2, 3), 1)286    assert 1/AccumBounds(-1, 1) == AccumBounds(-oo, oo)287    assert abs(AccumBounds(1, 2)) == AccumBounds(1, 2)288    assert abs(AccumBounds(-2, -1)) == AccumBounds(1, 2)289    assert abs(AccumBounds(-2, 1)) == AccumBounds(0, 2)290    assert abs(AccumBounds(-1, 2)) == AccumBounds(0, 2)291    c = Symbol('c')292    raises(ValueError, lambda: AccumBounds(0, c))293    raises(ValueError, lambda: AccumBounds(1, -1))294def test_AccumBounds_mul():295    assert AccumBounds(1, 2)*2 == AccumBounds(2, 4)296    assert 2*AccumBounds(1, 2) == AccumBounds(2, 4)297    assert AccumBounds(1, 2)*AccumBounds(2, 3) == AccumBounds(2, 6)298    assert AccumBounds(1, 2)*0 == 0299    assert AccumBounds(1, oo)*0 == AccumBounds(0, oo)300    assert AccumBounds(-oo, 1)*0 == AccumBounds(-oo, 0)301    assert AccumBounds(-oo, oo)*0 == AccumBounds(-oo, oo)302    assert AccumBounds(1, 2)*x == Mul(AccumBounds(1, 2), x, evaluate=False)303    assert AccumBounds(0, 2)*oo == AccumBounds(0, oo)304    assert AccumBounds(-2, 0)*oo == AccumBounds(-oo, 0)305    assert AccumBounds(0, 2)*(-oo) == AccumBounds(-oo, 0)306    assert AccumBounds(-2, 0)*(-oo) == AccumBounds(0, oo)307    assert AccumBounds(-1, 1)*oo == AccumBounds(-oo, oo)308    assert AccumBounds(-1, 1)*(-oo) == AccumBounds(-oo, oo)309    assert AccumBounds(-oo, oo)*oo == AccumBounds(-oo, oo)310def test_AccumBounds_div():311    assert AccumBounds(-1, 3)/AccumBounds(3, 4) == AccumBounds(Rational(-1, 3), 1)312    assert AccumBounds(-2, 4)/AccumBounds(-3, 4) == AccumBounds(-oo, oo)313    assert AccumBounds(-3, -2)/AccumBounds(-4, 0) == AccumBounds(S.Half, oo)314    # these two tests can have a better answer315    # after Union of AccumBounds is improved316    assert AccumBounds(-3, -2)/AccumBounds(-2, 1) == AccumBounds(-oo, oo)317    assert AccumBounds(2, 3)/AccumBounds(-2, 2) == AccumBounds(-oo, oo)318    assert AccumBounds(-3, -2)/AccumBounds(0, 4) == AccumBounds(-oo, Rational(-1, 2))319    assert AccumBounds(2, 4)/AccumBounds(-3, 0) == AccumBounds(-oo, Rational(-2, 3))320    assert AccumBounds(2, 4)/AccumBounds(0, 3) == AccumBounds(Rational(2, 3), oo)321    assert AccumBounds(0, 1)/AccumBounds(0, 1) == AccumBounds(0, oo)322    assert AccumBounds(-1, 0)/AccumBounds(0, 1) == AccumBounds(-oo, 0)323    assert AccumBounds(-1, 2)/AccumBounds(-2, 2) == AccumBounds(-oo, oo)324    assert 1/AccumBounds(-1, 2) == AccumBounds(-oo, oo)325    assert 1/AccumBounds(0, 2) == AccumBounds(S.Half, oo)326    assert (-1)/AccumBounds(0, 2) == AccumBounds(-oo, Rational(-1, 2))327    assert 1/AccumBounds(-oo, 0) == AccumBounds(-oo, 0)328    assert 1/AccumBounds(-1, 0) == AccumBounds(-oo, -1)329    assert (-2)/AccumBounds(-oo, 0) == AccumBounds(0, oo)330    assert 1/AccumBounds(-oo, -1) == AccumBounds(-1, 0)331    assert AccumBounds(1, 2)/a == Mul(AccumBounds(1, 2), 1/a, evaluate=False)332    assert AccumBounds(1, 2)/0 == AccumBounds(1, 2)*zoo333    assert AccumBounds(1, oo)/oo == AccumBounds(0, oo)334    assert AccumBounds(1, oo)/(-oo) == AccumBounds(-oo, 0)335    assert AccumBounds(-oo, -1)/oo == AccumBounds(-oo, 0)336    assert AccumBounds(-oo, -1)/(-oo) == AccumBounds(0, oo)337    assert AccumBounds(-oo, oo)/oo == AccumBounds(-oo, oo)338    assert AccumBounds(-oo, oo)/(-oo) == AccumBounds(-oo, oo)339    assert AccumBounds(-1, oo)/oo == AccumBounds(0, oo)340    assert AccumBounds(-1, oo)/(-oo) == AccumBounds(-oo, 0)341    assert AccumBounds(-oo, 1)/oo == AccumBounds(-oo, 0)342    assert AccumBounds(-oo, 1)/(-oo) == AccumBounds(0, oo)343def test_issue_18795():344    r = Symbol('r', real=True)345    a = AccumBounds(-1,1)346    c = AccumBounds(7, oo)347    b = AccumBounds(-oo, oo)348    assert c - tan(r) == AccumBounds(7-tan(r), oo)349    assert b + tan(r) == AccumBounds(-oo, oo)350    assert (a + r)/a == AccumBounds(-oo, oo)*AccumBounds(r - 1, r + 1)351    assert (b + a)/a == AccumBounds(-oo, oo)352def test_AccumBounds_func():353    assert (x**2 + 2*x + 1).subs(x, AccumBounds(-1, 1)) == AccumBounds(-1, 4)354    assert exp(AccumBounds(0, 1)) == AccumBounds(1, E)355    assert exp(AccumBounds(-oo, oo)) == AccumBounds(0, oo)356    assert log(AccumBounds(3, 6)) == AccumBounds(log(3), log(6))357def test_AccumBounds_pow():358    assert AccumBounds(0, 2)**2 == AccumBounds(0, 4)359    assert AccumBounds(-1, 1)**2 == AccumBounds(0, 1)360    assert AccumBounds(1, 2)**2 == AccumBounds(1, 4)361    assert AccumBounds(-1, 2)**3 == AccumBounds(-1, 8)362    assert AccumBounds(-1, 1)**0 == 1363    assert AccumBounds(1, 2)**Rational(5, 2) == AccumBounds(1, 4*sqrt(2))364    assert AccumBounds(-1, 2)**Rational(1, 3) == AccumBounds(-1, 2**Rational(1, 3))365    assert AccumBounds(0, 2)**S.Half == AccumBounds(0, sqrt(2))366    assert AccumBounds(-4, 2)**Rational(2, 3) == AccumBounds(0, 2*2**Rational(1, 3))367    assert AccumBounds(-1, 5)**S.Half == AccumBounds(0, sqrt(5))368    assert AccumBounds(-oo, 2)**S.Half == AccumBounds(0, sqrt(2))369    assert AccumBounds(-2, 3)**Rational(-1, 4) == AccumBounds(0, oo)370    assert AccumBounds(1, 5)**(-2) == AccumBounds(Rational(1, 25), 1)371    assert AccumBounds(-1, 3)**(-2) == AccumBounds(0, oo)372    assert AccumBounds(0, 2)**(-2) == AccumBounds(Rational(1, 4), oo)373    assert AccumBounds(-1, 2)**(-3) == AccumBounds(-oo, oo)374    assert AccumBounds(-3, -2)**(-3) == AccumBounds(Rational(-1, 8), Rational(-1, 27))375    assert AccumBounds(-3, -2)**(-2) == AccumBounds(Rational(1, 9), Rational(1, 4))376    assert AccumBounds(0, oo)**S.Half == AccumBounds(0, oo)377    assert AccumBounds(-oo, -1)**Rational(1, 3) == AccumBounds(-oo, -1)378    assert AccumBounds(-2, 3)**(Rational(-1, 3)) == AccumBounds(-oo, oo)379    assert AccumBounds(-oo, 0)**(-2) == AccumBounds(0, oo)380    assert AccumBounds(-2, 0)**(-2) == AccumBounds(Rational(1, 4), oo)381    assert AccumBounds(Rational(1, 3), S.Half)**oo is S.Zero382    assert AccumBounds(0, S.Half)**oo is S.Zero383    assert AccumBounds(S.Half, 1)**oo == AccumBounds(0, oo)384    assert AccumBounds(0, 1)**oo == AccumBounds(0, oo)385    assert AccumBounds(2, 3)**oo is oo386    assert AccumBounds(1, 2)**oo == AccumBounds(0, oo)387    assert AccumBounds(S.Half, 3)**oo == AccumBounds(0, oo)388    assert AccumBounds(Rational(-1, 3), Rational(-1, 4))**oo is S.Zero389    assert AccumBounds(-1, Rational(-1, 2))**oo == AccumBounds(-oo, oo)390    assert AccumBounds(-3, -2)**oo == FiniteSet(-oo, oo)391    assert AccumBounds(-2, -1)**oo == AccumBounds(-oo, oo)392    assert AccumBounds(-2, Rational(-1, 2))**oo == AccumBounds(-oo, oo)393    assert AccumBounds(Rational(-1, 2), S.Half)**oo is S.Zero394    assert AccumBounds(Rational(-1, 2), 1)**oo == AccumBounds(0, oo)395    assert AccumBounds(Rational(-2, 3), 2)**oo == AccumBounds(0, oo)396    assert AccumBounds(-1, 1)**oo == AccumBounds(-oo, oo)397    assert AccumBounds(-1, S.Half)**oo == AccumBounds(-oo, oo)398    assert AccumBounds(-1, 2)**oo == AccumBounds(-oo, oo)399    assert AccumBounds(-2, S.Half)**oo == AccumBounds(-oo, oo)400    assert AccumBounds(1, 2)**x == Pow(AccumBounds(1, 2), x)401    assert AccumBounds(2, 3)**(-oo) is S.Zero402    assert AccumBounds(0, 2)**(-oo) == AccumBounds(0, oo)403    assert AccumBounds(-1, 2)**(-oo) == AccumBounds(-oo, oo)404    assert (tan(x)**sin(2*x)).subs(x, AccumBounds(0, pi/2)) == \405        Pow(AccumBounds(-oo, oo), AccumBounds(0, 1))406def test_comparison_AccumBounds():407    assert (AccumBounds(1, 3) < 4) == S.true408    assert (AccumBounds(1, 3) < -1) == S.false409    assert (AccumBounds(1, 3) < 2).rel_op == '<'410    assert (AccumBounds(1, 3) <= 2).rel_op == '<='411    assert (AccumBounds(1, 3) > 4) == S.false412    assert (AccumBounds(1, 3) > -1) == S.true413    assert (AccumBounds(1, 3) > 2).rel_op == '>'414    assert (AccumBounds(1, 3) >= 2).rel_op == '>='415    assert (AccumBounds(1, 3) < AccumBounds(4, 6)) == S.true416    assert (AccumBounds(1, 3) < AccumBounds(2, 4)).rel_op == '<'417    assert (AccumBounds(1, 3) < AccumBounds(-2, 0)) == S.false418    assert (AccumBounds(1, 3) <= AccumBounds(4, 6)) == S.true419    assert (AccumBounds(1, 3) <= AccumBounds(-2, 0)) == S.false420    assert (AccumBounds(1, 3) > AccumBounds(4, 6)) == S.false421    assert (AccumBounds(1, 3) > AccumBounds(-2, 0)) == S.true422    assert (AccumBounds(1, 3) >= AccumBounds(4, 6)) == S.false423    assert (AccumBounds(1, 3) >= AccumBounds(-2, 0)) == S.true424    # issue 13499425    assert (cos(x) > 0).subs(x, oo) == (AccumBounds(-1, 1) > 0)426    c = Symbol('c')427    raises(TypeError, lambda: (AccumBounds(0, 1) < c))428    raises(TypeError, lambda: (AccumBounds(0, 1) <= c))429    raises(TypeError, lambda: (AccumBounds(0, 1) > c))430    raises(TypeError, lambda: (AccumBounds(0, 1) >= c))431def test_contains_AccumBounds():432    assert (1 in AccumBounds(1, 2)) == S.true433    raises(TypeError, lambda: a in AccumBounds(1, 2))434    assert 0 in AccumBounds(-1, 0)435    raises(TypeError, lambda:436        (cos(1)**2 + sin(1)**2 - 1) in AccumBounds(-1, 0))437    assert (-oo in AccumBounds(1, oo)) == S.true438    assert (oo in AccumBounds(-oo, 0)) == S.true439    # issue 13159440    assert Mul(0, AccumBounds(-1, 1)) == Mul(AccumBounds(-1, 1), 0) == 0441    import itertools442    for perm in itertools.permutations([0, AccumBounds(-1, 1), x]):443        assert Mul(*perm) == 0444def test_intersection_AccumBounds():445    assert AccumBounds(0, 3).intersection(AccumBounds(1, 2)) == AccumBounds(1, 2)446    assert AccumBounds(0, 3).intersection(AccumBounds(1, 4)) == AccumBounds(1, 3)447    assert AccumBounds(0, 3).intersection(AccumBounds(-1, 2)) == AccumBounds(0, 2)448    assert AccumBounds(0, 3).intersection(AccumBounds(-1, 4)) == AccumBounds(0, 3)449    assert AccumBounds(0, 1).intersection(AccumBounds(2, 3)) == S.EmptySet450    raises(TypeError, lambda: AccumBounds(0, 3).intersection(1))451def test_union_AccumBounds():452    assert AccumBounds(0, 3).union(AccumBounds(1, 2)) == AccumBounds(0, 3)453    assert AccumBounds(0, 3).union(AccumBounds(1, 4)) == AccumBounds(0, 4)454    assert AccumBounds(0, 3).union(AccumBounds(-1, 2)) == AccumBounds(-1, 3)455    assert AccumBounds(0, 3).union(AccumBounds(-1, 4)) == AccumBounds(-1, 4)456    raises(TypeError, lambda: AccumBounds(0, 3).union(1))457def test_issue_16469():458    x = Symbol("x", real=True)459    f = abs(x)460    assert function_range(f, x, S.Reals) == Interval(0, oo, False, True)461def test_issue_18747():...rtree.py
Source:rtree.py  
...33        index of node's parent34    """35    return (node - 1) // 236@ngjit37def _distances_from_bounds(bounds, total_bounds, p):38    n = bounds.shape[1] // 239    dim_ranges = [(total_bounds[d], total_bounds[d + n]) for d in range(n)]40    # Avoid degenerate case where there is a single unique rectangle that is a41    # single point. Increase the range by 1.0 to prevent divide by zero error42    for d in range(n):43        if dim_ranges[d][0] == dim_ranges[d][1]:44            dim_ranges[d] = (dim_ranges[d][0], dim_ranges[d][1] + 1)45    # Compute hilbert distance of the middle of each bounding box46    dim_mids = [(bounds[:, d] + bounds[:, d + n]) / 2.0 for d in range(n)]47    side_length = 2 ** p48    coords = np.zeros((bounds.shape[0], n), dtype=np.int64)49    for d in range(n):50        coords[:, d] = _data2coord(dim_mids[d], dim_ranges[d], side_length)51    hilbert_distances = distances_from_coordinates(p, coords)52    return hilbert_distances53class HilbertRtree:54    """55    This class provides a numba implementation of a read-only Hilbert R-tree56    spatial index57    See https://en.wikipedia.org/wiki/Hilbert_R-tree for more info on the Hilbert R-tree58    This implementation stores the R-tree as an array representation of a binary tree.59    See https://en.wikipedia.org/wiki/Binary_tree#Arrays for more info on the array60    representation of a binary tree.61    """62    @staticmethod63    @ngjit64    def _build_hilbert_rtree(bounds, p, page_size):65        """66        numba function to construct a Hilbert Rtree67        See HilbertRtree.__init__ for parameter descriptions68        """69        # Handle empty bounds array70        if bounds.size == 0:71            return bounds, np.zeros(0, dtype=np.int64), bounds72        # Init bounds_tree array for storing the binary tree representation73        input_size = bounds.shape[0]74        n = bounds.shape[1] // 275        num_pages = int(np.ceil(input_size / page_size))76        tree_depth = int(np.ceil(np.log2(num_pages)))77        next_pow2 = 2 ** tree_depth78        tree_length = next_pow2 * 2 - 179        bounds_tree = np.full((tree_length, 2 * n), np.nan)80        leaf_start = tree_length - next_pow281        # Compute Hilbert distances for inputs82        total_bounds = ([bounds[:, d].min() for d in range(n)] +83                        [bounds[:, d + n].max() for d in range(n)])84        hilbert_distances = _distances_from_bounds(bounds, total_bounds, p)85        # Calculate indices needed to sort bounds by hilbert distance86        keys = np.argsort(hilbert_distances)87        # Populate leaves of the tree, one leaf per page. This is layer = tree_depth88        sorted_bounds = bounds[keys, :]89        for page in range(num_pages):90            start = page * page_size91            stop = start + page_size92            page_bounds = sorted_bounds[start:stop, :]93            d_mins = [np.min(page_bounds[:, d]) for d in range(n)]94            d_maxes = [np.max(page_bounds[:, d + n]) for d in range(n)]95            d_ranges = d_mins + d_maxes96            bounds_tree[leaf_start + page, :] = d_ranges97        # Populate internal layers of tree98        layer = tree_depth - 199        start = _parent(tree_length - next_pow2)100        stop = _parent(tree_length - 1)101        while layer >= 0:102            for node in range(start, stop + 1):103                left_bounds = bounds_tree[_left_child(node), :]104                left_valid = not np.isnan(left_bounds[0])105                right_bounds = bounds_tree[_right_child(node), :]106                right_valid = not np.isnan(right_bounds[0])107                if left_valid:108                    if right_valid:109                        d_mins = [min(left_bounds[d], right_bounds[d]) for d in range(n)]110                        d_maxes = [max(left_bounds[d + n], right_bounds[d + n]) for d in range(n)]111                        d_ranges = d_mins + d_maxes112                        bounds_tree[node, :] = d_ranges113                    else:114                        bounds_tree[node, :] = left_bounds115                elif right_valid:116                    bounds_tree[node, :] = right_bounds117            # update layer, start/stop118            start = _parent(start)119            stop = _parent(stop)120            layer -= 1121        return sorted_bounds, keys, bounds_tree122    def __init__(self, bounds, p=10, page_size=512):123        """124        Construct a new HilbertRtree125        Args:126            bounds: A 2-dimensional numpy array representing a collection of127                n-dimensional bounding boxes. One row per bounding box with128                2*n columns containing the coordinates of each bounding box as follows:129                    - bounds[:, 0:n] contains the min values of the bounding boxes,130                        one column for each of the n dimensions131                    - bounds[:, n+1:2n] contains the max values of the bounding boxes,132                        one column for each of the n dimensions133            p: The Hilbert curve order parameter that determines the resolution134                of the 2D grid that data points are rounded to before computing135                their Hilbert distance. Points will be discretized into 2 ** p136                bins in both the x and y dimensions.137            page_size: Number of elements per leaf of the tree.138        """139        # Validate/coerce inputs140        if len(bounds.shape) != 2:141            raise ValueError("bounds must be a 2D array")142        if bounds.shape[1] < 2 or bounds.shape[1] % 2 != 0:143            raise ValueError(144                "The second dimension of bounds must be a multiple of 2 and at least 2"145            )146        self._page_size = max(1, page_size)  # 1 is smallest valid page size147        self._numba_rtree = None148        self._sorted_bounds, self._keys, self._bounds_tree = \149            HilbertRtree._build_hilbert_rtree(bounds.astype('float64'), p, self._page_size)150    def __getstate__(self):151        # Remove _NumbaRtree instance during serialization since jitclass instances152        # don't support it.153        state = self.__dict__154        state['_numba_rtree'] = None155        return state156    @property157    def numba_rtree(self):158        """159        Returns:160            _NumbaRtree jitclass instance that is suitable for use inside numba161            functions162        """163        if self._numba_rtree is None:164            self._numba_rtree = _NumbaRtree(165                self._sorted_bounds, self._keys, self._page_size, self._bounds_tree166            )167        return self._numba_rtree168    def intersects(self, bounds):169        """170        Compute the indices of the input bounding boxes that intersect with the171        supplied query bounds172        Args:173            bounds: An array of the form [min0, min1, ..., max0, max1, ...]174                representing the bounds to calculate intersections against175        Returns:176            1d numpy array of the indices of all of the rows in the input bounds array177            that intersect with the query bounds178        """179        bounds = tuple(float(b) for b in bounds)180        return self.numba_rtree.intersects(bounds)181    def covers_overlaps(self, bounds):182        """183        Simultaneously compute the indices of the input bounding boxes that are covered184        by the query bounds and those that overlap with the query bounds185        Args:186            bounds: An array of the form [min0, min1, ..., max0, max1, ...]187                representing the bounds to calculate intersections against188        Returns:189            Tuple of two 1d numpy arrays of indices into the input bounds array.190              * The first array contains indices of all bounding boxes that are fully191              covered by the query bounds.192              * The second array contains the indices of all bounding boxes that193              overlap with one or more edges of the query bounds.194        """195        bounds = tuple(float(b) for b in bounds)196        return self.numba_rtree.covers_overlaps(bounds)197    @property198    def empty(self):199        """200        True if the RTree was created with zero bounding boxes201        """202        return self.numba_rtree._bounds_tree.shape[0] == 0203    @property204    def total_bounds(self):205        """206        Tuple of the total bounds of all bounding boxes207        """208        if not self.empty:209            return tuple(self.numba_rtree._bounds_tree[0, :])210        else:211            return tuple((np.nan,) * self.numba_rtree._bounds_tree.shape[1])212_numbartree_spec = [213    ('_bounds', float64[:, :]),214    ('_keys', int64[:]),215    ('_page_size', int64),216    ('_bounds_tree', float64[:, :]),217]218@jitclass(_numbartree_spec)...arbitrage.py
Source:arbitrage.py  
...18    bid = linprog(np.array([ 1, 0]), A_ub, b_ub).x19    ask = linprog(np.array([-1, 0]), A_ub, b_ub).x20    coords = [('side', ['ask', 'bid']), ('asset', ['forward', 'bond'])]21    return xr.DataArray([bid, ask], coords)22def compute_no_arb_bounds(parity, time):23    parity_slice = parity.sel(time=time)24    no_arb_bounds = parity_slice.groupby('expiry', restore_coord_dims=True).map(25        lambda e: compute_no_arb_bounds_map(e.bid, e.ask, e.strike))26    return no_arb_bounds.to_dataset(name='bounds')27def plot_parity_bounds(no_arb_bounds, parity, time, n_expiries):28    no_arb_bounds = no_arb_bounds.bounds29    parity = parity.set_index({'option_id': ['expiry', 'strike']})30    expiries = np.unique(parity.expiry)31    parity_slice = parity.sel(time=time)32    strike_max = np.max(parity_slice.strike.values)33    parity_bid = parity_slice.bid.reset_coords(drop=True34                            ).to_series().dropna().unstack('expiry')35    parity_ask = parity_slice.ask.reset_coords(drop=True36                            ).to_series().dropna().unstack('expiry')37    parity_bid += parity_bid.index.values[:, None]38    parity_ask += parity_ask.index.values[:, None]39    forward_bounds = no_arb_bounds.sel(asset='forward').to_dataset('side'40                                 ).reset_coords(drop=True).to_dataframe()41    bond_bounds = no_arb_bounds.sel(asset='bond').to_dataset('side'42                              ).reset_coords(drop=True).to_dataframe()43    parity_bounds = pd.concat([forward_bounds,44                               forward_bounds - (bond_bounds - 1)*strike_max],45                              keys=[0, strike_max], names=['strike'])46    colours = cm.coolwarm(np.linspace(0., 1., len(expiries)))47    fig, axes = plt.subplots(2, 1, sharex=True, figsize=(A4_WIDTH, A4_HEIGHT))48    for ax in axes:49        parity_bid.plot(marker='^', linewidth=0, ax=ax, color=colours,50                        markersize=3)51        parity_ask.plot(marker='v', linewidth=0, ax=ax, color=colours,52                        markersize=3, legend=False)53        ylim = ax.get_ylim()54        for (_, g), c in zip(parity_bounds.groupby('expiry'), colours):55            g = g.droplevel('expiry')56            ax.fill_between(g.index, g.bid, g.ask, color=c, alpha=.2)57        ax.set_ylim(ylim)58        ax.set_ylabel(r'price minus strike')59    axes[0].get_legend().remove()60    axes[0].set_ylim((parity_bid[expiries[n_expiries - 1]].min(), None))61    return fig62def plot_forward_bounds(no_arb_bounds):63    no_arb_bounds = no_arb_bounds.bounds64    forward_bounds = no_arb_bounds.sel(asset='forward').to_dataset('side'65                                 ).reset_coords(drop=True).to_dataframe()66    fig, ax = plt.subplots(figsize=(A4_WIDTH, A4_HEIGHT/2))67    ax.fill_between(forward_bounds.index, forward_bounds.bid,68                    forward_bounds.ask, step='mid')69    ax.set_xlabel('expiry')70    ax.set_xlabel('forward price')71    return fig72def plot_no_arb_yield_curve(no_arb_bounds, parity):73    no_arb_bounds = no_arb_bounds.bounds74    bond_bounds = no_arb_bounds.sel(asset='bond').to_dataset('side'75                              ).reset_coords(drop=True).to_dataframe()76    years_to_expiry = parity.years_to_expiry.groupby('expiry').first(...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
