midas-suite 0.2.0__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.
- midas_suite-0.2.0/PKG-INFO +194 -0
- midas_suite-0.2.0/README.md +142 -0
- midas_suite-0.2.0/midas_suite/__init__.py +64 -0
- midas_suite-0.2.0/midas_suite.egg-info/PKG-INFO +194 -0
- midas_suite-0.2.0/midas_suite.egg-info/SOURCES.txt +8 -0
- midas_suite-0.2.0/midas_suite.egg-info/dependency_links.txt +1 -0
- midas_suite-0.2.0/midas_suite.egg-info/requires.txt +40 -0
- midas_suite-0.2.0/midas_suite.egg-info/top_level.txt +1 -0
- midas_suite-0.2.0/pyproject.toml +83 -0
- midas_suite-0.2.0/setup.cfg +4 -0
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: midas-suite
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Meta-package: installs the MIDAS Python pipeline (FF/NF/PF HEDM, calibration, peakfit, integration, transforms, ODF, stress).
|
|
5
|
+
Author-email: Hemant Sharma <hsharma@anl.gov>
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/marinerhemant/MIDAS
|
|
8
|
+
Project-URL: Issues, https://github.com/marinerhemant/MIDAS/issues
|
|
9
|
+
Keywords: MIDAS,HEDM,3DXRD,powder diffraction,tomography,DCT,Laue,synchrotron,crystallography,PyTorch
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
15
|
+
Requires-Python: >=3.9
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: midas-stress>=0.6.0
|
|
18
|
+
Requires-Dist: midas-params>=0.3.0
|
|
19
|
+
Requires-Dist: midas-hkls>=0.3.0
|
|
20
|
+
Requires-Dist: midas-diffract>=0.1.0
|
|
21
|
+
Requires-Dist: midas-peakfit>=0.3.0
|
|
22
|
+
Requires-Dist: midas-integrate>=0.3.2
|
|
23
|
+
Requires-Dist: midas-calibrate>=0.2.1
|
|
24
|
+
Requires-Dist: midas-index>=0.3.0
|
|
25
|
+
Requires-Dist: midas-transforms>=0.2.0
|
|
26
|
+
Requires-Dist: midas-process-grains>=0.1.0
|
|
27
|
+
Requires-Dist: midas-fit-grain>=0.1.0
|
|
28
|
+
Requires-Dist: midas-nf-preprocess>=0.1.0
|
|
29
|
+
Requires-Dist: midas-nf-fitorientation>=0.3.0
|
|
30
|
+
Requires-Dist: midas-parsl-configs>=0.1.0
|
|
31
|
+
Requires-Dist: midas-ff-pipeline>=0.1.0
|
|
32
|
+
Requires-Dist: midas-nf-pipeline>=0.1.0
|
|
33
|
+
Provides-Extra: ff
|
|
34
|
+
Requires-Dist: midas-stress>=0.6.0; extra == "ff"
|
|
35
|
+
Requires-Dist: midas-params>=0.3.0; extra == "ff"
|
|
36
|
+
Requires-Dist: midas-ff-pipeline>=0.1.0; extra == "ff"
|
|
37
|
+
Requires-Dist: midas-calibrate>=0.2.1; extra == "ff"
|
|
38
|
+
Requires-Dist: midas-integrate>=0.3.2; extra == "ff"
|
|
39
|
+
Provides-Extra: nf
|
|
40
|
+
Requires-Dist: midas-stress>=0.6.0; extra == "nf"
|
|
41
|
+
Requires-Dist: midas-params>=0.3.0; extra == "nf"
|
|
42
|
+
Requires-Dist: midas-nf-pipeline>=0.1.0; extra == "nf"
|
|
43
|
+
Provides-Extra: calib
|
|
44
|
+
Requires-Dist: midas-hkls>=0.3.0; extra == "calib"
|
|
45
|
+
Requires-Dist: midas-integrate>=0.3.2; extra == "calib"
|
|
46
|
+
Requires-Dist: midas-peakfit>=0.3.0; extra == "calib"
|
|
47
|
+
Requires-Dist: midas-calibrate>=0.2.1; extra == "calib"
|
|
48
|
+
Provides-Extra: plots
|
|
49
|
+
Requires-Dist: matplotlib>=3.5; extra == "plots"
|
|
50
|
+
Provides-Extra: dev
|
|
51
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
52
|
+
|
|
53
|
+
# midas-suite
|
|
54
|
+
|
|
55
|
+
A meta-package that installs the MIDAS Python pipeline in a single command.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install midas-suite
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This pulls in the currently published MIDAS sub-packages — the FF/NF
|
|
62
|
+
HEDM analysis chain, calibration, peak fitting, radial integration,
|
|
63
|
+
forward model, indexing, transforms, grain processing, and stress/strain
|
|
64
|
+
analysis.
|
|
65
|
+
|
|
66
|
+
`midas-suite` itself contains no scientific code. It's a thin
|
|
67
|
+
[meta-package](https://packaging.python.org/en/latest/glossary/#term-Distribution-Package)
|
|
68
|
+
whose only job is to declare the sub-packages as dependencies so users
|
|
69
|
+
don't have to install them one at a time.
|
|
70
|
+
|
|
71
|
+
## What you get
|
|
72
|
+
|
|
73
|
+
`pip install midas-suite` installs **16 sub-packages** (as of v0.1.0):
|
|
74
|
+
|
|
75
|
+
**Top-level orchestrators (the entry points most users want):**
|
|
76
|
+
|
|
77
|
+
| Sub-package | Role |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `midas-ff-pipeline` | End-to-end pure-Python FF-HEDM workflow orchestrator (1-N detectors). Drives the full FF pipeline from raw data to grains. |
|
|
80
|
+
| `midas-nf-pipeline` | Pure-Python NF-HEDM pipeline orchestrator (single + multi-resolution, multi-layer). Drop-in for `nf_MIDAS.py` / `nf_MIDAS_Multiple_Resolutions.py`. |
|
|
81
|
+
| `midas-parsl-configs` | Bundled + user-extensible Parsl configs for running MIDAS pipelines on laptops, workstations, clusters. |
|
|
82
|
+
|
|
83
|
+
**FF-HEDM building blocks:**
|
|
84
|
+
|
|
85
|
+
| Sub-package | Role |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `midas-peakfit` | Differentiable PyTorch peak fitting for FF-HEDM Zarr |
|
|
88
|
+
| `midas-transforms` | FF-HEDM peak transforms (merge / radius / fit-setup / save-bin) |
|
|
89
|
+
| `midas-index` | Pure-Python/PyTorch FF-HEDM indexer (drop-in for `IndexerOMP`) |
|
|
90
|
+
| `midas-fit-grain` | Single/multi-grain refiner |
|
|
91
|
+
| `midas-process-grains` | FF-HEDM grain-determination + strain pipeline |
|
|
92
|
+
|
|
93
|
+
**NF-HEDM building blocks:**
|
|
94
|
+
|
|
95
|
+
| Sub-package | Role |
|
|
96
|
+
|---|---|
|
|
97
|
+
| `midas-nf-preprocess` | NF-HEDM preprocessing (hex grid, tomo filter, spot prediction) |
|
|
98
|
+
| `midas-nf-fitorientation` | NF-HEDM orientation/calibration fitter |
|
|
99
|
+
|
|
100
|
+
**Shared foundations:**
|
|
101
|
+
|
|
102
|
+
| Sub-package | Role |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `midas-stress` | Crystallographic stress/strain analysis (Voigt-Mandel, Cij inversion, slip/Schmid/Taylor) |
|
|
105
|
+
| `midas-params` | Parameter-file registry, validator, wizard for FF/NF/PF/RI |
|
|
106
|
+
| `midas-hkls` | Pure-Python crystallography & HKL list generator (sginfo-equivalent) |
|
|
107
|
+
| `midas-diffract` | End-to-end differentiable HEDM forward model (FF + NF + pf-HEDM) |
|
|
108
|
+
| `midas-integrate` | Pure-Python radial integration (`DetectorMapper` + CSR + streaming server) |
|
|
109
|
+
| `midas-calibrate` | Native Python/Torch detector geometry calibration (LM-based) |
|
|
110
|
+
|
|
111
|
+
You then `import midas_stress`, `import midas_diffract`, etc. directly —
|
|
112
|
+
each sub-package retains its own API. `midas-suite` does not re-export
|
|
113
|
+
them.
|
|
114
|
+
|
|
115
|
+
To check what was installed:
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
import midas_suite
|
|
119
|
+
print(midas_suite.installed())
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Modality bundles
|
|
123
|
+
|
|
124
|
+
If you don't want everything, the optional extras let you pick a workflow:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
pip install "midas-suite[ff]" # FF-HEDM stack
|
|
128
|
+
pip install "midas-suite[nf]" # NF-HEDM stack
|
|
129
|
+
pip install "midas-suite[calib]" # calibration + integration only
|
|
130
|
+
pip install "midas-suite[ff,plots]"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
| Extra | What it pulls |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `ff` | `midas-ff-pipeline` (which transitively pulls hkls, peakfit, transforms, index, fit-grain, process-grains, diffract, parsl-configs) + stress, params, calibrate, integrate |
|
|
136
|
+
| `nf` | `midas-nf-pipeline` (which transitively pulls hkls, stress, nf-preprocess, nf-fitorientation) + params |
|
|
137
|
+
| `calib` | hkls, integrate, peakfit, calibrate |
|
|
138
|
+
| `plots` | matplotlib (for sub-package plotting helpers) |
|
|
139
|
+
|
|
140
|
+
## What `pip install midas-suite` does NOT include
|
|
141
|
+
|
|
142
|
+
Be aware:
|
|
143
|
+
|
|
144
|
+
- **The MIDAS C executables** (`IndexerOMP`, `ProcessGrains`, `MakeDiffrSpots`, …)
|
|
145
|
+
still need to be built from source via `cmake --build .` from the MIDAS
|
|
146
|
+
monorepo. The pure-Python pipeline (calibration → integration → indexing
|
|
147
|
+
→ grain processing) is now end-to-end in PyTorch and does not require
|
|
148
|
+
them.
|
|
149
|
+
- **The PyQt FF viewer GUI** needs `PyQt5` or `PySide6` installed
|
|
150
|
+
separately. Not declared here because it's optional and platform-sensitive.
|
|
151
|
+
- **Optional crystallography backends** for `midas-hkls`: install
|
|
152
|
+
`gemmi` or `pycifrw` separately for CIF I/O via `pip install
|
|
153
|
+
midas-hkls[cif]`.
|
|
154
|
+
- **GPU acceleration** is a runtime backend selected by PyTorch device
|
|
155
|
+
string. CUDA/MPS just work if your `torch` install supports them; no
|
|
156
|
+
separate `*-gpu` package needed.
|
|
157
|
+
- **Coming in v0.2.0** — `midas-grain-odf` (per-grain ODF inversion) and
|
|
158
|
+
`midas-pf-odf` (joint pf-HEDM peak-shape inversion) are not yet on
|
|
159
|
+
PyPI. They fold in when `midas-suite` v0.2.0 ships, bringing the
|
|
160
|
+
bundled count to 18 sub-packages.
|
|
161
|
+
|
|
162
|
+
## Cross-platform
|
|
163
|
+
|
|
164
|
+
All MIDAS Python sub-packages are pure Python or PyTorch and ship as
|
|
165
|
+
`py3-none-any` wheels. Tested install paths: Linux, macOS, Windows.
|
|
166
|
+
See [`packages/RELEASE_READINESS.md`](../RELEASE_READINESS.md) for the
|
|
167
|
+
detailed cross-platform readiness matrix.
|
|
168
|
+
|
|
169
|
+
## Versioning
|
|
170
|
+
|
|
171
|
+
`midas-suite` versions are independent of the sub-package versions.
|
|
172
|
+
The rule:
|
|
173
|
+
|
|
174
|
+
| Change | Bump |
|
|
175
|
+
|---|---|
|
|
176
|
+
| Floors tightened (no new sub-package added) | patch (`0.1.0` → `0.1.1`) |
|
|
177
|
+
| New sub-package added to the dep list | minor (`0.1.0` → `0.2.0`) |
|
|
178
|
+
| Backwards-incompatible reorganisation of bundles | major (`0.x.y` → `1.0.0`) |
|
|
179
|
+
|
|
180
|
+
Floors are pinned with `>=`, never `==`, so a sub-package patch release
|
|
181
|
+
doesn't break `midas-suite`.
|
|
182
|
+
|
|
183
|
+
## Releasing a new version
|
|
184
|
+
|
|
185
|
+
See [`RELEASING.md`](RELEASING.md) for the full release flow. TL;DR:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
cd packages/midas_suite
|
|
189
|
+
./release.sh 0.2.0 --publish
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
BSD-3-Clause, same as the sub-packages.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# midas-suite
|
|
2
|
+
|
|
3
|
+
A meta-package that installs the MIDAS Python pipeline in a single command.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pip install midas-suite
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
This pulls in the currently published MIDAS sub-packages — the FF/NF
|
|
10
|
+
HEDM analysis chain, calibration, peak fitting, radial integration,
|
|
11
|
+
forward model, indexing, transforms, grain processing, and stress/strain
|
|
12
|
+
analysis.
|
|
13
|
+
|
|
14
|
+
`midas-suite` itself contains no scientific code. It's a thin
|
|
15
|
+
[meta-package](https://packaging.python.org/en/latest/glossary/#term-Distribution-Package)
|
|
16
|
+
whose only job is to declare the sub-packages as dependencies so users
|
|
17
|
+
don't have to install them one at a time.
|
|
18
|
+
|
|
19
|
+
## What you get
|
|
20
|
+
|
|
21
|
+
`pip install midas-suite` installs **16 sub-packages** (as of v0.1.0):
|
|
22
|
+
|
|
23
|
+
**Top-level orchestrators (the entry points most users want):**
|
|
24
|
+
|
|
25
|
+
| Sub-package | Role |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `midas-ff-pipeline` | End-to-end pure-Python FF-HEDM workflow orchestrator (1-N detectors). Drives the full FF pipeline from raw data to grains. |
|
|
28
|
+
| `midas-nf-pipeline` | Pure-Python NF-HEDM pipeline orchestrator (single + multi-resolution, multi-layer). Drop-in for `nf_MIDAS.py` / `nf_MIDAS_Multiple_Resolutions.py`. |
|
|
29
|
+
| `midas-parsl-configs` | Bundled + user-extensible Parsl configs for running MIDAS pipelines on laptops, workstations, clusters. |
|
|
30
|
+
|
|
31
|
+
**FF-HEDM building blocks:**
|
|
32
|
+
|
|
33
|
+
| Sub-package | Role |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `midas-peakfit` | Differentiable PyTorch peak fitting for FF-HEDM Zarr |
|
|
36
|
+
| `midas-transforms` | FF-HEDM peak transforms (merge / radius / fit-setup / save-bin) |
|
|
37
|
+
| `midas-index` | Pure-Python/PyTorch FF-HEDM indexer (drop-in for `IndexerOMP`) |
|
|
38
|
+
| `midas-fit-grain` | Single/multi-grain refiner |
|
|
39
|
+
| `midas-process-grains` | FF-HEDM grain-determination + strain pipeline |
|
|
40
|
+
|
|
41
|
+
**NF-HEDM building blocks:**
|
|
42
|
+
|
|
43
|
+
| Sub-package | Role |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `midas-nf-preprocess` | NF-HEDM preprocessing (hex grid, tomo filter, spot prediction) |
|
|
46
|
+
| `midas-nf-fitorientation` | NF-HEDM orientation/calibration fitter |
|
|
47
|
+
|
|
48
|
+
**Shared foundations:**
|
|
49
|
+
|
|
50
|
+
| Sub-package | Role |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `midas-stress` | Crystallographic stress/strain analysis (Voigt-Mandel, Cij inversion, slip/Schmid/Taylor) |
|
|
53
|
+
| `midas-params` | Parameter-file registry, validator, wizard for FF/NF/PF/RI |
|
|
54
|
+
| `midas-hkls` | Pure-Python crystallography & HKL list generator (sginfo-equivalent) |
|
|
55
|
+
| `midas-diffract` | End-to-end differentiable HEDM forward model (FF + NF + pf-HEDM) |
|
|
56
|
+
| `midas-integrate` | Pure-Python radial integration (`DetectorMapper` + CSR + streaming server) |
|
|
57
|
+
| `midas-calibrate` | Native Python/Torch detector geometry calibration (LM-based) |
|
|
58
|
+
|
|
59
|
+
You then `import midas_stress`, `import midas_diffract`, etc. directly —
|
|
60
|
+
each sub-package retains its own API. `midas-suite` does not re-export
|
|
61
|
+
them.
|
|
62
|
+
|
|
63
|
+
To check what was installed:
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
import midas_suite
|
|
67
|
+
print(midas_suite.installed())
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Modality bundles
|
|
71
|
+
|
|
72
|
+
If you don't want everything, the optional extras let you pick a workflow:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pip install "midas-suite[ff]" # FF-HEDM stack
|
|
76
|
+
pip install "midas-suite[nf]" # NF-HEDM stack
|
|
77
|
+
pip install "midas-suite[calib]" # calibration + integration only
|
|
78
|
+
pip install "midas-suite[ff,plots]"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
| Extra | What it pulls |
|
|
82
|
+
|---|---|
|
|
83
|
+
| `ff` | `midas-ff-pipeline` (which transitively pulls hkls, peakfit, transforms, index, fit-grain, process-grains, diffract, parsl-configs) + stress, params, calibrate, integrate |
|
|
84
|
+
| `nf` | `midas-nf-pipeline` (which transitively pulls hkls, stress, nf-preprocess, nf-fitorientation) + params |
|
|
85
|
+
| `calib` | hkls, integrate, peakfit, calibrate |
|
|
86
|
+
| `plots` | matplotlib (for sub-package plotting helpers) |
|
|
87
|
+
|
|
88
|
+
## What `pip install midas-suite` does NOT include
|
|
89
|
+
|
|
90
|
+
Be aware:
|
|
91
|
+
|
|
92
|
+
- **The MIDAS C executables** (`IndexerOMP`, `ProcessGrains`, `MakeDiffrSpots`, …)
|
|
93
|
+
still need to be built from source via `cmake --build .` from the MIDAS
|
|
94
|
+
monorepo. The pure-Python pipeline (calibration → integration → indexing
|
|
95
|
+
→ grain processing) is now end-to-end in PyTorch and does not require
|
|
96
|
+
them.
|
|
97
|
+
- **The PyQt FF viewer GUI** needs `PyQt5` or `PySide6` installed
|
|
98
|
+
separately. Not declared here because it's optional and platform-sensitive.
|
|
99
|
+
- **Optional crystallography backends** for `midas-hkls`: install
|
|
100
|
+
`gemmi` or `pycifrw` separately for CIF I/O via `pip install
|
|
101
|
+
midas-hkls[cif]`.
|
|
102
|
+
- **GPU acceleration** is a runtime backend selected by PyTorch device
|
|
103
|
+
string. CUDA/MPS just work if your `torch` install supports them; no
|
|
104
|
+
separate `*-gpu` package needed.
|
|
105
|
+
- **Coming in v0.2.0** — `midas-grain-odf` (per-grain ODF inversion) and
|
|
106
|
+
`midas-pf-odf` (joint pf-HEDM peak-shape inversion) are not yet on
|
|
107
|
+
PyPI. They fold in when `midas-suite` v0.2.0 ships, bringing the
|
|
108
|
+
bundled count to 18 sub-packages.
|
|
109
|
+
|
|
110
|
+
## Cross-platform
|
|
111
|
+
|
|
112
|
+
All MIDAS Python sub-packages are pure Python or PyTorch and ship as
|
|
113
|
+
`py3-none-any` wheels. Tested install paths: Linux, macOS, Windows.
|
|
114
|
+
See [`packages/RELEASE_READINESS.md`](../RELEASE_READINESS.md) for the
|
|
115
|
+
detailed cross-platform readiness matrix.
|
|
116
|
+
|
|
117
|
+
## Versioning
|
|
118
|
+
|
|
119
|
+
`midas-suite` versions are independent of the sub-package versions.
|
|
120
|
+
The rule:
|
|
121
|
+
|
|
122
|
+
| Change | Bump |
|
|
123
|
+
|---|---|
|
|
124
|
+
| Floors tightened (no new sub-package added) | patch (`0.1.0` → `0.1.1`) |
|
|
125
|
+
| New sub-package added to the dep list | minor (`0.1.0` → `0.2.0`) |
|
|
126
|
+
| Backwards-incompatible reorganisation of bundles | major (`0.x.y` → `1.0.0`) |
|
|
127
|
+
|
|
128
|
+
Floors are pinned with `>=`, never `==`, so a sub-package patch release
|
|
129
|
+
doesn't break `midas-suite`.
|
|
130
|
+
|
|
131
|
+
## Releasing a new version
|
|
132
|
+
|
|
133
|
+
See [`RELEASING.md`](RELEASING.md) for the full release flow. TL;DR:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
cd packages/midas_suite
|
|
137
|
+
./release.sh 0.2.0 --publish
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## License
|
|
141
|
+
|
|
142
|
+
BSD-3-Clause, same as the sub-packages.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""midas-suite: meta-package that installs the MIDAS Python pipeline.
|
|
2
|
+
|
|
3
|
+
This package contains no scientific code of its own. It declares the
|
|
4
|
+
MIDAS sub-packages as dependencies so that ``pip install midas-suite``
|
|
5
|
+
gives a user the full pipeline in one step.
|
|
6
|
+
|
|
7
|
+
The actual modules live in their own packages and are imported under
|
|
8
|
+
their own names (``midas_stress``, ``midas_diffract``, ``midas_index``,
|
|
9
|
+
etc.) — this package does not re-export them.
|
|
10
|
+
|
|
11
|
+
To inspect what was installed:
|
|
12
|
+
|
|
13
|
+
>>> import midas_suite
|
|
14
|
+
>>> print(midas_suite.installed())
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
__version__ = "0.2.0"
|
|
19
|
+
|
|
20
|
+
# The sub-packages this meta-package pulls in (in publish-order).
|
|
21
|
+
# Kept in sync with pyproject.toml's ``dependencies`` list.
|
|
22
|
+
SUBPACKAGES = (
|
|
23
|
+
# leaves
|
|
24
|
+
"midas_stress",
|
|
25
|
+
"midas_params",
|
|
26
|
+
"midas_hkls",
|
|
27
|
+
"midas_diffract",
|
|
28
|
+
"midas_peakfit",
|
|
29
|
+
"midas_integrate",
|
|
30
|
+
"midas_calibrate",
|
|
31
|
+
"midas_index",
|
|
32
|
+
"midas_transforms",
|
|
33
|
+
"midas_process_grains",
|
|
34
|
+
"midas_fit_grain",
|
|
35
|
+
"midas_nf_preprocess",
|
|
36
|
+
"midas_nf_fitorientation",
|
|
37
|
+
# parsl + pipeline orchestrators
|
|
38
|
+
"midas_parsl_configs",
|
|
39
|
+
"midas_ff_pipeline",
|
|
40
|
+
"midas_nf_pipeline",
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def installed():
|
|
45
|
+
"""Return a dict {sub_package_name: version_or_None} for every
|
|
46
|
+
MIDAS sub-package this meta-package declares as a dependency.
|
|
47
|
+
|
|
48
|
+
Useful for ``midas_suite.installed()`` from a notebook or REPL to
|
|
49
|
+
confirm what got pulled in by ``pip install midas-suite``.
|
|
50
|
+
"""
|
|
51
|
+
import importlib
|
|
52
|
+
|
|
53
|
+
out = {}
|
|
54
|
+
for name in SUBPACKAGES:
|
|
55
|
+
try:
|
|
56
|
+
mod = importlib.import_module(name)
|
|
57
|
+
except ImportError:
|
|
58
|
+
out[name] = None
|
|
59
|
+
continue
|
|
60
|
+
out[name] = getattr(mod, "__version__", "unknown")
|
|
61
|
+
return out
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
__all__ = ["__version__", "SUBPACKAGES", "installed"]
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: midas-suite
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Meta-package: installs the MIDAS Python pipeline (FF/NF/PF HEDM, calibration, peakfit, integration, transforms, ODF, stress).
|
|
5
|
+
Author-email: Hemant Sharma <hsharma@anl.gov>
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/marinerhemant/MIDAS
|
|
8
|
+
Project-URL: Issues, https://github.com/marinerhemant/MIDAS/issues
|
|
9
|
+
Keywords: MIDAS,HEDM,3DXRD,powder diffraction,tomography,DCT,Laue,synchrotron,crystallography,PyTorch
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Science/Research
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
15
|
+
Requires-Python: >=3.9
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: midas-stress>=0.6.0
|
|
18
|
+
Requires-Dist: midas-params>=0.3.0
|
|
19
|
+
Requires-Dist: midas-hkls>=0.3.0
|
|
20
|
+
Requires-Dist: midas-diffract>=0.1.0
|
|
21
|
+
Requires-Dist: midas-peakfit>=0.3.0
|
|
22
|
+
Requires-Dist: midas-integrate>=0.3.2
|
|
23
|
+
Requires-Dist: midas-calibrate>=0.2.1
|
|
24
|
+
Requires-Dist: midas-index>=0.3.0
|
|
25
|
+
Requires-Dist: midas-transforms>=0.2.0
|
|
26
|
+
Requires-Dist: midas-process-grains>=0.1.0
|
|
27
|
+
Requires-Dist: midas-fit-grain>=0.1.0
|
|
28
|
+
Requires-Dist: midas-nf-preprocess>=0.1.0
|
|
29
|
+
Requires-Dist: midas-nf-fitorientation>=0.3.0
|
|
30
|
+
Requires-Dist: midas-parsl-configs>=0.1.0
|
|
31
|
+
Requires-Dist: midas-ff-pipeline>=0.1.0
|
|
32
|
+
Requires-Dist: midas-nf-pipeline>=0.1.0
|
|
33
|
+
Provides-Extra: ff
|
|
34
|
+
Requires-Dist: midas-stress>=0.6.0; extra == "ff"
|
|
35
|
+
Requires-Dist: midas-params>=0.3.0; extra == "ff"
|
|
36
|
+
Requires-Dist: midas-ff-pipeline>=0.1.0; extra == "ff"
|
|
37
|
+
Requires-Dist: midas-calibrate>=0.2.1; extra == "ff"
|
|
38
|
+
Requires-Dist: midas-integrate>=0.3.2; extra == "ff"
|
|
39
|
+
Provides-Extra: nf
|
|
40
|
+
Requires-Dist: midas-stress>=0.6.0; extra == "nf"
|
|
41
|
+
Requires-Dist: midas-params>=0.3.0; extra == "nf"
|
|
42
|
+
Requires-Dist: midas-nf-pipeline>=0.1.0; extra == "nf"
|
|
43
|
+
Provides-Extra: calib
|
|
44
|
+
Requires-Dist: midas-hkls>=0.3.0; extra == "calib"
|
|
45
|
+
Requires-Dist: midas-integrate>=0.3.2; extra == "calib"
|
|
46
|
+
Requires-Dist: midas-peakfit>=0.3.0; extra == "calib"
|
|
47
|
+
Requires-Dist: midas-calibrate>=0.2.1; extra == "calib"
|
|
48
|
+
Provides-Extra: plots
|
|
49
|
+
Requires-Dist: matplotlib>=3.5; extra == "plots"
|
|
50
|
+
Provides-Extra: dev
|
|
51
|
+
Requires-Dist: pytest>=7; extra == "dev"
|
|
52
|
+
|
|
53
|
+
# midas-suite
|
|
54
|
+
|
|
55
|
+
A meta-package that installs the MIDAS Python pipeline in a single command.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
pip install midas-suite
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This pulls in the currently published MIDAS sub-packages — the FF/NF
|
|
62
|
+
HEDM analysis chain, calibration, peak fitting, radial integration,
|
|
63
|
+
forward model, indexing, transforms, grain processing, and stress/strain
|
|
64
|
+
analysis.
|
|
65
|
+
|
|
66
|
+
`midas-suite` itself contains no scientific code. It's a thin
|
|
67
|
+
[meta-package](https://packaging.python.org/en/latest/glossary/#term-Distribution-Package)
|
|
68
|
+
whose only job is to declare the sub-packages as dependencies so users
|
|
69
|
+
don't have to install them one at a time.
|
|
70
|
+
|
|
71
|
+
## What you get
|
|
72
|
+
|
|
73
|
+
`pip install midas-suite` installs **16 sub-packages** (as of v0.1.0):
|
|
74
|
+
|
|
75
|
+
**Top-level orchestrators (the entry points most users want):**
|
|
76
|
+
|
|
77
|
+
| Sub-package | Role |
|
|
78
|
+
|---|---|
|
|
79
|
+
| `midas-ff-pipeline` | End-to-end pure-Python FF-HEDM workflow orchestrator (1-N detectors). Drives the full FF pipeline from raw data to grains. |
|
|
80
|
+
| `midas-nf-pipeline` | Pure-Python NF-HEDM pipeline orchestrator (single + multi-resolution, multi-layer). Drop-in for `nf_MIDAS.py` / `nf_MIDAS_Multiple_Resolutions.py`. |
|
|
81
|
+
| `midas-parsl-configs` | Bundled + user-extensible Parsl configs for running MIDAS pipelines on laptops, workstations, clusters. |
|
|
82
|
+
|
|
83
|
+
**FF-HEDM building blocks:**
|
|
84
|
+
|
|
85
|
+
| Sub-package | Role |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `midas-peakfit` | Differentiable PyTorch peak fitting for FF-HEDM Zarr |
|
|
88
|
+
| `midas-transforms` | FF-HEDM peak transforms (merge / radius / fit-setup / save-bin) |
|
|
89
|
+
| `midas-index` | Pure-Python/PyTorch FF-HEDM indexer (drop-in for `IndexerOMP`) |
|
|
90
|
+
| `midas-fit-grain` | Single/multi-grain refiner |
|
|
91
|
+
| `midas-process-grains` | FF-HEDM grain-determination + strain pipeline |
|
|
92
|
+
|
|
93
|
+
**NF-HEDM building blocks:**
|
|
94
|
+
|
|
95
|
+
| Sub-package | Role |
|
|
96
|
+
|---|---|
|
|
97
|
+
| `midas-nf-preprocess` | NF-HEDM preprocessing (hex grid, tomo filter, spot prediction) |
|
|
98
|
+
| `midas-nf-fitorientation` | NF-HEDM orientation/calibration fitter |
|
|
99
|
+
|
|
100
|
+
**Shared foundations:**
|
|
101
|
+
|
|
102
|
+
| Sub-package | Role |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `midas-stress` | Crystallographic stress/strain analysis (Voigt-Mandel, Cij inversion, slip/Schmid/Taylor) |
|
|
105
|
+
| `midas-params` | Parameter-file registry, validator, wizard for FF/NF/PF/RI |
|
|
106
|
+
| `midas-hkls` | Pure-Python crystallography & HKL list generator (sginfo-equivalent) |
|
|
107
|
+
| `midas-diffract` | End-to-end differentiable HEDM forward model (FF + NF + pf-HEDM) |
|
|
108
|
+
| `midas-integrate` | Pure-Python radial integration (`DetectorMapper` + CSR + streaming server) |
|
|
109
|
+
| `midas-calibrate` | Native Python/Torch detector geometry calibration (LM-based) |
|
|
110
|
+
|
|
111
|
+
You then `import midas_stress`, `import midas_diffract`, etc. directly —
|
|
112
|
+
each sub-package retains its own API. `midas-suite` does not re-export
|
|
113
|
+
them.
|
|
114
|
+
|
|
115
|
+
To check what was installed:
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
import midas_suite
|
|
119
|
+
print(midas_suite.installed())
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Modality bundles
|
|
123
|
+
|
|
124
|
+
If you don't want everything, the optional extras let you pick a workflow:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
pip install "midas-suite[ff]" # FF-HEDM stack
|
|
128
|
+
pip install "midas-suite[nf]" # NF-HEDM stack
|
|
129
|
+
pip install "midas-suite[calib]" # calibration + integration only
|
|
130
|
+
pip install "midas-suite[ff,plots]"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
| Extra | What it pulls |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `ff` | `midas-ff-pipeline` (which transitively pulls hkls, peakfit, transforms, index, fit-grain, process-grains, diffract, parsl-configs) + stress, params, calibrate, integrate |
|
|
136
|
+
| `nf` | `midas-nf-pipeline` (which transitively pulls hkls, stress, nf-preprocess, nf-fitorientation) + params |
|
|
137
|
+
| `calib` | hkls, integrate, peakfit, calibrate |
|
|
138
|
+
| `plots` | matplotlib (for sub-package plotting helpers) |
|
|
139
|
+
|
|
140
|
+
## What `pip install midas-suite` does NOT include
|
|
141
|
+
|
|
142
|
+
Be aware:
|
|
143
|
+
|
|
144
|
+
- **The MIDAS C executables** (`IndexerOMP`, `ProcessGrains`, `MakeDiffrSpots`, …)
|
|
145
|
+
still need to be built from source via `cmake --build .` from the MIDAS
|
|
146
|
+
monorepo. The pure-Python pipeline (calibration → integration → indexing
|
|
147
|
+
→ grain processing) is now end-to-end in PyTorch and does not require
|
|
148
|
+
them.
|
|
149
|
+
- **The PyQt FF viewer GUI** needs `PyQt5` or `PySide6` installed
|
|
150
|
+
separately. Not declared here because it's optional and platform-sensitive.
|
|
151
|
+
- **Optional crystallography backends** for `midas-hkls`: install
|
|
152
|
+
`gemmi` or `pycifrw` separately for CIF I/O via `pip install
|
|
153
|
+
midas-hkls[cif]`.
|
|
154
|
+
- **GPU acceleration** is a runtime backend selected by PyTorch device
|
|
155
|
+
string. CUDA/MPS just work if your `torch` install supports them; no
|
|
156
|
+
separate `*-gpu` package needed.
|
|
157
|
+
- **Coming in v0.2.0** — `midas-grain-odf` (per-grain ODF inversion) and
|
|
158
|
+
`midas-pf-odf` (joint pf-HEDM peak-shape inversion) are not yet on
|
|
159
|
+
PyPI. They fold in when `midas-suite` v0.2.0 ships, bringing the
|
|
160
|
+
bundled count to 18 sub-packages.
|
|
161
|
+
|
|
162
|
+
## Cross-platform
|
|
163
|
+
|
|
164
|
+
All MIDAS Python sub-packages are pure Python or PyTorch and ship as
|
|
165
|
+
`py3-none-any` wheels. Tested install paths: Linux, macOS, Windows.
|
|
166
|
+
See [`packages/RELEASE_READINESS.md`](../RELEASE_READINESS.md) for the
|
|
167
|
+
detailed cross-platform readiness matrix.
|
|
168
|
+
|
|
169
|
+
## Versioning
|
|
170
|
+
|
|
171
|
+
`midas-suite` versions are independent of the sub-package versions.
|
|
172
|
+
The rule:
|
|
173
|
+
|
|
174
|
+
| Change | Bump |
|
|
175
|
+
|---|---|
|
|
176
|
+
| Floors tightened (no new sub-package added) | patch (`0.1.0` → `0.1.1`) |
|
|
177
|
+
| New sub-package added to the dep list | minor (`0.1.0` → `0.2.0`) |
|
|
178
|
+
| Backwards-incompatible reorganisation of bundles | major (`0.x.y` → `1.0.0`) |
|
|
179
|
+
|
|
180
|
+
Floors are pinned with `>=`, never `==`, so a sub-package patch release
|
|
181
|
+
doesn't break `midas-suite`.
|
|
182
|
+
|
|
183
|
+
## Releasing a new version
|
|
184
|
+
|
|
185
|
+
See [`RELEASING.md`](RELEASING.md) for the full release flow. TL;DR:
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
cd packages/midas_suite
|
|
189
|
+
./release.sh 0.2.0 --publish
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
BSD-3-Clause, same as the sub-packages.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
midas-stress>=0.6.0
|
|
2
|
+
midas-params>=0.3.0
|
|
3
|
+
midas-hkls>=0.3.0
|
|
4
|
+
midas-diffract>=0.1.0
|
|
5
|
+
midas-peakfit>=0.3.0
|
|
6
|
+
midas-integrate>=0.3.2
|
|
7
|
+
midas-calibrate>=0.2.1
|
|
8
|
+
midas-index>=0.3.0
|
|
9
|
+
midas-transforms>=0.2.0
|
|
10
|
+
midas-process-grains>=0.1.0
|
|
11
|
+
midas-fit-grain>=0.1.0
|
|
12
|
+
midas-nf-preprocess>=0.1.0
|
|
13
|
+
midas-nf-fitorientation>=0.3.0
|
|
14
|
+
midas-parsl-configs>=0.1.0
|
|
15
|
+
midas-ff-pipeline>=0.1.0
|
|
16
|
+
midas-nf-pipeline>=0.1.0
|
|
17
|
+
|
|
18
|
+
[calib]
|
|
19
|
+
midas-hkls>=0.3.0
|
|
20
|
+
midas-integrate>=0.3.2
|
|
21
|
+
midas-peakfit>=0.3.0
|
|
22
|
+
midas-calibrate>=0.2.1
|
|
23
|
+
|
|
24
|
+
[dev]
|
|
25
|
+
pytest>=7
|
|
26
|
+
|
|
27
|
+
[ff]
|
|
28
|
+
midas-stress>=0.6.0
|
|
29
|
+
midas-params>=0.3.0
|
|
30
|
+
midas-ff-pipeline>=0.1.0
|
|
31
|
+
midas-calibrate>=0.2.1
|
|
32
|
+
midas-integrate>=0.3.2
|
|
33
|
+
|
|
34
|
+
[nf]
|
|
35
|
+
midas-stress>=0.6.0
|
|
36
|
+
midas-params>=0.3.0
|
|
37
|
+
midas-nf-pipeline>=0.1.0
|
|
38
|
+
|
|
39
|
+
[plots]
|
|
40
|
+
matplotlib>=3.5
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
midas_suite
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "midas-suite"
|
|
7
|
+
version = "0.2.0"
|
|
8
|
+
description = "Meta-package: installs the MIDAS Python pipeline (FF/NF/PF HEDM, calibration, peakfit, integration, transforms, ODF, stress)."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "BSD-3-Clause" }
|
|
11
|
+
authors = [{ name = "Hemant Sharma", email = "hsharma@anl.gov" }]
|
|
12
|
+
requires-python = ">=3.9"
|
|
13
|
+
keywords = [
|
|
14
|
+
"MIDAS", "HEDM", "3DXRD", "powder diffraction", "tomography",
|
|
15
|
+
"DCT", "Laue", "synchrotron", "crystallography", "PyTorch",
|
|
16
|
+
]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Development Status :: 4 - Beta",
|
|
19
|
+
"Intended Audience :: Science/Research",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Operating System :: OS Independent",
|
|
22
|
+
"Topic :: Scientific/Engineering :: Physics",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
# Floors pinned to the current PyPI version of each sub-package as of
|
|
26
|
+
# 2026-05-06. Bump only when a meta-package change actually requires it.
|
|
27
|
+
# midas-grain-odf and midas-pf-odf are intentionally absent until they
|
|
28
|
+
# land on PyPI; they will be added in midas-suite v0.2.0.
|
|
29
|
+
dependencies = [
|
|
30
|
+
# leaves
|
|
31
|
+
"midas-stress>=0.6.0",
|
|
32
|
+
"midas-params>=0.3.0",
|
|
33
|
+
"midas-hkls>=0.3.0",
|
|
34
|
+
"midas-diffract>=0.1.0",
|
|
35
|
+
"midas-peakfit>=0.3.0",
|
|
36
|
+
"midas-integrate>=0.3.2",
|
|
37
|
+
"midas-calibrate>=0.2.1",
|
|
38
|
+
"midas-index>=0.3.0",
|
|
39
|
+
"midas-transforms>=0.2.0",
|
|
40
|
+
"midas-process-grains>=0.1.0",
|
|
41
|
+
"midas-fit-grain>=0.1.0",
|
|
42
|
+
"midas-nf-preprocess>=0.1.0",
|
|
43
|
+
"midas-nf-fitorientation>=0.3.0",
|
|
44
|
+
# parsl + pipeline orchestrators
|
|
45
|
+
"midas-parsl-configs>=0.1.0",
|
|
46
|
+
"midas-ff-pipeline>=0.1.0",
|
|
47
|
+
"midas-nf-pipeline>=0.1.0",
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[project.optional-dependencies]
|
|
51
|
+
# Modality bundles for users who don't want the full pipeline.
|
|
52
|
+
# Each bundle pulls only what its target workflow needs; sub-package
|
|
53
|
+
# transitive deps fill in the rest. The ff/nf extras intentionally pull
|
|
54
|
+
# the corresponding pipeline orchestrator at the top — that package's
|
|
55
|
+
# own dep list pulls everything it needs underneath.
|
|
56
|
+
ff = [
|
|
57
|
+
"midas-stress>=0.6.0",
|
|
58
|
+
"midas-params>=0.3.0",
|
|
59
|
+
"midas-ff-pipeline>=0.1.0",
|
|
60
|
+
"midas-calibrate>=0.2.1",
|
|
61
|
+
"midas-integrate>=0.3.2",
|
|
62
|
+
]
|
|
63
|
+
nf = [
|
|
64
|
+
"midas-stress>=0.6.0",
|
|
65
|
+
"midas-params>=0.3.0",
|
|
66
|
+
"midas-nf-pipeline>=0.1.0",
|
|
67
|
+
]
|
|
68
|
+
calib = [
|
|
69
|
+
"midas-hkls>=0.3.0",
|
|
70
|
+
"midas-integrate>=0.3.2",
|
|
71
|
+
"midas-peakfit>=0.3.0",
|
|
72
|
+
"midas-calibrate>=0.2.1",
|
|
73
|
+
]
|
|
74
|
+
plots = ["matplotlib>=3.5"]
|
|
75
|
+
dev = ["pytest>=7"]
|
|
76
|
+
|
|
77
|
+
[project.urls]
|
|
78
|
+
Homepage = "https://github.com/marinerhemant/MIDAS"
|
|
79
|
+
Issues = "https://github.com/marinerhemant/MIDAS/issues"
|
|
80
|
+
|
|
81
|
+
[tool.setuptools.packages.find]
|
|
82
|
+
where = ["."]
|
|
83
|
+
include = ["midas_suite*"]
|