From ea19b7c8be62b7e1d1fc2e35efa6221eb0d9e2dc Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Tue, 9 Mar 2021 11:26:53 +0000 Subject: [PATCH 1/5] use pd_array in core --- .pre-commit-config.yaml | 7 ++ pandas/core/strings/accessor.py | 4 +- scripts/tests/test_use_pd_array_in_core.py | 26 ++++++++ scripts/use_pd_array_in_core.py | 78 ++++++++++++++++++++++ 4 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 scripts/tests/test_use_pd_array_in_core.py create mode 100644 scripts/use_pd_array_in_core.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 99ba2feadbca7..9829d741ee8ed 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -227,3 +227,10 @@ repos: |\#\ type:\s?ignore(?!\[) language: pygrep types: [python] + - id: use-pd_array-in-core + name: Import pandas.array as pd_array in core + language: python + entry: python scripts/use_pd_array_in_core.py + files: ^pandas/core/ + exclude: ^pandas/core/api\.py$ + types: [python] diff --git a/pandas/core/strings/accessor.py b/pandas/core/strings/accessor.py index 73a5ef9345fec..1c0538405dd71 100644 --- a/pandas/core/strings/accessor.py +++ b/pandas/core/strings/accessor.py @@ -3023,7 +3023,7 @@ def _str_extract_noexpand(arr, pat, flags=0): """ from pandas import ( DataFrame, - array, + array as pd_array, ) regex = re.compile(pat, flags=flags) @@ -3034,7 +3034,7 @@ def _str_extract_noexpand(arr, pat, flags=0): result = np.array([groups_or_na(val)[0] for val in arr], dtype=object) name = _get_single_group_name(regex) # not dispatching, so we have to reconstruct here. - result = array(result, dtype=result_dtype) + result = pd_array(result, dtype=result_dtype) else: if isinstance(arr, ABCIndex): raise ValueError("only one regex group is supported with Index") diff --git a/scripts/tests/test_use_pd_array_in_core.py b/scripts/tests/test_use_pd_array_in_core.py new file mode 100644 index 0000000000000..5c56634335798 --- /dev/null +++ b/scripts/tests/test_use_pd_array_in_core.py @@ -0,0 +1,26 @@ +import pytest + +from scripts.use_pd_array_in_core import use_pd_array + +BAD_FILE_0 = "import pandas as pd\npd.array" +BAD_FILE_1 = "\nfrom pandas import array" +GOOD_FILE_0 = "from pandas import array as pd_array" +GOOD_FILE_1 = "from pandas.core.construction import array as pd_array" +PATH = "t.py" + + +@pytest.mark.parametrize("content", [BAD_FILE_0, BAD_FILE_1]) +def test_inconsistent_usage(content, capsys): + result_msg = ( + r"t.py:2:0: Don't use pd.array in core, import array as pd_array instead\n" + ) + with pytest.raises(SystemExit): + use_pd_array(content, PATH) + expected_msg, _ = capsys.readouterr() + assert result_msg == expected_msg + + +@pytest.mark.parametrize("content", [GOOD_FILE_0, GOOD_FILE_1]) +def test_consistent_usage(content): + # should not raise + use_pd_array(content, PATH) diff --git a/scripts/use_pd_array_in_core.py b/scripts/use_pd_array_in_core.py new file mode 100644 index 0000000000000..8c03c602a3e55 --- /dev/null +++ b/scripts/use_pd_array_in_core.py @@ -0,0 +1,78 @@ +""" +Check that pandas/core imports pandas.array as pd_array. + +This makes it easier to grep for usage of pandas array. + +This is meant to be run as a pre-commit hook - to run it manually, you can do: + + pre-commit run use-pd_array-in-core --all-files + +""" + +import argparse +import ast +import sys +from typing import ( + Optional, + Sequence, +) + +ERROR_MESSAGE = ( + "{path}:{lineno}:{col_offset}: " + "Don't use pd.array in core, import array as pd_array instead\n" +) + + +class Visitor(ast.NodeVisitor): + def __init__(self, path: str) -> None: + self.path = path + + def visit_ImportFrom(self, node: ast.ImportFrom) -> None: + # If array has been imported from somewhere in pandas, + # check it's aliased as pd_array. + if ( + node.module is not None + and node.module.startswith("pandas") + and any(i.name == "array" and i.asname != "pd_array" for i in node.names) + ): + msg = ERROR_MESSAGE.format( + path=self.path, lineno=node.lineno, col_offset=node.col_offset + ) + sys.stdout.write(msg) + sys.exit(1) + super().generic_visit(node) + + def visit_Attribute(self, node: ast.Attribute) -> None: + if ( + isinstance(node.value, ast.Name) + and node.value.id == "pd" + and node.attr == "array" + ): + msg = ERROR_MESSAGE.format( + path=self.path, lineno=node.lineno, col_offset=node.col_offset + ) + sys.stdout.write(msg) + sys.exit(1) + super().generic_visit(node) + + +def use_pd_array(content: str, path: str) -> None: + tree = ast.parse(content) + visitor = Visitor(path) + visitor.visit(tree) + return + + +def main(argv: Optional[Sequence[str]] = None) -> None: + parser = argparse.ArgumentParser() + parser.add_argument("paths", nargs="*") + args = parser.parse_args(argv) + + for path in args.paths: + with open(path, encoding="utf-8") as fd: + content = fd.read() + use_pd_array(content, path) + + +if __name__ == "__main__": + main() From 5fa51d847231f789d5445710f33a6b0dfa0d13fe Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Tue, 9 Mar 2021 17:29:01 +0000 Subject: [PATCH 2/5] define pd_array in construction --- pandas/core/algorithms.py | 2 +- pandas/core/api.py | 2 +- pandas/core/apply.py | 2 +- pandas/core/arrays/categorical.py | 2 +- pandas/core/arrays/datetimelike.py | 2 +- pandas/core/arrays/interval.py | 2 +- pandas/core/construction.py | 4 ++-- pandas/core/dtypes/concat.py | 2 +- pandas/core/indexers.py | 2 +- pandas/core/indexing.py | 2 +- pandas/core/strings/accessor.py | 6 ++---- scripts/tests/test_use_pd_array_in_core.py | 15 +++++++-------- scripts/use_pd_array_in_core.py | 10 ++++++---- 13 files changed, 26 insertions(+), 27 deletions(-) diff --git a/pandas/core/algorithms.py b/pandas/core/algorithms.py index c3705fada724a..dd399184540e9 100644 --- a/pandas/core/algorithms.py +++ b/pandas/core/algorithms.py @@ -84,9 +84,9 @@ from pandas.core.array_algos.take import take_nd from pandas.core.construction import ( - array as pd_array, ensure_wrapped_if_datetimelike, extract_array, + pd_array, ) from pandas.core.indexers import validate_indices diff --git a/pandas/core/api.py b/pandas/core/api.py index 2677530455b07..07f431d3b2c77 100644 --- a/pandas/core/api.py +++ b/pandas/core/api.py @@ -43,7 +43,7 @@ UInt64Dtype, ) from pandas.core.arrays.string_ import StringDtype -from pandas.core.construction import array +from pandas.core.construction import pd_array as array from pandas.core.flags import Flags from pandas.core.groupby import ( Grouper, diff --git a/pandas/core/apply.py b/pandas/core/apply.py index 57147461284fb..384b5c389b962 100644 --- a/pandas/core/apply.py +++ b/pandas/core/apply.py @@ -52,8 +52,8 @@ ) import pandas.core.common as com from pandas.core.construction import ( - array as pd_array, create_series_with_explicit_dtype, + pd_array, ) if TYPE_CHECKING: diff --git a/pandas/core/arrays/categorical.py b/pandas/core/arrays/categorical.py index 0bf5e05786d4d..3ff3fda6ec768 100644 --- a/pandas/core/arrays/categorical.py +++ b/pandas/core/arrays/categorical.py @@ -97,8 +97,8 @@ ) import pandas.core.common as com from pandas.core.construction import ( - array as pd_array, extract_array, + pd_array, sanitize_array, ) from pandas.core.indexers import deprecate_ndim_indexing diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index bd5cc04659a06..36744bb5587d4 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -107,8 +107,8 @@ ) import pandas.core.common as com from pandas.core.construction import ( - array as pd_array, extract_array, + pd_array, ) from pandas.core.indexers import ( check_array_indexer, diff --git a/pandas/core/arrays/interval.py b/pandas/core/arrays/interval.py index 1a626f327b97c..9ee0151792762 100644 --- a/pandas/core/arrays/interval.py +++ b/pandas/core/arrays/interval.py @@ -76,9 +76,9 @@ from pandas.core.arrays.categorical import Categorical import pandas.core.common as com from pandas.core.construction import ( - array as pd_array, ensure_wrapped_if_datetimelike, extract_array, + pd_array, ) from pandas.core.indexers import check_array_indexer from pandas.core.indexes.base import ensure_index diff --git a/pandas/core/construction.py b/pandas/core/construction.py index 78a7f1890b5de..a2f04ebc0e586 100644 --- a/pandas/core/construction.py +++ b/pandas/core/construction.py @@ -74,7 +74,7 @@ ) -def array( +def pd_array( data: Union[Sequence[object], AnyArrayLike], dtype: Optional[Dtype] = None, copy: bool = True, @@ -560,7 +560,7 @@ def sanitize_array( if is_object_dtype(subarr.dtype) and not is_object_or_str_dtype: inferred = lib.infer_dtype(subarr, skipna=False) if inferred in {"interval", "period"}: - subarr = array(subarr) + subarr = pd_array(subarr) subarr = extract_array(subarr, extract_numpy=True) return subarr diff --git a/pandas/core/dtypes/concat.py b/pandas/core/dtypes/concat.py index 614a637f2d904..1d0e04cdc5a50 100644 --- a/pandas/core/dtypes/concat.py +++ b/pandas/core/dtypes/concat.py @@ -25,8 +25,8 @@ from pandas.core.arrays import ExtensionArray from pandas.core.arrays.sparse import SparseArray from pandas.core.construction import ( - array as pd_array, ensure_wrapped_if_datetimelike, + pd_array, ) diff --git a/pandas/core/indexers.py b/pandas/core/indexers.py index 86d6b772fe2e4..34b2301d081cf 100644 --- a/pandas/core/indexers.py +++ b/pandas/core/indexers.py @@ -514,7 +514,7 @@ def check_array_indexer(array: AnyArrayLike, indexer: Any) -> Any: ... IndexError: arrays used as indices must be of integer or boolean type """ - from pandas.core.construction import array as pd_array + from pandas.core.construction import pd_array # whatever is not an array-like is returned as-is (possible valid array # indexers that are not array-like: integer, slice, Ellipsis, None) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index ae0f853db628e..c80496aee631d 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -48,7 +48,7 @@ ) import pandas.core.common as com -from pandas.core.construction import array as pd_array +from pandas.core.construction import pd_array from pandas.core.indexers import ( check_array_indexer, is_exact_shape_match, diff --git a/pandas/core/strings/accessor.py b/pandas/core/strings/accessor.py index 1c0538405dd71..4021db7892db2 100644 --- a/pandas/core/strings/accessor.py +++ b/pandas/core/strings/accessor.py @@ -3021,10 +3021,8 @@ def _str_extract_noexpand(arr, pat, flags=0): Index. """ - from pandas import ( - DataFrame, - array as pd_array, - ) + from pandas import DataFrame + from pandas.core.construction import pd_array regex = re.compile(pat, flags=flags) groups_or_na = _groups_or_na_fun(regex) diff --git a/scripts/tests/test_use_pd_array_in_core.py b/scripts/tests/test_use_pd_array_in_core.py index 5c56634335798..2f2c7012ae324 100644 --- a/scripts/tests/test_use_pd_array_in_core.py +++ b/scripts/tests/test_use_pd_array_in_core.py @@ -2,17 +2,17 @@ from scripts.use_pd_array_in_core import use_pd_array -BAD_FILE_0 = "import pandas as pd\npd.array" -BAD_FILE_1 = "\nfrom pandas import array" -GOOD_FILE_0 = "from pandas import array as pd_array" -GOOD_FILE_1 = "from pandas.core.construction import array as pd_array" +BAD_FILE_0 = "\nfrom pandas import array as pd_array" +BAD_FILE_1 = "import pandas as pd\npd.array" +GOOD_FILE = "from pandas.core.construction import pd_array" PATH = "t.py" @pytest.mark.parametrize("content", [BAD_FILE_0, BAD_FILE_1]) def test_inconsistent_usage(content, capsys): result_msg = ( - r"t.py:2:0: Don't use pd.array in core, import array as pd_array instead\n" + "t.py:2:0: Don't use pd.array in core, " + "instead use 'from pandas.core.construction import pd_array'\n" ) with pytest.raises(SystemExit): use_pd_array(content, PATH) @@ -20,7 +20,6 @@ def test_inconsistent_usage(content, capsys): assert result_msg == expected_msg -@pytest.mark.parametrize("content", [GOOD_FILE_0, GOOD_FILE_1]) -def test_consistent_usage(content): +def test_consistent_usage(): # should not raise - use_pd_array(content, PATH) + use_pd_array(GOOD_FILE, PATH) diff --git a/scripts/use_pd_array_in_core.py b/scripts/use_pd_array_in_core.py index 8c03c602a3e55..4a2c4ab83fefc 100644 --- a/scripts/use_pd_array_in_core.py +++ b/scripts/use_pd_array_in_core.py @@ -1,7 +1,8 @@ """ -Check that pandas/core imports pandas.array as pd_array. +Check files use pd_array from pandas.core.construction rather than pd.array. -This makes it easier to grep for usage of pandas array. +This is only run within pandas/core and makes it easier to grep for usage of +pandas array. This is meant to be run as a pre-commit hook - to run it manually, you can do: @@ -19,7 +20,8 @@ ERROR_MESSAGE = ( "{path}:{lineno}:{col_offset}: " - "Don't use pd.array in core, import array as pd_array instead\n" + "Don't use pd.array in core, instead use " + "'from pandas.core.construction import pd_array'\n" ) @@ -33,7 +35,7 @@ def visit_ImportFrom(self, node: ast.ImportFrom) -> None: if ( node.module is not None and node.module.startswith("pandas") - and any(i.name == "array" and i.asname != "pd_array" for i in node.names) + and any(i.name == "array" for i in node.names) ): msg = ERROR_MESSAGE.format( path=self.path, lineno=node.lineno, col_offset=node.col_offset From bec9a10918268b062626306bbb9012bcd49a3115 Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Fri, 12 Mar 2021 10:36:02 +0000 Subject: [PATCH 3/5] import array as pd_array --- pandas/core/algorithms.py | 2 +- pandas/core/api.py | 2 +- pandas/core/apply.py | 2 +- pandas/core/arrays/categorical.py | 2 +- pandas/core/arrays/datetimelike.py | 2 +- pandas/core/arrays/interval.py | 2 +- pandas/core/construction.py | 4 ++-- pandas/core/dtypes/concat.py | 2 +- pandas/core/indexers.py | 2 +- pandas/core/indexing.py | 2 +- pandas/core/strings/accessor.py | 6 ++++-- scripts/tests/test_use_pd_array_in_core.py | 15 ++++++++------- scripts/use_pd_array_in_core.py | 10 ++++------ 13 files changed, 27 insertions(+), 26 deletions(-) diff --git a/pandas/core/algorithms.py b/pandas/core/algorithms.py index dd399184540e9..c3705fada724a 100644 --- a/pandas/core/algorithms.py +++ b/pandas/core/algorithms.py @@ -84,9 +84,9 @@ from pandas.core.array_algos.take import take_nd from pandas.core.construction import ( + array as pd_array, ensure_wrapped_if_datetimelike, extract_array, - pd_array, ) from pandas.core.indexers import validate_indices diff --git a/pandas/core/api.py b/pandas/core/api.py index 07f431d3b2c77..2677530455b07 100644 --- a/pandas/core/api.py +++ b/pandas/core/api.py @@ -43,7 +43,7 @@ UInt64Dtype, ) from pandas.core.arrays.string_ import StringDtype -from pandas.core.construction import pd_array as array +from pandas.core.construction import array from pandas.core.flags import Flags from pandas.core.groupby import ( Grouper, diff --git a/pandas/core/apply.py b/pandas/core/apply.py index 384b5c389b962..57147461284fb 100644 --- a/pandas/core/apply.py +++ b/pandas/core/apply.py @@ -52,8 +52,8 @@ ) import pandas.core.common as com from pandas.core.construction import ( + array as pd_array, create_series_with_explicit_dtype, - pd_array, ) if TYPE_CHECKING: diff --git a/pandas/core/arrays/categorical.py b/pandas/core/arrays/categorical.py index 3ff3fda6ec768..0bf5e05786d4d 100644 --- a/pandas/core/arrays/categorical.py +++ b/pandas/core/arrays/categorical.py @@ -97,8 +97,8 @@ ) import pandas.core.common as com from pandas.core.construction import ( + array as pd_array, extract_array, - pd_array, sanitize_array, ) from pandas.core.indexers import deprecate_ndim_indexing diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index 36744bb5587d4..bd5cc04659a06 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -107,8 +107,8 @@ ) import pandas.core.common as com from pandas.core.construction import ( + array as pd_array, extract_array, - pd_array, ) from pandas.core.indexers import ( check_array_indexer, diff --git a/pandas/core/arrays/interval.py b/pandas/core/arrays/interval.py index 9ee0151792762..1a626f327b97c 100644 --- a/pandas/core/arrays/interval.py +++ b/pandas/core/arrays/interval.py @@ -76,9 +76,9 @@ from pandas.core.arrays.categorical import Categorical import pandas.core.common as com from pandas.core.construction import ( + array as pd_array, ensure_wrapped_if_datetimelike, extract_array, - pd_array, ) from pandas.core.indexers import check_array_indexer from pandas.core.indexes.base import ensure_index diff --git a/pandas/core/construction.py b/pandas/core/construction.py index a2f04ebc0e586..78a7f1890b5de 100644 --- a/pandas/core/construction.py +++ b/pandas/core/construction.py @@ -74,7 +74,7 @@ ) -def pd_array( +def array( data: Union[Sequence[object], AnyArrayLike], dtype: Optional[Dtype] = None, copy: bool = True, @@ -560,7 +560,7 @@ def sanitize_array( if is_object_dtype(subarr.dtype) and not is_object_or_str_dtype: inferred = lib.infer_dtype(subarr, skipna=False) if inferred in {"interval", "period"}: - subarr = pd_array(subarr) + subarr = array(subarr) subarr = extract_array(subarr, extract_numpy=True) return subarr diff --git a/pandas/core/dtypes/concat.py b/pandas/core/dtypes/concat.py index 1d0e04cdc5a50..614a637f2d904 100644 --- a/pandas/core/dtypes/concat.py +++ b/pandas/core/dtypes/concat.py @@ -25,8 +25,8 @@ from pandas.core.arrays import ExtensionArray from pandas.core.arrays.sparse import SparseArray from pandas.core.construction import ( + array as pd_array, ensure_wrapped_if_datetimelike, - pd_array, ) diff --git a/pandas/core/indexers.py b/pandas/core/indexers.py index 34b2301d081cf..86d6b772fe2e4 100644 --- a/pandas/core/indexers.py +++ b/pandas/core/indexers.py @@ -514,7 +514,7 @@ def check_array_indexer(array: AnyArrayLike, indexer: Any) -> Any: ... IndexError: arrays used as indices must be of integer or boolean type """ - from pandas.core.construction import pd_array + from pandas.core.construction import array as pd_array # whatever is not an array-like is returned as-is (possible valid array # indexers that are not array-like: integer, slice, Ellipsis, None) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index c80496aee631d..ae0f853db628e 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -48,7 +48,7 @@ ) import pandas.core.common as com -from pandas.core.construction import pd_array +from pandas.core.construction import array as pd_array from pandas.core.indexers import ( check_array_indexer, is_exact_shape_match, diff --git a/pandas/core/strings/accessor.py b/pandas/core/strings/accessor.py index 4021db7892db2..1c0538405dd71 100644 --- a/pandas/core/strings/accessor.py +++ b/pandas/core/strings/accessor.py @@ -3021,8 +3021,10 @@ def _str_extract_noexpand(arr, pat, flags=0): Index. """ - from pandas import DataFrame - from pandas.core.construction import pd_array + from pandas import ( + DataFrame, + array as pd_array, + ) regex = re.compile(pat, flags=flags) groups_or_na = _groups_or_na_fun(regex) diff --git a/scripts/tests/test_use_pd_array_in_core.py b/scripts/tests/test_use_pd_array_in_core.py index 2f2c7012ae324..5c56634335798 100644 --- a/scripts/tests/test_use_pd_array_in_core.py +++ b/scripts/tests/test_use_pd_array_in_core.py @@ -2,17 +2,17 @@ from scripts.use_pd_array_in_core import use_pd_array -BAD_FILE_0 = "\nfrom pandas import array as pd_array" -BAD_FILE_1 = "import pandas as pd\npd.array" -GOOD_FILE = "from pandas.core.construction import pd_array" +BAD_FILE_0 = "import pandas as pd\npd.array" +BAD_FILE_1 = "\nfrom pandas import array" +GOOD_FILE_0 = "from pandas import array as pd_array" +GOOD_FILE_1 = "from pandas.core.construction import array as pd_array" PATH = "t.py" @pytest.mark.parametrize("content", [BAD_FILE_0, BAD_FILE_1]) def test_inconsistent_usage(content, capsys): result_msg = ( - "t.py:2:0: Don't use pd.array in core, " - "instead use 'from pandas.core.construction import pd_array'\n" + r"t.py:2:0: Don't use pd.array in core, import array as pd_array instead\n" ) with pytest.raises(SystemExit): use_pd_array(content, PATH) @@ -20,6 +20,7 @@ def test_inconsistent_usage(content, capsys): assert result_msg == expected_msg -def test_consistent_usage(): +@pytest.mark.parametrize("content", [GOOD_FILE_0, GOOD_FILE_1]) +def test_consistent_usage(content): # should not raise - use_pd_array(GOOD_FILE, PATH) + use_pd_array(content, PATH) diff --git a/scripts/use_pd_array_in_core.py b/scripts/use_pd_array_in_core.py index 4a2c4ab83fefc..8c03c602a3e55 100644 --- a/scripts/use_pd_array_in_core.py +++ b/scripts/use_pd_array_in_core.py @@ -1,8 +1,7 @@ """ -Check files use pd_array from pandas.core.construction rather than pd.array. +Check that pandas/core imports pandas.array as pd_array. -This is only run within pandas/core and makes it easier to grep for usage of -pandas array. +This makes it easier to grep for usage of pandas array. This is meant to be run as a pre-commit hook - to run it manually, you can do: @@ -20,8 +19,7 @@ ERROR_MESSAGE = ( "{path}:{lineno}:{col_offset}: " - "Don't use pd.array in core, instead use " - "'from pandas.core.construction import pd_array'\n" + "Don't use pd.array in core, import array as pd_array instead\n" ) @@ -35,7 +33,7 @@ def visit_ImportFrom(self, node: ast.ImportFrom) -> None: if ( node.module is not None and node.module.startswith("pandas") - and any(i.name == "array" for i in node.names) + and any(i.name == "array" and i.asname != "pd_array" for i in node.names) ): msg = ERROR_MESSAGE.format( path=self.path, lineno=node.lineno, col_offset=node.col_offset From 96e9851925b0482314c5847d65820e2cf58be499 Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Fri, 12 Mar 2021 15:00:32 +0000 Subject: [PATCH 4/5] fixup test --- scripts/tests/test_use_pd_array_in_core.py | 2 +- scripts/use_pd_array_in_core.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/tests/test_use_pd_array_in_core.py b/scripts/tests/test_use_pd_array_in_core.py index 5c56634335798..9c66199a82846 100644 --- a/scripts/tests/test_use_pd_array_in_core.py +++ b/scripts/tests/test_use_pd_array_in_core.py @@ -12,7 +12,7 @@ @pytest.mark.parametrize("content", [BAD_FILE_0, BAD_FILE_1]) def test_inconsistent_usage(content, capsys): result_msg = ( - r"t.py:2:0: Don't use pd.array in core, import array as pd_array instead\n" + "t.py:2:0: Don't use pd.array in core, import array as pd_array instead\n" ) with pytest.raises(SystemExit): use_pd_array(content, PATH) diff --git a/scripts/use_pd_array_in_core.py b/scripts/use_pd_array_in_core.py index 8c03c602a3e55..531084683bdb1 100644 --- a/scripts/use_pd_array_in_core.py +++ b/scripts/use_pd_array_in_core.py @@ -60,7 +60,6 @@ def use_pd_array(content: str, path: str) -> None: tree = ast.parse(content) visitor = Visitor(path) visitor.visit(tree) - return def main(argv: Optional[Sequence[str]] = None) -> None: From 6eaee7d95abbd7cb011e2859ba2ad1b38499d36e Mon Sep 17 00:00:00 2001 From: Marco Gorelli Date: Fri, 2 Apr 2021 10:45:24 +0100 Subject: [PATCH 5/5] add source for coverage --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index 7165fc2275dc0..2aaafa0391531 100644 --- a/setup.cfg +++ b/setup.cfg @@ -140,6 +140,7 @@ omit = pandas/_typing.py pandas/_version.py plugins = Cython.Coverage +source = pandas [coverage:report] ignore_errors = False