Skip to content

Releases: DVLab-NTU/qsyn

v0.7.0

14 May 13:56
046c9c7
Compare
Choose a tag to compare

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 optimizer qcir 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):
    • qcir translate command #78 #80
    • qcir optimize --tech to perform only architecture-aware optimizations
  • 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 ; use history [<+|-><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 #74
  • argparse::ArgumentParser::add_subparsers now requires a mandatory subparser group name as input #74

Performances:

  • Sped up duostra by replacing ordered_hashmap with vector in appropriate places #118
  • Sped up qcir optimize by replacing ordered_hashset with vector in QC 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 function qsyn::zx::from_zx#64
  • Revised .zx file parser. #64
  • Unify qcir::QCirGate, duostra::Gate, and device::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 and qcir 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 #64
  • qcir::QCirGate's API for control/target qubit: not a general property and not reliable #89
  • duostra::Gate, duostra::DependencyGraph, device::Operation, duostra::Checker #94
  • qcir::LegacyGateType #101
  • Input support for .qsim and .quipper : too unstable #101
  • ./qsyn -f <filename>: Superceded by ./qsyn [-v] <filename>

v0.6.3

11 Feb 16:54
57d35cd
Compare
Choose a tag to compare

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

26 Dec 16:24
3b6c19d
Compare
Choose a tag to compare

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

10 Dec 20:09
37158f5
Compare
Choose a tag to compare

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

qsyn version 0.6.2

04 Dec 19:37
62a2ed4
Compare
Choose a tag to compare

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 the text drawer.
  • moved qcir draw -d latex_source to qcir write -f latex-qcircuit. This command dumps a latex file that uses the package qcircuit 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 a quit -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 a QCir with some qubits and no gates no longer causes segfault.
  • converting from QCir to ZXGraph 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 by std::views::split producing different results on different compilers

qsyn version 0.6.1

28 Nov 03:51
Compare
Choose a tag to compare

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 implement std::from_chars
  • [clang++] Fixed qsyn wrongly interrupting commands when compiled using libc++. std::thread somehow works a bit differently between libc++ and libstdc++.
  • 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