content: [build-system]
  requires = ["setuptools >= 77.0.3", "wheel"]
  build-backend = "setuptools.build_meta"
  
  [project]
  name = "autowrap"
  dynamic = ["version"]
  description = "Generates Python Extension modules from commented Cython PXD files"
  readme = "README.md"
  license = "BSD-3-Clause"
  license-files = ["LICENSE"]
  authors = [
      {name = "OpenMS Inc.", email = "webmaster@openms.de"}
  ]
  maintainers = [
      {name = "OpenMS Inc.", email = "webmaster@openms.de"}
  ]
  classifiers = [
      "Development Status :: 3 - Alpha",
      "Intended Audience :: Developers",
      "Operating System :: OS Independent",
      "Programming Language :: Python :: 3",
      "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 :: Software Development :: Code Generators",
  ]
  requires-python = ">=3.9"
  dependencies = [
      "Cython>=0.19",
      "setuptools",
  ]
  
  [project.optional-dependencies]
  dev = [
      "pytest>=6.0",
      "pytest-cov",
      "black",
      "ruff",
      "mypy",
      "build",
      "twine",
  ]
  test = [
      "pytest>=6.0",
      "pytest-cov",
  ]
  
  [project.urls]
  Homepage = "https://github.com/OpenMS/autowrap"
  Repository = "https://github.com/OpenMS/autowrap"
  Documentation = "https://github.com/OpenMS/autowrap/blob/master/docs/README.md"
  Changelog = "https://github.com/OpenMS/autowrap/blob/master/HISTORY.md"
  "Bug Tracker" = "https://github.com/OpenMS/autowrap/issues"
  
  [project.scripts]
  autowrap = "autowrap.Main:main"
  
  [tool.setuptools]
  zip-safe = false
  include-package-data = true
  
  [tool.setuptools.dynamic]
  version = {attr = "autowrap.version.__version__"}
  
  [tool.setuptools.packages.find]
  include = ["autowrap*"]
  exclude = [
      "autowrap.data_files.examples",
      "autowrap.data_files.tests",
      "autowrap.data_files.ez_setup",
  ]
  
  [tool.setuptools.package-data]
  autowrap = ["data_files/**/*"]
  
  # Testing configuration
  [tool.pytest.ini_options]
  minversion = "6.0"
  addopts = "-ra -q --strict-markers"
  testpaths = ["tests"]
  python_files = ["test_*.py", "*_test.py"]
  python_classes = ["Test*"]
  python_functions = ["test_*"]
  
  # Code formatting with black
  [tool.black]
  line-length = 88
  target-version = ['py39']
  include = '\\.pyi?$'
  extend-exclude = '''
  /(
    # Exclude data files and boost headers
    autowrap/data_files
  )/
  '''
  
  # Linting with ruff
  [tool.ruff]
  target-version = "py39"
  line-length = 88
  select = [
      "E",  # pycodestyle errors
      "W",  # pycodestyle warnings
      "F",  # pyflakes
      "I",  # isort
      "B",  # flake8-bugbear
      "C4", # flake8-comprehensions
      "UP", # pyupgrade
  ]
  ignore = [
      "E501",  # line too long, handled by black
      "B008",  # do not perform function calls in argument defaults
      "C901",  # too complex
  ]
  
  [tool.ruff.per-file-ignores]
  "__init__.py" = ["F401"]
  "tests/*" = ["F401", "F811"]
  
  [tool.ruff.isort]
  known-first-party = ["autowrap"]
  
  # Type checking with mypy
  [tool.mypy]
  python_version = "3.9"
  warn_return_any = true
  warn_unused_configs = true
  disallow_untyped_defs = true
  disallow_incomplete_defs = true
  check_untyped_defs = true
  disallow_untyped_decorators = true
  no_implicit_optional = true
  warn_redundant_casts = true
  warn_unused_ignores = true
  warn_no_return = true
  warn_unreachable = true
  strict_equality = true
  
  [[tool.mypy.overrides]]
  module = "tests.*"
  disallow_untyped_defs = false
  disallow_incomplete_defs = false
  
  # Coverage reporting
  [tool.coverage.run]
  source = ["autowrap"]
  omit = [
      "autowrap/data_files/*",
      "tests/*",
  ]
  
  [tool.coverage.report]
  exclude_lines = [
      "pragma: no cover",
      "def __repr__",
      "if self.debug:",
      "if settings.DEBUG",
      "raise AssertionError",
      "raise NotImplementedError",
      "if 0:",
      "if __name__ == .__main__.:",
      "class .*\\bProtocol\\):",
      "@(abc\\.)?abstractmethod",
  ]
  