Getting Started
The framework consists out of three main parts. First is the qubit geometry / lattice, which represents the underlying qubits structure. Second is the circuit, which holds information about the operations applied to the qubits in a given lattice. The last part is the execution of the circuit, which can happen on various backends. As always, load MonitoredQuantumCircuits.jl (after installing it) using the using
keyword for the following code snippets to work
using MonitoredQuantumCircuits
Choose a Geometry
A Lattice
is a representation of qubits and connections between them (i.e., a graph). In general, it is only possible to apply operations to multiple qubits if they are connected in the lattice. Ancillary qubits should also be explicitly represented in the lattice. For more information see Geometries. To construct a lattice object, call a constructor, e.g.,
lattice = HeavyChainLattice(10)
Compose a Circuit
A circuit stores the Operations being applied to the qubits in a lattice. For more information see Circuits. To construct a lattice object, call a constructor, e.g.,
circuit = KitaevCircuit(lattice)
Or start an iterative construction by initializing an empty circuit
circuit = EmptyFiniteDepthCircuit(lattice)
Now you could continue with the CLI and call apply!
for different operations (or use convenience functions like H!(circuit)
), or launch a GUI using
GUI.CircuitComposer!(circuit)
Execute
To execute a quantum circuit, you first have to think about which Backend to use. Then, you can execute the circuit using
execute!(circuit::Circuit, backend::Backend)