| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835 |
- [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.17.1,<1",
- "meson>=1.2.1,<2",
- "wheel",
- "Cython<4.0.0a0", # Note: sync with setup.py, 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 = {file = 'LICENSE'}
- 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',
- 'License :: OSI Approved :: BSD License',
- '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'
- documentation = 'https://pandas.pydata.org/docs/'
- repository = 'https://github.com/pandas-dev/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>=2024.2']
- 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>=2024.2',
- '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']
- # TODO: Remove after setuptools support is dropped.
- [tool.setuptools]
- include-package-data = true
- [tool.setuptools.packages.find]
- include = ["pandas", "pandas.*"]
- namespaces = false
- [tool.setuptools.exclude-package-data]
- "*" = ["*.c", "*.h"]
- # 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]
- setup = ['--vsenv'] # For Windows
- [tool.cibuildwheel]
- skip = ["*_i686", "*_ppc64le", "*_s390x"]
- build-verbosity = 3
- environment = {LDFLAGS="-Wl,--strip-all"}
- test-extras = "test"
- test-command = """
- PANDAS_CI='1' 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", "-n 2", "--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"]);' \
- """
- enable = ["cpython-freethreading"]
- before-build = "PACKAGE_DIR={package} bash {package}/scripts/cibw_before_build.sh"
- [tool.cibuildwheel.windows]
- environment = {}
- before-build = "pip install delvewheel"
- test-command = """
- set PANDAS_CI='1' && \
- python -c "import pandas as pd; \
- pd.test(extra_args=['--no-strict-data-files', '-m not clipboard and not single_cpu and not slow and not network and not db']);" \
- """
- repair-wheel-command = "delvewheel repair -w {dest_dir} {wheel}"
- [[tool.cibuildwheel.overrides]]
- select = "*-manylinux_aarch64*"
- test-command = """
- PANDAS_CI='1' 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 and not fails_arm_wheels", "-n 2", "--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.overrides]]
- select = "*-musllinux*"
- before-test = "apk update && apk add musl-locales"
- [[tool.cibuildwheel.overrides]]
- # Don't strip wheels on macOS.
- # macOS doesn't support stripping wheels with linker
- # https://github.com/MacPython/numpy-wheels/pull/87#issuecomment-624878264
- select = "*-macosx*"
- environment = {CFLAGS="-g0"}
- [[tool.cibuildwheel.overrides]]
- select = "*pyodide*"
- test-requires = "pytest>=8.3.4 hypothesis>=6.116.0"
- # Pyodide repairs wheels on its own, using auditwheel-emscripten
- repair-wheel-command = ""
- # https://github.com/pyodide/pyodide/issues/5805
- build-verbosity = 1
- test-command = """
- PANDAS_CI='1' 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",
- # pairwise-over-zipped
- "RUF007",
- # 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",
- # runtime-cast-value
- "TC006",
- # 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"]
- # TODO: Fix B905 (zip-without-explicit-strict) - Remove files below as they're fixed
- # For contributors working on this issue:
- # After adding strict={True,False} to zip() calls in a file,
- # remove its line from this section
- "pandas/tests/frame/conftest.py" = ["B905"]
- "pandas/tests/frame/constructors/test_from_dict.py" = ["B905"]
- "pandas/tests/frame/indexing/test_delitem.py" = ["B905"]
- "pandas/tests/frame/indexing/test_getitem.py" = ["B905"]
- "pandas/tests/frame/indexing/test_indexing.py" = ["B905"]
- "pandas/tests/frame/indexing/test_setitem.py" = ["B905"]
- "pandas/tests/frame/indexing/test_xs.py" = ["B905"]
- "pandas/tests/frame/methods/test_drop.py" = ["B905"]
- "pandas/tests/frame/methods/test_isin.py" = ["B905"]
- "pandas/tests/frame/methods/test_pop.py" = ["B905"]
- "pandas/tests/frame/methods/test_replace.py" = ["B905"]
- "pandas/tests/frame/methods/test_reset_index.py" = ["B905"]
- "pandas/tests/frame/methods/test_to_dict.py" = ["B905"]
- "pandas/tests/frame/test_api.py" = ["B905"]
- "pandas/tests/frame/test_constructors.py" = ["B905"]
- "pandas/tests/frame/test_iteration.py" = ["B905"]
- "pandas/tests/frame/test_query_eval.py" = ["B905"]
- "pandas/tests/frame/test_stack_unstack.py" = ["B905"]
- "pandas/tests/frame/test_subclass.py" = ["B905"]
- "pandas/tests/frame/test_ufunc.py" = ["B905"]
- "pandas/tests/groupby/test_groupby_dropna.py" = ["B905"]
- "pandas/tests/groupby/test_groupby.py" = ["B905"]
- "pandas/tests/groupby/test_grouping.py" = ["B905"]
- "pandas/tests/groupby/test_raises.py" = ["B905"]
- "pandas/tests/groupby/test_timegrouper.py" = ["B905"]
- "pandas/tests/groupby/transform/test_transform.py" = ["B905"]
- "pandas/tests/indexes/categorical/test_map.py" = ["B905"]
- "pandas/tests/indexes/datetimes/methods/test_astype.py" = ["B905"]
- "pandas/tests/indexes/datetimes/test_formats.py" = ["B905"]
- "pandas/tests/indexes/datetimes/test_partial_slicing.py" = ["B905"]
- "pandas/tests/indexes/datetimes/test_scalar_compat.py" = ["B905"]
- "pandas/tests/indexes/datetimes/test_timezones.py" = ["B905"]
- "pandas/tests/indexes/interval/test_constructors.py" = ["B905"]
- "pandas/tests/indexes/interval/test_formats.py" = ["B905"]
- "pandas/tests/indexes/interval/test_interval.py" = ["B905"]
- "pandas/tests/indexes/period/methods/test_asfreq.py" = ["B905"]
- "pandas/tests/indexes/period/test_constructors.py" = ["B905"]
- "pandas/tests/indexes/period/test_formats.py" = ["B905"]
- "pandas/tests/indexes/period/test_period.py" = ["B905"]
- "pandas/tests/indexes/test_base.py" = ["B905"]
- "pandas/tests/indexes/test_datetimelike.py" = ["B905"]
- "pandas/tests/indexes/test_old_base.py" = ["B905"]
- "pandas/tests/indexes/test_setops.py" = ["B905"]
- "pandas/tests/indexes/timedeltas/test_formats.py" = ["B905"]
- "pandas/tests/indexing/interval/test_interval.py" = ["B905"]
- "pandas/tests/indexing/multiindex/test_getitem.py" = ["B905"]
- "pandas/tests/indexing/multiindex/test_iloc.py" = ["B905"]
- "pandas/tests/indexing/multiindex/test_indexing_slow.py" = ["B905"]
- "pandas/tests/indexing/multiindex/test_loc.py" = ["B905"]
- "pandas/tests/indexing/multiindex/test_setitem.py" = ["B905"]
- "pandas/tests/indexing/multiindex/test_sorted.py" = ["B905"]
- "pandas/tests/indexing/test_coercion.py" = ["B905"]
- "pandas/tests/indexing/test_loc.py" = ["B905"]
- "pandas/tests/internals/test_internals.py" = ["B905"]
- "pandas/tests/io/excel/test_writers.py" = ["B905"]
- "pandas/tests/io/formats/style/test_style.py" = ["B905"]
- "pandas/tests/io/formats/test_format.py" = ["B905"]
- "pandas/tests/io/formats/test_ipython_compat.py" = ["B905"]
- "pandas/tests/io/formats/test_to_string.py" = ["B905"]
- "pandas/tests/io/generate_legacy_storage_files.py" = ["B905"]
- "pandas/tests/io/parser/conftest.py" = ["B905"]
- "pandas/tests/io/parser/dtypes/test_categorical.py" = ["B905"]
- "pandas/tests/io/parser/test_header.py" = ["B905"]
- "pandas/tests/io/parser/test_python_parser_only.py" = ["B905"]
- "pandas/tests/io/pytables/test_complex.py" = ["B905"]
- "pandas/tests/io/pytables/test_select.py" = ["B905"]
- "pandas/tests/io/sas/test_sas7bdat.py" = ["B905"]
- "pandas/tests/io/test_gcs.py" = ["B905"]
- "pandas/tests/io/test_html.py" = ["B905"]
- "pandas/tests/io/test_sql.py" = ["B905"]
- "pandas/tests/io/test_stata.py" = ["B905"]
- "pandas/tests/plotting/common.py" = ["B905"]
- "pandas/tests/plotting/frame/test_frame_color.py" = ["B905"]
- "pandas/tests/resample/test_base.py" = ["B905"]
- "pandas/tests/reshape/concat/test_concat.py" = ["B905"]
- "pandas/tests/reshape/concat/test_index.py" = ["B905"]
- "pandas/tests/reshape/test_melt.py" = ["B905"]
- "pandas/tests/reshape/test_qcut.py" = ["B905"]
- "pandas/tests/scalar/period/test_asfreq.py" = ["B905"]
- "pandas/tests/series/accessors/test_dt_accessor.py" = ["B905"]
- "pandas/tests/series/indexing/test_get.py" = ["B905"]
- "pandas/tests/series/test_api.py" = ["B905"]
- "pandas/tests/series/test_constructors.py" = ["B905"]
- "pandas/tests/strings/conftest.py" = ["B905"]
- [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 --junitxml=test-data.xml"
- empty_parameter_set_mark = "fail_at_collect"
- xfail_strict = true
- testpaths = "pandas"
- doctest_optionflags = [
- "NORMALIZE_WHITESPACE",
- "IGNORE_EXCEPTION_DETAIL",
- "ELLIPSIS",
- ]
- filterwarnings = [
- "error:::pandas",
- "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",
- # TODO(PY311-minimum): Specify EncodingWarning
- # Ignore 3rd party EncodingWarning but raise on pandas'
- "ignore:.*encoding.* argument not specified",
- "error:.*encoding.* argument not specified::pandas",
- "ignore:.*ssl.SSLSocket:pytest.PytestUnraisableExceptionWarning",
- "ignore:.*ssl.SSLSocket:ResourceWarning",
- # GH 44844: Can remove once minimum matplotlib version >= 3.7
- "ignore:.*FileIO:pytest.PytestUnraisableExceptionWarning",
- "ignore:.*BufferedRandom:ResourceWarning",
- "ignore::ResourceWarning:asyncio",
- # From plotting doctests
- "ignore:More than 20 figures have been opened:RuntimeWarning",
- "ignore:.*urllib3:DeprecationWarning:botocore",
- "ignore:Setuptools is replacing distutils.:UserWarning:_distutils_hack",
- # https://github.com/PyTables/PyTables/issues/822
- "ignore:a closed node found in the registry:UserWarning:tables",
- ]
- junit_family = "xunit2"
- markers = [
- "single_cpu: tests that should run on a single cpu only",
- "slow: mark a test as slow",
- "network: mark a test as network",
- "db: tests requiring a database (mysql or postgres)",
- "clipboard: mark a pd.read_clipboard test",
- "arm_slow: mark a test as slow for arm64 architecture",
- # TODO: someone should investigate this ...
- # these tests only fail in the wheel builder and don't fail in regular
- # ARM CI
- "fails_arm_wheels: Tests that fail in the ARM wheel build only",
- ]
- [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._config.config", # TODO
- "pandas._libs.*",
- "pandas._testing.*", # TODO
- "pandas.compat.numpy.function", # TODO
- "pandas.core._numba.executor", # TODO
- "pandas.core.array_algos.masked_reductions", # TODO
- "pandas.core.array_algos.putmask", # TODO
- "pandas.core.array_algos.quantile", # TODO
- "pandas.core.array_algos.replace", # TODO
- "pandas.core.array_algos.take", # TODO
- "pandas.core.arrays.*", # TODO
- "pandas.core.computation.*", # TODO
- "pandas.core.dtypes.astype", # TODO
- "pandas.core.dtypes.cast", # TODO
- "pandas.core.dtypes.common", # TODO
- "pandas.core.dtypes.concat", # TODO
- "pandas.core.dtypes.dtypes", # TODO
- "pandas.core.dtypes.generic", # TODO
- "pandas.core.dtypes.missing", # 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.*", # TODO
- "pandas.core.interchange.column", # TODO
- "pandas.core.interchange.dataframe_protocol", # TODO
- "pandas.core.interchange.from_dataframe", # TODO
- "pandas.core.internals.*", # 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.online", # 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.common", # TODO
- "pandas.core.construction", # TODO
- "pandas.core.flags", # 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.roperator", # TODO
- "pandas.core.sample", # TODO
- "pandas.core.series", # TODO
- "pandas.core.sorting", # TODO
- "pandas.errors", # TODO
- "pandas.io.clipboard", # TODO
- "pandas.io.excel._base", # TODO
- "pandas.io.excel._odfreader", # TODO
- "pandas.io.excel._openpyxl", # TODO
- "pandas.io.excel._pyxlsb", # 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.io.xml", # TODO
- "pandas.plotting.*", # TODO
- "pandas.tests.*",
- "pandas.tseries.frequencies", # TODO
- "pandas.tseries.holiday", # TODO
- "pandas.util._decorators", # TODO
- "pandas.util._doctools", # TODO
- "pandas.util._test_decorators", # TODO
- "pandas.util._validators", # TODO
- "pandas.util", # TODO
- "pandas._version",
- "pandas.conftest",
- "pandas"
- ]
- disallow_untyped_calls = false
- disallow_untyped_defs = false
- disallow_incomplete_defs = false
- [[tool.mypy.overrides]]
- module = [
- "pandas.tests.*",
- "pandas._version",
- "pandas.io.clipboard",
- ]
- check_untyped_defs = false
- [[tool.mypy.overrides]]
- module = [
- "pandas.tests.apply.test_series_apply",
- "pandas.tests.arithmetic.conftest",
- "pandas.tests.arrays.sparse.test_combine_concat",
- "pandas.tests.dtypes.test_common",
- "pandas.tests.frame.methods.test_to_records",
- "pandas.tests.groupby.test_rank",
- "pandas.tests.groupby.transform.test_transform",
- "pandas.tests.indexes.interval.test_interval",
- "pandas.tests.indexing.test_categorical",
- "pandas.tests.io.excel.test_writers",
- "pandas.tests.reductions.test_reductions",
- "pandas.tests.test_expressions",
- ]
- ignore_errors = true
- # 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
- reportOptionalCall = false
- reportOptionalIterable = false
- reportOptionalMemberAccess = false
- reportOptionalOperand = false
- reportOptionalSubscript = false
- reportPrivateImportUsage = false
- reportRedeclaration = false
- reportReturnType = false
- reportUnboundVariable = false
- [tool.coverage.run]
- branch = true
- omit = ["pandas/_typing.py", "pandas/_version.py"]
- plugins = ["Cython.Coverage"]
- source = ["pandas"]
- [tool.coverage.report]
- ignore_errors = false
- show_missing = true
- omit = ["pandas/_version.py"]
- exclude_lines = [
- # Have to re-enable the standard pragma
- "pragma: no cover",
- # Don't complain about missing debug-only code:s
- "def __repr__",
- "if self.debug",
- # Don't complain if tests don't hit defensive assertion code:
- "raise AssertionError",
- "raise NotImplementedError",
- "AbstractMethodError",
- # Don't complain if non-runnable code isn't run:
- "if 0:",
- "if __name__ == .__main__.:",
- "if TYPE_CHECKING:",
- ]
- [tool.coverage.html]
- directory = "coverage_html_report"
- [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/\.])+'
|