The Unitary Compiler Collection (UCC) is a Python library for frontend-agnostic, high performance compilation of quantum circuits. UCC's goal is to gather together the best of open source compilation to make quantum programming simpler, faster, and more scalable.
By leveraging qBraid, UCC interfaces automatically with multiple quantum computing frameworks, including Qiskit, Cirq, and PyTKET and supports programs in OpenQASM 2 and OpenQASM 3. For the full list, just call ucc.supported_circuit_formats.
We use the Merit Terminal to pay contributors who implement new compiler passes in our repo!
Check out our open issues tagged with #merit-bounty to see which are eligible for compensation.
| Resource | Description |
|---|---|
| Documentation 📂 | Check out our documentation for more information about UCC. |
| Discussions 🎤 | For detailed code, repo, or theory questions. |
| Discord 🏢 | For casual or time-sensitive questions. |
| Changelog 📋 | See the latest updates and release notes. |
| Research publications 📚 | Explore academic work utilizing UCC. |
Note: UCC requires Python version ≥ 3.12.
For normal users of UCC, you can install via pip as
pip install uccIf developing, including if building custom transpiler passes, please install uv, which is used to managed dependencies and ensure a reproducible development enviroment. Once uv is installed, setup your development environment via
git clone https://github.com/unitaryfoundation/ucc.git
cd ucc
uv sync --all-extras --all-groupsThis uv sync command ensures the optional developer and documentation dependences are installed. For development with uv, we assume you either prefix each command with uv run, or
you first activate the uv managed virtual environment by running source .venv/bin/activate in your shell.
For more details on using uv, refer to its documentation or this tutorial.
Define a circuit with your preferred quantum SDK and compile it!
from ucc import compile
from pytket import Circuit as TketCircuit
from cirq import Circuit as CirqCircuit
from qiskit import QuantumCircuit as QiskitCircuit
from cirq import H, CNOT, LineQubit
def test_tket_compile():
circuit = TketCircuit(2)
circuit.H(0)
circuit.CX(0, 1)
compile(circuit)
def test_qiskit_compile():
circuit = QiskitCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
compile(circuit)
def test_cirq_compile():
qubits = LineQubit.range(2)
circuit = CirqCircuit(
H(qubits[0]),
CNOT(qubits[0], qubits[1]))
compile(circuit)UCC seeks to provide an end-to-end compiler that works well for the majority of the users out of the box. Today, this is achieved by running a particular subset of Qiskit transpiler passes.
To ensure we continue to improve performance and meet user needs, we regularly run benchmarks comparing UCC against the latest versions of leading quantum compiler frameworks across a range of circuits. Here’s the latest:
And here you can see progress over time, with new package versions labeled for each compiler:
where pytket-peep indicates the
FullPeepHoleOptimize function of PyTKET.
The benchmark code, configurations and raw results from running on specific hardware are maintined in the companion repository of ucc-bench.
To learn more about running these benchmarks, the overall benchmark philosophy, or how to contribute to improving the benchmarking methodology, check out the benchmarking section in the docs or the README.md in ucc-bench.
We’re building UCC as a community-driven project. Your contributions help improve the tool for everyone! There are many ways you can contribute, such as
- 💸 Create a Custom Compiler Pass:💸 Learn how in the User Guide. Eligible for compensation through the Merit Terminal!
- Submit a bug report or feature request: Submit a bug report or feature request on GitHub.
- Contribute Code: Follow the Contribution Guide to submit new passes and improvements.
If you have questions about contributing please ask on the Unitary Foundation Discord.
UCC is distributed under GNU Affero General Public License version 3.0(AGPLv3). Parts of ucc contain code or modified code that is part of Qiskit or Qiskit Benchpress, which are distributed under the Apache 2.0 license.
Thank you to all of the wonderful people that have made this project possible. Non-code contributors are also much appreciated, and are listed here. Thank you to:
- @francespoblete for designing the UCC logo.
Contributions of any kind are welcome!