Skip to content

Commit b7d51ef

Browse files
Updating stubs for pandas version 1.2.x (#33)
1 parent 8e9612a commit b7d51ef

File tree

7 files changed

+58
-10
lines changed

7 files changed

+58
-10
lines changed

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 1.1.0.14
2+
current_version = 1.2.0.0
33
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\.(?P<release>\d+)
44
serialize =
55
{major}.{minor}.{patch}.{release}

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from setuptools import setup
1010
import os
1111

12-
version = "1.1.0.14"
12+
version = "1.2.0.0"
1313

1414

1515
# find_packages might not work with stub files

tests/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
jinja2==2.11.3
22
matplotlib==3.3.4
3-
pandas==1.1.0
3+
pandas==1.2.0
44
pyarrow==3.0.0
55
pytest==6.2.2
66
tabulate==0.8.9

tests/snippets/test_frame.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# flake8: noqa: F841
2+
import io
23
import tempfile
34
from pathlib import Path
45

@@ -30,6 +31,9 @@ def test_types_to_csv() -> None:
3031
df.to_csv(file.name, errors='replace')
3132
df4: pd.DataFrame = pd.read_csv(file.name)
3233

34+
# Testing support for binary file handles, added in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
35+
df.to_csv(io.BytesIO(), encoding="utf-8", compression="gzip")
36+
3337

3438
def test_types_to_csv_when_path_passed() -> None:
3539
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
@@ -325,6 +329,9 @@ def test_types_applymap() -> None:
325329
df.applymap(lambda x: x ** 2)
326330
df.applymap(np.exp)
327331
df.applymap(str)
332+
# na_action parameter was added in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
333+
df.applymap(np.exp, na_action='ignore')
334+
df.applymap(str, na_action=None)
328335

329336

330337
def test_types_element_wise_arithmetic() -> None:
@@ -349,6 +356,12 @@ def test_types_element_wise_arithmetic() -> None:
349356
df % df2
350357
df.mod(df2, fill_value=0)
351358

359+
# divmod operation was added in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
360+
# noinspection PyTypeChecker
361+
divmod(df, df2)
362+
df.__divmod__(df2)
363+
df.__rdivmod__(df2)
364+
352365

353366
def test_types_melt() -> None:
354367
df = pd.DataFrame(data={'col1': [1, 2], 'col2': [3, 4]})
@@ -518,3 +531,28 @@ def foo(df: pd.DataFrame) -> pd.DataFrame:
518531
df3: pd.DataFrame = pd.DataFrame({'a': [1], 'b': [1]}).groupby('a').pipe(foo)
519532

520533
df4: pd.DataFrame = pd.DataFrame({'a': [1], 'b': [1]}).style.pipe(foo)
534+
535+
536+
# set_flags() method added in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
537+
def test_types_set_flags() -> None:
538+
pd.DataFrame([[1, 2], [8, 9]], columns=['A', 'B']).set_flags(allows_duplicate_labels=False)
539+
pd.DataFrame([[1, 2], [8, 9]], columns=['A', 'A']).set_flags(allows_duplicate_labels=True)
540+
pd.DataFrame([[1, 2], [8, 9]], columns=['A', 'A'])
541+
542+
543+
def test_types_to_parquet() -> None:
544+
df = pd.DataFrame([[1, 2], [8, 9]], columns=['A', 'B']).set_flags(allows_duplicate_labels=False)
545+
with tempfile.NamedTemporaryFile() as file:
546+
df.to_parquet(Path(file.name))
547+
# to_parquet() returns bytes when no path given since 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
548+
b: bytes = df.to_parquet()
549+
550+
551+
def test_types_to_latex() -> None:
552+
df = pd.DataFrame([[1, 2], [8, 9]], columns=['A', 'B'])
553+
df.to_latex(columns=['A'], label='some_label', caption='some_caption', multirow=True)
554+
df.to_latex(escape=False, decimal=',', column_format='r')
555+
# position param was added in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
556+
df.to_latex(position='some')
557+
# caption param was extended to accept tuple in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
558+
df.to_latex(caption=("cap1", "cap2"))

tests/snippets/test_series.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,13 @@ def test_types_resample() -> None:
399399
s.resample('20min', origin='epoch', offset=pd.Timedelta(value=2, unit='minutes'))
400400

401401

402+
# set_flags() method added in 1.2.0 https://pandas.pydata.org/docs/whatsnew/v1.2.0.html
403+
def test_types_set_flags() -> None:
404+
pd.Series([1, 2], index=['a', 'b']).set_flags(allows_duplicate_labels=False)
405+
pd.Series([3, 4], index=['a', 'a']).set_flags(allows_duplicate_labels=True)
406+
pd.Series([5, 2], index=['a', 'a'])
407+
408+
402409
def test_types_getitem() -> None:
403410
s = pd.Series({'key': [0, 1, 2, 3]})
404411
key: List[int] = s['key']

third_party/3/pandas/core/frame.pyi

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ class DataFrame(NDFrame):
6363
def __truediv__(self, other: Union[Scalar, DataFrame]) -> DataFrame: ...
6464
def __floordiv__(self, other: Union[Scalar, DataFrame]) -> DataFrame: ...
6565
def __mod__(self, other: Union[Scalar, DataFrame]) -> DataFrame: ...
66+
def __divmod__(self, other: Union[Scalar, DataFrame]) -> Tuple[DataFrame, DataFrame]: ...
67+
def __rdivmod__(self, other: Union[Scalar, DataFrame]) -> Tuple[DataFrame, DataFrame]: ...
6668
def __and__(self, other: DataFrame) -> DataFrame: ...
6769
def __or__(self, other: DataFrame) -> DataFrame: ...
6870
def __add__(self, other: Union[Scalar, DataFrame]) -> DataFrame: ...
@@ -102,7 +104,7 @@ class DataFrame(NDFrame):
102104
def to_stata(self, path: FilePathOrBuffer[AnyStr], convert_dates: Optional[Dict[Label, str]] = ..., write_index: bool = ..., byteorder: Optional[str] = ..., time_stamp: Optional[datetime.datetime] = ..., data_label: Optional[str] = ..., variable_labels: Optional[Dict[Label, str]] = ..., version: int = ..., convert_strl: Optional[Sequence[Label]] = ...) -> None: ...
103105
def to_feather(self, path: str, **kwargs: Any) -> None: ...
104106
def to_markdown(self, buf: Optional[IO[str]] = ..., mode: Optional[str] = ..., index: bool = ..., **kwargs: Any) -> Optional[str]: ...
105-
def to_parquet(self, path: str, engine: ParquetEngine = ..., compression: Optional[CompressionType] = ..., index: Optional[bool] = ..., partition_cols: Optional[List[Column]] = ..., **kwargs: Any) -> None: ...
107+
def to_parquet(self, path: Optional[FilePathOrBuffer[AnyStr]] = ..., engine: ParquetEngine = ..., compression: Optional[CompressionType] = ..., index: Optional[bool] = ..., partition_cols: Optional[List[Column]] = ..., **kwargs: Any) -> Optional[bytes]: ...
106108
def to_html(self, buf: Optional[Any] = ..., columns: Optional[Sequence[str]] = ..., col_space: ColumnSpace = ..., header: Union[bool, Sequence[str]] = ..., index: bool = ..., na_rep: str = ..., formatters: Optional[formatters_type] = ..., float_format: Optional[FloatFormatType] = ..., sparsify: Optional[bool] = ..., index_names: bool = ..., justify: Optional[VALID_JUSTIFY_PARAMETERS] = ..., max_rows: Optional[int] = ..., max_cols: Optional[int] = ..., show_dimensions: Union[bool, str] = ..., decimal: str = ..., bold_rows: bool = ..., classes: Optional[Sequence[str]] = ..., escape: bool = ..., notebook: bool = ..., border: Optional[int] = ..., table_id: Optional[str] = ..., render_links: bool = ..., encoding: Optional[str] = ...) -> str: ...
107109
def info(self, verbose: Optional[bool] = ..., buf: Optional[IO[str]] = ..., max_cols: Optional[int] = ..., memory_usage: Optional[Union[bool, str]] = ..., null_counts: Optional[bool] = ...) -> None: ...
108110
def memory_usage(self, index: Optional[bool] = ..., deep: Optional[bool] = ...) -> Series: ...
@@ -188,7 +190,7 @@ class DataFrame(NDFrame):
188190
def agg(self, func: AggregationFunction = ..., axis: AxisOption = ..., *args: Any, **kwargs: Any) -> Union[Scalar, FrameOrSeries]: ...
189191
def transform(self, func: TransformFunction, axis: AxisOption = ..., *args: Any, **kwargs: Any) -> DataFrame: ...
190192
def apply(self, func: Function, axis: AxisOption = ..., raw: bool = ..., result_type: Optional[ApplyResultType] = ..., args: Any = ..., **kwds: Any) -> FrameOrSeries: ...
191-
def applymap(self, func: Callable[[Any], Any]) -> DataFrame: ...
193+
def applymap(self, func: Callable[[Any], Any], na_action: Optional[str] = ...) -> DataFrame: ...
192194
def append(self, other: Union[FrameOrSeries, Dict[Column, Any], List[Union[FrameOrSeries, Dict[Column, Any]]]], ignore_index: bool = ..., verify_integrity: bool = ..., sort: bool = ...) -> DataFrame: ...
193195
def join(self, other: Union[FrameOrSeries, List[DataFrame]], on: Optional[Union[str, List[str], ArrayLike]] = ..., how: JoinType = ..., lsuffix: str = ..., rsuffix: str = ..., sort: bool = ...) -> DataFrame: ...
194196
def merge(self, right: FrameOrSeries, how: MergeType = ..., on: Optional[Union[Label, List[Label]]] = ..., left_on: Optional[Union[Label, List[Label], ArrayLike]] = ..., right_on: Optional[Union[Label, List[Label], ArrayLike]] = ..., left_index: bool = ..., right_index: bool = ..., sort: bool = ..., suffixes: Tuple[str, str] = ..., copy: bool = ..., indicator: Union[bool, str] = ..., validate: Optional[MergeValidationMethod] = ...) -> DataFrame: ...

third_party/3/pandas/core/generic.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,15 @@ class NDFrame(PandasObject, SelectionMixin, indexing.IndexingMixin):
8080
def equals(self, other: Any) -> Any: ...
8181
@property
8282
def empty(self) -> bool_t: ...
83-
def to_excel(self, excel_writer: Any, sheet_name: Any = ..., na_rep: Any = ..., float_format: Any = ..., columns: Any = ..., header: Any = ..., index: Any = ..., index_label: Any = ..., startrow: Any = ..., startcol: Any = ..., engine: Any = ..., merge_cells: Any = ..., encoding: Any = ..., inf_rep: Any = ..., verbose: Any = ..., freeze_panes: Any = ...) -> None: ...
84-
def to_json(self, path_or_buf: Optional[FilePathOrBuffer[AnyStr]]=..., orient: Optional[str]=..., date_format: Optional[str]=..., double_precision: int=..., force_ascii: bool_t=..., date_unit: str=..., default_handler: Optional[Callable[[Any], JSONSerializable]]=..., lines: bool_t=..., compression: Optional[str]=..., index: bool_t=..., indent: Optional[int]=...) -> Optional[str]: ...
83+
def to_excel(self, excel_writer: Any, sheet_name: Any = ..., na_rep: Any = ..., float_format: Any = ..., columns: Any = ..., header: Any = ..., index: Any = ..., index_label: Any = ..., startrow: Any = ..., startcol: Any = ..., engine: Any = ..., merge_cells: Any = ..., encoding: Any = ..., inf_rep: Any = ..., verbose: Any = ..., freeze_panes: Any = ..., storage_options: Optional[Dict[str, Any]] = None) -> None: ...
84+
def to_json(self, path_or_buf: Optional[FilePathOrBuffer[AnyStr]]=..., orient: Optional[str]=..., date_format: Optional[str]=..., double_precision: int=..., force_ascii: bool_t=..., date_unit: str=..., default_handler: Optional[Callable[[Any], JSONSerializable]]=..., lines: bool_t=..., compression: Optional[str]=..., index: bool_t=..., indent: Optional[int]=..., storage_options: Optional[Dict[str, Any]] = None) -> Optional[str]: ...
8585
def to_hdf(self, path_or_buf: Any, key: str, mode: str=..., complevel: Optional[int]=..., complib: Optional[str]=..., append: bool_t=..., format: Optional[str]=..., index: bool_t=..., min_itemsize: Optional[Union[int, Dict[str, int]]]=..., nan_rep: Any = ..., dropna: Optional[bool_t]=..., data_columns: Optional[List[str]]=..., errors: str=..., encoding: str=...) -> None: ...
8686
def to_sql(self, name: str, con: Any, schema: Any = ..., if_exists: str=..., index: bool_t=..., index_label: Any = ..., chunksize: Any = ..., dtype: Any = ..., method: Any = ...) -> None: ...
87-
def to_pickle(self, path: Any, compression: Optional[str]=..., protocol: int=...) -> None: ...
87+
def to_pickle(self, path: Any, compression: Optional[str]=..., protocol: int=..., storage_options: Optional[Dict[str, Any]] = None) -> None: ...
8888
def to_clipboard(self, excel: bool_t=..., sep: Optional[str]=..., **kwargs: Any) -> None: ...
8989
def to_xarray(self) -> Any: ...
90-
def to_latex(self, buf: Optional[Any] = ..., columns: Optional[Any] = ..., col_space: Optional[Any] = ..., header: bool_t = ..., index: bool_t = ..., na_rep: str = ..., formatters: Optional[Any] = ..., float_format: Optional[Any] = ..., sparsify: Optional[Any] = ..., index_names: bool_t = ..., bold_rows: bool_t = ..., column_format: Optional[Any] = ..., longtable: Optional[Any] = ..., escape: Optional[Any] = ..., encoding: Optional[Any] = ..., decimal: str = ..., multicolumn: Optional[Any] = ..., multicolumn_format: Optional[Any] = ..., multirow: Optional[Any] = ..., caption: Optional[Any] = ..., label: Optional[Any] = ...) -> Any: ...
91-
def to_csv(self, path_or_buf: Optional[FilePathOrBuffer[AnyStr]]=..., sep: str=..., na_rep: str=..., float_format: Optional[str]=..., columns: Optional[Sequence[Optional[Hashable]]]=..., header: Union[bool_t, List[str]]=..., index: bool_t=..., index_label: Optional[Union[bool_t, str, Sequence[Optional[Hashable]]]]=..., mode: str=..., encoding: Optional[str]=..., compression: Optional[Union[str, Mapping[str, str]]]=..., quoting: Optional[int]=..., quotechar: str=..., line_terminator: Optional[str]=..., chunksize: Optional[int]=..., date_format: Optional[str]=..., doublequote: bool_t=..., escapechar: Optional[str]=..., decimal: Optional[str]=..., errors: str=...) -> Optional[str]: ...
90+
def to_latex(self, buf: Optional[Any] = ..., columns: Optional[Any] = ..., col_space: Optional[Any] = ..., header: bool_t = ..., index: bool_t = ..., na_rep: str = ..., formatters: Optional[Any] = ..., float_format: Optional[Any] = ..., sparsify: Optional[Any] = ..., index_names: bool_t = ..., bold_rows: bool_t = ..., column_format: Optional[Any] = ..., longtable: Optional[Any] = ..., escape: Optional[Any] = ..., encoding: Optional[Any] = ..., decimal: str = ..., multicolumn: Optional[Any] = ..., multicolumn_format: Optional[Any] = ..., multirow: Optional[Any] = ..., caption: Union[str, Tuple[str, str]] = ..., label: Optional[Any] = ..., position: Optional[str] = ...) -> Any: ...
91+
def to_csv(self, path_or_buf: Optional[FilePathOrBuffer[AnyStr]]=..., sep: str=..., na_rep: str=..., float_format: Optional[str]=..., columns: Optional[Sequence[Optional[Hashable]]]=..., header: Union[bool_t, List[str]]=..., index: bool_t=..., index_label: Optional[Union[bool_t, str, Sequence[Optional[Hashable]]]]=..., mode: str=..., encoding: Optional[str]=..., compression: Optional[Union[str, Mapping[str, str]]]=..., quoting: Optional[int]=..., quotechar: str=..., line_terminator: Optional[str]=..., chunksize: Optional[int]=..., date_format: Optional[str]=..., doublequote: bool_t=..., escapechar: Optional[str]=..., decimal: Optional[str]=..., errors: str=..., storage_options: Optional[Dict[str, Any]] = None) -> Optional[str]: ...
9292
def take(self, indices: Any, axis: Any = ..., is_copy: Optional[bool_t]=..., **kwargs: Any) -> FrameOrSeries: ...
9393
def xs(self, key: Any, axis: Any = ..., level: Any = ..., drop_level: bool_t=...) -> Any: ...
9494
def get(self, key: Any, default: Optional[Any] = ...) -> Any: ...
@@ -164,3 +164,4 @@ class NDFrame(PandasObject, SelectionMixin, indexing.IndexingMixin):
164164
def transform(self, func: Any, *args: Any, **kwargs: Any) -> Any: ...
165165
def first_valid_index(self) -> Any: ...
166166
def last_valid_index(self) -> Any: ...
167+
def set_flags(self, *, copy: bool_t = ..., allows_duplicate_labels: Optional[bool_t] = ...) -> FrameOrSeries: ...

0 commit comments

Comments
 (0)