Skip to content

Commit cda4574

Browse files
Changes test_func_order tests for unary functions
The change is to iterate over permutations first, doing some work that does not depend on the order, and then iterate over orders. This should save doing some computations 4 times (once for each order), now only done once.
1 parent 6ae9f3d commit cda4574

16 files changed

+77
-73
lines changed

dpctl/tests/elementwise/test_abs.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,19 @@ def test_abs_order(dtype):
8484
skip_if_dtype_not_supported(dtype, q)
8585

8686
arg_dt = np.dtype(dtype)
87+
exp_dt = np.abs(np.ones(tuple(), dtype=arg_dt)).dtype
8788
input_shape = (10, 10, 10, 10)
8889
X = dpt.empty(input_shape, dtype=arg_dt, sycl_queue=q)
8990
X[..., 0::2] = 1
9091
X[..., 1::2] = 0
9192

92-
for ord in ["C", "F", "A", "K"]:
93-
for perms in itertools.permutations(range(4)):
94-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
93+
for perms in itertools.permutations(range(4)):
94+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
95+
expected_Y = np.ones(U.shape, dtype=exp_dt)
96+
expected_Y[..., 1::2] = 0
97+
expected_Y = np.transpose(expected_Y, perms)
98+
for ord in ["C", "F", "A", "K"]:
9599
Y = dpt.abs(U, order=ord)
96-
expected_Y = np.ones(Y.shape, dtype=Y.dtype)
97-
expected_Y[..., 1::2] = 0
98-
expected_Y = np.transpose(expected_Y, perms)
99100
assert np.allclose(dpt.asnumpy(Y), expected_Y)
100101

101102

dpctl/tests/elementwise/test_complex.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def test_complex_order(np_call, dpt_call, dtype):
120120
expected_Y = np_call(dpt.asnumpy(U))
121121
for ord in ["C", "F", "A", "K"]:
122122
Y = dpt_call(U, order=ord)
123-
assert np.allclose(dpt.asnumpy(Y), expected_Y)
123+
assert_allclose(dpt.asnumpy(Y), expected_Y)
124124

125125

126126
@pytest.mark.parametrize("dtype", ["c8", "c16"])

dpctl/tests/elementwise/test_exp2.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ def test_exp2_order(dtype):
103103
X[..., 0::2] = 1 / 4
104104
X[..., 1::2] = 1 / 2
105105

