diff --git a/.github/assets/readme/LUCIDE-LICENSE b/.github/assets/readme/LUCIDE-LICENSE new file mode 100644 index 0000000..718bb3f --- /dev/null +++ b/.github/assets/readme/LUCIDE-LICENSE @@ -0,0 +1,43 @@ +ISC License + +Copyright (c) 2026 Lucide Icons and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +--- + +The following Lucide icons are derived from the Feather project: + +airplay, alert-circle, alert-octagon, alert-triangle, aperture, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, calendar, cast, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, circle, clipboard, clock, code, columns, command, compass, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, crosshair, database, divide-circle, divide-square, dollar-sign, download, external-link, feather, frown, hash, headphones, help-circle, info, italic, key, layout, life-buoy, link-2, link, loader, lock, log-in, log-out, maximize, meh, minimize, minimize-2, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, move, music, navigation-2, navigation, octagon, pause-circle, percent, plus-circle, plus-square, plus, power, radio, rss, search, server, share, shopping-bag, sidebar, smartphone, smile, square, table-2, tablet, target, terminal, trash-2, trash, triangle, tv, type, upload, x-circle, x-octagon, x-square, x, zoom-in, zoom-out + +The MIT License (MIT) (for the icons listed above) + +Copyright (c) 2013-present Cole Bemis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.github/assets/readme/MEDiml_Header.png b/.github/assets/readme/MEDiml_Header.png new file mode 100644 index 0000000..8d5b3cb Binary files /dev/null and b/.github/assets/readme/MEDiml_Header.png differ diff --git a/.github/assets/readme/app-window.svg b/.github/assets/readme/app-window.svg new file mode 100644 index 0000000..abf9645 --- /dev/null +++ b/.github/assets/readme/app-window.svg @@ -0,0 +1,16 @@ + + + + + + diff --git a/.github/assets/readme/arxiv.svg b/.github/assets/readme/arxiv.svg new file mode 100644 index 0000000..9f18994 --- /dev/null +++ b/.github/assets/readme/arxiv.svg @@ -0,0 +1 @@ +arXiv \ No newline at end of file diff --git a/.github/assets/readme/book-open.svg b/.github/assets/readme/book-open.svg new file mode 100644 index 0000000..65661b1 --- /dev/null +++ b/.github/assets/readme/book-open.svg @@ -0,0 +1,14 @@ + + + + diff --git a/.github/assets/readme/clipboard-check.svg b/.github/assets/readme/clipboard-check.svg new file mode 100644 index 0000000..8958780 --- /dev/null +++ b/.github/assets/readme/clipboard-check.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/.github/assets/readme/compass.svg b/.github/assets/readme/compass.svg new file mode 100644 index 0000000..6498ba7 --- /dev/null +++ b/.github/assets/readme/compass.svg @@ -0,0 +1,14 @@ + + + + diff --git a/.github/assets/readme/graduation-cap.svg b/.github/assets/readme/graduation-cap.svg new file mode 100644 index 0000000..c27f353 --- /dev/null +++ b/.github/assets/readme/graduation-cap.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/.github/assets/readme/handshake.svg b/.github/assets/readme/handshake.svg new file mode 100644 index 0000000..f86d35a --- /dev/null +++ b/.github/assets/readme/handshake.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/.github/assets/readme/heart-handshake.svg b/.github/assets/readme/heart-handshake.svg new file mode 100644 index 0000000..dbbe87f --- /dev/null +++ b/.github/assets/readme/heart-handshake.svg @@ -0,0 +1,13 @@ + + + diff --git a/.github/assets/readme/joss.svg b/.github/assets/readme/joss.svg new file mode 100644 index 0000000..f09403f --- /dev/null +++ b/.github/assets/readme/joss.svg @@ -0,0 +1 @@ +JOSS emblemOpen Journals, CC BY 4.0. https://joss.theoj.org/about diff --git a/.github/assets/readme/life-buoy.svg b/.github/assets/readme/life-buoy.svg new file mode 100644 index 0000000..c77e2b2 --- /dev/null +++ b/.github/assets/readme/life-buoy.svg @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/.github/assets/readme/list-tree.svg b/.github/assets/readme/list-tree.svg new file mode 100644 index 0000000..fe80d0e --- /dev/null +++ b/.github/assets/readme/list-tree.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/.github/assets/readme/mediml-logo.svg b/.github/assets/readme/mediml-logo.svg new file mode 100644 index 0000000..5e1c566 --- /dev/null +++ b/.github/assets/readme/mediml-logo.svg @@ -0,0 +1,41 @@ + + +MEDiml logo + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.github/assets/readme/mediml-overview.svg b/.github/assets/readme/mediml-overview.svg new file mode 100644 index 0000000..be96fd8 --- /dev/null +++ b/.github/assets/readme/mediml-overview.svg @@ -0,0 +1,462 @@ + + +MEDiml package workflow + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.github/assets/readme/package-open.svg b/.github/assets/readme/package-open.svg new file mode 100644 index 0000000..c210872 --- /dev/null +++ b/.github/assets/readme/package-open.svg @@ -0,0 +1,16 @@ + + + + + + diff --git a/.github/assets/readme/quote.svg b/.github/assets/readme/quote.svg new file mode 100644 index 0000000..5be9a9f --- /dev/null +++ b/.github/assets/readme/quote.svg @@ -0,0 +1,14 @@ + + + + diff --git a/.github/assets/readme/scale.svg b/.github/assets/readme/scale.svg new file mode 100644 index 0000000..b2b9012 --- /dev/null +++ b/.github/assets/readme/scale.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/.github/assets/readme/workflow.svg b/.github/assets/readme/workflow.svg new file mode 100644 index 0000000..52f496f --- /dev/null +++ b/.github/assets/readme/workflow.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/MEDiml/__init__.py b/MEDiml/__init__.py index 83404b4..32d9323 100644 --- a/MEDiml/__init__.py +++ b/MEDiml/__init__.py @@ -14,7 +14,7 @@ logging.getLogger(__name__).addHandler(stream_handler) __author__ = "MEDomicsLab consortium" -__version__ = "0.20.0" +__version__ = "0.20.1" __copyright__ = "Copyright (C) MEDomicsLab consortium" __license__ = "GNU General Public License 3.0" __maintainer__ = "MAHDI AIT LHAJ LOUTFI" diff --git a/radiomics.py b/MEDiml/cli.py similarity index 100% rename from radiomics.py rename to MEDiml/cli.py diff --git a/README.md b/README.md index e94cddb..c8fa720 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,81 @@ -# MEDiml logo MEDiml: MEDical Image analysis with Machine Learning | The package - -
+

