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