1
1
import pytest
2
2
from .helper import (
3
3
get_all_dtypes ,
4
+ get_float_complex_dtypes ,
4
5
is_cpu_device ,
5
6
is_win_platform
6
7
)
@@ -634,24 +635,108 @@ def test_invalid_shape(self, shape):
634
635
dpnp .trunc (dp_array , out = dp_out )
635
636
636
637
638
+ class TestAdd :
639
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
640
+ def test_add (self , dtype ):
641
+ array1_data = numpy .arange (10 )
642
+ array2_data = numpy .arange (5 , 15 )
643
+ out = numpy .empty (10 , dtype = dtype )
644
+
645
+ # DPNP
646
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
647
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
648
+ dp_out = dpnp .array (out , dtype = dtype )
649
+ result = dpnp .add (dp_array1 , dp_array2 , out = dp_out )
650
+
651
+ # original
652
+ np_array1 = numpy .array (array1_data , dtype = dtype )
653
+ np_array2 = numpy .array (array2_data , dtype = dtype )
654
+ expected = numpy .add (np_array1 , np_array2 , out = out )
655
+
656
+ assert_allclose (expected , result )
657
+ assert_allclose (out , dp_out )
658
+
659
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
660
+ def test_out_dtypes (self , dtype ):
661
+ size = 2 if dtype == dpnp .bool else 10
662
+
663
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
664
+ np_array2 = numpy .arange (size , dtype = dtype )
665
+ np_out = numpy .empty (size , dtype = numpy .complex64 )
666
+ expected = numpy .add (np_array1 , np_array2 , out = np_out )
667
+
668
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
669
+ dp_array2 = dpnp .arange (size , dtype = dtype )
670
+ dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
671
+ result = dpnp .add (dp_array1 , dp_array2 , out = dp_out )
672
+
673
+ assert_array_equal (expected , result )
674
+
675
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
676
+ def test_out_overlap (self , dtype ):
677
+ size = 1 if dtype == dpnp .bool else 15
678
+
679
+ np_a = numpy .arange (2 * size , dtype = dtype )
680
+ expected = numpy .add (np_a [size ::], np_a [::2 ], out = np_a [:size :])
681
+
682
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
683
+ result = dpnp .add (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
684
+
685
+ assert_allclose (expected , result )
686
+ assert_allclose (dp_a , np_a )
687
+
688
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_bool = True , no_none = True ))
689
+ def test_inplace_strided_out (self , dtype ):
690
+ size = 21
691
+
692
+ np_a = numpy .arange (size , dtype = dtype )
693
+ np_a [::3 ] += 4
694
+
695
+ dp_a = dpnp .arange (size , dtype = dtype )
696
+ dp_a [::3 ] += 4
697
+
698
+ assert_allclose (dp_a , np_a )
699
+
700
+ @pytest .mark .parametrize ("shape" ,
701
+ [(0 ,), (15 , ), (2 , 2 )],
702
+ ids = ['(0,)' , '(15, )' , '(2,2)' ])
703
+ def test_invalid_shape (self , shape ):
704
+ dp_array1 = dpnp .arange (10 , dtype = dpnp .float64 )
705
+ dp_array2 = dpnp .arange (5 , 15 , dtype = dpnp .float64 )
706
+ dp_out = dpnp .empty (shape , dtype = dpnp .float64 )
707
+
708
+ with pytest .raises (ValueError ):
709
+ dpnp .add (dp_array1 , dp_array2 , out = dp_out )
710
+
711
+ @pytest .mark .parametrize ("out" ,
712
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
713
+ ids = ['4' , '()' , '[]' , '(3, 7)' , '[2, 4]' ])
714
+ def test_invalid_out (self , out ):
715
+ a = dpnp .arange (10 )
716
+
717
+ assert_raises (TypeError , dpnp .add , a , 2 , out )
718
+ assert_raises (TypeError , numpy .add , a .asnumpy (), 2 , out )
719
+
720
+
637
721
class TestPower :
638
- def test_power (self ):
722
+ @pytest .mark .parametrize ("dtype" , get_float_complex_dtypes ())
723
+ def test_power (self , dtype ):
639
724
array1_data = numpy .arange (10 )
640
725
array2_data = numpy .arange (5 , 15 )
641
- out = numpy .empty (10 , dtype = numpy . float64 )
726
+ out = numpy .empty (10 , dtype = dtype )
642
727
643
728
# DPNP
644
- dp_array1 = dpnp .array (array1_data , dtype = dpnp . float64 )
645
- dp_array2 = dpnp .array (array2_data , dtype = dpnp . float64 )
646
- dp_out = dpnp .array (out , dtype = dpnp . float64 )
729
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
730
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
731
+ dp_out = dpnp .array (out , dtype = dtype )
647
732
result = dpnp .power (dp_array1 , dp_array2 , out = dp_out )
648
733
649
734
# original
650
- np_array1 = numpy .array (array1_data , dtype = numpy . float64 )
651
- np_array2 = numpy .array (array2_data , dtype = numpy . float64 )
735
+ np_array1 = numpy .array (array1_data , dtype = dtype )
736
+ np_array2 = numpy .array (array2_data , dtype = dtype )
652
737
expected = numpy .power (np_array1 , np_array2 , out = out )
653
738
654
- assert_array_equal (expected , result )
739
+ assert_allclose (expected , result )
655
740
656
741
@pytest .mark .parametrize ("dtype" , get_all_dtypes (no_complex = True , no_none = True ))
657
742
def test_out_dtypes (self , dtype ):
@@ -662,7 +747,7 @@ def test_out_dtypes(self, dtype):
662
747
np_out = numpy .empty (size , dtype = numpy .complex64 )
663
748
expected = numpy .power (np_array1 , np_array2 , out = np_out )
664
749
665
- dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
750
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
666
751
dp_array2 = dpnp .arange (size , dtype = dtype )
667
752
dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
668
753
result = dpnp .power (dp_array1 , dp_array2 , out = dp_out )
0 commit comments