Releases: DVLab-NTU/qsyn
Releases · DVLab-NTU/qsyn
v0.7.0
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>
v0.6.3
v0.6.3
This release focuses on fixing correct behaviors on tensor conversions.
Related Pull Requests
Added
qcir adjoint
command
Changed
- Refactored QCir-to-Tensor codes to be more maintainable
- Refactored ZXGraph-to-Tensor codes to be more maintainable
Fixed
- Fixed
QC2TS
producing transposed tensors - Fixed
ZX2TS
producing transposed tensors - Fixed
QC2ZX
producing wrong ZXGraph for (Multi-control) Ry gates - Fixed
QC2TS
producing correct tensors when qubits are not in order - Outdated messages when no QCir/Device is available upon command execution
- Grammar mistakes of the
adjoint
commands
Removed
v0.6.3-rc2
v0.6.3-rc2
This version is a hotfix to the previous release and is selected as the develop version of QDA 2023 Final Project:
Changed
- Catch for
bad_alloc
when doing tensor calculation make lint
now don't check .hpp files (would be covered by .cpp file checks)
Fixed
- #42
- #44
- Extraction wrongly removes spiders with phases that are connected to two boundary nodes and only those two.
- Extraction OPT 0, OPT 1 wrongly filters out CNOTs operating on the same two qubits but control and target don't align
- Extraction OPT 0, OPT 1 sometimes produce incorrect elimination results.
- trivial-optimization no longer removes non-matching CZ gates
v0.6.3-rc1
v0.6.3-rc1
This version is a hotfix to the previous release and is selected as the version of QDA 2023 Fall HW4:
Fixed
- #39 (hotfix)
qsyn version 0.6.2
v0.6.2
This version is a hotfix to the previous release and is selected as the version of QDA 2023 Fall HW4:
Added
- MacOS test workflow; currently, we only test if the build succeeds.
Changed
qcir draw
now selects an appropriate drawer if the argument is not specified. This prevents the user from, for example, accidentally outputs a *.pdf file with thetext
drawer.- moved
qcir draw -d latex_source
toqcir write -f latex-qcircuit
. This command dumps a latex file that uses the packageqcircuit
to draw the circuits. - it is now possible to dump the output of
qcir write
directly to the console by omitting the output file argument. This eases piping in shell commands. hist -o <filepath>
now dump the command history "before" the command itself is added to the history. It also appends aquit -f
by default, which can be turned off by the flag--no-append-quit
.
Fixed
- command history is now cleaned up properly when the qsynrc file is first created and loaded.
- trying to
qcir print
aQCir
with some qubits and no gates no longer causes segfault. - converting from
QCir
toZXGraph
no longer yields a diagram with overlapping vertices. zx draw
now produces the latex document using\document[preview, boarder=2px]{standalone}
so that the ZXGraph is always contained in the document no matter the size and shape.- debug-level logging of
qcir optimize
no longer differs by a blank line when using different compilers. This is caused bystd::views::split
producing different results on different compilers
qsyn version 0.6.1
v0.6.1
This version is a hotfix to the previous release:
Changes
- Improves build flow by a Makefile wrapper.
Fixes
- [clang++] Fixed compilation errors due to
libc++
, which doesn't implementstd::from_chars
- [clang++] Fixed qsyn wrongly interrupting commands when compiled using
libc++
.std::thread
somehow works a bit differently betweenlibc++
andlibstdc++
. - CLI no longer outputs an annoying error message when trying to list content by pressing Tab but the directory is non-existent.
Previous release message for v0.6.0 (now retracted due to a major bug)
This release focuses on publicizing qsyn
, which raises the coding quality and user experiences.
Main Changes
- Migrated to CMake-based build flow. Adding dependencies is no longer a painful task.
- A new command-line interface and argument parser
- command namings are completely overhauled
- Improved coding styles and practices, embracing value-semantics and RAII more
- Properly namespacing the project