@@ -461,15 +461,18 @@ def test_positive_boolean():
461461 dpnp .positive (dpnp_a )
462462
463463
464+ @pytest .mark .parametrize ("func" , ["prod" , "nanprod" ])
464465@pytest .mark .parametrize ("axis" , [None , 0 , 1 , - 1 , 2 , - 2 , (1 , 2 ), (0 , - 2 )])
465466@pytest .mark .parametrize ("keepdims" , [False , True ])
466467@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 ):
468469 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
469472 ia = dpnp .array (a )
470473
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 )
473476
474477 assert dpnp_res .shape == np_res .shape
475478 assert_allclose (dpnp_res , np_res )
@@ -487,107 +490,74 @@ def test_prod_zero_size(axis):
487490 assert_allclose (dpnp_res , np_res )
488491
489492
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" ])
505494@pytest .mark .parametrize ("axis" , [None , 0 , 1 , - 1 ])
506495@pytest .mark .parametrize ("keepdims" , [False , True ])
507- def test_prod_bool ( axis , keepdims ):
496+ def test_prod_nanprod_bool ( func , axis , keepdims ):
508497 a = numpy .arange (2 , dtype = dpnp .bool )
509498 a = numpy .tile (a , (2 , 2 ))
510499 ia = dpnp .array (a )
511500
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 )
514503
515504 assert dpnp_res .shape == np_res .shape
516505 assert_allclose (dpnp_res , np_res )
517506
518507
508+ @pytest .mark .usefixtures ("suppress_complex_warning" )
509+ @pytest .mark .usefixtures ("suppress_invalid_numpy_warnings" )
510+ @pytest .mark .parametrize ("func" , ["prod" , "nanprod" ])
519511@pytest .mark .parametrize ("in_dtype" , get_all_dtypes (no_bool = True ))
520512@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 ):
522514 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
523517 ia = dpnp .array (a )
524518
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 )
527521
528522 if out_dtype is not None :
529523 assert dpnp_res .dtype == out_dtype
530524 assert_allclose (dpnp_res , np_res )
531525
532526
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 ):
549529 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
550532 ia = dpnp .array (a )
551533
552- np_res = numpy . prod (a , axis = 0 )
534+ np_res = getattr ( numpy , func ) (a , axis = 0 )
553535 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 )
555537 assert_allclose (dpnp_res , np_res )
556538
557539 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 )
559541 assert_allclose (dpnp_res , np_res )
560542
561543 dpnp_res = numpy .empty_like (np_res )
562544 with pytest .raises (TypeError ):
563- dpnp . prod (ia , axis = 0 , out = dpnp_res )
545+ getattr ( dpnp , func ) (ia , axis = 0 , out = dpnp_res )
564546
565547 dpnp_res = dpnp .array (numpy .empty ((2 , 3 )))
566548 with pytest .raises (ValueError ):
567- dpnp . prod (ia , axis = 0 , out = dpnp_res )
549+ getattr ( dpnp , func ) (ia , axis = 0 , out = dpnp_res )
568550
569551
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 )
579554
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 )
585555 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 )
591561
592562
593563@pytest .mark .parametrize (
0 commit comments