[project] name = "reproject" authors = [ {name = "Thomas Robitaille"}, {name = "Christoph Deil"}, {name = "Adam Ginsburg"}, {name = "Stuart Mumford"}, {name = "Sam Van Kooten"} ] license = {text = "BSD 3-Clause"} description = "Reproject astronomical images" urls = {Homepage = "https://reproject.readthedocs.io"} requires-python = ">=3.11" dependencies = [ "numpy>=1.23", "astropy>=5.0", "astropy-healpix>=1.0", "scipy>=1.9", "dask[array]>=2024.4.1", "dask-image>=2025.11.0", "zarr>=2.17.0", "fsspec>=2021.9", "pillow>=10.0", "pyavm>=0.9.6", ] dynamic = ["version"] [project.readme] file = "README.rst" content-type = "text/x-rst" [project.optional-dependencies] all = ["shapely"] test = [ "pytest-astropy", "pytest-xdist", "tqdm", ] testall = [ "shapely>=2.0.2", # 2.0.2 fixed a bug that causes changes in test results "sunpy[map]>=6.0.1", "asdf", "gwcs", "pyvo", ] docs = [ "sphinx-astropy[confv3]>=1.11", "pyvo", "matplotlib", "tqdm", ] [dependency-groups] dev = [ "reproject[test]" ] [build-system] requires = ["setuptools", "setuptools_scm", "extension-helpers>=1.4,<2", "numpy>=2", "cython>=3.1"] build-backend = 'setuptools.build_meta' [tool.setuptools] zip-safe = false license-files = ["LICENSE"] include-package-data = false [tool.setuptools.packages] find = {namespaces = false} [tool.setuptools.package-data] "reproject.healpix.tests" = ["data/*"] "reproject.adaptive.tests" = ["reference/*"] "reproject.interpolation.tests" = ["reference/*"] "reproject.mosaicking.tests" = ["reference/*"] "reproject.spherical_intersect" = ["overlapArea.h", "reproject_slice_c.h", "mNaN.h"] "reproject.tests" = ["data/*"] [tool.extension-helpers] use_extension_helpers = "true" [tool.pytest.ini_options] minversion = "6" log_cli_level = "INFO" log_level = "INFO" xfail_strict = true testpaths = ['"reproject"', '"docs"'] norecursedirs = ["build", "docs/_build"] astropy_header = true doctest_plus = "enabled" text_file_format = "rst" addopts = ["-ra", "--strict-config", "--strict-markers", "--doctest-rst", "--arraydiff", "--arraydiff-default-format=fits", "--doctest-ignore-import-errors"] filterwarnings = [ "error", 'ignore:numpy\.ufunc size changed:RuntimeWarning', 'ignore:numpy\.ndarray size changed:RuntimeWarning', "ignore:distutils Version classes are deprecated:DeprecationWarning", "ignore:No observer defined on WCS:astropy.utils.exceptions.AstropyUserWarning", "ignore:unclosed file:ResourceWarning", "ignore:The conversion of these 2D helioprojective coordinates to 3D is all NaNs", # This is a sunpy < 4.1 issue with Python 3.11 "ignore:'xdrlib' is deprecated and slated for removal in Python 3.13", # This is a pyvo issue with Python 3.11 "ignore:'cgi' is deprecated and slated for removal in Python 3.13", # Issue with zarr and dask mismatch "ignore:ignoring keyword argument 'read_only'" ] [tool.coverage.run] omit = [ "reproject/_astropy_init*", "reproject/conftest.py", "reproject/*setup_package*", "reproject/tests/*", "reproject/*/tests/*", "reproject/extern/*", "reproject/version*", "*/reproject/_astropy_init*", "*/reproject/conftest.py", "*/reproject/*setup_package*", "*/reproject/tests/*", "*/reproject/*/tests/*", "*/reproject/extern/*", "*/reproject/version*", ] [tool.coverage.report] exclude_lines = [ # Have to re-enable the standard pragma "pragma: no cover", # Don't complain about packages we have installed "except ImportError", # Don't complain if tests don't hit assertions "raise AssertionError", "raise NotImplementedError", # Don't complain about script hooks 'def main\(.*\):', # Ignore branches that don't pertain to this version of Python "pragma: py{ignore_python_version}", # Don't complain about IPython completion helper "def _ipython_key_completions_", ] [tool.flake8] max-line-length = "100" [tool.setuptools_scm] write_to = "reproject/version.py" [tool.cibuildwheel] skip = "cp36-* pp* *-musllinux* cp31?t-*" test-skip = "*-manylinux_aarch64" environment-pass = ["EXTENSION_HELPERS_PY_LIMITED_API"] [tool.isort] profile = "black" multi_line_output = 3 extend_skip_glob = [ "docs/*", "setup.py"] line_length = 100 known_third_party = ["astropy"] known_first_party = ["reproject"] group_by_package = true indented_import_headings = false length_sort_sections = ["future", "stdlib"] [tool.black] line-length = 100 target-version = ['py38'] [tool.numpydoc_validation] checks = [ "all", # report on all checks, except the below "EX01", "SA01", "SS06", "ES01", "GL08", ] [tool.repo-review] ignore = [ "MY", # ignore MyPy setting checks "PC111", # ignore using `blacken-docs` in pre-commit "PC140", # ignore using `mypy` in pre-commit "PC180", # ignore using `prettier` in pre-commit "PC901", # ignore using custom update message (we have many of the default ones in our history already) "PC170", # ignore using pygrep "PY005", # ignore having a tests/ folder ] [tool.ruff] lint.select = [ "B", # flake8-bugbear "I", # isort "UP", # pyupgrade "F", # pyflakes ] [tool.ruff.lint.extend-per-file-ignores] "docs/conf.py" = ["F405"] # Sphinx injects variables into namespace