From 3c42df99719b14f8cb11583f701e122c664d3a66 Mon Sep 17 00:00:00 2001 From: Nathan McDougall Date: Tue, 8 Aug 2023 05:54:11 +1200 Subject: [PATCH] Add `from __future__ import annotations` That is for files with pre-3.9 annotations with view to migrate Incidentally run isort (see #1295) Signed-off-by: Nathan McDougall --- noxfile.py | 11 +++++----- pandera/accessors/pandas_accessor.py | 1 + pandera/accessors/pyspark_sql_accessor.py | 1 + pandera/api/base/checks.py | 1 + pandera/api/base/model.py | 1 + pandera/api/base/model_components.py | 1 + pandera/api/base/model_config.py | 1 + pandera/api/base/schema.py | 5 +++-- pandera/api/checks.py | 1 + pandera/api/extensions.py | 1 + pandera/api/hypotheses.py | 1 + pandera/api/pandas/array.py | 1 + pandera/api/pandas/components.py | 1 + pandera/api/pandas/model.py | 1 + pandera/api/pandas/model_components.py | 2 ++ pandera/api/pandas/model_config.py | 1 + pandera/api/pyspark/column_schema.py | 1 + pandera/api/pyspark/components.py | 1 + pandera/api/pyspark/error_handler.py | 1 + pandera/api/pyspark/model_components.py | 2 ++ pandera/backends/pandas/builtin_hypotheses.py | 4 +++- pandera/backends/pandas/components.py | 14 +++++++------ pandera/backends/pandas/container.py | 7 ++++--- pandera/backends/pandas/hypotheses.py | 1 + pandera/backends/pyspark/base.py | 1 + pandera/backends/pyspark/checks.py | 1 + pandera/backends/pyspark/container.py | 5 +++-- pandera/decorators.py | 2 ++ pandera/engines/engine.py | 3 ++- pandera/engines/pandas_engine.py | 15 +++++++------ pandera/engines/pyspark_engine.py | 21 +++++++++++-------- pandera/engines/utils.py | 1 + pandera/error_handlers.py | 3 ++- pandera/errors.py | 1 + pandera/mypy.py | 1 + pandera/typing/__init__.py | 2 +- pandera/typing/common.py | 5 ++++- pandera/typing/pandas.py | 2 ++ 38 files changed, 86 insertions(+), 39 deletions(-) diff --git a/noxfile.py b/noxfile.py index 0981f60dc..ec85f316b 100644 --- a/noxfile.py +++ b/noxfile.py @@ -1,22 +1,21 @@ """Nox sessions.""" +from __future__ import annotations + # isort: skip_file import os import re import shutil import sys +from distutils.core import run_setup from typing import Dict, List +import nox + # setuptools must be imported before distutils ! import setuptools -from distutils.core import ( - run_setup, -) - -import nox from nox import Session from pkg_resources import Requirement, parse_requirements - nox.options.sessions = ( "requirements", "mypy", diff --git a/pandera/accessors/pandas_accessor.py b/pandera/accessors/pandas_accessor.py index bcec93062..f55fc01fa 100644 --- a/pandera/accessors/pandas_accessor.py +++ b/pandera/accessors/pandas_accessor.py @@ -1,4 +1,5 @@ """Register pandas accessor for pandera schema metadata.""" +from __future__ import annotations from typing import Optional, Union diff --git a/pandera/accessors/pyspark_sql_accessor.py b/pandera/accessors/pyspark_sql_accessor.py index 8e50886a7..aa313bf34 100644 --- a/pandera/accessors/pyspark_sql_accessor.py +++ b/pandera/accessors/pyspark_sql_accessor.py @@ -1,5 +1,6 @@ """Custom accessor functionality for PySpark.Sql. Register pyspark accessor for pandera schema metadata. """ +from __future__ import annotations import warnings from typing import Optional diff --git a/pandera/api/base/checks.py b/pandera/api/base/checks.py index bd9ca8486..d71dc5a23 100644 --- a/pandera/api/base/checks.py +++ b/pandera/api/base/checks.py @@ -1,4 +1,5 @@ """Data validation base check.""" +from __future__ import annotations import inspect from itertools import chain diff --git a/pandera/api/base/model.py b/pandera/api/base/model.py index 4b60feefc..a14597572 100644 --- a/pandera/api/base/model.py +++ b/pandera/api/base/model.py @@ -1,4 +1,5 @@ """Base classes for model api.""" +from __future__ import annotations import os from typing import ( diff --git a/pandera/api/base/model_components.py b/pandera/api/base/model_components.py index 12338c7bf..ee3682381 100644 --- a/pandera/api/base/model_components.py +++ b/pandera/api/base/model_components.py @@ -1,4 +1,5 @@ """Model component base classes.""" +from __future__ import annotations from typing import ( Any, diff --git a/pandera/api/base/model_config.py b/pandera/api/base/model_config.py index b851059ec..97ff1ad33 100644 --- a/pandera/api/base/model_config.py +++ b/pandera/api/base/model_config.py @@ -1,4 +1,5 @@ """Class-based dataframe model API configuration.""" +from __future__ import annotations from typing import Any, Optional diff --git a/pandera/api/base/schema.py b/pandera/api/base/schema.py index ef872288b..40f04283e 100644 --- a/pandera/api/base/schema.py +++ b/pandera/api/base/schema.py @@ -4,15 +4,16 @@ data validation. These operations are exposed as methods that are composed together to implement the pandera schema specification. """ +from __future__ import annotations import inspect from abc import ABC from functools import wraps -from typing import Any, Dict, Tuple, Type, Optional, Union +from typing import Any, Dict, Optional, Tuple, Type, Union from pandera.backends.base import BaseSchemaBackend -from pandera.errors import BackendNotFoundError from pandera.dtypes import DataType +from pandera.errors import BackendNotFoundError DtypeInputTypes = Union[str, type, DataType, Type] diff --git a/pandera/api/checks.py b/pandera/api/checks.py index 1f2659c64..2fa44c451 100644 --- a/pandera/api/checks.py +++ b/pandera/api/checks.py @@ -1,4 +1,5 @@ """Data validation check definition.""" +from __future__ import annotations import re from typing import ( diff --git a/pandera/api/extensions.py b/pandera/api/extensions.py index c2a1b6c57..c3dafb998 100644 --- a/pandera/api/extensions.py +++ b/pandera/api/extensions.py @@ -1,4 +1,5 @@ """Extensions module.""" +from __future__ import annotations import inspect import warnings diff --git a/pandera/api/hypotheses.py b/pandera/api/hypotheses.py index 2ae53293b..904f12376 100644 --- a/pandera/api/hypotheses.py +++ b/pandera/api/hypotheses.py @@ -1,4 +1,5 @@ """Data validation checks for hypothesis testing.""" +from __future__ import annotations from typing import Any, Callable, Dict, List, Optional, TypeVar, Union diff --git a/pandera/api/pandas/array.py b/pandera/api/pandas/array.py index cf470b09f..3e46d3cf3 100644 --- a/pandera/api/pandas/array.py +++ b/pandera/api/pandas/array.py @@ -1,4 +1,5 @@ """Core pandas array specification.""" +from __future__ import annotations import copy import warnings diff --git a/pandera/api/pandas/components.py b/pandera/api/pandas/components.py index c273bd0f0..dda9792ac 100644 --- a/pandera/api/pandas/components.py +++ b/pandera/api/pandas/components.py @@ -1,4 +1,5 @@ """Core pandas schema component specifications.""" +from __future__ import annotations import warnings from typing import Any, Dict, Iterable, List, Optional, Tuple, Union, cast diff --git a/pandera/api/pandas/model.py b/pandera/api/pandas/model.py index ab22f6893..1ab1bce98 100644 --- a/pandera/api/pandas/model.py +++ b/pandera/api/pandas/model.py @@ -1,4 +1,5 @@ """Class-based api for pandas models.""" +from __future__ import annotations import copy import inspect diff --git a/pandera/api/pandas/model_components.py b/pandera/api/pandas/model_components.py index 167616f13..7c0dba48b 100644 --- a/pandera/api/pandas/model_components.py +++ b/pandera/api/pandas/model_components.py @@ -1,4 +1,6 @@ """DataFrameModel components""" +from __future__ import annotations + from typing import ( Any, Callable, diff --git a/pandera/api/pandas/model_config.py b/pandera/api/pandas/model_config.py index d6eb64ca1..f786b94af 100644 --- a/pandera/api/pandas/model_config.py +++ b/pandera/api/pandas/model_config.py @@ -1,4 +1,5 @@ """Class-based dataframe model API configuration for pandas.""" +from __future__ import annotations from typing import Any, Callable, Dict, List, Optional, Union diff --git a/pandera/api/pyspark/column_schema.py b/pandera/api/pyspark/column_schema.py index 6d7d10c20..213fe5e90 100644 --- a/pandera/api/pyspark/column_schema.py +++ b/pandera/api/pyspark/column_schema.py @@ -1,4 +1,5 @@ """Core pyspark column specification.""" +from __future__ import annotations import copy from typing import Any, List, Optional, TypeVar, cast diff --git a/pandera/api/pyspark/components.py b/pandera/api/pyspark/components.py index 791d44470..1ddd36071 100644 --- a/pandera/api/pyspark/components.py +++ b/pandera/api/pyspark/components.py @@ -1,4 +1,5 @@ """Core pyspark schema component specifications.""" +from __future__ import annotations from typing import Any, Dict, Iterable, Optional, Tuple, Union diff --git a/pandera/api/pyspark/error_handler.py b/pandera/api/pyspark/error_handler.py index ed0b7e6e1..1c4550ade 100644 --- a/pandera/api/pyspark/error_handler.py +++ b/pandera/api/pyspark/error_handler.py @@ -1,4 +1,5 @@ """Handle schema errors.""" +from __future__ import annotations from collections import defaultdict from enum import Enum diff --git a/pandera/api/pyspark/model_components.py b/pandera/api/pyspark/model_components.py index 2ccb38eaf..df54df9d6 100644 --- a/pandera/api/pyspark/model_components.py +++ b/pandera/api/pyspark/model_components.py @@ -1,4 +1,6 @@ """DataFrameModel components""" +from __future__ import annotations + from typing import ( Any, Callable, diff --git a/pandera/backends/pandas/builtin_hypotheses.py b/pandera/backends/pandas/builtin_hypotheses.py index 1dba2dca9..cb41ed04b 100644 --- a/pandera/backends/pandas/builtin_hypotheses.py +++ b/pandera/backends/pandas/builtin_hypotheses.py @@ -1,11 +1,13 @@ -# pylint: disable=missing-function-docstring """Pandas implementation of built-in hypotheses.""" +from __future__ import annotations from typing import Tuple from pandera.api.extensions import register_builtin_hypothesis from pandera.backends.pandas.builtin_checks import PandasData +# pylint: disable=missing-function-docstring + @register_builtin_hypothesis( error="failed two sample ttest between '{sample1}' and '{sample2}'", diff --git a/pandera/backends/pandas/components.py b/pandera/backends/pandas/components.py index ea1b542fc..b411828ff 100644 --- a/pandera/backends/pandas/components.py +++ b/pandera/backends/pandas/components.py @@ -1,5 +1,5 @@ """Backend implementation for pandas schema components.""" -# pylint: disable=too-many-locals +from __future__ import annotations import traceback from copy import copy, deepcopy @@ -8,24 +8,26 @@ import numpy as np import pandas as pd -from pandera.backends.base import CoreCheckResult -from pandera.backends.pandas.array import ArraySchemaBackend -from pandera.backends.pandas.container import DataFrameSchemaBackend from pandera.api.pandas.types import ( is_field, is_index, is_multiindex, is_table, ) +from pandera.backends.base import CoreCheckResult +from pandera.backends.pandas.array import ArraySchemaBackend +from pandera.backends.pandas.container import DataFrameSchemaBackend from pandera.backends.pandas.error_formatters import scalar_failure_case from pandera.error_handlers import SchemaErrorHandler from pandera.errors import ( + SchemaDefinitionError, SchemaError, - SchemaErrors, SchemaErrorReason, - SchemaDefinitionError, + SchemaErrors, ) +# pylint: disable=too-many-locals + class ColumnBackend(ArraySchemaBackend): """Backend implementation for pandas dataframe columns.""" diff --git a/pandera/backends/pandas/container.py b/pandera/backends/pandas/container.py index 9f7946828..37d35ba1a 100644 --- a/pandera/backends/pandas/container.py +++ b/pandera/backends/pandas/container.py @@ -1,22 +1,23 @@ """Pandas Parsing, Validation, and Error Reporting Backends.""" +from __future__ import annotations import copy import itertools import traceback -from typing import Any, Callable, List, Optional, Tuple, Dict +from typing import Any, Callable, Dict, List, Optional, Tuple import pandas as pd from pydantic import BaseModel -from pandera.backends.base import CoreCheckResult from pandera.api.pandas.types import is_table +from pandera.backends.base import CoreCheckResult from pandera.backends.pandas.base import ColumnInfo, PandasSchemaBackend from pandera.backends.pandas.error_formatters import ( reshape_failure_cases, scalar_failure_case, ) -from pandera.engines import pandas_engine from pandera.backends.pandas.utils import convert_uniquesettings +from pandera.engines import pandas_engine from pandera.error_handlers import SchemaErrorHandler from pandera.errors import ( ParserError, diff --git a/pandera/backends/pandas/hypotheses.py b/pandera/backends/pandas/hypotheses.py index 6344e1371..58ba55df3 100644 --- a/pandera/backends/pandas/hypotheses.py +++ b/pandera/backends/pandas/hypotheses.py @@ -1,4 +1,5 @@ """Hypothesis backend for pandas.""" +from __future__ import annotations from functools import partial from typing import Any, Callable, Dict, Union, cast diff --git a/pandera/backends/pyspark/base.py b/pandera/backends/pyspark/base.py index 4f68a66e8..e51cd0a7e 100644 --- a/pandera/backends/pyspark/base.py +++ b/pandera/backends/pyspark/base.py @@ -1,4 +1,5 @@ """pyspark Parsing, Validation, and Error Reporting Backends.""" +from __future__ import annotations import warnings from typing import ( diff --git a/pandera/backends/pyspark/checks.py b/pandera/backends/pyspark/checks.py index 498ba6c0c..ba05f4133 100644 --- a/pandera/backends/pyspark/checks.py +++ b/pandera/backends/pyspark/checks.py @@ -1,4 +1,5 @@ """Check backend for pyspark.""" +from __future__ import annotations from functools import partial from typing import Dict, List, Optional diff --git a/pandera/backends/pyspark/container.py b/pandera/backends/pyspark/container.py index 4c5bf2174..cf38669fe 100644 --- a/pandera/backends/pyspark/container.py +++ b/pandera/backends/pyspark/container.py @@ -1,9 +1,10 @@ """Pyspark Parsing, Validation, and Error Reporting Backends.""" +from __future__ import annotations import copy import traceback import warnings -from typing import Any, List, Optional, Dict +from typing import Any, Dict, List, Optional from pyspark.sql import DataFrame from pyspark.sql.functions import col @@ -11,7 +12,7 @@ from pandera.api.pyspark.error_handler import ErrorCategory, ErrorHandler from pandera.api.pyspark.types import is_table from pandera.backends.pyspark.base import ColumnInfo, PysparkSchemaBackend -from pandera.backends.pyspark.decorators import validate_scope, ValidationScope +from pandera.backends.pyspark.decorators import ValidationScope, validate_scope from pandera.backends.pyspark.error_formatters import scalar_failure_case from pandera.config import CONFIG from pandera.errors import ( diff --git a/pandera/decorators.py b/pandera/decorators.py index ce2814e9f..ea62ef34f 100644 --- a/pandera/decorators.py +++ b/pandera/decorators.py @@ -1,4 +1,6 @@ """Decorators for integrating pandera into existing data pipelines.""" +from __future__ import annotations + import functools import inspect import sys diff --git a/pandera/engines/engine.py b/pandera/engines/engine.py index 75acadded..fcccc66ab 100644 --- a/pandera/engines/engine.py +++ b/pandera/engines/engine.py @@ -1,4 +1,6 @@ """Data types engine interface.""" +from __future__ import annotations + # https://github.com/PyCQA/pylint/issues/3268 # pylint:disable=no-value-for-parameter import functools @@ -25,7 +27,6 @@ from pandera.dtypes import DataType - # register different TypedDict type depending on python version if sys.version_info >= (3, 9): from typing import TypedDict diff --git a/pandera/engines/pandas_engine.py b/pandera/engines/pandas_engine.py index 6b1ecac4e..032e0a4b2 100644 --- a/pandera/engines/pandas_engine.py +++ b/pandera/engines/pandas_engine.py @@ -1,11 +1,6 @@ """Pandas engine and data types.""" -# pylint:disable=too-many-ancestors - -# docstrings are inherited -# pylint:disable=missing-class-docstring +from __future__ import annotations -# pylint doesn't know about __init__ generated with dataclass -# pylint:disable=unexpected-keyword-arg,no-value-for-parameter import builtins import dataclasses import datetime @@ -42,6 +37,14 @@ from pandera.engines.utils import pandas_version from pandera.system import FLOAT_128_AVAILABLE +# pylint doesn't know about __init__ generated with dataclass +# pylint:disable=unexpected-keyword-arg,no-value-for-parameter +# pylint:disable=too-many-ancestors + +# docstrings are inherited +# pylint:disable=missing-class-docstring + + try: import pyarrow # pylint: disable=unused-import diff --git a/pandera/engines/pyspark_engine.py b/pandera/engines/pyspark_engine.py index a9668402b..94a3e408a 100644 --- a/pandera/engines/pyspark_engine.py +++ b/pandera/engines/pyspark_engine.py @@ -1,18 +1,12 @@ """PySpark engine and data types.""" -# pylint:disable=too-many-ancestors,no-member - -# docstrings are inherited -# pylint:disable=missing-class-docstring - -# pylint doesn't know about __init__ generated with dataclass -# pylint:disable=unexpected-keyword-arg,no-value-for-parameter +from __future__ import annotations import dataclasses import inspect import re -import warnings -from typing import Any, Iterable, Union, Optional import sys +import warnings +from typing import Any, Iterable, Optional, Union import pyspark.sql.types as pst @@ -21,6 +15,15 @@ from pandera.engines import engine from pandera.engines.type_aliases import PysparkObject +# pylint:disable=too-many-ancestors,no-member + +# docstrings are inherited +# pylint:disable=missing-class-docstring + +# pylint doesn't know about __init__ generated with dataclass +# pylint:disable=unexpected-keyword-arg,no-value-for-parameter + + try: import pyarrow # pylint:disable=unused-import diff --git a/pandera/engines/utils.py b/pandera/engines/utils.py index bc239d992..258696b2a 100644 --- a/pandera/engines/utils.py +++ b/pandera/engines/utils.py @@ -1,4 +1,5 @@ """Engine module utilities.""" +from __future__ import annotations from typing import Any, Union diff --git a/pandera/error_handlers.py b/pandera/error_handlers.py index e05615dea..9d769944c 100644 --- a/pandera/error_handlers.py +++ b/pandera/error_handlers.py @@ -1,8 +1,9 @@ """Handle schema errors.""" +from __future__ import annotations from typing import List, Optional -from pandera.errors import SchemaError, SchemaErrors, SchemaErrorReason +from pandera.errors import SchemaError, SchemaErrorReason, SchemaErrors class SchemaErrorHandler: diff --git a/pandera/errors.py b/pandera/errors.py index 1fed32f8e..dc095d5a4 100644 --- a/pandera/errors.py +++ b/pandera/errors.py @@ -1,4 +1,5 @@ """pandera-specific errors.""" +from __future__ import annotations import warnings from enum import Enum diff --git a/pandera/mypy.py b/pandera/mypy.py index 99c2c38c6..aac34b9ba 100644 --- a/pandera/mypy.py +++ b/pandera/mypy.py @@ -1,4 +1,5 @@ """Pandera mypy plugin.""" +from __future__ import annotations from typing import Callable, Optional, Union, cast diff --git a/pandera/typing/__init__.py b/pandera/typing/__init__.py index 8de4e6ff4..1e6714f7c 100644 --- a/pandera/typing/__init__.py +++ b/pandera/typing/__init__.py @@ -3,6 +3,7 @@ For backwards compatibility, pandas types are exposed to the top-level scope of the typing module. """ +from __future__ import annotations from typing import Set, Type @@ -50,7 +51,6 @@ ) from pandera.typing.pandas import DataFrame, Index, Series - DATAFRAME_TYPES: Set[Type] = {DataFrame} SERIES_TYPES: Set[Type] = {Series} INDEX_TYPES: Set[Type] = {Index} diff --git a/pandera/typing/common.py b/pandera/typing/common.py index 996fb64d5..1ef734043 100644 --- a/pandera/typing/common.py +++ b/pandera/typing/common.py @@ -1,5 +1,5 @@ """Common typing functionality.""" -# pylint:disable=abstract-method,too-many-ancestors,invalid-name +from __future__ import annotations import inspect from typing import TYPE_CHECKING, Any, Generic, Optional, Type, TypeVar, Union @@ -10,6 +10,9 @@ from pandera import dtypes from pandera.engines import numpy_engine, pandas_engine +# pylint:disable=abstract-method,too-many-ancestors,invalid-name + + Bool = dtypes.Bool #: ``"bool"`` numpy dtype Date = dtypes.Date #: ``datetime.date`` object dtype DateTime = dtypes.DateTime #: ``"datetime64[ns]"`` numpy dtype diff --git a/pandera/typing/pandas.py b/pandera/typing/pandas.py index 28fdedeef..dc5edbc1e 100644 --- a/pandera/typing/pandas.py +++ b/pandera/typing/pandas.py @@ -1,4 +1,6 @@ """Typing definitions and helpers.""" +from __future__ import annotations + # pylint:disable=abstract-method,disable=too-many-ancestors import functools import io