Skip to content

Commit eeb82af

Browse files
issue23: Fix __getitem__ and __setitem__ signatures (#24)
* Fixed issue with __getitem__ and __setitem__ signatures. * Test fix
1 parent 9751bff commit eeb82af

File tree

4 files changed

+59
-31
lines changed

4 files changed

+59
-31
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def list_packages(source_path: str = src_path) -> None:
2121
setup(
2222
name="pandas-stubs",
2323
package_dir={"": src_path},
24-
version="1.0.4.5",
24+
version="1.0.4.6",
2525
description="Type annotations for Pandas",
2626
long_description=(open("README.md").read()
2727
if os.path.exists("README.md") else ""),

tests/snippets/test_frame.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
# flake8: noqa: F841
2+
13
import tempfile
4+
from pathlib import Path
5+
26
import pandas as pd
37
import numpy as np
48

@@ -12,20 +16,46 @@ def test_types_init() -> None:
1216

1317
def test_types_csv() -> None:
1418
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
15-
with tempfile.TemporaryFile() as file:
16-
df.to_csv()
17-
df.to_csv(file.name)
18-
df.to_csv(file)
19-
pd.read_csv()
20-
pd.read_csv(file)
21-
pd.read_csv(file.name)
19+
csv_df: str = df.to_csv()
2220

23-
24-
def test_types_select() -> None:
25-
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
21+
with tempfile.NamedTemporaryFile() as file:
22+
df.to_csv(file.name)
23+
df2: pd.DataFrame = pd.read_csv(file.name)
24+
25+
with tempfile.NamedTemporaryFile() as file:
26+
df.to_csv(Path(file.name))
27+
df3: pd.DataFrame = pd.read_csv(Path(file.name))
28+
29+
def test_types_getitem() -> None:
30+
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4], 5: [6, 7]})
31+
i = pd.Index(['col1', 'col2'])
32+
s = pd.Series(['col1', 'col2'])
33+
select_df = pd.DataFrame({'col1': [True, True], 'col2': [False, True]})
34+
a = np.array(['col1', 'col2'])
2635
df['col1']
27-
df[0]
36+
df[5]
37+
df[['col1', 'col2']]
2838
df[1:]
39+
df[s]
40+
df[a]
41+
df[select_df]
42+
df[i]
43+
44+
45+
def test_types_setitem() -> None:
46+
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4], 5: [6, 7]})
47+
i = pd.Index(['col1', 'col2'])
48+
s = pd.Series(['col1', 'col2'])
49+
select_df = pd.DataFrame({'col1': [True, True], 'col2': [False, True]})
50+
a = np.array(['col1', 'col2'])
51+
df['col1'] = [1, 2]
52+
df[5] = [5, 6]
53+
df[['col1', 'col2']] = [[1, 2], [3, 4]]
54+
df[1:] = {'col1': {1: 'a'}, 'col2': {1: 'b'}, 5: {1: 'c'}}
55+
df[s] = [5, 6]
56+
df[a] = [[1, 2], [3, 4]]
57+
df[select_df] = [1, 2, 3]
58+
df[i] = [8, 9]
2959

3060

3161
def test_types_iloc_iat() -> None:

tests/snippets/test_series.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
# flake8: noqa: F841
2+
13
import tempfile
4+
from pathlib import Path
25

36
import pandas as pd
47
import numpy as np
@@ -16,18 +19,18 @@ def test_types_init() -> None:
1619

1720
def test_types_csv() -> None:
1821
s = pd.Series(data=[1, 2, 3])
19-
with tempfile.TemporaryFile() as file:
20-
s.to_csv()
22+
csv_df: str = s.to_csv()
23+
24+
with tempfile.NamedTemporaryFile() as file:
2125
s.to_csv(file.name)
22-
s.to_csv(file)
23-
pd.read_csv()
24-
pd.read_csv(file)
25-
pd.read_csv(file.name)
26+
s2: pd.Series = pd.read_csv(file.name)
2627

28+
with tempfile.NamedTemporaryFile() as file:
29+
s.to_csv(Path(file.name))
30+
s3: pd.Series = pd.read_csv(Path(file.name))
2731

2832
def test_types_select() -> None:
2933
s = pd.Series(data={'row1': 1, 'row2': 2})
30-
s['col1']
3134
s[0]
3235
s[1:]
3336

@@ -53,7 +56,7 @@ def test_types_loc_at() -> None:
5356
def test_types_boolean_indexing() -> None:
5457
s = pd.Series([0, 1, 2])
5558
s[s > 1]
56-
s[pd]
59+
s[s]
5760

5861

5962
def test_types_head_tail() -> None:
@@ -230,7 +233,7 @@ def test_types_var() -> None:
230233
def test_types_std() -> None:
231234
s = pd.Series([-10, 2, 3, 10])
232235
s.std()
233-
s.std(axis=1, ddof=1)
236+
s.std(axis=0, ddof=1)
234237
s.std(skipna=True, numeric_only=False)
235238

236239

third_party/3/pandas/core/frame.pyi

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,15 @@ class DataFrame(NDFrame):
7373
def __sub__(self, other: Union[Scalar, DataFrame]) -> DataFrame: ...
7474
def __matmul__(self, other: Union[FrameOrSeries, ArrayLike]) -> FrameOrSeries: ...
7575
def __rmatmul__(self, other: Union[FrameOrSeries, ArrayLike]) -> FrameOrSeries: ...
76+
# Type ignoring the first declaration because for some reason mypy thinks that np.ndarray overlaps Column
7677
@overload
77-
def __getitem__(self, key: Column) -> Series: ...
78+
def __getitem__(self, key: Column) -> Series: ... # type: ignore
7879
@overload
79-
def __getitem__(self, key: Sequence[Column]) -> Series: ...
80+
def __getitem__(self, key: Union[Series, Index, DataFrame, List[Column], slice, np.ndarray]) -> DataFrame: ...
8081
@overload
81-
def __getitem__(self, key: DataFrame) -> DataFrame: ...
82+
def __setitem__(self, key: Column, value: Any) -> DataFrame: ...
8283
@overload
83-
def __getitem__(self, key: slice) -> DataFrame: ...
84-
@overload
85-
def __setitem__(self, key: Column, value: Any) -> None: ...
86-
@overload
87-
def __setitem__(self, key: Sequence[Column], value: Any) -> None: ...
88-
@overload
89-
def __setitem__(self, key: slice, value: Any) -> None: ...
84+
def __setitem__(self, key: Union[Series, Index, DataFrame, List[Column], slice, np.ndarray], value: Any) -> DataFrame: ...
9085
@property
9186
def axes(self) -> List[Index]: ...
9287
@property

0 commit comments

Comments
 (0)