@@ -1061,6 +1061,101 @@ def test_invalid_out(self, out):
1061
1061
assert_raises (TypeError , numpy .divide , a .asnumpy (), 2 , out )
1062
1062
1063
1063
1064
+ class TestFloordivide :
1065
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1066
+ def test_floor_divide (self , dtype ):
1067
+ array1_data = numpy .arange (10 )
1068
+ array2_data = numpy .arange (5 , 15 )
1069
+ out = numpy .empty (10 , dtype = dtype )
1070
+
1071
+ # DPNP
1072
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
1073
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
1074
+ dp_out = dpnp .array (out , dtype = dtype )
1075
+ result = dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1076
+
1077
+ # original
1078
+ np_array1 = numpy .array (array1_data , dtype = dtype )
1079
+ np_array2 = numpy .array (array2_data , dtype = dtype )
1080
+ expected = numpy .floor_divide (np_array1 , np_array2 , out = out )
1081
+
1082
+ assert_dtype_allclose (result , expected )
1083
+ assert_dtype_allclose (dp_out , out )
1084
+
1085
+ @pytest .mark .usefixtures ("suppress_divide_invalid_numpy_warnings" )
1086
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1087
+ def test_out_dtypes (self , dtype ):
1088
+ size = 10
1089
+
1090
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1091
+ np_array2 = numpy .arange (size , dtype = dtype )
1092
+ np_out = numpy .empty (size , dtype = numpy .complex64 )
1093
+ expected = numpy .floor_divide (np_array1 , np_array2 , out = np_out )
1094
+
1095
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1096
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1097
+
1098
+ dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
1099
+ if dtype != dpnp .complex64 :
1100
+ # dtype of out mismatches types of input arrays
1101
+ with pytest .raises (TypeError ):
1102
+ dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1103
+
1104
+ # allocate new out with expected type
1105
+ dp_out = dpnp .empty (size , dtype = dtype )
1106
+
1107
+ result = dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1108
+ assert_dtype_allclose (result , expected )
1109
+
1110
+ @pytest .mark .usefixtures ("suppress_divide_invalid_numpy_warnings" )
1111
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1112
+ def test_out_overlap (self , dtype ):
1113
+ size = 15
1114
+ # DPNP
1115
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1116
+ dpnp .floor_divide (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1117
+
1118
+ # original
1119
+ np_a = numpy .arange (2 * size , dtype = dtype )
1120
+ numpy .floor_divide (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1121
+
1122
+ assert_dtype_allclose (dp_a , np_a )
1123
+
1124
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1125
+ def test_inplace_strided_out (self , dtype ):
1126
+ size = 21
1127
+
1128
+ np_a = numpy .arange (size , dtype = dtype )
1129
+ np_a [::3 ] //= 4
1130
+
1131
+ dp_a = dpnp .arange (size , dtype = dtype )
1132
+ dp_a [::3 ] //= 4
1133
+
1134
+ assert_allclose (dp_a , np_a )
1135
+
1136
+ @pytest .mark .parametrize (
1137
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1138
+ )
1139
+ def test_invalid_shape (self , shape ):
1140
+ dp_array1 = dpnp .arange (10 )
1141
+ dp_array2 = dpnp .arange (5 , 15 )
1142
+ dp_out = dpnp .empty (shape )
1143
+
1144
+ with pytest .raises (ValueError ):
1145
+ dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1146
+
1147
+ @pytest .mark .parametrize (
1148
+ "out" ,
1149
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1150
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1151
+ )
1152
+ def test_invalid_out (self , out ):
1153
+ a = dpnp .arange (10 )
1154
+
1155
+ assert_raises (TypeError , dpnp .floor_divide , a , 2 , out )
1156
+ assert_raises (TypeError , numpy .floor_divide , a .asnumpy (), 2 , out )
1157
+
1158
+
1064
1159
class TestFmax :
1065
1160
@pytest .mark .parametrize (
1066
1161
"dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
@@ -1836,17 +1931,3 @@ def test_inplace_remainder(dtype):
1836
1931
dp_a %= 4
1837
1932
1838
1933
assert_allclose (dp_a , np_a )
1839
-
1840
-
1841
- @pytest .mark .parametrize (
1842
- "dtype" , get_all_dtypes (no_bool = True , no_none = True , no_complex = True )
1843
- )
1844
- def test_inplace_floor_divide (dtype ):
1845
- size = 21
1846
- np_a = numpy .arange (size , dtype = dtype )
1847
- dp_a = dpnp .arange (size , dtype = dtype )
1848
-
1849
- np_a //= 4
1850
- dp_a //= 4
1851
-
1852
- assert_allclose (dp_a , np_a )
0 commit comments