""" Test Jedi's operation understanding. Jedi should understand simple additions, multiplications, etc. """ # ----------------- # numbers # ----------------- x = [1, 'a', 1.0] #? int() str() float() x[12] #? float() x[1 + 1] index = 0 + 1 #? str() x[index] #? int() x[1 + (-1)] def calculate(number): return number + constant constant = 1 #? float() x[calculate(1)] def calculate(number): return number + constant # ----------------- # strings # ----------------- x = 'upp' + 'e' #? str.upper getattr(str, x + 'r') a = "a"*3 #? str() a a = 3 * "a" #? str() a a = 3 * "a" #? str() a #? int() (3 ** 3) #? int() (3 ** 'a') #? int() (3 + 'a') #? bool() (3 == 'a') #? bool() (3 >= 'a') class X(): foo = 2 #? int() (X.foo ** 3) # ----------------- # assignments # ----------------- x = [1, 'a', 1.0] i = 0 i += 1 i += 1 #? float() x[i] i = 1 i += 1 i -= 3 i += 1 #? int() x[i] # ----------------- # in # ----------------- if 'X' in 'Y': a = 3 else: a = '' # For now don't really check for truth values. So in should return both # results. #? str() int() a if 'X' not in 'Y': b = 3 else: b = '' # For now don't really check for truth values. So in should return both # results. #? str() int() b # ----------------- # for flow assignments # ----------------- class FooBar(object): fuu = 0.1 raboof = 'fourtytwo' # targets should be working target = '' for char in ['f', 'u', 'u']: target += char #? float() getattr(FooBar, target) # github #24 target = u'' for char in reversed(['f', 'o', 'o', 'b', 'a', 'r']): target += char #? str() getattr(FooBar, target) # ----------------- # repetition problems -> could be very slow and memory expensive - shouldn't # be. # ----------------- b = [str(1)] l = list for x in [l(0), l(1), l(2), l(3), l(4), l(5), l(6), l(7), l(8), l(9), l(10), l(11), l(12), l(13), l(14), l(15), l(16), l(17), l(18), l(19), l(20), l(21), l(22), l(23), l(24), l(25), l(26), l(27), l(28), l(29)]: b += x #? str() b[1] # ----------------- # undefined names # ----------------- a = foobarbaz + 'hello' #? int() float() {'hello': 1, 'bar': 1.0}[a] # ----------------- # stubs # ----------------- from datetime import datetime, timedelta #? (datetime - timedelta) #? datetime() (datetime() - timedelta()) #? timedelta() (datetime() - datetime()) #? timedelta() (timedelta() - datetime()) #? timedelta() (timedelta() - timedelta()) # ----------------- # magic methods # ----------------- class C: def __sub__(self, other) -> int: ... def __radd__(self, other) -> float: ... #? int() (C() - object()) #? C() object() (object() - C()) #? C() object() (C() + object()) #? float() (object() + C())