2
2
3
3
from typing import Any
4
4
5
+ import numpy as np
5
6
import pandas as pd
6
7
import polars as pl
7
8
import pytest
11
12
12
13
df_pandas = pd .DataFrame ({"a" : [1 , 3 , 2 ], "b" : [4 , 4 , 6 ], "z" : [7.0 , 8 , 9 ]})
13
14
df_polars = pl .DataFrame ({"a" : [1 , 3 , 2 ], "b" : [4 , 4 , 6 ], "z" : [7.0 , 8 , 9 ]})
15
+ df_lazy = pl .LazyFrame ({"a" : [1 , 3 , 2 ], "b" : [4 , 4 , 6 ], "z" : [7.0 , 8 , 9 ]})
14
16
15
17
16
18
@pytest .mark .parametrize (
17
19
"df_raw" ,
18
- [df_pandas , df_polars ],
20
+ [df_pandas , df_polars , df_lazy ],
19
21
)
20
22
def test_sort (df_raw : Any ) -> None :
21
23
df = nw .DataFrame (df_raw )
@@ -31,7 +33,7 @@ def test_sort(df_raw: Any) -> None:
31
33
32
34
@pytest .mark .parametrize (
33
35
"df_raw" ,
34
- [df_pandas , df_polars ],
36
+ [df_pandas , df_polars , df_lazy ],
35
37
)
36
38
def test_filter (df_raw : Any ) -> None :
37
39
df = nw .DataFrame (df_raw )
@@ -43,7 +45,7 @@ def test_filter(df_raw: Any) -> None:
43
45
44
46
@pytest .mark .parametrize (
45
47
"df_raw" ,
46
- [df_pandas , df_polars ],
48
+ [df_pandas , df_polars , df_lazy ],
47
49
)
48
50
def test_add (df_raw : Any ) -> None :
49
51
df = nw .DataFrame (df_raw )
@@ -64,7 +66,7 @@ def test_add(df_raw: Any) -> None:
64
66
65
67
@pytest .mark .parametrize (
66
68
"df_raw" ,
67
- [df_pandas , df_polars ],
69
+ [df_pandas , df_polars , df_lazy ],
68
70
)
69
71
def test_double (df_raw : Any ) -> None :
70
72
df = nw .DataFrame (df_raw )
@@ -74,7 +76,7 @@ def test_double(df_raw: Any) -> None:
74
76
compare_dicts (result_native , expected )
75
77
76
78
77
- @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars ])
79
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
78
80
def test_sumh (df_raw : Any ) -> None :
79
81
df = nw .DataFrame (df_raw )
80
82
result = df .with_columns (horizonal_sum = nw .sum_horizontal (nw .col ("a" ), nw .col ("b" )))
@@ -88,7 +90,7 @@ def test_sumh(df_raw: Any) -> None:
88
90
compare_dicts (result_native , expected )
89
91
90
92
91
- @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars ])
93
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
92
94
def test_sumh_literal (df_raw : Any ) -> None :
93
95
df = nw .DataFrame (df_raw )
94
96
result = df .with_columns (horizonal_sum = nw .sum_horizontal ("a" , nw .col ("b" )))
@@ -102,7 +104,7 @@ def test_sumh_literal(df_raw: Any) -> None:
102
104
compare_dicts (result_native , expected )
103
105
104
106
105
- @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars ])
107
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
106
108
def test_sum_all (df_raw : Any ) -> None :
107
109
df = nw .DataFrame (df_raw )
108
110
result = df .select (nw .all ().sum ())
@@ -111,10 +113,55 @@ def test_sum_all(df_raw: Any) -> None:
111
113
compare_dicts (result_native , expected )
112
114
113
115
114
- @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars ])
116
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
115
117
def test_double_selected (df_raw : Any ) -> None :
116
118
df = nw .DataFrame (df_raw )
117
119
result = df .select (nw .col ("a" , "b" ) * 2 )
118
120
result_native = nw .to_native (result )
119
121
expected = {"a" : [2 , 6 , 4 ], "b" : [8 , 8 , 12 ]}
120
122
compare_dicts (result_native , expected )
123
+
124
+
125
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
126
+ def test_rename (df_raw : Any ) -> None :
127
+ df = nw .DataFrame (df_raw )
128
+ result = df .rename ({"a" : "x" , "b" : "y" })
129
+ result_native = nw .to_native (result )
130
+ expected = {"x" : [1 , 3 , 2 ], "y" : [4 , 4 , 6 ], "z" : [7.0 , 8 , 9 ]}
131
+ compare_dicts (result_native , expected )
132
+
133
+
134
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
135
+ def test_join (df_raw : Any ) -> None :
136
+ df = nw .DataFrame (df_raw )
137
+ df_right = df .rename ({"z" : "z_right" })
138
+ result = df .join (df_right , left_on = ["a" , "b" ], right_on = ["a" , "b" ], how = "inner" )
139
+ result_native = nw .to_native (result )
140
+ expected = {"a" : [1 , 3 , 2 ], "b" : [4 , 4 , 6 ], "z" : [7.0 , 8 , 9 ], "z_right" : [7.0 , 8 , 9 ]}
141
+ compare_dicts (result_native , expected )
142
+
143
+
144
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
145
+ def test_schema (df_raw : Any ) -> None :
146
+ df = nw .DataFrame (df_raw )
147
+ result = df .schema
148
+ expected = {"a" : nw .dtypes .Int64 , "b" : nw .dtypes .Int64 , "z" : nw .dtypes .Float64 }
149
+ assert result == expected
150
+
151
+
152
+ @pytest .mark .parametrize ("df_raw" , [df_pandas , df_polars , df_lazy ])
153
+ def test_columns (df_raw : Any ) -> None :
154
+ df = nw .DataFrame (df_raw )
155
+ result = df .columns
156
+ expected = ["a" , "b" , "z" ]
157
+ assert len (result ) == len (expected )
158
+ assert all (x == y for x , y in zip (result , expected ))
159
+
160
+
161
+ def test_accepted_dataframes () -> None :
162
+ array = np .array ([[0 , 4.0 ], [2 , 5 ]])
163
+ with pytest .raises (
164
+ TypeError ,
165
+ match = "Expected pandas or Polars dataframe or lazyframe, got: <class 'numpy.ndarray'>" ,
166
+ ):
167
+ nw .DataFrame (array )
0 commit comments