content: [build-system]
  requires = [
    "poetry-core>=1.8.0",
    "poetry-dynamic-versioning>=1.9.1,<2.0",
    # list dependencies to work with PIP_NO_DEPS=1
    "MarkupSafe>=2.0",
    "dunamai>=1.25,<2.0",
    "jinja2>=3.0,<4.0",
    "packaging>=24.0",
    "tomlkit>=0.13",
  ]
  build-backend = "poetry_dynamic_versioning.backend"
  
  [project]
  name = "geoh5py"
  requires-python = ">=3.10,<4.0"
  
  
  description = "Python API for geoh5, an open file format for geoscientific data"
  license = "LGPL-3.0-or-later"
  keywords = ["geology", "geophysics", "data", "interoperability"]
  readme = "package.rst"
  dynamic = ["version", "dependencies", "classifiers"]
  authors = [
      { name = "Mira Geoscience", email = "support@mirageoscience.com" }
  ]
  maintainers = [
      { name = "Benjamin Kary", email = "benjamink@mirageoscience.com" },
      { name = "Dominique Fournier", email = "dominiquef@mirageoscience.com" },
      { name = "Matthieu Cedou", email = "matthieuc@mirageoscience.com" }
  ]
  
  [project.urls]
  homepage = "https://www.mirageoscience.com/mining-industry-software/python-integration/"
  repository = "https://github.com/MiraGeoscience/geoh5py"
  documentation = "https://mirageoscience-geoh5py.readthedocs-hosted.com/"
  
  [tool.poetry]
  requires-poetry = '>=2.0,<3.0'
  
  classifiers = [
      "Development Status :: 4 - Beta",
      "Intended Audience :: Science/Research",
      "Intended Audience :: Developers",
      "Natural Language :: English",
      "Topic :: Database",
      "Topic :: Scientific/Engineering",
      "Topic :: Scientific/Engineering :: Mathematics",
      "Topic :: Scientific/Engineering :: Physics",
      "Topic :: Software Development :: Libraries :: Python Modules"
  ]
  
  exclude = ["geoh5py/handlers/*", "geoh5py/interfaces/*"]
  
  include = [
      { path = "COPYING" },
      { path = "COPYING.LESSER" },
      { path = "LICENSE" },
      { path = "README.rst" },
      { path = "THIRD_PARTY_SOFTWARE.rst" },
      { path = "docs/**/THIRD_PARTY_SOFTWARE.rst" },
  ]
  version = "0.0.0.dev0"
  
  [tool.poetry.dependencies]
  h5py = "^3.2.1"
  numpy = "~1.26.0"
  Pillow = "~10.3.0"
  pydantic = "^2.5.2"
  
  [tool.poetry.group.dev.dependencies]
  jinja2 = '*'
  lockfile = "^0.12.2"
  packaging = '*'
  Pygments = "*"
  pylint = "^3.3.8"
  pytest = "*"
  pytest-cov = "*"
  pyyaml = '*'
  scipy = "~1.14.0"
  sphinx = "^3.0"
  sphinx-autodoc-typehints = "^1.10"
  sphinx-rtd-theme = "^0.4.3"
  tomli = "*"
  h5py = "^3.14.0"
  
  [tool.poetry.requires-plugins]
  poetry-dynamic-versioning = { version = ">=1.9.1,<2.0.0", extras = ["plugin"] }
  
  [tool.poetry-dynamic-versioning]
  bump = true
  enable = true
  fix-shallow-repository = true
  strict = true
  style = "pep440"
  vcs = "git"
  
  [tool.poetry-dynamic-versioning.substitution]
  files = ["geoh5py/_version.py", "recipe.yaml"]
  patterns = [
      { value = '''(^__version__\s*(?::.*?)?=\s*['"])[^'"]*(['"])''', mode = "str" },
      { value = '''(^\s*version\s*(?::.*?)?:\s*['"])[^'"]*(['"])''', mode = "str" },
  ]
  
  [tool.poetry-dynamic-versioning.files."geoh5py/_version.py"]
  persistent-substitution = true
  initial-content = """
    # Version placeholder that will be replaced during substitution
    __version__ = "0.0.0"
  """
  
  [tool.poetry-dynamic-versioning.files."recipe.yaml"]
  persistent-substitution = true
  
  [tool.ruff]
  target-version = "py310"
  
  [tool.ruff.lint]
  ignore = [
      "B028",  # no-explicit-stacklevel for warnings.warn()
      "E501",  # line-too-long - code is reformatted (do not care about comments and docstring)
      "F401",  # unsused-import - covered by pycln
      "TID252", # TODO
      "RUF012", # TODO
      "UP031", # TODO
      "UP038", # TODO
      "RUF001", # TODO
      "RUF003", # TODO
      "RUF005",  # collection-literal-concatenation - wrong suggestion with numpy arrays
      "RUF015", # TODO
      "B008", # TODO
      "B018", # TODO
      "B024", # TODO
      "B027", # TODO
      "E721", # TODO
      "C409", # TODO
  ]
  select = [
      "A",  # flake8-builtins
      "B",  # flake8-bugbear
      "B006",  # Do not use mutable data structures for argument defaults
      "B9",  # flake8-bugbear opiniated warnings
      "BLE",  # flake8-blind-except
      "C4",  # flake8-comprehensions
      "C9",  # mccabe
      "E",  # pycodestyle errors
      "F",  # pyflakes
      "I",  # isort
      "RUF",  # ruff rules
      "TID", # flake8-tidy-imports
      "UP",  # pyupgrade
      "W",  # pycodestyle warnings
  ]
  
  [tool.ruff.lint.mccabe]
  max-complexity = 18
  
  [tool.ruff.lint.isort]
  lines-after-imports = 2
  
  [tool.ruff.format]
  # default formatting is just fine
  
  [tool.mypy]
  warn_unused_configs = true
  ignore_missing_imports = true
  scripts_are_modules = true
  show_error_context = true
  show_column_numbers = true
  check_untyped_defs = true
  
  plugins = [
  #    "numpy.typing.mypy_plugin",
      "pydantic.mypy"
  ]
  
  [tool.coverage.run]
  branch = true
  source = ["geoh5py"]
  omit = [
      "geoh5py/handlers/*",
      "geoh5py/interfaces/*"
  ]
  
  [tool.coverage.report]
  exclude_lines = [
      "raise NotImplementedError",
      "pass",
      "if TYPE_CHECKING",
      "pragma: no cover"
  ]
  
  fail_under = 90
  
  [tool.coverage.html]
  skip_empty = true
  skip_covered = true
  