content: # Project meta information
  
  [project]
  name = 'MPh'
  authors = [{name='John Hennig'}]
  version = '1.2.4'
  description = 'Pythonic scripting interface for Comsol Multiphysics'
  keywords = [
      'Comsol',
      'multiphysics',
      'physics',
      'finite elements',
      'computer simulation',
  ]
  classifiers = [
      'Development Status :: 5 - Production/Stable',
      'Topic :: Scientific/Engineering :: Physics',
      'Intended Audience :: Science/Research',
  ]
  license = 'MIT'
  license-files = ['license.txt']
  readme = 'PyPI.md'
  
  requires-python = '>= 3.6'
  dependencies = [
      'JPype1',
      'NumPy',
  ]
  
  [dependency-groups]
  test = [
      'pyTest     >= 8',
      'pyTest-cov >= 6',
      'Ruff       >= 0.11',
  ]
  docs = [
      'Sphinx      >= 8.2',
      'MyST-parser >= 1',
      'Furo        >= 2024',
  ]
  dev = [
      {include-group = 'test'},
      {include-group = 'docs'},
  ]
  
  [project.urls]
  Documentation = 'https://mph.readthedocs.io'
  Source        = 'https://github.com/MPh-py/MPh'
  
  
  # Build backend: Flit
  
  [build-system]
  requires      = ['flit_core >= 3.11']
  build-backend = 'flit_core.buildapi'
  
  [tool.flit.module]
  name = 'mph'
  
  
  # Code linter: Ruff
  
  [tool.ruff]
  line-length    = 79
  indent-width   = 4
  target-version = 'py37'
  include = ['mph/**/*.py', 'tests/**/*.py', 'pyproject.toml']
  
      [tool.ruff.format]
      # The project does not actually use the Ruff formatter (only the linter),
      # but these settings would be used if it did.
      quote-style = 'single'
      line-ending = 'cr-lf'
  
      [tool.ruff.lint]
      preview = true
      select = [
          'F',                  # basic linter rules
          'E',                  # code style errors
          'W',                  # code style warnings
          'B',                  # possible bugs
          'C4',                 # correct comprehensions
          'FA',                 # future annotations
          'PIE',                # miscellaneous lints
          'ARG',                # unused function arguments
          'RSE',                # raised exceptions
          'Q',                  # quotation marks
          'SIM',                # simplifiable code
          'PT',                 # pyTest style
          'PTH',                # pathlib use mandatory
          'ERA',                # commented-out code
          'T10',                # debugger calls
          'UP',                 # upgradable code
          'RUF100',             # unnecessary `noqa` directives
      ]
      ignore = [
          'E201',               # whitespace after (
          'E221',               # missing whitespace before operator
          'E226',               # missing whitespace around operator
          'E231',               # missing whitespace after ','
          'E241',               # multiple spaces after comma
          'E251',               # unexpected spaces around keyword equals
          'E272',               # multiple spaces before keyword
          'B017',               # asserting blind `Exception`
          'B028',               # warning issued without `stacklevel` keyword
          'C416',               # list comprehension instead of `list()`
          'SIM103',             # Return the boolean condition directly.
          'SIM105',             # Use `contextlib.suppress(Exception)` instead.
          'SIM108',             # ternary operator instead of if-else
          'PT011',              # `pytest.raises(ValueError)` too broad
          'PT012',              # `pytest.raises()` with multiple statements
          'PT013',              # incorrect pytest import
          'PTH201',             # Never use `Path('.')`.
          'UP021',              # `universal_newlines` instead of `text`
          'UP022',              # `PIPE` instead of `capture_output`
          'UP024',              # Replace `IOError` with `OSError`.
      ]
  
      [tool.ruff.lint.per-file-ignores]
      '__init__.py' = [
          'F401',               # imported but unused
      ]
  
      [tool.ruff.lint.flake8-quotes]
      inline-quotes    = 'single'
      multiline-quotes = 'double'
      docstring-quotes = 'double'
      avoid-escape     = true
  
  
  # Test runner: pyTest
  
  [tool.pytest.ini_options]
  addopts   = '--verbose'
  testpaths = ['tests']
  
  
  # Code coverage: Coverage.py
  
  [tool.coverage.run]
  source = ['mph/']
  omit   = ['mph/discovery.py']  # Ignore platform-dependent discovery mechanism.
  relative_files = true
  
  [tool.coverage.report]
  exclude_lines = [
      'pragma: no cover',
      'def location',           # Ignore platform-dependent configuration search.
  ]
  