systole


Namesystole JSON
Version 0.3.0 PyPI version JSON
download
home_pagehttps://github.com/LegrandNico/systole
SummarySystole: A python package for cardiac signal synchrony and analysis
upload_time2024-01-15 13:11:16
maintainerNicolas Legrand
docs_urlNone
authorNicolas Legrand
requires_python
licenseGPL-3.0
keywords
VCS
bugtrack_url
requirements numpy scipy pandas matplotlib seaborn bokeh pyserial setuptools packaging numba tqdm requests tabulate sleepecg joblib
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
.. image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg
  :target: https://github.com/LegrandNico/systole/blob/master/LICENSE

.. image:: https://badge.fury.io/py/systole.svg
    :target: https://badge.fury.io/py/systole

.. image:: https://joss.theoj.org/papers/10.21105/joss.03832/status.svg
   :target: https://doi.org/10.21105/joss.03832

.. image:: https://codecov.io/gh/LegrandNico/systole/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/LegrandNico/systole

.. image:: https://img.shields.io/badge/code%20style-black-000000.svg
  :target: https://github.com/psf/black

.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336
  :target: https://pycqa.github.io/isort/

.. image:: http://www.mypy-lang.org/static/mypy_badge.svg
  :target: http://mypy-lang.org/

.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white
  :target: https://github.com/pre-commit/pre-commit

================

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/logo.png
   :align: center

================

**Systole** is an open-source Python package implementing simple tools for working with cardiac signals for psychophysiology research. In particular, the package provides tools to pre-process, visualize, and analyze cardiac data. 
This includes tools for data epoching, artefact detection, artefact correction, evoked heart rate analyses, heart rate 
variability analyses, circular statistical approaches to analysing cardiac cycles, and synchronising stimulus 
presentation with different cardiac phases via Psychopy.

The documentation can be found under the following `link <https://LegrandNico.github.io/systole/#>`_.

If you have questions, you can ask them in the discussion section of this repository.

How to cite?
++++++++++++

If you are using **Systole** in a publication we ask you to cite the following paper::

  Legrand et al., (2022). Systole: A python package for cardiac signal synchrony and analysis. Journal of Open Source Software, 7(69), 3832, https://doi.org/10.21105/joss.03832


Installation
++++++++++++

Systole can be installed using pip:

.. code-block:: shell

  pip install systole

The following packages are required to use Systole:

* `Numpy <https://numpy.org/>`_ (>=1.21,<=1.26)
* `SciPy <https://www.scipy.org/>`_ (>=1.3.0)
* `Pandas <https://pandas.pydata.org/>`_ (>=0.24)
* `Numba <http://numba.pydata.org/>`_ (>=0.58.0)
* `Seaborn <https://seaborn.pydata.org/>`_ (>=0.9.0)
* `Matplotlib <https://matplotlib.org/>`_ (>=3.0.2)
* `Bokeh <https://docs.bokeh.org/en/latest/index.html#>`_ (>=3.0.0)
* `pyserial <https://pyserial.readthedocs.io/en/latest/pyserial.html>`_ (>=3.4)
* `setuptools <https://setuptools.pypa.io/en/latest/>`_ (>=38.4)
* `requests <https://docs.python-requests.org/en/latest/>`_ (>=2.26.0)
* `tabulate <https://github.com/astanin/python-tabulate/>`_ (>=0.8.9)


The Python version should be 3.7 or higher.

Tutorials
=========

For an introduction to Systole and cardiac signal analysis, you can refer to the following tutorial:

.. list-table::
   :widths: 60 40
   :header-rows: 0
   :align: center

   * - Cardiac signal analysis 
     - |Colab badge 1|
   * - Detecting cardiac cycles 
     - |Colab badge 2|
   * - Detecting and correcting artefats 
     - |Colab badge 3|
   * - Heart rate variability 
     - |Colab badge 4|
   * - Instantaneous and evoked heart rate 
     - |Colab badge 5|
   * - Working with BIDS folders
     - |Colab badge 6|

.. |Colab badge 1| image:: https://colab.research.google.com/assets/colab-badge.svg
  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/1-PhysiologicalSignals.ipynb

.. |Colab badge 2| image:: https://colab.research.google.com/assets/colab-badge.svg
  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/2-DetectingCycles.ipynb

.. |Colab badge 3| image:: https://colab.research.google.com/assets/colab-badge.svg
  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/3-DetectingAndCorrectingArtefacts.ipynb

