mirror of
https://github.com/pandas-dev/pandas.git
synced 2026-05-30 01:03:43 +08:00
713 lines
22 KiB
TOML
713 lines
22 KiB
TOML
[build-system]
|
|
# Minimum requirements for the build system to execute.
|
|
# See https://github.com/scipy/scipy/pull/12940 for the AIX issue.
|
|
requires = [
|
|
"meson-python>=0.19.0,<1",
|
|
"meson>=1.2.3,<2",
|
|
"wheel",
|
|
"Cython>3.1.0,<4.0.0a0", # Note: sync with environment.yml and asv.conf.json
|
|
# Force numpy higher than 2.0, so that built wheels are compatible
|
|
# with both numpy 1 and 2
|
|
"numpy>=2.0.0",
|
|
"versioneer[toml]"
|
|
]
|
|
|
|
build-backend = "mesonpy"
|
|
|
|
[project]
|
|
name = 'pandas'
|
|
dynamic = ['version']
|
|
description = 'Powerful data structures for data analysis, time series, and statistics'
|
|
readme = 'README.md'
|
|
authors = [
|
|
{ name = 'The Pandas Development Team', email='pandas-dev@python.org' },
|
|
]
|
|
license = 'BSD-3-Clause'
|
|
license-files = [
|
|
"LICENSE", # BSD-3-Clause
|
|
"LICENSES/BOTTLENECK_LICENCE", # BSD-2-Clause
|
|
"LICENSES/DATEUTIL_LICENSE", # Apache-2.0
|
|
"LICENSES/HAVEN_LICENSE", # MIT
|
|
"LICENSES/HAVEN_MIT", # MIT
|
|
"LICENSES/KLIB_LICENSE", # MIT
|
|
"LICENSES/MUSL_LICENSE", # MIT
|
|
"LICENSES/NUMPY_LICENSE", # BSD-3-Clause
|
|
"LICENSES/PACKAGING_LICENSE", # Apache-2.0
|
|
"LICENSES/PSF_LICENSE", # PSF-2.0
|
|
"LICENSES/PYPERCLIP_LICENSE", # BSD-3-Clause
|
|
"LICENSES/PYUPGRADE_LICENSE", # MIT
|
|
"LICENSES/SAS7BDAT_LICENSE", # MIT
|
|
"LICENSES/ULTRAJSON_LICENSE", # BSD-3-Clause AND TCL
|
|
"subprojects/fast_float-*/LICENSE-APACHE", # Apache-2.0
|
|
"subprojects/fast_float-*/LICENSE-BOOST", # BSL
|
|
"subprojects/fast_float-*/LICENSE-MIT", # MIT
|
|
]
|
|
requires-python = '>=3.11'
|
|
dependencies = [
|
|
"numpy>=1.26.0; python_version < '3.14'",
|
|
# Earlier versions of NumPy are fundamentally broken on 3.14
|
|
"numpy>=2.3.3; python_version >= '3.14'",
|
|
"python-dateutil>=2.8.2",
|
|
"tzdata; sys_platform == 'win32'",
|
|
# Emscripten is the platform system for Pyodide.
|
|
"tzdata; sys_platform == 'emscripten'",
|
|
]
|
|
classifiers = [
|
|
'Development Status :: 5 - Production/Stable',
|
|
'Environment :: Console',
|
|
'Intended Audience :: Science/Research',
|
|
'Operating System :: OS Independent',
|
|
'Programming Language :: Cython',
|
|
'Programming Language :: Python',
|
|
'Programming Language :: Python :: 3',
|
|
'Programming Language :: Python :: 3 :: Only',
|
|
'Programming Language :: Python :: 3.11',
|
|
'Programming Language :: Python :: 3.12',
|
|
'Programming Language :: Python :: 3.13',
|
|
'Programming Language :: Python :: 3.14',
|
|
'Topic :: Scientific/Engineering'
|
|
]
|
|
|
|
[project.urls]
|
|
homepage = 'https://pandas.pydata.org'
|
|
source = 'https://github.com/pandas-dev/pandas'
|
|
documentation = 'https://pandas.pydata.org/docs/'
|
|
changelog = 'https://pandas.pydata.org/docs/whatsnew/index.html'
|
|
issues = 'https://github.com/pandas-dev/pandas/issues'
|
|
funding = 'https://opencollective.com/pandas'
|
|
|
|
[project.entry-points."pandas_plotting_backends"]
|
|
matplotlib = "pandas:plotting._matplotlib"
|
|
|
|
[project.optional-dependencies]
|
|
test = ['hypothesis>=6.116.0', 'pytest>=8.3.4', 'pytest-xdist>=3.6.1']
|
|
pyarrow = ['pyarrow>=13.0.0']
|
|
performance = ['bottleneck>=1.4.2', 'numba>=0.60.0', 'numexpr>=2.10.2']
|
|
computation = ['scipy>=1.14.1', 'xarray>=2024.10.0']
|
|
fss = ['fsspec>=2024.10.0']
|
|
aws = ['s3fs>=2024.10.0']
|
|
gcp = ['gcsfs>=2024.10.0']
|
|
excel = ['odfpy>=1.4.1', 'openpyxl>=3.1.5', 'python-calamine>=0.3.0', 'pyxlsb>=1.0.10', 'xlrd>=2.0.1', 'xlsxwriter>=3.2.0']
|
|
parquet = ['pyarrow>=13.0.0']
|
|
feather = ['pyarrow>=13.0.0']
|
|
iceberg = ['pyiceberg>=0.8.1']
|
|
hdf5 = ['tables>=3.10.1']
|
|
spss = ['pyreadstat>=1.2.8']
|
|
postgresql = ['SQLAlchemy>=2.0.36', 'psycopg2>=2.9.10', 'adbc-driver-postgresql>=1.2.0']
|
|
mysql = ['SQLAlchemy>=2.0.36', 'pymysql>=1.1.1']
|
|
sql-other = ['SQLAlchemy>=2.0.36', 'adbc-driver-postgresql>=1.2.0', 'adbc-driver-sqlite>=1.2.0']
|
|
html = ['beautifulsoup4>=4.12.3', 'html5lib>=1.1', 'lxml>=5.3.0']
|
|
xml = ['lxml>=5.3.0']
|
|
plot = ['matplotlib>=3.9.3']
|
|
output-formatting = ['jinja2>=3.1.5', 'tabulate>=0.9.0']
|
|
clipboard = ['PyQt5>=5.15.9', 'qtpy>=2.4.2']
|
|
compression = ['zstandard>=0.23.0']
|
|
timezone = ['pytz>=2020.1']
|
|
all = ['adbc-driver-postgresql>=1.2.0',
|
|
'adbc-driver-sqlite>=1.2.0',
|
|
'beautifulsoup4>=4.12.3',
|
|
'bottleneck>=1.4.2',
|
|
'fastparquet>=2024.11.0',
|
|
'fsspec>=2024.10.0',
|
|
'gcsfs>=2024.10.0',
|
|
'html5lib>=1.1',
|
|
'hypothesis>=6.116.0',
|
|
'jinja2>=3.1.5',
|
|
'lxml>=5.3.0',
|
|
'matplotlib>=3.9.3',
|
|
'numba>=0.60.0',
|
|
'numexpr>=2.10.2',
|
|
'odfpy>=1.4.1',
|
|
'openpyxl>=3.1.5',
|
|
'psycopg2>=2.9.10',
|
|
'pyarrow>=13.0.0',
|
|
'pyiceberg>=0.8.1',
|
|
'pymysql>=1.1.1',
|
|
'PyQt5>=5.15.9',
|
|
'pyreadstat>=1.2.8',
|
|
'pytest>=8.3.4',
|
|
'pytest-xdist>=3.6.1',
|
|
'python-calamine>=0.3.0',
|
|
'pytz>=2020.1',
|
|
'pyxlsb>=1.0.10',
|
|
'qtpy>=2.4.2',
|
|
'scipy>=1.14.1',
|
|
's3fs>=2024.10.0',
|
|
'SQLAlchemy>=2.0.36',
|
|
'tables>=3.10.1',
|
|
'tabulate>=0.9.0',
|
|
'xarray>=2024.10.0',
|
|
'xlrd>=2.0.1',
|
|
'xlsxwriter>=3.2.0',
|
|
'zstandard>=0.23.0']
|
|
|
|
# See the docstring in versioneer.py for instructions. Note that you must
|
|
# re-run 'versioneer.py setup' after changing this section, and commit the
|
|
# resulting files.
|
|
[tool.versioneer]
|
|
VCS = "git"
|
|
style = "pep440"
|
|
versionfile_source = "pandas/_version.py"
|
|
versionfile_build = "pandas/_version.py"
|
|
tag_prefix = "v"
|
|
parentdir_prefix = "pandas-"
|
|
|
|
[tool.meson-python.args]
|
|
dist = ['--include-subprojects']
|
|
|
|
[tool.cibuildwheel]
|
|
skip = ["*_i686", "*_ppc64le", "*_s390x"]
|
|
build-verbosity = 1
|
|
build-frontend = "pip"
|
|
config-settings = { compile-args = ["-v"] }
|
|
environment = {LDFLAGS="-Wl,--strip-all"}
|
|
test-extras = "test"
|
|
test-command = """
|
|
python -c 'import pandas as pd; \
|
|
pd.test(extra_args=["-m not clipboard and not single_cpu and not slow and not network and not db", "--numprocesses=2", "--dist=worksteal", "--no-strict-data-files"]); \
|
|
pd.test(extra_args=["-m not clipboard and single_cpu and not slow and not network and not db", "--no-strict-data-files"]);' \
|
|
"""
|
|
|
|
[tool.cibuildwheel.windows]
|
|
config-settings = { setup-args = ["--vsenv"] }
|
|
environment = {}
|
|
before-build = "python -m pip install delvewheel"
|
|
# powershell needs to swap quotes?
|
|
test-command = """
|
|
python -c "import pandas as pd; \
|
|
pd.test(extra_args=['-m not clipboard and not single_cpu and not slow and not network and not db', '--numprocesses=2', '--dist=worksteal', '--no-strict-data-files']); \
|
|
pd.test(extra_args=['-m not clipboard and single_cpu and not slow and not network and not db', '--no-strict-data-files']);" \
|
|
"""
|
|
repair-wheel-command = "delvewheel repair -w {dest_dir} {wheel}"
|
|
|
|
[[tool.cibuildwheel.overrides]]
|
|
select = "*-musllinux*"
|
|
before-test = "apk update && apk add musl-locales"
|
|
|
|
[[tool.cibuildwheel.overrides]]
|
|
select = "*-macosx*"
|
|
environment = {CFLAGS="-g0"}
|
|
|
|
[[tool.cibuildwheel.overrides]]
|
|
select = "*pyodide*"
|
|
# Pyodide repairs wheels on its own, using auditwheel-emscripten
|
|
repair-wheel-command = ""
|
|
# https://github.com/pyodide/pyodide/issues/5805
|
|
build-verbosity = 1
|
|
build-frontend = "build"
|
|
# pytest-xdist cannot be used on Pyodide
|
|
# OSError: [Errno 138] emscripten does not support processes
|
|
test-command = """
|
|
python -c 'import pandas as pd; \
|
|
pd.test(extra_args=["-m not clipboard and not single_cpu and not slow and not network and not db", "--no-strict-data-files"]);' \
|
|
"""
|
|
|
|
[tool.ruff]
|
|
line-length = 88
|
|
target-version = "py311"
|
|
fix = true
|
|
|
|
[tool.ruff.lint]
|
|
unfixable = []
|
|
typing-modules = ["pandas._typing"]
|
|
|
|
select = [
|
|
# pyflakes
|
|
"F",
|
|
# pycodestyle
|
|
"E", "W",
|
|
# flake8-2020
|
|
"YTT",
|
|
# flake8-bugbear
|
|
"B",
|
|
# flake8-quotes
|
|
"Q",
|
|
# flake8-debugger
|
|
"T10",
|
|
# flake8-gettext
|
|
"INT",
|
|
# pylint
|
|
"PL",
|
|
# flake8-pytest-style
|
|
"PT",
|
|
# misc lints
|
|
"PIE",
|
|
# flake8-pyi
|
|
"PYI",
|
|
# tidy imports
|
|
"TID",
|
|
# implicit string concatenation
|
|
"ISC",
|
|
# flake8-type-checking
|
|
"TC",
|
|
# comprehensions
|
|
"C4",
|
|
# pygrep-hooks
|
|
"PGH",
|
|
# Ruff-specific rules
|
|
"RUF",
|
|
# flake8-bandit: exec-builtin
|
|
"S102",
|
|
# numpy-legacy-random
|
|
"NPY002",
|
|
# Perflint
|
|
"PERF",
|
|
# flynt
|
|
"FLY",
|
|
# flake8-logging-format
|
|
"G",
|
|
# flake8-future-annotations
|
|
"FA",
|
|
# unconventional-import-alias
|
|
"ICN001",
|
|
# flake8-slots
|
|
"SLOT",
|
|
# flake8-raise
|
|
"RSE"
|
|
]
|
|
|
|
ignore = [
|
|
### Intentionally disabled
|
|
# module level import not at top of file
|
|
"E402",
|
|
# do not assign a lambda expression, use a def
|
|
"E731",
|
|
# controversial
|
|
"B007",
|
|
# controversial
|
|
"B008",
|
|
# getattr is used to side-step mypy
|
|
"B010",
|
|
# tests use comparisons but not their returned value
|
|
"B015",
|
|
# Function definition does not bind loop variable
|
|
"B023",
|
|
# Too many arguments to function call
|
|
"PLR0913",
|
|
# Too many returns
|
|
"PLR0911",
|
|
# Too many branches
|
|
"PLR0912",
|
|
# Too many statements
|
|
"PLR0915",
|
|
# Redefined loop name
|
|
"PLW2901",
|
|
# Global statements are discouraged
|
|
"PLW0603",
|
|
# Use `typing.NamedTuple` instead of `collections.namedtuple`
|
|
"PYI024",
|
|
# Use of possibly insecure function; consider using ast.literal_eval
|
|
"S307",
|
|
# while int | float can be shortened to float, the former is more explicit
|
|
"PYI041",
|
|
# incorrect-dict-iterator, flags valid Series.items usage
|
|
"PERF102",
|
|
# pytest-parametrize-names-wrong-type
|
|
"PT006",
|
|
# pytest-parametrize-values-wrong-type
|
|
"PT007",
|
|
# pytest-patch-with-lambda
|
|
"PT008",
|
|
# pytest-raises-with-multiple-statements
|
|
"PT012",
|
|
# pytest-assert-in-except
|
|
"PT017",
|
|
# pytest-composite-assertion
|
|
"PT018",
|
|
# pytest-fixture-param-without-value
|
|
"PT019",
|
|
# The following rules may cause conflicts when used with the formatter:
|
|
"ISC001",
|
|
# if-stmt-min-max
|
|
"PLR1730",
|
|
# nan-comparison
|
|
"PLW0177",
|
|
|
|
### TODO: Enable gradually
|
|
# Useless statement
|
|
"B018",
|
|
# Magic number
|
|
"PLR2004",
|
|
# comparison-with-itself
|
|
"PLR0124",
|
|
# mutable-class-default
|
|
"RUF012",
|
|
# type-comparison
|
|
"E721",
|
|
# self-or-cls-assignment
|
|
"PLW0642",
|
|
# literal-membership
|
|
"PLR6201", # 847 errors
|
|
# Method could be a function, class method, or static method
|
|
"PLR6301", # 11411 errors
|
|
# Private name import
|
|
"PLC2701", # 27 errors
|
|
# Too many positional arguments (6/5)
|
|
"PLR0917", # 470 errors
|
|
# compare-to-empty-string
|
|
"PLC1901",
|
|
# `tempfile.NamedTemporaryFile` in text mode without explicit `encoding` argument
|
|
"PLW1514", # 1 error
|
|
# Object does not implement `__hash__` method
|
|
"PLW1641", # 16 errors
|
|
# Bad or misspelled dunder method name
|
|
"PLW3201", # 69 errors, seems to be all false positive
|
|
# Unpacking a dictionary in iteration without calling `.items()`
|
|
"PLE1141", # autofixable
|
|
# import-outside-toplevel
|
|
"PLC0415",
|
|
# unnecessary-dunder-call
|
|
"PLC2801",
|
|
# comparison-with-itself
|
|
"PLR0124",
|
|
# too-many-public-methods
|
|
"PLR0904",
|
|
# too-many-return-statements
|
|
"PLR0911",
|
|
# too-many-branches
|
|
"PLR0912",
|
|
# too-many-arguments
|
|
"PLR0913",
|
|
# too-many-locals
|
|
"PLR0914",
|
|
# too-many-statements
|
|
"PLR0915",
|
|
# too-many-boolean-expressions
|
|
"PLR0916",
|
|
# too-many-nested-blocks
|
|
"PLR1702",
|
|
# redefined-argument-from-local
|
|
"PLR1704",
|
|
# unnecessary-lambda
|
|
"PLW0108",
|
|
# global-statement
|
|
"PLW0603",
|
|
# unused-unpacked-variable
|
|
"RUF059",
|
|
# pytest-raises-ambiguous-pattern
|
|
"RUF043",
|
|
]
|
|
|
|
exclude = [
|
|
"doc/sphinxext/*.py",
|
|
"doc/build/*.py",
|
|
"doc/temp/*.py",
|
|
".eggs/*.py",
|
|
# vendored files
|
|
"pandas/util/version/*",
|
|
"pandas/io/clipboard/__init__.py",
|
|
# exclude asv benchmark environments from linting
|
|
"env",
|
|
]
|
|
|
|
[tool.ruff.lint.flake8-tidy-imports.banned-api]
|
|
"urllib.request.urlopen".msg = "Use pandas.io.common.urlopen instead of urllib.request.urlopen"
|
|
# numpy.random is banned but np.random is not. Is this intentional?
|
|
# "numpy.random".msg = "Do not use numpy.random"
|
|
"pytest.warns".msg = "Use tm.assert_produces_warning instead of pytest.warns"
|
|
"pytest.xfail".msg = "Use pytest.mark.xfail instead of pytest.xfail"
|
|
"conftest".msg = "No direct imports from conftest"
|
|
"numpy.testing".msg = "Do not use numpy.testing"
|
|
# "numpy.array_equal".msg = "Do not use numpy.array_equal" # Used in pandas/core
|
|
"unittest.mock".msg = "use pytest builtin monkeypatch fixture instead"
|
|
"os.remove".msg = "Do not use os.remove"
|
|
|
|
|
|
|
|
[tool.ruff.lint.flake8-import-conventions.aliases]
|
|
"pandas.core.construction.array" = "pd_array"
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
# relative imports allowed for asv_bench
|
|
"asv_bench/*" = ["TID", "NPY002"]
|
|
# to be enabled gradually
|
|
"pandas/tests/*" = ["B028", "FLY"]
|
|
# Keep this one enabled
|
|
"pandas/_typing.py" = ["TC"]
|
|
|
|
[tool.ruff.lint.flake8-pytest-style]
|
|
fixture-parentheses = false
|
|
mark-parentheses = false
|
|
|
|
[tool.ruff.format]
|
|
docstring-code-format = true
|
|
|
|
[tool.pytest.ini_options]
|
|
# sync minversion with pyproject.toml & install.rst
|
|
minversion = "8.3.4"
|
|
addopts = "--strict-markers --strict-config --capture=no --durations=30"
|
|
empty_parameter_set_mark = "fail_at_collect"
|
|
xfail_strict = true
|
|
testpaths = "pandas"
|
|
doctest_optionflags = [
|
|
"NORMALIZE_WHITESPACE",
|
|
"IGNORE_EXCEPTION_DETAIL",
|
|
"ELLIPSIS",
|
|
]
|
|
# https://docs.pytest.org/en/stable/how-to/capture-warnings.html#controlling-warnings
|
|
# > When a warning matches more than one option in the list, the action for the last matching option is performed
|
|
filterwarnings = [
|
|
"error",
|
|
"error::ResourceWarning",
|
|
"error::pytest.PytestUnraisableExceptionWarning",
|
|
"error::pytest.PytestWarning",
|
|
# e.g. Module already imported so cannot be rewritten; _hypothesis_globals
|
|
"ignore::pytest.PytestAssertRewriteWarning",
|
|
"ignore::pytest.PytestCacheWarning",
|
|
# Ignore 3rd party EncodingWarning but raise on pandas'
|
|
"ignore:.*encoding.* argument not specified:EncodingWarning",
|
|
"error:.*encoding.* argument not specified:EncodingWarning:pandas",
|
|
# From pyiceberg w/ Python >=3.13: https://github.com/apache/iceberg-python/issues/2530#issuecomment-3712112040
|
|
"ignore:unclosed database in <sqlite3.Connection object*:ResourceWarning",
|
|
# From fastparquet - test_read_filters_fastparquet
|
|
"ignore:.*FileIO:pytest.PytestUnraisableExceptionWarning",
|
|
# From plotting doctests
|
|
"ignore:More than 20 figures have been opened:RuntimeWarning",
|
|
"ignore:BuiltinImporter.module_repr() is deprecated and slated for removal in Python 3.12:DeprecationWarning",
|
|
"ignore:Bitwise inversion:DeprecationWarning",
|
|
# Raised by coverage in PY3.14+ (coverage.exceptions.CoverageWarning)
|
|
"ignore:Plugin file tracers",
|
|
# Raised by coverage in freethreading
|
|
"ignore:Couldn't import C tracer",
|
|
# Remove 2 below when pyarrow version > ??
|
|
"ignore:make_block is deprecated and will be removed in a future version:pandas.errors.Pandas4Warning:pyarrow",
|
|
"ignore:DatetimeTZBlock is deprecated and will be removed in a future version:pandas.errors.Pandas4Warning:pyarrow",
|
|
]
|
|
junit_family = "xunit2"
|
|
|
|
[tool.mypy]
|
|
# Import discovery
|
|
mypy_path = "typings"
|
|
files = ["pandas", "typings"]
|
|
namespace_packages = false
|
|
explicit_package_bases = false
|
|
ignore_missing_imports = true
|
|
follow_imports = "normal"
|
|
follow_imports_for_stubs = false
|
|
no_site_packages = false
|
|
no_silence_site_packages = false
|
|
# Platform configuration
|
|
python_version = "3.11"
|
|
platform = "linux-64"
|
|
# Disallow dynamic typing
|
|
disallow_any_unimported = false # TODO
|
|
disallow_any_expr = false # TODO
|
|
disallow_any_decorated = false # TODO
|
|
disallow_any_explicit = false # TODO
|
|
disallow_any_generics = false # TODO
|
|
disallow_subclassing_any = false # TODO
|
|
# Untyped definitions and calls
|
|
disallow_untyped_calls = true
|
|
disallow_untyped_defs = true
|
|
disallow_incomplete_defs = true
|
|
check_untyped_defs = true
|
|
disallow_untyped_decorators = true
|
|
# None and Optional handling
|
|
no_implicit_optional = true
|
|
strict_optional = true
|
|
# Configuring warnings
|
|
warn_redundant_casts = true
|
|
warn_unused_ignores = true
|
|
warn_no_return = true
|
|
warn_return_any = false # TODO
|
|
warn_unreachable = false # GH#27396
|
|
# Suppressing errors
|
|
ignore_errors = false
|
|
enable_error_code = "ignore-without-code"
|
|
# Miscellaneous strictness flags
|
|
allow_untyped_globals = false
|
|
allow_redefinition = false
|
|
local_partial_types = true
|
|
implicit_reexport = true
|
|
strict_equality = true
|
|
# Configuring error messages
|
|
show_error_context = false
|
|
show_column_numbers = false
|
|
show_error_codes = true
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = [
|
|
"pandas._libs.arrays",
|
|
"pandas._libs.hashtable",
|
|
"pandas._libs.index",
|
|
"pandas._libs.internals",
|
|
"pandas._libs.lib",
|
|
"pandas._libs.missing",
|
|
"pandas._libs.ops_dispatch",
|
|
"pandas._libs.properties",
|
|
"pandas._libs.sparse",
|
|
"pandas._libs.testing",
|
|
"pandas._libs.tslibs.fields",
|
|
"pandas._libs.tslibs.nattype",
|
|
"pandas._libs.tslibs.np_datetime",
|
|
"pandas._libs.tslibs.offsets",
|
|
"pandas._libs.tslibs.parsing",
|
|
"pandas._libs.tslibs.period",
|
|
"pandas._libs.tslibs.timedeltas",
|
|
"pandas._libs.window.indexers",
|
|
"pandas.core.array_algos.masked_reductions", # TODO
|
|
"pandas.core.array_algos.replace", # TODO
|
|
"pandas.core.array_algos.take", # TODO
|
|
"pandas.core.arrays.*", # TODO
|
|
"pandas.core.computation.align", # TODO
|
|
"pandas.core.computation.engines", # TODO
|
|
"pandas.core.computation.eval", # TODO
|
|
"pandas.core.computation.expr", # TODO
|
|
"pandas.core.computation.expressions", # TODO
|
|
"pandas.core.computation.ops", # TODO
|
|
"pandas.core.computation.pytables", # TODO
|
|
"pandas.core.computation.scope", # TODO
|
|
"pandas.core.dtypes.common", # TODO
|
|
"pandas.core.dtypes.dtypes", # TODO
|
|
"pandas.core.groupby.generic", # TODO
|
|
"pandas.core.groupby.grouper", # TODO
|
|
"pandas.core.groupby.groupby", # TODO
|
|
"pandas.core.groupby.ops", # TODO
|
|
"pandas.core.indexers.*", # TODO
|
|
"pandas.core.indexes.accessors", # TODO
|
|
"pandas.core.indexes.api", # TODO
|
|
"pandas.core.indexes.datetimelike", # TODO
|
|
"pandas.core.indexes.datetimes", # TODO
|
|
"pandas.core.indexes.extension", # TODO
|
|
"pandas.core.indexes.interval", # TODO
|
|
"pandas.core.indexes.multi", # TODO
|
|
"pandas.core.indexes.period", # TODO
|
|
"pandas.core.indexes.timedeltas", # TODO
|
|
"pandas.core.interchange.column", # TODO
|
|
"pandas.core.interchange.dataframe_protocol", # TODO
|
|
"pandas.core.interchange.from_dataframe", # TODO
|
|
"pandas.core.internals", # TODO
|
|
"pandas.core.internals.blocks", # TODO
|
|
"pandas.core.internals.concat", # TODO
|
|
"pandas.core.internals.construction", # TODO
|
|
"pandas.core.internals.managers", # TODO
|
|
"pandas.core.ops.array_ops", # TODO
|
|
"pandas.core.ops.common", # TODO
|
|
"pandas.core.ops.missing", # TODO
|
|
"pandas.core.reshape.*", # TODO
|
|
"pandas.core.strings.*", # TODO
|
|
"pandas.core.tools.*", # TODO
|
|
"pandas.core.window.common", # TODO
|
|
"pandas.core.window.ewm", # TODO
|
|
"pandas.core.window.expanding", # TODO
|
|
"pandas.core.window.numba_", # TODO
|
|
"pandas.core.window.rolling", # TODO
|
|
"pandas.core.accessor", # TODO
|
|
"pandas.core.algorithms", # TODO
|
|
"pandas.core.apply", # TODO
|
|
"pandas.core.arraylike", # TODO
|
|
"pandas.core.base", # TODO
|
|
"pandas.core.construction", # TODO
|
|
"pandas.core.frame", # TODO
|
|
"pandas.core.generic", # TODO
|
|
"pandas.core.indexing", # TODO
|
|
"pandas.core.missing", # TODO
|
|
"pandas.core.nanops", # TODO
|
|
"pandas.core.resample", # TODO
|
|
"pandas.core.series", # TODO
|
|
"pandas.io.clipboard", # TODO
|
|
"pandas.io.excel._base", # TODO
|
|
"pandas.io.excel._odfreader", # TODO
|
|
"pandas.io.excel._openpyxl", # TODO
|
|
"pandas.io.excel._xlrd", # TODO
|
|
"pandas.io.excel._xlsxwriter", # TODO
|
|
"pandas.io.formats.excel", # TODO
|
|
"pandas.io.formats.format", # TODO
|
|
"pandas.io.formats.style", # TODO
|
|
"pandas.io.formats.style_render", # TODO
|
|
"pandas.io.formats.xml", # TODO
|
|
"pandas.io.json.*", # TODO
|
|
"pandas.io.parsers.*", # TODO
|
|
"pandas.io.sas.sas_xport", # TODO
|
|
"pandas.io.sas.sas7bdat", # TODO
|
|
"pandas.io.clipboards", # TODO
|
|
"pandas.io.html", # TODO
|
|
"pandas.io.parquet", # TODO
|
|
"pandas.io.pytables", # TODO
|
|
"pandas.io.sql", # TODO
|
|
"pandas.plotting.*", # TODO
|
|
"pandas.tests.*",
|
|
"pandas.tseries.frequencies", # TODO
|
|
"pandas.tseries.holiday", # TODO
|
|
"pandas.conftest",
|
|
"pandas"
|
|
]
|
|
disallow_untyped_calls = false
|
|
disallow_untyped_defs = false
|
|
disallow_incomplete_defs = false
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = [
|
|
"pandas.tests.*",
|
|
"pandas.io.clipboard",
|
|
]
|
|
check_untyped_defs = false
|
|
|
|
# To be kept consistent with "Import Formatting" section in contributing.rst
|
|
[tool.isort]
|
|
known_pre_libs = "pandas._config"
|
|
known_pre_core = ["pandas._libs", "pandas._typing", "pandas.util._*", "pandas.compat", "pandas.errors"]
|
|
known_dtypes = "pandas.core.dtypes"
|
|
known_post_core = ["pandas.tseries", "pandas.io", "pandas.plotting"]
|
|
sections = ["FUTURE", "STDLIB", "THIRDPARTY" ,"PRE_LIBS" , "PRE_CORE", "DTYPES", "FIRSTPARTY", "POST_CORE", "LOCALFOLDER"]
|
|
profile = "black"
|
|
combine_as_imports = true
|
|
force_grid_wrap = 2
|
|
force_sort_within_sections = true
|
|
skip_glob = "env"
|
|
skip = "pandas/__init__.py"
|
|
|
|
[tool.pyright]
|
|
pythonVersion = "3.11"
|
|
typeCheckingMode = "basic"
|
|
useLibraryCodeForTypes = false
|
|
include = ["pandas", "typings"]
|
|
exclude = ["pandas/tests", "pandas/io/clipboard", "pandas/util/version", "pandas/core/_numba/extensions.py"]
|
|
# enable subset of "strict"
|
|
reportDuplicateImport = true
|
|
reportInconsistentConstructor = true
|
|
reportInvalidStubStatement = true
|
|
reportOverlappingOverload = true
|
|
reportPropertyTypeMismatch = true
|
|
reportUntypedClassDecorator = true
|
|
reportUntypedFunctionDecorator = true
|
|
reportUntypedNamedTuple = true
|
|
reportUnusedImport = true
|
|
disableBytesTypePromotions = true
|
|
# disable subset of "basic"
|
|
reportArgumentType = false
|
|
reportAssignmentType = false
|
|
reportAttributeAccessIssue = false
|
|
reportCallIssue = false
|
|
reportGeneralTypeIssues = false
|
|
reportIndexIssue = false
|
|
reportMissingModuleSource = false
|
|
reportOperatorIssue = false
|
|
reportOptionalMemberAccess = false
|
|
reportReturnType = false
|
|
|
|
[tool.coverage.run]
|
|
# Reported coverage will be less than expected due to
|
|
# https://github.com/pytest-dev/pytest-cov/issues/455
|
|
branch = true
|
|
omit = ["pandas/_typing.py"]
|
|
source = ["pandas"]
|
|
|
|
[tool.coverage.report]
|
|
ignore_errors = false
|
|
show_missing = true
|
|
exclude_lines = [
|
|
# Have to re-enable the standard pragma
|
|
"pragma: no cover",
|
|
# Don't complain if tests don't hit defensive assertion code:
|
|
"raise AssertionError",
|
|
"AbstractMethodError",
|
|
# Don't complain if non-runnable code isn't run:
|
|
"if __name__ == .__main__.:",
|
|
"if TYPE_CHECKING:",
|
|
]
|
|
|
|
[tool.codespell]
|
|
ignore-words-list = "blocs, coo, hist, nd, sav, ser, recuse, nin, timere, expec, expecs, indext, SME, NotIn, tructures, tru, indx, abd, ABD"
|
|
ignore-regex = 'https://([\w/\.])+'
|