rk4-sparse-cpp


Namerk4-sparse-cpp JSON
Version 0.2.3 PyPI version JSON
download
home_pageNone
SummaryHigh-performance sparse matrix RK4 solver for quantum excitation dynamics
upload_time2025-07-16 11:51:53
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT License Copyright (c) 2024 Hiroki Tsusaka Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords quantum dynamics rk4 sparse physics simulation
VCS
bugtrack_url
requirements pybind11 pytest cmake numpy scipy
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Excitation RK4 Sparse

量子力学的な励起ダイナミクスを計算するための疎行列ベースのRK4ソルバー。

## 機能
- CSR形式の疎行列サポート
- OpenMPによる並列化(動的スケジューリング最適化)
- Python/C++のハイブリッド実装
- 包括的なベンチマーク機能
  - 2準位系と調和振動子のテストケース
  - 詳細なパフォーマンス分析
  - 解析解との比較
- メモリ最適化
  - キャッシュライン境界を考慮したアライメント
  - 疎行列パターンの再利用

## バージョン情報
- 現在のバージョン: v0.2.5
- ステータス: 安定版
- 最終更新: 2024-07-15
- **新機能**: プロジェクト構造の大幅改善、性能問題の解決

## 必要条件
- Python 3.10以上
- C++17対応コンパイラ
- CMake 3.16以上
- pybind11
- Eigen3
- OpenMP(推奨)

## インストール

### pip install(推奨)
```bash
pip install rk4-sparse-cpp
```

この場合、`rk4_sparse`モジュールがsite-packagesにインストールされます。

### 開発用インストール
```bash
git clone https://github.com/1160-hrk/excitation-rk4-sparse.git
cd excitation-rk4-sparse

# C++ライブラリのビルド
./tools/build.sh --clean

# Pythonパッケージのインストール
pip install -e .

# または、直接パスを追加して使用
# sys.path.append('python')
```

### クイックテスト
```bash
# 2準位系のテスト
python examples/python/two_level_excitation.py

# 調和振動子のベンチマーク
python examples/python/benchmark_ho.py
```

## 使用例

### 基本的な使用法
```python
# pip installでインストールした場合
from rk4_sparse import rk4_sparse_py, rk4_sparse_cpp

# 開発用インストールの場合
# import sys
# import os
# sys.path.append(os.path.join(os.path.dirname(__file__), 'python'))
# from rk4_sparse import rk4_sparse_py, rk4_sparse_cpp

# Python実装
result_py = rk4_sparse_py(H0, mux, muy, Ex, Ey, psi0, dt, return_traj, stride, renorm)

# C++実装(高速)
result_cpp = rk4_sparse_cpp(H0, mux, muy, Ex, Ey, psi0, dt, return_traj, stride, renorm)
```

### 例題
すべての例は`examples/python/`ディレクトリにあります:

1. **基本例**
```bash
python examples/python/two_level_excitation.py  # 2準位励起
```

2. **ベンチマーク**
```bash
python examples/python/benchmark_ho.py         # 調和振動子系での比較
```

## ベンチマーク
以下のスクリプトで様々なベンチマークを実行できます:

1. 実装間の比較
```bash
python examples/python/benchmark_ho.py         # 調和振動子系での比較
```

2. 2準位系のテスト
```bash
python examples/python/two_level_excitation.py # 2準位励起のテスト
```

## 性能

最新のベンチマーク結果(2025年7月15日)による高性能を実現:

| システムサイズ | scipy.sparse [ms] | numba [ms] | C++ [ms] | C++ vs scipy | C++ vs numba |
|-------------:|------------------:|-----------:|----------:|-------------:|-------------:|
| 2レベル       | 11.6              | 0.2        | 0.1       | **110x**     | **2.0x**     |
| 4レベル       | 10.7              | 0.2        | 0.1       | **116x**     | **2.6x**     |
| 8レベル       | 11.0              | 0.4        | 0.1       | **75x**      | **2.9x**     |
| 16レベル      | 10.9              | 1.1        | 0.2       | **53x**      | **5.5x**     |
| 32レベル      | 11.5              | 3.8        | 0.3       | **34x**      | **11.3x**    |
| 64レベル      | 12.3              | 13.6       | 0.6       | **20x**      | **22.5x**    |
| 128レベル     | 13.9              | 55.1       | 1.2       | **12x**      | **46.9x**    |
| 256レベル     | 17.5              | 230.5      | 2.4       | **7.3x**     | **96.0x**    |

