| name | qutip |
| description | Quantum physics simulation library for open quantum systems. Use when studying master equations, Lindblad dynamics, decoherence, quantum optics, or cavity QED. Best for physics research, open system dynamics, and educational simulations. NOT for circuit-based quantum computing—use qiskit, cirq, or pennylane for quantum algorithms and hardware execution. |
| license | BSD-3-Clause license |
| metadata | {"skill-author":"K-Dense Inc."} |
QuTiP: Quantum Toolbox in Python
Overview
QuTiP provides comprehensive tools for simulating and analyzing quantum mechanical systems. It handles both closed (unitary) and open (dissipative) quantum systems with multiple solvers optimized for different scenarios.
Installation
uv pip install qutip
Optional packages for additional functionality:
uv pip install qutip-qip
uv pip install qutip-qtrl
Quick Start
from qutip import *
import numpy as np
import matplotlib.pyplot as plt
psi = basis(2, 0)
H = sigmaz()
tlist = np.linspace(0, 10, 100)
result = sesolve(H, psi, tlist, e_ops=[sigmaz()])
plt.plot(tlist, result.expect[0])
plt.xlabel('Time')
plt.ylabel('⟨σz⟩')
plt.show()
Core Capabilities
1. Quantum Objects and States
Create and manipulate quantum states and operators:
psi = basis(N, n)
psi = coherent(N, alpha)
rho = thermal_dm(N, n_avg)
a = destroy(N)
H = num(N)
sx, sy, sz = sigmax(), sigmay(), sigmaz()
psi_AB = tensor(psi_A, psi_B)
See references/core_concepts.md for comprehensive coverage of quantum objects, states, operators, and tensor products.
2. Time Evolution and Dynamics
Multiple solvers for different scenarios:
result = sesolve(H, psi0, tlist, e_ops=[num(N)])
c_ops = [np.sqrt(0.1) * destroy(N)]
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])
result = mcsolve(H, psi0, tlist, c_ops, ntraj=500, e_ops=[num(N)])
Solver selection guide:
sesolve: Pure states, unitary evolution
mesolve: Mixed states, dissipation, general open systems
mcsolve: Quantum jumps, photon counting, individual trajectories
brmesolve: Weak system-bath coupling
fmmesolve: Time-periodic Hamiltonians (Floquet)
See references/time_evolution.md for detailed solver documentation, time-dependent Hamiltonians, and advanced options.
3. Analysis and Measurement
Compute physical quantities:
n_avg = expect(num(N), psi)
S = entropy_vn(rho)
C = concurrence(rho)
F = fidelity(psi1, psi2)
D = tracedist(rho1, rho2)
corr = correlation_2op_1t(H, rho0, taulist, c_ops, A, B)
w, S = spectrum_correlation_fft(taulist, corr)
rho_ss = steadystate(H, c_ops)
See references/analysis.md for entropy, fidelity, measurements, correlation functions, and steady state calculations.
4. Visualization
Visualize quantum states and dynamics:
b = Bloch()
b.add_states(psi)
b.show()
xvec = np.linspace(-5, 5, 200)
W = wigner(psi, xvec, xvec)
plt.contourf(xvec, xvec, W, 100, cmap='RdBu')
plot_fock_distribution(psi)
hinton(rho)
matrix_histogram(H.full())
See references/visualization.md for Bloch sphere animations, Wigner functions, Q-functions, and matrix visualizations.
5. Advanced Methods
Specialized techniques for complex scenarios:
T = 2 * np.pi / w_drive
f_modes, f_energies = floquet_modes(H, T, args)
result = fmmesolve(H, psi0, tlist, c_ops, T=T, args=args)
from qutip.nonmarkov.heom import HEOMSolver, BosonicBath
bath = BosonicBath(Q, ck_real, vk_real)
hsolver = HEOMSolver(H_sys, [bath], max_depth=5)
result = hsolver.run(rho0, tlist)
psi = dicke(N, j, m)
Jz = jspin(N, 'z')
See references/advanced.md for Floquet theory, HEOM, permutational invariance, stochastic solvers, superoperators, and performance optimization.
Common Workflows
Simulating a Damped Harmonic Oscillator
N = 20
omega = 1.0
kappa = 0.1
H = omega * num(N)
c_ops = [np.sqrt(kappa) * destroy(N)]
psi0 = coherent(N, 3.0)
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[num(N)])
plt.plot(tlist, result.expect[0])
plt.xlabel('Time')
plt.ylabel('⟨n⟩')
plt.title('Photon Number Decay')
plt.show()
Two-Qubit Entanglement Dynamics
psi0 = bell_state('00')
gamma = 0.1
c_ops = [
np.sqrt(gamma) * tensor(sigmaz(), qeye(2)),
np.sqrt(gamma) * tensor(qeye(2), sigmaz())
]
def compute_concurrence(t, psi):
rho = ket2dm(psi) if psi.isket else psi
return concurrence(rho)
tlist = np.linspace(0, 10, 100)
result = mesolve(qeye([2, 2]), psi0, tlist, c_ops)
C_t = [concurrence(state.proj()) for state in result.states]
plt.plot(tlist, C_t)
plt.xlabel('Time')
plt.ylabel('Concurrence')
plt.title('Entanglement Decay')
plt.show()
Jaynes-Cummings Model
N = 10
wc = 1.0
wa = 1.0
g = 0.05
a = tensor(destroy(N), qeye(2))
sm = tensor(qeye(N), sigmam())
H = wc * a.dag() * a + wa * sm.dag() * sm + g * (a.dag() * sm + a * sm.dag())
psi0 = tensor(coherent(N, 2), basis(2, 0))
kappa = 0.1
gamma = 0.05
c_ops = [np.sqrt(kappa) * a, np.sqrt(gamma) * sm]
n_cav = a.dag() * a
n_atom = sm.dag() * sm
tlist = np.linspace(0, 50, 200)
result = mesolve(H, psi0, tlist, c_ops, e_ops=[n_cav, n_atom])
fig, axes = plt.subplots(2, 1, figsize=(8, 6), sharex=True)
axes[0].plot(tlist, result.expect[0])
axes[0].set_ylabel('⟨n_cavity⟩')
axes[1].plot(tlist, result.expect[1])
axes[1].set_ylabel('⟨n_atom⟩')
axes[1].set_xlabel('Time')
plt.tight_layout()
plt.show()
Tips for Efficient Simulations
- Truncate Hilbert spaces: Use smallest dimension that captures dynamics
- Choose appropriate solver:
sesolve for pure states is faster than mesolve
- Time-dependent terms: String format (e.g.,
'cos(w*t)') is fastest
- Store only needed data: Use
e_ops instead of storing all states
- Adjust tolerances: Balance accuracy with computation time via
Options
- Parallel trajectories:
mcsolve automatically uses multiple CPUs
- Check convergence: Vary
ntraj, Hilbert space size, and tolerances
Troubleshooting
Memory issues: Reduce Hilbert space dimension, use store_final_state option, or consider Krylov methods
Slow simulations: Use string-based time-dependence, increase tolerances slightly, or try method='bdf' for stiff problems
Numerical instabilities: Decrease time steps (nsteps option), increase tolerances, or check Hamiltonian/operators are properly defined
Import errors: Ensure QuTiP is installed correctly; quantum gates require qutip-qip package
References
This skill includes detailed reference documentation:
references/core_concepts.md: Quantum objects, states, operators, tensor products, composite systems
references/time_evolution.md: All solvers (sesolve, mesolve, mcsolve, brmesolve, etc.), time-dependent Hamiltonians, solver options
references/visualization.md: Bloch sphere, Wigner functions, Q-functions, Fock distributions, matrix plots
references/analysis.md: Expectation values, entropy, fidelity, entanglement measures, correlation functions, steady states
references/advanced.md: Floquet theory, HEOM, permutational invariance, stochastic methods, superoperators, performance tips
External Resources