Skip to content

Public API

MonitoredQuantumCircuits.CNOT Type
julia
CNOT() <: Operation

A singelton type representing the CNOT operation.

source

MonitoredQuantumCircuits.FiniteDepthCircuit Type
julia
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.

source

MonitoredQuantumCircuits.H Type
julia
H() <: Operation

A singelton type representing the H operation.

source

MonitoredQuantumCircuits.HeavyChainLattice Type
julia
HeavyChainLattice(length::Integer) <: Lattice

Create a heavy chain lattice with length system qubits and length-1 ancilla qubits inbeween.

source

MonitoredQuantumCircuits.HeavyHexagonLattice Type
julia
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.

source

MonitoredQuantumCircuits.HeavySquareLattice Type
julia
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.

source

MonitoredQuantumCircuits.HexagonToricCodeLattice Type
julia
HexagonToricCodeLattice(sizeX::Integer, sizeY::Integer)

Simmilar to the HeavyHexagonLattice but with periodic boundary conditions in both directions (i.e. on a torus).

source

MonitoredQuantumCircuits.Lattice Type
julia
Lattice

Abstract type for lattices.

source

MonitoredQuantumCircuits.Measure Type
julia
Measure() <: Operation

A singelton type representing the computational basis measurement operation.

source

MonitoredQuantumCircuits.RandomCircuit Type
julia
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.

source

MonitoredQuantumCircuits.Weak_XX Type
julia
Weak_XX(t) <: Operation

A singelton type representing the weak XX operation.

source

MonitoredQuantumCircuits.Weak_YY Type
julia
Weak_YY(t) <: Operation

A singelton type representing the weak YY operation.

source

MonitoredQuantumCircuits.Weak_ZZ Type
julia
Weak_ZZ(t) <: Operation

A singelton type representing the weak ZZ operation.

source

MonitoredQuantumCircuits.XX Type
julia
XX() <: Operation

A singelton type representing the XX operation.

source

MonitoredQuantumCircuits.YY Type
julia
YY() <: Operation

A singelton type representing the YY operation.

source

MonitoredQuantumCircuits.ZZ Type
julia
ZZ() <: Operation

A singelton type representing the ZZ operation.

source

MonitoredQuantumCircuits.EmptyFiniteDepthCircuit Method
julia
EmptyFiniteDepthCircuit(lattice::Lattice)

Create an empty circuit on the given lattice.

source

MonitoredQuantumCircuits.apply! Method
julia
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).

source

MonitoredQuantumCircuits.apply! Method
julia
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.

source

MonitoredQuantumCircuits.connectionGraph Method
julia
connectionGraph(operation::Operation)

Return a graph representing the unique gate connections of the operation.

source

MonitoredQuantumCircuits.execute Method
julia
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.

source

MonitoredQuantumCircuits.execute Method
julia
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).

source

MonitoredQuantumCircuits.isClifford Method
julia
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.

source

MonitoredQuantumCircuits.isClifford Method
julia
isClifford(operation::Operation)

Return whether the operation is a Clifford operation.

source

MonitoredQuantumCircuits.isSimulator Method
julia
isSimulator(backend::Backend)

Return whether the backend is a simulator.

source

MonitoredQuantumCircuits.load Method
julia
load(name::String)

Load a circuit from a file with the given name.

source

MonitoredQuantumCircuits.loadMany Method
julia
loadMany(folder::String)

Load all circuits from files in the given folder.

source

MonitoredQuantumCircuits.nMeasurements Method
julia
nMeasurements(circuit::FiniteDepthCircuit)

Get the number of measurements in the given circuit.

source

MonitoredQuantumCircuits.nMeasurements Method
julia
nMeasurements(operation::MeasurementOperation)

Return the number of measurements the operation performs.

source

MonitoredQuantumCircuits.nQubits Method
julia
nQubits(lattice::Lattice; countAncilla::Bool=false)

Return the number of qubits in the lattice. If countAncilla is true, then ancilla qubits are included.

source

MonitoredQuantumCircuits.nQubits Method
julia
nQubits(operation::Operation)

Return the number of qubits the operation acts on.

source

MonitoredQuantumCircuits.save Method
julia
save(name::String, circuit::FiniteDepthCircuit)

Save the given circuit to a file with the given name.

source

MonitoredQuantumCircuits.translate Method
julia
translate(type::Type, circuit::FiniteDepthCircuit)

Translate a given circuit to a given backend representation type.

source

MonitoredQuantumCircuits.Qiskit.IBMBackend Type
julia
IBMBackend <: MonitoredQuantumCircuits.QuantumComputer

A Qiskit backend that runs on IBM's quantum computers.

source

MonitoredQuantumCircuits.Qiskit.CliffordSimulator Method
julia
CliffordSimulator()

A Qiskit Aer stabilizer simulator.

source

MonitoredQuantumCircuits.Qiskit.GPUStateVectorSimulator Method
julia
GPUStateVectorSimulator()

A Qiskit Aer statevector simulator that runs on the GPU.

source

MonitoredQuantumCircuits.Qiskit.GPUTensorNetworkSimulator Method
julia
GPUTensorNetworkSimulator()

A Qiskit Aer tensor network simulator that runs on the GPU.

source

MonitoredQuantumCircuits.Qiskit.StateVectorSimulator Method
julia
StateVectorSimulator()

A Qiskit Aer statevector simulator.

source

MonitoredQuantumCircuits.QuantumClifford.GPUPauliFrameSimulator Type
julia
GPUPauliFrameSimulator()

A QuantumClifford stabilizer Pauli frame simulator that runs on the GPU.

source

MonitoredQuantumCircuits.QuantumClifford.PauliFrameSimulator Type
julia
PauliFrameSimulator()

A QuantumClifford stabilizer Pauli frame simulator.

source

MonitoredQuantumCircuits.QuantumClifford.TableauSimulator Type
julia
TableauSimulator()

A QuantumClifford stabilizer simulator.

source

MonitoredQuantumCircuits.QuantumClifford.tmi Method
julia
tmi(state::AbstractStabilizer, A, B, C)

Calculate the tripartite mutual information of a stabilizer state from QuantumClifford.

source

MonitoredQuantumCircuits.GUI.CircuitComposer! Method
julia
CircuitComposer!(circuit::FiniteDepthCircuit)

Launch a GUI to visually compose and edit a quantum circuit.

source

MonitoredQuantumCircuits.Remote.addCluster Method
julia
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.

source

MonitoredQuantumCircuits.Remote.disconnect Method
julia
disconnect(cluster::Cluster)

Disconnect from the cluster.

source

MonitoredQuantumCircuits.Remote.downloadResults Method
julia
downloadResults(cluster::Cluster, id::String; destination::String=".")

Download the results of a job with the id id from the cluster.

source

MonitoredQuantumCircuits.Remote.getQueue Method
julia
getQueue(cluster::Cluster)

Get your queued jobs on the cluster (i.e. squeue -u).

source

MonitoredQuantumCircuits.Remote.loadCluster Method
julia
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.

source

MonitoredQuantumCircuits.Remote.showClusters Method
julia
showClusters()

Show all clusters that have been added.

source