22 Designed to run with n processes
33 $ mpiexec -n 10 pytest test_derivative.py --with-mpi
44"""
5- import numpy as np
5+ import os
6+
7+ if int (os .environ .get ("TEST_CUPY_PYLOPS" , 0 )):
8+ import cupy as np
9+ from cupy .testing import assert_allclose
10+
11+ backend = "cupy"
12+ else :
13+ import numpy as np
14+ from numpy .testing import assert_allclose
15+
16+ backend = "numpy"
17+ import numpy as npp
618from mpi4py import MPI
7- from numpy .testing import assert_allclose
819import pytest
920
1021import pylops
@@ -189,8 +200,8 @@ def test_first_derivative_forward(par):
189200 Fop_MPI = pylops_mpi .MPIFirstDerivative (dims = par ['nz' ], sampling = par ['dz' ],
190201 kind = "forward" , edge = par ['edge' ],
191202 dtype = par ['dtype' ])
192- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['nz' ]), dtype = par ['dtype' ],
193- partition = par ['partition' ])
203+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['nz' ]), dtype = par ['dtype' ],
204+ partition = par ['partition' ], engine = backend )
194205 x [:] = np .random .normal (rank , 10 , x .local_shape )
195206 x_global = x .asarray ()
196207 # Forward
@@ -200,7 +211,7 @@ def test_first_derivative_forward(par):
200211 y_adj_dist = Fop_MPI .H @ x
201212 y_adj = y_adj_dist .asarray ()
202213 # Dot test
203- dottest (Fop_MPI , x , y_dist , np .prod (par ['nz' ]), np .prod (par ['nz' ]))
214+ dottest (Fop_MPI , x , y_dist , npp .prod (par ['nz' ]), npp .prod (par ['nz' ]))
204215
205216 if rank == 0 :
206217 Fop = pylops .FirstDerivative (dims = par ['nz' ], axis = 0 ,
@@ -223,8 +234,8 @@ def test_first_derivative_backward(par):
223234 Fop_MPI = pylops_mpi .MPIFirstDerivative (dims = par ['nz' ], sampling = par ['dz' ],
224235 kind = "backward" , edge = par ['edge' ],
225236 dtype = par ['dtype' ])
226- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['nz' ]), dtype = par ['dtype' ],
227- partition = par ['partition' ])
237+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['nz' ]), dtype = par ['dtype' ],
238+ partition = par ['partition' ], engine = backend )
228239 x [:] = np .random .normal (rank , 10 , x .local_shape )
229240 x_global = x .asarray ()
230241 # Forward
@@ -234,7 +245,7 @@ def test_first_derivative_backward(par):
234245 y_adj_dist = Fop_MPI .H @ x
235246 y_adj = y_adj_dist .asarray ()
236247 # Dot test
237- dottest (Fop_MPI , x , y_dist , np .prod (par ['nz' ]), np .prod (par ['nz' ]))
248+ dottest (Fop_MPI , x , y_dist , npp .prod (par ['nz' ]), npp .prod (par ['nz' ]))
238249
239250 if rank == 0 :
240251 Fop = pylops .FirstDerivative (dims = par ['nz' ], axis = 0 ,
@@ -258,8 +269,8 @@ def test_first_derivative_centered(par):
258269 Fop_MPI = pylops_mpi .MPIFirstDerivative (dims = par ['nz' ], sampling = par ['dz' ],
259270 kind = "centered" , edge = par ['edge' ],
260271 order = order , dtype = par ['dtype' ])
261- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['nz' ]), dtype = par ['dtype' ],
262- partition = par ['partition' ])
272+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['nz' ]), dtype = par ['dtype' ],
273+ partition = par ['partition' ], engine = backend )
263274 x [:] = np .random .normal (rank , 10 , x .local_shape )
264275 x_global = x .asarray ()
265276 # Forward
@@ -269,7 +280,7 @@ def test_first_derivative_centered(par):
269280 y_adj_dist = Fop_MPI .H @ x
270281 y_adj = y_adj_dist .asarray ()
271282 # Dot test
272- dottest (Fop_MPI , x , y_dist , np .prod (par ['nz' ]), np .prod (par ['nz' ]))
283+ dottest (Fop_MPI , x , y_dist , npp .prod (par ['nz' ]), npp .prod (par ['nz' ]))
273284
274285 if rank == 0 :
275286 Fop = pylops .FirstDerivative (dims = par ['nz' ], axis = 0 ,
@@ -292,8 +303,8 @@ def test_second_derivative_forward(par):
292303 Sop_MPI = pylops_mpi .basicoperators .MPISecondDerivative (dims = par ['nz' ], sampling = par ['dz' ],
293304 kind = "forward" , edge = par ['edge' ],
294305 dtype = par ['dtype' ])
295- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['nz' ]), dtype = par ['dtype' ],
296- partition = par ['partition' ])
306+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['nz' ]), dtype = par ['dtype' ],
307+ partition = par ['partition' ], engine = backend )
297308 x [:] = np .random .normal (rank , 10 , x .local_shape )
298309 x_global = x .asarray ()
299310 # Forward
@@ -303,7 +314,7 @@ def test_second_derivative_forward(par):
303314 y_adj_dist = Sop_MPI .H @ x
304315 y_adj = y_adj_dist .asarray ()
305316 # Dot test
306- dottest (Sop_MPI , x , y_dist , np .prod (par ['nz' ]), np .prod (par ['nz' ]))
317+ dottest (Sop_MPI , x , y_dist , npp .prod (par ['nz' ]), npp .prod (par ['nz' ]))
307318
308319 if rank == 0 :
309320 Sop = pylops .SecondDerivative (dims = par ['nz' ], axis = 0 ,
@@ -326,8 +337,8 @@ def test_second_derivative_backward(par):
326337 Sop_MPI = pylops_mpi .basicoperators .MPISecondDerivative (dims = par ['nz' ], sampling = par ['dz' ],
327338 kind = "backward" , edge = par ['edge' ],
328339 dtype = par ['dtype' ])
329- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['nz' ]), dtype = par ['dtype' ],
330- partition = par ['partition' ])
340+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['nz' ]), dtype = par ['dtype' ],
341+ partition = par ['partition' ], engine = backend )
331342 x [:] = np .random .normal (rank , 10 , x .local_shape )
332343 x_global = x .asarray ()
333344 # Forward
@@ -337,7 +348,7 @@ def test_second_derivative_backward(par):
337348 y_adj_dist = Sop_MPI .H @ x
338349 y_adj = y_adj_dist .asarray ()
339350 # Dot test
340- dottest (Sop_MPI , x , y_dist , np .prod (par ['nz' ]), np .prod (par ['nz' ]))
351+ dottest (Sop_MPI , x , y_dist , npp .prod (par ['nz' ]), npp .prod (par ['nz' ]))
341352
342353 if rank == 0 :
343354 Sop = pylops .SecondDerivative (dims = par ['nz' ], axis = 0 ,
@@ -360,8 +371,8 @@ def test_second_derivative_centered(par):
360371 Sop_MPI = pylops_mpi .basicoperators .MPISecondDerivative (dims = par ['nz' ], sampling = par ['dz' ],
361372 kind = "centered" , edge = par ['edge' ],
362373 dtype = par ['dtype' ])
363- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['nz' ]), dtype = par ['dtype' ],
364- partition = par ['partition' ])
374+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['nz' ]), dtype = par ['dtype' ],
375+ partition = par ['partition' ], engine = backend )
365376 x [:] = np .random .normal (rank , 10 , x .local_shape )
366377 x_global = x .asarray ()
367378 # Forward
@@ -371,7 +382,7 @@ def test_second_derivative_centered(par):
371382 y_adj_dist = Sop_MPI .H @ x
372383 y_adj = y_adj_dist .asarray ()
373384 # Dot test
374- dottest (Sop_MPI , x , y_dist , np .prod (par ['nz' ]), np .prod (par ['nz' ]))
385+ dottest (Sop_MPI , x , y_dist , npp .prod (par ['nz' ]), npp .prod (par ['nz' ]))
375386
376387 if rank == 0 :
377388 Sop = pylops .SecondDerivative (dims = par ['nz' ], axis = 0 ,
@@ -394,7 +405,7 @@ def test_laplacian(par):
394405 weights = par ['weights' ], sampling = par ['sampling' ],
395406 kind = kind , edge = par ['edge' ],
396407 dtype = par ['dtype' ])
397- x = pylops_mpi .DistributedArray (global_shape = np .prod (par ['n' ]), dtype = par ['dtype' ])
408+ x = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['n' ]), dtype = par ['dtype' ], engine = backend )
398409 x [:] = np .random .normal (rank , 10 , x .local_shape )
399410 x_global = x .asarray ()
400411 # Forward
@@ -404,7 +415,7 @@ def test_laplacian(par):
404415 y_adj_dist = Lop_MPI .H @ x
405416 y_adj = y_adj_dist .asarray ()
406417 # Dot test
407- dottest (Lop_MPI , x , y_dist , np .prod (par ['n' ]), np .prod (par ['n' ]))
418+ dottest (Lop_MPI , x , y_dist , npp .prod (par ['n' ]), npp .prod (par ['n' ]))
408419
409420 if rank == 0 :
410421 Lop = pylops .Laplacian (dims = par ['n' ], axes = par ['axes' ],
@@ -426,7 +437,7 @@ def test_gradient(par):
426437 Gop_MPI = pylops_mpi .basicoperators .MPIGradient (dims = par ['n' ], sampling = par ['sampling' ],
427438 kind = kind , edge = par ['edge' ],
428439 dtype = par ['dtype' ])
429- x_fwd = pylops_mpi .DistributedArray (global_shape = np .prod (par ['n' ]), dtype = par ['dtype' ])
440+ x_fwd = pylops_mpi .DistributedArray (global_shape = npp .prod (par ['n' ]), dtype = par ['dtype' ], engine = backend )
430441 x_fwd [:] = np .random .normal (rank , 10 , x_fwd .local_shape )
431442 x_global = x_fwd .asarray ()
432443
@@ -436,11 +447,11 @@ def test_gradient(par):
436447 y = y_dist .asarray ()
437448
438449 # Adjoint
439- x_adj_dist1 = pylops_mpi .DistributedArray (global_shape = int (np .prod (par ['n' ])), dtype = par ['dtype' ])
450+ x_adj_dist1 = pylops_mpi .DistributedArray (global_shape = int (npp .prod (par ['n' ])), dtype = par ['dtype' ], engine = backend )
440451 x_adj_dist1 [:] = np .random .normal (rank , 10 , x_adj_dist1 .local_shape )
441- x_adj_dist2 = pylops_mpi .DistributedArray (global_shape = int (np .prod (par ['n' ])), dtype = par ['dtype' ])
452+ x_adj_dist2 = pylops_mpi .DistributedArray (global_shape = int (npp .prod (par ['n' ])), dtype = par ['dtype' ], engine = backend )
442453 x_adj_dist2 [:] = np .random .normal (rank , 20 , x_adj_dist2 .local_shape )
443- x_adj_dist3 = pylops_mpi .DistributedArray (global_shape = int (np .prod (par ['n' ])), dtype = par ['dtype' ])
454+ x_adj_dist3 = pylops_mpi .DistributedArray (global_shape = int (npp .prod (par ['n' ])), dtype = par ['dtype' ], engine = backend )
444455 x_adj_dist3 [:] = np .random .normal (rank , 30 , x_adj_dist3 .local_shape )
445456 x_adj = pylops_mpi .StackedDistributedArray (distarrays = [x_adj_dist1 , x_adj_dist2 , x_adj_dist3 ])
446457 x_adj_global = x_adj .asarray ()
@@ -449,7 +460,7 @@ def test_gradient(par):
449460 y_adj = y_adj_dist .asarray ()
450461
451462 # Dot test
452- dottest (Gop_MPI , x_fwd , y_dist , len (par ['n' ]) * np .prod (par ['n' ]), np .prod (par ['n' ]))
463+ dottest (Gop_MPI , x_fwd , y_dist , len (par ['n' ]) * npp .prod (par ['n' ]), npp .prod (par ['n' ]))
453464
454465 if rank == 0 :
455466 Gop = pylops .Gradient (dims = par ['n' ], sampling = par ['sampling' ],
0 commit comments