Skip to content

v0.7.0

Latest
Compare
Choose a tag to compare
@JoshuaLau0220 JoshuaLau0220 released this 14 May 13:56
046c9c7

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>