content: [build-system]
  build-backend = 'setuptools.build_meta'
  requires = ['setuptools >= 64.0.0']
  
  [project]
  classifiers = [
    'Intended Audience :: Developers',
    'Intended Audience :: Science/Research',
    'License :: OSI Approved :: BSD License',
    'Natural Language :: English',
    'Operating System :: MacOS',
    'Operating System :: Microsoft :: Windows',
    'Operating System :: Unix',
    'Programming Language :: Python :: 3 :: Only',
    'Programming Language :: Python :: 3.10',
    'Programming Language :: Python :: 3.11',
    'Programming Language :: Python :: 3.12',
    'Programming Language :: Python :: 3.13',
    'Programming Language :: Python :: 3.14',
    'Topic :: Scientific/Engineering',
    'Topic :: Software Development',
  ]
  dependencies = [
    'mne >= 1.2',
    'numpy >= 1.21',
    'packaging',
    'pooch',
    'psutil',
    'scipy >= 1.4.0',
  ]
  description = 'MNE-ICALabel: Automatic labeling of ICA components from MEG, EEG and iEEG data with MNE.'
  keywords = [
    'eeg',
    'ica',
    'ieeg',
    'meg',
    'neuroscience',
  ]
  license = {file = 'LICENSE'}
  maintainers = [
    {email = 'adam.li@columbia.edu', name = 'Adam Li'},
    {email = 'mathieu.scheltienne@gnail.com', name = 'Mathieu Scheltienne'},
  ]
  name = 'mne-icalabel'
  readme = 'README.md'
  requires-python = '>=3.10'
  version = "0.9.0.dev0"
  
  [project.optional-dependencies]
  all = [
    'mne-icalabel[build]',
    'mne-icalabel[doc]',
    'mne-icalabel[gui]',
    'mne-icalabel[ica]',
    'mne-icalabel[onnx]',
    'mne-icalabel[stubs]',
    'mne-icalabel[style]',
    'mne-icalabel[test]',
    'mne-icalabel[torch]',
  ]
  build = [
    'build',
    'twine',
  ]
  doc = [
    'memory-profiler',
    'mne-icalabel[gui]',
    'mne-icalabel[ica]',
    'mne-icalabel[onnx]',
    'numpydoc',
    'pydata-sphinx-theme==0.14.1',
    'PyQt6',
    'sphinx',
    'sphinx-copybutton',
    'sphinx-design',
    'sphinx-gallery',
    'sphinx-issues',
    'sphinxcontrib-bibtex',
  ]
  full = [
    'mne-icalabel[all]',
  ]
  gui = [
    'matplotlib',
    'mne-qt-browser>=0.6.0',
    'qtpy',
  ]
  ica = [
    'joblib',
    'python-picard',
    'scikit-learn',
  ]
  onnx = [
    'onnxruntime',
  ]
  stubs = [
    'isort',
    'mne-icalabel[gui]',
    'mne-icalabel[onnx]',
    'mne-icalabel[torch]',
    'mypy',
    'PyQt6',
    'ruff>=0.6.0',
  ]
  style = [
    'bibclean',
    'codespell[toml]>=2.2.4',
    'ruff>=0.6.0',
    'toml-sort',
    'yamllint',
  ]
  test = [
    'mne-bids>=0.14',
    'mne-icalabel[gui]',
    'mne-icalabel[ica]',
    'mne-icalabel[onnx]',
    'mne-icalabel[torch]',
    'pandas',
    'pymatreader',
    'PyQt6',
    'pytest-cov',
    'pytest>=8.0.0',
  ]
  torch = [
    'torch',
  ]
  
  [project.scripts]
  mne_gui_ic_annotation = 'mne_icalabel.commands.mne_gui_ic_annotation:main'
  mne_icalabel-sys_info = 'mne_icalabel.commands.sys_info:run'
  
  [project.urls]
  documentation = 'https://mne.tools/mne-icalabel'
  source = 'https://github.com/mne-tools/mne-icalabel'
  tracker = 'https://github.com/mne-tools/mne-icalabel/issues'
  
  [tool.codespell]
  check-filenames = true
  check-hidden = true
  ignore-words = '.codespellignore'
  skip = 'build,.git,.mypy_cache,.pytest_cache'
  
  [tool.coverage.report]
  exclude_lines = [
    'if __name__ == .__main__.:',
    'if TYPE_CHECKING:',
    'pragma: no cover',
  ]
  precision = 2
  
  [tool.coverage.run]
  branch = true
  cover_pylib = false
  omit = [
    '**/__init__.py',
    '**/mne_icalabel/_version.py',
    '**/mne_icalabel/commands/*',
    '**/mne_icalabel/conftest.py',
    '**/mne_icalabel/utils/_fixes.py',
    '**/tests/**',
  ]
  
  [tool.mypy]
  ignore_missing_imports = true
  no_site_packages = true
  
  [tool.pytest.ini_options]
  addopts = '--durations 20 --junit-xml=junit-results.xml -v --color=yes'
  junit_family = 'xunit2'
  minversion = '8.0'
  
  [tool.ruff]
  extend-exclude = []
  line-length = 88
  
  [tool.ruff.format]
  docstring-code-format = true
  
  [tool.ruff.lint]
  ignore = []
  select = ['A', 'B', 'D', 'E', 'F', 'G', 'I', 'LOG', 'NPY', 'PIE', 'PT', 'T20', 'UP', 'W']
  
  [tool.ruff.lint.per-file-ignores]
  '*' = [
    'B904', # 'Within an except clause, raise exceptions with raise ... from ...'
    'D100', # 'Missing docstring in public module'
    'D104', # 'Missing docstring in public package'
    'D107', # 'Missing docstring in __init__'
  ]
  '*.pyi' = ['E501']
  '__init__.py' = ['F401']
  'examples/*' = ['B018', 'D205', 'D400', 'T201']
  'tutorials/*' = ['B018', 'D205', 'D400', 'T201']
  
  [tool.ruff.lint.pydocstyle]
  convention = 'numpy'
  ignore-decorators = ["mne_icalabel.utils._docs.copy_doc"]
  
  [tool.setuptools]
  include-package-data = false
  
  [tool.setuptools.package-data]
  'mne_icalabel.iclabel.network' = ['assets/*']
  'mne_icalabel.megnet' = ['assets/*']
  
  [tool.setuptools.packages.find]
  exclude = ['mne_icalabel*tests']
  include = ['mne_icalabel*']
  
  [tool.tomlsort]
  all = true
  ignore_case = true
  trailing_comma_inline_array = true
  