Synopsis
This version adds numerous new synthesis functionalities and improves several command's efficiency. In particular, here are the most notable additions and changes:
- Added Tableau-based synthesis algorithms and its corresponding data structure
- Added synthesis from Boolean oracles or unitaries (experimental)
- Sped up qubit mapper
duostra
and basic quantum circuit optimizerqcir optimize
.
Changelog
Added
Synthesis/Verification Features
- Oracle synthesis (
qcir oracle
) (experimental): - Tableau data type and several associated algorithms #74
- T-merge
- Internal-H-Opt
- Matroid Partitioning (Naive implementation)
- Aaronson-Gottesman Clifford circuit synthesis
- H-Optimal Clifford circuit synthesis
- TODD algorithm #120
- Translate the quantum circuit to a specific gate set (experimental):
- SK algorithm to map
$R_Z$ gates to$\textup{Clifford}+T$ (experimental): - Synthesis of QCir from tensors:
convert tensor qcir
Support for new data types
- tensor IO by CSV files
- Added support for ECR gate #78
- Polymorphic
Operation
to model various quantum circuit operations - Reading and writing ZXLive's
.zxg
files (experimental)
Quality of Life
- Optionally reposition vertices for better display when calling
zx draw
- CLI navigation improvement #66
- use Alt + left/right to navigate between words
- up/down/pgup/pgdn now only retrieves history with matching suffixes
history
now show/output only successful commands ; usehistory [<+|-><u|e|i|s>]
to toggle the history outputs
typos
as the spelling checker for Qsyn. See_typos.toml
for the config. #100
Changed
Command Behavior Changes
- ZXGraph Extractor now only creates a new graph when
PERMUTE_QUBITS
is set to false #79 - Changed
qcir print -s|-g
printing styles #98 QCir
's qubit id is now always consecutive #102
API Breaking Changes
Command::add_subcommand
now requires a mandatory subcommand group name as input #74argparse::ArgumentParser::add_subparsers
now requires a mandatory subparser group name as input #74
Performances:
- Sped up
duostra
by replacingordered_hashmap
withvector
in appropriate places #118 - Sped up
qcir optimize
by replacingordered_hashset
withvector
inQC Optimizer
in appropriate places #121 - Revised ZXGraph extractor to optimize away more CZs when extracting circuit from ZX-diagrams #115
Project Quality/Misc
- Updated
README.md
to reflect the evolution of the project - separate qubit ID and row to different fields for ZXVertex #64
qsyn::zx::ZXGraph::read_zx
becomes the free functionqsyn::zx::from_zx
#64- Revised
.zx
file parser. #64 - Unify
qcir::QCirGate
,duostra::Gate
, anddevice::Operation
#94 - Duostra now directly uses
qcir::QCir
as its dependency graph #94 - Migrated SWAPs, ECRs, and all single qubit gates to the new gate type system #100
- automatically quit after execution if qsyn is launched with -c or -f flag #107
- decouple exit code with
CmdExecResult
#107 - Supports all floating-point types in more
Tensor
functions #95
Fixed
- Extractor no longer produces a lingering empty ZX-diagram
- Pivot boundary rule performing condition #63
- CMakeList spdlog variable pollution #66
- CMakeList compiling unnecessary libfort test files #66
- (API breaking change) fixed argparse cannot get the correct subparser if a parser tree contains several subparsers with the same name #74
- fix linting error when using clang-tidy-17 and -18
- fixed qc2zx terminates Qsyn abruptly when encountering unknown gates #78
- fixed wrong test case results for dofiles containing
qcir print
. #100 - fixed wrong test case ref for
qcir oracle
#100 - fixed
qcir print
andqcir print --stat
does not report correct gate count #102 - fixed some printing functions printing into the void #105
- "quit -f" now returns the exit code of the previous command instead of 131 #107
- Guarded more invalid QASM files #114
Removed
zx draw -cli
#64qcir::QCirGate
's API for control/target qubit: not a general property and not reliable #89duostra::Gate
,duostra::DependencyGraph
,device::Operation
,duostra::Checker
#94qcir::LegacyGateType
#101- Input support for
.qsim
and.quipper
: too unstable #101 ./qsyn -f <filename>
: Superceded by./qsyn [-v] <filename>