Public API
MonitoredQuantumCircuits.CNOT Type
CNOT() <: Operation
A singelton type representing the CNOT operation.
MonitoredQuantumCircuits.FiniteDepthCircuit Type
FiniteDepthCircuit{T<:Lattice,M<:Integer} <: Circuit
A circuit that has a finite depth, i.e. a fixed number of time steps. The circuit is defined on a lattice of type T and can contain operations that act on multiple qubits as well as multiple operations at the same time step.
MonitoredQuantumCircuits.HeavyChainLattice Type
HeavyChainLattice(length::Integer) <: Lattice
Create a heavy chain lattice with length
system qubits and length
-1 ancilla qubits inbeween.
MonitoredQuantumCircuits.HeavyHexagonLattice Type
HeavyHexagonLattice(sizeX::Integer, sizeY::Integer)
Create a heavy hexagon lattice with dimensions sizeX
and sizeY
. Thus the lattice has sizeX * sizeY
system qubits and ancilla qubits inbeween.
MonitoredQuantumCircuits.HeavySquareLattice Type
HeavySquareLattice(sizeX::Integer, sizeY::Integer)
Create a heavy square lattice with dimensions sizeX
and sizeY
. Thus the lattice has sizeX * sizeY
system qubits and ancilla qubits inbeween.
MonitoredQuantumCircuits.HexagonToricCodeLattice Type
HexagonToricCodeLattice(sizeX::Integer, sizeY::Integer)
Simmilar to the HeavyHexagonLattice
but with periodic boundary conditions in both directions (i.e. on a torus).
MonitoredQuantumCircuits.Measure Type
Measure() <: Operation
A singelton type representing the computational basis measurement operation.
MonitoredQuantumCircuits.RandomCircuit Type
RandomCircuit{T<:Lattice,M<:Integer} <: Circuit
A circuit that is generated randomly. The circuit is defined on a lattice of type T and can contain operations that act on multiple qubits as well as multiple operations at the same time step. The operations are chosen randomly from a given set of operations with a given probability.
MonitoredQuantumCircuits.Weak_XX Type
Weak_XX(t) <: Operation
A singelton type representing the weak XX operation.
MonitoredQuantumCircuits.Weak_YY Type
Weak_YY(t) <: Operation
A singelton type representing the weak YY operation.
MonitoredQuantumCircuits.Weak_ZZ Type
Weak_ZZ(t) <: Operation
A singelton type representing the weak ZZ operation.
MonitoredQuantumCircuits.XX Type
XX() <: Operation
A singelton type representing the XX operation.
MonitoredQuantumCircuits.YY Type
YY() <: Operation
A singelton type representing the YY operation.
MonitoredQuantumCircuits.ZZ Type
ZZ() <: Operation
A singelton type representing the ZZ operation.
MonitoredQuantumCircuits.EmptyFiniteDepthCircuit Method
EmptyFiniteDepthCircuit(lattice::Lattice)
Create an empty circuit on the given lattice.
MonitoredQuantumCircuits.apply! Method
apply!(circuit::FiniteDepthCircuit, executionPosition::Integer, operation::Operation, position::Vararg{Integer})
Apply the given operation at a given execution time step at the given position(s) in the circuit. The executionPosition can be used to schedule multiple operations at the same time step. However it is important to first check if the operations are compatible with each other (as of now this will show a warning which can be muted with mute=true
).
MonitoredQuantumCircuits.apply! Method
apply!(circuit::FiniteDepthCircuit, operation::Operation, position::Vararg{Integer})
Apply the given operation at the given position(s) in the circuit. Operations that act on more than one qubit need to have the same number of position arguments as qubits they act on, as well as a connection structure that is part of the lattice.
MonitoredQuantumCircuits.connectionGraph Method
connectionGraph(operation::Operation)
Return a graph representing the unique gate connections of the operation.
MonitoredQuantumCircuits.execute Method
execute(circuit::FiniteDepthCircuit, backend::Backend; verbose::Bool=true)
Execute the given circuit on the given backend. The backend needs to be a subtype of Backend. The verbose flag can be used to print additional information about individual execution steps.
MonitoredQuantumCircuits.execute Method
execute(generateCircuit::Function, parameters::Vector{T}, backend::Simulator, cluster::Remote.Cluster; ntasks_per_node=48, partition="", email="", account="", time="1:00:00", postProcessing=() -> nothing, name="simulation", max_nodes=10) where {(T <: Tuple)}
Remotly execute multiple circuits in parallel. Each circuit should be generated by the the generateCircuit function give one entry of the parameters vector. The backend needs to be a subtype of Simulator. The cluster should have allready been initialized (see Remote).
MonitoredQuantumCircuits.isClifford Method
isClifford(circuit::FiniteDepthCircuit)
Check if the circuit is a Clifford circuit, i.e. only contains Clifford operations. Returns true if all operations are Clifford operations, false otherwise.
MonitoredQuantumCircuits.isClifford Method
isClifford(operation::Operation)
Return whether the operation is a Clifford operation.
MonitoredQuantumCircuits.isSimulator Method
isSimulator(backend::Backend)
Return whether the backend is a simulator.
MonitoredQuantumCircuits.load Method
load(name::String)
Load a circuit from a file with the given name.
MonitoredQuantumCircuits.loadMany Method
loadMany(folder::String)
Load all circuits from files in the given folder.
MonitoredQuantumCircuits.nMeasurements Method
nMeasurements(circuit::FiniteDepthCircuit)
Get the number of measurements in the given circuit.
MonitoredQuantumCircuits.nMeasurements Method
nMeasurements(operation::MeasurementOperation)
Return the number of measurements the operation performs.
MonitoredQuantumCircuits.nQubits Method
nQubits(lattice::Lattice; countAncilla::Bool=false)
Return the number of qubits in the lattice. If countAncilla
is true
, then ancilla qubits are included.
MonitoredQuantumCircuits.nQubits Method
nQubits(operation::Operation)
Return the number of qubits the operation acts on.
MonitoredQuantumCircuits.save Method
save(name::String, circuit::FiniteDepthCircuit)
Save the given circuit to a file with the given name.
MonitoredQuantumCircuits.translate Method
translate(type::Type, circuit::FiniteDepthCircuit)
Translate a given circuit to a given backend representation type.
MonitoredQuantumCircuits.Qiskit.IBMBackend Type
IBMBackend <: MonitoredQuantumCircuits.QuantumComputer
A Qiskit backend that runs on IBM's quantum computers.
MonitoredQuantumCircuits.Qiskit.CliffordSimulator Method
CliffordSimulator()
A Qiskit Aer stabilizer simulator.
MonitoredQuantumCircuits.Qiskit.GPUStateVectorSimulator Method
GPUStateVectorSimulator()
A Qiskit Aer statevector simulator that runs on the GPU.
MonitoredQuantumCircuits.Qiskit.GPUTensorNetworkSimulator Method
GPUTensorNetworkSimulator()
A Qiskit Aer tensor network simulator that runs on the GPU.
MonitoredQuantumCircuits.Qiskit.StateVectorSimulator Method
StateVectorSimulator()
A Qiskit Aer statevector simulator.
MonitoredQuantumCircuits.QuantumClifford.GPUPauliFrameSimulator Type
GPUPauliFrameSimulator()
A QuantumClifford stabilizer Pauli frame simulator that runs on the GPU.
MonitoredQuantumCircuits.QuantumClifford.PauliFrameSimulator Type
PauliFrameSimulator()
A QuantumClifford stabilizer Pauli frame simulator.
MonitoredQuantumCircuits.QuantumClifford.TableauSimulator Type
TableauSimulator()
A QuantumClifford stabilizer simulator.
MonitoredQuantumCircuits.QuantumClifford.tmi Method
tmi(state::AbstractStabilizer, A, B, C)
Calculate the tripartite mutual information of a stabilizer state from QuantumClifford.
MonitoredQuantumCircuits.GUI.CircuitComposer! Method
CircuitComposer!(circuit::FiniteDepthCircuit)
Launch a GUI to visually compose and edit a quantum circuit.
MonitoredQuantumCircuits.Remote.addCluster Method
addCluster(user::String, host_name::String, identity_file::String; ssh_password="", remote_password="", workingDir="", load_juliaANDmpi_cmd="", MPI_use_system_binary=true)
Add a cluster to the list of clusters. The cluster will be saved in the file remotes.csv in the current directory. The cluster will be connected to and setup. The cluster will be disconnected after the setup.
MonitoredQuantumCircuits.Remote.disconnect Method
disconnect(cluster::Cluster)
Disconnect from the cluster.
MonitoredQuantumCircuits.Remote.downloadResults Method
downloadResults(cluster::Cluster, id::String; destination::String=".")
Download the results of a job with the id id
from the cluster.
MonitoredQuantumCircuits.Remote.getQueue Method
getQueue(cluster::Cluster)
Get your queued jobs on the cluster (i.e. squeue -u).
MonitoredQuantumCircuits.Remote.loadCluster Method
loadCluster(host_name::String)
loadCluster(id::Integer)
Load a cluster from the list of clusters. The cluster will be loaded from the file remotes.csv in the current directory.
MonitoredQuantumCircuits.Remote.showClusters Method
showClusters()
Show all clusters that have been added.