@@ -3154,6 +3154,58 @@ def test_convert_dtypes_dtype_backend() -> None:
3154
3154
check (assert_type (dfn , pd .DataFrame ), pd .DataFrame )
3155
3155
3156
3156
3157
+ def test_select_dtypes () -> None :
3158
+ df = pd .DataFrame ({"a" : [1 , 2 ] * 3 , "b" : [True , False ] * 3 , "c" : [1.0 , 2.0 ] * 3 })
3159
+ check (assert_type (df .select_dtypes ("number" ), pd .DataFrame ), pd .DataFrame )
3160
+ check (assert_type (df .select_dtypes (np .number ), pd .DataFrame ), pd .DataFrame )
3161
+ check (assert_type (df .select_dtypes (object ), pd .DataFrame ), pd .DataFrame )
3162
+ check (assert_type (df .select_dtypes (include = "bool" ), pd .DataFrame ), pd .DataFrame )
3163
+ check (
3164
+ assert_type (df .select_dtypes (include = ["float64" ], exclude = None ), pd .DataFrame ),
3165
+ pd .DataFrame ,
3166
+ )
3167
+ check (
3168
+ assert_type (df .select_dtypes (exclude = ["int64" ], include = None ), pd .DataFrame ),
3169
+ pd .DataFrame ,
3170
+ )
3171
+ check (
3172
+ assert_type (df .select_dtypes (exclude = ["int64" , object ]), pd .DataFrame ),
3173
+ pd .DataFrame ,
3174
+ )
3175
+ check (
3176
+ assert_type (
3177
+ df .select_dtypes (
3178
+ exclude = [
3179
+ np .datetime64 ,
3180
+ "datetime64" ,
3181
+ "datetime" ,
3182
+ np .timedelta64 ,
3183
+ "timedelta" ,
3184
+ "timedelta64" ,
3185
+ "category" ,
3186
+ "datetimetz" ,
3187
+ "datetime64[ns]" ,
3188
+ ]
3189
+ ),
3190
+ pd .DataFrame ,
3191
+ ),
3192
+ pd .DataFrame ,
3193
+ )
3194
+ if TYPE_CHECKING_INVALID_USAGE :
3195
+ # not able to check with typing that inputs lists are empty
3196
+ # check(
3197
+ # assert_type(df.select_dtypes([], []), pd.DataFrame), pd.DataFrame
3198
+ # ) # ValueError
3199
+
3200
+ # ValueError :
3201
+ check (assert_type (df .select_dtypes (), pd .DataFrame ), pd .DataFrame ) # type: ignore[assert-type, call-overload] # pyright: ignore[reportAssertTypeFailure, reportCallIssue]
3202
+
3203
+ # any kind of string dtype is not allowed but strings dtypes are included in AstypeArg...
3204
+ # check(
3205
+ # assert_type(df.select_dtypes(str), pd.DataFrame), pd.DataFrame
3206
+ # ) # TypeError
3207
+
3208
+
3157
3209
def test_to_json_mode () -> None :
3158
3210
df = pd .DataFrame (
3159
3211
[["a" , "b" ], ["c" , "d" ]],
0 commit comments