Changelog

0.5.3 (May 2020)

Minor New Features:

  • Method to generate a circuit from a sequence of QubitOperator terms

Updates:

  • Rename measurement module to partition

Bugfixes:

  • Fix invalid cancellation of certain controlled rotations

0.5.2 (April 2020)

Major New Features:

  • Routing, gate decomposition, and basic optimisations can work around conditional gates and mid-circuit measurements

  • New high-level optimisation routine for Trotterised Hamiltonians

  • Measurement reduction via Pauli term diagonalisation

  • Inspection of the status of circuit execution on asynchronous backends

  • Error mitigation facilities via the SPAM method

  • Introduction of the Program class for specifying routines with classical control flow

Minor New Features:

  • Improved error messages when circuits cannot be run on a backend

  • Generalised Circuit.depth_by_type() to allow sets of gate types

  • A selection of optimisation passes are parametrised by pattern for decomposing into CXs

  • New Architecture subclass, FullyConnected, added

  • New gates added: OpType.ESWAP and OpType.FSim

  • Additional utility methods for permuting qubits of statevectors

  • Inspection of any implicit permutations within the Circuit dag structure

  • Inspection of free symbols in a circuit

  • Inspection of detailed gate errors from a Device

  • Additional methods for parsing/producing QASM through strings and streams

  • Ability to enable internal logs

Updates:

  • Cleaner addition of conditions to gates via kwargs

  • UnitID objects are specialised into either Qubit or Bit objects, with more natural constructors

  • Renamed many passes to give a uniform naming convention

  • Getters on Architecture, Device, GateError, and GateErrorContainer made into readonly properties

  • Backend-specific runtime arguments (e.g. simulator seeds) are now passed in via kwargs

  • Stability improvements and bug fixes

  • Updated documentation and additional examples

  • Stricter namespacing (most classes must be imported from submodules rather than top level)

  • Python 3.8 support

Deprecations:

  • Calling get_counts(), get_shots() or get_state() on a Backend object with a Circuit argument is deprecated in favour of ResultHandle.

New supported backends:

  • AQT devices and simulators (via separate pytket_aqt module)

  • Honeywell devices (via separate pytket_honeywell module)

  • Q# simulators and resource estimator (via separate pytket_qsharp module)

0.4.1 (December 2019)

New Features:

  • New classes for placement of logical qubits from Circuit to physical qubits from Device or Architecture

  • Data from backends can be returned in either increasing lexicographical order of (qu)bit identifiers (the familiar ordering used in most textbooks) or decreasing order (popular with other quantum software platforms) using the BasisOrder enum

Updates:

  • Updated documentation and additional examples

  • OptimiseCliffordsZX pass removed, FullPeepholeOptimise pass added

  • New architectures added, including SquareGrid, HexagonalGrid, RingArch, TriangularGrid and CyclicButterfly

  • Device information from Device can now be returned

  • Stability improvements and bug fixes

0.4.0 (November 2019)

New Features:

  • Contractural compilation passes with guarantees on how they transform circuits that satisfy their preconditions. This provides a uniform interface for optimisations, routing, and other stages of compilation

  • New “Box” gate types for encapsulating high-level structures (arbitrary subcircuits, parametrised composite gate definitions, unitaries, Pauli operators)

  • Simpler and more flexible structure for registers and names of qubits/bits, allowing for non-contiguous and multi-dimensional indices (referring to individual units, linear registers, grids, etc.)

  • Latex diagram output using Quantikz

  • The Device class to build on top of Architecture with error and timing information

  • Initial and final maps tracked throughout the entire compilation procedure using the CompilationUnit wrapper

  • Import circuits from Quipper source files

  • Utility methods for processing data from Backends

