content: [build-system]
  requires = ["hatchling", "hatch-vcs"]
  build-backend = "hatchling.build"
  
  [project]
  name = "mne-bids-pipeline"
  # Keep in sync with README.md:
  description = "A full-flegded processing pipeline for your MEG and EEG data"
  readme = "README.md"
  requires-python = ">=3.10"
  license = { file = "LICENSE.txt" }
  keywords = ["science", "neuroscience", "psychology"]
  authors = [
    { name = "Eric Larson" },
    { name = "Alexandre Gramfort" },
    { name = "Mainak Jas" },
    { name = "Richard Höchenberger", email = "richard.hoechenberger@gmail.com" },
  ]
  classifiers = [
    "Intended Audience :: Science/Research",
    "Programming Language :: Python",
  ]
  dependencies = [
    "psutil",               # for joblib
    "packaging",
    "numpy",
    "scipy",
    "matplotlib",
    "nibabel",
    "joblib >= 0.14",
    "threadpoolctl",
    "dask[distributed]",
    "bokeh",            # for distributed dashboard
    "jupyter-server-proxy", # to have dask and jupyter working together
    "scikit-learn",
    "pandas",
    "pyarrow",              # from pandas
    "seaborn",
    "json_tricks",
    "pydantic >= 2.0.0",
    "annotated-types",
    "rich",
    "python-picard",
    "qtpy",
    "pyvista",
    "pyvistaqt",
    "openpyxl",
    "autoreject",
    "mne[hdf5] >=1.7",
    "mne-bids[full]",
    "filelock",
    "meegkit"
  ]
  dynamic = ["version"]
  
  [project.optional-dependencies]
  tests = [
    "pytest",
    "pytest-cov",
    "pooch",
    "psutil",
    "ruff",
    "jinja2",
    "openneuro-py >= 2022.2.0",
    "httpx >= 0.20",
    "tqdm",
    "Pygments",
    "pyyaml",
  ]
  docs = [
    "mkdocs",
    "mkdocs-material >= 9.0.4",
    "mkdocs-material-extensions",
    "mkdocs-macros-plugin",
    "mkdocs-include-markdown-plugin",
    "mkdocs-exclude",
    "mkdocstrings-python",
    "mike",
    "livereload",
    "black",                          # docstring reformatting
  ]
  
  [project.scripts]
  mne_bids_pipeline = "mne_bids_pipeline._main:main"
  
  [project.urls]
  homepage = "https://mne.tools/mne-bids-pipeline"
  repository = "https://github.com/mne-tools/mne-bids-pipeline"
  changelog = "http://mne.tools/mne-bids-pipeline/changes.html"
  
  [tool.hatch.version]
  source = "vcs"
  raw-options = { version_scheme = "release-branch-semver" }
  
  [tool.hatch.build]
  exclude = [
    "/.*",
    "/codecov.yml",
    "**/tests",
    "/docs",
    "/docs/source/examples/gen_examples.py", # specify explicitly because its exclusion is negated in .gitignore
    "/Makefile",
    "/CONTRIBUTING.md",
    "ignore_words.txt",
  ]
  
  [tool.codespell]
  skip = "docs/site/*,*.html,steps/freesurfer/contrib/*"
  ignore-words = "ignore_words.txt"
  builtin = "clear,rare,informal,names,usage"
  quiet-level = 3
  interactive = 3
  enable-colors = ""
  count = ""
  
  [tool.pytest.ini_options]
  addopts = "-ra -vv --tb=short --cov=mne_bids_pipeline --cov-report= --junit-xml=junit-results.xml --durations=10"
  testpaths = ["mne_bids_pipeline"]
  junit_family = "xunit2"
  
  [tool.ruff]
  exclude = ["**/freesurfer/contrib", "dist/", "build/", "**/.*cache"]
  
  [tool.ruff.lint]
  select = ["A", "B006", "D", "E", "F", "I", "W", "UP", "TID252"]
  ignore = [
    "D104", # Missing docstring in public package
  ]
  
  [tool.ruff.lint.per-file-ignores]
  "mne_bids_pipeline/typing.py" = ["A005"]
  
  [tool.ruff.lint.pydocstyle]
  convention = "numpy"
  
  [tool.mypy]
  ignore_errors = false
  scripts_are_modules = true
  disable_error_code = [
    # For libraries like matplotlib that we don't have types for
    "import-not-found",
    "import-untyped",
  ]
  strict = true
  modules = ["mne_bids_pipeline", "docs.source"]
  
  [[tool.mypy.overrides]]
  module = ["mne_bids_pipeline.steps.freesurfer.contrib.*"]
  ignore_errors = true  # not our code, don't validate
  
  [[tool.mypy.overrides]]
  module = ["mne_bids_pipeline.tests.*"]
  disable_error_code = [
    "misc",  # Untyped decorator makes function "test_all_functions_return" untyped
  ]
  
  [[tool.mypy.overrides]]
  module = ['mne_bids_pipeline.tests.configs.*']
  disable_error_code = [
    "assignment",  # Incompatible types in assignment
    "var-annotated",  # Need type annotation for "plot_psd_for_runs"
  ]
  