@@ -1070,9 +1070,9 @@ def test_invalid_out(self, out):
1070
1070
assert_raises (TypeError , numpy .add , a .asnumpy (), 2 , out )
1071
1071
1072
1072
1073
- class TestHypot :
1074
- @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1075
- def test_hypot (self , dtype ):
1073
+ class TestDivide :
1074
+ @pytest .mark .parametrize ("dtype" , get_float_complex_dtypes ())
1075
+ def test_divide (self , dtype ):
1076
1076
array1_data = numpy .arange (10 )
1077
1077
array2_data = numpy .arange (5 , 15 )
1078
1078
out = numpy .empty (10 , dtype = dtype )
@@ -1081,55 +1081,169 @@ def test_hypot(self, dtype):
1081
1081
dp_array1 = dpnp .array (array1_data , dtype = dtype )
1082
1082
dp_array2 = dpnp .array (array2_data , dtype = dtype )
1083
1083
dp_out = dpnp .array (out , dtype = dtype )
1084
- result = dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1084
+ result = dpnp .divide (dp_array1 , dp_array2 , out = dp_out )
1085
1085
1086
1086
# original
1087
1087
np_array1 = numpy .array (array1_data , dtype = dtype )
1088
1088
np_array2 = numpy .array (array2_data , dtype = dtype )
1089
- expected = numpy .hypot (np_array1 , np_array2 , out = out )
1089
+ expected = numpy .divide (np_array1 , np_array2 , out = out )
1090
1090
1091
- assert_allclose ( expected , result )
1092
- assert_allclose ( out , dp_out )
1091
+ assert_dtype_allclose ( result , expected )
1092
+ assert_dtype_allclose ( dp_out , out )
1093
1093
1094
- @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1094
+ @pytest .mark .usefixtures ("suppress_divide_invalid_numpy_warnings" )
1095
+ @pytest .mark .parametrize ("dtype" , get_float_complex_dtypes ())
1095
1096
def test_out_dtypes (self , dtype ):
1096
1097
size = 10
1097
1098
1098
1099
np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1099
1100
np_array2 = numpy .arange (size , dtype = dtype )
1100
- np_out = numpy .empty (size , dtype = numpy .float32 )
1101
- expected = numpy .hypot (np_array1 , np_array2 , out = np_out )
1101
+ np_out = numpy .empty (size , dtype = numpy .complex64 )
1102
+ expected = numpy .divide (np_array1 , np_array2 , out = np_out )
1102
1103
1103
1104
dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1104
1105
dp_array2 = dpnp .arange (size , dtype = dtype )
1105
1106
1106
- dp_out = dpnp .empty (size , dtype = dpnp .float32 )
1107
- if dtype != dpnp .float32 :
1107
+ dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
1108
+ if dtype != dpnp .complex64 :
1108
1109
# dtype of out mismatches types of input arrays
1109
1110
with pytest .raises (TypeError ):
1110
- dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1111
+ dpnp .divide (dp_array1 , dp_array2 , out = dp_out )
1111
1112
1112
1113
# allocate new out with expected type
1113
1114
dp_out = dpnp .empty (size , dtype = dtype )
1114
1115
1115
- result = dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1116
+ result = dpnp .divide (dp_array1 , dp_array2 , out = dp_out )
1117
+ assert_dtype_allclose (result , expected )
1116
1118
1117
- tol = numpy .finfo (numpy .float32 ).resolution
1118
- assert_allclose (expected , result , rtol = tol , atol = tol )
1119
+ @pytest .mark .usefixtures ("suppress_divide_invalid_numpy_warnings" )
1120
+ @pytest .mark .parametrize ("dtype" , get_float_complex_dtypes ())
1121
+ def test_out_overlap (self , dtype ):
1122
+ size = 15
1123
+ # DPNP
1124
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1125
+ dpnp .divide (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1119
1126
1120
- @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1127
+ # original
1128
+ np_a = numpy .arange (2 * size , dtype = dtype )
1129
+ numpy .divide (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1130
+
1131
+ assert_dtype_allclose (dp_a , np_a )
1132
+
1133
+ @pytest .mark .parametrize ("dtype" , get_float_complex_dtypes ())
1134
+ def test_inplace_strided_out (self , dtype ):
1135
+ size = 21
1136
+
1137
+ np_a = numpy .arange (size , dtype = dtype )
1138
+ np_a [::3 ] /= 4
1139
+
1140
+ dp_a = dpnp .arange (size , dtype = dtype )
1141
+ dp_a [::3 ] /= 4
1142
+
1143
+ assert_allclose (dp_a , np_a )
1144
+
1145
+ @pytest .mark .parametrize (
1146
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1147
+ )
1148
+ def test_invalid_shape (self , shape ):
1149
+ dp_array1 = dpnp .arange (10 )
1150
+ dp_array2 = dpnp .arange (5 , 15 )
1151
+ dp_out = dpnp .empty (shape )
1152
+
1153
+ with pytest .raises (ValueError ):
1154
+ dpnp .divide (dp_array1 , dp_array2 , out = dp_out )
1155
+
1156
+ @pytest .mark .parametrize (
1157
+ "out" ,
1158
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1159
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1160
+ )
1161
+ def test_invalid_out (self , out ):
1162
+ a = dpnp .arange (10 )
1163
+
1164
+ assert_raises (TypeError , dpnp .divide , a , 2 , out )
1165
+ assert_raises (TypeError , numpy .divide , a .asnumpy (), 2 , out )
1166
+
1167
+
1168
+ class TestFloorDivide :
1169
+ @pytest .mark .parametrize (
1170
+ "dtype" , get_all_dtypes (no_bool = True , no_none = True , no_complex = True )
1171
+ )
1172
+ def test_floor_divide (self , dtype ):
1173
+ array1_data = numpy .arange (10 )
1174
+ array2_data = numpy .arange (5 , 15 )
1175
+ out = numpy .empty (10 , dtype = dtype )
1176
+
1177
+ # DPNP
1178
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
1179
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
1180
+ dp_out = dpnp .array (out , dtype = dtype )
1181
+ result = dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1182
+
1183
+ # original
1184
+ np_array1 = numpy .array (array1_data , dtype = dtype )
1185
+ np_array2 = numpy .array (array2_data , dtype = dtype )
1186
+ expected = numpy .floor_divide (np_array1 , np_array2 , out = out )
1187
+
1188
+ assert_allclose (result , expected )
1189
+ assert_allclose (dp_out , out )
1190
+
1191
+ @pytest .mark .usefixtures ("suppress_divide_invalid_numpy_warnings" )
1192
+ @pytest .mark .parametrize (
1193
+ "dtype" , get_all_dtypes (no_bool = True , no_none = True , no_complex = True )
1194
+ )
1195
+ def test_out_dtypes (self , dtype ):
1196
+ size = 10
1197
+
1198
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1199
+ np_array2 = numpy .arange (size , dtype = dtype )
1200
+ np_out = numpy .empty (size , dtype = numpy .complex64 )
1201
+ expected = numpy .floor_divide (np_array1 , np_array2 , out = np_out )
1202
+
1203
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1204
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1205
+
1206
+ dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
1207
+ if dtype != dpnp .complex64 :
1208
+ # dtype of out mismatches types of input arrays
1209
+ with pytest .raises (TypeError ):
1210
+ dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1211
+
1212
+ # allocate new out with expected type
1213
+ dp_out = dpnp .empty (size , dtype = dtype )
1214
+
1215
+ result = dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1216
+ assert_allclose (result , expected )
1217
+
1218
+ @pytest .mark .usefixtures ("suppress_divide_invalid_numpy_warnings" )
1219
+ @pytest .mark .parametrize (
1220
+ "dtype" , get_all_dtypes (no_bool = True , no_none = True , no_complex = True )
1221
+ )
1121
1222
def test_out_overlap (self , dtype ):
1122
1223
size = 15
1123
1224
# DPNP
1124
1225
dp_a = dpnp .arange (2 * size , dtype = dtype )
1125
- dpnp .hypot (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1226
+ dpnp .floor_divide (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1126
1227
1127
1228
# original
1128
1229
np_a = numpy .arange (2 * size , dtype = dtype )
1129
- numpy .hypot (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1230
+ numpy .floor_divide (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1130
1231
1131
- tol = numpy .finfo (numpy .float32 ).resolution
1132
- assert_allclose (np_a , dp_a , rtol = tol , atol = tol )
1232
+ assert_allclose (dp_a , np_a )
1233
+
1234
+ @pytest .mark .parametrize (
1235
+ "dtype" , get_all_dtypes (no_bool = True , no_none = True , no_complex = True )
1236
+ )
1237
+ def test_inplace_strided_out (self , dtype ):
1238
+ size = 21
1239
+
1240
+ np_a = numpy .arange (size , dtype = dtype )
1241
+ np_a [::3 ] //= 4
1242
+
1243
+ dp_a = dpnp .arange (size , dtype = dtype )
1244
+ dp_a [::3 ] //= 4
1245
+
1246
+ assert_allclose (dp_a , np_a )
1133
1247
1134
1248
@pytest .mark .parametrize (
1135
1249
"shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
@@ -1140,7 +1254,7 @@ def test_invalid_shape(self, shape):
1140
1254
dp_out = dpnp .empty (shape )
1141
1255
1142
1256
with pytest .raises (ValueError ):
1143
- dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1257
+ dpnp .floor_divide (dp_array1 , dp_array2 , out = dp_out )
1144
1258
1145
1259
@pytest .mark .parametrize (
1146
1260
"out" ,
@@ -1150,8 +1264,8 @@ def test_invalid_shape(self, shape):
1150
1264
def test_invalid_out (self , out ):
1151
1265
a = dpnp .arange (10 )
1152
1266
1153
- assert_raises (TypeError , dpnp .hypot , a , 2 , out )
1154
- assert_raises (TypeError , numpy .hypot , a .asnumpy (), 2 , out )
1267
+ assert_raises (TypeError , dpnp .floor_divide , a , 2 , out )
1268
+ assert_raises (TypeError , numpy .floor_divide , a .asnumpy (), 2 , out )
1155
1269
1156
1270
1157
1271
class TestFmax :
@@ -1316,6 +1430,90 @@ def test_invalid_out(self, out):
1316
1430
assert_raises (TypeError , numpy .fmin , a .asnumpy (), 2 , out )
1317
1431
1318
1432
1433
+ class TestHypot :
1434
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1435
+ def test_hypot (self , dtype ):
1436
+ array1_data = numpy .arange (10 )
1437
+ array2_data = numpy .arange (5 , 15 )
1438
+ out = numpy .empty (10 , dtype = dtype )
1439
+
1440
+ # DPNP
1441
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
1442
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
1443
+ dp_out = dpnp .array (out , dtype = dtype )
1444
+ result = dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1445
+
1446
+ # original
1447
+ np_array1 = numpy .array (array1_data , dtype = dtype )
1448
+ np_array2 = numpy .array (array2_data , dtype = dtype )
1449
+ expected = numpy .hypot (np_array1 , np_array2 , out = out )
1450
+
1451
+ assert_allclose (expected , result )
1452
+ assert_allclose (out , dp_out )
1453
+
1454
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1455
+ def test_out_dtypes (self , dtype ):
1456
+ size = 10
1457
+
1458
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1459
+ np_array2 = numpy .arange (size , dtype = dtype )
1460
+ np_out = numpy .empty (size , dtype = numpy .float32 )
1461
+ expected = numpy .hypot (np_array1 , np_array2 , out = np_out )
1462
+
1463
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1464
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1465
+
1466
+ dp_out = dpnp .empty (size , dtype = dpnp .float32 )
1467
+ if dtype != dpnp .float32 :
1468
+ # dtype of out mismatches types of input arrays
1469
+ with pytest .raises (TypeError ):
1470
+ dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1471
+
1472
+ # allocate new out with expected type
1473
+ dp_out = dpnp .empty (size , dtype = dtype )
1474
+
1475
+ result = dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1476
+
1477
+ tol = numpy .finfo (numpy .float32 ).resolution
1478
+ assert_allclose (expected , result , rtol = tol , atol = tol )
1479
+
1480
+ @pytest .mark .parametrize ("dtype" , get_float_dtypes ())
1481
+ def test_out_overlap (self , dtype ):
1482
+ size = 15
1483
+ # DPNP
1484
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1485
+ dpnp .hypot (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1486
+
1487
+ # original
1488
+ np_a = numpy .arange (2 * size , dtype = dtype )
1489
+ numpy .hypot (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1490
+
1491
+ tol = numpy .finfo (numpy .float32 ).resolution
1492
+ assert_allclose (np_a , dp_a , rtol = tol , atol = tol )
1493
+
1494
+ @pytest .mark .parametrize (
1495
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1496
+ )
1497
+ def test_invalid_shape (self , shape ):
1498
+ dp_array1 = dpnp .arange (10 )
1499
+ dp_array2 = dpnp .arange (5 , 15 )
1500
+ dp_out = dpnp .empty (shape )
1501
+
1502
+ with pytest .raises (ValueError ):
1503
+ dpnp .hypot (dp_array1 , dp_array2 , out = dp_out )
1504
+
1505
+ @pytest .mark .parametrize (
1506
+ "out" ,
1507
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1508
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1509
+ )
1510
+ def test_invalid_out (self , out ):
1511
+ a = dpnp .arange (10 )
1512
+
1513
+ assert_raises (TypeError , dpnp .hypot , a , 2 , out )
1514
+ assert_raises (TypeError , numpy .hypot , a .asnumpy (), 2 , out )
1515
+
1516
+
1319
1517
class TestMaximum :
1320
1518
@pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1321
1519
def test_maximum (self , dtype ):
@@ -1846,17 +2044,3 @@ def test_inplace_remainder(dtype):
1846
2044
dp_a %= 4
1847
2045
1848
2046
assert_allclose (dp_a , np_a )
1849
-
1850
-
1851
- @pytest .mark .parametrize (
1852
- "dtype" , get_all_dtypes (no_bool = True , no_none = True , no_complex = True )
1853
- )
1854
- def test_inplace_floor_divide (dtype ):
1855
- size = 21
1856
- np_a = numpy .arange (size , dtype = dtype )
1857
- dp_a = dpnp .arange (size , dtype = dtype )
1858
-
1859
- np_a //= 4
1860
- dp_a //= 4
1861
-
1862
- assert_allclose (dp_a , np_a )
0 commit comments