-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
Copy pathconftest.py
48 lines (30 loc) · 1.34 KB
/
conftest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import pandas as pd
import polars as pl
import pyarrow as pa
import pytest
from narwhals.typing import IntoDataFrame
from narwhals.utils import parse_version
def pandas_constructor(obj) -> IntoDataFrame:
return pd.DataFrame(obj) # type: ignore[no-any-return]
def pandas_nullable_constructor(obj) -> IntoDataFrame:
return pd.DataFrame(obj).convert_dtypes(dtype_backend="numpy_nullable") # type: ignore[no-any-return]
def pandas_pyarrow_constructor(obj) -> IntoDataFrame:
return pd.DataFrame(obj).convert_dtypes(dtype_backend="pyarrow") # type: ignore[no-any-return]
def polars_eager_constructor(obj) -> IntoDataFrame:
return pl.DataFrame(obj)
def pyarrow_table_constructor(obj) -> IntoDataFrame:
return pa.table(obj) # type: ignore[no-any-return]
constructors = [polars_eager_constructor, pyarrow_table_constructor, pandas_constructor]
if parse_version(pd.__version__) >= parse_version("2.0.0"):
constructors.extend(
[
pandas_nullable_constructor,
pandas_pyarrow_constructor,
]
)
@pytest.fixture(params=constructors)
def constructor(request: pytest.FixtureRequest):
return request.param # type: ignore[no-any-return]
@pytest.fixture(params=["pandas", "pyarrow", "polars"])
def backend(request: pytest.FixtureRequest) -> str:
return request.param # type: ignore[no-any-return]