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
 functools.partial(<class 'trueq.compilation.common.RemoveId'>, marker=None),

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, sandwiches it between two other (optional) 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 takes two Cycles, and moves gates preferentially to one side.


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 two cycles, finds compatabile labels and gates, then 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.


An OperationReplacement which decomposes single qubit gates into U1, U2, or U3 gates found inside of the provided list of GateFactorys.


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 provided gate up to a given depth using 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 accepts one cycle and returns the cycle if it contains any operations.


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