Two common issues that come up when attempting to run an algorithm on specific hardware platforms include:

  1. Gates inside of theoretical circuits are not directly compatible with the hardware’s native gateset.

  2. Gates or circuits are specified as unitary matrices, rather than specific gate decompositions.

If True-Q™ has access to the configuration of the system, it is possible to solve both of these issues. Our compilation tools take a circuit and rewrite it using only the gates and connections specified in a given device configuration file.



The same circuit can be transpiled for implementation on any number of hardware devices. Below we show an example of this.

How it Works

True-Q™ has a number of compilation tools which rely upon device-specific configurations. The compilation tools work by applying an ordered list of built-in and/or user-specified Passs to a circuit in order, see (Compiler for more details).

To give a feel for what a compiler definition looks like, here is the list of passes that defines the default compiler which is used when no custom list of Passs is provided:

import trueq as tq

Each item in the list above is one of True-Q™’s built-in Passs. Notice that RemoveId is applied twice; this is because the passes in a compiler are applied sequentially and in the order listed above it is possible that new identity gates may have appeared between the first application of RemoveId and the second.

Each pass takes a circuit, applies an operation, and returns an altered circuit. Details of how this functions can be found in Compiler.

Here are the premade Passs available for use with the compiler:


Pass that searches Circuits for a specific Cycle and when found, replaces it with a list of provided cycles.


A pass which ensures that any NativeGate which is defined from a list of GateFactorys obeys the involving restrictions of the GateFactorys.


Pass that moves operations forward in time.


Pass that marks cycles which contain multi-qubit gates if none of the existing cycles in the circuit have been marked with non-zero values.


Pass that takes a list of cycles, finds compatabile labels and gates, and merges them to a single gate as much as is possible.


A NCyclePass which iteratively attempts to decompose one-qubit gates into gates which are performable by the given list of GateFactorys.


An OperationReplacement which decomposes single qubit gates into 3 gates \(R(\theta) R(\phi) Z(\gamma)\), where the R gates are defined by \(Z(\theta) X(90) Z(-\theta)\) in time.


An OperationReplacement which expands arbitrary single qubit gates into the decomposition mode provided in a given Config.


A NCyclePass which iteratively attempts to decompose two-qubit gates into gates which are performable by the given list of GateFactorys.


An OperationReplacement which decomposes any SU(4) into a gate which is locally equivalent to CNOT, as long as such a gate exists inside of the given Config.


An OperationReplacement which checks if a given operation is a two-qubit gate that is equal to some static GateFactory in the provided list of GateFactorys up to single qubit operations, and if so, switch the Gate with a NativeGate built from the factory list plus the approriate single qubit gates.


An OperationReplacement which attempts to decompose the target gate using the specified number of gates found in the provided list of GateFactorys.


Checks to see if each gate is present in the provided list of GateFactorys exactly as defined, and if so, switch the Gate with a NativeGate from the list.


A NCyclePass that splits a cycle into individual operations, passes the operations to provided OperationReplacements in parallel, and recombines the output into a list of cycles.


This pass tracks phase accumulation on each qubit throughout a circuit, and compiles this phase information into parametric gates.


Pass which relabels all the labels and keys in a Circuit.


Pass which removes empty cycles from groups of cycles with matching markers.


Pass that removes single qubit identity gates from 1 Cycle.


An OperationReplacement where a list of OperationReplacements is stored, and each is attempted in order until no CompilationError is raised.



Compiler: Converting to a Gateset


Phase Tracking with the Compiler


Gate synthesis


Defining Custom Compilers