multimodars 0.2.3__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {multimodars-0.2.3 → multimodars-0.3.1}/.github/workflows/CI.yml +47 -17
- {multimodars-0.2.3 → multimodars-0.3.1}/.gitignore +13 -1
- multimodars-0.3.1/.pre-commit-config.yaml +52 -0
- multimodars-0.3.1/CHANGELOG.md +167 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/Cargo.lock +139 -27
- {multimodars-0.2.3 → multimodars-0.3.1}/Cargo.toml +2 -2
- multimodars-0.3.1/PKG-INFO +156 -0
- multimodars-0.3.1/README.md +131 -0
- multimodars-0.3.1/ROADMAP.MD +92 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/__init__.py +50 -2
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/_converters.py +82 -6
- multimodars-0.3.1/multimodars/_processing.py +1426 -0
- multimodars-0.3.1/multimodars/ccta/__init__.py +466 -0
- multimodars-0.3.1/multimodars/ccta/debug_plots.py +207 -0
- multimodars-0.3.1/multimodars/ccta/fixing_functions.py +239 -0
- multimodars-0.3.1/multimodars/ccta/labeling.py +571 -0
- multimodars-0.3.1/multimodars/ccta/manipulating.py +975 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/multimodars.pyi +184 -169
- {multimodars-0.2.3 → multimodars-0.3.1}/pyproject.toml +22 -3
- {multimodars-0.2.3 → multimodars-0.3.1}/src/ccta/adjust_mesh/label_coronary.rs +1 -3
- {multimodars-0.2.3 → multimodars-0.3.1}/src/ccta/adjust_mesh/scale_coronary.rs +128 -83
- {multimodars-0.2.3 → multimodars-0.3.1}/src/ccta/binding/ccta_py.rs +114 -23
- {multimodars-0.2.3 → multimodars-0.3.1}/src/ccta/mod.rs +0 -1
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/binding/align.rs +6 -6
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/binding/classes.rs +85 -10
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/binding/entry.rs +186 -195
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/binding/mod.rs +264 -327
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/centerline_align/align_algorithms.rs +4 -4
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/centerline_align/mod.rs +20 -26
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/io/geometry.rs +91 -26
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/io/input.rs +14 -15
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/io/integrity_check.rs +18 -21
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/io/mod.rs +3 -6
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/io/output.rs +1 -1
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/align_between.rs +29 -22
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/align_within.rs +71 -27
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/postprocessing.rs +3 -9
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/preprocessing.rs +65 -27
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/process_utils.rs +2 -4
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/wall.rs +11 -19
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/to_object/interpolation.rs +8 -8
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/to_object/mod.rs +1 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/to_object/texture.rs +1 -1
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/to_object/write_mtl.rs +5 -5
- multimodars-0.2.3/src/intravascular/utils/utils.rs → multimodars-0.3.1/src/intravascular/utils/general_utils.rs +4 -4
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/utils/mod.rs +1 -1
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/utils/test_utils.rs +11 -11
- {multimodars-0.2.3 → multimodars-0.3.1}/src/lib.rs +5 -2
- multimodars-0.3.1/tests/test_ccta.py +657 -0
- multimodars-0.2.3/.pre-commit-config.yaml +0 -38
- multimodars-0.2.3/CHANGELOG.md +0 -83
- multimodars-0.2.3/PKG-INFO +0 -281
- multimodars-0.2.3/README.md +0 -249
- multimodars-0.2.3/ROADMAP.MD +0 -63
- multimodars-0.2.3/docs/Makefile +0 -20
- multimodars-0.2.3/docs/_static/.gitkeep +0 -0
- multimodars-0.2.3/docs/api/adjust_ccta.rst +0 -9
- multimodars-0.2.3/docs/api/centerline.rst +0 -6
- multimodars-0.2.3/docs/api/classes/PyCenterline.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyCenterlinePoint.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyContour.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyContourPoint.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyFrame.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyGeometry.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyGeometryPair.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyInputData.rst +0 -12
- multimodars-0.2.3/docs/api/classes/PyRecord.rst +0 -11
- multimodars-0.2.3/docs/api/classes/index.rst +0 -16
- multimodars-0.2.3/docs/api/converters_and_wrappers.rst +0 -9
- multimodars-0.2.3/docs/api/core.rst +0 -8
- multimodars-0.2.3/docs/api/index.rst +0 -14
- multimodars-0.2.3/docs/api/processing.rst +0 -11
- multimodars-0.2.3/docs/api/utilities.rst +0 -4
- multimodars-0.2.3/docs/build.sh +0 -13
- multimodars-0.2.3/docs/changelog.md +0 -2
- multimodars-0.2.3/docs/conf.py +0 -73
- multimodars-0.2.3/docs/figures/Alignment3p.png +0 -0
- multimodars-0.2.3/docs/figures/animation_stress_induced_systolic_deformation.gif +0 -0
- multimodars-0.2.3/docs/figures/anomalous_labeling.jpg +0 -0
- multimodars-0.2.3/docs/figures/initial_labeling.jpg +0 -0
- multimodars-0.2.3/docs/figures/scaling.jpg +0 -0
- multimodars-0.2.3/docs/index.rst +0 -69
- multimodars-0.2.3/docs/installation.rst +0 -53
- multimodars-0.2.3/docs/make.bat +0 -35
- multimodars-0.2.3/docs/tutorial_ccta.rst +0 -163
- multimodars-0.2.3/docs/tutorial_intravascular.rst +0 -391
- multimodars-0.2.3/multimodars/ccta/__init__.py +0 -1
- multimodars-0.2.3/multimodars/ccta/adjust_ccta.py +0 -1007
- multimodars-0.2.3/src/ccta/io/input.rs +0 -220
- multimodars-0.2.3/src/ccta/io/mod.rs +0 -1
- {multimodars-0.2.3 → multimodars-0.3.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/.github/workflows/draft-pdf.yml +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/.readthedocs.yaml +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/CONTRIBUTING.md +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/LICENSE +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/branch_diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/branch_systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/calcium_diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/calcium_systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/diastolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/eem_diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/eem_systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/idealized_geometry/systolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/branch_diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/branch_systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/calcium_diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/calcium_systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/diastolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/eem_diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/eem_systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_full/systolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_rest/combined_sorted_manual.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_rest/diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_rest/diastolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_rest/systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_rest/systolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_stress/combined_sorted_manual.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_stress/diastolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_stress/diastolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_stress/systolic_contours.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/data/fixtures/ivus_stress/systolic_reference_points.csv +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/media/coronary_artery_disease.jpg +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/media/dynamic_lumen_changes.png +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/media/multimoda-rs.jpg +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/io/__init__.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/io/read_geometrical.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/io/write_geometries.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/multimodars/py.typed +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/REVIEWER1.md +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/bibliography.bib +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/figures/Figure1.jpg +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/figures/Figure2.jpg +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/figures/Figure3.png +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/figures/Figure4.jpg +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/paper/paper.md +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/src/ccta/adjust_mesh/mod.rs +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/src/ccta/binding/mod.rs +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/centerline_align/preprocessing.rs +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/mod.rs +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/src/intravascular/processing/mod.rs +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/tests/conftest.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/tests/test_converters.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/tests/test_core.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/tests/test_wrappers.py +0 -0
- {multimodars-0.2.3 → multimodars-0.3.1}/tests/tests_todo.md +0 -0
|
@@ -19,6 +19,31 @@ permissions:
|
|
|
19
19
|
contents: read
|
|
20
20
|
|
|
21
21
|
jobs:
|
|
22
|
+
notebook-tests:
|
|
23
|
+
name: Notebook tests
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v6
|
|
27
|
+
- uses: actions/setup-python@v6
|
|
28
|
+
with:
|
|
29
|
+
python-version: 3.12.x
|
|
30
|
+
- name: Install Rust
|
|
31
|
+
uses: dtolnay/rust-toolchain@stable
|
|
32
|
+
- name: Install system dependencies
|
|
33
|
+
# pymeshlab loads MeshLab filter plugins as shared libraries at import time via
|
|
34
|
+
# load_default_plugins(). On bare Linux runners this requires libopengl0 to be
|
|
35
|
+
# present; without it the call silently fails (PyMeshLabException is caught in
|
|
36
|
+
# pymeshlab's __init__.py) and MeshSet is left with no filter methods, causing
|
|
37
|
+
# AttributeError on any filter call such as meshing_close_holes().
|
|
38
|
+
run: sudo apt-get install -y libopengl0
|
|
39
|
+
- name: Install dependencies
|
|
40
|
+
run: |
|
|
41
|
+
python -m pip install --upgrade pip
|
|
42
|
+
pip install -e '.[meshlab]'
|
|
43
|
+
pip install --group dev
|
|
44
|
+
- name: Run notebook tests
|
|
45
|
+
run: pytest --nbmake docs/notebooks/
|
|
46
|
+
|
|
22
47
|
python-compat:
|
|
23
48
|
name: Python ${{ matrix.python-version }} compatibility
|
|
24
49
|
runs-on: ubuntu-latest
|
|
@@ -27,8 +52,8 @@ jobs:
|
|
|
27
52
|
matrix:
|
|
28
53
|
python-version: ['3.10', '3.11', '3.12', '3.13']
|
|
29
54
|
steps:
|
|
30
|
-
- uses: actions/checkout@
|
|
31
|
-
- uses: actions/setup-python@
|
|
55
|
+
- uses: actions/checkout@v6
|
|
56
|
+
- uses: actions/setup-python@v6
|
|
32
57
|
with:
|
|
33
58
|
python-version: ${{ matrix.python-version }}
|
|
34
59
|
- name: Install Rust
|
|
@@ -36,7 +61,8 @@ jobs:
|
|
|
36
61
|
- name: Install Python deps
|
|
37
62
|
run: |
|
|
38
63
|
python -m pip install --upgrade pip
|
|
39
|
-
pip install -e .
|
|
64
|
+
pip install -e .
|
|
65
|
+
pip install --group test
|
|
40
66
|
- name: Run Python tests
|
|
41
67
|
run: pytest
|
|
42
68
|
|
|
@@ -50,16 +76,17 @@ jobs:
|
|
|
50
76
|
- runner: ubuntu-latest
|
|
51
77
|
target: aarch64
|
|
52
78
|
steps:
|
|
53
|
-
- uses: actions/checkout@
|
|
79
|
+
- uses: actions/checkout@v6
|
|
54
80
|
|
|
55
|
-
- uses: actions/setup-python@
|
|
81
|
+
- uses: actions/setup-python@v6
|
|
56
82
|
with:
|
|
57
83
|
python-version: 3.12.x
|
|
58
84
|
|
|
59
85
|
- name: Install Python deps
|
|
60
86
|
run: |
|
|
61
87
|
python -m pip install --upgrade pip
|
|
62
|
-
pip install -e .
|
|
88
|
+
pip install -e .
|
|
89
|
+
pip install --group test
|
|
63
90
|
|
|
64
91
|
- name: run Python tests
|
|
65
92
|
run: pytest
|
|
@@ -102,14 +129,15 @@ jobs:
|
|
|
102
129
|
- runner: ubuntu-latest
|
|
103
130
|
target: armv7
|
|
104
131
|
steps:
|
|
105
|
-
- uses: actions/checkout@
|
|
106
|
-
- uses: actions/setup-python@
|
|
132
|
+
- uses: actions/checkout@v6
|
|
133
|
+
- uses: actions/setup-python@v6
|
|
107
134
|
with:
|
|
108
135
|
python-version: 3.12.x
|
|
109
136
|
- name: Install Python deps
|
|
110
137
|
run: |
|
|
111
138
|
python -m pip install --upgrade pip
|
|
112
|
-
pip install -e .
|
|
139
|
+
pip install -e .
|
|
140
|
+
pip install --group test
|
|
113
141
|
- name: run Python tests
|
|
114
142
|
run: pytest
|
|
115
143
|
- name: Format Python code
|
|
@@ -139,15 +167,16 @@ jobs:
|
|
|
139
167
|
- runner: windows-latest
|
|
140
168
|
target: x64
|
|
141
169
|
steps:
|
|
142
|
-
- uses: actions/checkout@
|
|
143
|
-
- uses: actions/setup-python@
|
|
170
|
+
- uses: actions/checkout@v6
|
|
171
|
+
- uses: actions/setup-python@v6
|
|
144
172
|
with:
|
|
145
173
|
python-version: 3.12.x
|
|
146
174
|
architecture: ${{ matrix.platform.target }}
|
|
147
175
|
- name: Install Python deps
|
|
148
176
|
run: |
|
|
149
177
|
python -m pip install --upgrade pip
|
|
150
|
-
pip install -e .
|
|
178
|
+
pip install -e .
|
|
179
|
+
pip install --group test
|
|
151
180
|
- name: run Python tests
|
|
152
181
|
run: pytest
|
|
153
182
|
- name: Format Python code
|
|
@@ -179,14 +208,15 @@ jobs:
|
|
|
179
208
|
target: aarch64
|
|
180
209
|
arch: arm64
|
|
181
210
|
steps:
|
|
182
|
-
- uses: actions/checkout@
|
|
183
|
-
- uses: actions/setup-python@
|
|
211
|
+
- uses: actions/checkout@v6
|
|
212
|
+
- uses: actions/setup-python@v6
|
|
184
213
|
with:
|
|
185
214
|
python-version: 3.12.x
|
|
186
215
|
- name: Install Python deps
|
|
187
216
|
run: |
|
|
188
217
|
python -m pip install --upgrade pip
|
|
189
|
-
pip install -e .
|
|
218
|
+
pip install -e .
|
|
219
|
+
pip install --group test
|
|
190
220
|
- name: run Python tests
|
|
191
221
|
run: pytest
|
|
192
222
|
- name: Format Python code
|
|
@@ -210,7 +240,7 @@ jobs:
|
|
|
210
240
|
sdist:
|
|
211
241
|
runs-on: ubuntu-latest
|
|
212
242
|
steps:
|
|
213
|
-
- uses: actions/checkout@
|
|
243
|
+
- uses: actions/checkout@v6
|
|
214
244
|
- name: Build sdist
|
|
215
245
|
uses: PyO3/maturin-action@v1
|
|
216
246
|
with:
|
|
@@ -226,7 +256,7 @@ jobs:
|
|
|
226
256
|
name: Release
|
|
227
257
|
runs-on: ubuntu-latest
|
|
228
258
|
if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
|
|
229
|
-
needs: [linux, musllinux, windows, macos, sdist]
|
|
259
|
+
needs: [linux, musllinux, windows, macos, sdist, python-compat]
|
|
230
260
|
permissions:
|
|
231
261
|
id-token: write
|
|
232
262
|
contents: write
|
|
@@ -5,7 +5,19 @@
|
|
|
5
5
|
/paper/old
|
|
6
6
|
.VSCodeCounter
|
|
7
7
|
/test
|
|
8
|
-
/
|
|
8
|
+
examples/__pycache__/
|
|
9
|
+
examples/logs/
|
|
10
|
+
examples/data/output/
|
|
11
|
+
examples/data/test/
|
|
12
|
+
examples/data/logs/
|
|
13
|
+
# generated/intermediate STL outputs in data root
|
|
14
|
+
examples/data/all.stl
|
|
15
|
+
examples/data/all_wall.stl
|
|
16
|
+
examples/data/fixed_mesh.stl
|
|
17
|
+
examples/data/prefixed_mesh.stl
|
|
18
|
+
examples/data/lca.stl
|
|
19
|
+
examples/data/rca.stl
|
|
20
|
+
examples/data/aorta.stl
|
|
9
21
|
|
|
10
22
|
# Byte-compiled / optimized / DLL files
|
|
11
23
|
__pycache__/
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: local
|
|
3
|
+
hooks:
|
|
4
|
+
# - id: pytest
|
|
5
|
+
# name: Run pytest
|
|
6
|
+
# entry: pytest
|
|
7
|
+
# language: system
|
|
8
|
+
# types: [python]
|
|
9
|
+
# pass_filenames: false
|
|
10
|
+
|
|
11
|
+
- id: rust-fmt
|
|
12
|
+
name: Rust format
|
|
13
|
+
entry: cargo fmt --all
|
|
14
|
+
language: system
|
|
15
|
+
types: [rust]
|
|
16
|
+
pass_filenames: false
|
|
17
|
+
|
|
18
|
+
- id: rust-clippy
|
|
19
|
+
name: Rust clippy
|
|
20
|
+
entry: cargo clippy --all-targets --all-features -- -D warnings
|
|
21
|
+
language: system
|
|
22
|
+
types: [rust]
|
|
23
|
+
pass_filenames: false
|
|
24
|
+
|
|
25
|
+
# - id: rust-test
|
|
26
|
+
# name: Rust unit tests
|
|
27
|
+
# entry: cargo test --lib # --quiet
|
|
28
|
+
# language: system
|
|
29
|
+
# types: [rust]
|
|
30
|
+
# pass_filenames: false
|
|
31
|
+
|
|
32
|
+
- id: python-black
|
|
33
|
+
name: Black formatting
|
|
34
|
+
entry: black
|
|
35
|
+
language: system
|
|
36
|
+
types: [python]
|
|
37
|
+
require_serial: true
|
|
38
|
+
args: [--quiet, --target-version, py312]
|
|
39
|
+
|
|
40
|
+
- id: python-ruff
|
|
41
|
+
name: Ruff linting
|
|
42
|
+
entry: ruff check
|
|
43
|
+
language: system
|
|
44
|
+
types: [python]
|
|
45
|
+
args: [--fix]
|
|
46
|
+
|
|
47
|
+
- id: python-mypy
|
|
48
|
+
name: Mypy type checking
|
|
49
|
+
entry: mypy multimodars --ignore-missing-imports
|
|
50
|
+
language: system
|
|
51
|
+
types: [python]
|
|
52
|
+
pass_filenames: false
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Changelog multimodars
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
This project adheres to [Semantic Versioning](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
## [0.3.1] - 2026-05-04
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- Example data and Jupyter notebooks are now included directly in the repository under
|
|
10
|
+
`examples/` — no longer distributed as a release attachment. Both tutorials link to
|
|
11
|
+
the `examples/` directory and cross-reference the rendered notebook pages.
|
|
12
|
+
- CCTA and intravascular Jupyter notebooks (`docs/notebooks/`) are now rendered and served
|
|
13
|
+
in the documentation via `myst-nb`, accessible as `:doc:` references from the tutorials.
|
|
14
|
+
- Detailed explanation of the rolling-sphere and ray-casting labeling algorithms added to
|
|
15
|
+
the CCTA tutorial, including annotated figures.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- README condensed: developer-setup section added, key workflow images included, installation
|
|
19
|
+
and quickstart sections tightened.
|
|
20
|
+
- `plotly` added as a documentation dependency for interactive notebook figures.
|
|
21
|
+
- Improved all print statements in the whole package.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- CI pipeline now correctly installs optional dependency groups required for the full test
|
|
25
|
+
suite.
|
|
26
|
+
- Notebook tests no longer fail with `AttributeError: MeshSet has no attribute
|
|
27
|
+
'meshing_close_holes'` on bare Linux runners. pymeshlab silently skips plugin loading when
|
|
28
|
+
`libopengl0` is absent, leaving `MeshSet` with no filter methods; the CI now installs
|
|
29
|
+
`libopengl0` before the notebook test job runs.
|
|
30
|
+
|
|
31
|
+
### Performance
|
|
32
|
+
- Rust labeling step migrated to `par_iter()` for parallel vertex classification, reducing
|
|
33
|
+
wall time on large meshes.
|
|
34
|
+
|
|
35
|
+
## [0.3.0] - 2026-04-30
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- `stitch_ccta_to_intravascular()`: fuses an aligned intravascular `PyGeometry` with a CCTA
|
|
39
|
+
trimesh by triangulating a patch between the open boundary ring of the CCTA mesh and the
|
|
40
|
+
proximal/distal contour of the intravascular geometry. Supports two boundary-ring alignment
|
|
41
|
+
modes (`"nearest_iv"` and `"highest_z"`) for proximal and distal ends independently.
|
|
42
|
+
- `fix_and_remesh_stitched_mesh()`: repairs the stitched surface (non-manifold edges/vertices,
|
|
43
|
+
open holes) and applies isotropic remeshing via `pymeshlab`. Requires the optional
|
|
44
|
+
`multimodars[meshlab]` extra.
|
|
45
|
+
- `manual_hole_fill()`: flat-fills remaining open holes in a trimesh after automatic repair.
|
|
46
|
+
- `remove_labeled_points_from_mesh()`: deletes one or more labeled vertex regions from the mesh, remaps faces, and returns the open boundary ring as `"boundary_points"` for downstream stitching.
|
|
47
|
+
- `keep_labeled_points_from_mesh()`: retains only the vertices of a specified labeled region,
|
|
48
|
+
discarding all others.
|
|
49
|
+
- `sync_results_to_mesh()`: refreshes all coordinate lists in the results dictionary after
|
|
50
|
+
`scale_region_centerline_morphing()` moves vertices, keeping labels consistent with the
|
|
51
|
+
updated mesh.
|
|
52
|
+
- `find_aortic_wall_scaling()`: computes the optimal radial scaling factor for the aortic wall
|
|
53
|
+
region by minimising the distance to the first intravascular frame whose lumen elliptic ratio
|
|
54
|
+
drops below 1.3 (transition from intramural to free-segment lumen).
|
|
55
|
+
- `export_section_stl()`: exports the full mesh or a labeled sub-region (`"all"`, `"aorta"`,
|
|
56
|
+
`"rca"`, `"lca"`) as an STL file.
|
|
57
|
+
- `plot_results_key()`: opens an interactive 3-D trimesh scene visualising selected labeled
|
|
58
|
+
regions with colour coding (yellow = aorta, blue = RCA, green = LCA, red = removed/intramural,
|
|
59
|
+
cyan = proximal, magenta = distal, orange = anomalous).
|
|
60
|
+
- Tests for all new CCTA functions.
|
|
61
|
+
- `mypy` added to pre-commit hooks for static type checking.
|
|
62
|
+
|
|
63
|
+
### Changed
|
|
64
|
+
- Rust-side CCTA STL reader (`src/ccta/io/input.rs`) removed; mesh I/O is now handled
|
|
65
|
+
entirely via Python `trimesh`, eliminating the `stl_io` dependency.
|
|
66
|
+
- `pymeshlab` and `pyglet` are now optional dependencies; the core package installs without
|
|
67
|
+
them. Install extras with `pip install 'multimodars[meshlab]'`.
|
|
68
|
+
- Debug-plot helpers moved to a dedicated `ccta.debug_plots` module.
|
|
69
|
+
- CCTA Python module refactored into focused sub-modules (`labeling`, `manipulating`,
|
|
70
|
+
`fixing_functions`, `debug_plots`).
|
|
71
|
+
- Parameter order updated in several CCTA API calls for consistency.
|
|
72
|
+
- `diastole` argument removed from functions where it was not used.
|
|
73
|
+
- Labeling of aorta boundary points improved to avoid incorrect assignment at mesh edges.
|
|
74
|
+
- Type stubs updated and extended to cover all new public functions.
|
|
75
|
+
- Clippy lints applied across the Rust codebase (non-breaking).
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
- 3-D area and elliptic ratio calculation corrected for non-planar contours.
|
|
79
|
+
- Mesh face normals corrected after stitching to ensure consistent outward orientation.
|
|
80
|
+
|
|
81
|
+
### Documentation
|
|
82
|
+
- CCTA tutorial completely rewritten to cover the full stitching workflow:
|
|
83
|
+
`remove_labeled_points_from_mesh` → `stitch_ccta_to_intravascular` →
|
|
84
|
+
`fix_and_remesh_stitched_mesh` → Taubin smoothing → `export_section_stl` → re-labeling.
|
|
85
|
+
- Intravascular tutorial reviewed and completed: section numbering corrected (1–7),
|
|
86
|
+
CSV-vs-numpy workflow note added, column descriptions with units added to data tables,
|
|
87
|
+
Sphinx cross-references added throughout, `translate()` tuple-argument bug fixed.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## [0.2.3] - 2026-03-06
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
- Type stubs for the Rust-implemented interface (via maturin)
|
|
94
|
+
- `PyFrame.get_frame_at_z`: retrieve a frame by its z position
|
|
95
|
+
- `PyFrame.get_frame_at_index`: retrieve a frame by its index
|
|
96
|
+
- `PyFrame.replace_frame`: replace an existing frame with another
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
- CI pipeline now tests against Python 3.10 through 3.13
|
|
100
|
+
- Updated documentation to reflect the current interface and Python version requirements
|
|
101
|
+
- Added direct download links to example data in the README and documentation
|
|
102
|
+
- Migrated to modern NumPy-style type annotations throughout the Python codebase
|
|
103
|
+
- All imports are now top-level across all Python modules
|
|
104
|
+
|
|
105
|
+
## [0.2.2] - 2026-03-03
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
- Uploaded new example data
|
|
109
|
+
- Updated docs to match the new example data
|
|
110
|
+
|
|
111
|
+
## [0.2.1] - 2026-01-12
|
|
112
|
+
|
|
113
|
+
### Changed
|
|
114
|
+
- Automatic version update based on Cargo.toml
|
|
115
|
+
|
|
116
|
+
## [0.2.0] - 2026-01-11
|
|
117
|
+
|
|
118
|
+
### Added
|
|
119
|
+
- Functionality to read in CCTA .stl files and label them according to centerline object
|
|
120
|
+
- Functionality to label the CCTA geometry additionally by an aligned intravascular aligned geometry.
|
|
121
|
+
- Functionality to better align intravascular geometry to a centerline using additionally the CCTA vertices `align_combined`
|
|
122
|
+
- Functionality to radially scale different regions radially to their corresponding centerline
|
|
123
|
+
- Algorihtm for finding the best radial scaling factor for distal and proximal region compared to the aligned geometry
|
|
124
|
+
- Algorithm for finding the best radial scaling factor for the aorta to minimize the distance between "wall" of `PyGeometry` object and the identified intramural vertices
|
|
125
|
+
|
|
126
|
+
### Changed
|
|
127
|
+
- Updated documentation to include a tutorial for the new functionality
|
|
128
|
+
- Reduced the amount of testing data to reduce size of the package
|
|
129
|
+
- Removed the examples folder from the repository and coupled to release (.zip file)
|
|
130
|
+
|
|
131
|
+
## [0.1.2] - 2025-11-21
|
|
132
|
+
|
|
133
|
+
### Changed
|
|
134
|
+
- intravascular::processing::align_within::fill_holes() now does not panic with gaps > 2
|
|
135
|
+
frames, but instead still fixes the holes and returns a warning to the user to check integrity of the data.
|
|
136
|
+
|
|
137
|
+
## [0.1.1] - 2025-11-17
|
|
138
|
+
|
|
139
|
+
### Changed
|
|
140
|
+
- Update documentation to match new functionality
|
|
141
|
+
|
|
142
|
+
## [0.1.0] - 2025-11-17
|
|
143
|
+
|
|
144
|
+
### Added
|
|
145
|
+
- Fill-holes functionality: when a geometry has a large gap between frames,
|
|
146
|
+
up to two frames will be inserted to improve continuity.
|
|
147
|
+
- Geometry integrity tests: after aligning frames within a geometry,
|
|
148
|
+
several integrity checks are performed before continuing the pipeline.
|
|
149
|
+
- `InputData`: the entire pipeline can be driven from an `InputData` object
|
|
150
|
+
that includes coordinates for different contours.
|
|
151
|
+
- Enum for contour types: `Lumen`, `EEM`, `sidebranch`, `calcification`,
|
|
152
|
+
`wall`, `catheter`.
|
|
153
|
+
- `PyFrame` struct: each frame can hold multiple contour types which are
|
|
154
|
+
processed in parallel.
|
|
155
|
+
|
|
156
|
+
### Changed
|
|
157
|
+
- Full architecture refactor:
|
|
158
|
+
- Raw data is read and ordered into a `Geometry` struct.
|
|
159
|
+
- The `Geometry` struct undergoes integrity checks to ensure data quality.
|
|
160
|
+
- Alignment is performed first *within* geometries, then *between* geometries.
|
|
161
|
+
- Modules are loosely coupled to improve maintainability.
|
|
162
|
+
- Parallelization model updated: each geometry is processed in parallel;
|
|
163
|
+
within-geometry alignment runs first, then between-geometry alignment runs in parallel.
|
|
164
|
+
- Multiple bug fixes in the alignment algorithms.
|
|
165
|
+
|
|
166
|
+
### Fixed
|
|
167
|
+
- Various stability and indexing bugs discovered during alignment testing.
|
|
@@ -161,12 +161,6 @@ version = "1.23.1"
|
|
|
161
161
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
162
162
|
checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422"
|
|
163
163
|
|
|
164
|
-
[[package]]
|
|
165
|
-
name = "byteorder"
|
|
166
|
-
version = "1.5.0"
|
|
167
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
168
|
-
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
|
169
|
-
|
|
170
164
|
[[package]]
|
|
171
165
|
name = "byteorder-lite"
|
|
172
166
|
version = "0.1.0"
|
|
@@ -197,6 +191,19 @@ version = "1.1.0"
|
|
|
197
191
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
198
192
|
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
|
|
199
193
|
|
|
194
|
+
[[package]]
|
|
195
|
+
name = "console"
|
|
196
|
+
version = "0.15.11"
|
|
197
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
198
|
+
checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
|
|
199
|
+
dependencies = [
|
|
200
|
+
"encode_unicode",
|
|
201
|
+
"libc",
|
|
202
|
+
"once_cell",
|
|
203
|
+
"unicode-width",
|
|
204
|
+
"windows-sys",
|
|
205
|
+
]
|
|
206
|
+
|
|
200
207
|
[[package]]
|
|
201
208
|
name = "core2"
|
|
202
209
|
version = "0.4.0"
|
|
@@ -304,6 +311,12 @@ version = "1.15.0"
|
|
|
304
311
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
305
312
|
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
|
|
306
313
|
|
|
314
|
+
[[package]]
|
|
315
|
+
name = "encode_unicode"
|
|
316
|
+
version = "1.0.0"
|
|
317
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
318
|
+
checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
|
|
319
|
+
|
|
307
320
|
[[package]]
|
|
308
321
|
name = "equator"
|
|
309
322
|
version = "0.4.2"
|
|
@@ -390,15 +403,6 @@ dependencies = [
|
|
|
390
403
|
"miniz_oxide",
|
|
391
404
|
]
|
|
392
405
|
|
|
393
|
-
[[package]]
|
|
394
|
-
name = "float-cmp"
|
|
395
|
-
version = "0.10.0"
|
|
396
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
397
|
-
checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8"
|
|
398
|
-
dependencies = [
|
|
399
|
-
"num-traits",
|
|
400
|
-
]
|
|
401
|
-
|
|
402
406
|
[[package]]
|
|
403
407
|
name = "getrandom"
|
|
404
408
|
version = "0.3.4"
|
|
@@ -590,6 +594,19 @@ dependencies = [
|
|
|
590
594
|
"hashbrown",
|
|
591
595
|
]
|
|
592
596
|
|
|
597
|
+
[[package]]
|
|
598
|
+
name = "indicatif"
|
|
599
|
+
version = "0.17.11"
|
|
600
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
601
|
+
checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235"
|
|
602
|
+
dependencies = [
|
|
603
|
+
"console",
|
|
604
|
+
"number_prefix",
|
|
605
|
+
"portable-atomic",
|
|
606
|
+
"unicode-width",
|
|
607
|
+
"web-time",
|
|
608
|
+
]
|
|
609
|
+
|
|
593
610
|
[[package]]
|
|
594
611
|
name = "indoc"
|
|
595
612
|
version = "2.0.6"
|
|
@@ -632,6 +649,16 @@ dependencies = [
|
|
|
632
649
|
"libc",
|
|
633
650
|
]
|
|
634
651
|
|
|
652
|
+
[[package]]
|
|
653
|
+
name = "js-sys"
|
|
654
|
+
version = "0.3.82"
|
|
655
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
656
|
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
|
|
657
|
+
dependencies = [
|
|
658
|
+
"once_cell",
|
|
659
|
+
"wasm-bindgen",
|
|
660
|
+
]
|
|
661
|
+
|
|
635
662
|
[[package]]
|
|
636
663
|
name = "lebe"
|
|
637
664
|
version = "0.5.3"
|
|
@@ -726,18 +753,18 @@ dependencies = [
|
|
|
726
753
|
|
|
727
754
|
[[package]]
|
|
728
755
|
name = "multimodars"
|
|
729
|
-
version = "0.
|
|
756
|
+
version = "0.3.1"
|
|
730
757
|
dependencies = [
|
|
731
758
|
"anyhow",
|
|
732
759
|
"approx",
|
|
733
760
|
"crossbeam",
|
|
734
761
|
"csv",
|
|
735
762
|
"image",
|
|
763
|
+
"indicatif",
|
|
736
764
|
"nalgebra",
|
|
737
765
|
"pyo3",
|
|
738
766
|
"rayon",
|
|
739
767
|
"serde",
|
|
740
|
-
"stl_io",
|
|
741
768
|
"toml",
|
|
742
769
|
]
|
|
743
770
|
|
|
@@ -864,6 +891,12 @@ dependencies = [
|
|
|
864
891
|
"autocfg",
|
|
865
892
|
]
|
|
866
893
|
|
|
894
|
+
[[package]]
|
|
895
|
+
name = "number_prefix"
|
|
896
|
+
version = "0.4.0"
|
|
897
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
898
|
+
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
|
899
|
+
|
|
867
900
|
[[package]]
|
|
868
901
|
name = "once_cell"
|
|
869
902
|
version = "1.21.3"
|
|
@@ -1255,16 +1288,6 @@ version = "1.2.1"
|
|
|
1255
1288
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1256
1289
|
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
|
|
1257
1290
|
|
|
1258
|
-
[[package]]
|
|
1259
|
-
name = "stl_io"
|
|
1260
|
-
version = "0.10.0"
|
|
1261
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1262
|
-
checksum = "da63e75b86345156b191c021b3ce2a13b973941ecdb8c70d6f00cbbfe0076ed7"
|
|
1263
|
-
dependencies = [
|
|
1264
|
-
"byteorder",
|
|
1265
|
-
"float-cmp",
|
|
1266
|
-
]
|
|
1267
|
-
|
|
1268
1291
|
[[package]]
|
|
1269
1292
|
name = "syn"
|
|
1270
1293
|
version = "2.0.104"
|
|
@@ -1367,6 +1390,12 @@ version = "1.0.18"
|
|
|
1367
1390
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1368
1391
|
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
|
1369
1392
|
|
|
1393
|
+
[[package]]
|
|
1394
|
+
name = "unicode-width"
|
|
1395
|
+
version = "0.2.2"
|
|
1396
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1397
|
+
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
|
|
1398
|
+
|
|
1370
1399
|
[[package]]
|
|
1371
1400
|
name = "unindent"
|
|
1372
1401
|
version = "0.2.4"
|
|
@@ -1438,6 +1467,16 @@ dependencies = [
|
|
|
1438
1467
|
"unicode-ident",
|
|
1439
1468
|
]
|
|
1440
1469
|
|
|
1470
|
+
[[package]]
|
|
1471
|
+
name = "web-time"
|
|
1472
|
+
version = "1.1.0"
|
|
1473
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1474
|
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
|
|
1475
|
+
dependencies = [
|
|
1476
|
+
"js-sys",
|
|
1477
|
+
"wasm-bindgen",
|
|
1478
|
+
]
|
|
1479
|
+
|
|
1441
1480
|
[[package]]
|
|
1442
1481
|
name = "weezl"
|
|
1443
1482
|
version = "0.1.11"
|
|
@@ -1454,6 +1493,79 @@ dependencies = [
|
|
|
1454
1493
|
"safe_arch",
|
|
1455
1494
|
]
|
|
1456
1495
|
|
|
1496
|
+
[[package]]
|
|
1497
|
+
name = "windows-sys"
|
|
1498
|
+
version = "0.59.0"
|
|
1499
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1500
|
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
|
1501
|
+
dependencies = [
|
|
1502
|
+
"windows-targets",
|
|
1503
|
+
]
|
|
1504
|
+
|
|
1505
|
+
[[package]]
|
|
1506
|
+
name = "windows-targets"
|
|
1507
|
+
version = "0.52.6"
|
|
1508
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1509
|
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
|
1510
|
+
dependencies = [
|
|
1511
|
+
"windows_aarch64_gnullvm",
|
|
1512
|
+
"windows_aarch64_msvc",
|
|
1513
|
+
"windows_i686_gnu",
|
|
1514
|
+
"windows_i686_gnullvm",
|
|
1515
|
+
"windows_i686_msvc",
|
|
1516
|
+
"windows_x86_64_gnu",
|
|
1517
|
+
"windows_x86_64_gnullvm",
|
|
1518
|
+
"windows_x86_64_msvc",
|
|
1519
|
+
]
|
|
1520
|
+
|
|
1521
|
+
[[package]]
|
|
1522
|
+
name = "windows_aarch64_gnullvm"
|
|
1523
|
+
version = "0.52.6"
|
|
1524
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1525
|
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
|
1526
|
+
|
|
1527
|
+
[[package]]
|
|
1528
|
+
name = "windows_aarch64_msvc"
|
|
1529
|
+
version = "0.52.6"
|
|
1530
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1531
|
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
|
1532
|
+
|
|
1533
|
+
[[package]]
|
|
1534
|
+
name = "windows_i686_gnu"
|
|
1535
|
+
version = "0.52.6"
|
|
1536
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1537
|
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
|
1538
|
+
|
|
1539
|
+
[[package]]
|
|
1540
|
+
name = "windows_i686_gnullvm"
|
|
1541
|
+
version = "0.52.6"
|
|
1542
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1543
|
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
|
1544
|
+
|
|
1545
|
+
[[package]]
|
|
1546
|
+
name = "windows_i686_msvc"
|
|
1547
|
+
version = "0.52.6"
|
|
1548
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1549
|
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
|
1550
|
+
|
|
1551
|
+
[[package]]
|
|
1552
|
+
name = "windows_x86_64_gnu"
|
|
1553
|
+
version = "0.52.6"
|
|
1554
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1555
|
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
|
1556
|
+
|
|
1557
|
+
[[package]]
|
|
1558
|
+
name = "windows_x86_64_gnullvm"
|
|
1559
|
+
version = "0.52.6"
|
|
1560
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1561
|
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
|
1562
|
+
|
|
1563
|
+
[[package]]
|
|
1564
|
+
name = "windows_x86_64_msvc"
|
|
1565
|
+
version = "0.52.6"
|
|
1566
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1567
|
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|
1568
|
+
|
|
1457
1569
|
[[package]]
|
|
1458
1570
|
name = "winnow"
|
|
1459
1571
|
version = "0.7.13"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "multimodars"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.1"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
license = "MIT"
|
|
6
6
|
readme = "README.md"
|
|
@@ -20,4 +20,4 @@ rayon = "1.7.1"
|
|
|
20
20
|
crossbeam = "0.8.4"
|
|
21
21
|
anyhow = "1.0.100"
|
|
22
22
|
approx = "0.5"
|
|
23
|
-
|
|
23
|
+
indicatif = "0.17"
|