+ + MEDical Image analysis with Machine Learning (MEDiml) / The Package + +

-[![PyPI - Python Version](https://img.shields.io/badge/python-3.8%20|%203.9%20|%203.10-blue)](https://www.python.org/downloads/release/python-380/) -[![PyPI - version](https://img.shields.io/pypi/v/mediml)](https://pypi.org/project/mediml/) -[![Continuous Integration](https://github.com/MEDomicsLab/MEDiml-pkg/actions/workflows/python-app.yml/badge.svg)](https://github.com/MEDomicsLab/MEDiml-pkg/actions/workflows/python-app.yml) -[![Documentation Status](https://readthedocs.org/projects/mediml/badge/?version=latest)](https://mediml.readthedocs.io/en/latest/?badge=latest) -[![License: GPL-3](https://img.shields.io/badge/license-GPLv3-blue)](LICENSE) -[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/tutorial/DataManager-Tutorial.ipynb) +

A Python package for radiomics analysis.

-
+

+ Python 3.8, 3.9 and 3.10 + PyPI version + Build + Documentation build status + License + Open tutorial in Google Colab +

- 📖 Documentation +  Documentation +   ·   +  Website   ·   - 🌐 MEDiml.app +  Paper (Submitted)   ·   - 🖥️ MEDiml-app +  Reference Manual

-## Table of Contents - * [1. Introduction](#1-introduction) - * [2. Installation](#2-installation) - * [3. Using MEDiml](#3-using-mediml) - * [3.1 Using MEDiml through the command line](#31-using-mediml-through-the-command-line) - * [3.2 Using MEDiml through code](#32-using-mediml-through-code) - * [4. Tutorials](#4-tutorials) - * [5. IBSI Standardization](#5-ibsi-standardization) - * [IBSI Chapter 1](#ibsi-chapter-1) - * [IBSI Chapter 2](#ibsi-chapter-2) - * [6. Contributing and support](#6-contributing-and-support) - * [7. Citation](#7-citation) - * [8. Acknowledgement](#8-acknowledgement) - * [9. Authors](#9-authors) - * [10. License](#10-license) + + +![MEDiml workflow: datasets, DataManager, image inputs, subpackages, radiomic features, machine learning outputs and additional features](.github/assets/readme/mediml-overview.svg) + +## Table of Contents + * [Introduction](#introduction) + * [Installation](#installation) + * [Using MEDiml](#using-mediml) + * [Tutorials](#tutorials) + * [IBSI Standardization](#ibsi-standardization) + * [Getting help](#getting-help) + * [Contributing](#contributing) + * [Acknowledgement](#acknowledgement) + * [Citation](#citation) + * [License](#license) -## 1. Introduction -MEDiml is an open-source Python package that can be used for processing multi-modal medical images (MRI, CT or PET) and for extracting their radiomic features. This package is meant to facilitate the processing of medical images and the subsequent computation of all types of radiomic features while maintaining the reproducibility of analyses. This package has been standardized with the [IBSI](https://theibsi.github.io/) norms. +## Introduction -![MEDiml overview](https://raw.githubusercontent.com/MEDomicsLab/MEDiml-pkg/main/docs/figures/pakcage-overview.png) +MEDiml-pkg is an open-source Python package that can be used for processing multi-modal medical images (MRI, CT or PET) and for extracting their radiomic features. It is also the computational engine behind [MEDiml-app](https://www.mediml.app/), the desktop application for conducting radiomics workflows without writing code. This package is meant to facilitate the processing of medical images and the subsequent computation of all types of radiomic features whilst maintaining the reproducibility of analyses. This package has been standardised with the [IBSI](https://theibsi.github.io/) norms. +See the [workflow figure at the top](#package-workflow) for a step-by-step overview of the package, from medical image datasets and preprocessing to radiomic feature extraction and machine learning. -## 2. Installation +## Installation ### Python installation + The MEDiml package requires *Python 3.8*, *3.9* or *3.10*. If you don't have it installed on your machine, follow the instructions [here](https://github.com/MEDomicsLab/MEDiml-pkg/blob/main/python.md) to install it. ### Package installation + You can easily install the ``MEDiml`` package from PyPI using: ``` pip install MEDiml ``` +Or, with [uv](https://docs.astral.sh/uv/) (the fastest Python package and project manager): +``` +uv pip install mediml # into your current environment +uv add mediml # into a uv project +uv tool install --python 3.10 mediml # only the `radiomics` command, in its own environment +``` +If your uv project uses Python 3.11 or newer, create one for Python 3.10 instead: `uv init --python 3.10`. + For more installation options (Conda, Poetry...) check out the [installation documentation](https://mediml.readthedocs.io/en/latest/Installation.html). -## 3. Using MEDiml +## Using MEDiml + MEDiml can be used either as a command line tool for batch radiomics extraction, or as a Python package that you import directly into your own scripts and notebooks for finer-grained control over the processing and feature extraction pipeline. -### 3.1 Using MEDiml through the command line +### Using MEDiml through the command line + After installation, you can launch radiomics extraction directly from the terminal: ```bash @@ -86,7 +104,8 @@ The command wraps the existing `BatchExtractor` workflow and selects the appropr | `--n-batch` | No | Number of CPU cores to use for extraction. Defaults to `4`. | | `--skip-existing` | No | Skip scans whose features already exist in the output folder. | -### 3.2 Using MEDiml through code +### Using MEDiml through code + ```python import os import pickle @@ -125,35 +144,34 @@ med_obj.save_radiomics( ) ``` -## 4. Tutorials +## Tutorials We have created many [tutorial notebooks](https://github.com/MEDomicsLab/MEDiml-pkg/tree/main/notebooks) to assist you in learning how to use the different parts of the package. More details can be found in the [documentation](https://mediml.readthedocs.io/en/latest/tutorials.html). -## 5. IBSI Standardization +## IBSI Standardization + The image biomarker standardization initiative ([IBSI](https://theibsi.github.io)) is an independent international collaboration that aims to standardize the extraction of image biomarkers from acquired imaging. The IBSI therefore seeks to provide image biomarker nomenclature and definitions, benchmark datasets, and benchmark values to verify image processing and image biomarker calculations, as well as reporting guidelines, for high-throughput image analysis. We participate in this collaboration with our package to make sure it respects international nomenclatures and definitions. The participation was separated into two chapters: - - ### IBSI Chapter 1 - [The IBSI chapter 1](https://theibsi.github.io/ibsi1/) is dedicated to the standardization of commonly used radiomic features. It was initiated in September 2016 and reached completion in March 2020. We have created two [jupyter notebooks](https://github.com/MEDomicsLab/MEDiml-pkg/tree/main/notebooks/ibsi) for each phase of the chapter and made them available for the users to run the IBSI tests for themselves. The tests can also be explored in interactive Colab notebooks that are directly accessible here: - - - **Phase 1**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi1p1.ipynb) - - **Phase 2**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi1p2.ipynb) +### IBSI Chapter 1 + +[The IBSI chapter 1](https://theibsi.github.io/ibsi1/) is dedicated to the standardization of commonly used radiomic features. It was initiated in September 2016 and reached completion in March 2020. We have created two [jupyter notebooks](https://github.com/MEDomicsLab/MEDiml-pkg/tree/main/notebooks/ibsi) for each phase of the chapter and made them available for the users to run the IBSI tests for themselves. The tests can also be explored in interactive Colab notebooks that are directly accessible here: + +- **Phase 1**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi1p1.ipynb) +- **Phase 2**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi1p2.ipynb) - - ### IBSI Chapter 2 - [The IBSI chapter 2](https://theibsi.github.io/ibsi2/) was launched in June 2020 and reached completion in February 2024. It is dedicated to the standardization of commonly used imaging filters in radiomic studies. We have created two [jupyter notebooks](https://github.com/MEDomicsLab/MEDiml-pkg/tree/main/notebooks/ibsi) for each phase of the chapter and made them available for the users to run the IBSI tests for themselves and validate image filtering and image biomarker calculations from filter response maps. The tests can also be explored in interactive Colab notebooks that are directly accessible here: - - - **Phase 1**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi2p1.ipynb) - - **Phase 2**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi2p2.ipynb) +### IBSI Chapter 2 - Our team named *UdeS* (a.k.a. Université de Sherbrooke) has already submitted the benchmarked values to the [IBSI uploading website](https://ibsi.radiomics.hevs.ch/). +[The IBSI chapter 2](https://theibsi.github.io/ibsi2/) was launched in June 2020 and reached completion in February 2024. It is dedicated to the standardization of commonly used imaging filters in radiomic studies. We have created two [jupyter notebooks](https://github.com/MEDomicsLab/MEDiml-pkg/tree/main/notebooks/ibsi) for each phase of the chapter and made them available for the users to run the IBSI tests for themselves and validate image filtering and image biomarker calculations from filter response maps. The tests can also be explored in interactive Colab notebooks that are directly accessible here: ---- -**Miscellaneous** +- **Phase 1**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi2p1.ipynb) +- **Phase 2**: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MEDomicsLab/MEDiml-pkg/blob/main/notebooks/ibsi/ibsi2p2.ipynb) -You can avoid the next steps (Jupyter installation) if you already have a Jupyter Notebook setup available. +Our team named *UdeS* (a.k.a. Université de Sherbrooke) has already submitted the benchmarked values to the [IBSI uploading website](https://ibsi.radiomics.hevs.ch/). ---- +
+Run IBSI tests locally -You can view and run the tests locally by installing the [Jupyter Notebook](https://jupyter.org/) application on your machine: +You can view and run the tests locally with [Jupyter Notebook](https://jupyter.org/). If it is not already installed on your machine, install it using: ``` python -m pip install jupyter ``` @@ -176,18 +194,28 @@ Make sure to run the notebooks with a Jupyter kernel that has `MEDiml` installed ! pip install MEDiml ``` -## 6. Contributing and support -Contributions are welcome! Please read the [contributing guidelines](CONTRIBUTING.md) and our [code of conduct](CODE_OF_CONDUCT.md). +
+ +## Getting help + +- **Bugs and feature requests**: open an issue on [GitHub Issues](https://github.com/MEDomicsLab/MEDiml-pkg/issues). +- **Questions and discussion**: join the [MEDomics Discord](https://discord.gg/ZbaGj8E6mP). + +## Contributing + +Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) and our [Code of Conduct](CODE_OF_CONDUCT.md). -- **Report a bug or request a feature**: open an issue on the [issue tracker](https://github.com/MEDomicsLab/MEDiml-pkg/issues). -- **Seek support**: check the [documentation](https://mediml.readthedocs.io/) and its [FAQs](https://mediml.readthedocs.io/en/latest/FAQs.html), then open an [issue](https://github.com/MEDomicsLab/MEDiml-pkg/issues) or contact the team at medomics.info@gmail.com. +## Acknowledgement + +MEDiml is an open-source package developed at the [MEDomicsLab](https://www.medomicslab.com/en/) laboratory with the collaboration of the international consortium [MEDomics](https://www.medomics.ai/). We welcome any contribution and feedback. Furthermore, we wish that this package could serve the growing radiomics research community by providing a flexible as well as [IBSI](https://theibsi.github.io/) standardized tool to reimplement existing methods and develop new ones. + +## Citation -## 7. Citation If you use MEDiml in your research, please cite it using: ```bibtex @misc{loutfi2026mediml, - title = {Medical Image Analysis with Machine Learning ({MEDiml}): Strategies for Simpler Radiomics}, + title = {{MEDical Image analysis with Machine Learning (MEDiml)}: Strategies for Simpler Radiomics}, author = {Ait Lhaj Loutfi, Mahdi and others}, year = {2026}, eprint = {2610.37715}, @@ -196,17 +224,8 @@ If you use MEDiml in your research, please cite it using: } ``` -The full reference manual of MEDiml is available on [arXiv](https://arxiv.org/abs/2610.29666). - -## 8. Acknowledgement -MEDiml is an open-source package developed at the [MEDomicsLab](https://www.medomicslab.com/en/) laboratory with the collaboration of the international consortium [MEDomics](https://www.medomics.ai/). We welcome any contribution and feedback. Furthermore, we wish that this package could serve the growing radiomics research community by providing a flexible as well as [IBSI](https://theibsi.github.io/) standardized tool to reimplement existing methods and develop new ones. - -## 9. Authors - -MEDiml is developed by: -* [MEDomicsLab](https://www.medomicslab.com/): Research laboratory at Université de Sherbrooke & McGill University. -* [MEDomics](https://github.com/medomics/): MEDomics consortium. +The [MEDiml reference manual](https://arxiv.org/abs/2610.29666) explains the radiomics concepts and workflow shared by the Python package and desktop application, including image preprocessing, feature extraction, predictive modelling and interpretation. It also covers the software architecture and installation, compares MEDiml with other tools, and illustrates its use on five oncological imaging cohorts. -## 10. License +## License -MEDiml-app is released under the [GNU General Public License v3.0](LICENSE). +MEDiml-pkg is released under the [GNU General Public License v3.0](LICENSE.md). diff --git a/docs/Installation.rst b/docs/Installation.rst index 2410dae..ce99411 100644 --- a/docs/Installation.rst +++ b/docs/Installation.rst @@ -15,6 +15,27 @@ Install via pip pip install mediml +Install via uv +-------------- +``MEDiml`` can also be installed with `uv `__ (the fastest Python package and project manager). Pick the command that fits your setup: + +* Into your current environment :: + + uv pip install mediml + +* Into a uv project :: + + uv add mediml + +* Only the ``radiomics`` command, in its own environment :: + + uv tool install --python 3.10 mediml + +.. note:: + MEDiml supports Python 3.10 at most. If your uv project uses a newer version, create one for Python 3.10 instead :: + + uv init --python 3.10 + Install from source ------------------- diff --git a/docs/License.rst b/docs/License.rst deleted file mode 100644 index 77172e8..0000000 --- a/docs/License.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. _license: - -License -======= - -.. include:: ../LICENSE.md \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index a7644a2..1444c94 100644 --- a/poetry.lock +++ b/poetry.lock @@ -185,7 +185,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "cycler" -version = "0.20.0" +version = "0.20.1" description = "Composable style cycles" category = "main" optional = false diff --git a/pyproject.toml b/pyproject.toml index cc02b5c..6b8b905 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "mediml" -version = "0.20.0" +version = "0.20.1" description = "MEDiml is a Python package for processing and extracting features from medical images" authors = ["MEDomics Consortium "] license = "GPL-3.0" @@ -19,7 +19,7 @@ packages = [ {include = "MEDiml"} ] [tool.poetry.dependencies] python = ">=3.8.0,<3.11" -numpy = "*" +numpy = "<2.0.0" isort = "*" ipykernel = "*" ipywidgets = "*" @@ -36,7 +36,7 @@ protobuf = "*" pycaret = "*" pydicom = "*" PyWavelets = "*" -ray = { version = "*", extras = ["default"] } +ray = { version = "<2.55.0", extras = ["default"] } scikit_image = "*" scipy = "*" setuptools = "*" @@ -55,7 +55,7 @@ xgboost = "*" [tool.poetry.dev-dependencies] [tool.poetry.scripts] -radiomics = "radiomics:main" +radiomics = "MEDiml.cli:main" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt index 69c61b5..7113e27 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -numpy +numpy<2.0.0 isort ipykernel ipywidgets @@ -15,7 +15,7 @@ protobuf pycaret pydicom<2.0.0 PyWavelets -ray[default] +ray[default]<2.55.0 scikit_image scipy setuptools diff --git a/setup.py b/setup.py index d4a871e..2ed29ca 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ setup( name="MEDiml", - version="0.20.0", + version="0.20.1", author="MEDomics consortium", author_email="medomics.info@gmail.com", description="Python Open-source package for medical images processing and radiomic features extraction", @@ -41,7 +41,7 @@ install_requires=requirements, entry_points={ 'console_scripts': [ - 'radiomics=radiomics:main', + 'radiomics=MEDiml.cli:main', ], }, ) diff --git a/tests/test_cli.py b/tests/test_cli.py index b11a4ce..d02039d 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -2,11 +2,11 @@ import pytest -from radiomics import build_parser, main +from MEDiml.cli import build_parser, main def test_cli_defaults_to_niftis_and_forwards_arguments_to_batch_extractor(): - with patch("radiomics._get_batch_extractor") as get_batch_extractor_mock: + with patch("MEDiml.cli._get_batch_extractor") as get_batch_extractor_mock: batch_extractor_mock = get_batch_extractor_mock.return_value instance = batch_extractor_mock.return_value @@ -34,7 +34,7 @@ def test_cli_defaults_to_niftis_and_forwards_arguments_to_batch_extractor(): def test_cli_forwards_dicom_selection_to_batch_extractor(): - with patch("radiomics._get_batch_extractor") as get_batch_extractor_mock: + with patch("MEDiml.cli._get_batch_extractor") as get_batch_extractor_mock: batch_extractor_mock = get_batch_extractor_mock.return_value instance = batch_extractor_mock.return_value @@ -53,7 +53,7 @@ def test_cli_forwards_dicom_selection_to_batch_extractor(): def test_cli_forwards_optional_path_csv(): - with patch("radiomics._get_batch_extractor") as get_batch_extractor_mock: + with patch("MEDiml.cli._get_batch_extractor") as get_batch_extractor_mock: batch_extractor_mock = get_batch_extractor_mock.return_value main([