hybridlane
hybridlane is a Python library for designing and manipulating hybrid continuous-variable (CV) and discrete-variable (DV) quantum circuits within the PennyLane ecosystem. It provides a frontend for expressing hybrid quantum algorithms, implementing the concepts from the paper Y. Liu et al, 2026 (PRX Quantum 7, 010201).
🚀 Features¶
⚛️ Heterogeneous quantum circuits: Mix qubits and qumodes in the same circuit, and use our symbolic hybrid gate library to scalably build quantum algorithms.
🤝 PennyLane compatibility: Utilize existing PennyLane gates, write compilation passes as transforms, build custom hybrid backends for hardware, and perform resource estimation across mixed-variable systems.
💻 Classical simulation: Dispatch to our Jax-compatible simulator for accelerated CPU and GPU simulation and take gradients using automatic differentiation, or use Bosonic Qiskit.
💾 OpenQASM-based IR: Leverage our intermediate representation extending OpenQASM to reduce the effort of building new hybrid backends and to facilitate interoperability with other quantum software.
⚙️ Installation¶
Install the package from PyPI:
pip install hybridlane
For more details on installation and optional dependencies, see the installation guide.
Warning
hybridlane is currently in active development and may experience breaking changes – consider using version pinning. We welcome your feedback on our GitHub Issues page to help us improve the software.
⚡ Quick Start¶
import numpy as np
import pennylane as qp
import hybridlane as hl
# Create a simulator with a custom Fock truncation
dev = qp.device("default.hybrid", fock_level=8)
# Define a hybrid circuit with familiar PennyLane syntax
@qp.qnode(dev)
def circuit(n):
for j in range(n):
qp.X(0) # Wire `0` is inferred to be a qubit
# Use hybrid CV-DV gates from hybridlane
hl.JC(np.pi / (2 * np.sqrt(j + 1)), np.pi / 2, [0, "m"])
# Mix qubit and qumode observables
return hl.expval(hl.N("m") @ qp.Z(0))
# Execute the circuit
expval = circuit(5)
# array(5.)
# Perform wire type checking
res = hl.type_check(circuit)(5)
print(res.wire_types)
# OrderedDict({0: Qubit(), 'm': Qumode()})
For more examples, explore the documentation.
🗺️ Roadmap¶
hybridlane is under active development. Here are some of our future goals:
Broader measurement support: Including mid-circuit measurements and broader measurement capabilities.
Algorithms and transformations: Implementing popular algorithms and circuit transformations from research papers, including dynamic qumode allocation.
Symbolic Hamiltonians: Introducing support for symbolic bosonic Hamiltonians.
Noisy simulation: Supporting noisy quantum simulations, possibly with Dynamiqs.
Catalyst/QJIT support: Integrating with PennyLane’s
qjitcapabilities by developing a custom MLIR dialect.Community-driven features: Incorporating features requested by the community during usage.
Citing hybridlane¶
If you find hybridlane useful in your research, you can cite our paper:
@misc{furches2026hybridlane,
title={Hybridlane: A Software Development Kit for Hybrid Continuous-Discrete Variable Quantum Computing},
author={Jim Furches and Timothy J. Stavenger and Carlos Ortiz Marrero},
year={2026},
eprint={2603.10919},
archivePrefix={arXiv},
primaryClass={quant-ph},
url={https://arxiv.org/abs/2603.10919},
}
📜 License¶
This project is licensed under the BSD 2-Clause License - see the LICENSE.txt file for details.
🙏 Acknowledgements¶
This project was supported by the U.S. Department of Energy, Office of Science, Advanced Scientific Computing Research program under contract number DE-FOA-0003265.