diff --git a/Test/NumpyTest/App/test_numpy.vp b/Test/NumpyTest/App/test_numpy.vp index 91cf870..1b25d0f 100644 --- a/Test/NumpyTest/App/test_numpy.vp +++ b/Test/NumpyTest/App/test_numpy.vp @@ -69,18 +69,18 @@ def section_footer(): # ============================================================ # Utility: quick array creation # ============================================================ -def vec4(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble, v3: t.CDouble) -> numpy.ndarray | t.CPtr: - a: numpy.ndarray | t.CPtr = numpy.zeros(p, 4) +def vec4(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble, v3: t.CDouble) -> numpy.ndarray[t.CDouble] | t.CPtr: + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(p, 4) a.data[0] = v0; a.data[1] = v1; a.data[2] = v2; a.data[3] = v3 return a -def vec3(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble) -> numpy.ndarray | t.CPtr: - a: numpy.ndarray | t.CPtr = numpy.zeros(p, 3) +def vec3(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble, v2: t.CDouble) -> numpy.ndarray[t.CDouble] | t.CPtr: + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(p, 3) a.data[0] = v0; a.data[1] = v1; a.data[2] = v2 return a -def vec2(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble) -> numpy.ndarray | t.CPtr: - a: numpy.ndarray | t.CPtr = numpy.zeros(p, 2) +def vec2(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble) -> numpy.ndarray[t.CDouble] | t.CPtr: + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(p, 2) a.data[0] = v0; a.data[1] = v1 return a @@ -91,18 +91,18 @@ def vec2(p: memhub.MemPool | t.CPtr, v0: t.CDouble, v1: t.CDouble) -> numpy.ndar def test_zeros_ones(): section_header("zeros / ones / full") - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 5) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 5) check("zeros not None", a != None, "zeros returned None") check("zeros size == 5", a.size == 5, "size mismatch") check("zeros [0]==0", a.data[0] == t.CDouble(0.0), "not zero") check("zeros [4]==0", a.data[4] == t.CDouble(0.0), "not zero") - b: numpy.ndarray | t.CPtr = numpy.ones(pool, 4) + b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.ones(pool, 4) check("ones not None", b != None, "ones returned None") check("ones [0]==1", b.data[0] == t.CDouble(1.0), "not one") check("ones [3]==1", b.data[3] == t.CDouble(1.0), "not one") - c: numpy.ndarray | t.CPtr = numpy.full(pool, 3, t.CDouble(7.5)) + c: numpy.ndarray[t.CDouble] | t.CPtr = numpy.full(pool, 3, t.CDouble(7.5)) check("full not None", c != None, "full returned None") check("full value", c.data[0] == t.CDouble(7.5), "value mismatch") @@ -115,13 +115,13 @@ def test_zeros_ones(): def test_arange_linspace(): section_header("arange / linspace") - a: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(5.0), t.CDouble(1.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(5.0), t.CDouble(1.0)) check("arange not None", a != None, "arange returned None") check("arange size == 5", a.size == 5, "size mismatch") check("arange [0]==0", approx_eq(a.data[0], t.CDouble(0.0)), "mismatch") check("arange [4]==4", approx_eq(a.data[4], t.CDouble(4.0)), "mismatch") - b: numpy.ndarray | t.CPtr = numpy.linspace(pool, t.CDouble(0.0), t.CDouble(1.0), 5) + b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.linspace(pool, t.CDouble(0.0), t.CDouble(1.0), 5) check("linspace not None", b != None, "linspace returned None") check("linspace size == 5", b.size == 5, "size mismatch") check("linspace [0]==0", approx_eq(b.data[0], t.CDouble(0.0)), "mismatch") @@ -135,15 +135,15 @@ def test_arange_linspace(): def test_eye_diag(): section_header("eye / diag") - e: numpy.ndarray | t.CPtr = numpy.eye(pool, 3) + e: numpy.ndarray[t.CDouble] | t.CPtr = numpy.eye(pool, 3) check("eye not None", e != None, "eye returned None") check("eye ndim == 2", e.ndim == 2, "ndim mismatch") check("eye [0,0]==1", e.at2d(0, 0) == t.CDouble(1.0), "mismatch") check("eye [0,1]==0", e.at2d(0, 1) == t.CDouble(0.0), "mismatch") check("eye [1,1]==1", e.at2d(1, 1) == t.CDouble(1.0), "mismatch") - vals: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - d: numpy.ndarray | t.CPtr = numpy.diag(pool, vals) + vals: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + d: numpy.ndarray[t.CDouble] | t.CPtr = numpy.diag(pool, vals) check("diag not None", d != None, "diag returned None") check("diag [0,0]==1", d.at2d(0, 0) == t.CDouble(1.0), "mismatch") check("diag [1,1]==2", d.at2d(1, 1) == t.CDouble(2.0), "mismatch") @@ -161,7 +161,7 @@ def test_eye_diag(): def test_sum_mean_min_max(): section_header("sum / mean / min / max / argmax / argmin") - a: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(1.0), t.CDouble(6.0), t.CDouble(1.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange(pool, t.CDouble(1.0), t.CDouble(6.0), t.CDouble(1.0)) check("sum == 15", approx_eq(a.sum(), t.CDouble(15.0)), "mismatch") check("mean == 3", approx_eq(a.mean(), t.CDouble(3.0)), "mismatch") check("min == 1", approx_eq(a.min(), t.CDouble(1.0)), "mismatch") @@ -176,12 +176,12 @@ def test_sum_mean_min_max(): def test_fill_copy(): section_header("fill / copy") - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 3) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 3) a.fill(t.CDouble(9.0)) check("fill [0]==9", a.data[0] == t.CDouble(9.0), "mismatch") check("fill [2]==9", a.data[2] == t.CDouble(9.0), "mismatch") - b: numpy.ndarray | t.CPtr = a.copy() + b: numpy.ndarray[t.CDouble] | t.CPtr = a.copy() check("copy not None", b != None, "copy returned None") check("copy [0]==9", b.data[0] == t.CDouble(9.0), "mismatch") @@ -199,21 +199,21 @@ def test_fill_copy(): def test_add_sub_mul_div(): section_header("__add__ / __sub__ / __mul__ / __truediv__") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(5.0), t.CDouble(6.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(5.0), t.CDouble(6.0)) - c_add: numpy.ndarray | t.CPtr = a + b + c_add: numpy.ndarray[t.CDouble] | t.CPtr = a + b check("a+b not None", c_add != None, "add returned None") check("a+b [0]==5", c_add.data[0] == t.CDouble(5.0), "mismatch") check("a+b [2]==9", c_add.data[2] == t.CDouble(9.0), "mismatch") - c_sub: numpy.ndarray | t.CPtr = a - b + c_sub: numpy.ndarray[t.CDouble] | t.CPtr = a - b check("a-b [0]==-3", c_sub.data[0] == t.CDouble(-3.0), "mismatch") - c_mul: numpy.ndarray | t.CPtr = a * b + c_mul: numpy.ndarray[t.CDouble] | t.CPtr = a * b check("a*b [1]==10", c_mul.data[1] == t.CDouble(10.0), "mismatch") - c_div: numpy.ndarray | t.CPtr = b / a + c_div: numpy.ndarray[t.CDouble] | t.CPtr = b / a check("b/a [0]==4", c_div.data[0] == t.CDouble(4.0), "mismatch") check("b/a [2]==2", c_div.data[2] == t.CDouble(2.0), "mismatch") @@ -229,8 +229,8 @@ def test_add_sub_mul_div(): def test_neg(): section_header("__neg__") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(-2.0), t.CDouble(3.0)) - neg_a: numpy.ndarray | t.CPtr = -a + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(-2.0), t.CDouble(3.0)) + neg_a: numpy.ndarray[t.CDouble] | t.CPtr = -a check("neg not None", neg_a != None, "neg returned None") check("neg [0]==-1", neg_a.data[0] == t.CDouble(-1.0), "mismatch") check("neg [1]==2", neg_a.data[1] == t.CDouble(2.0), "mismatch") @@ -243,7 +243,7 @@ def test_neg(): def test_len(): section_header("__len__") - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 10) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 10) check("len == 10", len(a) == 10, "mismatch") a.delete() @@ -256,18 +256,18 @@ def test_len(): def test_scalar_ops(): section_header("add_scalar / mul_scalar / sub_scalar / div_scalar") - a: numpy.ndarray | t.CPtr = numpy.ones(pool, 3) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.ones(pool, 3) - r1: numpy.ndarray | t.CPtr = numpy.add_scalar(a, t.CDouble(2.0)) + r1: numpy.ndarray[t.CDouble] | t.CPtr = numpy.add_scalar(a, t.CDouble(2.0)) check("add_scalar [0]==3", r1.data[0] == t.CDouble(3.0), "mismatch") - r2: numpy.ndarray | t.CPtr = numpy.mul_scalar(a, t.CDouble(5.0)) + r2: numpy.ndarray[t.CDouble] | t.CPtr = numpy.mul_scalar(a, t.CDouble(5.0)) check("mul_scalar [0]==5", r2.data[0] == t.CDouble(5.0), "mismatch") - r3: numpy.ndarray | t.CPtr = numpy.sub_scalar(a, t.CDouble(0.5)) + r3: numpy.ndarray[t.CDouble] | t.CPtr = numpy.sub_scalar(a, t.CDouble(0.5)) check("sub_scalar [0]==0.5", r3.data[0] == t.CDouble(0.5), "mismatch") - r4: numpy.ndarray | t.CPtr = numpy.div_scalar(a, t.CDouble(2.0)) + r4: numpy.ndarray[t.CDouble] | t.CPtr = numpy.div_scalar(a, t.CDouble(2.0)) check("div_scalar [0]==0.5", r4.data[0] == t.CDouble(0.5), "mismatch") a.delete() @@ -284,20 +284,20 @@ def test_scalar_ops(): def test_math_funcs(): section_header("np_abs / np_sqrt / np_pow") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(4.0), t.CDouble(9.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(4.0), t.CDouble(9.0)) - r_sqrt: numpy.ndarray | t.CPtr = numpy.np_sqrt(a) + r_sqrt: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_sqrt(a) check("sqrt [0]==1", approx_eq(r_sqrt.data[0], t.CDouble(1.0)), "mismatch") check("sqrt [1]==2", approx_eq(r_sqrt.data[1], t.CDouble(2.0)), "mismatch") check("sqrt [2]==3", approx_eq(r_sqrt.data[2], t.CDouble(3.0)), "mismatch") - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(-1.0), t.CDouble(-4.0), t.CDouble(9.0)) - r_abs: numpy.ndarray | t.CPtr = numpy.np_abs(b) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(-1.0), t.CDouble(-4.0), t.CDouble(9.0)) + r_abs: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_abs(b) check("abs [0]==1", approx_eq(r_abs.data[0], t.CDouble(1.0)), "mismatch") check("abs [1]==4", approx_eq(r_abs.data[1], t.CDouble(4.0)), "mismatch") - c: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - r_pow: numpy.ndarray | t.CPtr = numpy.np_pow(c, t.CDouble(2.0)) + c: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + r_pow: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_pow(c, t.CDouble(2.0)) check("pow [0]==1", approx_eq(r_pow.data[0], t.CDouble(1.0)), "mismatch") check("pow [1]==4", approx_eq(r_pow.data[1], t.CDouble(4.0)), "mismatch") check("pow [2]==9", approx_eq(r_pow.data[2], t.CDouble(9.0)), "mismatch") @@ -318,15 +318,15 @@ def test_matmul(): section_header("matmul") # [1,2;3,4] x [5,6;7,8] = [19,22;43,50] - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.empty2d(pool, 2, 2) a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)) a.set2d(1, 0, t.CDouble(3.0)); a.set2d(1, 1, t.CDouble(4.0)) - b: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) + b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.empty2d(pool, 2, 2) b.set2d(0, 0, t.CDouble(5.0)); b.set2d(0, 1, t.CDouble(6.0)) b.set2d(1, 0, t.CDouble(7.0)); b.set2d(1, 1, t.CDouble(8.0)) - c: numpy.ndarray | t.CPtr = numpy.matmul(a, b) + c: numpy.ndarray[t.CDouble] | t.CPtr = numpy.matmul(a, b) check("matmul not None", c != None, "matmul returned None") check("matmul [0,0]==19", c.at2d(0, 0) == t.CDouble(19.0), "mismatch") check("matmul [0,1]==22", c.at2d(0, 1) == t.CDouble(22.0), "mismatch") @@ -342,8 +342,8 @@ def test_matmul(): def test_dot(): section_header("dot / dot_product") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(5.0), t.CDouble(6.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(5.0), t.CDouble(6.0)) d: t.CDouble = a.dot(b) check("dot == 32", approx_eq(d, t.CDouble(32.0)), "mismatch") @@ -359,11 +359,11 @@ def test_dot(): def test_transpose(): section_header("T (transpose)") - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 3) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.empty2d(pool, 2, 3) a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)); a.set2d(0, 2, t.CDouble(3.0)) a.set2d(1, 0, t.CDouble(4.0)); a.set2d(1, 1, t.CDouble(5.0)); a.set2d(1, 2, t.CDouble(6.0)) - at: numpy.ndarray | t.CPtr = a.T() + at: numpy.ndarray[t.CDouble] | t.CPtr = a.T() check("T not None", at != None, "T returned None") check("T shape[0]==3", at.shape[0] == 3, "shape mismatch") check("T shape[1]==2", at.shape[1] == 2, "shape mismatch") @@ -383,7 +383,7 @@ def test_var_std_norm(): section_header("var / std / norm") # [2,4,4,4,5,5,7,9] mean=5, var=4, std=2 - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 8) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 8) a.data[0] = t.CDouble(2.0); a.data[1] = t.CDouble(4.0) a.data[2] = t.CDouble(4.0); a.data[3] = t.CDouble(4.0) a.data[4] = t.CDouble(5.0); a.data[5] = t.CDouble(5.0) @@ -397,7 +397,7 @@ def test_var_std_norm(): printf(" std = %.6f (expect 2.0)\n", s) check("std ~= 2", approx_eq(s, t.CDouble(2.0)), "mismatch") - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(3.0), t.CDouble(4.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(3.0), t.CDouble(4.0)) n: t.CDouble = numpy.norm(b) printf(" norm = %.6f (expect 5.0)\n", n) check("norm ~= 5", approx_eq(n, t.CDouble(5.0)), "mismatch") @@ -410,15 +410,15 @@ def test_var_std_norm(): def test_clip_concatenate(): section_header("clip / concatenate") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(5.0), t.CDouble(10.0)) - r: numpy.ndarray | t.CPtr = numpy.clip(a, t.CDouble(2.0), t.CDouble(8.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(5.0), t.CDouble(10.0)) + r: numpy.ndarray[t.CDouble] | t.CPtr = numpy.clip(a, t.CDouble(2.0), t.CDouble(8.0)) check("clip [0]==2", r.data[0] == t.CDouble(2.0), "mismatch") check("clip [1]==5", r.data[1] == t.CDouble(5.0), "mismatch") check("clip [2]==8", r.data[2] == t.CDouble(8.0), "mismatch") - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(1.0), t.CDouble(2.0)) - c: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(3.0), t.CDouble(4.0)) - cat: numpy.ndarray | t.CPtr = numpy.concatenate(b, c) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(1.0), t.CDouble(2.0)) + c: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(3.0), t.CDouble(4.0)) + cat: numpy.ndarray[t.CDouble] | t.CPtr = numpy.concatenate(b, c) check("concatenate not None", cat != None, "concatenate returned None") check("concatenate size == 4", cat.size == 4, "size mismatch") check("concatenate [0]==1", cat.data[0] == t.CDouble(1.0), "mismatch") @@ -435,14 +435,14 @@ def test_clip_concatenate(): def test_sort_reverse(): section_header("sort_arr / reverse") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(3.0), t.CDouble(1.0), t.CDouble(2.0)) - s: numpy.ndarray | t.CPtr = numpy.sort_arr(a) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(3.0), t.CDouble(1.0), t.CDouble(2.0)) + s: numpy.ndarray[t.CDouble] | t.CPtr = numpy.sort_arr(a) check("sort not None", s != None, "sort returned None") check("sort [0]==1", s.data[0] == t.CDouble(1.0), "mismatch") check("sort [1]==2", s.data[1] == t.CDouble(2.0), "mismatch") check("sort [2]==3", s.data[2] == t.CDouble(3.0), "mismatch") - r: numpy.ndarray | t.CPtr = numpy.reverse(a) + r: numpy.ndarray[t.CDouble] | t.CPtr = numpy.reverse(a) check("reverse not None", r != None, "reverse returned None") check("reverse [0]==2", r.data[0] == t.CDouble(2.0), "mismatch") check("reverse [1]==1", r.data[1] == t.CDouble(1.0), "mismatch") @@ -457,11 +457,11 @@ def test_sort_reverse(): def test_print_arr(): section_header("print_arr") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) printf(" 1D array: ") a.print_arr() - b: numpy.ndarray | t.CPtr = numpy.eye(pool, 3) + b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.eye(pool, 3) printf(" 2D eye(3):\n") b.print_arr() @@ -476,15 +476,15 @@ def test_print_arr(): def test_floordiv_mod(): section_header("__floordiv__ / __mod__") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(7.0), t.CDouble(10.0), t.CDouble(15.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(2.0), t.CDouble(3.0), t.CDouble(4.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(7.0), t.CDouble(10.0), t.CDouble(15.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(2.0), t.CDouble(3.0), t.CDouble(4.0)) - c_fd: numpy.ndarray | t.CPtr = a // b + c_fd: numpy.ndarray[t.CDouble] | t.CPtr = a // b check("7//2==3", c_fd.data[0] == t.CDouble(3.0), "mismatch") check("10//3==3", c_fd.data[1] == t.CDouble(3.0), "mismatch") check("15//4==3", c_fd.data[2] == t.CDouble(3.0), "mismatch") - c_mod: numpy.ndarray | t.CPtr = a % b + c_mod: numpy.ndarray[t.CDouble] | t.CPtr = a % b check("7%%2==1", c_mod.data[0] == t.CDouble(1.0), "mismatch") check("10%%3==1", c_mod.data[1] == t.CDouble(1.0), "mismatch") check("15%%4==3", c_mod.data[2] == t.CDouble(3.0), "mismatch") @@ -502,35 +502,35 @@ def test_floordiv_mod(): def test_additional_math(): section_header("np_log10 / np_log2 / np_floor / np_ceil / np_round / np_sign") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(10.0), t.CDouble(100.0), t.CDouble(1000.0)) - r_log10: numpy.ndarray | t.CPtr = numpy.np_log10(a) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(10.0), t.CDouble(100.0), t.CDouble(1000.0)) + r_log10: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_log10(a) check("log10(10)~=1", approx_loose(r_log10.data[0], t.CDouble(1.0)), "mismatch") check("log10(100)~=2", approx_loose(r_log10.data[1], t.CDouble(2.0)), "mismatch") - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(2.0), t.CDouble(4.0), t.CDouble(8.0)) - r_log2: numpy.ndarray | t.CPtr = numpy.np_log2(b) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(2.0), t.CDouble(4.0), t.CDouble(8.0)) + r_log2: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_log2(b) check("log2(2)~=1", approx_loose(r_log2.data[0], t.CDouble(1.0)), "mismatch") check("log2(4)~=2", approx_loose(r_log2.data[1], t.CDouble(2.0)), "mismatch") - c: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.5), t.CDouble(2.7), t.CDouble(-1.3)) - r_floor: numpy.ndarray | t.CPtr = numpy.np_floor(c) + c: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.5), t.CDouble(2.7), t.CDouble(-1.3)) + r_floor: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_floor(c) check("floor(1.5)==1", r_floor.data[0] == t.CDouble(1.0), "mismatch") check("floor(2.7)==2", r_floor.data[1] == t.CDouble(2.0), "mismatch") check("floor(-1.3)==-2", r_floor.data[2] == t.CDouble(-2.0), "mismatch") - r_ceil: numpy.ndarray | t.CPtr = numpy.np_ceil(c) + r_ceil: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_ceil(c) check("ceil(1.5)==2", r_ceil.data[0] == t.CDouble(2.0), "mismatch") check("ceil(2.7)==3", r_ceil.data[1] == t.CDouble(3.0), "mismatch") check("ceil(-1.3)==-1", r_ceil.data[2] == t.CDouble(-1.0), "mismatch") - d: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.4), t.CDouble(2.5), t.CDouble(3.6)) - r_round: numpy.ndarray | t.CPtr = numpy.np_round(d) + d: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.4), t.CDouble(2.5), t.CDouble(3.6)) + r_round: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_round(d) check("round(1.4)==1", r_round.data[0] == t.CDouble(1.0), "mismatch") check("round(3.6)==4", r_round.data[2] == t.CDouble(4.0), "mismatch") - e: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) + e: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4) e.data[0] = t.CDouble(-3.0); e.data[1] = t.CDouble(0.0); e.data[2] = t.CDouble(5.0); e.data[3] = t.CDouble(-0.1) - r_sign: numpy.ndarray | t.CPtr = numpy.np_sign(e) + r_sign: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_sign(e) check("sign(-3)==-1", r_sign.data[0] == t.CDouble(-1.0), "mismatch") check("sign(0)==0", r_sign.data[1] == t.CDouble(0.0), "mismatch") check("sign(5)==1", r_sign.data[2] == t.CDouble(1.0), "mismatch") @@ -552,25 +552,25 @@ def test_additional_math(): def test_trig_hyperbolic(): section_header("np_tanh / np_sinh / np_cosh / np_arcsin / np_arccos / np_arctan") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(-1.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(-1.0)) - r_tanh: numpy.ndarray | t.CPtr = numpy.np_tanh(a) + r_tanh: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_tanh(a) check("tanh(0)~=0", approx_loose(r_tanh.data[0], t.CDouble(0.0)), "mismatch") - r_sinh: numpy.ndarray | t.CPtr = numpy.np_sinh(a) + r_sinh: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_sinh(a) check("sinh(0)~=0", approx_loose(r_sinh.data[0], t.CDouble(0.0)), "mismatch") - r_cosh: numpy.ndarray | t.CPtr = numpy.np_cosh(a) + r_cosh: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_cosh(a) check("cosh(0)~=1", approx_loose(r_cosh.data[0], t.CDouble(1.0)), "mismatch") - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(0.5)) - r_asin: numpy.ndarray | t.CPtr = numpy.np_arcsin(b) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(0.5)) + r_asin: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_arcsin(b) check("arcsin(0)~=0", approx_loose(r_asin.data[0], t.CDouble(0.0)), "mismatch") - r_acos: numpy.ndarray | t.CPtr = numpy.np_arccos(b) + r_acos: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_arccos(b) check("arccos(0)~=pi/2", approx_loose(r_acos.data[0], t.CDouble(1.5707963)), "mismatch") - r_atan: numpy.ndarray | t.CPtr = numpy.np_arctan(b) + r_atan: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_arctan(b) check("arctan(0)~=0", approx_loose(r_atan.data[0], t.CDouble(0.0)), "mismatch") a.delete() @@ -587,14 +587,14 @@ def test_trig_hyperbolic(): def test_degrees_radians(): section_header("np_degrees / np_radians") - a: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(1.5707963267948966)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(1.5707963267948966)) - r_deg: numpy.ndarray | t.CPtr = numpy.np_degrees(a) + r_deg: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_degrees(a) check("deg(0)~=0", approx_loose(r_deg.data[0], t.CDouble(0.0)), "mismatch") check("deg(pi/2)~=90", approx_loose(r_deg.data[1], t.CDouble(90.0)), "mismatch") - b: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(90.0)) - r_rad: numpy.ndarray | t.CPtr = numpy.np_radians(b) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(0.0), t.CDouble(90.0)) + r_rad: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_radians(b) check("rad(0)~=0", approx_loose(r_rad.data[0], t.CDouble(0.0)), "mismatch") check("rad(90)~=pi/2", approx_loose(r_rad.data[1], t.CDouble(1.5707963)), "mismatch") @@ -611,17 +611,17 @@ def test_degrees_radians(): def test_cumsum_diff(): section_header("cumsum / diff") - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4) a.data[0] = t.CDouble(1.0); a.data[1] = t.CDouble(2.0); a.data[2] = t.CDouble(3.0); a.data[3] = t.CDouble(4.0) - r_cs: numpy.ndarray | t.CPtr = numpy.cumsum(a) + r_cs: numpy.ndarray[t.CDouble] | t.CPtr = numpy.cumsum(a) check("cumsum not None", r_cs != None, "cumsum returned None") check("cumsum[0]==1", r_cs.data[0] == t.CDouble(1.0), "mismatch") check("cumsum[1]==3", r_cs.data[1] == t.CDouble(3.0), "mismatch") check("cumsum[2]==6", r_cs.data[2] == t.CDouble(6.0), "mismatch") check("cumsum[3]==10", r_cs.data[3] == t.CDouble(10.0), "mismatch") - r_diff: numpy.ndarray | t.CPtr = numpy.diff(a) + r_diff: numpy.ndarray[t.CDouble] | t.CPtr = numpy.diff(a) check("diff not None", r_diff != None, "diff returned None") check("diff size==3", r_diff.size == 3, "size mismatch") check("diff[0]==1", r_diff.data[0] == t.CDouble(1.0), "mismatch") @@ -636,22 +636,22 @@ def test_cumsum_diff(): def test_max_min_where(): section_header("np_maximum / np_minimum / np_where") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(5.0), t.CDouble(3.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(2.0), t.CDouble(6.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(5.0), t.CDouble(3.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(4.0), t.CDouble(2.0), t.CDouble(6.0)) - r_max: numpy.ndarray | t.CPtr = numpy.np_maximum(a, b) + r_max: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_maximum(a, b) check("maximum[0]==4", r_max.data[0] == t.CDouble(4.0), "mismatch") check("maximum[1]==5", r_max.data[1] == t.CDouble(5.0), "mismatch") check("maximum[2]==6", r_max.data[2] == t.CDouble(6.0), "mismatch") - r_min: numpy.ndarray | t.CPtr = numpy.np_minimum(a, b) + r_min: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_minimum(a, b) check("minimum[0]==1", r_min.data[0] == t.CDouble(1.0), "mismatch") check("minimum[1]==2", r_min.data[1] == t.CDouble(2.0), "mismatch") check("minimum[2]==3", r_min.data[2] == t.CDouble(3.0), "mismatch") # where: cond > 0 ? a : b - cond: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(0.0)) - r_where: numpy.ndarray | t.CPtr = numpy.np_where(cond, a, b) + cond: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(0.0)) + r_where: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_where(cond, a, b) check("where[0]==4", r_where.data[0] == t.CDouble(4.0), "mismatch") check("where[1]==5", r_where.data[1] == t.CDouble(5.0), "mismatch") check("where[2]==6", r_where.data[2] == t.CDouble(6.0), "mismatch") @@ -668,18 +668,18 @@ def test_max_min_where(): def test_flatten_trace(): section_header("flatten / trace") - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 3) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.empty2d(pool, 2, 3) a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)); a.set2d(0, 2, t.CDouble(3.0)) a.set2d(1, 0, t.CDouble(4.0)); a.set2d(1, 1, t.CDouble(5.0)); a.set2d(1, 2, t.CDouble(6.0)) - r_flat: numpy.ndarray | t.CPtr = numpy.flatten(a) + r_flat: numpy.ndarray[t.CDouble] | t.CPtr = numpy.flatten(a) check("flatten not None", r_flat != None, "flatten returned None") check("flatten ndim==1", r_flat.ndim == 1, "ndim mismatch") check("flatten size==6", r_flat.size == 6, "size mismatch") check("flatten[0]==1", r_flat.data[0] == t.CDouble(1.0), "mismatch") # trace of [[1,2],[3,4]] = 1+4 = 5 - b: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) + b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.empty2d(pool, 2, 2) b.set2d(0, 0, t.CDouble(1.0)); b.set2d(0, 1, t.CDouble(2.0)) b.set2d(1, 0, t.CDouble(3.0)); b.set2d(1, 1, t.CDouble(4.0)) tr: t.CDouble = numpy.trace(b) @@ -694,10 +694,10 @@ def test_flatten_trace(): def test_outer(): section_header("outer") - a: numpy.ndarray | t.CPtr = vec2(pool, t.CDouble(1.0), t.CDouble(2.0)) - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(3.0), t.CDouble(4.0), t.CDouble(5.0)) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec2(pool, t.CDouble(1.0), t.CDouble(2.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(3.0), t.CDouble(4.0), t.CDouble(5.0)) - r: numpy.ndarray | t.CPtr = numpy.outer(a, b) + r: numpy.ndarray[t.CDouble] | t.CPtr = numpy.outer(a, b) check("outer not None", r != None, "outer returned None") check("outer ndim==2", r.ndim == 2, "ndim mismatch") check("outer[0,0]==3", r.at2d(0, 0) == t.CDouble(3.0), "mismatch") @@ -717,30 +717,30 @@ def test_outer(): def test_bool_comparison(): section_header("np_all / np_any / np_count_nonzero / np_equal / np_less / np_greater") - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4) a.data[0] = t.CDouble(1.0); a.data[1] = t.CDouble(0.0); a.data[2] = t.CDouble(3.0); a.data[3] = t.CDouble(0.0) check("count_nonzero==2", numpy.np_count_nonzero(a) == 2, "mismatch") check("any==1", numpy.np_any(a) == 1, "mismatch") - b: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + b: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) check("all(1,2,3)==1", numpy.np_all(b) == 1, "mismatch") - c: numpy.ndarray | t.CPtr = numpy.zeros(pool, 3) + c: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 3) check("all(0,0,0)==0", numpy.np_all(c) == 0, "mismatch") check("any(0,0,0)==0", numpy.np_any(c) == 0, "mismatch") - d: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - e: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(0.0), t.CDouble(4.0)) + d: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + e: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(0.0), t.CDouble(4.0)) - r_eq: numpy.ndarray | t.CPtr = numpy.np_equal(d, e) + r_eq: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_equal(d, e) check("equal[0]==1", r_eq.data[0] == t.CDouble(1.0), "mismatch") check("equal[1]==0", r_eq.data[1] == t.CDouble(0.0), "mismatch") - r_lt: numpy.ndarray | t.CPtr = numpy.np_less(d, e) + r_lt: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_less(d, e) check("less[2]==1", r_lt.data[2] == t.CDouble(1.0), "mismatch") check("less[0]==0", r_lt.data[0] == t.CDouble(0.0), "mismatch") - r_gt: numpy.ndarray | t.CPtr = numpy.np_greater(d, e) + r_gt: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_greater(d, e) check("greater[1]==1", r_gt.data[1] == t.CDouble(1.0), "mismatch") a.delete() @@ -761,32 +761,32 @@ def test_linalg(): section_header("det2x2 / inv2x2 / cross3 / prod / median / percentile") # det2x2: [[1,2],[3,4]] -> 1*4-2*3 = -2 - a: numpy.ndarray | t.CPtr = numpy.empty2d(pool, 2, 2) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.empty2d(pool, 2, 2) a.set2d(0, 0, t.CDouble(1.0)); a.set2d(0, 1, t.CDouble(2.0)) a.set2d(1, 0, t.CDouble(3.0)); a.set2d(1, 1, t.CDouble(4.0)) d: t.CDouble = numpy.det2x2(a) check("det2x2==-2", d == t.CDouble(-2.0), "mismatch") # inv2x2 of [[1,2],[3,4]] - inv: numpy.ndarray | t.CPtr = numpy.inv2x2(a) + inv: numpy.ndarray[t.CDouble] | t.CPtr = numpy.inv2x2(a) check("inv2x2 not None", inv != None, "inv2x2 returned None") check("inv[0,0]==-2", approx_eq(inv.at2d(0, 0), t.CDouble(-2.0)), "mismatch") check("inv[0,1]==1", approx_eq(inv.at2d(0, 1), t.CDouble(1.0)), "mismatch") # cross3: [1,0,0] x [0,1,0] = [0,0,1] - x: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(0.0), t.CDouble(0.0)) - y: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(0.0)) - cr: numpy.ndarray | t.CPtr = numpy.cross3(x, y) + x: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(0.0), t.CDouble(0.0)) + y: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(0.0)) + cr: numpy.ndarray[t.CDouble] | t.CPtr = numpy.cross3(x, y) check("cross not None", cr != None, "cross returned None") check("cross[2]==1", cr.data[2] == t.CDouble(1.0), "mismatch") # prod - p: numpy.ndarray | t.CPtr = numpy.zeros(pool, 4) + p: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 4) p.data[0] = t.CDouble(1.0); p.data[1] = t.CDouble(2.0); p.data[2] = t.CDouble(3.0); p.data[3] = t.CDouble(4.0) check("prod==24", numpy.prod(p) == t.CDouble(24.0), "mismatch") # median - m: numpy.ndarray | t.CPtr = numpy.zeros(pool, 5) + m: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 5) m.data[0] = t.CDouble(3.0); m.data[1] = t.CDouble(1.0); m.data[2] = t.CDouble(2.0) m.data[3] = t.CDouble(5.0); m.data[4] = t.CDouble(4.0) check("median==3", numpy.median(m) == t.CDouble(3.0), "mismatch") @@ -810,23 +810,23 @@ def test_linalg(): def test_additional_creation(): section_header("full2d / zeros_like / ones_like / arange1 / constants") - f: numpy.ndarray | t.CPtr = numpy.full2d(pool, 2, 3, t.CDouble(7.0)) + f: numpy.ndarray[t.CDouble] | t.CPtr = numpy.full2d(pool, 2, 3, t.CDouble(7.0)) check("full2d not None", f != None, "full2d returned None") check("full2d ndim==2", f.ndim == 2, "ndim mismatch") check("full2d[0,0]==7", f.at2d(0, 0) == t.CDouble(7.0), "mismatch") check("full2d[1,2]==7", f.at2d(1, 2) == t.CDouble(7.0), "mismatch") - a: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) - zl: numpy.ndarray | t.CPtr = numpy.zeros_like(a) + a: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(1.0), t.CDouble(2.0), t.CDouble(3.0)) + zl: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros_like(a) check("zeros_like not None", zl != None, "returned None") check("zeros_like size==3", zl.size == 3, "size mismatch") check("zeros_like[0]==0", zl.data[0] == t.CDouble(0.0), "mismatch") - ol: numpy.ndarray | t.CPtr = numpy.ones_like(a) + ol: numpy.ndarray[t.CDouble] | t.CPtr = numpy.ones_like(a) check("ones_like not None", ol != None, "returned None") check("ones_like[0]==1", ol.data[0] == t.CDouble(1.0), "mismatch") - ar: numpy.ndarray | t.CPtr = numpy.arange1(pool, t.CDouble(4.0)) + ar: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange1(pool, t.CDouble(4.0)) check("arange1 not None", ar != None, "returned None") check("arange1 size==4", ar.size == 4, "size mismatch") check("arange1[0]==0", ar.data[0] == t.CDouble(0.0), "mismatch") @@ -850,8 +850,8 @@ def test_additional_creation(): def test_interp(): section_header("np_interp") - xp: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(2.0)) - fp: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(10.0), t.CDouble(20.0)) + xp: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(1.0), t.CDouble(2.0)) + fp: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(10.0), t.CDouble(20.0)) v: t.CDouble = numpy.np_interp(t.CDouble(0.5), xp, fp) check("interp(0.5)==5", approx_eq(v, t.CDouble(5.0)), "mismatch") @@ -877,33 +877,33 @@ def test_numpy_edge(): section_header("edge: size=0 / size=1 / non-SIMD-block / negative / div-zero") # size=0: pool.alloc(0) returns None, so zeros(0) returns None (expected) - a0: numpy.ndarray | t.CPtr = numpy.zeros(pool, 0) + a0: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 0) check("zeros(0) returns None", a0 == None, "expected None for size=0") # size=1 - a1: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1) + a1: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 1) check("zeros(1) not None", a1 != None, "returned None") check("zeros(1) size==1", a1.size == 1, "size mismatch") check("zeros(1) [0]==0", a1.data[0] == t.CDouble(0.0), "mismatch") a1.delete() # non-SIMD-block sizes (1,2,3,5,6,7) - a5: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(5.0), t.CDouble(1.0)) + a5: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(5.0), t.CDouble(1.0)) check("arange(5) size==5", a5.size == 5, "size mismatch") check("arange(5) sum==10", approx_eq(a5.sum(), t.CDouble(10.0)), "mismatch") a5.delete() - a6: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(6.0), t.CDouble(1.0)) + a6: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(6.0), t.CDouble(1.0)) check("arange(6) sum==15", approx_eq(a6.sum(), t.CDouble(15.0)), "mismatch") a6.delete() - a7: numpy.ndarray | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(7.0), t.CDouble(1.0)) + a7: numpy.ndarray[t.CDouble] | t.CPtr = numpy.arange(pool, t.CDouble(0.0), t.CDouble(7.0), t.CDouble(1.0)) check("arange(7) sum==21", approx_eq(a7.sum(), t.CDouble(21.0)), "mismatch") a7.delete() # negative values in sqrt - neg_arr: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(-1.0), t.CDouble(0.0), t.CDouble(4.0)) - r_sqrt_neg: numpy.ndarray | t.CPtr = numpy.np_sqrt(neg_arr) + neg_arr: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(-1.0), t.CDouble(0.0), t.CDouble(4.0)) + r_sqrt_neg: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_sqrt(neg_arr) check("sqrt(neg) not None", r_sqrt_neg != None, "returned None") # sqrt(4)=2, sqrt(0)=0; sqrt(-1) is NaN (implementation-defined) check("sqrt(4)==2", approx_eq(r_sqrt_neg.data[2], t.CDouble(2.0)), "mismatch") @@ -911,9 +911,9 @@ def test_numpy_edge(): r_sqrt_neg.delete() # div-by-zero: b/a where a has zeros - za: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(2.0), t.CDouble(0.0)) - zb: numpy.ndarray | t.CPtr = vec3(pool, t.CDouble(6.0), t.CDouble(4.0), t.CDouble(8.0)) - r_divz: numpy.ndarray | t.CPtr = za / zb + za: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(0.0), t.CDouble(2.0), t.CDouble(0.0)) + zb: numpy.ndarray[t.CDouble] | t.CPtr = vec3(pool, t.CDouble(6.0), t.CDouble(4.0), t.CDouble(8.0)) + r_divz: numpy.ndarray[t.CDouble] | t.CPtr = za / zb check("0/6==0", r_divz.data[0] == t.CDouble(0.0), "mismatch") check("2/4==0.5", r_divz.data[1] == t.CDouble(0.5), "mismatch") za.delete() @@ -921,7 +921,7 @@ def test_numpy_edge(): r_divz.delete() # large array (non-aligned, non-SIMD-block) - big: numpy.ndarray | t.CPtr = numpy.zeros(pool, 1000) + big: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, 1000) check("zeros(1000) not None", big != None, "returned None") check("zeros(1000) size==1000", big.size == 1000, "size mismatch") big.delete() @@ -938,8 +938,8 @@ def bench_numpy_perf(): N: t.CSizeT = 10000 ITERS: t.CInt = 5 - a: numpy.ndarray | t.CPtr = numpy.zeros(pool, N) - b: numpy.ndarray | t.CPtr = numpy.zeros(pool, N) + a: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, N) + b: numpy.ndarray[t.CDouble] | t.CPtr = numpy.zeros(pool, N) i: t.CSizeT = 0 while i < N: a.data[i] = t.CDouble(1.0) @@ -950,7 +950,7 @@ def bench_numpy_perf(): t0: t.CDouble = c.Timer() j: t.CInt = 0 while j < ITERS: - r: numpy.ndarray | t.CPtr = a + b + r: numpy.ndarray[t.CDouble] | t.CPtr = a + b r.delete() j += 1 t1: t.CDouble = c.Timer() @@ -960,7 +960,7 @@ def bench_numpy_perf(): t0 = c.Timer() j = 0 while j < ITERS: - r2: numpy.ndarray | t.CPtr = a * b + r2: numpy.ndarray[t.CDouble] | t.CPtr = a * b r2.delete() j += 1 t1 = c.Timer() @@ -970,7 +970,7 @@ def bench_numpy_perf(): t0 = c.Timer() j = 0 while j < ITERS: - r3: numpy.ndarray | t.CPtr = numpy.np_sqrt(a) + r3: numpy.ndarray[t.CDouble] | t.CPtr = numpy.np_sqrt(a) r3.delete() j += 1 t1 = c.Timer()