multimodars 0.7.2__tar.gz → 0.7.3__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.7.2 → multimodars-0.7.3}/CHANGELOG.md +46 -1
- {multimodars-0.7.2 → multimodars-0.7.3}/Cargo.lock +1 -1
- {multimodars-0.7.2 → multimodars-0.7.3}/Cargo.toml +1 -1
- {multimodars-0.7.2 → multimodars-0.7.3}/PKG-INFO +2 -2
- {multimodars-0.7.2 → multimodars-0.7.3}/README.md +1 -1
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/stitching/boundary.py +337 -168
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/stitching/core.py +148 -94
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/io/read_geometrical.py +9 -25
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/test_ccta.py +369 -29
- multimodars-0.7.3/uv.lock +4004 -0
- multimodars-0.7.2/.claude/debug_meshes/stitched_after_fix.stl +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.gitattributes +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.github/workflows/CI.yml +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.gitignore +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.pre-commit-config.yaml +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/.readthedocs.yaml +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/CITATION.cff +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/CONTRIBUTING.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/LICENSE +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/ROADMAP.MD +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/benchmarks/BENCHMARK_PLAN.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/benchmarks/benchmark_bruteforce_stepsize.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/benchmarks/benchmark_cpu_scaling.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/benchmarks/results/bruteforce_stepsize.png +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/benchmarks/results/cpu_scaling.png +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/branch_diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/branch_systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/calcium_diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/calcium_systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/diastolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/eem_diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/eem_systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/idealized_geometry/systolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/branch_diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/branch_systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/calcium_diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/calcium_systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/diastolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/eem_diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/eem_systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_full/systolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_rest/combined_sorted_manual.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_rest/diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_rest/diastolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_rest/systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_rest/systolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_stress/combined_sorted_manual.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_stress/diastolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_stress/diastolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_stress/systolic_contours.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/data/fixtures/ivus_stress/systolic_reference_points.csv +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/media/coronary_artery_disease.jpg +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/media/dynamic_lumen_changes.png +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/media/multimoda-rs.jpg +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/__init__.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/_converters.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/_processing.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/__init__.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/centerline_prep.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/debug_plots.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/discretization_map.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/labeling/__init__.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/labeling/core.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/labeling/helpers.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/mesh_regions.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/postprocessing.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/scaling.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/scaling_helpers.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/stitching/__init__.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/ccta/stitching/helpers.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/io/__init__.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/io/write_geometries.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/multimodars.pyi +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/multimodars/py.typed +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/REVIEWER1.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/REVIEWER2.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/bibliography.bib +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/figures/Figure1.jpg +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/figures/Figure2.jpg +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/figures/Figure3.png +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/figures/Figure4.jpg +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/paper/paper.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/pyproject.toml +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/adjust_mesh/label_coronary.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/adjust_mesh/scale_coronary.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/adjust_mesh.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/binding/ccta_py.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/binding.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/discretizing/plan.md +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/discretizing/projecting.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/discretizing/resampling.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/discretizing/vessel_tree.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta/discretizing.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/ccta.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/binding/align.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/binding/entry.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/binding/functions.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/binding.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/centerline_align/align.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/centerline_align/align_algorithms.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/centerline_align/preprocessing.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/centerline_align.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/io/build.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/io/input.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/io/integrity_check.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/io/output.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/io.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing/align_between.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing/align_within.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing/postprocessing.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing/preprocessing.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing/process_utils.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing/wall.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/processing.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/to_object/interpolation.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/to_object/process.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/to_object/texture.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/to_object/write_mtl.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/to_object.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/utils/general_utils.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/utils/test_utils.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular/utils.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/intravascular.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/lib.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_centerline.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_centerline_point.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_contour.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_contour_point.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_discretized_vessel_tree.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_frame.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_geometry.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_geometry_pair.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_input_data.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding/py_record.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/binding.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/centerline.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/centerline_point.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/contour.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/contour_point.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/discretized_tree.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/frame.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/geometry.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/geometry_pair.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native/record.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types/native.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/src/types.rs +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/conftest.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/test_converters.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/test_core.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/test_intravascular.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/test_wrappers.py +0 -0
- {multimodars-0.7.2 → multimodars-0.7.3}/tests/tests_todo.md +0 -0
|
@@ -3,6 +3,51 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
This project adheres to [Semantic Versioning](https://semver.org/).
|
|
5
5
|
|
|
6
|
+
## [0.7.3] - 2026-09-28
|
|
7
|
+
Smoother anomalous ostium. The two halves of the ostial ring now meet in smooth arcs instead of
|
|
8
|
+
sharp kinks, the ring's correction is faded into the aortic mesh all the way round, and the fillet
|
|
9
|
+
only rounds the aorta-facing half - towards the aorta rather than back into the vessel. On
|
|
10
|
+
`examples/data` the raw stitched mesh goes from 220 to 81 self-intersecting faces at the ostium
|
|
11
|
+
(235 to 47 after `fix_and_remesh_stitched_mesh`). Still to do: most of the rest sit at one tip of
|
|
12
|
+
the slit-like ostium, where the aortic wall touches the first millimetres of the intravascular tube.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- `stitch_ccta_to_intravascular` gained `seam_points_a` / `seam_points_b` (default 2 / 4). At both
|
|
16
|
+
seams where the ostium's aorta-facing Half A meets its coronary-facing Half B, that many Half A /
|
|
17
|
+
Half B points are replaced by a smooth arc that follows each half's own direction. Everything
|
|
18
|
+
outside those ranges stays exactly in place, so Half A's mid-section keeps its wall-thickness
|
|
19
|
+
offset from the intravascular ostium. The counts are points on the CCTA ring as cut from the
|
|
20
|
+
mesh, before it is densified; more than a half can give are reduced with a warning. Only used
|
|
21
|
+
with `prox_start_mode="highest_z"` and `proximal_is_ostium=True`.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- `fillet_bulge` now only rounds the ostium's Half A, fading out along the seam arcs; Half B and
|
|
25
|
+
the distal seam stay direct strips (0.7.2 rounded every strut of both seams). It needs
|
|
26
|
+
`prox_start_mode="highest_z"` with `proximal_is_ostium=True`, otherwise a warning is printed and
|
|
27
|
+
the direct strip is used.
|
|
28
|
+
- The two-half ostium's IV-plane clamp now runs before the seam arcs are built, so it cannot
|
|
29
|
+
flatten them back into a kink. What triggers it (ring and IV plane at least 45° apart) is
|
|
30
|
+
unchanged.
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- The fillet's arcs bulged away from the combined centroid of both rings, which on an anomalous
|
|
34
|
+
ostium sent many of them back into the vessel (47 of 100 on `examples/data`). They now bulge
|
|
35
|
+
away from the intravascular geometry, along the ostial frame's outward normal.
|
|
36
|
+
- Only Half A's displacement was faded into the surrounding aortic mesh, so the faces behind
|
|
37
|
+
Half B's moved rim folded through the intravascular tube. The whole ring's displacement is now
|
|
38
|
+
faded in.
|
|
39
|
+
- A zero-length strut no longer misaligns the fillet's intermediate rings.
|
|
40
|
+
|
|
41
|
+
### Internal
|
|
42
|
+
- `_redistribute_ring_evenly`'s arc-length sampling moved into `_even_arclength_samples`, so
|
|
43
|
+
per-point values (the Half A weights) resample with the points.
|
|
44
|
+
- `_condition_ostium_ring_two_half` and `_prepare_prox_dist_boundary_pts` also return the Half A
|
|
45
|
+
weights; `_carry_ring_weights` keeps them with their points through densification, start-point
|
|
46
|
+
rotation and winding fixes.
|
|
47
|
+
- `_bulge_arc_points` is replaced by the vectorised `_fillet_arc_layers`.
|
|
48
|
+
`_taper_ring_displacement` lost `protected_pts` / `seam_damping`, which fading the whole ring
|
|
49
|
+
no longer needs.
|
|
50
|
+
|
|
6
51
|
## [0.7.2] - 2026-09-19
|
|
7
52
|
More anatomical approach in creating the anomalous ostium. Takes the wall measurement to create
|
|
8
53
|
and offset. This ensures that the ostium is represented like the ostium from the intravascular
|
|
@@ -162,7 +207,7 @@ kind of a dome on top of this plane.
|
|
|
162
207
|
### Fixed
|
|
163
208
|
- `align_manual` no explicitly states `rotation_angle_deg` instead of `rotation_angle`
|
|
164
209
|
|
|
165
|
-
|
|
210
|
+
### Changed
|
|
166
211
|
- `align_manual`, `align_combined` and `align_three_points` all return their rotation angle now.
|
|
167
212
|
|
|
168
213
|
## [0.5.4] - 2026-08-03 Hotfix
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: multimodars
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -36,7 +36,7 @@ Project-URL: Issues, https://github.com/yungselm/multimoda-rs/issues
|
|
|
36
36
|
> Brace for breaking changes!
|
|
37
37
|
|
|
38
38
|
[](https://pypi.org/project/multimodars)
|
|
39
|
-
[](https://pepy.tech/project/multimodars)
|
|
39
|
+
<!-- [](https://pepy.tech/project/multimodars) -->
|
|
40
40
|
[](LICENSE)
|
|
41
41
|
[](https://multimoda-rs.readthedocs.io)
|
|
42
42
|
[](https://github.com/yungselm/multimoda-rs/actions/workflows/CI.yml)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
> Brace for breaking changes!
|
|
13
13
|
|
|
14
14
|
[](https://pypi.org/project/multimodars)
|
|
15
|
-
[](https://pepy.tech/project/multimodars)
|
|
15
|
+
<!-- [](https://pepy.tech/project/multimodars) -->
|
|
16
16
|
[](LICENSE)
|
|
17
17
|
[](https://multimoda-rs.readthedocs.io)
|
|
18
18
|
[](https://github.com/yungselm/multimoda-rs/actions/workflows/CI.yml)
|