Releases: DVLab-NTU/qsyn
Releases · DVLab-NTU/qsyn
v0.8.0
🚀 New Features
- Dynamic Extraction by @chinyi0523 in #137
- Feat/phase teleport and graysynth by @JoshuaLau0220 in #138
- MST-based Resynthesis by @JoshuaLau0220
- Feat/causal flow opt by @JoshuaLau0220 in #143
- Merge Develop branch into Main by @jimmy312495 and @arttr1521 in #147
🔧 Refinement
- Restructure ZXRule and Simplifier
- Make command usage and comments more helpful
- Refactor STL usage
🐛 Bug Fixed
- Fix qcir equiv prematurely applies TODD by @JoshuaLau0220 in #134
- Fix bad extractor ctor param order leading to wrong initialization
- Fix compilation error due to unstaged blocks
- Fix dependency issues for llvm MacOS tests
- Fix compilation error due to unstaged blocks
- Fix qasm reading error
New Contributors
- @jimmy312495 made their first contribution in #147
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
duostraand 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
Operationto model various quantum circuit operations - Reading and writing ZXLive's
.zxgfiles (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
historynow show/output only successful commands ; usehistory [<+|-><u|e|i|s>]to toggle the history outputs
typosas the spelling checker for Qsyn. See_typos.tomlfor the config. #100
Changed
Command Behavior Changes
- ZXGraph Extractor now only creates a new graph when
PERMUTE_QUBITSis set to false #79 - Changed
qcir print -s|-gprinting styles #98 QCir's qubit id is now always consecutive #102
API Breaking Changes
Command::add_subcommandnow requires a mandatory subcommand group name as input #74argparse::ArgumentParser::add_subparsersnow requires a mandatory subparser group name as input #74
Performances:
- Sped up
duostraby replacingordered_hashmapwithvectorin appropriate places #118 - Sped up
qcir optimizeby replacingordered_hashsetwithvectorinQC Optimizerin appropriate places #121 - Revised ZXGraph extractor to optimize away more CZs when extracting circuit from ZX-diagrams #115
Project Quality/Misc
- Updated
README.mdto reflect the evolution of the project - separate qubit ID and row to different fields for ZXVertex #64
qsyn::zx::ZXGraph::read_zxbecomes the free functionqsyn::zx::from_zx#64- Revised
.zxfile parser. #64 - Unify
qcir::QCirGate,duostra::Gate, anddevice::Operation#94 - Duostra now directly uses
qcir::QCiras 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
Tensorfunctions #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 printandqcir print --statdoes 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
.qsimand.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 adjointcommand
Changed
- Refactored QCir-to-Tensor codes to be more maintainable
- Refactored ZXGraph-to-Tensor codes to be more maintainable
Fixed
- Fixed
QC2TSproducing transposed tensors - Fixed
ZX2TSproducing transposed tensors - Fixed
QC2ZXproducing wrong ZXGraph for (Multi-control) Ry gates - Fixed
QC2TSproducing correct tensors when qubits are not in order - Outdated messages when no QCir/Device is available upon command execution
- Grammar mistakes of the
adjointcommands
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_allocwhen doing tensor calculation make lintnow 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 drawnow selects an appropriate drawer if the argument is not specified. This prevents the user from, for example, accidentally outputs a *.pdf file with thetextdrawer.- moved
qcir draw -d latex_sourcetoqcir write -f latex-qcircuit. This command dumps a latex file that uses the packageqcircuitto draw the circuits. - it is now possible to dump the output of
qcir writedirectly 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 -fby 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 printaQCirwith some qubits and no gates no longer causes segfault. - converting from
QCirtoZXGraphno longer yields a diagram with overlapping vertices. zx drawnow 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 optimizeno longer differs by a blank line when using different compilers. This is caused bystd::views::splitproducing 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::threadsomehow 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