@@ -966,6 +966,330 @@ def test_invalid_out(self, out):
966
966
assert_raises (TypeError , numpy .add , a .asnumpy (), 2 , out )
967
967
968
968
969
+ class TestFmax :
970
+ @pytest .mark .parametrize (
971
+ "dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
972
+ )
973
+ def test_fmax (self , dtype ):
974
+ array1_data = numpy .arange (10 )
975
+ array2_data = numpy .arange (5 , 15 )
976
+ out = numpy .empty (10 , dtype = dtype )
977
+
978
+ # DPNP
979
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
980
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
981
+ dp_out = dpnp .array (out , dtype = dtype )
982
+ result = dpnp .fmax (dp_array1 , dp_array2 , out = dp_out )
983
+
984
+ # original
985
+ np_array1 = numpy .array (array1_data , dtype = dtype )
986
+ np_array2 = numpy .array (array2_data , dtype = dtype )
987
+ expected = numpy .fmax (np_array1 , np_array2 , out = out )
988
+
989
+ assert_allclose (expected , result )
990
+ assert_allclose (out , dp_out )
991
+
992
+ @pytest .mark .parametrize (
993
+ "dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
994
+ )
995
+ def test_out_dtypes (self , dtype ):
996
+ size = 10
997
+
998
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
999
+ np_array2 = numpy .arange (size , dtype = dtype )
1000
+ np_out = numpy .empty (size , dtype = numpy .float32 )
1001
+ expected = numpy .fmax (np_array1 , np_array2 , out = np_out )
1002
+
1003
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1004
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1005
+ with pytest .raises (TypeError ):
1006
+ dpnp .fmax (dp_array1 , dp_array2 , out = np_out )
1007
+
1008
+ dp_out = dpnp .empty (size , dtype = dpnp .float32 )
1009
+ result = dpnp .fmax (dp_array1 , dp_array2 , out = dp_out )
1010
+ assert_array_equal (expected , result )
1011
+
1012
+ @pytest .mark .parametrize (
1013
+ "dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
1014
+ )
1015
+ def test_out_overlap (self , dtype ):
1016
+ size = 15
1017
+ # DPNP
1018
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1019
+ dpnp .fmax (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1020
+
1021
+ # original
1022
+ np_a = numpy .arange (2 * size , dtype = dtype )
1023
+ numpy .fmax (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1024
+
1025
+ assert_allclose (np_a , dp_a )
1026
+
1027
+ @pytest .mark .parametrize (
1028
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1029
+ )
1030
+ def test_invalid_shape (self , shape ):
1031
+ dp_array1 = dpnp .arange (10 )
1032
+ dp_array2 = dpnp .arange (5 , 15 )
1033
+ dp_out = dpnp .empty (shape )
1034
+
1035
+ with pytest .raises (ValueError ):
1036
+ dpnp .fmax (dp_array1 , dp_array2 , out = dp_out )
1037
+
1038
+ @pytest .mark .parametrize (
1039
+ "out" ,
1040
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1041
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1042
+ )
1043
+ def test_invalid_out (self , out ):
1044
+ a = dpnp .arange (10 )
1045
+
1046
+ assert_raises (TypeError , dpnp .fmax , a , 2 , out )
1047
+ assert_raises (TypeError , numpy .fmax , a .asnumpy (), 2 , out )
1048
+
1049
+
1050
+ class TestFmin :
1051
+ @pytest .mark .parametrize (
1052
+ "dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
1053
+ )
1054
+ def test_fmin (self , dtype ):
1055
+ array1_data = numpy .arange (10 )
1056
+ array2_data = numpy .arange (5 , 15 )
1057
+ out = numpy .empty (10 , dtype = dtype )
1058
+
1059
+ # DPNP
1060
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
1061
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
1062
+ dp_out = dpnp .array (out , dtype = dtype )
1063
+ result = dpnp .fmin (dp_array1 , dp_array2 , out = dp_out )
1064
+
1065
+ # original
1066
+ np_array1 = numpy .array (array1_data , dtype = dtype )
1067
+ np_array2 = numpy .array (array2_data , dtype = dtype )
1068
+ expected = numpy .fmin (np_array1 , np_array2 , out = out )
1069
+
1070
+ assert_allclose (expected , result )
1071
+ assert_allclose (out , dp_out )
1072
+
1073
+ @pytest .mark .parametrize (
1074
+ "dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
1075
+ )
1076
+ def test_out_dtypes (self , dtype ):
1077
+ size = 10
1078
+
1079
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1080
+ np_array2 = numpy .arange (size , dtype = dtype )
1081
+ np_out = numpy .empty (size , dtype = numpy .float32 )
1082
+ expected = numpy .fmin (np_array1 , np_array2 , out = np_out )
1083
+
1084
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1085
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1086
+ with pytest .raises (TypeError ):
1087
+ dpnp .fmin (dp_array1 , dp_array2 , out = np_out )
1088
+
1089
+ dp_out = dpnp .empty (size , dtype = dpnp .float32 )
1090
+ result = dpnp .fmin (dp_array1 , dp_array2 , out = dp_out )
1091
+ assert_array_equal (expected , result )
1092
+
1093
+ @pytest .mark .parametrize (
1094
+ "dtype" , get_all_dtypes (no_bool = True , no_complex = True , no_none = True )
1095
+ )
1096
+ def test_out_overlap (self , dtype ):
1097
+ size = 15
1098
+ # DPNP
1099
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1100
+ dpnp .fmin (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1101
+
1102
+ # original
1103
+ np_a = numpy .arange (2 * size , dtype = dtype )
1104
+ numpy .fmin (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1105
+
1106
+ assert_allclose (np_a , dp_a )
1107
+
1108
+ @pytest .mark .parametrize (
1109
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1110
+ )
1111
+ def test_invalid_shape (self , shape ):
1112
+ dp_array1 = dpnp .arange (10 )
1113
+ dp_array2 = dpnp .arange (5 , 15 )
1114
+ dp_out = dpnp .empty (shape )
1115
+
1116
+ with pytest .raises (ValueError ):
1117
+ dpnp .fmin (dp_array1 , dp_array2 , out = dp_out )
1118
+
1119
+ @pytest .mark .parametrize (
1120
+ "out" ,
1121
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1122
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1123
+ )
1124
+ def test_invalid_out (self , out ):
1125
+ a = dpnp .arange (10 )
1126
+
1127
+ assert_raises (TypeError , dpnp .fmin , a , 2 , out )
1128
+ assert_raises (TypeError , numpy .fmin , a .asnumpy (), 2 , out )
1129
+
1130
+
1131
+ class TestMaximum :
1132
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1133
+ def test_maximum (self , dtype ):
1134
+ array1_data = numpy .arange (10 )
1135
+ array2_data = numpy .arange (5 , 15 )
1136
+ out = numpy .empty (10 , dtype = dtype )
1137
+
1138
+ # DPNP
1139
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
1140
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
1141
+ dp_out = dpnp .array (out , dtype = dtype )
1142
+ result = dpnp .maximum (dp_array1 , dp_array2 , out = dp_out )
1143
+
1144
+ # original
1145
+ np_array1 = numpy .array (array1_data , dtype = dtype )
1146
+ np_array2 = numpy .array (array2_data , dtype = dtype )
1147
+ expected = numpy .maximum (np_array1 , np_array2 , out = out )
1148
+
1149
+ assert_allclose (expected , result )
1150
+ assert_allclose (out , dp_out )
1151
+
1152
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1153
+ def test_out_dtypes (self , dtype ):
1154
+ size = 2 if dtype == dpnp .bool else 10
1155
+
1156
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1157
+ np_array2 = numpy .arange (size , dtype = dtype )
1158
+ np_out = numpy .empty (size , dtype = numpy .complex64 )
1159
+ expected = numpy .maximum (np_array1 , np_array2 , out = np_out )
1160
+
1161
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1162
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1163
+
1164
+ dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
1165
+ if dtype != dpnp .complex64 :
1166
+ # dtype of out mismatches types of input arrays
1167
+ with pytest .raises (TypeError ):
1168
+ dpnp .maximum (dp_array1 , dp_array2 , out = dp_out )
1169
+
1170
+ # allocate new out with expected type
1171
+ dp_out = dpnp .empty (size , dtype = dtype )
1172
+
1173
+ result = dpnp .maximum (dp_array1 , dp_array2 , out = dp_out )
1174
+ assert_array_equal (expected , result )
1175
+
1176
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1177
+ def test_out_overlap (self , dtype ):
1178
+ size = 1 if dtype == dpnp .bool else 15
1179
+ # DPNP
1180
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1181
+ dpnp .maximum (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1182
+
1183
+ # original
1184
+ np_a = numpy .arange (2 * size , dtype = dtype )
1185
+ numpy .maximum (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1186
+
1187
+ assert_allclose (np_a , dp_a )
1188
+
1189
+ @pytest .mark .parametrize (
1190
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1191
+ )
1192
+ def test_invalid_shape (self , shape ):
1193
+ dp_array1 = dpnp .arange (10 )
1194
+ dp_array2 = dpnp .arange (5 , 15 )
1195
+ dp_out = dpnp .empty (shape )
1196
+
1197
+ with pytest .raises (ValueError ):
1198
+ dpnp .maximum (dp_array1 , dp_array2 , out = dp_out )
1199
+
1200
+ @pytest .mark .parametrize (
1201
+ "out" ,
1202
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1203
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1204
+ )
1205
+ def test_invalid_out (self , out ):
1206
+ a = dpnp .arange (10 )
1207
+
1208
+ assert_raises (TypeError , dpnp .maximum , a , 2 , out )
1209
+ assert_raises (TypeError , numpy .maximum , a .asnumpy (), 2 , out )
1210
+
1211
+
1212
+ class TestMinimum :
1213
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1214
+ def test_minimum (self , dtype ):
1215
+ array1_data = numpy .arange (10 )
1216
+ array2_data = numpy .arange (5 , 15 )
1217
+ out = numpy .empty (10 , dtype = dtype )
1218
+
1219
+ # DPNP
1220
+ dp_array1 = dpnp .array (array1_data , dtype = dtype )
1221
+ dp_array2 = dpnp .array (array2_data , dtype = dtype )
1222
+ dp_out = dpnp .array (out , dtype = dtype )
1223
+ result = dpnp .minimum (dp_array1 , dp_array2 , out = dp_out )
1224
+
1225
+ # original
1226
+ np_array1 = numpy .array (array1_data , dtype = dtype )
1227
+ np_array2 = numpy .array (array2_data , dtype = dtype )
1228
+ expected = numpy .minimum (np_array1 , np_array2 , out = out )
1229
+
1230
+ assert_allclose (expected , result )
1231
+ assert_allclose (out , dp_out )
1232
+
1233
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1234
+ def test_out_dtypes (self , dtype ):
1235
+ size = 2 if dtype == dpnp .bool else 10
1236
+
1237
+ np_array1 = numpy .arange (size , 2 * size , dtype = dtype )
1238
+ np_array2 = numpy .arange (size , dtype = dtype )
1239
+ np_out = numpy .empty (size , dtype = numpy .complex64 )
1240
+ expected = numpy .minimum (np_array1 , np_array2 , out = np_out )
1241
+
1242
+ dp_array1 = dpnp .arange (size , 2 * size , dtype = dtype )
1243
+ dp_array2 = dpnp .arange (size , dtype = dtype )
1244
+
1245
+ dp_out = dpnp .empty (size , dtype = dpnp .complex64 )
1246
+ if dtype != dpnp .complex64 :
1247
+ # dtype of out mismatches types of input arrays
1248
+ with pytest .raises (TypeError ):
1249
+ dpnp .minimum (dp_array1 , dp_array2 , out = dp_out )
1250
+
1251
+ # allocate new out with expected type
1252
+ dp_out = dpnp .empty (size , dtype = dtype )
1253
+
1254
+ result = dpnp .minimum (dp_array1 , dp_array2 , out = dp_out )
1255
+ assert_array_equal (expected , result )
1256
+
1257
+ @pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
1258
+ def test_out_overlap (self , dtype ):
1259
+ size = 1 if dtype == dpnp .bool else 15
1260
+ # DPNP
1261
+ dp_a = dpnp .arange (2 * size , dtype = dtype )
1262
+ dpnp .minimum (dp_a [size ::], dp_a [::2 ], out = dp_a [:size :])
1263
+
1264
+ # original
1265
+ np_a = numpy .arange (2 * size , dtype = dtype )
1266
+ numpy .minimum (np_a [size ::], np_a [::2 ], out = np_a [:size :])
1267
+
1268
+ assert_allclose (np_a , dp_a )
1269
+
1270
+ @pytest .mark .parametrize (
1271
+ "shape" , [(0 ,), (15 ,), (2 , 2 )], ids = ["(0,)" , "(15, )" , "(2,2)" ]
1272
+ )
1273
+ def test_invalid_shape (self , shape ):
1274
+ dp_array1 = dpnp .arange (10 )
1275
+ dp_array2 = dpnp .arange (5 , 15 )
1276
+ dp_out = dpnp .empty (shape )
1277
+
1278
+ with pytest .raises (ValueError ):
1279
+ dpnp .minimum (dp_array1 , dp_array2 , out = dp_out )
1280
+
1281
+ @pytest .mark .parametrize (
1282
+ "out" ,
1283
+ [4 , (), [], (3 , 7 ), [2 , 4 ]],
1284
+ ids = ["4" , "()" , "[]" , "(3, 7)" , "[2, 4]" ],
1285
+ )
1286
+ def test_invalid_out (self , out ):
1287
+ a = dpnp .arange (10 )
1288
+
1289
+ assert_raises (TypeError , dpnp .minimum , a , 2 , out )
1290
+ assert_raises (TypeError , numpy .minimum , a .asnumpy (), 2 , out )
1291
+
1292
+
969
1293
class TestMultiply :
970
1294
@pytest .mark .parametrize ("dtype" , get_all_dtypes (no_none = True ))
971
1295
def test_multiply (self , dtype ):
0 commit comments