From a4214a45a781e41500f2f7c8e39c6cb05ea38749 Mon Sep 17 00:00:00 2001 From: Robert Richer Date: Fri, 3 Jan 2025 10:28:15 +0100 Subject: [PATCH] 0.12.0 merged `pep_benchmarking` branch, algorithms now available in main --- CHANGELOG.md | 7 ++ poetry.lock | 75 ++++++++++++++++++- pyproject.toml | 4 +- src/biopsykit/__init__.py | 2 +- src/biopsykit/io/tfm.py | 3 +- src/biopsykit/signals/__init__.py | 2 +- src/biopsykit/signals/_dtypes.py | 1 + src/biopsykit/signals/ecg/__init__.py | 2 +- .../signals/ecg/event_extraction/__init__.py | 4 +- .../_q_peak_forounzafar2018.py | 3 +- .../_q_peak_martinez2004_neurokit.py | 1 + .../_q_peak_scipy_findpeaks_neurokit.py | 1 + .../event_extraction/_q_peak_vanlien2013.py | 3 +- .../segmentation/_heartbeat_segmentation.py | 3 +- src/biopsykit/signals/icg/__init__.py | 2 +- .../signals/icg/event_extraction/__init__.py | 16 ++-- .../event_extraction/_b_point_arbol2017.py | 7 +- .../event_extraction/_b_point_debski1993.py | 5 +- .../event_extraction/_b_point_drost2022.py | 3 +- .../_b_point_forouzanfar2018.py | 5 +- .../event_extraction/_b_point_lozano2007.py | 3 +- .../event_extraction/_b_point_sherwood1990.py | 1 + .../event_extraction/_b_point_stern1985.py | 3 +- .../_base_b_point_extraction.py | 1 + .../_base_c_point_extraction.py | 1 + .../_c_point_scipy_findpeaks.py | 5 +- .../icg/outlier_correction/__init__.py | 2 +- .../_outlier_correction_dummy.py | 1 + .../_outlier_correction_forouzanfar2018.py | 7 +- ...outlier_correction_linear_interpolation.py | 1 + src/biopsykit/utils/array_handling.py | 3 +- .../test_b_point_extraction_arbol2017.py | 1 + .../test_b_point_extraction_debski1993.py | 1 + .../test_b_point_extraction_drost2022.py | 1 + ...test_b_point_extraction_forouzanfar2018.py | 1 + ...test_c_point_extraction_scipy_findpeaks.py | 1 + .../test_heatbeat_segmentation.py | 1 + ...test_outlier_correction_forouzanfar2018.py | 1 + .../test_outlier_correction_interpolation.py | 1 + .../test_q_wave_onset_extraction.py | 1 + 40 files changed, 148 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc2a44..d62309f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Version 0.12.0 - January 03, 2025 +### New Features +- Added new algorithms for pre-ejection period (PEP) computation in `biopsykit.signals`, including + algorithms for ECG Q-peak extraction (`biopsykit.signals.ecg`) and ICG B-point extraction (`biopsykit.signals.icg`). + Added further utility functions (e.g., for heartbeat segmentation) and to compute the PEP using a combination + of ECG and ICG data (`biopsykit.signals.pep`). + ## Version 0.11.0 - January 03, 2025 ### Changes - Made `biopsykit` compatible with matplotlib >= 3.9. diff --git a/poetry.lock b/poetry.lock index 1a031fa..1f2cd1d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3616,6 +3616,31 @@ files = [ {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] +[[package]] +name = "tpcp" +version = "2.0.0" +description = "Pipeline and Dataset helpers for complex algorithm evaluation." +optional = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "tpcp-2.0.0-py3-none-any.whl", hash = "sha256:0ded48af9767dcfd79f9eb345a9e796fba034b16410a613b14f4dea10dd6eeb1"}, + {file = "tpcp-2.0.0.tar.gz", hash = "sha256:6db63bdb1df0e4b0e4b62b77c769d055e3f38d593a196f7e4bad71ce15af44bb"}, +] + +[package.dependencies] +joblib = ">=1.3" +numpy = ">=1.0" +pandas = ">=1.3" +scikit-learn = ">=1.2.0" +tqdm = ">=4.62.3" +typing-extensions = ">=4.1.1" + +[package.extras] +attrs = ["attrs (>=22.1.0)"] +optuna = ["optuna (>=2.10)"] +x-tensorflow = ["tensorflow-cpu (>=2.16.0)"] +x-torch-cpu = ["torch (>=1.6.0)"] + [[package]] name = "tqdm" version = "4.67.1" @@ -3652,6 +3677,54 @@ files = [ docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] +[[package]] +name = "ts2vg" +version = "1.2.4" +description = "Build visibility graphs from time series data." +optional = false +python-versions = ">=3.9" +files = [ + {file = "ts2vg-1.2.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35e624aba334274788afc2566ff2e317a5ff17c42f16c8d3272bacab3eb1ae64"}, + {file = "ts2vg-1.2.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6a1e4534fee32a377786193688b26434f3409a689ddcb86e4fb54b28b26bb279"}, + {file = "ts2vg-1.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa86a6db0469885e12430c3eeeb7b8393f9444076203769ac6e947119479ab6f"}, + {file = "ts2vg-1.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f1f06810d6513821bc0beb169924e4fc804356514e6035854c12d50ddede839"}, + {file = "ts2vg-1.2.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:237f516d517a71e74f5eb27b4626482baff7d24d881a98babd478d6921a3b950"}, + {file = "ts2vg-1.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:18fa3ff74ebbfcf0f163725a0b6d30704e375b784bd3e538de2f2f91643add56"}, + {file = "ts2vg-1.2.4-cp310-cp310-win32.whl", hash = "sha256:1e3788a75bf8da7756ebc77b390811555d59007a915af19d723569568af384e7"}, + {file = "ts2vg-1.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:c3876d79f7a6160070c19a016251e751a11a786ea18757c7cb260eea68a1dbbb"}, + {file = "ts2vg-1.2.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3e3111dd79ff4c7a883d5b05f66650abf06b7c722c8319e4f0e15c292870c274"}, + {file = "ts2vg-1.2.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e1d3fdcc92faaa3d97660a7bf6c1780735a8b67a9daba2217265fbaf32450f79"}, + {file = "ts2vg-1.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65eaf3aaa655924c854eea658af3a4666b3940517db65e98988e23f78d99c654"}, + {file = "ts2vg-1.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03c49466c98644f320e19016e62882947ea0722283b280a0cff998d76651eac0"}, + {file = "ts2vg-1.2.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:948cda910c0307291cf51ba2bb34757b229b1885b9990919aade05915b5c8434"}, + {file = "ts2vg-1.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6ba8e7b5be946719e5e2eaff856de73ca05d43d359437d80902d171a2a825c6e"}, + {file = "ts2vg-1.2.4-cp311-cp311-win32.whl", hash = "sha256:c76c6c051138c5658c14211f4485ab98b9c924411b356718f3ddb83e3aea97ef"}, + {file = "ts2vg-1.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:24aadc970ddc2d88cc50550fbb3a1777f5536928f7c009f2834fef07aec2e853"}, + {file = "ts2vg-1.2.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ef8f5d16165a8e1e77e3800db36bb459869b9fd17821b69ca17aed0cf454ab99"}, + {file = "ts2vg-1.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:96582848572d60d47cb91e99320d49a2bbc6e584bf4a3c59a8a64c828c16c088"}, + {file = "ts2vg-1.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:276dc621e7a380fc4d496dff41b6deb47e0bd61e0d9ea2b437b11ff4d74acae1"}, + {file = "ts2vg-1.2.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f02d4d26ee34ed714e3980a347eb4bdb3aca860bbcb302776be193073b9f4e4"}, + {file = "ts2vg-1.2.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:46ee6bb234b0bef52687c61446da1a6e287091b7ccee1015e089951c2075d62b"}, + {file = "ts2vg-1.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d30ef6ea87c7a365918a3759cb687a91a0432ac985ce759ece61f5fb1ca4aed"}, + {file = "ts2vg-1.2.4-cp312-cp312-win32.whl", hash = "sha256:308a5e9aff8e010fc518e08903dd585cf22c3ff8355f5b3a5959c33762559905"}, + {file = "ts2vg-1.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:4cd73dd54112f6e2672df9c6448e335369df6918bbe2ec9e0c6e6a7757fe78ec"}, + {file = "ts2vg-1.2.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b56d82fb8d44759e9a1807177dc576048ce536a380cd36cd914bcf447f1389aa"}, + {file = "ts2vg-1.2.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5ef5836726065c2a3c39b682cc87d9861dcb32bacc8308dd3898fa81d3ced970"}, + {file = "ts2vg-1.2.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a01ce7a214578fca102405fa7a0cd86f0eb8b32fcd26ef2228c793117c86ca4"}, + {file = "ts2vg-1.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fedfe1abb7cd3e016013af225ee248252076cb76c728dad5f92246e3225ba958"}, + {file = "ts2vg-1.2.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:78ba9cb668d4c8387758fbef64f0afa330c856e99f2e605b04a139144988299f"}, + {file = "ts2vg-1.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0000199b83effd9a78adad90fd9c54e7b2cf871949e230850e223ccd86f445a7"}, + {file = "ts2vg-1.2.4-cp39-cp39-win32.whl", hash = "sha256:9bdc7c6565cf8c096ccc47da0f495c135f182939df5d57dc239d5bdc5504858d"}, + {file = "ts2vg-1.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:cfb263ed97595c1227532743359462e66d35567029fb991ea8afb814dede0e04"}, + {file = "ts2vg-1.2.4.tar.gz", hash = "sha256:cf5531c6d565246d6a61621cecf8bc528cdf6a45ce579ab454efe8f5c64672e0"}, +] + +[package.dependencies] +numpy = ">=1.24" + +[package.extras] +tests = ["pytest"] + [[package]] name = "typing-extensions" version = "4.12.2" @@ -3886,4 +3959,4 @@ mne = ["mne"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0" -content-hash = "93c2c7f3db0c767ae361f2d01f0e358fb2592037aa64d0d2a1fb8c8925e49bbd" +content-hash = "a6d2246038776cd5954541f6e805e80f359a479cbdbd584e20d1441e2da7b47c" diff --git a/pyproject.toml b/pyproject.toml index ef164aa..0543011 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "biopsykit" -version = "0.11.0" +version = "0.12.0" description = "A Python package for the analysis of biopsychological data." authors = [ "Robert Richer ", @@ -23,7 +23,7 @@ packages = [ python = ">=3.9,<4.0" numpy = "^1" pandas = "^1" -matplotlib = "^3.4" +matplotlib = "^3.9" seaborn = "^0" neurokit2 = "^0" pingouin = "^0.5.2" diff --git a/src/biopsykit/__init__.py b/src/biopsykit/__init__.py index ba118f3..a4d5239 100644 --- a/src/biopsykit/__init__.py +++ b/src/biopsykit/__init__.py @@ -30,7 +30,7 @@ "utils", ] -__version__ = "0.11.0" +__version__ = "0.12.0" def version() -> None: diff --git a/src/biopsykit/io/tfm.py b/src/biopsykit/io/tfm.py index d611c37..1ad1c7c 100644 --- a/src/biopsykit/io/tfm.py +++ b/src/biopsykit/io/tfm.py @@ -2,9 +2,10 @@ from typing import ClassVar, Optional import pandas as pd -from biopsykit.utils._types import path_t from scipy.io import loadmat +from biopsykit.utils._types import path_t + class TFMDataset: """Class for loading and processing Task Force Monitor (TFM) data.""" diff --git a/src/biopsykit/signals/__init__.py b/src/biopsykit/signals/__init__.py index 369ada9..070d700 100644 --- a/src/biopsykit/signals/__init__.py +++ b/src/biopsykit/signals/__init__.py @@ -1,4 +1,4 @@ """Module for processing different types of biosignals.""" from biopsykit.signals import ecg, eeg, icg, imu, rsp -__all__ = ["ecg", "eeg", "imu", "rsp", "icg"] +__all__ = ["ecg", "eeg", "icg", "imu", "rsp"] diff --git a/src/biopsykit/signals/_dtypes.py b/src/biopsykit/signals/_dtypes.py index db33f81..cffe0f0 100644 --- a/src/biopsykit/signals/_dtypes.py +++ b/src/biopsykit/signals/_dtypes.py @@ -1,4 +1,5 @@ import pandas as pd + from biopsykit.utils.exceptions import ValidationError __all__ = ["assert_sample_columns_int"] diff --git a/src/biopsykit/signals/ecg/__init__.py b/src/biopsykit/signals/ecg/__init__.py index 104cbe4..399a085 100644 --- a/src/biopsykit/signals/ecg/__init__.py +++ b/src/biopsykit/signals/ecg/__init__.py @@ -2,4 +2,4 @@ from biopsykit.signals.ecg import event_extraction, plotting, preprocessing, segmentation from biopsykit.signals.ecg.ecg import EcgProcessor -__all__ = ["EcgProcessor", "plotting", "preprocessing", "segmentation", "event_extraction"] +__all__ = ["EcgProcessor", "event_extraction", "plotting", "preprocessing", "segmentation"] diff --git a/src/biopsykit/signals/ecg/event_extraction/__init__.py b/src/biopsykit/signals/ecg/event_extraction/__init__.py index 8f45359..bffd770 100644 --- a/src/biopsykit/signals/ecg/event_extraction/__init__.py +++ b/src/biopsykit/signals/ecg/event_extraction/__init__.py @@ -9,8 +9,8 @@ __all__ = [ "BaseEcgExtraction", - "QPeakExtractionVanLien2013", + "QPeakExtractionForouzanfar2018", "QPeakExtractionMartinez2004Neurokit", "QPeakExtractionSciPyFindPeaksNeurokit", - "QPeakExtractionForouzanfar2018", + "QPeakExtractionVanLien2013", ] diff --git a/src/biopsykit/signals/ecg/event_extraction/_q_peak_forounzafar2018.py b/src/biopsykit/signals/ecg/event_extraction/_q_peak_forounzafar2018.py index 2977ebf..fe2904e 100644 --- a/src/biopsykit/signals/ecg/event_extraction/_q_peak_forounzafar2018.py +++ b/src/biopsykit/signals/ecg/event_extraction/_q_peak_forounzafar2018.py @@ -1,11 +1,12 @@ import numpy as np import pandas as pd +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.ecg.event_extraction._base_ecg_extraction import BaseEcgExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_series -from tpcp import Parameter class QPeakExtractionForouzanfar2018(BaseEcgExtraction, CanHandleMissingEventsMixin): diff --git a/src/biopsykit/signals/ecg/event_extraction/_q_peak_martinez2004_neurokit.py b/src/biopsykit/signals/ecg/event_extraction/_q_peak_martinez2004_neurokit.py index afde2be..8ac2d4e 100644 --- a/src/biopsykit/signals/ecg/event_extraction/_q_peak_martinez2004_neurokit.py +++ b/src/biopsykit/signals/ecg/event_extraction/_q_peak_martinez2004_neurokit.py @@ -3,6 +3,7 @@ import neurokit2 as nk import numpy as np import pandas as pd + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.ecg.event_extraction._base_ecg_extraction import BaseEcgExtraction diff --git a/src/biopsykit/signals/ecg/event_extraction/_q_peak_scipy_findpeaks_neurokit.py b/src/biopsykit/signals/ecg/event_extraction/_q_peak_scipy_findpeaks_neurokit.py index c5cfe47..9e48f7d 100644 --- a/src/biopsykit/signals/ecg/event_extraction/_q_peak_scipy_findpeaks_neurokit.py +++ b/src/biopsykit/signals/ecg/event_extraction/_q_peak_scipy_findpeaks_neurokit.py @@ -3,6 +3,7 @@ import neurokit2 as nk import numpy as np import pandas as pd + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.ecg.event_extraction._base_ecg_extraction import BaseEcgExtraction diff --git a/src/biopsykit/signals/ecg/event_extraction/_q_peak_vanlien2013.py b/src/biopsykit/signals/ecg/event_extraction/_q_peak_vanlien2013.py index 2c1c6d9..3165b86 100644 --- a/src/biopsykit/signals/ecg/event_extraction/_q_peak_vanlien2013.py +++ b/src/biopsykit/signals/ecg/event_extraction/_q_peak_vanlien2013.py @@ -1,11 +1,12 @@ from typing import Optional import pandas as pd +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.ecg.event_extraction._base_ecg_extraction import BaseEcgExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype -from tpcp import Parameter class QPeakExtractionVanLien2013(BaseEcgExtraction, CanHandleMissingEventsMixin): diff --git a/src/biopsykit/signals/ecg/segmentation/_heartbeat_segmentation.py b/src/biopsykit/signals/ecg/segmentation/_heartbeat_segmentation.py index 318e1e0..6434562 100644 --- a/src/biopsykit/signals/ecg/segmentation/_heartbeat_segmentation.py +++ b/src/biopsykit/signals/ecg/segmentation/_heartbeat_segmentation.py @@ -3,9 +3,10 @@ import neurokit2 as nk import numpy as np import pandas as pd +from tpcp import Parameter + from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.ecg.segmentation._base_segmentation import BaseHeartbeatSegmentation -from tpcp import Parameter __all__ = ["HeartbeatSegmentationNeurokit"] diff --git a/src/biopsykit/signals/icg/__init__.py b/src/biopsykit/signals/icg/__init__.py index b817f00..d68bbdc 100644 --- a/src/biopsykit/signals/icg/__init__.py +++ b/src/biopsykit/signals/icg/__init__.py @@ -1,4 +1,4 @@ """Module for processing impedance cardiography (ICG) signals.""" from biopsykit.signals.icg import event_extraction, outlier_correction, preprocessing -__all__ = ["preprocessing", "event_extraction", "outlier_correction"] +__all__ = ["event_extraction", "outlier_correction", "preprocessing"] diff --git a/src/biopsykit/signals/icg/event_extraction/__init__.py b/src/biopsykit/signals/icg/event_extraction/__init__.py index 7af1d01..5ce8138 100644 --- a/src/biopsykit/signals/icg/event_extraction/__init__.py +++ b/src/biopsykit/signals/icg/event_extraction/__init__.py @@ -18,17 +18,17 @@ from biopsykit.signals.icg.event_extraction._c_point_scipy_findpeaks import CPointExtractionScipyFindPeaks __all__ = [ - "BaseBPointExtraction", - "BaseCPointExtraction", - "BPointExtractionStern1985", - "BPointExtractionLozano2007LinearRegression", - "BPointExtractionLozano2007QuadraticRegression", "BPointExtractionArbol2017IsoelectricCrossings", - "BPointExtractionArbol2017ThirdDerivative", "BPointExtractionArbol2017SecondDerivative", + "BPointExtractionArbol2017ThirdDerivative", + "BPointExtractionDebski1993SecondDerivative", "BPointExtractionDrost2022", - "BPointExtractionSherwood1990", "BPointExtractionForouzanfar2018", - "BPointExtractionDebski1993SecondDerivative", + "BPointExtractionLozano2007LinearRegression", + "BPointExtractionLozano2007QuadraticRegression", + "BPointExtractionSherwood1990", + "BPointExtractionStern1985", + "BaseBPointExtraction", + "BaseCPointExtraction", "CPointExtractionScipyFindPeaks", ] diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_arbol2017.py b/src/biopsykit/signals/icg/event_extraction/_b_point_arbol2017.py index 688a2d9..b74a27b 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_arbol2017.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_arbol2017.py @@ -3,18 +3,19 @@ import numpy as np import pandas as pd +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_dataframe_1d from biopsykit.utils.exceptions import EventExtractionError -from tpcp import Parameter __all__ = [ "BPointExtractionArbol2017IsoelectricCrossings", - "BPointExtractionArbol2017ThirdDerivative", "BPointExtractionArbol2017SecondDerivative", + "BPointExtractionArbol2017ThirdDerivative", ] @@ -304,7 +305,7 @@ def __init__( self.search_window_start_ms = search_window_start_ms # @make_action_safe - def extract( # noqa: PLR0915 + def extract( self, *, icg: Union[pd.Series, pd.DataFrame], diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_debski1993.py b/src/biopsykit/signals/icg/event_extraction/_b_point_debski1993.py index d1b4d5f..195dc86 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_debski1993.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_debski1993.py @@ -3,14 +3,15 @@ import numpy as np import pandas as pd +from scipy.signal import find_peaks +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_dataframe_1d from biopsykit.utils.exceptions import EventExtractionError -from scipy.signal import find_peaks -from tpcp import Parameter __all__ = ["BPointExtractionDebski1993SecondDerivative"] diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_drost2022.py b/src/biopsykit/signals/icg/event_extraction/_b_point_drost2022.py index 2108caa..b18ea7c 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_drost2022.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_drost2022.py @@ -3,13 +3,14 @@ import numpy as np import pandas as pd +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_dataframe_1d from biopsykit.utils.exceptions import EventExtractionError -from tpcp import Parameter __all__ = ["BPointExtractionDrost2022"] diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_forouzanfar2018.py b/src/biopsykit/signals/icg/event_extraction/_b_point_forouzanfar2018.py index 047ca47..86efaeb 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_forouzanfar2018.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_forouzanfar2018.py @@ -3,14 +3,15 @@ import numpy as np import pandas as pd +from scipy.signal import argrelmin +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_dataframe_1d from biopsykit.utils.exceptions import EventExtractionError -from scipy.signal import argrelmin -from tpcp import Parameter __all__ = ["BPointExtractionForouzanfar2018"] diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_lozano2007.py b/src/biopsykit/signals/icg/event_extraction/_b_point_lozano2007.py index 4c2e46b..2aec4c3 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_lozano2007.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_lozano2007.py @@ -2,11 +2,12 @@ import numpy as np import pandas as pd +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype -from tpcp import Parameter __all__ = ["BPointExtractionLozano2007LinearRegression", "BPointExtractionLozano2007QuadraticRegression"] diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_sherwood1990.py b/src/biopsykit/signals/icg/event_extraction/_b_point_sherwood1990.py index 9908a42..93a73de 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_sherwood1990.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_sherwood1990.py @@ -3,6 +3,7 @@ import numpy as np import pandas as pd + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction diff --git a/src/biopsykit/signals/icg/event_extraction/_b_point_stern1985.py b/src/biopsykit/signals/icg/event_extraction/_b_point_stern1985.py index 4f5b6d7..11f27db 100644 --- a/src/biopsykit/signals/icg/event_extraction/_b_point_stern1985.py +++ b/src/biopsykit/signals/icg/event_extraction/_b_point_stern1985.py @@ -3,13 +3,14 @@ import numpy as np import pandas as pd +from scipy.signal import find_peaks + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_b_point_extraction import BaseBPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_dataframe_1d from biopsykit.utils.exceptions import EventExtractionError -from scipy.signal import find_peaks __all__ = ["BPointExtractionStern1985"] diff --git a/src/biopsykit/signals/icg/event_extraction/_base_b_point_extraction.py b/src/biopsykit/signals/icg/event_extraction/_base_b_point_extraction.py index 5f310a1..078b143 100644 --- a/src/biopsykit/signals/icg/event_extraction/_base_b_point_extraction.py +++ b/src/biopsykit/signals/icg/event_extraction/_base_b_point_extraction.py @@ -1,6 +1,7 @@ from typing import Optional import pandas as pd + from biopsykit.signals._base_extraction import BaseExtraction __all__ = ["BaseBPointExtraction"] diff --git a/src/biopsykit/signals/icg/event_extraction/_base_c_point_extraction.py b/src/biopsykit/signals/icg/event_extraction/_base_c_point_extraction.py index 8fa0469..2c7cb3b 100644 --- a/src/biopsykit/signals/icg/event_extraction/_base_c_point_extraction.py +++ b/src/biopsykit/signals/icg/event_extraction/_base_c_point_extraction.py @@ -1,6 +1,7 @@ from typing import Optional import pandas as pd + from biopsykit.signals._base_extraction import BaseExtraction __all__ = ["BaseCPointExtraction"] diff --git a/src/biopsykit/signals/icg/event_extraction/_c_point_scipy_findpeaks.py b/src/biopsykit/signals/icg/event_extraction/_c_point_scipy_findpeaks.py index 38434d7..5bc9cd8 100644 --- a/src/biopsykit/signals/icg/event_extraction/_c_point_scipy_findpeaks.py +++ b/src/biopsykit/signals/icg/event_extraction/_c_point_scipy_findpeaks.py @@ -3,14 +3,15 @@ import numpy as np import pandas as pd +from scipy import signal +from tpcp import Parameter + from biopsykit.signals._base_extraction import HANDLE_MISSING_EVENTS, CanHandleMissingEventsMixin from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.event_extraction._base_c_point_extraction import BaseCPointExtraction from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from biopsykit.utils.array_handling import sanitize_input_dataframe_1d from biopsykit.utils.exceptions import EventExtractionError -from scipy import signal -from tpcp import Parameter __all__ = ["CPointExtractionScipyFindPeaks"] diff --git a/src/biopsykit/signals/icg/outlier_correction/__init__.py b/src/biopsykit/signals/icg/outlier_correction/__init__.py index 84bf541..134d4ad 100644 --- a/src/biopsykit/signals/icg/outlier_correction/__init__.py +++ b/src/biopsykit/signals/icg/outlier_correction/__init__.py @@ -10,7 +10,7 @@ __all__ = [ "BaseOutlierCorrection", + "OutlierCorrectionDummy", "OutlierCorrectionForouzanfar2018", "OutlierCorrectionLinearInterpolation", - "OutlierCorrectionDummy", ] diff --git a/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_dummy.py b/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_dummy.py index 7c77df3..1e09a44 100644 --- a/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_dummy.py +++ b/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_dummy.py @@ -1,6 +1,7 @@ from typing import Optional import pandas as pd + from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.outlier_correction import BaseOutlierCorrection diff --git a/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_forouzanfar2018.py b/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_forouzanfar2018.py index 31e697e..4ca22d9 100644 --- a/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_forouzanfar2018.py +++ b/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_forouzanfar2018.py @@ -2,13 +2,14 @@ import numpy as np import pandas as pd -from biopsykit.signals._dtypes import assert_sample_columns_int -from biopsykit.signals.icg.outlier_correction._base_outlier_correction import BaseOutlierCorrection -from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype from statsmodels.tools.sm_exceptions import ValueWarning from statsmodels.tsa.ar_model import ar_select_order from statsmodels.tsa.arima.model import ARIMA +from biopsykit.signals._dtypes import assert_sample_columns_int +from biopsykit.signals.icg.outlier_correction._base_outlier_correction import BaseOutlierCorrection +from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype + __all__ = ["OutlierCorrectionForouzanfar2018"] diff --git a/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_linear_interpolation.py b/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_linear_interpolation.py index 6c5b8b0..c83cdea 100644 --- a/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_linear_interpolation.py +++ b/src/biopsykit/signals/icg/outlier_correction/_outlier_correction_linear_interpolation.py @@ -1,5 +1,6 @@ import numpy as np import pandas as pd + from biopsykit.signals._dtypes import assert_sample_columns_int from biopsykit.signals.icg.outlier_correction._base_outlier_correction import BaseOutlierCorrection from biopsykit.utils._datatype_validation_helper import _assert_has_columns, _assert_is_dtype diff --git a/src/biopsykit/utils/array_handling.py b/src/biopsykit/utils/array_handling.py index 38c6f88..b2934f9 100644 --- a/src/biopsykit/utils/array_handling.py +++ b/src/biopsykit/utils/array_handling.py @@ -4,9 +4,10 @@ import neurokit2 as nk import numpy as np import pandas as pd +from scipy import interpolate, signal + from biopsykit.utils._datatype_validation_helper import _assert_num_columns from biopsykit.utils._types import arr_t, str_t -from scipy import interpolate, signal def sanitize_input_1d(data: arr_t) -> np.ndarray: diff --git a/tests/test_algorithms/test_b_point_extraction_arbol2017.py b/tests/test_algorithms/test_b_point_extraction_arbol2017.py index 7524d9f..92ae605 100644 --- a/tests/test_algorithms/test_b_point_extraction_arbol2017.py +++ b/tests/test_algorithms/test_b_point_extraction_arbol2017.py @@ -3,6 +3,7 @@ from pathlib import Path import pandas as pd + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import ( BPointExtractionArbol2017ThirdDerivative, diff --git a/tests/test_algorithms/test_b_point_extraction_debski1993.py b/tests/test_algorithms/test_b_point_extraction_debski1993.py index 2bd736a..6c2e593 100644 --- a/tests/test_algorithms/test_b_point_extraction_debski1993.py +++ b/tests/test_algorithms/test_b_point_extraction_debski1993.py @@ -3,6 +3,7 @@ from pathlib import Path import pandas as pd + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import ( BPointExtractionDebski1993SecondDerivative, diff --git a/tests/test_algorithms/test_b_point_extraction_drost2022.py b/tests/test_algorithms/test_b_point_extraction_drost2022.py index 444370e..76c035e 100644 --- a/tests/test_algorithms/test_b_point_extraction_drost2022.py +++ b/tests/test_algorithms/test_b_point_extraction_drost2022.py @@ -3,6 +3,7 @@ from pathlib import Path import pandas as pd + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import ( BPointExtractionDrost2022, diff --git a/tests/test_algorithms/test_b_point_extraction_forouzanfar2018.py b/tests/test_algorithms/test_b_point_extraction_forouzanfar2018.py index 13a0bfa..ad916da 100644 --- a/tests/test_algorithms/test_b_point_extraction_forouzanfar2018.py +++ b/tests/test_algorithms/test_b_point_extraction_forouzanfar2018.py @@ -3,6 +3,7 @@ from pathlib import Path import pandas as pd + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import ( BPointExtractionForouzanfar2018, diff --git a/tests/test_algorithms/test_c_point_extraction_scipy_findpeaks.py b/tests/test_algorithms/test_c_point_extraction_scipy_findpeaks.py index ac84e8b..40b0e53 100644 --- a/tests/test_algorithms/test_c_point_extraction_scipy_findpeaks.py +++ b/tests/test_algorithms/test_c_point_extraction_scipy_findpeaks.py @@ -5,6 +5,7 @@ import pandas as pd import pytest + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import CPointExtractionScipyFindPeaks from biopsykit.utils._datatype_validation_helper import _assert_is_dtype diff --git a/tests/test_algorithms/test_heatbeat_segmentation.py b/tests/test_algorithms/test_heatbeat_segmentation.py index f42a662..c38b4ad 100644 --- a/tests/test_algorithms/test_heatbeat_segmentation.py +++ b/tests/test_algorithms/test_heatbeat_segmentation.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd import pytest + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.utils._datatype_validation_helper import _assert_is_dtype from biopsykit.utils.exceptions import ValidationError diff --git a/tests/test_algorithms/test_outlier_correction_forouzanfar2018.py b/tests/test_algorithms/test_outlier_correction_forouzanfar2018.py index 387ef4e..8ed4fd2 100644 --- a/tests/test_algorithms/test_outlier_correction_forouzanfar2018.py +++ b/tests/test_algorithms/test_outlier_correction_forouzanfar2018.py @@ -4,6 +4,7 @@ import pandas as pd import pytest + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import BPointExtractionForouzanfar2018, CPointExtractionScipyFindPeaks from biopsykit.signals.icg.outlier_correction import OutlierCorrectionForouzanfar2018 diff --git a/tests/test_algorithms/test_outlier_correction_interpolation.py b/tests/test_algorithms/test_outlier_correction_interpolation.py index 02ca779..5ea0da3 100644 --- a/tests/test_algorithms/test_outlier_correction_interpolation.py +++ b/tests/test_algorithms/test_outlier_correction_interpolation.py @@ -4,6 +4,7 @@ import pandas as pd import pytest + from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.signals.icg.event_extraction import BPointExtractionForouzanfar2018, CPointExtractionScipyFindPeaks from biopsykit.signals.icg.outlier_correction import OutlierCorrectionLinearInterpolation diff --git a/tests/test_algorithms/test_q_wave_onset_extraction.py b/tests/test_algorithms/test_q_wave_onset_extraction.py index b727c0d..09d0713 100644 --- a/tests/test_algorithms/test_q_wave_onset_extraction.py +++ b/tests/test_algorithms/test_q_wave_onset_extraction.py @@ -4,6 +4,7 @@ import pandas as pd import pytest + from biopsykit.signals.ecg.event_extraction import QPeakExtractionMartinez2004Neurokit, QPeakExtractionVanLien2013 from biopsykit.signals.ecg.segmentation._heartbeat_segmentation import HeartbeatSegmentationNeurokit from biopsykit.utils._datatype_validation_helper import _assert_is_dtype