106-
for ord in ["C", "F", "A", "K"]:
107-
for perms in itertools.permutations(range(4)):
108-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
106+
for perms in itertools.permutations(range(4)):
107+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
108+
expected_Y = np.exp2(dpt.asnumpy(U))
109+
for ord in ["C", "F", "A", "K"]:
109110
Y = dpt.exp2(U, order=ord)
110-
expected_Y = np.exp2(dpt.asnumpy(U))
111111
tol = 8 * max(
112112
dpt.finfo(Y.dtype).resolution,
113113
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_expm1.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ def test_expm1_order(dtype):
103103
X[..., 0::2] = 1 / 50
104104
X[..., 1::2] = 1 / 25
105105

106-
for ord in ["C", "F", "A", "K"]:
107-
for perms in itertools.permutations(range(4)):
108-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
106+
for perms in itertools.permutations(range(4)):
107+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
108+
expected_Y = np.expm1(dpt.asnumpy(U))
109+
for ord in ["C", "F", "A", "K"]:
109110
Y = dpt.expm1(U, order=ord)
110-
expected_Y = np.expm1(dpt.asnumpy(U))
111111
tol = 8 * max(
112112
dpt.finfo(Y.dtype).resolution,
113113
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_isfinite.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import numpy as np
2020
import pytest
21+
from numpy.testing import assert_allclose
2122

2223
import dpctl.tensor as dpt
2324
from dpctl.tests.helper import get_queue_or_skip, skip_if_dtype_not_supported
@@ -90,9 +91,9 @@ def test_isfinite_order(dtype):
9091
input_shape = (10, 10, 10, 10)
9192
X = dpt.ones(input_shape, dtype=arg_dt, sycl_queue=q)
9293

93-
for ord in ["C", "F", "A", "K"]:
94-
for perms in itertools.permutations(range(4)):
95-
U = dpt.permute_dims(X[::2, ::-1, ::-1, ::5], perms)
94+
for perms in itertools.permutations(range(4)):
95+
U = dpt.permute_dims(X[::2, ::-1, ::-1, ::5], perms)
96+
expected_Y = np.full(U.shape, fill_value=True, dtype=dpt.bool)
97+
for ord in ["C", "F", "A", "K"]:
9698
Y = dpt.isfinite(U, order=ord)
97-
expected_Y = np.full(Y.shape, True, dtype=Y.dtype)
98-
assert np.allclose(dpt.asnumpy(Y), expected_Y)
99+
assert_allclose(dpt.asnumpy(Y), expected_Y)

dpctl/tests/elementwise/test_isinf.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import numpy as np
2020
import pytest
21+
from numpy.testing import assert_allclose
2122

2223
import dpctl.tensor as dpt
2324
from dpctl.tests.helper import get_queue_or_skip, skip_if_dtype_not_supported
@@ -84,9 +85,9 @@ def test_isinf_order(dtype):
8485
input_shape = (10, 10, 10, 10)
8586
X = dpt.ones(input_shape, dtype=arg_dt, sycl_queue=q)
8687

87-
for ord in ["C", "F", "A", "K"]:
88-
for perms in itertools.permutations(range(4)):
89-
U = dpt.permute_dims(X[::2, ::-1, ::-1, ::5], perms)
88+
for perms in itertools.permutations(range(4)):
89+
U = dpt.permute_dims(X[::2, ::-1, ::-1, ::5], perms)
90+
expected_Y = np.full(U.shape, fill_value=False, dtype=dpt.bool)
91+
for ord in ["C", "F", "A", "K"]:
9092
Y = dpt.isinf(U, order=ord)
91-
expected_Y = np.full(Y.shape, False, dtype=Y.dtype)
92-
assert np.allclose(dpt.asnumpy(Y), expected_Y)
93+
assert_allclose(dpt.asnumpy(Y), expected_Y)

dpctl/tests/elementwise/test_isnan.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ def test_isnan_order(dtype):
9090
input_shape = (10, 10, 10, 10)
9191
X = dpt.ones(input_shape, dtype=arg_dt, sycl_queue=q)
9292

93-
for ord in ["C", "F", "A", "K"]:
94-
for perms in itertools.permutations(range(4)):
95-
U = dpt.permute_dims(X[::2, ::-1, ::-1, ::5], perms)
93+
for perms in itertools.permutations(range(4)):
94+
U = dpt.permute_dims(X[::2, ::-1, ::-1, ::5], perms)
95+
expected_Y = np.full(U.shape, fill_value=False, dtype=dpt.bool)
96+
for ord in ["C", "F", "A", "K"]:
9697
Y = dpt.isnan(U, order=ord)
97-
expected_Y = np.full(Y.shape, False, dtype=Y.dtype)
9898
assert np.allclose(dpt.asnumpy(Y), expected_Y)

dpctl/tests/elementwise/test_log.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ def test_log_order(dtype):
103103
X[..., 0::2] = 4 * dpt.e
104104
X[..., 1::2] = 10 * dpt.e
105105

106-
for ord in ["C", "F", "A", "K"]:
107-
for perms in itertools.permutations(range(4)):
108-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
106+
for perms in itertools.permutations(range(4)):
107+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
108+
expected_Y = np.log(dpt.asnumpy(U))
109+
for ord in ["C", "F", "A", "K"]:
109110
Y = dpt.log(U, order=ord)
110-
expected_Y = np.log(dpt.asnumpy(U))
111111
tol = 8 * max(
112112
dpt.finfo(Y.dtype).resolution,
113113
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_log10.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,11 @@ def test_log_order(dtype):
107107
X[..., 0::2] = 4 * dpt.e
108108
X[..., 1::2] = 10 * dpt.e
109109

110-
for ord in ["C", "F", "A", "K"]:
111-
for perms in itertools.permutations(range(4)):
112-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
110+
for perms in itertools.permutations(range(4)):
111+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
112+
expected_Y = np.log10(dpt.asnumpy(U))
113+
for ord in ["C", "F", "A", "K"]:
113114
Y = dpt.log10(U, order=ord)
114-
expected_Y = np.log10(dpt.asnumpy(U))
115115
tol = 8 * max(
116116
dpt.finfo(Y.dtype).resolution,
117117
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_log1p.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ def test_log1p_order(dtype):
103103
X[..., 0::2] = dpt.e / 1000
104104
X[..., 1::2] = dpt.e / 100
105105

106-
for ord in ["C", "F", "A", "K"]:
107-
for perms in itertools.permutations(range(4)):
108-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
106+
for perms in itertools.permutations(range(4)):
107+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
108+
expected_Y = np.log1p(dpt.asnumpy(U))
109+
for ord in ["C", "F", "A", "K"]:
109110
Y = dpt.log1p(U, order=ord)
110-
expected_Y = np.log1p(dpt.asnumpy(U))
111111
tol = 8 * max(
112112
dpt.finfo(Y.dtype).resolution,
113113
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_log2.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ def test_log_order(dtype):
103103
X[..., 0::2] = 4 * dpt.e
104104
X[..., 1::2] = 10 * dpt.e
105105

106-
for ord in ["C", "F", "A", "K"]:
107-
for perms in itertools.permutations(range(4)):
108-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
106+
for perms in itertools.permutations(range(4)):
107+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
108+
expected_Y = np.log2(dpt.asnumpy(U))
109+
for ord in ["C", "F", "A", "K"]:
109110
Y = dpt.log2(U, order=ord)
110-
expected_Y = np.log2(dpt.asnumpy(U))
111111
tol = 8 * max(
112112
dpt.finfo(Y.dtype).resolution,
113113
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_negative.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ def test_negative_order(dtype):
7676
X[..., 0::2] = 1
7777
X[..., 1::2] = 0
7878

79-
for ord in ["C", "F", "A", "K"]:
80-
for perms in itertools.permutations(range(4)):
81-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
79+
for perms in itertools.permutations(range(4)):
80+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
81+
expected_Y = np.negative(np.ones(U.shape, dtype=U.dtype))
82+
expected_Y[..., 1::2] = 0
83+
expected_Y = np.transpose(expected_Y, perms)
84+
for ord in ["C", "F", "A", "K"]:
8285
Y = dpt.negative(U, order=ord)
83-
expected_Y = np.negative(np.ones(Y.shape, dtype=Y.dtype))
84-
expected_Y[..., 1::2] = 0
85-
expected_Y = np.transpose(expected_Y, perms)
8686
assert np.allclose(dpt.asnumpy(Y), expected_Y)

dpctl/tests/elementwise/test_positive.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@ def test_positive_order(dtype):
6969
X[..., 0::2] = 1
7070
X[..., 1::2] = 0
7171

72-
for ord in ["C", "F", "A", "K"]:
73-
for perms in itertools.permutations(range(4)):
74-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
72+
for perms in itertools.permutations(range(4)):
73+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
74+
expected_Y = np.ones(U.shape, dtype=U.dtype)
75+
expected_Y[..., 1::2] = 0
76+
expected_Y = np.transpose(expected_Y, perms)
77+
for ord in ["C", "F", "A", "K"]:
7578
Y = dpt.positive(U, order=ord)
76-
expected_Y = np.ones(Y.shape, dtype=Y.dtype)
77-
expected_Y[..., 1::2] = 0
78-
expected_Y = np.transpose(expected_Y, perms)
7979
assert np.allclose(dpt.asnumpy(Y), expected_Y)

dpctl/tests/elementwise/test_sign.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,19 @@ def test_sign_order(dtype):
6464
skip_if_dtype_not_supported(dtype, q)
6565

6666
arg_dt = np.dtype(dtype)
67+
expected_dt = np.sign(np.ones(tuple(), dtype=arg_dt)).dtype
6768
input_shape = (10, 10, 10, 10)
6869
X = dpt.empty(input_shape, dtype=arg_dt, sycl_queue=q)
6970
X[..., 0::2] = 1
7071
X[..., 1::2] = 0
7172

72-
for ord in ["C", "F", "A", "K"]:
73-
for perms in itertools.permutations(range(4)):
74-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
73+
for perms in itertools.permutations(range(4)):
74+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
75+
expected_Y = np.ones(U.shape, dtype=expected_dt)
76+
expected_Y[..., 1::2] = 0
77+
expected_Y = np.transpose(expected_Y, perms)
78+
for ord in ["C", "F", "A", "K"]:
7579
Y = dpt.sign(U, order=ord)
76-
expected_Y = np.ones(Y.shape, dtype=Y.dtype)
77-
expected_Y[..., 1::2] = 0
78-
expected_Y = np.transpose(expected_Y, perms)
7980
assert np.allclose(dpt.asnumpy(Y), expected_Y)
8081

8182

dpctl/tests/elementwise/test_sqrt.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ def test_sqrt_order(dtype):
110110
X[..., 0::2] = 16.0
111111
X[..., 1::2] = 23.0
112112

113-
for ord in ["C", "F", "A", "K"]:
114-
for perms in itertools.permutations(range(4)):
115-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
113+
for perms in itertools.permutations(range(4)):
114+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
115+
expected_Y = np.sqrt(dpt.asnumpy(U))
116+
for ord in ["C", "F", "A", "K"]:
116117
Y = dpt.sqrt(U, order=ord)
117-
expected_Y = np.sqrt(dpt.asnumpy(U))
118118
tol = 8 * max(
119119
dpt.finfo(Y.dtype).resolution,
120120
np.finfo(expected_Y.dtype).resolution,

dpctl/tests/elementwise/test_square.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,13 @@ def test_square_order(dtype):
6969
X[..., 0::2] = 2
7070
X[..., 1::2] = 0
7171

72-
for ord in ["C", "F", "A", "K"]:
73-
for perms in itertools.permutations(range(4)):
74-
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
72+
for perms in itertools.permutations(range(4)):
73+
U = dpt.permute_dims(X[:, ::-1, ::-1, :], perms)
74+
expected_Y = np.full(U.shape, 4, dtype=U.dtype)
75+
expected_Y[..., 1::2] = 0
76+
expected_Y = np.transpose(expected_Y, perms)
77+
for ord in ["C", "F", "A", "K"]:
7578
Y = dpt.square(U, order=ord)
76-
expected_Y = np.full(Y.shape, 4, dtype=Y.dtype)
77-
expected_Y[..., 1::2] = 0
78-
expected_Y = np.transpose(expected_Y, perms)
7979
assert np.allclose(dpt.asnumpy(Y), expected_Y)
8080

8181

0 commit comments

Comments
 (0)