Updates:

  • All Backends refactored for more consistent interfaces, separation of data processing, and introducing batch circuit processing when possible

  • Routing improved to use distributed CX (BRIDGE) gates in addition to SWAP insertion

  • Cost function for noise-aware allocation of qubits improved to consider more sources of noise

  • Architecture objects can be specified with arbitrary node names, using the same UnitID objects and qubits/bits

  • Removed the PhysicalCircuit class in preference of just using Circuit objects

  • Generalised and sped up the gate commutation pass

  • Optimisation for redundant gate removal now removes diagonal gates before measurements

  • Support for custom gate definitions in QASM input

  • Support for a greater fragment of sympy expressions in gate parameters

  • Stability improvements and bug fixes

  • Updated documentation and additional examples

0.3.0 (August 2019)

New Features:

  • More options for circuit routing, including noise-aware allocation of qubits

  • Basic support for generating circuits with classical conditions and multiple registers

  • ForestBackend for running circuits on Rigett’s QVM simulators and QCS

  • AerUnitaryBackend for inspecting the full unitary of a circuit

  • Chaining gate commands

  • Primitive QASM<->Circuit (import and export)

Updates:

  • Simplified conversions for pytket_qiskit, going straight to/from QuantumCircuit rather than DAGCircuit

  • CSWAP gate added

0.2.3 (July 2019)

New Features:

  • Decomposition Transform for controlled gates

Updates:

  • Exposed additional gate types into Pytket

  • Fixed bug in add_circuit

  • Fixed routing bug

  • Made run behaviour more sensible for backends

0.2.2 (June 2019)

Updates:

  • Minor bug fixes, examples and documentation

0.2.1 (June 2019)

Updates:

  • Extra support for appending Circuits from Matrices and Exponents

  • More docs and examples

  • Fixed bugs in backends

0.2.0 (June 2019)

New Features:

  • Support for circuits and simulation using ProjectQ (0.4.2)

  • Support for conversion to and from PyZX (https://github.com/Quantomatic/pyzx)

  • Interface to many new optimisation passes, allowing for custom passes

  • Circuit compilation using symbolic parameters

  • New interface to routing

  • Enabled noise modeling in the AerBackend module

Updates:

  • Qiskit support updated for Qiskit 0.10.1 and Qiskit Chemistry 0.5

  • Pytket Chemistry module has been removed, to be part of the separate Eumen package

  • Bug fixes and performance improvements to routing

0.1.6 (April 2019)

Updates:

  • Routing can return SWAP gates rather than decomposing to CNOTs

  • Decomposition and routing bug fixes

0.1.5 (April 2019)

New Features:

  • Enabled conversions from 4x4 unitary matrices to 2 qubit circuit

0.1.4 (April 2019)

Updates:

  • Bug fix patch for routing and performance improvements

0.1.3 (March 2019)

Updates:

  • Qiskit support updated for Terra 0.7.3, Aqua 0.4.1, and Chemistry 0.4.2

  • Bug fixes in routing

0.1.2 (February 2019)

New Features:

  • Support for circuits from Rigetti pyQuil (2.3)

  • New interface for constructing and analysing circuits in pytket directly

  • Named classical registers for measurements

Updates:

  • Documentation and tutorial improvements

  • Bug fixes in routing and optimisations

  • Minor API changes for notational consistency

0.1.0 (December 2018)

New Features:

  • Support for circuits and architectures from IBM Qiskit (0.7)

  • pytket.qiskit.TketPass allows pytket to be plugged in to the Qiskit compilation stack to take advantage of t|ket>’s routing and optimisations

  • New Chemistry package featuring an implementation of the Quantum Subspace Expansion to work within or alongside Qiskit Aqua (0.4)

  • Optimisation passes introduced for powerful circuit rewriting before routing, and safe rewriting after routing

Updates:

  • Cirq functionality supports Cirq 0.4

  • Refactoring into modules

0.0.1 (July 2018)

New Features:

  • Support for circuits and architectures from Google Cirq (0.3)

  • Routing and placement procedures available for manipulating circuits to satisfy device specifications