QuTiP Quantum Systems Library - GSoC 2025 Final Work Product
Student: Vanshaj Bindal
Organization: QuTiP - Quantum Toolbox in Python, NumFOCUS
Mentors: Eric Giguere, Neill Lambert, Alex Pitchford, Simon Cross
Project Duration: June 2025 - September 2025
Project Overview
What This Library Enables
The QuTiP Quantum Systems Library provides a unified interface for creating, configuring, and simulating realistic open quantum systems. Instead of manually constructing operators, Hamiltonians, and collapse operators for each quantum system, researchers can now use factory functions that return complete, ready to use quantum systems with a single function call.
Before this library:
# Manual construction for Jaynes-Cummings model
# Operators
 N = 4  # Cavity states
a = qt.tensor(qt.destroy(N), qt.qeye(2))
sm = qt.tensor(qt.qeye(N), qt.destroy(2))
# Collapse Operators
c_ops = [np.sqrt(kappa * (1 + n)) * a, 
        np.sqrt(kappa * n) * a.dag(),
        np.sqrt(gamma) * sm,
        np.sqrt(gamma_phi) * qt.tensor(qt.qeye(N), qt.sigmaz())]
# Hamiltonian
H = omega_c * a.dag() * a + omega_a * sm.dag() * sm + g * (a.dag() * sm + a * sm.dag())With this library:
# Complete system with one function call
jc = quantum_systems.jaynes_cummings(omega_c=1.0, omega_a=1.0, g=0.1, 
    n_cavity=10,cavity_decay=0.01, atomic_decay=0.005)
# Everything ready: jc.hamiltonian, jc.c_ops, jc.operators, jc.latexKey Achievements
- Unified Architecture: Created a general QuantumSystemclass that works across all quantum models
- Factory Function Pattern: Implemented the QuTiP-style approach using functions that return configured objects
- Time-Dependent Support: Integrated QuTiP’s Coefficientobjects for time-varying parameters
- Complete Open Systems: Every model includes both coherent dynamics and realistic dissipation mechanisms
- Enhanced User Experience: Jupyter-optimized LaTeX rendering and comprehensive documentation
- Production Quality: Extensive testing, code review, and integration with QuTiP’s development workflow
Integration with QuTiP
The library seamlessly integrates with QuTiP’s existing ecosystem:
- Solver Compatibility: All quantum systems work directly with mesolve,sesolve, andmcsolve
- Object Standards: Returns standard QuTiP Qobjoperators and Hamiltonians
- Documentation Integration: Follows QuTiP’s Sphinx documentation framework
- Testing Framework: Comprehensive test suites following QuTiP’s quality standards
Quantum Systems Library
Architecture Design
QuantumSystem Class
The foundation is a general QuantumSystem class that provides a consistent interface across all quantum models:
class QuantumSystem:
    def __init__(self, hamiltonian: Qobj, name: str = "Quantum System",
                 operators: dict = None, c_ops: list = None,
                 latex: str = "", **kwargs):
        self.name = name
        self.parameters = kwargs
        self.hamiltonian = hamiltonian
        self.operators = operators if operators is not None else {}
        self.c_ops = c_ops if c_ops is not None else []
        self.latex = latex
    @property
    def dimension(self) -> list:
        """Get Hilbert space dimension"""
        
    @property
    def eigenvalues(self) -> np.ndarray:
        """Get eigenvalues of the Hamiltonian"""
        
    @property
    def eigenstates(self) -> tuple:
        """Get eigenvalues and eigenstates"""
        
    @property
    def ground_state(self) -> Qobj:
        """Get ground state"""
        
    def pretty_print(self):
        """Pretty print system information with LaTeX rendering in Jupyter"""
        
    def __repr__(self):
        """String representation"""
        
    def _repr_latex_(self):
        """Automatic LaTeX representation for Jupyter notebooks"""Key Features:
