@@ -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