0.6.1 (October 2020)

Minor New Features:

  • New pass generator RenameQubitsPass

New Supported Backends:

  • Devices from IonQ (via separate pytket-ionq module)

0.6.0 (September 2020)

Major New Features:

  • Windows support

  • Phase-aware circuits

  • New box type for applying quantum controls to arbitrary quantum operations

  • New tailoring module containing tools for noise tailoring

  • Circuit transpose method

  • Optimization levels for default backend compilation passes

  • New serialization methods for circuits and results

  • New online user manual

Minor New Features:

  • New gate type OpType.PhasedISWAP

  • Expectations of non-Hermitian operators (when supported by backend)

  • Greater control over graph-colouring algorithms

  • Improved Clifford simplification

  • Retrieval of gate set from GateSetPredicate

  • New Backend.cancel method

  • New name attribute for circuits.

  • Backends can be wrapped as Qiskit backends for use in Qiskit software.

  • IBMQEmulatorBackend added to emulate IBMQBackend behaviour, with simulator execution.

New supported backends:

  • Devices and simulators from Amazon Braket (via separate pytket-braket module)

  • Qulacs simulator (via separate pytket-qulacs module)

API changes:

  • Retrieval of shots, counts, state and unitary directly from ResultHandle is no longer supported: either use Backend.get_shots(Circuit) or Backend.get_result(ResultHandle).get_shots() (etc).

  • Backend.default_compilation_pass is no longer a property but a method.

  • QubitMap is replaced by a Python dictionary.

  • Bit ordering of condition_value for conditionals now follows QASM convention (opposite to before, now [0, 1] corresponds to value 2).


  • Various small bug fixes

Known issues:

  • There is an issue with the use of symbolic circuits on Windows, causing memory access violations in some circumstances.

Compatible extension versions:

  • pytket-aqt: 0.3.0

  • pytket-braket: 0.2.0

  • pytket-cirq: 0.5.0

  • pytket-honeywell: 0.4.0

  • pytket-projectq: 0.5.0

  • pytket-pyquil: 0.6.0

  • pytket-pyzx: 0.5.0

  • pytket-qiskit: 0.6.0

  • pytket-qsharp: 0.6.0

  • pytket-qulacs: 0.3.0

0.5.7 (August 2020)

Number of bugs fixed including:

  • OpType.Reset added to QASM conversion

  • Bugfix for CnX with n=4, n=5

  • Correct Node IDS for FullyConnected Architecture.

0.5.5 (June 2020)

Major New Features:

  • Redesigned algorithm for CliffordSimp, improving speed and identifying more cases for optimisation

Minor New Features:

  • New gates added: OpType.Sycamore and OpType.ISWAPMax

  • New class Graph for visualising circuit structure


  • First parameter of OpType.FSim gate corrected to have range \([0, 2\pi)\)

  • New QubitPauliOperator and related classes replace use of OpenFermion’s QubitOperator

  • Significant optimisation of pauli_tensor_matrix and operator_matrix

0.5.4 (May 2020)

Minor New Features:

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


  • Rename measurement module to partition


  • 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 parameterised 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


  • 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 QubitErrorContainer 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


  • 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


  • 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, parameterised 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


  • 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)


  • 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


  • 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)


  • Minor bug fixes, examples and documentation

0.2.1 (June 2019)


  • 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 (

  • 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


  • 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)


  • 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)


  • Bug fix patch for routing and performance improvements

0.1.3 (March 2019)


  • 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


  • 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 tket’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


  • 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