Skip to content
Snippets Groups Projects
pyproject.toml 25.2 KiB
Newer Older
André Anjos's avatar
André Anjos committed
# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
#
# SPDX-License-Identifier: GPL-3.0-or-later

[build-system]
requires = ["hatchling", "versioningit"]
build-backend = "hatchling.build"
André Anjos's avatar
André Anjos committed

[project]
dynamic = ["version"]
requires-python = ">=3.10"
description = "Benchmarks for Computer-Aided Disease Detection from Medical Data."
readme = "README.md"
license = "GPL-3.0-or-later"
authors = [{ name = "Geoffrey Raposo", email = "geoffrey@raposo.ch" }]
André Anjos's avatar
André Anjos committed
maintainers = [
  { name = "Andre Anjos", email = "andre.anjos@idiap.ch" },
  { name = "Daniel Carron", email = "daniel.carron@idiap.ch" },
André Anjos's avatar
André Anjos committed
]
André Anjos's avatar
André Anjos committed
classifiers = [
  "Development Status :: 4 - Beta",
  "Intended Audience :: Developers",
  "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
  "Natural Language :: English",
  "Programming Language :: Python :: 3",
  "Topic :: Software Development :: Libraries :: Python Modules",
André Anjos's avatar
André Anjos committed
]
André Anjos's avatar
André Anjos committed
dependencies = [
  "clapper",
  "click",
  "grad-cam~=1.5.2",
  "lightning~=2.2.5",
  "matplotlib",
  "mlflow-skinny",
  "numpy",
  "pillow",
  "psutil",
  "python-gitlab",
  "scikit-learn",
  "tabulate",
  "tensorboard",
  "torchvision~=0.17.2",
  "torch~=2.2.2",
  "tqdm",
[project.urls]
documentation = "https://mednet.readthedocs.io/en/latest/"
homepage = "https://pypi.org/project/mednet"
repository = "https://gitlab.idiap.ch/biosignal/software/mednet"
changelog = "https://gitlab.idiap.ch/biosignal/software/mednet/-/releases"

[project.optional-dependencies]
qa = ["pre-commit"]
doc = [
  "sphinx-autodoc-typehints",
  "sphinx-copybutton",
  "sphinx-inline-tabs",
]
test = ["pytest", "pytest-cov"]

[project.scripts]
mednet = "mednet.scripts.cli:cli"

[tool.pixi.project]
channels = ["conda-forge", "pytorch"]
platforms = ["linux-64", "osx-arm64"]
conda-pypi-map = { "https://conda.anaconda.org/pytorch" = ".pixi-pytorch-mapping.json" }
[tool.pixi.system-requirements]
linux = "4.19.0"

[tool.pixi.dependencies]
clapper = "*"
click = "*"
credible = "*"
grad-cam = "~=1.5.2"
lightning = "~=2.2.5"
numpy = "*"
pillow = "*"
psutil = "*"
python-gitlab = "*"
pytorch = { version = "~=2.2.2", channel = "pytorch" }
scikit-image = "*"
scikit-learn = "*"
tabulate = "*"
tensorboard = "*"
torchvision = { version = "~=0.17.2", channel = "pytorch" }
tqdm = "*"
versioningit = "*"
[tool.pixi.feature.self.pypi-dependencies]
mednet = { path = ".", editable = true }

[tool.pixi.feature.self.tasks]
info = "mednet info"

[tool.pixi.feature.py311.dependencies]
python = "~=3.11.0"

[tool.pixi.feature.py312.dependencies]
python = "~=3.12.0"

[tool.pixi.feature.qa.dependencies]
pre-commit = "*"
ruff = "*"
reuse = "*"

[tool.pixi.feature.qa.tasks]
qa-install = "pre-commit install"
qa = "pre-commit run --all-files"
qa-ci = "pre-commit run --all-files --show-diff-on-failure --verbose"

[tool.pixi.feature.doc.dependencies]
sphinx-autodoc-typehints = "*"
sphinx-copybutton = "*"
sphinx-inline-tabs = "*"

[tool.pixi.feature.doc.tasks]
doc-clean = "rm -rf doc/api && rm -rf html"
doc = "sphinx-build -aEW doc html"
doctest = "sphinx-build -aEb doctest doc html/doctest"

[tool.pixi.feature.test.dependencies]
pytest = "*"
pytest-cov = "*"

[tool.pixi.feature.test.tasks]
test = "pytest -sv tests/"
test-slow = { cmd = "pytest -sv tests/", env = { PYTEST_ADDOPTS = "-m slow" } }
test-fast = { cmd = "pytest -sv tests/", env = { PYTEST_ADDOPTS = "-m '(not slow)'" } }
test-cov = "pytest -sv --cov-report 'html:html/coverage' tests/"
test-ci = "cp tests/data/mednet.toml $XDG_CONFIG_HOME && pytest -sv --cov-report 'html:html/coverage' --cov-report 'xml:coverage.xml' --junitxml 'junit-coverage.xml' --ignore '.profile' tests/"

[tool.pixi.feature.build.dependencies]
hatch = "*"
versioningit = "*"
twine = "*"

[tool.pixi.feature.build.tasks]
build = "hatch build"
check = "twine check dist/*"
upload = "twine upload dist/*"
[tool.pixi.feature.dev.dependencies]
pdbpp = "*"
uv = "*"

[tool.pixi.feature.dev.tasks]
uv-update-lock = "uv pip compile -q pyproject.toml --python-platform=linux -o uv.lock"
[tool.pixi.feature.cuda]
channels = [
  { channel = "nvidia", priority = 1 },
  { channel = "pytorch", priority = -1 },
]
platforms = ["linux-64", "osx-arm64"]

[tool.pixi.feature.cuda.system-requirements]
cuda = "12.1"

[tool.pixi.feature.cuda.target.linux-64.dependencies]
pytorch-cuda = { version = "12.1.*", channel = "pytorch" }
pip = "*"                                                  # required for docker image building
[tool.pixi.environments]
default = { features = ["qa", "build", "doc", "test", "dev", "py312", "self"] }
qa-ci = { features = ["qa", "py312"] }
build-ci = { features = ["build", "py312"] }
test-ci-alternative = { features = ["test", "py311", "self"] }
cuda-base = { features = ["py312", "cuda"], solve-group = "cuda" }
cuda-prod = { features = ["py312", "cuda", "self"], solve-group = "cuda" }
cuda = { features = [
  "qa",
  "build",
  "doc",
  "test",
  "dev",
  "py312",
  "cuda",
  "self",
], solve-group = "cuda" }
[tool.hatch.version]
source = "versioningit"

# versioningit configuration via tool.hatch.version table
default-version = "0.0.0+unknown"
next-version.method = "smallest"
# Example formatted version: 1.2.4.dev42+ge174a1f
format.distance = "{next_version}.dev{distance}+{vcs}{rev}"
# Example formatted version: 1.2.4.dev42+ge174a1f.d20230922
format.distance-dirty = "{next_version}.dev{distance}+{vcs}{rev}.d{build_date:%Y%m%d}"
[tool.hatch.build.targets.sdist]
include = [
  "src/**/*.py",
  "src/**/*.json",
  "src/**/*.json.bz2",
  "tests/**/*.py",
  "tests/**/*.png",
  "tests/**/*.json",
  "doc/**/*.rst",
  "doc/**/*.png",
  "doc/**/*.jpg",
  "doc/**/*.dot",
  "doc/*.txt",
  "doc/*.inv",
  "doc/_templates/*.html",
André Anjos's avatar
André Anjos committed
]

[tool.hatch.build.targets.wheel]
packages = ["src/mednet"]

[project.entry-points."mednet.libs.classification.config"]
André Anjos's avatar
André Anjos committed
# models
pasa = "mednet.libs.classification.config.models.pasa"
mlp = "mednet.libs.classification.config.models.mlp"
logistic-regression = "mednet.libs.classification.config.models.logistic_regression"
alexnet = "mednet.libs.classification.config.models.alexnet"
alexnet-pretrained = "mednet.libs.classification.config.models.alexnet_pretrained"
densenet = "mednet.libs.classification.config.models.densenet"
densenet-pretrained = "mednet.libs.classification.config.models.densenet_pretrained"
# 3D models
cnn3d = "mednet.config.models.cnn3d"

# lists of data augmentations
affine = "mednet.libs.common.config.augmentations.affine"
elastic = "mednet.libs.common.config.augmentations.elastic"
hflip = "mednet.libs.common.config.augmentations.hflip"
jitter = "mednet.libs.common.config.augmentations.jitter"
hflip-affine = "mednet.libs.common.config.augmentations.hflip_affine"
hflip-jitter-affine = "mednet.libs.common.config.augmentations.hflip_jitter_affine"
André Anjos's avatar
André Anjos committed
# montgomery dataset (and cross-validation folds)
montgomery = "mednet.libs.classification.config.data.montgomery.default"
montgomery-f0 = "mednet.libs.classification.config.data.montgomery.fold_0"
montgomery-f1 = "mednet.libs.classification.config.data.montgomery.fold_1"
montgomery-f2 = "mednet.libs.classification.config.data.montgomery.fold_2"
montgomery-f3 = "mednet.libs.classification.config.data.montgomery.fold_3"
montgomery-f4 = "mednet.libs.classification.config.data.montgomery.fold_4"
montgomery-f5 = "mednet.libs.classification.config.data.montgomery.fold_5"
montgomery-f6 = "mednet.libs.classification.config.data.montgomery.fold_6"
montgomery-f7 = "mednet.libs.classification.config.data.montgomery.fold_7"
montgomery-f8 = "mednet.libs.classification.config.data.montgomery.fold_8"
montgomery-f9 = "mednet.libs.classification.config.data.montgomery.fold_9"
André Anjos's avatar
André Anjos committed
# shenzhen dataset (and cross-validation folds)
shenzhen = "mednet.libs.classification.config.data.shenzhen.default"
shenzhen-alltest = "mednet.libs.classification.config.data.shenzhen.alltest"
shenzhen-f0 = "mednet.libs.classification.config.data.shenzhen.fold_0"
shenzhen-f1 = "mednet.libs.classification.config.data.shenzhen.fold_1"
shenzhen-f2 = "mednet.libs.classification.config.data.shenzhen.fold_2"
shenzhen-f3 = "mednet.libs.classification.config.data.shenzhen.fold_3"
shenzhen-f4 = "mednet.libs.classification.config.data.shenzhen.fold_4"
shenzhen-f5 = "mednet.libs.classification.config.data.shenzhen.fold_5"
shenzhen-f6 = "mednet.libs.classification.config.data.shenzhen.fold_6"
shenzhen-f7 = "mednet.libs.classification.config.data.shenzhen.fold_7"
shenzhen-f8 = "mednet.libs.classification.config.data.shenzhen.fold_8"
shenzhen-f9 = "mednet.libs.classification.config.data.shenzhen.fold_9"
André Anjos's avatar
André Anjos committed
# indian dataset (and cross-validation folds)
indian = "mednet.libs.classification.config.data.indian.default"
indian-f0 = "mednet.libs.classification.config.data.indian.fold_0"
indian-f1 = "mednet.libs.classification.config.data.indian.fold_1"
indian-f2 = "mednet.libs.classification.config.data.indian.fold_2"
indian-f3 = "mednet.libs.classification.config.data.indian.fold_3"
indian-f4 = "mednet.libs.classification.config.data.indian.fold_4"
indian-f5 = "mednet.libs.classification.config.data.indian.fold_5"
indian-f6 = "mednet.libs.classification.config.data.indian.fold_6"
indian-f7 = "mednet.libs.classification.config.data.indian.fold_7"
indian-f8 = "mednet.libs.classification.config.data.indian.fold_8"
indian-f9 = "mednet.libs.classification.config.data.indian.fold_9"
# TBX11K dataset split 1: healthy vs active tb, and cross-validation folds
tbx11k-v1-healthy-vs-atb = "mednet.libs.classification.config.data.tbx11k.v1_healthy_vs_atb"
tbx11k-v1-f0 = "mednet.libs.classification.config.data.tbx11k.v1_fold_0"
tbx11k-v1-f1 = "mednet.libs.classification.config.data.tbx11k.v1_fold_1"
tbx11k-v1-f2 = "mednet.libs.classification.config.data.tbx11k.v1_fold_2"
tbx11k-v1-f3 = "mednet.libs.classification.config.data.tbx11k.v1_fold_3"
tbx11k-v1-f4 = "mednet.libs.classification.config.data.tbx11k.v1_fold_4"
tbx11k-v1-f5 = "mednet.libs.classification.config.data.tbx11k.v1_fold_5"
tbx11k-v1-f6 = "mednet.libs.classification.config.data.tbx11k.v1_fold_6"
tbx11k-v1-f7 = "mednet.libs.classification.config.data.tbx11k.v1_fold_7"
tbx11k-v1-f8 = "mednet.libs.classification.config.data.tbx11k.v1_fold_8"
tbx11k-v1-f9 = "mednet.libs.classification.config.data.tbx11k.v1_fold_9"
# TBX11K dataset split 2: others vs active tb, and cross-validation folds
tbx11k-v2-others-vs-atb = "mednet.libs.classification.config.data.tbx11k.v2_others_vs_atb"
tbx11k-v2-f0 = "mednet.libs.classification.config.data.tbx11k.v2_fold_0"
tbx11k-v2-f1 = "mednet.libs.classification.config.data.tbx11k.v2_fold_1"
tbx11k-v2-f2 = "mednet.libs.classification.config.data.tbx11k.v2_fold_2"
tbx11k-v2-f3 = "mednet.libs.classification.config.data.tbx11k.v2_fold_3"
tbx11k-v2-f4 = "mednet.libs.classification.config.data.tbx11k.v2_fold_4"
tbx11k-v2-f5 = "mednet.libs.classification.config.data.tbx11k.v2_fold_5"
tbx11k-v2-f6 = "mednet.libs.classification.config.data.tbx11k.v2_fold_6"
tbx11k-v2-f7 = "mednet.libs.classification.config.data.tbx11k.v2_fold_7"
tbx11k-v2-f8 = "mednet.libs.classification.config.data.tbx11k.v2_fold_8"
tbx11k-v2-f9 = "mednet.libs.classification.config.data.tbx11k.v2_fold_9"
André Anjos's avatar
André Anjos committed
# montgomery-shenzhen aggregated dataset
montgomery-shenzhen = "mednet.libs.classification.config.data.montgomery_shenzhen.default"
montgomery-shenzhen-f0 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_0"
montgomery-shenzhen-f1 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_1"
montgomery-shenzhen-f2 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_2"
montgomery-shenzhen-f3 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_3"
montgomery-shenzhen-f4 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_4"
montgomery-shenzhen-f5 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_5"
montgomery-shenzhen-f6 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_6"
montgomery-shenzhen-f7 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_7"
montgomery-shenzhen-f8 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_8"
montgomery-shenzhen-f9 = "mednet.libs.classification.config.data.montgomery_shenzhen.fold_9"
André Anjos's avatar
André Anjos committed
# montgomery-shenzhen-indian aggregated dataset
montgomery-shenzhen-indian = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.default"
montgomery-shenzhen-indian-f0 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_0"
montgomery-shenzhen-indian-f1 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_1"
montgomery-shenzhen-indian-f2 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_2"
montgomery-shenzhen-indian-f3 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_3"
montgomery-shenzhen-indian-f4 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_4"
montgomery-shenzhen-indian-f5 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_5"
montgomery-shenzhen-indian-f6 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_6"
montgomery-shenzhen-indian-f7 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_7"
montgomery-shenzhen-indian-f8 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_8"
montgomery-shenzhen-indian-f9 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian.fold_9"
# montgomery-shenzhen-indian-tbx11k aggregated dataset
montgomery-shenzhen-indian-tbx11k-v1 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_healthy_vs_atb"
montgomery-shenzhen-indian-tbx11k-v1-f0 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_0"
montgomery-shenzhen-indian-tbx11k-v1-f1 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_1"
montgomery-shenzhen-indian-tbx11k-v1-f2 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_2"
montgomery-shenzhen-indian-tbx11k-v1-f3 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_3"
montgomery-shenzhen-indian-tbx11k-v1-f4 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_4"
montgomery-shenzhen-indian-tbx11k-v1-f5 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_5"
montgomery-shenzhen-indian-tbx11k-v1-f6 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_6"
montgomery-shenzhen-indian-tbx11k-v1-f7 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_7"
montgomery-shenzhen-indian-tbx11k-v1-f8 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_8"
montgomery-shenzhen-indian-tbx11k-v1-f9 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v1_fold_9"
montgomery-shenzhen-indian-tbx11k-v2 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_others_vs_atb"
montgomery-shenzhen-indian-tbx11k-v2-f0 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_0"
montgomery-shenzhen-indian-tbx11k-v2-f1 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_1"
montgomery-shenzhen-indian-tbx11k-v2-f2 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_2"
montgomery-shenzhen-indian-tbx11k-v2-f3 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_3"
montgomery-shenzhen-indian-tbx11k-v2-f4 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_4"
montgomery-shenzhen-indian-tbx11k-v2-f5 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_5"
montgomery-shenzhen-indian-tbx11k-v2-f6 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_6"
montgomery-shenzhen-indian-tbx11k-v2-f7 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_7"
montgomery-shenzhen-indian-tbx11k-v2-f8 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_8"
montgomery-shenzhen-indian-tbx11k-v2-f9 = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_tbx11k.v2_fold_9"
# tbpoc dataset (only cross-validation folds)
tbpoc-f0 = "mednet.libs.classification.config.data.tbpoc.fold_0"
tbpoc-f1 = "mednet.libs.classification.config.data.tbpoc.fold_1"
tbpoc-f2 = "mednet.libs.classification.config.data.tbpoc.fold_2"
tbpoc-f3 = "mednet.libs.classification.config.data.tbpoc.fold_3"
tbpoc-f4 = "mednet.libs.classification.config.data.tbpoc.fold_4"
tbpoc-f5 = "mednet.libs.classification.config.data.tbpoc.fold_5"
tbpoc-f6 = "mednet.libs.classification.config.data.tbpoc.fold_6"
tbpoc-f7 = "mednet.libs.classification.config.data.tbpoc.fold_7"
tbpoc-f8 = "mednet.libs.classification.config.data.tbpoc.fold_8"
tbpoc-f9 = "mednet.libs.classification.config.data.tbpoc.fold_9"
# hivtb dataset (only cross-validation folds)
hivtb-f0 = "mednet.libs.classification.config.data.hivtb.fold_0"
hivtb-f1 = "mednet.libs.classification.config.data.hivtb.fold_1"
hivtb-f2 = "mednet.libs.classification.config.data.hivtb.fold_2"
hivtb-f3 = "mednet.libs.classification.config.data.hivtb.fold_3"
hivtb-f4 = "mednet.libs.classification.config.data.hivtb.fold_4"
hivtb-f5 = "mednet.libs.classification.config.data.hivtb.fold_5"
hivtb-f6 = "mednet.libs.classification.config.data.hivtb.fold_6"
hivtb-f7 = "mednet.libs.classification.config.data.hivtb.fold_7"
hivtb-f8 = "mednet.libs.classification.config.data.hivtb.fold_8"
hivtb-f9 = "mednet.libs.classification.config.data.hivtb.fold_9"
# NIH CXR14 (relabeled), multi-class (14 labels)
nih-cxr14 = "mednet.libs.classification.config.data.nih_cxr14.default"
nih-cxr14-cardiomegaly = "mednet.libs.classification.config.data.nih_cxr14.cardiomegaly"
# PadChest, multi-class (varied number of labels)
padchest-idiap = "mednet.libs.classification.config.data.padchest.idiap"
padchest-tb-idiap = "mednet.libs.classification.config.data.padchest.tb_idiap"
padchest-no-tb-idiap = "mednet.libs.classification.config.data.padchest.no_tb_idiap"
padchest-cardiomegaly-idiap = "mednet.libs.classification.config.data.padchest.cardiomegaly_idiap"
André Anjos's avatar
André Anjos committed
# NIH CXR14 / PadChest aggregated dataset
nih-cxr14-padchest = "mednet.libs.classification.config.data.nih_cxr14_padchest.idiap"

# montgomery-shenzhen-indian-padchest aggregated dataset
montgomery-shenzhen-indian-padchest = "mednet.libs.classification.config.data.montgomery_shenzhen_indian_padchest.default"
# VISCERAL dataset
visceral = "mednet.config.data.visceral.default"

[project.entry-points."mednet.libs.segmentation.config"]

# models
driu = "mednet.libs.segmentation.config.models.driu"
driu-bn = "mednet.libs.segmentation.config.models.driu_bn"
driu-od = "mednet.libs.segmentation.config.models.driu_od"
driu-pix = "mednet.libs.segmentation.config.models.driu_pix"
hed = "mednet.libs.segmentation.config.models.hed"
lwnet = "mednet.libs.segmentation.config.models.lwnet"
m2unet = "mednet.libs.segmentation.config.models.m2unet"
unet = "mednet.libs.segmentation.config.models.unet"
# chase-db1 - retinography
chasedb1 = "mednet.libs.segmentation.config.data.chasedb1.first_annotator"
chasedb1-2nd = "mednet.libs.segmentation.config.data.chasedb1.second_annotator"

# cxr8 - cxr
cxr8 = "mednet.libs.segmentation.config.data.cxr8.default"

# drhagis dataset - retinography
drhagis = "mednet.libs.segmentation.config.data.drhagis.default"

# drionsdb - retinography
drionsdb = "mednet.libs.segmentation.config.data.drionsdb.expert1"
drionsdb-2nd = "mednet.libs.segmentation.config.data.drionsdb.expert2"

# drive dataset - retinography
drive = "mednet.libs.segmentation.config.data.drive.default"
drive-2nd = "mednet.libs.segmentation.config.data.drive.drive_2nd"
# drishti-gs1 - retinography
drishtigs1-disc-all = "mednet.libs.segmentation.config.data.drishtigs1.optic_disc_all"
drishtigs1-disc-any = "mednet.libs.segmentation.config.data.drishtigs1.optic_disc_any"
drishtigs1-cup-all = "mednet.libs.segmentation.config.data.drishtigs1.optic_cup_all"
drishtigs1-cup-any = "mednet.libs.segmentation.config.data.drishtigs1.optic_cup_any"

# hrf - retinography
hrf = "mednet.libs.segmentation.config.data.hrf.default"

# iostar - retinography
iostar-vessel = "mednet.libs.segmentation.config.data.iostar.vessel"
iostar-disc = "mednet.libs.segmentation.config.data.iostar.optic_disc"

# jsrt - cxr
jsrt = "mednet.libs.segmentation.config.data.jsrt.default"

# montgomery county - cxr
montgomery = "mednet.libs.segmentation.config.data.montgomery.default"
# refuge - retinography
refuge-cup = "mednet.libs.segmentation.config.data.refuge.cup"
refuge-disc = "mednet.libs.segmentation.config.data.refuge.disc"

# rim one r3 - retinography
rimoner3-cup = "mednet.libs.segmentation.config.data.rimoner3.cup_exp1"
rimoner3-disc = "mednet.libs.segmentation.config.data.rimoner3.disc_exp1"
rimoner3-cup-2nd = "mednet.libs.segmentation.config.data.rimoner3.cup_exp2"
rimoner3-disc-2nd = "mednet.libs.segmentation.config.data.rimoner3.disc_exp2"

# shenzhen - cxr
shenzhen = "mednet.libs.segmentation.config.data.shenzhen.default"

# stare dataset - retinography
stare = "mednet.libs.segmentation.config.data.stare.ah"
stare-2nd = "mednet.libs.segmentation.config.data.stare.vk"
select = [
  "A",   # https://docs.astral.sh/ruff/rules/#flake8-builtins-a
  "COM", # https://docs.astral.sh/ruff/rules/#flake8-commas-com
  "D",   # https://docs.astral.sh/ruff/rules/#pydocstyle-d
  "E",   # https://docs.astral.sh/ruff/rules/#error-e
  "F",   # https://docs.astral.sh/ruff/rules/#pyflakes-f
  "I",   # https://docs.astral.sh/ruff/rules/#isort-i
  "ISC", # https://docs.astral.sh/ruff/rules/#flake8-implicit-str-concat-isc
  "LOG", # https://docs.astral.sh/ruff/rules/#flake8-logging-log
  "N",   # https://docs.astral.sh/ruff/rules/#pep8-naming-n
  "PTH", # https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth
  "Q",   # https://docs.astral.sh/ruff/rules/#flake8-quotes-q
  "RET", # https://docs.astral.sh/ruff/rules/#flake8-return-ret
  "SLF", # https://docs.astral.sh/ruff/rules/#flake8-self-slf
  "T10", # https://docs.astral.sh/ruff/rules/#flake8-debugger-t10
  "T20", # https://docs.astral.sh/ruff/rules/#flake8-print-t20
  "UP",  # https://docs.astral.sh/ruff/rules/#pyupgrade-up
  "W",   # https://docs.astral.sh/ruff/rules/#warning-w
  #"G",   # https://docs.astral.sh/ruff/rules/#flake8-logging-format-g
  #"ICN", # https://docs.astral.sh/ruff/rules/#flake8-import-conventions-icn
  #"NPY", # https://docs.astral.sh/ruff/rules/#numpy-specific-rules-npy
]
ignore = [
  "COM812", # https://docs.astral.sh/ruff/rules/missing-trailing-comma/
  "D100",   # https://docs.astral.sh/ruff/rules/undocumented-public-module/
  "D102",   # https://docs.astral.sh/ruff/rules/undocumented-public-method/
  "D104",   # https://docs.astral.sh/ruff/rules/undocumented-public-package/
  "D105",   # https://docs.astral.sh/ruff/rules/undocumented-magic-method/
  "D107",   # https://docs.astral.sh/ruff/rules/undocumented-public-init/
  "D202",   # https://docs.astral.sh/ruff/rules/no-blank-line-after-function/
  "D205",   # https://docs.astral.sh/ruff/rules/blank-line-after-summary/
  "D212",   # https://docs.astral.sh/ruff/rules/multi-line-summary-first-line/
  "D213",   # https://docs.astral.sh/ruff/rules/multi-line-summary-second-line/
  "E302",   # https://docs.astral.sh/ruff/rules/blank-lines-top-level/
  "E402",   # https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file/
  "E501",   # https://docs.astral.sh/ruff/rules/line-too-long/
  "ISC001", # https://docs.astral.sh/ruff/rules/single-line-implicit-string-concatenation/
]

[tool.ruff.lint.pydocstyle]
convention = "numpy"

[tool.ruff.lint.per-file-ignores]
"helpers/*.py" = ["T201", "D103"]
Daniel CARRON's avatar
Daniel CARRON committed
"**/tests/*.py" = ["D", "E501"]
André Anjos's avatar
André Anjos committed

[tool.numpydoc_validation]
checks = [
  "ES01", # Not all functions require extended summaries
  "EX01", # Not all functions require examples
  "GL01", # Expects text to be on the line after the opening quotes but that is in direct opposition of the sphinx recommendations and conflicts with other pre-commit hooks.
  "GL08", # Causes issues if we don't have a docstring at the top of the file. Disabling this might fail to catch actual missing docstrings.
  "PR04", # numpydoc does not currently support PEP484 typehints, which we are using
  "RT03", # Since sphinx is unable to understand type annotations we need to remove some types from 'Returns', which breaks this check.
  "SA01", # We do not use Also sections
  "SS06", # Summary will span multiple lines if too long because of reformatting by other hooks.
exclude = [ # don't report on objects that match any of these regex
  '\.__len__$',
  '\.__getitem__$',
  '\.__iter__$',
  '\.__setstate__$',
override_SS05 = [ # override SS05 to allow docstrings starting with these words
  '^Process ',
  '^Assess ',
  '^Access ',
  '^This',

[tool.pytest.ini_options]
addopts = ["--cov=mednet", "--cov-report=term-missing", "--import-mode=append"]
junit_logging = "all"
junit_log_passing_tests = false
markers = ["slow: marks tests as slow (deselect with '-m \"not slow\"')"]