## 最適化の特徴

### v0.2.0での主要改善
1. **条件付きデバッグ出力**: I/Oオーバーヘッドの除去
2. **適応的並列化**: 小規模データでのOpenMPオーバーヘッド回避
3. **最適化されたスケジューリング**: 静的スケジューリングによる効率化

### コア技術
1. **メモリアライメント**
   - キャッシュライン境界(64バイト)に合わせたアライメント
   - 作業バッファの効率的な配置

2. **適応的並列化**
   - 閾値ベースの条件分岐(10,000要素以上で並列化)
   - 静的スケジューリング最適化

3. **疎行列最適化**
   - 非ゼロパターンの事前計算
   - データ構造の再利用
   - 効率的な行列-ベクトル積

## ドキュメント

包括的なドキュメントが利用可能です:

- **開発ガイド**
  - [プロジェクト構造変更とマイグレーション](docs/development/project_restructure_migration.md)
  - [ビルドシステム設定](docs/development/build_configuration.md)

- **トラブルシューティング**
  - [性能回帰問題の分析と解決](docs/troubleshooting/performance_regression_analysis.md)

- **ベンチマーク結果**
  - [性能測定結果](docs/benchmarks/performance_results.md)

## ライセンス
MITライセンス

## 作者
- Hiroki Tsusaka
- IIS, UTokyo
- tsusaka4research "at" gmail.com

