@@ -1191,6 +1191,124 @@ def _is_unorderable_exception(e: TypeError) -> bool:
1191
1191
return "'>' not supported between instances of" in str (e )
1192
1192
1193
1193
1194
+ # This exists to silence numpy deprecation warnings, see GH#29553
1195
+ def is_numeric_v_string_like (a , b ):
1196
+ """
1197
+ Check if we are comparing a string-like object to a numeric ndarray.
1198
+ NumPy doesn't like to compare such objects, especially numeric arrays
1199
+ and scalar string-likes.
1200
+
1201
+ Parameters
1202
+ ----------
1203
+ a : array-like, scalar
1204
+ The first object to check.
1205
+ b : array-like, scalar
1206
+ The second object to check.
1207
+
1208
+ Returns
1209
+ -------
1210
+ boolean
1211
+ Whether we return a comparing a string-like object to a numeric array.
1212
+
1213
+ Examples
1214
+ --------
1215
+ >>> is_numeric_v_string_like(1, 1)
1216
+ False
1217
+ >>> is_numeric_v_string_like("foo", "foo")
1218
+ False
1219
+ >>> is_numeric_v_string_like(1, "foo") # non-array numeric
1220
+ False
1221
+ >>> is_numeric_v_string_like(np.array([1]), "foo")
1222
+ True
1223
+ >>> is_numeric_v_string_like("foo", np.array([1])) # symmetric check
1224
+ True
1225
+ >>> is_numeric_v_string_like(np.array([1, 2]), np.array(["foo"]))
1226
+ True
1227
+ >>> is_numeric_v_string_like(np.array(["foo"]), np.array([1, 2]))
1228
+ True
1229
+ >>> is_numeric_v_string_like(np.array([1]), np.array([2]))
1230
+ False
1231
+ >>> is_numeric_v_string_like(np.array(["foo"]), np.array(["foo"]))
1232
+ False
1233
+ """
1234
+
1235
+ is_a_array = isinstance (a , np .ndarray )
1236
+ is_b_array = isinstance (b , np .ndarray )
1237
+
1238
+ is_a_numeric_array = is_a_array and is_numeric_dtype (a )
1239
+ is_b_numeric_array = is_b_array and is_numeric_dtype (b )
1240
+ is_a_string_array = is_a_array and is_string_like_dtype (a )
1241
+ is_b_string_array = is_b_array and is_string_like_dtype (b )
1242
+
1243
+ is_a_scalar_string_like = not is_a_array and isinstance (a , str )
1244
+ is_b_scalar_string_like = not is_b_array and isinstance (b , str )
1245
+
1246
+ return (
1247
+ (is_a_numeric_array and is_b_scalar_string_like )
1248
+ or (is_b_numeric_array and is_a_scalar_string_like )
1249
+ or (is_a_numeric_array and is_b_string_array )
1250
+ or (is_b_numeric_array and is_a_string_array )
1251
+ )
1252
+
1253
+
1254
+ # This exists to silence numpy deprecation warnings, see GH#29553
1255
+ def is_datetimelike_v_numeric (a , b ):
1256
+ """
1257
+ Check if we are comparing a datetime-like object to a numeric object.
1258
+ By "numeric," we mean an object that is either of an int or float dtype.
1259
+
1260
+ Parameters
1261
+ ----------
1262
+ a : array-like, scalar
1263
+ The first object to check.
1264
+ b : array-like, scalar
1265
+ The second object to check.
1266
+
1267
+ Returns
1268
+ -------
1269
+ boolean
1270
+ Whether we return a comparing a datetime-like to a numeric object.
1271
+
1272
+ Examples
1273
+ --------
1274
+ >>> dt = np.datetime64(pd.datetime(2017, 1, 1))
1275
+ >>>
1276
+ >>> is_datetimelike_v_numeric(1, 1)
1277
+ False
1278
+ >>> is_datetimelike_v_numeric(dt, dt)
1279
+ False
1280
+ >>> is_datetimelike_v_numeric(1, dt)
1281
+ True
1282
+ >>> is_datetimelike_v_numeric(dt, 1) # symmetric check
1283
+ True
1284
+ >>> is_datetimelike_v_numeric(np.array([dt]), 1)
1285
+ True
1286
+ >>> is_datetimelike_v_numeric(np.array([1]), dt)
1287
+ True
1288
+ >>> is_datetimelike_v_numeric(np.array([dt]), np.array([1]))
1289
+ True
1290
+ >>> is_datetimelike_v_numeric(np.array([1]), np.array([2]))
1291
+ False
1292
+ >>> is_datetimelike_v_numeric(np.array([dt]), np.array([dt]))
1293
+ False
1294
+ """
1295
+
1296
+ if not hasattr (a , "dtype" ):
1297
+ a = np .asarray (a )
1298
+ if not hasattr (b , "dtype" ):
1299
+ b = np .asarray (b )
1300
+
1301
+ def is_numeric (x ):
1302
+ """
1303
+ Check if an object has a numeric dtype (i.e. integer or float).
1304
+ """
1305
+ return is_integer_dtype (x ) or is_float_dtype (x )
1306
+
1307
+ return (needs_i8_conversion (a ) and is_numeric (b )) or (
1308
+ needs_i8_conversion (b ) and is_numeric (a )
1309
+ )
1310
+
1311
+
1194
1312
def needs_i8_conversion (arr_or_dtype ) -> bool :
1195
1313
"""
1196
1314
Check whether the array or dtype should be converted to int64.
0 commit comments