# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
# SPDX-FileContributor: Samuel Michel <samuel.michel@idiap.ch>
#
# SPDX-License-Identifier: GPL-3.0-or-later

[build-system]
    requires = ["setuptools>=61.0.0", "wheel"]
    build-backend = "setuptools.build_meta"

[project]
name = "sleepless"
version = "2.0.0"
requires-python = ">=3.9"
description = "This package contains benchmarks for sleep phase detection from polysomnographs"
dynamic = ["readme"]
license = {text = "GNU General Public License v3 (GPLv3)"}
authors = [
    {name = "Samuel Michel", email = "samuel.michel@idiap.ch"},
    {name = "Gabriele Brunini", email = "gabriele.brunini@gess.ethz.ch"},
]
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",
]
dependencies = [
    "clapper",
    "click",
    "h5py",
    "numpy",
    "matplotlib",
    "mne",
    "openpyxl",
    "pandas",
    "psutil",
    "scikit-learn",
    "setuptools",
    "tabulate",
    "torch>=1.8",
    "xgboost",
    "xlrd",
]

[project.urls]
documentation = "https://sleepless.readthedocs.io/en/v2.0.0/"
homepage = "https://pypi.org/project/sleepless"
repository = "https://gitlab.idiap.ch/biosignal/software/sleepless"
changelog = "https://gitlab.idiap.ch/biosignal/software/sleepless/-/releases"

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

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

[project.entry-points."sleepless.config"]
# models

# models + models_parameters
rf-gs-mne = "sleepless.configs.models_and_models_parameters.mne_baseline.randomforest"
rf-gs-chambon = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest"
rf-gs-chambon-2eeg-eog = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_2eeg_eog"
rf-gs-chambon-2eeg-emg = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_2eeg_emg"
rf-gs-chambon-2eeg-eog-emg = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_2eeg_eog_emg"
rf-gs-chambon-eog = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_eog"
rf-gs-chambon-emg = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_emg"
rf-gs-chambon-fpzcz = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_fpzcz"
rf-gs-chambon-pzoz = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.randomforest_pzoz"
xgb-gs-mne = "sleepless.configs.models_and_models_parameters.mne_baseline.xgboost"
xgb-gs-chambon = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.xgboost_chambon"
gbc-gs-mne = "sleepless.configs.models_and_models_parameters.mne_baseline.gbc"
chambon-test = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.chambon_testing"
chambon = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.chambon2018"
chambon-noscheduler = "sleepless.configs.models_and_models_parameters.chambon2018_baseline.chambon2018_noscheduler"
chambon-lstm = "sleepless.configs.models_and_models_parameters.chambon2018_modified.chambon_lstm.chambon_lstm"
lstm = "sleepless.configs.models_and_models_parameters.lstm_baseline.lstm"
blanco = "sleepless.configs.models_and_models_parameters.blanco_baseline.blanco"
chambon-gru = "sleepless.configs.models_and_models_parameters.chambon2018_modified.chambon_gru.chambon_gru"
ninel-cnn = "sleepless.configs.models_and_models_parameters.nine_layers_cnn_baseline.ninel_1d_cnn_ssc"

# dataset
st-testing = "sleepless.configs.datasets.EDF.st_testing"
stedf-unfiltered = "sleepless.configs.datasets.EDF.st_unfiltered"
scedf-unfiltered = "sleepless.configs.datasets.EDF.sc_unfiltered"
stedf-filtered = "sleepless.configs.datasets.EDF.st_filtered"
scedf-filtered = "sleepless.configs.datasets.EDF.sc_filtered"
scedf-filtered-crop-wake = "sleepless.configs.datasets.EDF.sc_filtered_crop_wake"
edfa-filtered = "sleepless.configs.datasets.EDF.train_st_filtered"
edfb-filtered = "sleepless.configs.datasets.EDF.train_sc_filtered"
edfc-filtered = "sleepless.configs.datasets.EDF.train_st_sc_filtered"
ss3-unfiltered-fpz-cz = "sleepless.configs.datasets.MASS.ss3_unfiltered_fpz_cz"
ss3-filtered-fpz-cz = "sleepless.configs.datasets.MASS.ss3_filtered_fpz_cz"
edf-massa = "sleepless.configs.datasets.EDF_X_MASS.train_edf_st"
edf-massb = "sleepless.configs.datasets.EDF_X_MASS.train_edf_sc"
edf-massc = "sleepless.configs.datasets.EDF_X_MASS.train_edf_st_sc"
edf-massd = "sleepless.configs.datasets.EDF_X_MASS.train_mass_ss3"
edf-masse = "sleepless.configs.datasets.EDF_X_MASS.train_edf_sc_crop_wake"
mixed-db = "sleepless.configs.datasets.mixed_all_db.mixed_all_db"

[tool.setuptools]
zip-safe = true
package-dir = {"" = "src"}

[tool.setuptools.dynamic]
readme = {file = "README.md"}

[tool.distutils.bdist_wheel]
universal = true

[tool.isort]
profile = "black"
line_length = 80
order_by_type = true
lines_between_types = 1

[tool.black]
line-length = 80

[tool.pytest.ini_options]
addopts = [
    "--cov=sleepless",
    "--cov-report=term-missing",
    "--import-mode=append",
]
junit_logging = "all"
junit_log_passing_tests = false