qutip について
qutip は、QuTiP 5 を使った有限次元量子力学と量子光学のモデリングを支援するスキルです。研究者やシミュレーション利用者向けに、物理モデルに応じたソルバー選択と、単位・状態の妥当性・収束性の確認を案内します。
主な機能
- 01開放系・閉鎖系のソルバー選択
- 02軌道法と確率ソルバーのガイダンス
- 03Floquet、HEOM、PIQS の手法
- 04状態・単位・テンソル次元の確認
- 05ローカル JSON 検証・シミュレーションツール
活用シーン
- 01Lindblad 開放系のダイナミクスのシミュレーション
- 02周期駆動または構造化浴モデルの解析
- 03量子状態とモデルパラメーターの検証
- 04収束スイープの実行と結果の監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill qutipインストール後、Claude Code で/qutipを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/advanced.mdanalysis.mdcore_concepts.mdtime_evolution.mdvisualization.mdscripts/_common.pyconvergence_sweep.pyqobj_model_validator.pyresult_audit.pysolver_config_planner.pysteady_state_spectrum_planner.pytwo_level_simulation.py詳細
QuTiP 5
対象範囲
QuTiP は、有限次元量子力学、量子光学、Lindblad ダイナミクス、軌跡、弱結合 Bloch-Redfield モデル、および特殊な Floquet、HEOM、置換不変性の手法に使用します。ハードウェア実行用 SDK ではありません。回路および制御機能は、QuTiP ファミリーの別パッケージに移行しました。
このスキルの対象は、2026-05-22 にリリースされた QuTiP 5.3.0 です。QuTiP 5.3 には Python 3.11 以降が必要です。必須のディストリビューションは NumPy(>=1.23.2)、SciPy(>=1.9.2、ただし 1.16.0 および 1.17.0 は除く)、packaging です。
再現可能な uv スナップショット
専用の環境を作成し、直接依存するすべてのディストリビューションのバージョンを固定します。
uv venv --python 3.11
uv pip install "qutip==5.3.0"
プロットには、次を使用します。
uv pip install "qutip[graphics]==5.3.0"
QuTiP ファミリーのオプションパッケージは、それぞれ独立したバージョン管理になっています。
uv pip install "qutip-qip==0.4.2"
uv pip install "qutip-qtrl==0.2.0"
uv pip install "qutip-jax==0.1.1"
qutip-qip0.4.2(2026-06-23)は、回路、ゲート、ノイズのあるデバイスのシミュレーションに使用する、安定版の本番向けパッケージです。qutip.qipではなく、qutip_qipからインポートしてください。qutip-qtrl0.2.0(2026-06-23)は、GRAPE および CRAB による量子最適制御を提供します。軌跡ビューアーではありません。qutip.controlではなく、qutip_qtrlからインポートしてください。PyPI では現在も pre-alpha に分類されています。qutip-jax0.1.1(2025-05-29)は、GPU および自動微分の実験向けの公式 JAX データバックエンドです。明示的に pre-alpha とされています。qutip-cupyは QuTiP 組織の公式リポジトリですが、PyPI リリースはなく、README にも公式リリースではないと記載されています。再現可能なワークフローには、未リリースの Git インストールを含めないでください。
推移的依存関係の構成も固定する必要がある場合は、プロジェクトのロックファイルを使用するか、ハッシュを生成する uv pip compile ワークフローを使用してください。
必ず守るモデル契約
計算を行う前に、次の事項を記録します。
- 単位と規約。 QuTiP の方程式では通常、(\hbar=1) とします。ハミルトニアンの要素は角周波数であり、レートの単位は時間の逆数です。周波数 (f) は (2\pi f) で変換し、Hz と rad/s を混在させないでください。
- 部分系の順序。
tensor(A, B, C)によって部分系のインデックス0, 1, 2が決まります。すべての状態、演算子、崩壊チャネル、部分トレースでこの順序を維持してください。obj.ptrace([0, 2])は該当する部分系を残します。トレースアウトするわけではありません。 - 状態の妥当性。 ケットのノルム、または密度行列のエルミート性、単位トレース、および明示した負の許容誤差を超える固有値を確認してください。ごく小さな負の値は数値誤差の可能性がありますが、無視できない負値がある場合、状態が妥当であるという主張はできません。
- 生成子の意味。 レート
gammaの Lindblad チャネルは、gamma * Aではなくsqrt(gamma) * Aで表します。それぞれのレートが何を測定するかを定義してください。たとえば、sqrt(gamma_phi / 2) * sigmaz()はコヒーレンスの減衰exp(-gamma_phi * t)を与えます。 - 近似。 使用する場合は、回転波近似、Born-Markov 近似、永年近似、弱結合近似、浴の平衡状態、切り捨て、対称性、および初期状態の因子化に関する仮定を明記してください。
- 数値計算。 ヒルベルト空間の切り捨て、出力グリッド、積分法、許容誤差、軌跡の数、および乱数シードの根拠を示してください。
result.statsを報告してください。 - 収束性。 該当するものについて、Fock 次元、時間/周波数の範囲と刻み幅、ODE 許容誤差、軌跡数、Floquet 高調波、HEOM の深さと浴の指数、または PIQS 表現など、すべての人工的なカットオフについてスイープを行ってください。
Qobj、次元、テンソルの順序
明示的なインポートを優先し、形状と構造化された次元の両方を確認してください。
from qutip import basis, qeye, sigmaz, tensor
psi = tensor(basis(2, 0), basis(3, 1))
z_on_first = tensor(sigmaz(), qeye(3))
assert psi.shape == (6, 1)
assert psi.dims == [[2, 3], [1]]
assert z_on_first.dims == [[2, 3], [2, 3]]
rho_first = psi.proj().ptrace(0) # keep subsystem 0
行列の形状だけでは不十分です。どちらも 6×6 のオブジェクトであっても、異なるテンソル分解を表すことがあります。複合系、スーパーオペレーター、またはチャネルのモデルを構築する前に、references/core_concepts.md を読んでください。
物理系に応じてソルバーを選択する
| モデル | 現在の API | 必要な根拠 |
|---|---|---|
| 閉じた純粋なユニタリ系 | sesolve | エルミートなハミルトニアンであり、散逸がないこと |
| Lindblad/開放系または混合状態 | mesolve | マルコフ型の完全正値モデルとチャネル速度 |
| 量子ジャンプ | mcsolve | アンラベリング、軌道の収束、シード |
| 微視的な弱結合浴 | brmesolve | Born-Markov/弱結合、スペクトル、永年近似の選択 |
| 拡散的測定 | ssesolve、smesolve | 監視対象チャネルと非監視チャネル |
| 周期駆動 | FloquetBasis、fsesolve、fmmesolve | 周期を検証し、Floquet 収束を確認していること |
| 構造化された非マルコフ型浴 | qutip.solver.heom | 浴の展開と階層の収束 |
| 対称なスピン集団 | qutip.piqs | 置換対称性と基底の選択 |
単に存在するという理由だけで、より特化したソルバーを選択しないでください。
決定論的な開放系の例
QuTiP 5.3 では通常のオプション辞書を使用します。ソルバーの制御項目、e_ops、および
args はキーワード専用です。以前の可変なオプションオブジェクトは廃止されました。
import numpy as np
from qutip import basis, mesolve, sigmam, sigmaz
omega = 2.0
gamma = 0.15
tlist = np.linspace(0.0, 20.0, 401)
excited = basis(2, 0)
result = mesolve(
0.5 * omega * sigmaz(),
excited,
tlist,
c_ops=[np.sqrt(gamma) * sigmam()],
e_ops={"sigma_z": sigmaz(), "excited": excited.proj()},
options={
"method": "adams",
"atol": 1e-10,
"rtol": 1e-8,
"store_final_state": True,
"progress_bar": "",
},
)
population = np.asarray(result.e_data["excited"])
assert np.max(np.abs(population - np.exp(-gamma * tlist))) < 2e-6
assert isinstance(result.stats, dict)
問題がスティッフな場合は、bdf または lsoda と比較してください。許容誤差と不変量の
チェックを再実行せずに、積分器を変更しないでください。QuTiP 5.3 は mesolve で
options={"matrix_form": True} もサポートしています。これを既定値として使用する前に、
ベンチマークを行い、妥当性を検証してください。
時間依存系
信頼できる Python 形式の呼び出し可能オブジェクトまたは数値係数配列を優先してください。 ユーザー入力から係数のソース文字列を作成しないでください。
import numpy as np
from qutip import QobjEvo, sigmax, sigmaz
def envelope(t, amplitude, center, width):
return amplitude * np.exp(-0.5 * ((t - center) / width) ** 2)
H = QobjEvo(
[0.5 * sigmaz(), [sigmax(), envelope]],
args={"amplitude": 0.2, "center": 5.0, "width": 1.0},
)
instantaneous_H = H(5.0)
H.arguments(amplitude=0.1)
従来の f(t, args) 係数シグネチャは 5.3 で非推奨となり、5.5 で削除される予定です。
references/time_evolution.md を参照してください。
軌道と確率ソルバー
import numpy as np
from qutip import basis, mcsolve, sigmam, sigmaz
tlist = np.linspace(0.0, 10.0, 201)
result = mcsolve(
0.5 * sigmaz(),
basis(2, 0),
tlist,
[np.sqrt(0.2) * sigmam()],
e_ops=[basis(2, 0).proj()],
ntraj=400,
seeds=20260723,
options={"keep_runs_results": False, "progress_bar": ""},
)
ntraj、result.seeds、不確実性またはシードを変えて繰り返した場合の感度、および
個々の実行結果を保持したかどうかを報告してください。対応する軌道を意図している場合に
限り、seeds=previous_result.seeds を再利用してください。ssesolve と smesolve では
レガシーの整数ノイズコードではなく、ブール値の heterodyne 引数を使用します。
定常状態、スペクトル、位相空間
import numpy as np
from qutip import QFunc, liouvillian, operator_to_vector, qfunc, steadystate
rho_ss = steadystate(H, c_ops, method="direct")
residual = (liouvillian(H, c_ops) * operator_to_vector(rho_ss)).norm()
assert residual < 1e-9
xvec = np.linspace(-5.0, 5.0, 151)
Q_once = qfunc(rho_ss, xvec, xvec)
q_many = QFunc(xvec, xvec)
Q_again = q_many(rho_ss)
assert Q_once.shape == (len(xvec), len(xvec))
wigner、qfunc、QFunc では、配列要素 [j, k] は
yvec[j]、xvec[k] に対応します。QuTiP 5.3 では、QFunc は固定座標で初期化し、
状態を指定して呼び出します。.eval メソッドはありません。このスキルでは、
Python の動的コード実行を一切使用しません。references/visualization.md に記載されている
plot_wigner、Result.plot_expect、または明示的な Matplotlib 軸を優先してください。
直接呼び出す spectrum は定常状態のスペクトルです。有限な相関関数の FFT では、
裾の減衰、時間刻みによるエイリアシング、周波数分解能、窓関数への依存性、
および変換規約を明示的に確認する必要があります。references/analysis.md を
参照してください。
高度な機能の範囲
- HEOM は
qutip.solver.heomからインポートしてください。QuTiP 4 の従来の nonmarkov HEOM 名前空間は古くなっています。 - モードと準エネルギーには
FloquetBasisを使用してください。H(t + T) == H(t)を数値的に検証し、基底や切り捨て方の選択を変えて確認してください。 - PIQS には
from qutip import piqsでアクセスしてください。Dicke.pisolveは最適化された 対角状態/対角ハミルトニアン向けの方法に限られます。一般的な Dicke 基底のダイナミクスには Liouvillian とmesolveを使用してください。 brmesolveは、特に永年近似を行わない場合、正値性に違反することがあります。時間経過に伴う 密度行列の固有値を確認してください。- QIP と最適制御は拡張パッケージの対象です。ローカルシミュレーションを量子ハードウェア上での 実行として示してはいけません。
HEOM、Floquet、PIQS、確率的手法、および拡張機能の適用範囲については、
references/advanced.md を参照してください。
安全なローカル CLI
同梱されているすべてのツールはローカル専用で、厳密な JSON を出力し、有限でない値を含む JSON と未知のキーを拒否します。また、pickle ファイルや実行可能なモデルコードを読み込むことはありません。シミュレーションのインポートは遅延されるため、QuTiP がインストールされていなくても、すべての --help が機能します。
| スクリプト | 目的 |
|---|---|
scripts/qobj_model_validator.py | 範囲制限付き Qobj モデルの JSON、次元、状態、レート、ロールの互換性を検証します |
scripts/two_level_simulation.py | 範囲制限付きの 2 準位リンドブラッドシミュレーションまたはジャンプシミュレーションを実行します |
scripts/solver_config_planner.py | 現行のソルバーとオプション/チェックリストの計画を選択します |
scripts/convergence_sweep.py | 合成モデルで許容誤差/グリッドサイズ、または軌道数を変えて実行します |
scripts/result_audit.py | Python オブジェクトをデシリアライズせずに JSON 出力を監査します |
scripts/steady_state_spectrum_planner.py | 範囲制限付きの定常状態チェックと直接/FFT スペクトルチェックを計画します |
例:
python skills/qutip/scripts/two_level_simulation.py --help
python skills/qutip/scripts/two_level_simulation.py \
--decay-rate 0.2 --t-final 10 --time-points 201 \
--output two-level.json
python skills/qutip/scripts/result_audit.py two-level.json
完了チェックリスト
- 単位、(\hbar)、テンソルの順序、初期状態、チャンネル、モデルの前提を記録します。
- エルミート性、ノルム/トレース、正値性、次元、生成子の単位を検証します。
- QuTiP と直接拡張を固定し、プラットフォーム、Python、NumPy、SciPy を記録します。
- 結果のオプションと統計情報を確認し、状態が保存されていると決めつけないでください。
- 打ち切り、グリッド、許容誤差/積分器、確率的収束のスイープを実施します。
- 移植可能な数値/設定の概要を JSON またはテキストで保存します。信頼できない QuTiP オブジェクト/結果ファイルは読み込まないでください。オブジェクトのシリアライズはコードを実行する可能性があります。
リファレンス
references/core_concepts.md— Qobj、次元、テンソル積、状態、チャンネル、単位の規約references/time_evolution.md— 現行ソルバーのシグネチャ、オプション、結果、QobjEvo、軌道、数値制御references/analysis.md— 物理状態の監査、定常状態、相関、スペクトル、収束references/visualization.md— Wigner、Q 関数、QFunc、Bloch、結果、行列のプロットreferences/advanced.md— Bloch-Redfield、確率的手法、Floquet、HEOM、PIQS、QuTiP ファミリーパッケージの境界
日付付きの公式ソース
検証日:2026-07-23