Skip to content

Commit c9de6f5

Browse files
committed
test: added dtype checks for radon
1 parent b87614b commit c9de6f5

1 file changed

Lines changed: 86 additions & 71 deletions

File tree

pytests/test_radon.py

Lines changed: 86 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,16 @@ def test_unknown_engine():
132132
@pytest.mark.parametrize(
133133
"par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)]
134134
)
135-
def test_Radon2D(par):
135+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
136+
def test_Radon2D(par, dtype):
136137
"""Dot-test, forward and adjoint consistency check
137138
(for onthefly parameter), and sparse inverse for Radon2D operator
138139
"""
139140
dt, dh = 0.005, 1
140-
t = np.arange(par["nt"]) * dt
141-
h = np.arange(par["nhx"]) * dh
142-
px = np.linspace(0, par["pxmax"], par["npx"])
143-
x = np.zeros((par["npx"], par["nt"]))
141+
t = np.arange(par["nt"], dtype=dtype) * dt
142+
h = np.arange(par["nhx"], dtype=dtype) * dh
143+
px = np.linspace(0, par["pxmax"], par["npx"], dtype=dtype)
144+
x = np.zeros((par["npx"], par["nt"]), dtype=dtype)
144145
x[2, par["nt"] // 2] = 1
145146

146147
Rop = Radon2D(
@@ -152,7 +153,7 @@ def test_Radon2D(par):
152153
kind=par["kind"],
153154
onthefly=False,
154155
engine=par["engine"],
155-
dtype="float64",
156+
dtype=dtype,
156157
)
157158
R1op = Radon2D(
158159
t,
@@ -163,82 +164,96 @@ def test_Radon2D(par):
163164
kind=par["kind"],
164165
onthefly=True,
165166
engine=par["engine"],
166-
dtype="float64",
167+
dtype=dtype,
168+
)
169+
assert dottest(
170+
Rop,
171+
par["nhx"] * par["nt"],
172+
par["npx"] * par["nt"],
173+
rtol=1e-3 if dtype == np.float32 else 1e-6,
167174
)
168-
assert dottest(Rop, par["nhx"] * par["nt"], par["npx"] * par["nt"], rtol=1e-3)
169175

170176
y = Rop * x.ravel()
171177
y1 = R1op * x.ravel()
178+
assert y.dtype == dtype
179+
assert y1.dtype == dtype
172180
assert_array_almost_equal(y, y1, decimal=4)
173181

174182
xadj = Rop.H * y
175183
xadj1 = R1op.H * y
184+
assert xadj.dtype == dtype
185+
assert xadj1.dtype == dtype
176186
assert_array_almost_equal(xadj, xadj1, decimal=4)
177187

178188
xinv, _, _ = fista(Rop, y, niter=30, eps=1e0)
179189
assert_array_almost_equal(x.ravel(), xinv, decimal=1)
180190

181191

182-
# @pytest.mark.skipif(
183-
# int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled"
184-
# )
185-
# @pytest.mark.parametrize(
186-
# "par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)]
187-
# )
188-
# def test_Radon3D(par):
189-
# """Dot-test, forward and adjoint consistency check
190-
# (for onthefly parameter), and sparse inverse for Radon3D operator
191-
# """
192-
# dt, dhy, dhx = 0.005, 1, 1
193-
# t = np.arange(par["nt"]) * dt
194-
# hy = np.arange(par["nhy"]) * dhy
195-
# hx = np.arange(par["nhx"]) * dhx
196-
# py = np.linspace(0, par["pymax"], par["npy"])
197-
# px = np.linspace(0, par["pxmax"], par["npx"])
198-
# x = np.zeros((par["npy"], par["npx"], par["nt"]))
199-
# x[3, 2, par["nt"] // 2] = 1
200-
201-
# Rop = Radon3D(
202-
# t,
203-
# hy,
204-
# hx,
205-
# py,
206-
# px,
207-
# centeredh=par["centeredh"],
208-
# interp=par["interp"],
209-
# kind=par["kind"],
210-
# onthefly=False,
211-
# engine=par["engine"],
212-
# dtype="float64",
213-
# )
214-
# R1op = Radon3D(
215-
# t,
216-
# hy,
217-
# hx,
218-
# py,
219-
# px,
220-
# centeredh=par["centeredh"],
221-
# interp=par["interp"],
222-
# kind=par["kind"],
223-
# onthefly=True,
224-
# engine=par["engine"],
225-
# dtype="float64",
226-
# )
227-
228-
# assert dottest(
229-
# Rop,
230-
# par["nhy"] * par["nhx"] * par["nt"],
231-
# par["npy"] * par["npx"] * par["nt"],
232-
# rtol=1e-3,
233-
# )
234-
# y = Rop * x.ravel()
235-
# y1 = R1op * x.ravel()
236-
# assert_array_almost_equal(y, y1, decimal=4)
237-
238-
# xadj = Rop.H * y
239-
# xadj1 = R1op.H * y
240-
# assert_array_almost_equal(xadj, xadj1, decimal=4)
241-
242-
# if Rop.engine == "numba": # as numpy is too slow here...
243-
# xinv, _, _ = fista(Rop, y, niter=200, eps=3e0)
244-
# assert_array_almost_equal(x.ravel(), xinv, decimal=1)
192+
@pytest.mark.skipif(
193+
int(os.environ.get("TEST_CUPY_PYLOPS", 0)) == 1, reason="Not CuPy enabled"
194+
)
195+
@pytest.mark.parametrize(
196+
"par", [(par1), (par2), (par3), (par4), (par5), (par6), (par7), (par8)]
197+
)
198+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
199+
def test_Radon3D(par, dtype):
200+
"""Dot-test, forward and adjoint consistency check
201+
(for onthefly parameter), and sparse inverse for Radon3D operator
202+
"""
203+
dt, dhy, dhx = 0.005, 1, 1
204+
t = np.arange(par["nt"], dtype=dtype) * dt
205+
hy = np.arange(par["nhy"], dtype=dtype) * dhy
206+
hx = np.arange(par["nhx"], dtype=dtype) * dhx
207+
py = np.linspace(0, par["pymax"], par["npy"], dtype=dtype)
208+
px = np.linspace(0, par["pxmax"], par["npx"], dtype=dtype)
209+
x = np.zeros((par["npy"], par["npx"], par["nt"]), dtype=dtype)
210+
x[3, 2, par["nt"] // 2] = 1
211+
212+
Rop = Radon3D(
213+
t,
214+
hy,
215+
hx,
216+
py,
217+
px,
218+
centeredh=par["centeredh"],
219+
interp=par["interp"],
220+
kind=par["kind"],
221+
onthefly=False,
222+
engine=par["engine"],
223+
dtype=dtype,
224+
)
225+
R1op = Radon3D(
226+
t,
227+
hy,
228+
hx,
229+
py,
230+
px,
231+
centeredh=par["centeredh"],
232+
interp=par["interp"],
233+
kind=par["kind"],
234+
onthefly=True,
235+
engine=par["engine"],
236+
dtype=dtype,
237+
)
238+
239+
assert dottest(
240+
Rop,
241+
par["nhy"] * par["nhx"] * par["nt"],
242+
par["npy"] * par["npx"] * par["nt"],
243+
rtol=1e-3 if dtype == np.float32 else 1e-6,
244+
)
245+
y = Rop * x.ravel()
246+
y1 = R1op * x.ravel()
247+
assert y.dtype == dtype
248+
assert y1.dtype == dtype
249+
assert_array_almost_equal(y, y1, decimal=4)
250+
251+
xadj = Rop.H * y
252+
xadj1 = R1op.H * y
253+
assert xadj.dtype == dtype
254+
assert xadj1.dtype == dtype
255+
assert_array_almost_equal(xadj, xadj1, decimal=4)
256+
257+
if Rop.engine == "numba": # as numpy is too slow here...
258+
xinv, _, _ = fista(Rop, y, niter=200, eps=3e0)
259+
assert_array_almost_equal(x.ravel(), xinv, decimal=1)

0 commit comments

Comments
 (0)