```bash
pip install -e .

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rk4-sparse-cpp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "quantum, dynamics, rk4, sparse, physics, simulation",
    "author": null,
    "author_email": "Hiroki Tsusaka <tsusaka4research@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/58/84/4d2eb90cb8523e70eb09813c7aa3d1613e8a763625906a6d9a827abd3405/rk4_sparse_cpp-0.2.3.tar.gz",
    "platform": null,
    "description": "# Excitation RK4 Sparse\n\n\u91cf\u5b50\u529b\u5b66\u7684\u306a\u52b1\u8d77\u30c0\u30a4\u30ca\u30df\u30af\u30b9\u3092\u8a08\u7b97\u3059\u308b\u305f\u3081\u306e\u758e\u884c\u5217\u30d9\u30fc\u30b9\u306eRK4\u30bd\u30eb\u30d0\u30fc\u3002\n\n## \u6a5f\u80fd\n- CSR\u5f62\u5f0f\u306e\u758e\u884c\u5217\u30b5\u30dd\u30fc\u30c8\n- OpenMP\u306b\u3088\u308b\u4e26\u5217\u5316\uff08\u52d5\u7684\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u6700\u9069\u5316\uff09\n- Python/C++\u306e\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u5b9f\u88c5\n- \u5305\u62ec\u7684\u306a\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u6a5f\u80fd\n  - 2\u6e96\u4f4d\u7cfb\u3068\u8abf\u548c\u632f\u52d5\u5b50\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\n  - \u8a73\u7d30\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5206\u6790\n  - \u89e3\u6790\u89e3\u3068\u306e\u6bd4\u8f03\n- \u30e1\u30e2\u30ea\u6700\u9069\u5316\n  - \u30ad\u30e3\u30c3\u30b7\u30e5\u30e9\u30a4\u30f3\u5883\u754c\u3092\u8003\u616e\u3057\u305f\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\n  - \u758e\u884c\u5217\u30d1\u30bf\u30fc\u30f3\u306e\u518d\u5229\u7528\n\n## \u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831\n- \u73fe\u5728\u306e\u30d0\u30fc\u30b8\u30e7\u30f3: v0.2.5\n- \u30b9\u30c6\u30fc\u30bf\u30b9: \u5b89\u5b9a\u7248\n- \u6700\u7d42\u66f4\u65b0: 2024-07-15\n- **\u65b0\u6a5f\u80fd**: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u306e\u5927\u5e45\u6539\u5584\u3001\u6027\u80fd\u554f\u984c\u306e\u89e3\u6c7a\n\n## \u5fc5\u8981\u6761\u4ef6\n- Python 3.10\u4ee5\u4e0a\n- C++17\u5bfe\u5fdc\u30b3\u30f3\u30d1\u30a4\u30e9\n- CMake 3.16\u4ee5\u4e0a\n- pybind11\n- Eigen3\n- OpenMP\uff08\u63a8\u5968\uff09\n\n## \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\n### pip install\uff08\u63a8\u5968\uff09\n```bash\npip install rk4-sparse-cpp\n```\n\n\u3053\u306e\u5834\u5408\u3001`rk4_sparse`\u30e2\u30b8\u30e5\u30fc\u30eb\u304csite-packages\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\n\n### \u958b\u767a\u7528\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n```bash\ngit clone https://github.com/1160-hrk/excitation-rk4-sparse.git\ncd excitation-rk4-sparse\n\n# C++\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d3\u30eb\u30c9\n./tools/build.sh --clean\n\n# Python\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\npip install -e .\n\n# \u307e\u305f\u306f\u3001\u76f4\u63a5\u30d1\u30b9\u3092\u8ffd\u52a0\u3057\u3066\u4f7f\u7528\n# sys.path.append('python')\n```\n\n### \u30af\u30a4\u30c3\u30af\u30c6\u30b9\u30c8\n```bash\n# 2\u6e96\u4f4d\u7cfb\u306e\u30c6\u30b9\u30c8\npython examples/python/two_level_excitation.py\n\n# \u8abf\u548c\u632f\u52d5\u5b50\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\npython examples/python/benchmark_ho.py\n```\n\n## \u4f7f\u7528\u4f8b\n\n### \u57fa\u672c\u7684\u306a\u4f7f\u7528\u6cd5\n```python\n# pip install\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\u5834\u5408\nfrom rk4_sparse import rk4_sparse_py, rk4_sparse_cpp\n\n# \u958b\u767a\u7528\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u5834\u5408\n# import sys\n# import os\n# sys.path.append(os.path.join(os.path.dirname(__file__), 'python'))\n# from rk4_sparse import rk4_sparse_py, rk4_sparse_cpp\n\n# Python\u5b9f\u88c5\nresult_py = rk4_sparse_py(H0, mux, muy, Ex, Ey, psi0, dt, return_traj, stride, renorm)\n\n# C++\u5b9f\u88c5\uff08\u9ad8\u901f\uff09\nresult_cpp = rk4_sparse_cpp(H0, mux, muy, Ex, Ey, psi0, dt, return_traj, stride, renorm)\n```\n\n### \u4f8b\u984c\n\u3059\u3079\u3066\u306e\u4f8b\u306f`examples/python/`\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308a\u307e\u3059\uff1a\n\n1. **\u57fa\u672c\u4f8b**\n```bash\npython examples/python/two_level_excitation.py  # 2\u6e96\u4f4d\u52b1\u8d77\n```\n\n2. **\u30d9\u30f3\u30c1\u30de\u30fc\u30af**\n```bash\npython examples/python/benchmark_ho.py         # \u8abf\u548c\u632f\u52d5\u5b50\u7cfb\u3067\u306e\u6bd4\u8f03\n```\n\n## \u30d9\u30f3\u30c1\u30de\u30fc\u30af\n\u4ee5\u4e0b\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3067\u69d8\u3005\u306a\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\uff1a\n\n1. \u5b9f\u88c5\u9593\u306e\u6bd4\u8f03\n```bash\npython examples/python/benchmark_ho.py         # \u8abf\u548c\u632f\u52d5\u5b50\u7cfb\u3067\u306e\u6bd4\u8f03\n```\n\n2. 2\u6e96\u4f4d\u7cfb\u306e\u30c6\u30b9\u30c8\n```bash\npython examples/python/two_level_excitation.py # 2\u6e96\u4f4d\u52b1\u8d77\u306e\u30c6\u30b9\u30c8\n```\n\n## \u6027\u80fd\n\n\u6700\u65b0\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u7d50\u679c\uff082025\u5e747\u670815\u65e5\uff09\u306b\u3088\u308b\u9ad8\u6027\u80fd\u3092\u5b9f\u73fe\uff1a\n\n| \u30b7\u30b9\u30c6\u30e0\u30b5\u30a4\u30ba | scipy.sparse [ms] | numba [ms] | C++ [ms] | C++ vs scipy | C++ vs numba |\n|-------------:|------------------:|-----------:|----------:|-------------:|-------------:|\n| 2\u30ec\u30d9\u30eb       | 11.6              | 0.2        | 0.1       | **110x**     | **2.0x**     |\n| 4\u30ec\u30d9\u30eb       | 10.7              | 0.2        | 0.1       | **116x**     | **2.6x**     |\n| 8\u30ec\u30d9\u30eb       | 11.0              | 0.4        | 0.1       | **75x**      | **2.9x**     |\n| 16\u30ec\u30d9\u30eb      | 10.9              | 1.1        | 0.2       | **53x**      | **5.5x**     |\n| 32\u30ec\u30d9\u30eb      | 11.5              | 3.8        | 0.3       | **34x**      | **11.3x**    |\n| 64\u30ec\u30d9\u30eb      | 12.3              | 13.6       | 0.6       | **20x**      | **22.5x**    |\n| 128\u30ec\u30d9\u30eb     | 13.9              | 55.1       | 1.2       | **12x**      | **46.9x**    |\n| 256\u30ec\u30d9\u30eb     | 17.5              | 230.5      | 2.4       | **7.3x**     | **96.0x**    |\n\n## \u6700\u9069\u5316\u306e\u7279\u5fb4\n\n### v0.2.0\u3067\u306e\u4e3b\u8981\u6539\u5584\n1. **\u6761\u4ef6\u4ed8\u304d\u30c7\u30d0\u30c3\u30b0\u51fa\u529b**: I/O\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u306e\u9664\u53bb\n2. **\u9069\u5fdc\u7684\u4e26\u5217\u5316**: \u5c0f\u898f\u6a21\u30c7\u30fc\u30bf\u3067\u306eOpenMP\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u56de\u907f\n3. **\u6700\u9069\u5316\u3055\u308c\u305f\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0**: \u9759\u7684\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u306b\u3088\u308b\u52b9\u7387\u5316\n\n### \u30b3\u30a2\u6280\u8853\n1. **\u30e1\u30e2\u30ea\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8**\n   - \u30ad\u30e3\u30c3\u30b7\u30e5\u30e9\u30a4\u30f3\u5883\u754c\uff0864\u30d0\u30a4\u30c8\uff09\u306b\u5408\u308f\u305b\u305f\u30a2\u30e9\u30a4\u30e1\u30f3\u30c8\n   - \u4f5c\u696d\u30d0\u30c3\u30d5\u30a1\u306e\u52b9\u7387\u7684\u306a\u914d\u7f6e\n\n2. **\u9069\u5fdc\u7684\u4e26\u5217\u5316**\n   - \u95be\u5024\u30d9\u30fc\u30b9\u306e\u6761\u4ef6\u5206\u5c90\uff0810,000\u8981\u7d20\u4ee5\u4e0a\u3067\u4e26\u5217\u5316\uff09\n   - \u9759\u7684\u30b9\u30b1\u30b8\u30e5\u30fc\u30ea\u30f3\u30b0\u6700\u9069\u5316\n\n3. **\u758e\u884c\u5217\u6700\u9069\u5316**\n   - \u975e\u30bc\u30ed\u30d1\u30bf\u30fc\u30f3\u306e\u4e8b\u524d\u8a08\u7b97\n   - \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u518d\u5229\u7528\n   - \u52b9\u7387\u7684\u306a\u884c\u5217-\u30d9\u30af\u30c8\u30eb\u7a4d\n\n## \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\n\n\u5305\u62ec\u7684\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff1a\n\n- **\u958b\u767a\u30ac\u30a4\u30c9**\n  - [\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u5909\u66f4\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3](docs/development/project_restructure_migration.md)\n  - [\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u8a2d\u5b9a](docs/development/build_configuration.md)\n\n- **\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0**\n  - [\u6027\u80fd\u56de\u5e30\u554f\u984c\u306e\u5206\u6790\u3068\u89e3\u6c7a](docs/troubleshooting/performance_regression_analysis.md)\n\n- **\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u7d50\u679c**\n  - [\u6027\u80fd\u6e2c\u5b9a\u7d50\u679c](docs/benchmarks/performance_results.md)\n\n## \u30e9\u30a4\u30bb\u30f3\u30b9\nMIT\u30e9\u30a4\u30bb\u30f3\u30b9\n\n## \u4f5c\u8005\n- Hiroki Tsusaka\n- IIS, UTokyo\n- tsusaka4research \"at\" gmail.com\n\n```bash\npip install -e .\n",
    "bugtrack_url": null,
    "license": "MIT License\n         \n         Copyright (c) 2024 Hiroki Tsusaka\n         \n         Permission is hereby granted, free of charge, to any person obtaining a copy\n         of this software and associated documentation files (the \"Software\"), to deal\n         in the Software without restriction, including without limitation the rights\n         to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n         copies of the Software, and to permit persons to whom the Software is\n         furnished to do so, subject to the following conditions:\n         \n         The above copyright notice and this permission notice shall be included in all\n         copies or substantial portions of the Software.\n         \n         THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n         IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n         FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n         AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n         LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n         OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n         SOFTWARE. ",
    "summary": "High-performance sparse matrix RK4 solver for quantum excitation dynamics",
    "version": "0.2.3",
    "project_urls": {
        "Documentation": "https://github.com/1160-hrk/rk4-sparse-cpp/tree/main/docs",
        "Homepage": "https://github.com/1160-hrk/rk4-sparse-cpp",
        "Issues": "https://github.com/1160-hrk/rk4-sparse-cpp/issues",
        "Repository": "https://github.com/1160-hrk/rk4-sparse-cpp"
    },
    "split_keywords": [
        "quantum",
        " dynamics",
        " rk4",
        " sparse",
        " physics",
        " simulation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c97b68da5741d87b9beb5f68bcf12aeaec2df8f110889c07812e95ce5e972f77",
                "md5": "9dcd1431e39939246e09cabf78c5be22",
                "sha256": "9aa0f854203b5131168282bd8a687733f7384a1b2d4b42844961125543caa054"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp310-cp310-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "9dcd1431e39939246e09cabf78c5be22",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 212294,
            "upload_time": "2025-07-16T11:51:27",
            "upload_time_iso_8601": "2025-07-16T11:51:27.443997Z",
            "url": "https://files.pythonhosted.org/packages/c9/7b/68da5741d87b9beb5f68bcf12aeaec2df8f110889c07812e95ce5e972f77/rk4_sparse_cpp-0.2.3-cp310-cp310-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c522e063985e9d6a2aaff6d5d2cdbf141edb56dcf289256ccdba85cb21c72842",
                "md5": "f7d0fea7762c55a5f4aed0edb562277b",
                "sha256": "ee6c0d115c69e3fc74c3d501d85b1d343aa16defd2d3f4329fd553d453b55f1b"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp310-cp310-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f7d0fea7762c55a5f4aed0edb562277b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 230569,
            "upload_time": "2025-07-16T11:51:28",
            "upload_time_iso_8601": "2025-07-16T11:51:28.972575Z",
            "url": "https://files.pythonhosted.org/packages/c5/22/e063985e9d6a2aaff6d5d2cdbf141edb56dcf289256ccdba85cb21c72842/rk4_sparse_cpp-0.2.3-cp310-cp310-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3ab1f5727825e2154d00c77da3f7982d1a2bef4b8334e80e939d661b61624bc3",
                "md5": "5de2d3669f386774e38115a2c9356d04",
                "sha256": "284a3c8d751935d319c327695cd9b7c1fcd1642c9a1f716f0b13a49d55fb354a"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp310-cp310-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5de2d3669f386774e38115a2c9356d04",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1232818,
            "upload_time": "2025-07-16T11:51:30",
            "upload_time_iso_8601": "2025-07-16T11:51:30.502610Z",
            "url": "https://files.pythonhosted.org/packages/3a/b1/f5727825e2154d00c77da3f7982d1a2bef4b8334e80e939d661b61624bc3/rk4_sparse_cpp-0.2.3-cp310-cp310-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8ede277d1feef6a91a3ae5c1d45d8248d28081217fbdc2864ecf543d85e79f6b",
                "md5": "112892cb4e49e3e51741ab6b9af24c72",
                "sha256": "d001df4bc575fe8afbcff6954a9849aa54f03107e7bb75f36694f23c208a6a25"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "112892cb4e49e3e51741ab6b9af24c72",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 1304665,
            "upload_time": "2025-07-16T11:51:32",
            "upload_time_iso_8601": "2025-07-16T11:51:32.007252Z",
            "url": "https://files.pythonhosted.org/packages/8e/de/277d1feef6a91a3ae5c1d45d8248d28081217fbdc2864ecf543d85e79f6b/rk4_sparse_cpp-0.2.3-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "09b80a7d6d7293a100ed068240acd4214e3efe3c4a0efc11e5782549d6b280d2",
                "md5": "8700cdb3d3d9815fcb0182c3b3a36ca6",
                "sha256": "454771b01d28012f215dbbd4400b3fea63e7b92766ac6e6d4f71d9396e905a63"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp311-cp311-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "8700cdb3d3d9815fcb0182c3b3a36ca6",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 212972,
            "upload_time": "2025-07-16T11:51:33",
            "upload_time_iso_8601": "2025-07-16T11:51:33.363824Z",
            "url": "https://files.pythonhosted.org/packages/09/b8/0a7d6d7293a100ed068240acd4214e3efe3c4a0efc11e5782549d6b280d2/rk4_sparse_cpp-0.2.3-cp311-cp311-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "193f3d1c71539580dffdb66b503494ad580724fcaf2a783210c6538f7bd4e594",
                "md5": "490d79b58ba2bed28a23a4fa761b7041",
                "sha256": "86929377b2fad0fdf06ce6509736b468a1cf2b5a87acb37c75f9f78a6349ebe4"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp311-cp311-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "490d79b58ba2bed28a23a4fa761b7041",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 231079,
            "upload_time": "2025-07-16T11:51:34",
            "upload_time_iso_8601": "2025-07-16T11:51:34.664787Z",
            "url": "https://files.pythonhosted.org/packages/19/3f/3d1c71539580dffdb66b503494ad580724fcaf2a783210c6538f7bd4e594/rk4_sparse_cpp-0.2.3-cp311-cp311-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a8358bdb0b272dff2d30a16696c31968311d17574b6b48309b23ff71f11a0793",
                "md5": "9069f0853528fec63c36ac19820330cd",
                "sha256": "298560463d7963e3055093d02508a4f4957909d13a4dd2e88e568d6d5782d13e"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp311-cp311-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "9069f0853528fec63c36ac19820330cd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1233403,
            "upload_time": "2025-07-16T11:51:35",
            "upload_time_iso_8601": "2025-07-16T11:51:35.984424Z",
            "url": "https://files.pythonhosted.org/packages/a8/35/8bdb0b272dff2d30a16696c31968311d17574b6b48309b23ff71f11a0793/rk4_sparse_cpp-0.2.3-cp311-cp311-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "af67a29ce9cb40346fa8a40995cae63c2e029f69ec66d94f51453cc50cd0e89d",
                "md5": "be70c7e45ce2a5fe0ae3736c31d1dae3",
                "sha256": "ecbc697bbb6d34b5164266db467fa400a22e7b286260278c5ff23c80fd0f5e8a"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "be70c7e45ce2a5fe0ae3736c31d1dae3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 1305225,
            "upload_time": "2025-07-16T11:51:37",
            "upload_time_iso_8601": "2025-07-16T11:51:37.405698Z",
            "url": "https://files.pythonhosted.org/packages/af/67/a29ce9cb40346fa8a40995cae63c2e029f69ec66d94f51453cc50cd0e89d/rk4_sparse_cpp-0.2.3-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e7478f5d6434b9ab9d1ac704b401dfa784f574d3a07ebb1f63c1748d437672bb",
                "md5": "3874ed122f1b053700b633d801126f6e",
                "sha256": "acd2ec368194e285f5ad7c3f6ac7f1048a4f606219059a1ad03c3c0f56e857f0"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp312-cp312-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "3874ed122f1b053700b633d801126f6e",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 214205,
            "upload_time": "2025-07-16T11:51:38",
            "upload_time_iso_8601": "2025-07-16T11:51:38.447279Z",
            "url": "https://files.pythonhosted.org/packages/e7/47/8f5d6434b9ab9d1ac704b401dfa784f574d3a07ebb1f63c1748d437672bb/rk4_sparse_cpp-0.2.3-cp312-cp312-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bca54578b1fb8745087ec881b06400c0a57cde292631b93fadfb4c4a99541a3a",
                "md5": "0e92782eca12982f07824d64715d45cb",
                "sha256": "9d8a3833ffa0e8bb8300b8ad39346b84f3e21677fb04c2c8fa13c4676ac6c53a"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp312-cp312-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0e92782eca12982f07824d64715d45cb",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 233811,
            "upload_time": "2025-07-16T11:51:39",
            "upload_time_iso_8601": "2025-07-16T11:51:39.324235Z",
            "url": "https://files.pythonhosted.org/packages/bc/a5/4578b1fb8745087ec881b06400c0a57cde292631b93fadfb4c4a99541a3a/rk4_sparse_cpp-0.2.3-cp312-cp312-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f436697c841b15f5bd862ab35d8892245018630f8382c7b6b44bb0f7cb0252c3",
                "md5": "846f2e8fba5dd7710789e1c61c3164bb",
                "sha256": "209c6a8d95266a80b16cdafb6de4b86f8731ba9f42419d3fdf8d3a34e8d22e75"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp312-cp312-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "846f2e8fba5dd7710789e1c61c3164bb",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1234699,
            "upload_time": "2025-07-16T11:51:40",
            "upload_time_iso_8601": "2025-07-16T11:51:40.641485Z",
            "url": "https://files.pythonhosted.org/packages/f4/36/697c841b15f5bd862ab35d8892245018630f8382c7b6b44bb0f7cb0252c3/rk4_sparse_cpp-0.2.3-cp312-cp312-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9273e25bf91e156b7b5f7e5a8a4c7245b16df8bc53013883e375653eb8bc0c89",
                "md5": "b3190a2608c192a74aec032a788480c3",
                "sha256": "52dff4b6c88cdd6c9fa17f036e14fb627c35db51cc6ee0c3c743e9e88910b0c1"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b3190a2608c192a74aec032a788480c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 1307642,
            "upload_time": "2025-07-16T11:51:42",
            "upload_time_iso_8601": "2025-07-16T11:51:42.666067Z",
            "url": "https://files.pythonhosted.org/packages/92/73/e25bf91e156b7b5f7e5a8a4c7245b16df8bc53013883e375653eb8bc0c89/rk4_sparse_cpp-0.2.3-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0e35f06e616145b53e1a3c3e26c051e2b64649984e256e1e69e78bcc22b49530",
                "md5": "a96729de3c3578939cb8ce18c9540e80",
                "sha256": "9c1285405d5bf19f90d39445be23cae1af707127fc2c2f48d046151369def20d"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp313-cp313-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a96729de3c3578939cb8ce18c9540e80",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 214361,
            "upload_time": "2025-07-16T11:51:45",
            "upload_time_iso_8601": "2025-07-16T11:51:45.037603Z",
            "url": "https://files.pythonhosted.org/packages/0e/35/f06e616145b53e1a3c3e26c051e2b64649984e256e1e69e78bcc22b49530/rk4_sparse_cpp-0.2.3-cp313-cp313-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f2daba4bba4aa1a3ecf912eeafbcb4fcb41bdc0442708647a408a2025a0c5df2",
                "md5": "bbca9f89a507b2e1760abf7e54d7cc56",
                "sha256": "6257e746a8b9519538bbb03907a9c09812192ecd26669d3fbd137a3b05c43085"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp313-cp313-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bbca9f89a507b2e1760abf7e54d7cc56",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 233869,
            "upload_time": "2025-07-16T11:51:45",
            "upload_time_iso_8601": "2025-07-16T11:51:45.991162Z",
            "url": "https://files.pythonhosted.org/packages/f2/da/ba4bba4aa1a3ecf912eeafbcb4fcb41bdc0442708647a408a2025a0c5df2/rk4_sparse_cpp-0.2.3-cp313-cp313-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "417ed51b5a84e74c87c0c89198b2441aa2bb8bac5c37f89c4dd11b6db723aeb0",
                "md5": "b8814f5c15ef703f5bd74e024c923883",
                "sha256": "0e30e0e71b03ef293517c83702a8343146cd2de332d360d3fe4aaba935d1938b"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp313-cp313-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "b8814f5c15ef703f5bd74e024c923883",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1234973,
            "upload_time": "2025-07-16T11:51:47",
            "upload_time_iso_8601": "2025-07-16T11:51:47.009445Z",
            "url": "https://files.pythonhosted.org/packages/41/7e/d51b5a84e74c87c0c89198b2441aa2bb8bac5c37f89c4dd11b6db723aeb0/rk4_sparse_cpp-0.2.3-cp313-cp313-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "45ec17586bcfa1372cecef2a4fdec33fe6b7155d6c53efa1e171a6184a71857e",
                "md5": "fee2b2afcd1c2a2a5517a4d23e791441",
                "sha256": "8e9f90e0d174a1901579d4ac423a5b516f3cfe6da43a6ec2cc629b85e0d8cc76"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "fee2b2afcd1c2a2a5517a4d23e791441",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 1307725,
            "upload_time": "2025-07-16T11:51:48",
            "upload_time_iso_8601": "2025-07-16T11:51:48.105799Z",
            "url": "https://files.pythonhosted.org/packages/45/ec/17586bcfa1372cecef2a4fdec33fe6b7155d6c53efa1e171a6184a71857e/rk4_sparse_cpp-0.2.3-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "430f04c46588f90b924fb4e72343bc1762f95b8d22e1acac995198f5e2dd8cea",
                "md5": "5de456e619d56ac0fb48d43b484a9de2",
                "sha256": "cb7f515eea6a403e0fae3adddb5c0df27169f4765feb4b62ecab6d53e1491345"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp39-cp39-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5de456e619d56ac0fb48d43b484a9de2",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 212663,
            "upload_time": "2025-07-16T11:51:49",
            "upload_time_iso_8601": "2025-07-16T11:51:49.054310Z",
            "url": "https://files.pythonhosted.org/packages/43/0f/04c46588f90b924fb4e72343bc1762f95b8d22e1acac995198f5e2dd8cea/rk4_sparse_cpp-0.2.3-cp39-cp39-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "da788fd70351e2d24ebc53cc37e1bbd7153e50820ddc061726dcf12605b6c156",
                "md5": "9bfede59fb3efb1fd909c6c467863aed",
                "sha256": "b60a5a46efa4fdc3369840d9e07c27af7ab5adf75dcc000cb1e45a34fd3571c1"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp39-cp39-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9bfede59fb3efb1fd909c6c467863aed",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 230544,
            "upload_time": "2025-07-16T11:51:49",
            "upload_time_iso_8601": "2025-07-16T11:51:49.910885Z",
            "url": "https://files.pythonhosted.org/packages/da/78/8fd70351e2d24ebc53cc37e1bbd7153e50820ddc061726dcf12605b6c156/rk4_sparse_cpp-0.2.3-cp39-cp39-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a8660bfcba057e53db6ec1a4fc3d9def307b7d4e3eec8417c3805b5948e5a5cc",
                "md5": "0614ba60069941016db7bea88d488f83",
                "sha256": "23e9b37251ed7e18b28675368df9c382b9088f71486022d9cf920989a51735fb"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp39-cp39-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "0614ba60069941016db7bea88d488f83",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1233154,
            "upload_time": "2025-07-16T11:51:51",
            "upload_time_iso_8601": "2025-07-16T11:51:51.324159Z",
            "url": "https://files.pythonhosted.org/packages/a8/66/0bfcba057e53db6ec1a4fc3d9def307b7d4e3eec8417c3805b5948e5a5cc/rk4_sparse_cpp-0.2.3-cp39-cp39-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "06a32a31c5aeca2ba4b82915151c91d60b612c6eafbefcf9c8ce0d4fa54321b3",
                "md5": "eb9fc72ebb70c98fb0dbfdd75f8ff480",
                "sha256": "53228f3a4f7ac01c0d4202cad69b02b95d9740bb830e3f14f0362adc7f5ed950"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "eb9fc72ebb70c98fb0dbfdd75f8ff480",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 1304615,
            "upload_time": "2025-07-16T11:51:52",
            "upload_time_iso_8601": "2025-07-16T11:51:52.378826Z",
            "url": "https://files.pythonhosted.org/packages/06/a3/2a31c5aeca2ba4b82915151c91d60b612c6eafbefcf9c8ce0d4fa54321b3/rk4_sparse_cpp-0.2.3-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "58844d2eb90cb8523e70eb09813c7aa3d1613e8a763625906a6d9a827abd3405",
                "md5": "213b4afbc1791dba3e4b137596ea17f5",
                "sha256": "3ce40a748368f6303f888d696a175264821ea40dbaf195a234bc9536bd79e1a5"
            },
            "downloads": -1,
            "filename": "rk4_sparse_cpp-0.2.3.tar.gz",
            "has_sig": false,
            "md5_digest": "213b4afbc1791dba3e4b137596ea17f5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 2712703,
            "upload_time": "2025-07-16T11:51:53",
            "upload_time_iso_8601": "2025-07-16T11:51:53.514419Z",
            "url": "https://files.pythonhosted.org/packages/58/84/4d2eb90cb8523e70eb09813c7aa3d1613e8a763625906a6d9a827abd3405/rk4_sparse_cpp-0.2.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-16 11:51:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "1160-hrk",
    "github_project": "rk4-sparse-cpp",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "pybind11",
            "specs": [
                [
                    ">=",
                    "2.10"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    ">=",
                    "7.0"
                ]
            ]
        },
        {
            "name": "cmake",
            "specs": [
                [
                    ">=",
                    "3.14"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": []
        },
        {
            "name": "scipy",
            "specs": []
        }
    ],
    "lcname": "rk4-sparse-cpp"
}
        
Elapsed time: 1.72727s