@@ -461,15 +461,18 @@ def test_positive_boolean():
461
461
dpnp .positive (dpnp_a )
462
462
463
463
464
+ @pytest .mark .parametrize ("func" , ["prod" , "nanprod" ])
464
465
@pytest .mark .parametrize ("axis" , [None , 0 , 1 , - 1 , 2 , - 2 , (1 , 2 ), (0 , - 2 )])
465
466
@pytest .mark .parametrize ("keepdims" , [False , True ])
466
467
@pytest .mark .parametrize ("dtype" , get_all_dtypes (no_bool = True ))
467
- def test_prod ( axis , keepdims , dtype ):
468
+ def test_prod_nanprod ( func , axis , keepdims , dtype ):
468
469
a = numpy .arange (1 , 13 , dtype = dtype ).reshape ((2 , 2 , 3 ))
470
+ if func == "nanprod" and issubclass (a .dtype .type , dpnp .inexact ):
471
+ a [1 :2 :] = numpy .nan
469
472
ia = dpnp .array (a )
470
473
471
- np_res = numpy . prod (a , axis = axis , keepdims = keepdims )
472
- dpnp_res = dpnp . prod (ia , axis = axis , keepdims = keepdims )
474
+ np_res = getattr ( numpy , func ) (a , axis = axis , keepdims = keepdims )
475
+ dpnp_res = getattr ( dpnp , func ) (ia , axis = axis , keepdims = keepdims )
473
476
474
477
assert dpnp_res .shape == np_res .shape
475
478
assert_allclose (dpnp_res , np_res )
@@ -487,107 +490,74 @@ def test_prod_zero_size(axis):
487
490
assert_allclose (dpnp_res , np_res )
488
491
489
492
490
- @pytest .mark .parametrize ("axis" , [None , 0 , 1 , - 1 , 2 , - 2 , (1 , 2 ), (0 , - 2 )])
491
- @pytest .mark .parametrize ("keepdims" , [False , True ])
492
- @pytest .mark .parametrize ("dtype" , get_float_complex_dtypes ())
493
- def test_nanprod (axis , keepdims , dtype ):
494
- a = numpy .arange (1 , 13 , dtype = dtype ).reshape ((2 , 2 , 3 ))
495
- a [1 :2 :] = numpy .nan
496
- ia = dpnp .array (a )
497
-
498
- np_res = numpy .nanprod (a , axis = axis , keepdims = keepdims )
499
- dpnp_res = dpnp .nanprod (ia , axis = axis , keepdims = keepdims )
500
-
501
- assert dpnp_res .shape == np_res .shape
502
- assert_allclose (dpnp_res , np_res )
503
-
504
-
493
+ @pytest .mark .parametrize ("func" , ["prod" , "nanprod" ])
505
494
@pytest .mark .parametrize ("axis" , [None , 0 , 1 , - 1 ])
506
495
@pytest .mark .parametrize ("keepdims" , [False , True ])
507
- def test_prod_bool ( axis , keepdims ):
496
+ def test_prod_nanprod_bool ( func , axis , keepdims ):
508
497
a = numpy .arange (2 , dtype = dpnp .bool )
509
498
a = numpy .tile (a , (2 , 2 ))
510
499
ia = dpnp .array (a )
511
500
512
- np_res = numpy . prod (a , axis = axis , keepdims = keepdims )
513
- dpnp_res = dpnp . prod (ia , axis = axis , keepdims = keepdims )
501
+ np_res = getattr ( numpy , func ) (a , axis = axis , keepdims = keepdims )
502
+ dpnp_res = getattr ( dpnp , func ) (ia , axis = axis , keepdims = keepdims )
514
503
515
504
assert dpnp_res .shape == np_res .shape
516
505
assert_allclose (dpnp_res , np_res )
517
506
518
507
508
+ @pytest .mark .usefixtures ("suppress_complex_warning" )
509
+ @pytest .mark .usefixtures ("suppress_invalid_numpy_warnings" )
510
+ @pytest .mark .parametrize ("func" , ["prod" , "nanprod" ])
519
511
@pytest .mark .parametrize ("in_dtype" , get_all_dtypes (no_bool = True ))
520
512
@pytest .mark .parametrize ("out_dtype" , get_all_dtypes (no_bool = True ))
521
- def test_prod_dtype ( in_dtype , out_dtype ):
513
+ def test_prod_nanprod_dtype ( func , in_dtype , out_dtype ):
522
514
a = numpy .arange (1 , 13 , dtype = in_dtype ).reshape ((2 , 2 , 3 ))
515
+ if func == "nanprod" and issubclass (a .dtype .type , dpnp .inexact ):
516
+ a [1 :2 :] = numpy .nan
523
517
ia = dpnp .array (a )
524
518
525
- np_res = numpy . prod (a , dtype = out_dtype )
526
- dpnp_res = dpnp . prod (ia , dtype = out_dtype )
519
+ np_res = getattr ( numpy , func ) (a , dtype = out_dtype )
520
+ dpnp_res = getattr ( dpnp , func ) (ia , dtype = out_dtype )
527
521
528
522
if out_dtype is not None :
529
523
assert dpnp_res .dtype == out_dtype
530
524
assert_allclose (dpnp_res , np_res )
531
525
532
526
533
- @pytest .mark .parametrize ("in_dtype" , get_float_complex_dtypes ())
534
- @pytest .mark .parametrize ("out_dtype" , get_float_complex_dtypes ())
535
- def test_nanprod_dtype (in_dtype , out_dtype ):
536
- a = numpy .arange (1 , 13 , dtype = in_dtype ).reshape ((2 , 2 , 3 ))
537
- a [1 :2 :] = numpy .nan
538
- ia = dpnp .array (a )
539
-
540
- np_res = numpy .nanprod (a , dtype = out_dtype )
541
- dpnp_res = dpnp .nanprod (ia , dtype = out_dtype )
542
-
543
- if out_dtype is not None :
544
- assert dpnp_res .dtype == out_dtype
545
- assert_allclose (dpnp_res , np_res )
546
-
547
-
548
- def test_prod_out ():
527
+ @pytest .mark .parametrize ("func" , ["prod" , "nanprod" ])
528
+ def test_prod_nanprod_out (func ):
549
529
a = numpy .arange (1 , 7 ).reshape ((2 , 3 ))
530
+ if func == "nanprod" and issubclass (a .dtype .type , dpnp .inexact ):
531
+ a [1 :2 :] = numpy .nan
550
532
ia = dpnp .array (a )
551
533
552
- np_res = numpy . prod (a , axis = 0 )
534
+ np_res = getattr ( numpy , func ) (a , axis = 0 )
553
535
dpnp_res = dpnp .array (numpy .empty_like (np_res ))
554
- dpnp . prod (ia , axis = 0 , out = dpnp_res )
536
+ getattr ( dpnp , func ) (ia , axis = 0 , out = dpnp_res )
555
537
assert_allclose (dpnp_res , np_res )
556
538
557
539
dpnp_res = dpt .asarray (numpy .empty_like (np_res ))
558
- dpnp . prod (ia , axis = 0 , out = dpnp_res )
540
+ getattr ( dpnp , func ) (ia , axis = 0 , out = dpnp_res )
559
541
assert_allclose (dpnp_res , np_res )
560
542
561
543
dpnp_res = numpy .empty_like (np_res )
562
544
with pytest .raises (TypeError ):
563
- dpnp . prod (ia , axis = 0 , out = dpnp_res )
545
+ getattr ( dpnp , func ) (ia , axis = 0 , out = dpnp_res )
564
546
565
547
dpnp_res = dpnp .array (numpy .empty ((2 , 3 )))
566
548
with pytest .raises (ValueError ):
567
- dpnp . prod (ia , axis = 0 , out = dpnp_res )
549
+ getattr ( dpnp , func ) (ia , axis = 0 , out = dpnp_res )
568
550
569
551
570
- def test_nanprod_out ():
571
- a = numpy .arange (1 , 7 , dtype = float ).reshape ((2 , 3 ))
572
- a [1 :2 :] = numpy .nan
573
- ia = dpnp .array (a )
574
-
575
- np_res = numpy .prod (a , axis = 0 )
576
- dpnp_res = dpnp .array (numpy .empty_like (np_res ))
577
- dpnp .prod (ia , axis = 0 , out = dpnp_res )
578
- assert_allclose (dpnp_res , np_res )
552
+ def test_prod_Error ():
553
+ ia = dpnp .arange (5 )
579
554
580
- dpnp_res = dpt .asarray (numpy .empty_like (np_res ))
581
- dpnp .prod (ia , axis = 0 , out = dpnp_res )
582
- assert_allclose (dpnp_res , np_res )
583
-
584
- dpnp_res = numpy .empty_like (np_res )
585
555
with pytest .raises (TypeError ):
586
- dpnp .prod (ia , axis = 0 , out = dpnp_res )
587
-
588
- dpnp_res = dpnp .array ( numpy . empty (( 2 , 3 )) )
589
- with pytest .raises (ValueError ):
590
- dpnp .prod (ia , axis = 0 , out = dpnp_res )
556
+ dpnp .prod (dpnp . asnumpy ( ia ) )
557
+ with pytest . raises ( NotImplementedError ):
558
+ dpnp .prod ( ia , where = False )
559
+ with pytest .raises (NotImplementedError ):
560
+ dpnp .prod (ia , initial = 6 )
591
561
592
562
593
563
@pytest .mark .parametrize (
0 commit comments