Metadata-Version: 2.4
Name: qmrpy
Version: 0.3.0
Summary: Python implementation (translation) of qMRLab models for quantitative MRI.
Project-URL: Repository, https://github.com/SugimotoKohei/qmrpy
Project-URL: Issues, https://github.com/SugimotoKohei/qmrpy/issues
Author: Kohei Sugimoto
License: MIT
License-File: LICENSE
Keywords: MRI,diffusion,qMRI,qMRLab,relaxometry
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
Requires-Python: >=3.11
Requires-Dist: numpy>=1.26
Requires-Dist: scipy>=1.11
Provides-Extra: dev
Requires-Dist: nbclient>=0.10.2; extra == 'dev'
Requires-Dist: nbformat>=5.10.4; extra == 'dev'
Requires-Dist: pytest-cov>=5; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Provides-Extra: viz
Requires-Dist: pandas>=2.3.3; extra == 'viz'
Requires-Dist: plotnine>=0.13; extra == 'viz'
Description-Content-Type: text/markdown

# qmrpy

[![PyPI](https://img.shields.io/pypi/v/qmrpy.svg)](https://pypi.org/project/qmrpy/)

qMRLab（MATLAB実装）の概念・モデルを **Python** へ段階的に移植するためのリポジトリです。

本プロジェクトは upstream の qMRLab（MIT License）に着想を得ており、モデル定義・検証方針は qMRLab を参照しつつ Python で再構成します。


## 開発（ローカル）

現時点では最小のパッケージ雛形のみです（今後、モデル実装を段階的に追加します）。

- `uv sync --extra viz`（可視化を含める）
- `uv sync --extra viz --extra dev`（pytest/ruff 等を含める）
- `uv run --locked -m pytest`

## パッケージ利用

`uv` を使う場合の導入例：

```bash
uv add qmrpy
```

### 最小利用例

```python
import numpy as np
from qmrpy.models.t1.vfa_t1 import VfaT1

model = VfaT1(
    tr_ms=15.0,
    flip_angles_deg=np.array([2, 5, 10, 15]),
)

signal = model.forward(m0=1.0, t1_ms=1200.0)
fit = model.fit_linear(signal)
print(fit["t1_ms"], fit["m0"])
```

関数API（オブジェクト不要）:

```python
import numpy as np
from qmrpy import vfa_t1_fit_linear

signal = np.array([0.02, 0.06, 0.12, 0.18], dtype=float)
fit = vfa_t1_fit_linear(
    signal,
    flip_angle_deg=np.array([2, 5, 10, 15]),
    tr_ms=15.0,
)
print(fit["t1_ms"], fit["m0"])
```

### QSM の最小利用例

```python
import numpy as np
from qmrpy.models.qsm import QsmSplitBregman

shape = (6, 6, 6)
phase = np.random.default_rng(0).normal(0, 1, size=shape)
mask = np.ones(shape, dtype=float)

qsm = QsmSplitBregman(
    sharp_filter=False,
    l1_regularized=True,
    l2_regularized=False,
    no_regularization=False,
    pad_size=(1, 1, 1),
)

out = qsm.fit(phase, mask, image_resolution_mm=[1.0, 1.0, 1.0])
print(out.keys())
```

## ライセンス

- `qmrpy` 本体：MIT（`LICENSE`）
- 参照元 `qMRLab/`：MIT（upstream、ローカル参照用）
- 翻訳・参考実装・vendor の詳細は `THIRD_PARTY_NOTICES.md` を参照

## 第三者由来コードの扱い

- `qMRLab`（MATLAB）および `DECAES.jl` の概念・アルゴリズムを翻訳/再構成しています。
- `epgpy` は `src/epgpy/` に vendor しています。
- ライセンス表記・出自は `THIRD_PARTY_NOTICES.md` に集約しています。
