[build-system] requires = ["setuptools>=65", "wheel", "setuptools_scm>=8.1", "numpy", "cython>=3.0"] build-backend = "setuptools.build_meta" [project] name = "pyuvdata" authors = [ {name = "Bryna Hazelton", email = "brynah@phys.washington.edu"}, {name = "Adam Beardsley", email = "adam.beardsley@winona.edu"}, {name = "Daniel Jacobs", email = "daniel.c.jacobs@gmail.com"}, {name = "Garrett Keating", email = "garrett.keating@cfa.harvard.edu"}, {name = "Nicholas Kern", email = "nkern@mit.edu"}, {name = "Matthew Kolopanis", email = "matthew.kolopanis@gmail.com"}, {name = "Adam Lanman", email = "alanman@mit.edu"}, {name = "Paul La Plante", email = "paul.laplante@unlv.edu"}, {name = "Steven Murray", email = "murray.steveng@gmail.com"}, {name = "Jonathan Pober", email = "jonathan_pober@brown.edu"}, {name = "Pyxie Star", email = "pyxiestar@gmail.com"}, ] maintainers = [ {name = "Bryna Hazelton", email = "brynah@phys.washington.edu"}, {name = "Matthew Kolopanis", email = "matthew.kolopanis@gmail.com"}, {name = "Garrett Keating", email = "garrett.keating@cfa.harvard.edu"}, {name = "Steven Murray", email = "murray.steveng@gmail.com"}, ] description = "A pythonic interface for radio astronomy interferometry data" readme = "README.md" dynamic = ["version"] dependencies = [ "astropy>=6.0", "docstring-parser>=0.15", "h5py>=3.7", "numba>=0.57.0", "numpy>=1.23", "pyerfa>=2.0.1.1", "pyyaml>=5.4.1", "scipy>=1.9", "setuptools_scm>=8.1", ] requires-python = ">=3.11" keywords = ["radio astronomy", "interferometry"] classifiers = [ "License :: OSI Approved :: BSD License", "Development Status :: 5 - Production/Stable", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Scientific/Engineering :: Astronomy", ] [project.optional-dependencies] astroquery = ["astroquery>=0.4.4"] casa = ["python-casacore>=3.5.2", "numpy>=1.23,<2.0"] hdf5_compression = ["hdf5plugin>=3.3.1"] healpix = ["astropy_healpix>=1.0.2"] lunar = ["lunarsky>=0.2.5"] novas = ["novas", "novas_de405"] plotting = ["matplotlib>=3.7"] all = ["pyuvdata[astroquery,casa,hdf5_compression,healpix,lunar,novas,plotting]"] tutorial = ["pyuvdata[plotting]", "pooch>=1.8"] test = [ "coverage", "cython>=3.0", "pooch>=1.8", "pre-commit", "pytest>=8.2.0", "pytest-xdist", "pytest-cases>=3.9.1", "pytest-cov", "sybil>=8.0", ] doc = ["pyuvdata[tutorial]", "pypandoc", "sphinx"] dev = ["pyuvdata[all,test,doc]"] [project.urls] Repository = "https://github.com/RadioAstronomySoftwareGroup/pyuvdata" Documentation = "https://pyuvdata.readthedocs.io" # Note that this approach is "discouraged" in favor of [project.scripts], but # that requires entry-point functions, which would require some refactoring. [tool.setuptools] script-files = [ "scripts/check_uvfits_equal.py", "scripts/convert_to_uvfits.py", "scripts/fhd_batch_convert.py", "scripts/pyuvdata_inspect.py", "scripts/readwrite_uvfits.py", "scripts/renumber_ants.py", "scripts/uvfits_memtest.py", ] [tool.setuptools_scm] [tool.pytest.ini_options] testpaths = "tests" addopts = "--ignore=scripts --ignore=docs" [tool.ruff.lint] select = [ "E", # pycodestyle "W", # pycodestyle warnings "F", # Pyflakes "D", # pydocstyle "UP", # pyupgrade "B", # flake8-bugbear "A", # flake8-builtins "C4", # flake8-comprehensions "N", # pep8-naming "SIM", # flake8-simplify "I", # isort # "C90", # McCabe complexity. Consider for the future ] ignore = [ "N806", # non-lowercase variable (we use N* for axes lengths) "B028", # no-explicit-stacklevel for warnings "SIM108", # prefer ternary opperators. I find them difficult to read. "D203", # one-blank-line-before-class. we use two. "D212", # multi-line-summary-first-line. We put it on the second line. ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["D"] # Don't require docstrings for tests "docs/*.py" = ["D", "A"] # Don't require docstrings or worry about builtins for docs "setup.py" = ["D"] # Don't require docstrings for setup.py "src/pyuvdata/utils/coordinates.py" = ["N802"] # non-lowercase function names "tests/utils/test_coordinates.py" = ["N802"] # non-lowercase function names "src/pyuvdata/utils/io/__init__.py" = ["A005"] # shadowing a standard-lib module "tests/utils/io/__init__.py" = ["A005"] # shadowing a standard-lib module [tool.ruff.format] skip-magic-trailing-comma = true [tool.ruff.lint.pycodestyle] max-line-length = 88 # consider setting this in the future # [tool.ruff.lint.mccabe] # max-complexity = 30 [tool.ruff.lint.isort] combine-as-imports = true known-first-party = ["pyuvdata"] split-on-trailing-comma = false [tool.ruff.lint.pydocstyle] convention = "numpy" [tool.bandit.assert_used] skips = ["*/*_test.py", "*/test_*.py"]