content: [tool.poetry]
  name = "geoapps"
  version = "0.12.0"
  license = "MIT"
  description = "Open-sourced Applications in Geoscience"
  authors = ["Mira Geoscience <support@mirageoscience.com>"]
  maintainers = [
      "Benjamin Kary <benjamink@mirageoscience.com>",
      "Dominique Fournier <dominiquef@mirageoscience.com>",
  ]
  repository = "https://github.com/MiraGeoscience/geoapps"
  documentation = "https://mirageoscience-geoapps.readthedocs-hosted.com/"
  homepage = "https://www.mirageoscience.com/mining-industry-software/python-integration/"
  readme = "package.rst"
  
  packages = [
      { include = "geoapps" },
      { include = "geoapps-assets" },
  ]
  exclude = [
      "geoapps-assets/**/*.geoh5",
      "geoapps-assets/uijson/**",
  ]
  
  include = [
      { path = "COPYING" },
      { path = "COPYING.LESSER" },
      { path = "LICENSE" },
      { path = "README.rst" },
      { path = "THIRD_PARTY_SOFTWARE.rst" },
      { path = "docs/**/THIRD_PARTY_SOFTWARE.rst" },
  ]
  
  keywords = ["geology", "geophysics", "earth sciences"]
  classifiers = [
      "Development Status :: 4 - Beta",
      "Intended Audience :: Science/Research",
      "Programming Language :: Python",
      "Topic :: Scientific/Engineering",
      "Topic :: Scientific/Engineering :: Mathematics",
      "Topic :: Scientific/Engineering :: Physics",
      "Operating System :: Microsoft :: Windows",
      "Operating System :: POSIX",
      "Operating System :: Unix",
      "Operating System :: MacOS",
      "Natural Language :: English",
  ]
  
  [tool.poetry.scripts]
  start_notebook = { callable = "geoapps.scripts.start_notebook:main", extras = ["apps"] }
  
  [tool.poetry.dependencies]
  python = "^3.10, < 3.11"
  
  dask = {version = "2024.6.*", extras = ["distributed"]}  # also in simpeg[dask]
  discretize = "0.10.*"  # also in simpeg, octree-creation-app
  distributed = "2024.6.*"  # because conda-lock doesn't take dask extras into account
  fiona = "~1.9.2"
  fsspec = "2022.*"  # also in simpeg
  gdal = "~3.6.3"
  pandas = "~2.2.1"  # also in simpeg
  scikit-image = "~0.20.0"
  scikit-learn = "~1.4.0"  # also in simpeg
  tqdm = "^4.66.1"  # also in las-geoh5
  numpy = "~1.26.0" # also in geoh5py, simpeg
  notebook = "~7.3.2"
  plotly = "~5.19.0"
  pydiso = "0.1.*"  # not imported, but required at runtime for simpeg
  scipy = "~1.14.0"
  
  ## dependencies for UI
  #---------------------
  dash = "~2.12"  # also in geoapps-utils[dash]
  dash-daq = "~0.5.0"
  flask = "~3.0.3"  # also in geoapps-utils[dash]
  ipyfilechooser = "~0.6.0"
  pyqtwebengine = "~5.15.2"  # also in geoapps-utils[dash]
  pyside2 = "~5.15.2"  # also in geoapps-utils[dash]
  
  ## pip dependencies from Git repositories
  #----------------------------------------
  geoh5py = {version = ">=0.10.0rc1, <0.11.0a.dev", source = "pypi", allow-prereleases = true}
  #geoh5py = {git = "https://github.com/MiraGeoscience/geoh5py.git", rev = "release/0.10.0"}
  
  octree-creation-app = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true}
  #octree-creation-app = {git = "https://github.com/MiraGeoscience/octree-creation-app.git", rev = "release/0.2.0"}
  
  geoapps-utils = {version = ">=0.4.0rc1, <0.5.0a.dev", source = "pypi", allow-prereleases = true}
  #geoapps-utils = {git = "https://github.com/MiraGeoscience/geoapps-utils.git", rev = "release/0.4.0"}
  
  mira-simpeg = {version = ">=0.21.2.1rc1, <0.21.2.2a.dev", source="pypi", allow-prereleases = true, extras = ["dask"]}
  #mira-simpeg = {git = "https://github.com/MiraGeoscience/simpeg.git", rev = "release/0.21.2.1", extras = ["dask"]}
  
  param-sweeps = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true}
  #param-sweeps = {git = "https://github.com/MiraGeoscience/param-sweeps.git", rev = "release/0.2.0"}
  
  peak-finder-app = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true}
  
  simpeg-drivers = {version = ">=0.2.0rc1, <0.3.0a.dev", source = "pypi", allow-prereleases = true}
  #simpeg-drivers = {url = "https://github.com/MiraGeoscience/simpeg-drivers/archive/refs/heads/release/0.1.1.zip"}
  #simpeg-drivers = {url = "http://localhost:8888/simpeg-drivers.tar.gz"}
  
  simpeg-archive = {version = "~0.11.0", source = "pypi", allow-prereleases = true}
  #simpeg-archive = {url = "https://github.com/MiraGeoscience/simpeg/archive/refs/heads/feature/simpeg_archive.tar.gz"}
  
  
  ## indirect dependencies, forcing them here for installation through Conda not pip
  #---------------------------------------------------------------------------------
  Pillow = "~10.3.0"  # from geoh5py
  empymod = "~2.2.1"  # from simpeg and geoana
  geoana = ">=0.5.0, <0.6.0"  # from simpeg
  h5py = "^3.2.1"  # from geoh5py
  mkl = "2023.2, <2024.1"  # from simpeg
  properties = "~0.6.0"  # from simpeg-archive
  pydantic = "^2.5.2"  # from geoapps-utils, octrree-creation-app
  pymatsolver = {version = "0.2.*", source = "pypi"}
  zarr = "~2.14.2"  # from simpeg[dask], simpeg-drivers
  
  # force some versions to resolve incompatible resolution between PyPI and Conda
  #-------------------------------------------------------------------------------
  tzdata = "2023.4"  # through pandas from SimPEG (constraint copied from simpeg-drivers)
  tbb = { version = "2021.12.*", source = "pypi" }  # through mkl from SimPEG
  
  ## about pip dependencies
  # to be specified to work with conda-lock
  # - from PyPI: my_package = { version = "1.2.3", source = "pypi" }
  # - from URL: !!! no actual lock, as tag or branch can move and installation will fetch current !!!
  #   - for a tag:   my_package = { url = "https://github.com/ORGANISATION/REPO/archive/refs/tags/TAG.tar.gz" }
  #   - for a branch: my_package = { url = "https://github.com/ORGANISATION/REPO/archive/refs/heads/BRANCH.tar.gz" }
  # - to actually lock on a revision: my_package = { git = "https://github.com/ORGANISATION/REPO.git", rev = "GIT_REV" }
  #   (where rev value is a tag, a branch name or a commit hash). Can also use ``branch`` or ``tag`` instead of ``rev``
  
  [tool.conda-lock.dependencies]
  libblas = "*=*mkl"  # because simpeg already brings in the MKL
  ipywidgets = ">=8.1.0"
  widgetsnbextension = ">=4.0"
  jupyterlab = ">=4.3.0"
  jupyter_server = ">=2.15.0"
  jupyter_client = ">=8.6.0"
  matplotlib = ">=3.0.0"  # also in simpeg and geoana
  
  [tool.poetry.group.dev.dependencies]
  Pygments = "*"
  jupyter-book = "^1.0"
  jupytext = "^1.14"
  pylint = "*"
  pytest = "*"
  pytest-cov = "*"
  readthedocs-sphinx-ext = "*"
  semver = "*"
  sphinx = "^5.0"
  tomli = "*"
  
  [tool.conda-lock]
  platforms = ['win-64', 'linux-64']
  channels = ['conda-forge']
  
  [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
      "A005", # TO DO (stdlib-module-shadowing: Module shadows a Python standard-library module)
      "RUF005", # TO DO
      "B007", # TO DO
      "B011", # TO DO
      "B904", # TO DO
      "C408", # TO DO
      "C414", # TO DO
      "C416", # TO DO
      "C419", # TO DO
      "C901", # TO DO
      "RUF005",  # collection-literal-concatenation - wrong suggestion with numpy arrays
      "RUF012", # TO DO
      "RUF013", # TO DO
      "RUF015", # TO DO
      "UP038", # TO DO
      "TID252", # TO DO
  ]
  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'
  ]
  
  [tool.pytest.ini_options]
  #addopts =
  
  [tool.coverage.run]
  branch = true
  source = ["geoapps"]
  omit = []
  
  [tool.coverage.report]
  exclude_lines = [
      "raise NotImplementedError",
      "pass",
      "if TYPE_CHECKING",
      "pragma: no cover"
  ]
  
  fail_under = 35
  
  [tool.coverage.html]
  skip_empty = true
  skip_covered = true
  
  [build-system]
  requires = ["poetry-core>=1.0.0", "setuptools"]
  build-backend = "poetry.core.masonry.api"
  