lydata


Namelydata JSON
Version 0.2.2 PyPI version JSON
download
home_pageNone
SummaryLibrary for handling lymphatic involvement data
upload_time2024-12-03 14:02:15
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords data lymph involvement
VCS
bugtrack_url
requirements aiohttp aiohttp-retry aiosignal amqp annotated-types antlr4-python3-runtime anyio appdirs argon2-cffi argon2-cffi-bindings arrow asttokens async-lru async-timeout asyncssh atpublic attrs babel beautifulsoup4 billiard bleach blosc2 celery certifi cffi charset-normalizer click click-didyoumean click-plugins click-repl colorama comm configobj contourpy corner cryptography cycler debugpy decorator defusedxml dictdiffer diskcache distro dpath dulwich dvc dvc-data dvc-http dvc-objects dvc-render dvc-studio-client dvc-task emcee entrypoints exceptiongroup executing fastjsonschema filelock flatten-dict flufl-lock fonttools fqdn frozenlist fsspec funcy gitdb gitpython grandalf gto h11 h5py httpcore httpx hydra-core icd10-cm idna ipykernel ipython ipython-genutils ipywidgets isoduration iterative-telemetry jedi jinja2 json5 jsonpointer jsonschema jsonschema-specifications jupyter jupyter-client jupyter-console jupyter-contrib-core jupyter-contrib-nbextensions jupyter-core jupyter-events jupyter-highlight-selected-word jupyter-lsp jupyter-nbextensions-configurator jupyter-server jupyter-server-terminals jupyterlab jupyterlab-pygments jupyterlab-server jupyterlab-widgets kiwisolver kombu lazydocs lxml lymph-model lyscripts markdown-it-py markupsafe matplotlib matplotlib-inline mdurl mistune msgpack multidict nbclient nbconvert nbformat ndindex nest-asyncio networkx notebook notebook-shim numexpr numpy omegaconf orjson overrides packaging pandas pandocfilters parso pathspec pexpect pillow platformdirs prometheus-client prompt-toolkit psutil ptyprocess pure-eval py-cpuinfo pycparser pydantic pydantic-core pydot pygit2 pygments pygtrie pyparsing python-dateutil python-json-logger pytz pyyaml pyzmq qtconsole qtpy referencing requests rfc3339-validator rfc3986-validator rich rich-argparse rpds-py ruamel-yaml ruamel-yaml-clib scipy scmrepo semver send2trash setuptools shellingham shortuuid shtab six smmap sniffio soupsieve sqltrie stack-data tables tabulate terminado tinycss2 tomli tomlkit tornado tqdm traitlets tueplots typer types-python-dateutil typing-extensions tzdata uri-template urllib3 vine voluptuous wcwidth webcolors webencodings websocket-client widgetsnbextension xlrd yarl zc-lockfile
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![social card](https://raw.githubusercontent.com/rmnldwg/lydata/main/github-social-card.png)

## What is lyDATA?

lyDATA is a repository for datasets that report detailed patterns of lymphatic progression for head & neck squamous cell carcinoma (HNSCC).

## Motivation

HNSCC spreads though the lymphatic system of the neck and forms metastases in regional lymph nodes. Macroscopic metastases can be detected with imaging modalities like MRI, PET and CT scans. They are then consequently included in the target volume, when radiotherapy is chosen as part of the treatment. However, microscopic metastases are too small be diagnosed with current imaging techniques.

To account for this microscopic involvement, parts of the lymphatic system are often irradiated electively to increase tumor control. Which parts are included in this elective clinical target volume is currently decided based on guidelines like [[1]](#1), [[2]](#2), [[3]](#3) and [[4]](#4). These in turn are derived from reports of the prevalence of involvement per lymph node level (LNL), i.e. the portion of patients that were diagnosed with metastases in any given LNL, stratified by primary tumor location. It is recommended to include a LNL in the elective target volume if 10 - 15% of patients showed involvement in that particular level.

However, while the prevalence of involvement has been reported in the literature, e.g. in [[5]](#5) and [[6]](#6), and the general lymph drainage pathways are understood well, the detailed progression patterns of HNSCC remain poorly quantified. We believe that the risk for microscopic involvement in an LNL depends highly on the specific diagnose of a particular patient and their treatment can hence be personalized if the progression patterns were better quantified.

## Our Goal

In this repository we aim to provide data on the detailed lymphatic progression patterns extracted from patients of the University Hospital Zurich (USZ). The data can be used freely and we hope clinicians in the field find it useful as well. Ideally, we can motivate other researchers to share their data in similar detail and openness, so that large multi-centric datasets can be built.

## Available datasets

### đź“‚ [2021 USZ Oropharynx]

[![radonc badge](https://img.shields.io/badge/Rad%20Onc-j.radonc.2022.01.035-3e6e0e)](https://doi.org/10.1016/j.radonc.2022.01.035)
[![medRxiv badge](https://img.shields.io/badge/medR%CF%87iv-2021.12.01.21267001-0e4c92)](https://doi.org/10.1101/2021.12.01.21267001)
[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2022.108345-orange)](https://doi.org/10.1016/j.dib.2022.108345)
[![zenodo badge](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.5833835-informational)](https://doi.org/10.5281/zenodo.5833835)

The first dataset we are able to share consists of 287 patients with a primary tumor in the oropharynx, treated at the University Hospital Zurich (USZ) between 2013 and 2019. It can be found in the folder `2021-usz-oropharynx` alongside a `jupyter` notebook that was used to create figures.

We have published a paper about it in *Radiotherapy & Oncology* [[9]](#9) (a preprint is also available on *medRxiv* [[10]](#10)). The dataset is described in detail and can be freely used and cited as a *Data in Brief* paper [[11]](#11).

[2021 USZ Oropharynx]: https://github.com/rmnldwg/lyDATA/tree/main/2021-usz-oropharynx

### đź“‚ [2021 CLB Oropharynx]

[![Green Journal](https://img.shields.io/badge/Rad%20Onc-j.radonc.2021.01.028-3e6e0e)](https://doi.org/10.1016/j.radonc.2021.01.028)
[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2023.110020-orange)](https://doi.org/10.1016/j.dib.2023.110020)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10204085.svg)](https://doi.org/10.5281/zenodo.10204085)

We are glad and thankful that the research group around Prof. Vincent Grégoire from the [Centre Léon Bérard] in Lyon (France) have joined our effort to create a database of lymphatic patterns of progression by providing us with the data underlying their publication [[6]](#6). If you use this data, don't forget to cite either said publication or use the `CITATION.cff` file inside the `2021-clb-oropharynx` folder, where the `data.csv` also resides and a description of the data named `README.md`.

[2021 CLB Oropharynx]: https://github.com/rmnldwg/lyDATA/tree/main/2021-clb-oropharynx
[Centre LĂ©on BĂ©rard]: https://www.centreleonberard.fr/en

### đź“‚ [2023 ISB Multisite]

[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2023.110020-orange)](https://doi.org/10.1016/j.dib.2023.110020)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10210423.svg)](https://doi.org/10.5281/zenodo.10210423)

As part of a collaboration with researchers from the [Inselspital Bern] (Switzerland) around Prof. Roland Giger, we are thankful and glad to be able to publish a large and exceptionally detailed dataset on lymphatic progression of HNSCC patients, assessed by pathology. In contrast to earlier datasets, this includes not only patients with oropharyngeal tumors, but also oral cavity, hypopharynx and larynx.

[2023 ISB Multisite]: https://github.com/rmnldwg/lyDATA/tree/main/2023-isb-multisite
[Inselspital Bern]: https://www.insel.ch/de/

### đź“‚ [2023 CLB Multisite]

[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2023.110020-orange)](https://doi.org/10.1016/j.dib.2023.110020)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10210361.svg)](https://doi.org/10.5281/zenodo.10210361)

Completing the "2021 CLB Oropharynx" data table, these patient records detail lymphatic involvement patterns in HNSCC patients with primary tumors beyond the oropharynx. Again, they are thankfully provided by researchers in Prof. Vincent Grégoire's group and the data was extracted at the [Centre Léon Bérard].

[2023 CLB Multisite]: https://github.com/rmnldwg/lyDATA/tree/main/2023-clb-multisite

### stay tuned for more

We are in the process of collecting more data that we might publish soon. If you would like to contribute to our effort, feel free to contact us: [roman.ludwig@usz.ch]

[roman.ludwig@usz.ch]: mailto:roman.ludwig@usz.ch

## Attribution

Every folder that corresponds to a dataset also contains a `CITATION.cff` file which may be used to cite the respective dataset. To cite the entire repository with all datasets inside, use the `CITATION.cff` at the root of the repository (or just click the *Cite this repository* button on the right).

## Library

Besides the data, this repository provides a Python library for loading, manipulating, and validating the available datasets.

> [!WARNING]
> This Python library is still highly experimental!

[![Build](https://github.com/rmnldwg/lydata/actions/workflows/build.yml/badge.svg)](https://github.com/rmnldwg/lydata/actions/workflows/build.yml)
[![Tests](https://github.com/rmnldwg/lydata/actions/workflows/tests.yml/badge.svg)](https://github.com/rmnldwg/lydata/actions/workflows/tests.yml)
[![Documentation Status](https://readthedocs.org/projects/lydata/badge/?version=stable)](https://lydata.readthedocs.io/en/stable/?badge=stable)

If you want to install this library, clone the repo and install it. You can do so by executing these commands:

```bash
git clone https://github.com/rmnldwg/lydata
cd lydata
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install .
```

You may have noticed that there are also `requirements.*` files here. These are independent of this library and instead related to reproducing the output of the Python files in the `scripts/` folder. You may ignore this.

### Usage of Python Utilities

The first and most common use case would probably listing and loading the published datasets:

```python
import lydata

for dataset_spec in lydata.available_datasets(
    year=2023,              # show all datasets added in 2023
    skip_disk=True,         # do not search on disk, but rather on GitHub
    ref="61a17e",           # may be some specific hash/tag/branch
):
    print(dataset_spec.name)

# output:
# 2023-clb-multisite
# 2023-isb-multisite

merged_data = lydata.join_datasets(
    subsite="oropharynx",   # merge data that include oropharyngeal tumor patients
    skip_disk=True,         # again, search GitHub, not on disk (which is the default)
)
print(merged_data.head())

# output:
#     patient                                          ... pathology
#           #                                          ...      ipsi
#          id                 institution     sex age  ...        VI VIII  IX   X
# 0      P011          Centre LĂ©on BĂ©rard    male  67  ...       NaN  NaN NaN NaN
# 1      P012          Centre LĂ©on BĂ©rard  female  62  ...       NaN  NaN NaN NaN
# ..      ...                         ...     ...  ..  ...       ...  ...  ..  ..
# 548     286  University Hospital Zurich    male  67  ...       NaN  NaN NaN NaN
# 549     287  University Hospital Zurich    male  76  ...       NaN  NaN NaN NaN
#
# [550 rows x 242 columns]
```

And since the three-level header of the tables is a little unwieldy at times, we also provide some shortcodes via a custom pandas accessor. As soon as `lydata` is imported it can be used like this:

```python
print(merged_data.ly.age)

# output:
# 0      67
# 1      62
#        ..
# 548    67
# 549    76
# Name: (patient, #, age), Length: 550, dtype: int64
```

And we have implemented `Q` and `C` objects inspired by Django that allow easier querying of the tables:

```python
from lydata import C

# select patients younger than 50 that are not HPV positive (includes NaNs)
query_result = merged_data.ly.query((C("age") < 50) & ~(C("hpv") == True))
print(query_result)

# output:
#     patient                                          ... pathology
#           #                                          ...      ipsi
#          id                 institution     sex age  ...        VI VIII  IX   X
# 11     P030          Centre LĂ©on BĂ©rard    male  49  ...       NaN  NaN NaN NaN
# 12     P031          Centre LĂ©on BĂ©rard    male  46  ...       NaN  NaN NaN NaN
# ..      ...                         ...     ...  ..  ...       ...  ... ... ...
# 545     283  University Hospital Zurich    male  49  ...       NaN  NaN NaN NaN
# 547     285  University Hospital Zurich    male  44  ...       NaN  NaN NaN NaN
#
# [20 rows x 242 columns]
```

For more details and further examples or use-cases, have a look at the [official documentation](https://lydata.readthedocs.org/)

## See also

### LyProX Interface

The data in this repository can be explored interactively in our online interface [LyProX] ([GitHub repo]).

[LyProX]: https://lyprox.org
[GitHub repo]: https://github.com/rmnldwg/lyprox

### Probabilistic models

We have developed and implemented probabilistic models for lymphatic tumor progression ([[7]](#7), [[8]](#8)) that may allow for highly personalized risk predictions in the future. These models can be trained using the dataset(s) in this repository. For details on the implementation, check out the [lymph] package.

[lymph]: https://github.com/rmnldwg/lymph

## License

All patient data in this repository, e.g. all files whose names end with .xlsx or .csv, as well as figures depicting characteristics of that data, are licensed under [CC BY-SA 4.0]. Attribution must be given to the owner of the repository (see the `CITATION.cff` file at the root of the repository) and the collector(s) or curator(s) of the respective dataset (see the `CITATION.cff` file inside the corresponding dataset's folder).

The remaining material is licensed under the [MIT License]. This includes e.g. all Python files and the overall structure of the repository.

[CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/
[MIT License]: https://mit-license.org/

## References

<a id="1">[1]</a>
Vincent Grégoire and Others,
**Selection and delineation of lymph node target volumes in head and neck conformal radiotherapy. Proposal for standardizing terminology and procedure based on the surgical experience**,
*Radiotherapy and Oncology*, vol. 56, pp. 135-150, 2000,
doi: <https://doi.org/10.1016/S0167-8140(00)00202-4>.

<a id="2">[2]</a>
Vincent Grégoire, A. Eisbruch, M. Hamoir, and P. Levendag,
**Proposal for the delineation of the nodal CTV in the node-positive and the post-operative neck**,
*Radiotherapy and Oncology*, vol. 79, no. 1, pp. 15-20, Apr. 2006,
doi: <https://doi.org/10.1016/j.radonc.2006.03.009>.

<a id="3">[3]</a>
Vincent Grégoire et al.,
**Delineation of the neck node levels for head and neck tumors: A 2013 update. DAHANCA, EORTC, HKNPCSG, NCIC CTG, NCRI, RTOG, TROG consensus guidelines**,
*Radiotherapy and Oncology*, vol. 110, no. 1, pp. 172-181, Jan. 2014,
doi: <https://doi.org/10.1016/j.radonc.2013.10.010>.

<a id="4">[4]</a>
Julian Biau et al.,
**Selection of lymph node target volumes for definitive head and neck radiation therapy: a 2019 Update**,
*Radiotherapy and Oncology*, vol. 134, pp. 1-9, May 2019,
doi: <https://doi.org/10.1016/j.radonc.2019.01.018>.

<a id="5">[5]</a>
Jatin. P. Shah, F. C. Candela, and A. K. Poddar,
**The patterns of cervical lymph node metastases from squamous carcinoma of the oral cavity**,
*Cancer*, vol. 66, no. 1, pp. 109-113, 1990,
doi: <https://doi.org/10.1002/1097-0142(19900701)66:1%3C109::AID-CNCR2820660120%3E3.0.CO;2-A>.

<a id="6">[6]</a>
Laurence Bauwens et al.,
**Prevalence and distribution of cervical lymph node metastases in HPV-positive and HPV-negative oropharyngeal squamous cell carcinoma**,
*Radiotherapy and Oncology*, vol. 157, pp. 122-129, Apr. 2021,
doi: <https://doi.org/10.1016/j.radonc.2021.01.028>.

<a id="7">[7]</a>
Bertrand Pouymayou, P. Balermpas, O. Riesterer, M. Guckenberger, and J. Unkelbach,
**A Bayesian network model of lymphatic tumor progression for personalized elective CTV definition in head and neck cancers**,
*Physics in Medicine & Biology*, vol. 64, no. 16, p. 165003, Aug. 2019,
doi: <https://doi.org/10.1088/1361-6560/ab2a18>.

<a id="8">[8]</a>
Roman Ludwig, B. Pouymayou, P. Balermpas, and J. Unkelbach,
**A hidden Markov model for lymphatic tumor progression in the head and neck**,
*Sci Rep*, vol. 11, no. 1, p. 12261, Dec. 2021,
doi: <https://doi.org/10.1038/s41598-021-91544-1>.

<a id="9">[9]</a>
Roman Ludwig et al.,
**Detailed patient-individual reporting of lymph node involvement in oropharyngeal squamous cell carcinoma with an online interface**,
*Radiotherapy and Oncology*, Feb. 2022,
doi: <https://doi.org/10.1016/j.radonc.2022.01.035>.

<a id="10">[10]</a>
Roman Ludwig, J.-M. Hoffmann, B. Pouymayou et al.,
**Detailed patient-individual reporting of lymph node involvement in oropharyngeal squamous cell carcinoma with an online interface**,
*medRxiv*, Dec. 2021.
doi: <https://doi.org/10.1101/2021.12.01.21267001>.

<a id="11">[11]</a>
Roman Ludwig, Jean-Marc Hoffmann, Bertrand Pouymayou et al.,
**A dataset on patient-individual lymph node involvement in oropharyngeal squamous cell carcinoma**,
*Data in Brief*, 2022, 108345,
doi: <https://doi.org/10.1016/j.dib.2022.108345>.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "lydata",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "data, lymph, involvement",
    "author": null,
    "author_email": "Roman Ludwig <roman.ludwig@usz.ch>",
    "download_url": "https://files.pythonhosted.org/packages/0c/bf/ea00932b81ab34338498e53e15bf158ef91db55eefbeb3c2bee4786fc879/lydata-0.2.2.tar.gz",
    "platform": null,
    "description": "![social card](https://raw.githubusercontent.com/rmnldwg/lydata/main/github-social-card.png)\n\n## What is lyDATA?\n\nlyDATA is a repository for datasets that report detailed patterns of lymphatic progression for head & neck squamous cell carcinoma (HNSCC).\n\n## Motivation\n\nHNSCC spreads though the lymphatic system of the neck and forms metastases in regional lymph nodes. Macroscopic metastases can be detected with imaging modalities like MRI, PET and CT scans. They are then consequently included in the target volume, when radiotherapy is chosen as part of the treatment. However, microscopic metastases are too small be diagnosed with current imaging techniques.\n\nTo account for this microscopic involvement, parts of the lymphatic system are often irradiated electively to increase tumor control. Which parts are included in this elective clinical target volume is currently decided based on guidelines like [[1]](#1), [[2]](#2), [[3]](#3) and [[4]](#4). These in turn are derived from reports of the prevalence of involvement per lymph node level (LNL), i.e. the portion of patients that were diagnosed with metastases in any given LNL, stratified by primary tumor location. It is recommended to include a LNL in the elective target volume if 10 - 15% of patients showed involvement in that particular level.\n\nHowever, while the prevalence of involvement has been reported in the literature, e.g. in [[5]](#5) and [[6]](#6), and the general lymph drainage pathways are understood well, the detailed progression patterns of HNSCC remain poorly quantified. We believe that the risk for microscopic involvement in an LNL depends highly on the specific diagnose of a particular patient and their treatment can hence be personalized if the progression patterns were better quantified.\n\n## Our Goal\n\nIn this repository we aim to provide data on the detailed lymphatic progression patterns extracted from patients of the University Hospital Zurich (USZ). The data can be used freely and we hope clinicians in the field find it useful as well. Ideally, we can motivate other researchers to share their data in similar detail and openness, so that large multi-centric datasets can be built.\n\n## Available datasets\n\n### \ud83d\udcc2 [2021 USZ Oropharynx]\n\n[![radonc badge](https://img.shields.io/badge/Rad%20Onc-j.radonc.2022.01.035-3e6e0e)](https://doi.org/10.1016/j.radonc.2022.01.035)\n[![medRxiv badge](https://img.shields.io/badge/medR%CF%87iv-2021.12.01.21267001-0e4c92)](https://doi.org/10.1101/2021.12.01.21267001)\n[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2022.108345-orange)](https://doi.org/10.1016/j.dib.2022.108345)\n[![zenodo badge](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.5833835-informational)](https://doi.org/10.5281/zenodo.5833835)\n\nThe first dataset we are able to share consists of 287 patients with a primary tumor in the oropharynx, treated at the University Hospital Zurich (USZ) between 2013 and 2019. It can be found in the folder `2021-usz-oropharynx` alongside a `jupyter` notebook that was used to create figures.\n\nWe have published a paper about it in *Radiotherapy & Oncology* [[9]](#9) (a preprint is also available on *medRxiv* [[10]](#10)). The dataset is described in detail and can be freely used and cited as a *Data in Brief* paper [[11]](#11).\n\n[2021 USZ Oropharynx]: https://github.com/rmnldwg/lyDATA/tree/main/2021-usz-oropharynx\n\n### \ud83d\udcc2 [2021 CLB Oropharynx]\n\n[![Green Journal](https://img.shields.io/badge/Rad%20Onc-j.radonc.2021.01.028-3e6e0e)](https://doi.org/10.1016/j.radonc.2021.01.028)\n[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2023.110020-orange)](https://doi.org/10.1016/j.dib.2023.110020)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10204085.svg)](https://doi.org/10.5281/zenodo.10204085)\n\nWe are glad and thankful that the research group around Prof. Vincent Gr\u00e9goire from the [Centre L\u00e9on B\u00e9rard] in Lyon (France) have joined our effort to create a database of lymphatic patterns of progression by providing us with the data underlying their publication [[6]](#6). If you use this data, don't forget to cite either said publication or use the `CITATION.cff` file inside the `2021-clb-oropharynx` folder, where the `data.csv` also resides and a description of the data named `README.md`.\n\n[2021 CLB Oropharynx]: https://github.com/rmnldwg/lyDATA/tree/main/2021-clb-oropharynx\n[Centre L\u00e9on B\u00e9rard]: https://www.centreleonberard.fr/en\n\n### \ud83d\udcc2 [2023 ISB Multisite]\n\n[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2023.110020-orange)](https://doi.org/10.1016/j.dib.2023.110020)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10210423.svg)](https://doi.org/10.5281/zenodo.10210423)\n\nAs part of a collaboration with researchers from the [Inselspital Bern] (Switzerland) around Prof. Roland Giger, we are thankful and glad to be able to publish a large and exceptionally detailed dataset on lymphatic progression of HNSCC patients, assessed by pathology. In contrast to earlier datasets, this includes not only patients with oropharyngeal tumors, but also oral cavity, hypopharynx and larynx.\n\n[2023 ISB Multisite]: https://github.com/rmnldwg/lyDATA/tree/main/2023-isb-multisite\n[Inselspital Bern]: https://www.insel.ch/de/\n\n### \ud83d\udcc2 [2023 CLB Multisite]\n\n[![DiB badge](https://img.shields.io/badge/DiB-10.1016%2Fj.dib.2023.110020-orange)](https://doi.org/10.1016/j.dib.2023.110020)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10210361.svg)](https://doi.org/10.5281/zenodo.10210361)\n\nCompleting the \"2021 CLB Oropharynx\" data table, these patient records detail lymphatic involvement patterns in HNSCC patients with primary tumors beyond the oropharynx. Again, they are thankfully provided by researchers in Prof. Vincent Gr\u00e9goire's group and the data was extracted at the [Centre L\u00e9on B\u00e9rard].\n\n[2023 CLB Multisite]: https://github.com/rmnldwg/lyDATA/tree/main/2023-clb-multisite\n\n### stay tuned for more\n\nWe are in the process of collecting more data that we might publish soon. If you would like to contribute to our effort, feel free to contact us: [roman.ludwig@usz.ch]\n\n[roman.ludwig@usz.ch]: mailto:roman.ludwig@usz.ch\n\n## Attribution\n\nEvery folder that corresponds to a dataset also contains a `CITATION.cff` file which may be used to cite the respective dataset. To cite the entire repository with all datasets inside, use the `CITATION.cff` at the root of the repository (or just click the *Cite this repository* button on the right).\n\n## Library\n\nBesides the data, this repository provides a Python library for loading, manipulating, and validating the available datasets.\n\n> [!WARNING]\n> This Python library is still highly experimental!\n\n[![Build](https://github.com/rmnldwg/lydata/actions/workflows/build.yml/badge.svg)](https://github.com/rmnldwg/lydata/actions/workflows/build.yml)\n[![Tests](https://github.com/rmnldwg/lydata/actions/workflows/tests.yml/badge.svg)](https://github.com/rmnldwg/lydata/actions/workflows/tests.yml)\n[![Documentation Status](https://readthedocs.org/projects/lydata/badge/?version=stable)](https://lydata.readthedocs.io/en/stable/?badge=stable)\n\nIf you want to install this library, clone the repo and install it. You can do so by executing these commands:\n\n```bash\ngit clone https://github.com/rmnldwg/lydata\ncd lydata\npython -m venv .venv\nsource .venv/bin/activate\npip install -U pip\npip install .\n```\n\nYou may have noticed that there are also `requirements.*` files here. These are independent of this library and instead related to reproducing the output of the Python files in the `scripts/` folder. You may ignore this.\n\n### Usage of Python Utilities\n\nThe first and most common use case would probably listing and loading the published datasets:\n\n```python\nimport lydata\n\nfor dataset_spec in lydata.available_datasets(\n    year=2023,              # show all datasets added in 2023\n    skip_disk=True,         # do not search on disk, but rather on GitHub\n    ref=\"61a17e\",           # may be some specific hash/tag/branch\n):\n    print(dataset_spec.name)\n\n# output:\n# 2023-clb-multisite\n# 2023-isb-multisite\n\nmerged_data = lydata.join_datasets(\n    subsite=\"oropharynx\",   # merge data that include oropharyngeal tumor patients\n    skip_disk=True,         # again, search GitHub, not on disk (which is the default)\n)\nprint(merged_data.head())\n\n# output:\n#     patient                                          ... pathology\n#           #                                          ...      ipsi\n#          id                 institution     sex age  ...        VI VIII  IX   X\n# 0      P011          Centre L\u00e9on B\u00e9rard    male  67  ...       NaN  NaN NaN NaN\n# 1      P012          Centre L\u00e9on B\u00e9rard  female  62  ...       NaN  NaN NaN NaN\n# ..      ...                         ...     ...  ..  ...       ...  ...  ..  ..\n# 548     286  University Hospital Zurich    male  67  ...       NaN  NaN NaN NaN\n# 549     287  University Hospital Zurich    male  76  ...       NaN  NaN NaN NaN\n#\n# [550 rows x 242 columns]\n```\n\nAnd since the three-level header of the tables is a little unwieldy at times, we also provide some shortcodes via a custom pandas accessor. As soon as `lydata` is imported it can be used like this:\n\n```python\nprint(merged_data.ly.age)\n\n# output:\n# 0      67\n# 1      62\n#        ..\n# 548    67\n# 549    76\n# Name: (patient, #, age), Length: 550, dtype: int64\n```\n\nAnd we have implemented `Q` and `C` objects inspired by Django that allow easier querying of the tables:\n\n```python\nfrom lydata import C\n\n# select patients younger than 50 that are not HPV positive (includes NaNs)\nquery_result = merged_data.ly.query((C(\"age\") < 50) & ~(C(\"hpv\") == True))\nprint(query_result)\n\n# output:\n#     patient                                          ... pathology\n#           #                                          ...      ipsi\n#          id                 institution     sex age  ...        VI VIII  IX   X\n# 11     P030          Centre L\u00e9on B\u00e9rard    male  49  ...       NaN  NaN NaN NaN\n# 12     P031          Centre L\u00e9on B\u00e9rard    male  46  ...       NaN  NaN NaN NaN\n# ..      ...                         ...     ...  ..  ...       ...  ... ... ...\n# 545     283  University Hospital Zurich    male  49  ...       NaN  NaN NaN NaN\n# 547     285  University Hospital Zurich    male  44  ...       NaN  NaN NaN NaN\n#\n# [20 rows x 242 columns]\n```\n\nFor more details and further examples or use-cases, have a look at the [official documentation](https://lydata.readthedocs.org/)\n\n## See also\n\n### LyProX Interface\n\nThe data in this repository can be explored interactively in our online interface [LyProX] ([GitHub repo]).\n\n[LyProX]: https://lyprox.org\n[GitHub repo]: https://github.com/rmnldwg/lyprox\n\n### Probabilistic models\n\nWe have developed and implemented probabilistic models for lymphatic tumor progression ([[7]](#7), [[8]](#8)) that may allow for highly personalized risk predictions in the future. These models can be trained using the dataset(s) in this repository. For details on the implementation, check out the [lymph] package.\n\n[lymph]: https://github.com/rmnldwg/lymph\n\n## License\n\nAll patient data in this repository, e.g. all files whose names end with .xlsx or .csv, as well as figures depicting characteristics of that data, are licensed under [CC BY-SA 4.0]. Attribution must be given to the owner of the repository (see the `CITATION.cff` file at the root of the repository) and the collector(s) or curator(s) of the respective dataset (see the `CITATION.cff` file inside the corresponding dataset's folder).\n\nThe remaining material is licensed under the [MIT License]. This includes e.g. all Python files and the overall structure of the repository.\n\n[CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/\n[MIT License]: https://mit-license.org/\n\n## References\n\n<a id=\"1\">[1]</a>\nVincent Gr\u00e9goire and Others,\n**Selection and delineation of lymph node target volumes in head and neck conformal radiotherapy. Proposal for standardizing terminology and procedure based on the surgical experience**,\n*Radiotherapy and Oncology*, vol. 56, pp. 135-150, 2000,\ndoi: <https://doi.org/10.1016/S0167-8140(00)00202-4>.\n\n<a id=\"2\">[2]</a>\nVincent Gr\u00e9goire, A. Eisbruch, M. Hamoir, and P. Levendag,\n**Proposal for the delineation of the nodal CTV in the node-positive and the post-operative neck**,\n*Radiotherapy and Oncology*, vol. 79, no. 1, pp. 15-20, Apr. 2006,\ndoi: <https://doi.org/10.1016/j.radonc.2006.03.009>.\n\n<a id=\"3\">[3]</a>\nVincent Gr\u00e9goire et al.,\n**Delineation of the neck node levels for head and neck tumors: A 2013 update. DAHANCA, EORTC, HKNPCSG, NCIC CTG, NCRI, RTOG, TROG consensus guidelines**,\n*Radiotherapy and Oncology*, vol. 110, no. 1, pp. 172-181, Jan. 2014,\ndoi: <https://doi.org/10.1016/j.radonc.2013.10.010>.\n\n<a id=\"4\">[4]</a>\nJulian Biau et al.,\n**Selection of lymph node target volumes for definitive head and neck radiation therapy: a 2019 Update**,\n*Radiotherapy and Oncology*, vol. 134, pp. 1-9, May 2019,\ndoi: <https://doi.org/10.1016/j.radonc.2019.01.018>.\n\n<a id=\"5\">[5]</a>\nJatin. P. Shah, F. C. Candela, and A. K. Poddar,\n**The patterns of cervical lymph node metastases from squamous carcinoma of the oral cavity**,\n*Cancer*, vol. 66, no. 1, pp. 109-113, 1990,\ndoi: <https://doi.org/10.1002/1097-0142(19900701)66:1%3C109::AID-CNCR2820660120%3E3.0.CO;2-A>.\n\n<a id=\"6\">[6]</a>\nLaurence Bauwens et al.,\n**Prevalence and distribution of cervical lymph node metastases in HPV-positive and HPV-negative oropharyngeal squamous cell carcinoma**,\n*Radiotherapy and Oncology*, vol. 157, pp. 122-129, Apr. 2021,\ndoi: <https://doi.org/10.1016/j.radonc.2021.01.028>.\n\n<a id=\"7\">[7]</a>\nBertrand Pouymayou, P. Balermpas, O. Riesterer, M. Guckenberger, and J. Unkelbach,\n**A Bayesian network model of lymphatic tumor progression for personalized elective CTV definition in head and neck cancers**,\n*Physics in Medicine & Biology*, vol. 64, no. 16, p. 165003, Aug. 2019,\ndoi: <https://doi.org/10.1088/1361-6560/ab2a18>.\n\n<a id=\"8\">[8]</a>\nRoman Ludwig, B. Pouymayou, P. Balermpas, and J. Unkelbach,\n**A hidden Markov model for lymphatic tumor progression in the head and neck**,\n*Sci Rep*, vol. 11, no. 1, p. 12261, Dec. 2021,\ndoi: <https://doi.org/10.1038/s41598-021-91544-1>.\n\n<a id=\"9\">[9]</a>\nRoman Ludwig et al.,\n**Detailed patient-individual reporting of lymph node involvement in oropharyngeal squamous cell carcinoma with an online interface**,\n*Radiotherapy and Oncology*, Feb. 2022,\ndoi: <https://doi.org/10.1016/j.radonc.2022.01.035>.\n\n<a id=\"10\">[10]</a>\nRoman Ludwig, J.-M. Hoffmann, B. Pouymayou et al.,\n**Detailed patient-individual reporting of lymph node involvement in oropharyngeal squamous cell carcinoma with an online interface**,\n*medRxiv*, Dec. 2021.\ndoi: <https://doi.org/10.1101/2021.12.01.21267001>.\n\n<a id=\"11\">[11]</a>\nRoman Ludwig, Jean-Marc Hoffmann, Bertrand Pouymayou et al.,\n**A dataset on patient-individual lymph node involvement in oropharyngeal squamous cell carcinoma**,\n*Data in Brief*, 2022, 108345,\ndoi: <https://doi.org/10.1016/j.dib.2022.108345>.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Library for handling lymphatic involvement data",
    "version": "0.2.2",
    "project_urls": {
        "documentation": "https://lydata.readthedocs.io",
        "source": "https://github.com/rmnldwg/lydata"
    },
    "split_keywords": [
        "data",
        " lymph",
        " involvement"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb641bd64bda9da47a21857505af579cb9617ce37ceb63e408f51b96fabac025",
                "md5": "4dc0a16588cd8ad2b8c2638f079abef2",
                "sha256": "1191ab6269afa8dfe1a23e2c37d009dbb3fdbf6a777573898972539adab960a4"
            },
            "downloads": -1,
            "filename": "lydata-0.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4dc0a16588cd8ad2b8c2638f079abef2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 112808,
            "upload_time": "2024-12-03T14:02:13",
            "upload_time_iso_8601": "2024-12-03T14:02:13.380091Z",
            "url": "https://files.pythonhosted.org/packages/eb/64/1bd64bda9da47a21857505af579cb9617ce37ceb63e408f51b96fabac025/lydata-0.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0cbfea00932b81ab34338498e53e15bf158ef91db55eefbeb3c2bee4786fc879",
                "md5": "bb4e5f5e050bd1a43bf6f62e68142bf2",
                "sha256": "89e5950cb9604c76a569370062737d9cf86beeca01406a69b30cdeda76dac7d4"
            },
            "downloads": -1,
            "filename": "lydata-0.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "bb4e5f5e050bd1a43bf6f62e68142bf2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 1503861,
            "upload_time": "2024-12-03T14:02:15",
            "upload_time_iso_8601": "2024-12-03T14:02:15.498103Z",
            "url": "https://files.pythonhosted.org/packages/0c/bf/ea00932b81ab34338498e53e15bf158ef91db55eefbeb3c2bee4786fc879/lydata-0.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-12-03 14:02:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "rmnldwg",
    "github_project": "lydata",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "aiohttp",
            "specs": [
                [
                    "==",
                    "3.9.5"
                ]
            ]
        },
        {
            "name": "aiohttp-retry",
            "specs": [
                [
                    "==",
                    "2.8.3"
                ]
            ]
        },
        {
            "name": "aiosignal",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "amqp",
            "specs": [
                [
                    "==",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "annotated-types",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "antlr4-python3-runtime",
            "specs": [
                [
                    "==",
                    "4.9.3"
                ]
            ]
        },
        {
            "name": "anyio",
            "specs": [
                [
                    "==",
                    "4.4.0"
                ]
            ]
        },
        {
            "name": "appdirs",
            "specs": [
                [
                    "==",
                    "1.4.4"
                ]
            ]
        },
        {
            "name": "argon2-cffi",
            "specs": [
                [
                    "==",
                    "23.1.0"
                ]
            ]
        },
        {
            "name": "argon2-cffi-bindings",
            "specs": [
                [
                    "==",
                    "21.2.0"
                ]
            ]
        },
        {
            "name": "arrow",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "asttokens",
            "specs": [
                [
                    "==",
                    "2.4.1"
                ]
            ]
        },
        {
            "name": "async-lru",
            "specs": [
                [
                    "==",
                    "2.0.4"
                ]
            ]
        },
        {
            "name": "async-timeout",
            "specs": [
                [
                    "==",
                    "4.0.3"
                ]
            ]
        },
        {
            "name": "asyncssh",
            "specs": [
                [
                    "==",
                    "2.14.2"
                ]
            ]
        },
        {
            "name": "atpublic",
            "specs": [
                [
                    "==",
                    "4.1.0"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "23.2.0"
                ]
            ]
        },
        {
            "name": "babel",
            "specs": [
                [
                    "==",
                    "2.15.0"
                ]
            ]
        },
        {
            "name": "beautifulsoup4",
            "specs": [
                [
                    "==",
                    "4.12.3"
                ]
            ]
        },
        {
            "name": "billiard",
            "specs": [
                [
                    "==",
                    "4.2.0"
                ]
            ]
        },
        {
            "name": "bleach",
            "specs": [
                [
                    "==",
                    "6.1.0"
                ]
            ]
        },
        {
            "name": "blosc2",
            "specs": [
                [
                    "==",
                    "2.6.2"
                ]
            ]
        },
        {
            "name": "celery",
            "specs": [
                [
                    "==",
                    "5.4.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2024.6.2"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.3.2"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    "==",
                    "8.1.7"
                ]
            ]
        },
        {
            "name": "click-didyoumean",
            "specs": [
                [
                    "==",
                    "0.3.1"
                ]
            ]
        },
        {
            "name": "click-plugins",
            "specs": [
                [
                    "==",
                    "1.1.1"
                ]
            ]
        },
        {
            "name": "click-repl",
            "specs": [
                [
                    "==",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "colorama",
            "specs": [
                [
                    "==",
                    "0.4.6"
                ]
            ]
        },
        {
            "name": "comm",
            "specs": [
                [
                    "==",
                    "0.2.2"
                ]
            ]
        },
        {
            "name": "configobj",
            "specs": [
                [
                    "==",
                    "5.0.8"
                ]
            ]
        },
        {
            "name": "contourpy",
            "specs": [
                [
                    "==",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "corner",
            "specs": [
                [
                    "==",
                    "2.2.2"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "42.0.8"
                ]
            ]
        },
        {
            "name": "cycler",
            "specs": [
                [
                    "==",
                    "0.12.1"
                ]
            ]
        },
        {
            "name": "debugpy",
            "specs": [
                [
                    "==",
                    "1.8.1"
                ]
            ]
        },
        {
            "name": "decorator",
            "specs": [
                [
                    "==",
                    "5.1.1"
                ]
            ]
        },
        {
            "name": "defusedxml",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "dictdiffer",
            "specs": [
                [
                    "==",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "diskcache",
            "specs": [
                [
                    "==",
                    "5.6.3"
                ]
            ]
        },
        {
            "name": "distro",
            "specs": [
                [
                    "==",
                    "1.9.0"
                ]
            ]
        },
        {
            "name": "dpath",
            "specs": [
                [
                    "==",
                    "2.1.6"
                ]
            ]
        },
        {
            "name": "dulwich",
            "specs": [
                [
                    "==",
                    "0.22.1"
                ]
            ]
        },
        {
            "name": "dvc",
            "specs": [
                [
                    "==",
                    "3.51.2"
                ]
            ]
        },
        {
            "name": "dvc-data",
            "specs": [
                [
                    "==",
                    "3.15.1"
                ]
            ]
        },
        {
            "name": "dvc-http",
            "specs": [
                [
                    "==",
                    "2.32.0"
                ]
            ]
        },
        {
            "name": "dvc-objects",
            "specs": [
                [
                    "==",
                    "5.1.0"
                ]
            ]
        },
        {
            "name": "dvc-render",
            "specs": [
                [
                    "==",
                    "1.0.2"
                ]
            ]
        },
        {
            "name": "dvc-studio-client",
            "specs": [
                [
                    "==",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "dvc-task",
            "specs": [
                [
                    "==",
                    "0.4.0"
                ]
            ]
        },
        {
            "name": "emcee",
            "specs": [
                [
                    "==",
                    "3.1.6"
                ]
            ]
        },
        {
            "name": "entrypoints",
            "specs": [
                [
                    "==",
                    "0.4"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "executing",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "fastjsonschema",
            "specs": [
                [
                    "==",
                    "2.19.1"
                ]
            ]
        },
        {
            "name": "filelock",
            "specs": [
                [
                    "==",
                    "3.14.0"
                ]
            ]
        },
        {
            "name": "flatten-dict",
            "specs": [
                [
                    "==",
                    "0.4.2"
                ]
            ]
        },
        {
            "name": "flufl-lock",
            "specs": [
                [
                    "==",
                    "7.1.1"
                ]
            ]
        },
        {
            "name": "fonttools",
            "specs": [
                [
                    "==",
                    "4.53.0"
                ]
            ]
        },
        {
            "name": "fqdn",
            "specs": [
                [
                    "==",
                    "1.5.1"
                ]
            ]
        },
        {
            "name": "frozenlist",
            "specs": [
                [
                    "==",
                    "1.4.1"
                ]
            ]
        },
        {
            "name": "fsspec",
            "specs": [
                [
                    "==",
                    "2024.6.0"
                ]
            ]
        },
        {
            "name": "funcy",
            "specs": [
                [
                    "==",
                    "2.0"
                ]
            ]
        },
        {
            "name": "gitdb",
            "specs": [
                [
                    "==",
                    "4.0.11"
                ]
            ]
        },
        {
            "name": "gitpython",
            "specs": [
                [
                    "==",
                    "3.1.43"
                ]
            ]
        },
        {
            "name": "grandalf",
            "specs": [
                [
                    "==",
                    "0.8"
                ]
            ]
        },
        {
            "name": "gto",
            "specs": [
                [
                    "==",
                    "1.7.1"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "h5py",
            "specs": [
                [
                    "==",
                    "3.11.0"
                ]
            ]
        },
        {
            "name": "httpcore",
            "specs": [
                [
                    "==",
                    "1.0.5"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    "==",
                    "0.27.0"
                ]
            ]
        },
        {
            "name": "hydra-core",
            "specs": [
                [
                    "==",
                    "1.3.2"
                ]
            ]
        },
        {
            "name": "icd10-cm",
            "specs": [
                [
                    "==",
                    "0.0.5"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.7"
                ]
            ]
        },
        {
            "name": "ipykernel",
            "specs": [
                [
                    "==",
                    "6.29.4"
                ]
            ]
        },
        {
            "name": "ipython",
            "specs": [
                [
                    "==",
                    "8.25.0"
                ]
            ]
        },
        {
            "name": "ipython-genutils",
            "specs": [
                [
                    "==",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "ipywidgets",
            "specs": [
                [
                    "==",
                    "8.1.3"
                ]
            ]
        },
        {
            "name": "isoduration",
            "specs": [
                [
                    "==",
                    "20.11.0"
                ]
            ]
        },
        {
            "name": "iterative-telemetry",
            "specs": [
                [
                    "==",
                    "0.0.8"
                ]
            ]
        },
        {
            "name": "jedi",
            "specs": [
                [
                    "==",
                    "0.19.1"
                ]
            ]
        },
        {
            "name": "jinja2",
            "specs": [
                [
                    "==",
                    "3.1.4"
                ]
            ]
        },
        {
            "name": "json5",
            "specs": [
                [
                    "==",
                    "0.9.25"
                ]
            ]
        },
        {
            "name": "jsonpointer",
            "specs": [
                [
                    "==",
                    "2.4"
                ]
            ]
        },
        {
            "name": "jsonschema",
            "specs": [
                [
                    "==",
                    "4.22.0"
                ]
            ]
        },
        {
            "name": "jsonschema-specifications",
            "specs": [
                [
                    "==",
                    "2023.12.1"
                ]
            ]
        },
        {
            "name": "jupyter",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "jupyter-client",
            "specs": [
                [
                    "==",
                    "8.6.2"
                ]
            ]
        },
        {
            "name": "jupyter-console",
            "specs": [
                [
                    "==",
                    "6.6.3"
                ]
            ]
        },
        {
            "name": "jupyter-contrib-core",
            "specs": [
                [
                    "==",
                    "0.4.2"
                ]
            ]
        },
        {
            "name": "jupyter-contrib-nbextensions",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "jupyter-core",
            "specs": [
                [
                    "==",
                    "5.7.2"
                ]
            ]
        },
        {
            "name": "jupyter-events",
            "specs": [
                [
                    "==",
                    "0.10.0"
                ]
            ]
        },
        {
            "name": "jupyter-highlight-selected-word",
            "specs": [
                [
                    "==",
                    "0.2.0"
                ]
            ]
        },
        {
            "name": "jupyter-lsp",
            "specs": [
                [
                    "==",
                    "2.2.5"
                ]
            ]
        },
        {
            "name": "jupyter-nbextensions-configurator",
            "specs": [
                [
                    "==",
                    "0.6.4"
                ]
            ]
        },
        {
            "name": "jupyter-server",
            "specs": [
                [
                    "==",
                    "2.14.1"
                ]
            ]
        },
        {
            "name": "jupyter-server-terminals",
            "specs": [
                [
                    "==",
                    "0.5.3"
                ]
            ]
        },
        {
            "name": "jupyterlab",
            "specs": [
                [
                    "==",
                    "4.2.1"
                ]
            ]
        },
        {
            "name": "jupyterlab-pygments",
            "specs": [
                [
                    "==",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "jupyterlab-server",
            "specs": [
                [
                    "==",
                    "2.27.2"
                ]
            ]
        },
        {
            "name": "jupyterlab-widgets",
            "specs": [
                [
                    "==",
                    "3.0.11"
                ]
            ]
        },
        {
            "name": "kiwisolver",
            "specs": [
                [
                    "==",
                    "1.4.5"
                ]
            ]
        },
        {
            "name": "kombu",
            "specs": [
                [
                    "==",
                    "5.3.7"
                ]
            ]
        },
        {
            "name": "lazydocs",
            "specs": [
                [
                    "==",
                    "0.4.8"
                ]
            ]
        },
        {
            "name": "lxml",
            "specs": [
                [
                    "==",
                    "5.2.2"
                ]
            ]
        },
        {
            "name": "lymph-model",
            "specs": [
                [
                    "==",
                    "0.4.3"
                ]
            ]
        },
        {
            "name": "lyscripts",
            "specs": [
                [
                    "==",
                    "0.7.2"
                ]
            ]
        },
        {
            "name": "markdown-it-py",
            "specs": [
                [
                    "==",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "markupsafe",
            "specs": [
                [
                    "==",
                    "2.1.5"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    "==",
                    "3.9.0"
                ]
            ]
        },
        {
            "name": "matplotlib-inline",
            "specs": [
                [
                    "==",
                    "0.1.7"
                ]
            ]
        },
        {
            "name": "mdurl",
            "specs": [
                [
                    "==",
                    "0.1.2"
                ]
            ]
        },
        {
            "name": "mistune",
            "specs": [
                [
                    "==",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "msgpack",
            "specs": [
                [
                    "==",
                    "1.0.8"
                ]
            ]
        },
        {
            "name": "multidict",
            "specs": [
                [
                    "==",
                    "6.0.5"
                ]
            ]
        },
        {
            "name": "nbclient",
            "specs": [
                [
                    "==",
                    "0.10.0"
                ]
            ]
        },
        {
            "name": "nbconvert",
            "specs": [
                [
                    "==",
                    "7.16.4"
                ]
            ]
        },
        {
            "name": "nbformat",
            "specs": [
                [
                    "==",
                    "5.10.4"
                ]
            ]
        },
        {
            "name": "ndindex",
            "specs": [
                [
                    "==",
                    "1.8"
                ]
            ]
        },
        {
            "name": "nest-asyncio",
            "specs": [
                [
                    "==",
                    "1.6.0"
                ]
            ]
        },
        {
            "name": "networkx",
            "specs": [
                [
                    "==",
                    "3.3"
                ]
            ]
        },
        {
            "name": "notebook",
            "specs": [
                [
                    "==",
                    "7.2.1"
                ]
            ]
        },
        {
            "name": "notebook-shim",
            "specs": [
                [
                    "==",
                    "0.2.4"
                ]
            ]
        },
        {
            "name": "numexpr",
            "specs": [
                [
                    "==",
                    "2.10.0"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    "==",
                    "1.26.4"
                ]
            ]
        },
        {
            "name": "omegaconf",
            "specs": [
                [
                    "==",
                    "2.3.0"
                ]
            ]
        },
        {
            "name": "orjson",
            "specs": [
                [
                    "==",
                    "3.10.3"
                ]
            ]
        },
        {
            "name": "overrides",
            "specs": [
                [
                    "==",
                    "7.7.0"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "24.1"
                ]
            ]
        },
        {
            "name": "pandas",
            "specs": [
                [
                    "==",
                    "2.2.2"
                ]
            ]
        },
        {
            "name": "pandocfilters",
            "specs": [
                [
                    "==",
                    "1.5.1"
                ]
            ]
        },
        {
            "name": "parso",
            "specs": [
                [
                    "==",
                    "0.8.4"
                ]
            ]
        },
        {
            "name": "pathspec",
            "specs": [
                [
                    "==",
                    "0.12.1"
                ]
            ]
        },
        {
            "name": "pexpect",
            "specs": [
                [
                    "==",
                    "4.9.0"
                ]
            ]
        },
        {
            "name": "pillow",
            "specs": [
                [
                    "==",
                    "10.3.0"
                ]
            ]
        },
        {
            "name": "platformdirs",
            "specs": [
                [
                    "==",
                    "3.11.0"
                ]
            ]
        },
        {
            "name": "prometheus-client",
            "specs": [
                [
                    "==",
                    "0.20.0"
                ]
            ]
        },
        {
            "name": "prompt-toolkit",
            "specs": [
                [
                    "==",
                    "3.0.46"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "5.9.8"
                ]
            ]
        },
        {
            "name": "ptyprocess",
            "specs": [
                [
                    "==",
                    "0.7.0"
                ]
            ]
        },
        {
            "name": "pure-eval",
            "specs": [
                [
                    "==",
                    "0.2.2"
                ]
            ]
        },
        {
            "name": "py-cpuinfo",
            "specs": [
                [
                    "==",
                    "9.0.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.22"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    "==",
                    "2.7.3"
                ]
            ]
        },
        {
            "name": "pydantic-core",
            "specs": [
                [
                    "==",
                    "2.18.4"
                ]
            ]
        },
        {
            "name": "pydot",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "pygit2",
            "specs": [
                [
                    "==",
                    "1.15.0"
                ]
            ]
        },
        {
            "name": "pygments",
            "specs": [
                [
                    "==",
                    "2.18.0"
                ]
            ]
        },
        {
            "name": "pygtrie",
            "specs": [
                [
                    "==",
                    "2.5.0"
                ]
            ]
        },
        {
            "name": "pyparsing",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.post0"
                ]
            ]
        },
        {
            "name": "python-json-logger",
            "specs": [
                [
                    "==",
                    "2.0.7"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "pyyaml",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "pyzmq",
            "specs": [
                [
                    "==",
                    "26.0.3"
                ]
            ]
        },
        {
            "name": "qtconsole",
            "specs": [
                [
                    "==",
                    "5.5.2"
                ]
            ]
        },
        {
            "name": "qtpy",
            "specs": [
                [
                    "==",
                    "2.4.1"
                ]
            ]
        },
        {
            "name": "referencing",
            "specs": [
                [
                    "==",
                    "0.35.1"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.32.3"
                ]
            ]
        },
        {
            "name": "rfc3339-validator",
            "specs": [
                [
                    "==",
                    "0.1.4"
                ]
            ]
        },
        {
            "name": "rfc3986-validator",
            "specs": [
                [
                    "==",
                    "0.1.1"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    "==",
                    "13.7.1"
                ]
            ]
        },
        {
            "name": "rich-argparse",
            "specs": [
                [
                    "==",
                    "1.5.1"
                ]
            ]
        },
        {
            "name": "rpds-py",
            "specs": [
                [
                    "==",
                    "0.18.1"
                ]
            ]
        },
        {
            "name": "ruamel-yaml",
            "specs": [
                [
                    "==",
                    "0.18.6"
                ]
            ]
        },
        {
            "name": "ruamel-yaml-clib",
            "specs": [
                [
                    "==",
                    "0.2.8"
                ]
            ]
        },
        {
            "name": "scipy",
            "specs": [
                [
                    "==",
                    "1.13.1"
                ]
            ]
        },
        {
            "name": "scmrepo",
            "specs": [
                [
                    "==",
                    "3.3.5"
                ]
            ]
        },
        {
            "name": "semver",
            "specs": [
                [
                    "==",
                    "3.0.2"
                ]
            ]
        },
        {
            "name": "send2trash",
            "specs": [
                [
                    "==",
                    "1.8.3"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "70.0.0"
                ]
            ]
        },
        {
            "name": "shellingham",
            "specs": [
                [
                    "==",
                    "1.5.4"
                ]
            ]
        },
        {
            "name": "shortuuid",
            "specs": [
                [
                    "==",
                    "1.0.13"
                ]
            ]
        },
        {
            "name": "shtab",
            "specs": [
                [
                    "==",
                    "1.7.1"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "smmap",
            "specs": [
                [
                    "==",
                    "5.0.1"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "soupsieve",
            "specs": [
                [
                    "==",
                    "2.5"
                ]
            ]
        },
        {
            "name": "sqltrie",
            "specs": [
                [
                    "==",
                    "0.11.0"
                ]
            ]
        },
        {
            "name": "stack-data",
            "specs": [
                [
                    "==",
                    "0.6.3"
                ]
            ]
        },
        {
            "name": "tables",
            "specs": [
                [
                    "==",
                    "3.9.2"
                ]
            ]
        },
        {
            "name": "tabulate",
            "specs": [
                [
                    "==",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "terminado",
            "specs": [
                [
                    "==",
                    "0.18.1"
                ]
            ]
        },
        {
            "name": "tinycss2",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "tomli",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "tomlkit",
            "specs": [
                [
                    "==",
                    "0.12.5"
                ]
            ]
        },
        {
            "name": "tornado",
            "specs": [
                [
                    "==",
                    "6.4.1"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    "==",
                    "4.66.4"
                ]
            ]
        },
        {
            "name": "traitlets",
            "specs": [
                [
                    "==",
                    "5.14.3"
                ]
            ]
        },
        {
            "name": "tueplots",
            "specs": [
                [
                    "==",
                    "0.0.14"
                ]
            ]
        },
        {
            "name": "typer",
            "specs": [
                [
                    "==",
                    "0.12.3"
                ]
            ]
        },
        {
            "name": "types-python-dateutil",
            "specs": [
                [
                    "==",
                    "2.9.0.20240316"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    "==",
                    "4.12.2"
                ]
            ]
        },
        {
            "name": "tzdata",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "uri-template",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "2.2.1"
                ]
            ]
        },
        {
            "name": "vine",
            "specs": [
                [
                    "==",
                    "5.1.0"
                ]
            ]
        },
        {
            "name": "voluptuous",
            "specs": [
                [
                    "==",
                    "0.14.2"
                ]
            ]
        },
        {
            "name": "wcwidth",
            "specs": [
                [
                    "==",
                    "0.2.13"
                ]
            ]
        },
        {
            "name": "webcolors",
            "specs": [
                [
                    "==",
                    "24.6.0"
                ]
            ]
        },
        {
            "name": "webencodings",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "websocket-client",
            "specs": [
                [
                    "==",
                    "1.8.0"
                ]
            ]
        },
        {
            "name": "widgetsnbextension",
            "specs": [
                [
                    "==",
                    "4.0.11"
                ]
            ]
        },
        {
            "name": "xlrd",
            "specs": [
                [
                    "==",
                    "2.0.1"
                ]
            ]
        },
        {
            "name": "yarl",
            "specs": [
                [
                    "==",
                    "1.9.4"
                ]
            ]
        },
        {
            "name": "zc-lockfile",
            "specs": [
                [
                    "==",
                    "3.0.post1"
                ]
            ]
        }
    ],
    "lcname": "lydata"
}
        
Elapsed time: 0.62586s