.. |Colab badge 4| image:: https://colab.research.google.com/assets/colab-badge.svg
  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/4-HeartRateVariability.ipynb

.. |Colab badge 5| image:: https://colab.research.google.com/assets/colab-badge.svg
  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/5-InstantaneousHeartRate.ipynb

.. |Colab badge 6| image:: https://colab.research.google.com/assets/colab-badge.svg
  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/6-WorkingWithBIDSFolders.ipynb


Getting started
+++++++++++++++

.. code-block:: python

  from systole import import_dataset1

  # Import ECg recording
  signal = import_dataset1(modalities=['ECG']).ecg.to_numpy()


Signal extraction and interactive plotting
==========================================
The package integrates a set of functions for interactive or non interactive data visualization based on `Matplotlib <https://matplotlib.org/>`_ and `Bokeh <https://docs.bokeh.org/en/latest/index.html#>`_.

.. code-block:: python

  from systole.plots import plot_raw

  plot_raw(signal[60000 : 120000], modality="ecg", backend="bokeh", 
              show_heart_rate=True, show_artefacts=True, figsize=300)

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/raw.png
   :align: center


Artefacts detection and rejection
=================================
Artefacts can be detected and corrected in the RR interval time series or the peaks vector using the method proposed by Lipponen & Tarvainen (2019).

.. code-block:: python

  from systole.detection import ecg_peaks
  from systole.plots import plot_subspaces

  # R peaks detection
  signal, peaks = ecg_peaks(signal, method='pan-tompkins', sfreq=1000)

  plot_subspaces(peaks, input_type="peaks", backend="bokeh")

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/subspaces.png
   :align: center


Heart rate variability analysis
===============================
Systole implements time-domain, frequency-domain and non-linear HRV indices, as well as tools for evoked heart rate analysis.

.. code-block:: python

  from bokeh.layouts import row
  from systole.plots import plot_frequency, plot_poincare

  row(
      plot_frequency(peaks, input_type="peaks", backend="bokeh", figsize=(300, 200)),
      plot_poincare(peaks, input_type="peaks", backend="bokeh", figsize=(200, 200)),
      )

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/hrv.png
   :align: center


Online systolic peak detection, cardiac-stimulus synchrony, and cardiac circular analysis
=========================================================================================

The package natively supports recording of physiological signals from the following setups:
- `Nonin 3012LP Xpod USB pulse oximeter <https://www.nonin.com/products/xpod/>`_ together with the `Nonin 8000SM 'soft-clip' fingertip sensors <https://www.nonin.com/products/8000s/>`_ (USB).
- Remote Data Access (RDA) via BrainVision Recorder together with `Brain product ExG amplifier <https://www.brainproducts.com/>`_ (Ethernet).

Interactive visualization of BIDS structured datasets
=====================================================

.. code-block:: python

  from systole.viewer import Viewer

  view = Viewer(
      input_folder="/BIDS/folder/path/",
      pattern="task-mytask",
      modality="beh",
      signal_type="ECG"
  )

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/editor.gif
   :align: center

Inserting and removing peaks
============================

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/peaks.gif
   :align: center

Annotating bad segments
=======================

.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/segments.gif
   :align: center

Development
+++++++++++

This repository is a fork of the `original Systole repository <https://github.com/embodied-computation-group/systole>` and is maintained by Nicolas Legrand. If you want to contribute, feel free to contact one of the developers, open an issue or submit a pull request.

This program is provided with NO WARRANTY OF ANY KIND.

Acknowledgements
++++++++++++++++

This software and the ECG are supported by a Lundbeckfonden Fellowship (R272-2017-4345), and the AIAS-COFUND II fellowship programme that is supported by the Marie Skłodowska-Curie actions under the European Union’s Horizon 2020 (Grant agreement no 754513), and the Aarhus University Research Foundation.

Systole was largely inspired by pre-existing toolboxes dedicated to heartrate variability and signal analysis.

* HeartPy: https://python-heart-rate-analysis-toolkit.readthedocs.io/en/latest/

* hrv: https://github.com/rhenanbartels/hrv

* pyHRV: https://pyhrv.readthedocs.io/en/latest/index.html

* ECG-detector: https://github.com/berndporr/py-ecg-detectors

* Pingouin: https://pingouin-stats.org/

* NeuroKit2: https://github.com/neuropsychology/NeuroKit

