Skip to content

PHOENIX (Pauli-based High-level Optimization ENgine for Instruction eXecution) is an application-specific quantum compiler for Hamiltonian simulation (VQA) programs.

License

Notifications You must be signed in to change notification settings

iqubit-org/phoenix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐦‍🔥 𝑷𝑯𝑶𝑬𝑵𝑰𝑿: Pauli-based High-level Optimization ENgine for Instruction eXecution on NISQ Devices

Overview

Phoenix is a highly-effective VQA (variational quantum algorithm) application-specifc compiler based on BSF (binary symplectic form) of Pauli exponentiations and Clifford formalism. Different from ZX-calculus-like approaches (e.g., TKet, PauliOpt) and local peephole optimization approaches (e.g., Paulihedral, Tetris), Phoenix exploits global optimization opportunities for VQA programs to the largest extent, when representing Pauli strings as BSF and employing Clifford formalism on the higher-level IR.

This repo includes benchmarking scripts and results with other SOTA baselines -- TKet, Paulihedral, Tetris, and Rustiq. Code of Paulihedral and Tetris are refactored and integrated in this repo.

phoenix_qiskit: native qiskit 2.x workflow

The new phoenix_qiskit package re-implements the Phoenix compilation pipeline directly on top of qiskit 2.x data structures. Instead of the bespoke circuit and gate abstractions that powered the original prototype, the module exposes a lightweight façade over qiskit's SparsePauliOp, PauliList, and QuantumCircuit primitives:

from qiskit.quantum_info import SparsePauliOp
from phoenix_qiskit import PhoenixCompiler

op = SparsePauliOp(['XXIII', 'YYIII', 'ZZIII'], [0.5, 0.5, 0.5])
compiler = PhoenixCompiler(optimization_level=2)
optimized_trotter_step = compiler.compile(op, trotter_steps=1)

Internally the compiler groups Pauli terms by their non-trivial support, simplifies each group via Clifford conjugation in binary symplectic form, turns the resulting configurations into QuantumCircuit blocks, and finally schedules/optimizes those blocks with qiskit's transpiler passes. The current implementation targets the CNOT-native basis and exposes a trotter_steps knob for repeating the synthesized blocks; support for higher-order Trotterization and additional basis choices can be layered on top of the same API.

If you make use of Phoenix in your work, please cite the following publication:

@inproceedings{yang2025phoenix,
  author={Yang, Zhaohui and Ding, Dawei and Zhu, Chenghong and Chen, Jianxin and Xie, Yuan},
  booktitle={2025 62nd ACM/IEEE Design Automation Conference (DAC)}, 
  title={PHOENIX: Pauli-Based High-Level Optimization Engine for Instruction Execution on NISQ Devices}, 
  year={2025},
  volume={},
  number={},
  pages={1-7},
  doi={10.1109/DAC63849.2025.11133028}
}

Features

  • High-level compilation
  • Global optimization
  • ISA-independent

E.g., Illustration of the core optimization strategy

E.g., Hardware-agnostic compilation:

E.g., Hardware-aware compilation:

Requirements

Basic library requirements are lists in requirements.txt.

  • We align with the 1.2.4 version of qiskit across the published benchmarking results, since qiskit's O1/O2 has different built-in workflows within its 0.xx.x versions and 1.xx.x versions. Version 1.0+ is suitable for Phoenix.
  • Originally, Paulihedral and Tetris require version 0.23.x and version 0.43.x of Qiskit. In this code repo, they can also be soomthly tested under Qiskit-1.2.4.

Benchmarking description

Benchmark suites:

  • UCCSD: 16 molecule simulation programs from benchmarks from TKet benchmarking. We use this suite for fine-grain benchmarking and real system analysis.

Benchmarking scripts: (under ./artifact_dac25/experiments/)

  • bench_single.py: Benchmarking given a compiler and input file (.qasm file for TKet, .json file for Paulihedral/Tetris/Phoenix)
  • bench_hamlib.py: Benchmarking given a compiler and a category of Hamlib benchmarks
  • bench_uccsd.py: Benchmarking given a compiler and a physical-qubit topology type (E.g., all2all, manhattan, sycamore) (Since TKet/Phoenix does no make hardware-ware co-optimization, manually set topology execept "all2all" are invalid. Instead, the hardware-ware compilation are conducted by executing another script uccsd_all2all_to_limited.py)
  • bench_utils.py: Utils used in benchmarking, within which the standard compilation passes of Phoenix and baselines are specified
  • uccsd_all2lall_to_limited.py: Compile all-to-all compilation results from TKet/Phoenix for UCCSD benchmarks to limited-connectivity topology (manhattan, sycamore)
  • uccsd_all2all_qiskit_opt.py: Further perform Qiskit O3 for logical-level synthesis results of Paulihedral/Tetris/Phoenix

Result files:

  • ./artifact_dac25/experiments/output_uccsd/<compiler>/<device>: Output circuits by some <compiler> (E.g., Tetris, Phoenix) for some kind of <device> (E.g., all2all, manhattan) from the UCCSD benchmark suite

  • ./artifact_dac25/experiments/output_uccsd/<compiler>_opt/all2all: Output circuits by some <compiler> (E.g., Tetris, Phoenix) when performing its logical-level synthesis with Qiskit O3 optimization procedure on logical circuits

Copyright and License

This project is licensed under the Apache License 2.0 -- see the LICENSE file for details.

About

PHOENIX (Pauli-based High-level Optimization ENgine for Instruction eXecution) is an application-specific quantum compiler for Hamiltonian simulation (VQA) programs.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published