content: [build-system]
  requires = ["setuptools >= 62", "wheel", "setuptools_scm[toml] >= 6.2"]
  
  [project]
  name = "sdr"
  authors = [{ name = "Matt Hostetter", email = "matthostetter@gmail.com" }]
  description = "A Python package for software-defined radio"
  readme = "README.md"
  license = { text = "MIT" }
  keywords = [
      "software-defined radio",
      "sdr",
      "digital communications",
      "wireless communications",
      "digital signal processing",
      "dsp",
      "modulation",
      "demodulation",
      "modem",
      "forward error correction",
      "numpy",
  ]
  classifiers = [
      "Development Status :: 3 - Alpha",
      "Intended Audience :: Developers",
      "Intended Audience :: Education",
      "Intended Audience :: Science/Research",
      "Intended Audience :: Telecommunications Industry",
      "License :: OSI Approved :: MIT License",
      "Operating System :: MacOS :: MacOS X",
      "Operating System :: Microsoft :: Windows",
      "Operating System :: POSIX :: Linux",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3 :: Only",
      "Programming Language :: Python :: 3.8",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
      "Topic :: Scientific/Engineering :: Mathematics",
      "Topic :: Security :: Cryptography",
      "Topic :: Software Development :: Libraries :: Python Modules",
      "Typing :: Typed",
  ]
  requires-python = ">=3.8"
  dependencies = [
      "numpy",                      # Use galois's version limitation
      "numba",                      # Use galois's version limitation
      "scipy",
      "matplotlib",
      "galois == 0.4.4",            # Exact match required because of use of internals
      "typing_extensions >= 4.0.0", # v4.0.0 is needed for use of Self (Python 3.11+) and Literal (Python 3.8+)
  ]
  dynamic = ["version"]
  
  [project.urls]
  Homepage = "https://github.com/mhostetter/sdr"
  Source = "https://github.com/mhostetter/sdr"
  Issues = "https://github.com/mhostetter/sdr/issues"
  Documentation = "https://mhostetter.github.io/sdr/latest/"
  Discuss = "https://github.com/mhostetter/sdr/discussions"
  # Changelog = "https://mhostetter.github.io/sdr/latest/release-notes/versioning/"
  Twitter = "https://twitter.com/sdr_py"
  
  [tool.setuptools_scm]
  write_to = "src/sdr/_version.py"
  
  [tool.setuptools.packages.find]
  where = ["src"]
  
  [tool.setuptools.package-data]
  "sdr" = ["py.typed"]
  # "sdr._databases" = ["*.db"]
  
  [tool.distutils.bdist_wheel]
  universal = false
  
  [tool.ruff]
  src = ["src"]
  extend-include = ["*.ipynb"]
  extend-exclude = ["build", "dist", "src/sdr/_version.py"]
  line-length = 120
  
  [tool.ruff.lint]
  exclude = ["docs/*"]
  select = [
      "E",  # pycodestyle errors
      "W",  # pycodestyle warnings
      "F",  # pyflakes
      "UP", # pyupgrade
      "B",  # flake8-bugbear
      # "SIM", # flake8-simplify
      "DTZ", # flake8-datetimez
      "D",   # pydocstyle
      "I",   # isort
      "PL",  # pylint
      "NPY", # numpy rules
      # "RUF", # ruff rules
      "PERF", # perflint
  ]
  ignore = [
      "D200",    # fits-on-one-line
      "D205",    # blank-line-after-summary
      "D212",    # multi-line-summary-first-line
      "E501",    # line-too-long
      "E713",    # not-in-test
      "E714",    # not-is-test
      "PLR2004", # magic-value-comparison
      "PLR0913", # too-many-arguments
      "PLR5501", # collapsible-else-if
      "PLR0912", # too-many-branches
      "PLR0915", # too-many-statements
      "PLW0603", # global-statement
      "UP006",   # non-pep585-annotation, type[FieldArray] renders wrong in docs
  ]
  extend-select = [
      "D213", # multi-line-summary-second-line
  ]
  
  [tool.ruff.lint.per-file-ignores]
  "__init__.py" = ["F401", "F403"]
  "tests/*" = ["D", "D415"]
  
  [tool.ruff.lint.pydocstyle]
  convention = "google"
  
  [tool.pytest.ini_options]
  minversion = "6.2"
  addopts = "-s --showlocals"
  testpaths = ["tests"]
  
  [tool.coverage.report]
  exclude_lines = [
      "@overload",
      "if TYPE_CHECKING:",
      "pragma: no cover",
      "raise AssertionError",
      "raise NotImplementedError",
      "raise RuntimeError",
  ]
  omit = ["*/plot/*"]
  