================

|AU|

.. |AU| image::  https://github.com/LegrandNico/systole/blob/master/docs/source/images/au_clinisk_logo.png
   :width: 100%

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/LegrandNico/systole",
    "name": "systole",
    "maintainer": "Nicolas Legrand",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "nicolas.legrand@cfin.au.dk",
    "keywords": "",
    "author": "Nicolas Legrand",
    "author_email": "nicolas.legrand@cfin.au.dk",
    "download_url": "https://files.pythonhosted.org/packages/60/cf/4faab7b159a58bdbdd410ef8d1dd4ba8e0c2cda3f74551c9c8c647ef5f70/systole-0.3.0.tar.gz",
    "platform": null,
    "description": "\n.. image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg\n  :target: https://github.com/LegrandNico/systole/blob/master/LICENSE\n\n.. image:: https://badge.fury.io/py/systole.svg\n    :target: https://badge.fury.io/py/systole\n\n.. image:: https://joss.theoj.org/papers/10.21105/joss.03832/status.svg\n   :target: https://doi.org/10.21105/joss.03832\n\n.. image:: https://codecov.io/gh/LegrandNico/systole/branch/master/graph/badge.svg\n   :target: https://codecov.io/gh/LegrandNico/systole\n\n.. image:: https://img.shields.io/badge/code%20style-black-000000.svg\n  :target: https://github.com/psf/black\n\n.. image:: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336\n  :target: https://pycqa.github.io/isort/\n\n.. image:: http://www.mypy-lang.org/static/mypy_badge.svg\n  :target: http://mypy-lang.org/\n\n.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white\n  :target: https://github.com/pre-commit/pre-commit\n\n================\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/logo.png\n   :align: center\n\n================\n\n**Systole** is an open-source Python package implementing simple tools for working with cardiac signals for psychophysiology research. In particular, the package provides tools to pre-process, visualize, and analyze cardiac data. \nThis includes tools for data epoching, artefact detection, artefact correction, evoked heart rate analyses, heart rate \nvariability analyses, circular statistical approaches to analysing cardiac cycles, and synchronising stimulus \npresentation with different cardiac phases via Psychopy.\n\nThe documentation can be found under the following `link <https://LegrandNico.github.io/systole/#>`_.\n\nIf you have questions, you can ask them in the discussion section of this repository.\n\nHow to cite?\n++++++++++++\n\nIf you are using **Systole** in a publication we ask you to cite the following paper::\n\n  Legrand et al., (2022). Systole: A python package for cardiac signal synchrony and analysis. Journal of Open Source Software, 7(69), 3832, https://doi.org/10.21105/joss.03832\n\n\nInstallation\n++++++++++++\n\nSystole can be installed using pip:\n\n.. code-block:: shell\n\n  pip install systole\n\nThe following packages are required to use Systole:\n\n* `Numpy <https://numpy.org/>`_ (>=1.21,<=1.26)\n* `SciPy <https://www.scipy.org/>`_ (>=1.3.0)\n* `Pandas <https://pandas.pydata.org/>`_ (>=0.24)\n* `Numba <http://numba.pydata.org/>`_ (>=0.58.0)\n* `Seaborn <https://seaborn.pydata.org/>`_ (>=0.9.0)\n* `Matplotlib <https://matplotlib.org/>`_ (>=3.0.2)\n* `Bokeh <https://docs.bokeh.org/en/latest/index.html#>`_ (>=3.0.0)\n* `pyserial <https://pyserial.readthedocs.io/en/latest/pyserial.html>`_ (>=3.4)\n* `setuptools <https://setuptools.pypa.io/en/latest/>`_ (>=38.4)\n* `requests <https://docs.python-requests.org/en/latest/>`_ (>=2.26.0)\n* `tabulate <https://github.com/astanin/python-tabulate/>`_ (>=0.8.9)\n\n\nThe Python version should be 3.7 or higher.\n\nTutorials\n=========\n\nFor an introduction to Systole and cardiac signal analysis, you can refer to the following tutorial:\n\n.. list-table::\n   :widths: 60 40\n   :header-rows: 0\n   :align: center\n\n   * - Cardiac signal analysis \n     - |Colab badge 1|\n   * - Detecting cardiac cycles \n     - |Colab badge 2|\n   * - Detecting and correcting artefats \n     - |Colab badge 3|\n   * - Heart rate variability \n     - |Colab badge 4|\n   * - Instantaneous and evoked heart rate \n     - |Colab badge 5|\n   * - Working with BIDS folders\n     - |Colab badge 6|\n\n.. |Colab badge 1| image:: https://colab.research.google.com/assets/colab-badge.svg\n  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/1-PhysiologicalSignals.ipynb\n\n.. |Colab badge 2| image:: https://colab.research.google.com/assets/colab-badge.svg\n  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/2-DetectingCycles.ipynb\n\n.. |Colab badge 3| image:: https://colab.research.google.com/assets/colab-badge.svg\n  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/3-DetectingAndCorrectingArtefacts.ipynb\n\n.. |Colab badge 4| image:: https://colab.research.google.com/assets/colab-badge.svg\n  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/4-HeartRateVariability.ipynb\n\n.. |Colab badge 5| image:: https://colab.research.google.com/assets/colab-badge.svg\n  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/5-InstantaneousHeartRate.ipynb\n\n.. |Colab badge 6| image:: https://colab.research.google.com/assets/colab-badge.svg\n  :target: https://colab.research.google.com/github/LegrandNico/systole/blob/master/docs/source/notebooks/6-WorkingWithBIDSFolders.ipynb\n\n\nGetting started\n+++++++++++++++\n\n.. code-block:: python\n\n  from systole import import_dataset1\n\n  # Import ECg recording\n  signal = import_dataset1(modalities=['ECG']).ecg.to_numpy()\n\n\nSignal extraction and interactive plotting\n==========================================\nThe package integrates a set of functions for interactive or non interactive data visualization based on `Matplotlib <https://matplotlib.org/>`_ and `Bokeh <https://docs.bokeh.org/en/latest/index.html#>`_.\n\n.. code-block:: python\n\n  from systole.plots import plot_raw\n\n  plot_raw(signal[60000 : 120000], modality=\"ecg\", backend=\"bokeh\", \n              show_heart_rate=True, show_artefacts=True, figsize=300)\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/raw.png\n   :align: center\n\n\nArtefacts detection and rejection\n=================================\nArtefacts can be detected and corrected in the RR interval time series or the peaks vector using the method proposed by Lipponen & Tarvainen (2019).\n\n.. code-block:: python\n\n  from systole.detection import ecg_peaks\n  from systole.plots import plot_subspaces\n\n  # R peaks detection\n  signal, peaks = ecg_peaks(signal, method='pan-tompkins', sfreq=1000)\n\n  plot_subspaces(peaks, input_type=\"peaks\", backend=\"bokeh\")\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/subspaces.png\n   :align: center\n\n\nHeart rate variability analysis\n===============================\nSystole implements time-domain, frequency-domain and non-linear HRV indices, as well as tools for evoked heart rate analysis.\n\n.. code-block:: python\n\n  from bokeh.layouts import row\n  from systole.plots import plot_frequency, plot_poincare\n\n  row(\n      plot_frequency(peaks, input_type=\"peaks\", backend=\"bokeh\", figsize=(300, 200)),\n      plot_poincare(peaks, input_type=\"peaks\", backend=\"bokeh\", figsize=(200, 200)),\n      )\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/hrv.png\n   :align: center\n\n\nOnline systolic peak detection, cardiac-stimulus synchrony, and cardiac circular analysis\n=========================================================================================\n\nThe package natively supports recording of physiological signals from the following setups:\n- `Nonin 3012LP Xpod USB pulse oximeter <https://www.nonin.com/products/xpod/>`_ together with the `Nonin 8000SM 'soft-clip' fingertip sensors <https://www.nonin.com/products/8000s/>`_ (USB).\n- Remote Data Access (RDA) via BrainVision Recorder together with `Brain product ExG amplifier <https://www.brainproducts.com/>`_ (Ethernet).\n\nInteractive visualization of BIDS structured datasets\n=====================================================\n\n.. code-block:: python\n\n  from systole.viewer import Viewer\n\n  view = Viewer(\n      input_folder=\"/BIDS/folder/path/\",\n      pattern=\"task-mytask\",\n      modality=\"beh\",\n      signal_type=\"ECG\"\n  )\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/editor.gif\n   :align: center\n\nInserting and removing peaks\n============================\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/peaks.gif\n   :align: center\n\nAnnotating bad segments\n=======================\n\n.. image:: https://github.com/LegrandNico/systole/blob/master/docs/source/images/segments.gif\n   :align: center\n\nDevelopment\n+++++++++++\n\nThis repository is a fork of the `original Systole repository <https://github.com/embodied-computation-group/systole>` and is maintained by Nicolas Legrand. If you want to contribute, feel free to contact one of the developers, open an issue or submit a pull request.\n\nThis program is provided with NO WARRANTY OF ANY KIND.\n\nAcknowledgements\n++++++++++++++++\n\nThis software and the ECG are supported by a Lundbeckfonden Fellowship (R272-2017-4345), and the AIAS-COFUND II fellowship programme that is supported by the Marie Sk\u0142odowska-Curie actions under the European Union\u2019s Horizon 2020 (Grant agreement no 754513), and the Aarhus University Research Foundation.\n\nSystole was largely inspired by pre-existing toolboxes dedicated to heartrate variability and signal analysis.\n\n* HeartPy: https://python-heart-rate-analysis-toolkit.readthedocs.io/en/latest/\n\n* hrv: https://github.com/rhenanbartels/hrv\n\n* pyHRV: https://pyhrv.readthedocs.io/en/latest/index.html\n\n* ECG-detector: https://github.com/berndporr/py-ecg-detectors\n\n* Pingouin: https://pingouin-stats.org/\n\n* NeuroKit2: https://github.com/neuropsychology/NeuroKit\n\n================\n\n|AU|\n\n.. |AU| image::  https://github.com/LegrandNico/systole/blob/master/docs/source/images/au_clinisk_logo.png\n   :width: 100%\n",
    "bugtrack_url": null,
    "license": "GPL-3.0",
    "summary": "Systole: A python package for cardiac signal synchrony and analysis",
    "version": "0.3.0",
    "project_urls": {
        "Homepage": "https://github.com/LegrandNico/systole"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a3502eec7c3e5b6043fee4e5e3cf1721589b2b2eb6907ac98d2af26b1dfc434e",
                "md5": "624bc4c9ceff7c32aa76eaf99de80cc6",
                "sha256": "dc1b986e546460ef568815f7beccb0362c30635aa962c76fbf7b05a59f439e4b"
            },
            "downloads": -1,
            "filename": "systole-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "624bc4c9ceff7c32aa76eaf99de80cc6",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 158634,
            "upload_time": "2024-01-15T13:11:14",
            "upload_time_iso_8601": "2024-01-15T13:11:14.892956Z",
            "url": "https://files.pythonhosted.org/packages/a3/50/2eec7c3e5b6043fee4e5e3cf1721589b2b2eb6907ac98d2af26b1dfc434e/systole-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "60cf4faab7b159a58bdbdd410ef8d1dd4ba8e0c2cda3f74551c9c8c647ef5f70",
                "md5": "08677c88cae1bc6963ac43bb17fabfbe",
                "sha256": "ee8f3a692e255418736b0b204150fcac66d9fd306ffe70a1680e0979b532baf2"
            },
            "downloads": -1,
            "filename": "systole-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "08677c88cae1bc6963ac43bb17fabfbe",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 123284,
            "upload_time": "2024-01-15T13:11:16",
            "upload_time_iso_8601": "2024-01-15T13:11:16.639311Z",
            "url": "https://files.pythonhosted.org/packages/60/cf/4faab7b159a58bdbdd410ef8d1dd4ba8e0c2cda3f74551c9c8c647ef5f70/systole-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-15 13:11:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "LegrandNico",
    "github_project": "systole",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.21"
                ],
                [
                    "<=",
                    "1.26"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    ">=",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    ">=",
                    "0.24"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    ">=",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "seaborn",
            "specs": [
                [
                    ">=",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "bokeh",
            "specs": [
                [
                    ">=",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "pyserial",
            "specs": [
                [
                    ">=",
                    "3.4"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    ">=",
                    "38.4"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": []
        },
        {
            "name": "numba",
            "specs": [
                [
                    ">=",
                    "0.58.0"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": []
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.26.0"
                ]
            ]
        },
        {
            "name": "tabulate",
            "specs": [
                [
                    ">=",
                    "0.8.9"
                ]
            ]
        },
        {
            "name": "sleepecg",
            "specs": [
                [
                    ">=",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "joblib",
            "specs": [
                [
                    ">=",
                    "1.3.2"
                ]
            ]
        }
    ],
    "lcname": "systole"
}
        
Elapsed time: 1.03167s