- Unified Interface: Same attribute access pattern for all quantum systems
- Parameter Storage: Automatic storage and retrieval of system parameters
- LaTeX Integration: Intelligent LaTeX rendering with environment detection
- Jupyter Optimization: Enhanced display capabilities for interactive research
Factory Function Pattern
Following QuTiP’s design philosophy (like qt.basis() and qt.coherent()), quantum systems are created through factory functions:
def jaynes_cummings(
    omega_c: Union[float, Coefficient] = 1.0,
    omega_a: Union[float, Coefficient] = 1.0,
    g: Union[float, Coefficient] = 0.1,
    n_cavity: int = 10,
    rotating_wave: bool = True,
    cavity_decay: Union[float, Coefficient] = 0.0,
    atomic_decay: Union[float, Coefficient] = 0.0,
    atomic_dephasing: Union[float, Coefficient] = 0.0,
    thermal_photons: float = 0.0) -> QuantumSystem:
    
    # Build operators, Hamiltonian, and collapse operators
    # ... (construction logic) ...
    
    return QuantumSystem(
        hamiltonian=hamiltonian,
        name="Jaynes-Cummings",
        operators=operators,
        c_ops=c_ops,
        latex=latex,
        omega_c=omega_c,
        omega_a=omega_a,
        g=g,
        n_cavity=n_cavity,
        rotating_wave=rotating_wave,
        cavity_decay=cavity_decay,
        atomic_decay=atomic_decay,
        atomic_dephasing=atomic_dephasing,
        thermal_photons=thermal_photons
    )This approach provides:
