from restrain_jit.bejulia.functional import foreach, select, J from restrain_jit.bejulia.tools import show_instrs from restrain_jit.bejulia.pragmas import const from restrain_jit.bejulia.julia_vm import JuVM from restrain_jit.bejulia.jl_init import init # import numpy as np init() jit = JuVM.func_info a = J @ [1, 2, 3] @jit def test_append(x): x.append(1) return x # show_instrs(f.__func_info__.r_codeinfo.instrs) print(test_append(a) == np.array([1, 2, 3, 1])) @jit def test_repeat_append_jit(): x = [1] x.pop() for i in range(10000): x.append(i) return x @jit def test_repeat_append_jit_foreach(): x = [1] x.pop() @foreach(range(10000)) def each(e): x.append(e) return x def test_repeat_append_nojit(): x = [] for i in range(100000): x.append(i) return x # print(test_repeat_append_jit()) # print(test_repeat_append_jit_foreach()) # # for e in (test_repeat_append_jit_foreach.__func_info__.r_codeinfo.instrs): # print(e) # show_instrs(test_repeat_append_jit_foreach.__func_info__.r_codeinfo.instrs) # # %timeit test_repeat_append_jit() # %timeit test_repeat_append_nojit() # %timeit test_repeat_append_jit_foreach() from julia import Main tt = Main.eval(""" function tt() x = [] for i in 0:9999 push!(x, i) end x end """) tt() import timeit print(timeit.timeit("tt()", globals=dict(tt=tt), number=1000)) print(timeit.timeit( "tt()", globals=dict(tt=test_repeat_append_nojit), number=1000))