- Familiar Interface: Consistent with existing QuTiP patterns
- Type Safety: All functions return QuantumSystemobjects
- Extensibility: Easy to add new quantum models following the same pattern
Time-Dependent Parameters
Full integration with QuTiP’s Coefficient objects enables time-dependent quantum systems:
# Time-dependent coupling strength
g_coeff = coefficient("g0 * sin(omega_d * t)", args={'g0': 0.1, 'omega_d': 2.0})
jc = quantum_systems.jaynes_cummings(omega_c=1.0, omega_a=1.0, g=g_coeff)
# Ready for time-dependent evolution
result = mesolve(jc.hamiltonian, psi0, times, jc.c_ops)Available Models
Jaynes-Cummings Model
Physics and Applications: The Jaynes-Cummings model describes the fundamental interaction between a two-level atom and a single mode of the electromagnetic field. It’s essential for cavity QED, trapped ions, circuit QED, and quantum optics experiments.
Hamiltonian:
H = \omega_c a^\dagger a + \frac{\omega_a}{2}\sigma_z + g(a^\dagger\sigma_- + a\sigma_+) \quad \text{[with RWA]}
H = \omega_c a^\dagger a + \frac{\omega_a}{2}\sigma_z + g(a^\dagger + a)(\sigma_+ + \sigma_-) \quad \text{[without RWA]}
Usage and Parameters:
jc = quantum_systems.jaynes_cummings(
    omega_c=1.0,           # Cavity frequency
    omega_a=1.0,           # Atomic frequency  
    g=0.1,                 # Coupling strength
    n_cavity=10,           # Hilbert space truncation
    rotating_wave=True,    # Apply rotating wave approximation
    cavity_decay=0.01,     # Photon loss rate (kappa)
    atomic_decay=0.005,    # Spontaneous emission rate (gamma)
    atomic_dephasing=0.01, # Dephasing rate (gamma_phi)
    thermal_photons=0.1    # Thermal environment (n_th)
)Complete Operator Set:
- Cavity: a, a^\dagger, n_c
- Atomic: \sigma_x, \sigma_y, \sigma_z, \sigma_+, \sigma_-
Realistic Dissipation:
- Cavity decay with thermal enhancement: \sqrt{\kappa(1+\bar{n})}a
- Thermal excitation: \sqrt{\kappa\bar{n}}a^\dagger
- Atomic spontaneous emission: \sqrt{\gamma}\sigma_-
Linear Spin Chains
Physics and Applications: Linear spin chains model interacting spin-1/2 particles and are fundamental to understanding quantum magnetism, many-body localization, quantum phase transitions, and quantum simulation with trapped ions or superconducting qubits.
Supported Models:
- Heisenberg Model: H = J\sum_{\langle i,j \rangle} \vec{S}_i \cdot \vec{S}_j = J\sum_{\langle i,j \rangle} (S_i^x S_j^x + S_i^y S_j^y + S_i^z S_j^z) 
- XXZ Model: H = J\sum_{\langle i,j \rangle}(S_i^x S_j^x + S_i^y S_j^y) + J_z\sum_{\langle i,j \rangle}S_i^z S_j^z + \sum_i (B_x S_i^x + B_y S_i^y + B_z S_i^z) 
- XY Model: H = J\sum_{\langle i,j \rangle}(S_i^x S_j^x + S_i^y S_j^y) + \sum_i (B_x S_i^x + B_y S_i^y + B_z S_i^z) 
- Ising Model: H = J\sum_{\langle i,j \rangle}S_i^z S_j^z + \sum_i (B_x S_i^x + B_y S_i^y + B_z S_i^z) 
where \langle i,j \rangle denotes nearest-neighbor pairs and \vec{B} = (B_x, B_y, B_z) is the external magnetic field.
Usage and Parameters:
chain = quantum_systems.linear_spin_chain(
    model_type="heisenberg",    # Model selection
    N=6,                        # Number of spins
    J=1.0,                      # XY coupling strength
    Jz=1.0,                     # Z coupling (anisotropy)
    boundary_conditions="open", # "open" or "periodic"
    B_x=0.0, B_y=0.0, B_z=0.1,  # External fields
    gamma_relaxation=0.01,      # T1 processes
    gamma_dephasing=0.005,      # T2* processes
    gamma_thermal=0.02,         # Thermal bath coupling
    temperature=0.1             # Bath temperature
)Rich Operator Set:
- Individual spins: S_0_x,S_1_z, etc.
- Total operators: S_x_total,magnetization
- Correlations: correlation_xx_nn,correlation_zz_nn
Many-Body Dissipation:
- Local relaxation on each site
- Thermal detailed balance for finite temperature
- Depolarizing channels for complete decoherence
Two-Level Systems (Qubits)
Physics and Applications: The fundamental building block of quantum computation and quantum optics. Essential for modeling individual qubits, atomic systems, and as components in larger quantum systems.
Hamiltonian: H = \frac{\omega}{2}\sigma_z
where \omega is the transition frequency and \sigma_z is the Pauli-Z matrix.
Usage and Parameters:
qubit = quantum_systems.qubit(
    omega=1.0,              # Transition frequency
    decay_rate=0.01,        # T1 relaxation rate
    dephasing_rate=0.005    # T2* dephasing rate
)Standard Operators:
- Pauli matrices: sigma_x,sigma_y,sigma_z
- Ladder operators: sigma_plus,sigma_minus
Tutorials and Learning Resources
Jaynes-Cummings Tutorial
Location: qutip-tutorials/tutorials-v5/quantum-system/JCM_Tutorial.md (Branch: dev.qsystem)
Status: Merged, qutip-tutorials PR #139
Comprehensive tutorial covering:
- Basic usage and parameter exploration
- Rabi oscillations and vacuum Rabi splitting
- Cavity decay and thermal effects
- Time-dependent parameter examples
- Comparison with traditional QuTiP approaches
Ising Model and Phase Transitions Tutorial
Status: Near completion, ready for PR submission
Advanced tutorial exploring:
- Classical Ising model to quantum TFIM transition
- Quantum phase transition mapping and critical phenomena
- Magnetization dynamics and correlation analysis
- Finite-size effects and scaling behavior
- Applications to quantum simulation and many-body physics
Jaynes-Cummings-Hubbard Model Tutorial
Location: qutip-tutorials/tutorials-v5/miscellaneous/JCHM-tutorial.md
Status: Merged, qutip-tutorials PR #130
Advanced tutorial exploring the intersection of quantum optics and condensed matter physics:
- Three-site JCHM implementation with QuTiP tensor products
- Ground state analysis and polariton formation
- Quantum dynamics and photon propagation visualization
- Phase transition signatures from Mott insulator to superfluid phases
- Effects of detuning and coupling strength variations
- Applications to quantum simulation and cavity QED arrays
Getting Started (User) Guide
Location: qutip/doc/guide/guide-quantum-systems.rst (Branch: dev.qsystem)
Status: Final review, PR #2746
User guide including:
- Installation and setup
- Basic usage patterns
- Common use cases and examples
- Integration with existing QuTiP workflows
Technical Implementation
Code Integration (PRs and Merges)
Core Infrastructure
- PR #2708: QuantumSystem class, factory functions (Jaynes-Cummings, qubit), and testing files
- Status: Successfully merged into dev.qsystembranch
- Features: Complete architecture with time-dependent support and LaTeX integration
Spin Chain Models
- PR #2730: Linear spin chain implementation
- Status: Review feedback addressed, ready for final approval
- Features: Four interaction models with complete many-body dissipation
Documentation Integration
- PR #2746: API documentation and Sphinx integration
- Status: Review feedback addressed, ready for final approval
- Featured: User Guide and API Documentation
Tutorial Resources
- PR #139: Jaynes-Cummings tutorial
- Status: Successfully merged into dev.qsystembranch
Testing Framework
Comprehensive test coverage ensuring reliability:
Test Suites:
Location: qutip/qutip/tests/quantum_systems (Branch: dev.qsystem)
- test_quantum_system.py
- test_jaynes_cummings.py
- test_qubit.py
- test_linear_spin_chain.py
Quality Metrics:
- All tests pass on QuTiP’s CI/CD pipeline
- Comprehensive coverage of user-facing functionality
- Performance testing for large many-body systems
QuTiP Solver Compatibility
Current Compatibility: All quantum systems work seamlessly with existing QuTiP solvers:
# Direct usage with any QuTiP solver
jc = quantum_systems.jaynes_cummings(...)
result = mesolve(jc.hamiltonian, psi0, times, jc.c_ops)
result = sesolve(jc.hamiltonian, psi0, times)
result = mcsolve(jc.hamiltonian, psi0, times, jc.c_ops)Future Enhancement (Planned): Direct QuantumSystem object support:
# Future capability
result = mesolve(jc, psi0, times)  # Automatic H and c_ops extractionFuture Work and Contributions
Planned Extensions
Additional Quantum Models:
- Harmonic oscillator systems
- Dicke model for collective light-matter interactions
- Tavis-Cummings model for multi-atom cavity systems
Enhanced Features:
- Initial state dictionaries (ground states, thermal states, coherent states)
- Solver integration with automatic QuantumSystemdetection
- Visualization tools for quantum system properties
How to Use and Contribute
- Once we integrate the direct QuantumSystemobject support inmesolve,sesolveandmcsolve, thedev.qsystembranch will be merged intomasterbranch.
- Before that happens people can use the dev.qsystembranch to access the quantum system library and contribute to the same. (though it won’t be too long before we merge to the main branch)
Project Impact and Conclusion
The QuTiP Quantum Systems Library brings improvements to the QuTiP ecosystem by offering researchers sophisticated tools for simulating realistic open quantum systems more easliy. This library hides the complexity of operator construction behind simple interfaces while preserving complete access to the underlying physics, allowing researchers to quickly explore quantum phenomena across various research areas.
The factory function design demonstrates that complex quantum systems can be made user friendly without compromising functionality or performance. Through thorough testing, detailed documentation, and educational tutorials, this library will function as a dependable resource for the quantum physics community, supporting both learning and advanced research applications.
Key Deliverables:
- Complete, tested, and merged quantum systems library
- Three fully implemented quantum models with realistic dissipation
- Comprehensive tutorials for education and research
- Production quality code following QuTiP standards
- Time-dependent parameter support for advanced simulations
- Enhanced user experience with Jupyter integration
This work creates a solid foundation for future expansion, establishing clear guidelines for extending QuTiP’s capabilities to encompass the complete range of quantum systems used in contemporary quantum physics research.
Student Contact: GitHub | Email
Project Repository: QuTiP dev.qsystem branch